Files
DemonGatanjieu-Anomalous_Mo…/docs/architecture/ui-flows.md
T

12 KiB
Raw Blame History

界面地图:点哪里、去哪里、为什么

这份是界面地图的手写部分,只写代码里看不出来的东西:每一块是干什么的、点了以后发生什么、为什么这样设计、同一个东西统一叫什么。 具体在哪个文件、哪一行、调哪个接口,不要在这里找,直接问代码(永远是最新的):

node tools/ui_map.mjs find 屏幕上的字      比如 find AI 改副本:哪个文件画的、样式在哪、调哪个接口、后端哪个函数
node tools/ui_map.mjs find /anomalous/ai_tasks    这个接口由谁处理、前端谁在调
node tools/ui_map.mjs find ui_ai_marker.js        这个文件显示哪些字、调哪些接口、被谁用
node tools/ui_map.mjs build                写出 docs/ui-map.md:按页面列出全部文件、文字和接口(不进版本库)

写这份文档的规矩(node tools/check_structure.mjs 会检查):

  • 「」 里只放屏幕上的原字(中文界面),一个字都不能差;太长的句子可以只写开头,结尾加 …。界面改了字,检查就会报错,提醒你回来改这里。
  • 文件名和接口用反引号,比如 ui_ai_task_canvas.js、/anomalous/ai_tasks/{task_id};不存在了检查也会报错。
  • 最后的“统一叫法”表:一个东西只用一个名字。表里“不再用”的词,只要还出现在界面文字里,检查就报错。

AI 工作台

三栏:左边任务列表,中间一个任务的时间线,右边侧栏。窗口窄时左边和中间轮流显示,右边变成标签页。

左栏:任务列表(ui_ai_task_list.js)

看到的 点了以后 后端
「新任务」 写一句要 AI 做什么(可以空着),任务显示“等 AI 接手”;下一个来调用的 AI 直接接手它,不会接在旧任务后面 POST /anomalous/ai_tasks
「连接 AI」 弹出连接说明:地址、复制给 AI 的那句话、各个软件怎么加(ui_ai_connect.js) 无
「关卡」 AI 做哪些事要先问你(改画布、用显卡、下载……),还有 AI 怎么等你回答、怎么等跑图(ui_ai_gate.js) /anomalous/ai_gates
「全部」「进行中」「等你回答」「出错」 只筛这一栏,不改任何东西 无
一个任务 中间显示它。看过的、鼠标停过的马上出来,再悄悄补上最新内容(ai_task_cache.js) GET /anomalous/ai_tasks/{task_id}

收起:标题栏最左边的按钮(「收起 / 展开任务列表…」)。收起后列表仍在左边排好、藏起来,鼠标碰到这个按钮、或者从页面往左移到最左边缘,下一帧就滑出来;离开后 0.35 秒收回,点了任务马上收回。

为什么:列表每 5 秒刷新一次,只重画变了的行(sync_rows.js),所以滚动位置不会跳、鼠标下面的行不会闪。

中间:任务的标题栏

看到的 点了以后 后端
「AI 改副本」 / 「AI 改当前画布」 打开二选一:「改副本」(先把当前工作流复制到新标签页,AI 只改副本)或「改当前画布」。点开才换,不会点一下就悄悄切换 POST /anomalous/ai_tasks/{task_id}(canvas)
「切到副本」 切到这个任务的副本标签页,并显示画布(mcp_task_tab.js) 无
「撤销画布上的改动」 按操作记录把 AI 在画布上的改动一步步撤销(canvas_undo.js) 无
「改名」 / 「从列表移除」 移除只删这条记录,图、画布、工作流都不动 POST /anomalous/ai_tasks/{task_id}
「接着哪个任务…」 把这个任务接在另一个后面,两边都显示链接(ui_ai_task_links.js) POST /anomalous/ai_tasks/{task_id}(from)

