Proxyos Weekly 011
Laurence-042
- One minute read - 67 wordsTL;DR 概览
Terminal总算是搞定了!fastai确实咕了,爽玩ComfyUI
本期目标
- 修好Terminal
进展速记(Changelog)
新增:
变更:
- 从之前的ConPTY方案改成了自己做PTY,结合BetterProcess来做异步程序调用与交互
修复:
- Terminal修好了
主要进展内容
Terminal修复完成
之前我说“目前我在使用“gd命令每发一行,同步给pty发一行以#开头的命令,并在回显中过滤掉#命令及其回显”的思路,不过它的状态转移我还没想清楚,直接扔给claude只会得到水多加面面多加水的结果,所以我得好好想想再继续”,但是实际思考后发现由于PTY本身的复杂性,根本不可能以可维护的方式将其实现
我写了篇长文边写边理思路,然后提出了几个方案又一一否决
方案1-拦截
通过在PTY里执行#__PROXYOS_SYNC__#这种注释来在标记行的同时让PTY光标进入下一行。同时拦截包含这种标记的行,避免其被显示到XTerm上。以此在不影响Xterm输出的情况下把PTY的光标同步到GDScript命令回显的下一行。#__PROXYOS_SYNC__#不可在 GDScript 输出中使用。
- 优势
- 完整支持命令行为,对于那些在输出中主动设置颜色、换行之类的命令支持良好
- 劣势
- GDScript命令输出存在单行长度限制,这会降低可维护性
- PTY 行为并非稳定规范,后续变更可能导致完全乱套(比如移除了多行输入的
>>行为) - GDScript命令输出较长时可能耗时过长,且每次都整页刷新的PTY输出可能会导致性能问题(类似top命令那样的)
方案2-单纯把PTY当异步os.execute
不再使用完整PTY,而是由自己维护XTerm,只在用户按下enter发送命令时,判断是不是GDScript命令。
是的话命令输出直接输到XTerm里
不是的话暂停侦听PTY,在PTY里使用三次Ctrl+C清除当前命令、潜在执行中的程序、兜底一次来获取单纯的输入提示符格式,再次启动侦听后发送命令。从PTY响应中过滤掉命令输入行、过滤掉设置光标的CSI、识别并替换输入提示符为自定义的输入提示符
- 优势
- 兼容性良好,实现简单
- 劣势
- PTY的输入提示符在不同系统上五花八门,即使是同一个系统不同版本的PTY程序都有些许不同,适配较为困难
- 无法支持类似npm那种会在输出中使用CSI来实现转圈的
\|/-的行为,反而会输出一堆这种序列 - 三次Ctrl+C可能仍有不兼容情况
方案3-直接自己搞个有cd、ls的极简console
之前一直折腾PTY主要是因为OS.execute阻塞,而OS.create_process又没法拿到stdout输出
但现在发现了BetterPorcess,这就好办了
- 优势
- 兼容性极佳
- 劣势
- 难以处理方向键
- 本质上需要自己实现一个PTY
最终方案:基于方案3,尽量实现相关特性
目前支持的特性如下
- 右键复制/粘贴
- Ctrl+Shift+C粘贴
- Tab补全
- 自定义命令
- 自定义python脚本调用
- 自定义中间件来处理特殊输出
爽玩ComfyUI
哎,ComfyUI真不错。我发现我以前收藏的不少图实际上就是ComfyUI出来的
所以我更新了我的图片下载器,它可以识别到新老图片里的ComfyUI特征,然后重命名时给后缀名前面加个.comfy来备注
爽玩各种工作流和prompt,还找到个不错的模型/lora网站
瓶颈与问题清单
- 暂无
下期计划(Next)
- 完成逻辑图系统,考虑用TypeScript+Vue/React之类的搞一个ANORA原型,然后通过wry集成进游戏,通过wry的事件系统进行操作
- Node框架
- 分层Port
- Connection折叠/展开
- 逻辑图计算
- 简而言之就是之前的AWW的所有除了定制节点之外的基础计算和显示逻辑,时间有点紧,毕竟这些东西当时我用了好几个月内的工作间隙。但我觉得有善用claude应该能及时完成
试玩版
预计第一个可玩版本将在第二章的第一个涉及外部编程的游戏内容完成后推出