AMB 更新以后,AI 软件还拿着旧的工具列表来调用时,标题栏下面出现一行黄字「AI 软件拿的还是旧的工具列表,会多走弯路。请重新连接:Antigravity 重启一下,或在它的 MCP 设置里把 anomalous 关掉再打开;然后开个新对话。」,AI 那边也会收到同样的提醒(mcp_directory.stale,按每个 AI 软件上次取的列表比对)。AI 软件重新取工具列表(tools/list)后这行自动消失。

标题栏右上角的一排是侧栏的开关:「展台」「节点结构」「决策」「素材」「成果」(ui_ai_side_views.js),同一时间只开一个。

中间:等 AI 接手的任务(ui_ai_ready.js)

「新任务」之后、AI 还没来时,中间是「等 AI 接手这个任务」一页:

  • 最上面是「把这句话发给你的 AI」和「复制这句话」,页面往下滚时它停在顶上,挑完图不用再翻回去找。
  • 下面都是可选的,收成两行,点了才展开:「写一句要做什么」(会成为任务名,那句话也跟着带上它)、「从图库挑图给 AI」(点一张就放到最下面的留言框,再点拿掉)。已经备好的东西列在下面。
  • 最下面是还没连上 AI 时的「查看连接方法」。

为什么:以前分“开始”“备料”两页,去备料以后还要切回来复制那句话;第一步还是一个输入框,看着像必须填。现在主要的一步放最前面,可选的都收起来。那句话也不再叫 AI 一接手就停下来问你,而是照任务里的交代做,没交代才问。

AI 问你的问题(ui_ai_panel.js、ui_ai_now.js、ui_ai_gate.js)

展台里的选择题、留言框上方的提问条、关卡卡片都按同一个做法:

  • 选项是一按就发出去的按钮,右边有箭头,上面写着「点一个就发给 AI」;点了马上变成选中的样子,再显示“已发送 / AI 已收到”。
  • 「让 AI 定」放在问题的右上角,是一个虚线小按钮,不跟选项挤在一起,免得被当成“确认”。
  • 自己写的那一行默认收起:「都不是,我自己说…」,关卡卡片上是「说说想怎么改…」,点了才出输入框。
  • 写了一半的回答一直留着(只留在这个页面里):AI 又问了新问题、读走了另一个回答,问题重画时字、光标位置和选区都还在,那一行也不会收起;展台和底部提问条同步同一道题的草稿,刷新只把焦点还给原来正在编辑的位置;这个问题一直排在提问条最前面。窄窗口里你正在打字时,新来的问题只点亮「展台」标签,不把你切过去。
  • 只有真按键才算“在打字”(每几秒告诉一次服务器):停手一分钟以后照常算时间,光标停在框里不算。动手写过回答的问题,到时间也不会按推荐的替你选,AI 停下等你。

为什么:看到一个框,人就以为要填;选项和下面的按钮排在一起,人就以为要先选再确认。写到一半的话被清掉、被切走,或者人走开了被替你选掉,都比多等一会儿糟。

中间:时间线

  • 从上往下读,编号 1、2、3……;AI 连着查资料、连着改画布的几步折成一行(ui_ai_chain.js),点开看每一步。
  • 每一步下面写它做了什么(ui_ai_step_body.js),出的东西能直接去:图片进看图器、模型进模型页、画布改动能定位和撤销(ui_ai_results.js)。
  • 图片上鼠标移上去有工具(ui_ai_images.js):「图片与参数」、「保存为…」、勾两张对比,还有 ✎ 标注。
  • 时间线和展台里的图先用缩略图(/anomalous/output_thumbnail),显示得比缩略图大时才换原图,打开任务不用等大图。

标注:「标给 AI 看:哪里要改」(ui_ai_marker.js)

框、圈、箭头、画笔,每个标记写一句要怎么改;右边选「怎么改」:

  • 「交给 AI 判断」:AI 看说明自己决定。
  • 「只改标出的地方」:其余保持原样,框、圈、画笔和涂抹的地方做成遮罩放进 input 文件夹,AI 只重绘这些地方。用「涂重绘区」时自动选上。
  • 「整张重新出图」:按说明整张重画,不做局部重绘。

「发给 AI」以后(POST /anomalous/ai_tasks/{task_id}/marks),AI 下一步收到的第一句就是你选的改法,写明是你的要求(ai_marks.py)。时间线里这条标注写着「改法:{mode}」,方便核对 AI 有没有照做。

中间最下面:留言框(ui_ai_message.js)

  • 「给 AI 留言,比如:背景再亮一点。…」:Enter 发送(POST /anomalous/ai_tasks/{task_id}/message)。
  • 打 @ 提到素材和图(ui_ai_mention.js),开头打 / 是快捷指令(ui_ai_commands.js):/停止、/撤销、/展台、/节点结构、/素材、/副本、/当前画布 马上生效;/重跑、/解释、/继续 帮你写好一句话。
  • 「从图库选图给 AI」(ui_ai_gallery_pick.js),拖进来或粘贴截图(ui_ai_drop.js,存进输出文件夹的 ai_inbox)。
  • 留言框上面的一条(ui_ai_now.js):正在出图的进度、要你允许的事、AI 问你的问题;AI 停下时给出可以复制给它的句子,比如「继续」(ui_ai_call.js)。

为什么:AMB 不能主动叫醒外部的 AI。发出去的留言会等着,AI 下一次调用任何工具时一起收到(ai_panels.py 的 attach_pending),或者它来读回答时收到。AI 已经停了,就要你回 AI 软件里说一句,所以那里总有一句可以复制的话。

右栏:侧栏

开关 里面是什么 主要文件
「展台」 AI 画的面板,从上往下排,旧的在上、新的在下;要你回答的在这里回答(POST /anomalous/ai_tasks/{task_id}/answer)。来了新面板而你在往上看时,出现「↓ 查看最新」 ui_ai_side.js、ui_ai_panel.js、ui_ai_stage.js
「节点结构」 这次运行实际用的节点、和上次比改了什么 ui_ai_run_map.js
「决策」 你在面板上的选择、允许和拒绝、AI 记下的关键决定 ui_ai_decisions.js
「素材」 「给 AI 的素材」:挑模型、节点、搭配、工作流、提示词交给 AI;「来源」列表里鼠标所在的行会亮,选中的打勾 ui_ai_toolbox.js、ui_ai_facet_menu.js
「成果」 这个任务出的图、工作流、搭配、提示词、音频,按步骤排 ui_ai_outputs.js

设计上的固定做法

  • 从上往下读:时间线、展台都是旧的在上、新的在下;看最新的时候自动跟着往下,往上翻着看时不打断,只出现“去最新”的按钮。
  • 重画只重做变了的部分:工作台随时在刷新,滚动位置、打了一半的字、展开的东西都不能丢。
  • 会改东西的地方说清楚后果:二选一要写每一种是什么意思;删除写明删的是什么、不删什么。
  • 鼠标移上去要有反馈:列表行、菜单项悬停变亮,当前选中的有底色或打勾。
  • AI 改画布默认改副本:你正开着的工作流不被 AI 动。

统一叫法

说法 English 不再用 不再用(English)
副本(AI 改的那份工作流) copy 专用标签页、自己的标签页、新开标签页 own tab
素材(交给 AI 的模型、节点……) materials 材料 —
留言(你写给 AI 的话) message 消息 —
节点结构 node map 结构图、运行结构 node structure
连接 AI connect an AI 最近接入、接入过 —
撤销 undo 撤回 —
展台 stage 画板、舞台 —
成果 results 产出 —
关卡 gates 闸门 —
工作流(存下的整套工作流,“工作流”页的卡片) workflow 配方(配方包、搭配方案除外) recipe(recipe package 除外)、recipes
配方包(把一个工作流打包发给别人的 .zip) recipe package — —
搭配(主模型 + LoRA + 提示词) combo — —

“不再用”里可以写例外,比如“配方(配方包、搭配方案除外)”:这两个词里的“配方”不算。{recipe} 这样的占位符也不算。

还没统一的

  • node tools/ui_map.mjs build 的最后一节列出没有文件用到的文字(2026-10-25 清理过一次,当时为 0),清理前先确认不是拼出来的 key、也不是后端错误信息当 key 用的(t(error.message))。