superun-ai-cli 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +25 -1
- package/README.md +25 -1
- package/dist/api/agent-command-api.d.ts +1 -1
- package/dist/api/agent-command-api.js +2 -1
- package/dist/api/agent-command-api.js.map +1 -1
- package/dist/commands/chat/message.js +1 -1
- package/dist/commands/chat/message.js.map +1 -1
- package/dist/commands/chat/state.js +3 -0
- package/dist/commands/chat/state.js.map +1 -1
- package/dist/commands/chat/style.js +7 -1
- package/dist/commands/chat/style.js.map +1 -1
- package/dist/commands/chat/wait.js +2 -1
- package/dist/commands/chat/wait.js.map +1 -1
- package/dist/commands/shared.d.ts +1 -0
- package/dist/commands/shared.js +1 -0
- package/dist/commands/shared.js.map +1 -1
- package/dist/contracts/cli-output.d.ts +52 -0
- package/dist/conversation/feature-progress.d.ts +2 -0
- package/dist/conversation/feature-progress.js +66 -0
- package/dist/conversation/feature-progress.js.map +1 -0
- package/dist/conversation/next-actions.d.ts +1 -1
- package/dist/conversation/next-actions.js +49 -10
- package/dist/conversation/next-actions.js.map +1 -1
- package/dist/conversation/session-waiter.d.ts +3 -0
- package/dist/conversation/session-waiter.js +24 -3
- package/dist/conversation/session-waiter.js.map +1 -1
- package/dist/conversation/task-progress-reader.d.ts +12 -0
- package/dist/conversation/task-progress-reader.js +232 -0
- package/dist/conversation/task-progress-reader.js.map +1 -0
- package/dist/conversation/task-progress.d.ts +13 -0
- package/dist/conversation/task-progress.js +228 -0
- package/dist/conversation/task-progress.js.map +1 -0
- package/dist/interactions/parsers/style-selection.d.ts +4 -0
- package/dist/interactions/parsers/style-selection.js +8 -0
- package/dist/interactions/parsers/style-selection.js.map +1 -1
- package/dist/output/writer.d.ts +4 -0
- package/dist/output/writer.js +19 -1
- package/dist/output/writer.js.map +1 -1
- package/dist/runtime.d.ts +9 -2
- package/dist/runtime.js +124 -18
- package/dist/runtime.js.map +1 -1
- package/package.json +2 -1
package/README.en.md
CHANGED
|
@@ -44,6 +44,18 @@ npm install -g .
|
|
|
44
44
|
|
|
45
45
|
If you already have a local checkout, use that directory and preserve any uncommitted changes. The build clears `dist` before generating files. Keep the source directory if your global command is linked to it.
|
|
46
46
|
|
|
47
|
+
## Publish to npm
|
|
48
|
+
|
|
49
|
+
Commit current changes, switch to `main`, and run:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npm run release
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
The script prints the previous version, runs `npm version patch`, prints the new version, publishes to npm with the `latest` tag, and runs `git push origin main --follow-tags`. Versioning creates a Git commit and tag. Publishing uses the existing `prepack` type check and build, and your local npm credentials; npm may prompt for two-factor authentication.
|
|
56
|
+
|
|
57
|
+
Each failure stops the sequence. If publication is uncertain, check the target version on npm first. If npm publication succeeded but Git push failed, retry only `git push origin main --follow-tags`. Publishing to `latest` affects existing CLI users through its built-in update logic.
|
|
58
|
+
|
|
47
59
|
## Help
|
|
48
60
|
|
|
49
61
|
After installation, run help separately. These commands do not start login or create a project:
|
|
@@ -76,7 +88,7 @@ superun-ai
|
|
|
76
88
|
│ ├── style # Manage creative styles
|
|
77
89
|
│ │ ├── generate <sessionId> # Generate style candidates
|
|
78
90
|
│ │ ├── list <sessionId> # List style batches
|
|
79
|
-
│ │ └── select <sessionId> <choiceId> # Choose a
|
|
91
|
+
│ │ └── select <sessionId> <choiceId> # Choose a style and generate the development plan
|
|
80
92
|
│ ├── demo <sessionId> # View the demo and record it as viewed
|
|
81
93
|
│ ├── develop <sessionId> # Keep the demo and plan development
|
|
82
94
|
│ ├── interaction # Answer or skip interactions
|
|
@@ -147,6 +159,14 @@ superun-ai chat stop <sessionId>
|
|
|
147
159
|
|
|
148
160
|
Write commands support `--no-wait`, returning as soon as the request is accepted. `chat wait` waits for input, a selection, or task completion. When an explicit local waiting limit is reached, it returns the current state with `waitTimedOut: true`; you can continue querying. Ctrl+C only ends local waiting. Use `chat stop` explicitly to stop a remote task.
|
|
149
161
|
|
|
162
|
+
Chat task responses also include `taskProgress`. During development with an approved plan in the current user’s round, `tasks` primarily contains selected or completed features and their internal steps, read independently from the same `internal/features.json` and `internal/todos.json` used by Glow. Steps are joined by the actual `featureId`; `steps` preserves their text, order, and `pending / in_progress / completed` status, while `stepProgress` contains the actual completed and total counts. Legacy Todos without a feature ID are not assigned to another feature. Features without steps display a pending-generation notice rather than a fabricated 0/0. The card no longer includes execution details, duplicate message/subtask tables, or tool counts. After the whole round reaches `COMPLETED`, preserve the original completion text in `messages`, preview links, and existing continue-creation / launch guidance. Do not replace the reply with a step table or completion card. Only append `toolUsage.markdown` after the completion text. The count uses the same current-round `activity.summary.toolCount` as Glow’s completion bubble, without adding subtask counts. Read, edit, and deployment counts are not displayed separately; missing statistics are explicitly reported as unavailable.
|
|
163
|
+
|
|
164
|
+
Other stages, or projects without displayable features, retain the original task list. Background tasks are deduplicated by identity; other-member or unknown-owner background tasks expose status only. `markdown` is a ready-to-display card. `revision` tracks visible step and status changes (tool counts do not affect the card revision), and feature progress refreshes even when the parent message is unchanged. Failed reads or malformed data fall back to execution status with `complete: false` and `warnings`; missing steps are never treated as completed, and percentages are not estimated.
|
|
165
|
+
|
|
166
|
+
While `chat wait` or a write command is waiting, progress from every polling iteration is emitted as newline-delimited JSON on stderr with `event: "task_progress"`; the card is in `data.taskProgress.markdown`. Host agents should read output from the running command and display every task. Update the same card using `taskProgress.id` when supported; otherwise display the current snapshot on every query, including when `changed: false`. Progress events are not final results: continue waiting on the same process without interrupting or resubmitting the task. stdout still emits a single command result.
|
|
167
|
+
|
|
168
|
+
Overall completion retains the existing session, message, interaction, and background-work rules. `taskProgress` is display-only: a completed item or changed card does not end the wait, and item counts do not determine overall completion. Existing early style-preview notifications, local timeouts, and user-input behavior remain unchanged. Pass `--progress-revision` with the previous revision to compute `changed`; it does not suppress progress output on subsequent queries, and `chat state` and `chat style list` also accept this option.
|
|
169
|
+
|
|
150
170
|
The CLI connects to Superun by default. Use the global `--endpoint <URL>` option to specify an API endpoint and `--locale <language>` to choose the response language.
|
|
151
171
|
|
|
152
172
|
## Answering interactions
|
|
@@ -195,6 +215,10 @@ superun-ai chat publish visibility <sessionId> private
|
|
|
195
215
|
|
|
196
216
|
Style generation defaults to two candidates and supports one to four. Use the returned `choiceId` to select a style. Publishing uses the returned `encryptedId` and tracks the selected version's deployment. Plugin IDs come from `chat plugin list`.
|
|
197
217
|
|
|
218
|
+
Style waiting returns progress as soon as one candidate succeeds and its screenshot is ready, while the batch remains `RUNNING`. Show that candidate and its screenshot link immediately, then follow `QUERY_STYLES` to keep checking the remaining candidates. For example: “Style B is ready; waiting for style A.” Labels A/B/C/D correspond to the original `index` 0/1/2/3, regardless of completion order. Announce each `choiceId` only once and wait for the user's selection after the batch finishes.
|
|
219
|
+
|
|
220
|
+
After the user selects a style, `chat style select` waits for its demo, completes the demo transition and preserves the version internally, then generates the development plan. Show only that the selected style is being used to prepare the plan, without demo-stage prompts or additional questions. Keep the existing plan content and confirmation/adjustment guidance unchanged; the feature-selection step follows plan approval. After `--no-wait` or a local timeout, follow `CONTINUE_STYLE_PLANNING` with `chat wait` to check the current state and resume the transition. `chat state` remains read-only, and existing projects can still use `chat demo` and `chat develop`.
|
|
221
|
+
|
|
198
222
|
After the user explicitly asks to launch the site, use `chat publish status <sessionId> --for-launch` to get the latest pending version from the publishing panel. Show its `changeLog` unchanged, then follow the returned publishing command without a second confirmation. For a deployment already in progress, only track progress. If deployment is complete but the site is not public, finish the visibility step and return the public URL. `status` is always read-only; an ordinary status query does not grant publishing authorization.
|
|
199
223
|
|
|
200
224
|
`chat publish start --indexing allow|deny` controls search-engine indexing, not visitor access. Change site visibility with `chat publish visibility`. If the service requires acknowledgment of cloud costs, review them before explicitly passing `--acknowledge-cloud-fee`.
|
package/README.md
CHANGED
|
@@ -44,6 +44,18 @@ npm install -g .
|
|
|
44
44
|
|
|
45
45
|
如果本地已有仓库,请使用已有目录,不要覆盖未提交的改动。构建会先清理 `dist` 再生成产物;全局命令若链接到源码目录,应保留该目录。
|
|
46
46
|
|
|
47
|
+
## 一键发布 npm
|
|
48
|
+
|
|
49
|
+
先提交当前改动,在 `main` 分支执行:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npm run release
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
脚本按顺序显示上一版本、执行 `npm version patch`、显示本次版本、发布到 npm 的 `latest` 标签,最后执行 `git push origin main --follow-tags`。`npm version patch` 会自动更新版本文件并创建 Git 提交及标签;`npm publish` 沿用已有 `prepack`,自动进行类型检查和构建。发布使用本机 npm 登录凭据,若账号启用双重验证,npm 可能要求输入验证码。
|
|
56
|
+
|
|
57
|
+
任何一步失败都会停止。npm 未确认成功时,先查询该版本的远端状态;若已经发布成功但 Git 推送失败,只补执行 `git push origin main --follow-tags`,不要重新运行脚本。发布到 `latest` 后,现有 CLI 用户会按内置更新逻辑升级。
|
|
58
|
+
|
|
47
59
|
## 查看帮助
|
|
48
60
|
|
|
49
61
|
安装完成后,单独执行以下命令查看帮助;这些命令不会发起登录或创作:
|
|
@@ -76,7 +88,7 @@ superun-ai
|
|
|
76
88
|
│ ├── style # 管理创作风格
|
|
77
89
|
│ │ ├── generate <sessionId> # 生成风格候选
|
|
78
90
|
│ │ ├── list <sessionId> # 查询全部风格批次
|
|
79
|
-
│ │ └── select <sessionId> <choiceId> #
|
|
91
|
+
│ │ └── select <sessionId> <choiceId> # 选择风格并自动生成研发规划
|
|
80
92
|
│ ├── demo <sessionId> # 查看演示快照并记录已查看状态
|
|
81
93
|
│ ├── develop <sessionId> # 保留演示,进入研发并生成规划
|
|
82
94
|
│ ├── interaction # 回答或跳过交互
|
|
@@ -147,6 +159,14 @@ superun-ai chat stop <sessionId>
|
|
|
147
159
|
|
|
148
160
|
写命令支持 `--no-wait`:请求被接受后立即返回。`chat wait` 等待到需要输入、需要选择或任务结束;达到本地等待时限后返回当前状态和 `waitTimedOut: true`,可以继续查询。按 Ctrl+C 只结束本地等待;远端停止需要显式执行 `chat stop`。
|
|
149
161
|
|
|
162
|
+
聊天任务的响应还包含 `taskProgress`。当前用户已确认规划的研发阶段,`tasks` 优先展示功能和内部步骤:从 Glow 同源的 `internal/features.json`、`internal/todos.json` 独立读取,按真实 `featureId` 关联;`steps` 保留步骤原文、顺序和 `pending / in_progress / completed` 状态,`stepProgress` 返回实际完成数和总数。仅展示已选择或已完成的功能,未关联功能的旧版 Todo 不混入其他功能;尚无步骤时明确提示,不显示虚构的 0/0。不再展示“执行详情”和重复的主任务、子任务表格,过程卡也不展示工具次数。整轮状态为 `COMPLETED` 后,保持原来的完成回复:原样展示 `messages` 中的完成说明,保留预览链接、“继续创作 / 上线运营”等原有引导,不用步骤表或结束卡片替代。只在完成说明后补充 `toolUsage.markdown`(如“已生成:10 次工具调用”),次数与 Glow 完成气泡同源,读取当前轮 `activity.summary.toolCount`,不累加子任务次数,也不拆分读取、修改或部署次数;统计缺失时明确提示不可用。
|
|
163
|
+
|
|
164
|
+
其他阶段或没有可展示的功能时,`tasks` 保留主任务、咨询、后台任务和风格方案。后台任务按身份去重,其他成员或归属未知的后台任务仅展示状态。`markdown` 是可直接展示的进度卡,`revision` 标识可见步骤和状态的变化(工具次数变化不影响进度卡版本),父消息未变化时仍独立刷新功能进度。读取失败或数据损坏时使用执行状态兜底,并通过 `complete: false` 和 `warnings` 明示;不把缺失步骤当作完成,也不估算百分比。
|
|
165
|
+
|
|
166
|
+
`chat wait` 及写命令的默认等待期间,每轮查询的进度都通过 stderr 逐行输出 JSON 事件:`event: "task_progress"`,卡片位于 `data.taskProgress.markdown`。接入 Agent 应持续读取运行中命令的输出并展示全部任务;支持原位更新时按 `taskProgress.id` 更新同一张卡,否则每次展示当前快照,即使 `changed: false` 也不省略。进度事件不是最终结果,应继续等待当前进程,不中断或重新提交任务。stdout 仍只输出一次命令结果。
|
|
167
|
+
|
|
168
|
+
整体结束判断沿用原有会话、消息、交互和后台工作状态逻辑,`taskProgress` 仅用于展示;单项完成或进度卡更新不会结束等待,也不以进度条目数量推断整轮完成。原有单个风格方案就绪提示、本地等待超时及用户问答行为保持不变。`--progress-revision` 可传入上次版本用于计算 `changed`,但不抑制每次查询的进度输出;`chat state` 与 `chat style list` 同样支持该参数。
|
|
169
|
+
|
|
150
170
|
默认连接 Superun 服务。全局参数 `--endpoint <URL>` 可指定 API 地址,`--locale <language>` 可指定响应语言。
|
|
151
171
|
|
|
152
172
|
## 回答交互
|
|
@@ -195,6 +215,10 @@ superun-ai chat publish visibility <sessionId> private
|
|
|
195
215
|
|
|
196
216
|
风格默认生成 2 个,支持 1~4 个;使用查询结果中的 `choiceId`。发布使用查询结果中的 `encryptedId`,按目标版本跟踪部署状态。插件 ID 以 `chat plugin list` 返回值为准。
|
|
197
217
|
|
|
218
|
+
风格等待会在单个方案成功且截图就绪时提前返回进度,整批状态仍为 `RUNNING`。调用方应立即提示该方案及截图链接,再按 `QUERY_STYLES` 继续查询剩余方案,例如“方案 B 已生成,继续等待方案 A”。方案 A/B/C/D 固定对应原始 `index` 0/1/2/3,同一 `choiceId` 只提示一次;全部结束后再等待用户选择。
|
|
219
|
+
|
|
220
|
+
用户选择风格后,`chat style select` 默认内部完成演示就绪等待、演示状态衔接和版本保留,再生成研发规划。调用方只提示“已采用方案 B,正在生成研发规划,完成后请你确认”,不展示演示阶段的提示或额外询问。研发规划内容及“确认规划 / 调整功能”引导保持原样,确认规划后才生成供用户选择的开发功能清单。`--no-wait` 或等待超时返回时,按 `CONTINUE_STYLE_PLANNING` 继续执行 `chat wait`;它会核对当前状态后继续衔接。`chat state` 仍只读,旧项目仍可使用 `chat demo` 和 `chat develop`。
|
|
221
|
+
|
|
198
222
|
用户明确回复“上线运营”后,使用 `chat publish status <sessionId> --for-launch` 获取 Glow 发布面板的最新待发布版本,原样展示该版本的 `changeLog`,再按返回的命令直接发布,无需二次确认。发布中的版本只跟踪进度;部署后尚未公开的站点继续执行上线动作,完成后返回正式链接。`status` 始终只读,普通状态查询不会自动获得发布授权。
|
|
199
223
|
|
|
200
224
|
`chat publish start --indexing allow|deny` 控制搜索引擎索引,不限制用户访问;站点上下线使用 `chat publish visibility`。若服务端要求确认云服务费用,了解费用后可显式传入 `--acknowledge-cloud-fee`。
|
|
@@ -23,7 +23,7 @@ export declare class AgentCommandApi {
|
|
|
23
23
|
constructor(client: ApiClient);
|
|
24
24
|
chat(input: ChatInput): Promise<JsonObject>;
|
|
25
25
|
parallel(input: JsonObject): Promise<JsonObject>;
|
|
26
|
-
viewDemo(sessionId: string): Promise<JsonObject>;
|
|
26
|
+
viewDemo(sessionId: string, planningChoiceId?: string): Promise<JsonObject>;
|
|
27
27
|
stop(sessionId: string, scope: 'own' | 'all', messageId?: string): Promise<void>;
|
|
28
28
|
reply(sessionId: string, toolId: string, toolResult?: unknown): Promise<JsonObject>;
|
|
29
29
|
replySingle(input: JsonObject): Promise<JsonObject>;
|
|
@@ -26,7 +26,7 @@ export class AgentCommandApi {
|
|
|
26
26
|
async parallel(input) {
|
|
27
27
|
return object(await this.client.call(`${PREFIX}/glowParallelChat`, input, true));
|
|
28
28
|
}
|
|
29
|
-
async viewDemo(sessionId) {
|
|
29
|
+
async viewDemo(sessionId, planningChoiceId) {
|
|
30
30
|
return object(await this.client.call(`${PREFIX}/fakeGlowChat`, {
|
|
31
31
|
sessionId,
|
|
32
32
|
content: '查看演示',
|
|
@@ -36,6 +36,7 @@ export class AgentCommandApi {
|
|
|
36
36
|
roundExtra: {
|
|
37
37
|
business_type: 'fake_confirm_generate_more_demo',
|
|
38
38
|
showConfirmGenerateMoreDemo: '1',
|
|
39
|
+
...(planningChoiceId ? { cliPlanAfterStyle: planningChoiceId } : {}),
|
|
39
40
|
},
|
|
40
41
|
}, true));
|
|
41
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-command-api.js","sourceRoot":"","sources":["../../src/api/agent-command-api.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAmB/C,MAAM,MAAM,GAAG,oCAAoC,CAAC;AACpD,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;IAAG,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,KAAgB;QACzB,OAAO,MAAM,CACX,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACpB,GAAG,MAAM,WAAW,EACpB;YACE,GAAG,KAAK;YACR,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7E,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC;YACrB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,CAAC;YAC/B,UAAU,EAAE,EAAE,GAAG,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE;YACrD,GAAG,CAAC,KAAK,CAAC,SAAS;gBACjB,CAAC,CAAC;oBACE,+BAA+B,EAAE;wBAC/B,aAAa;wBACb,wBAAwB;wBACxB,GAAG,CAAC,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC;qBACjD;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,EACD,IAAI,CACL,CACF,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,KAAiB;QAC9B,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,mBAAmB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,SAAiB;
|
|
1
|
+
{"version":3,"file":"agent-command-api.js","sourceRoot":"","sources":["../../src/api/agent-command-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,7 +70,7 @@ export async function sendMessage(context, sessionId, command) {
|
|
|
70
70
|
}
|
|
71
71
|
: {}),
|
|
72
72
|
}));
|
|
73
|
-
context.output.write(await service.accepted(object(response), sessionId, options.wait !== false, {
|
|
73
|
+
context.output.write(await service.accepted({ ...object(response), progressTitle: content }, sessionId, options.wait !== false, {
|
|
74
74
|
...waitOptions(command),
|
|
75
75
|
previousMessageId,
|
|
76
76
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/commands/chat/message.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/commands/chat/message.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export function registerState(chat, context) {
|
|
|
8
8
|
.command('state <sessionId>')
|
|
9
9
|
.description('查询当前任务和交互')
|
|
10
10
|
.option('--message-id <messageId>', '刷新指定消息快照')
|
|
11
|
+
.option('--progress-revision <revision>', '上次已展示的任务进度版本')
|
|
11
12
|
.option('--include-file <name>', '包含指定可见附件正文,可重复使用', appendValue, [])
|
|
12
13
|
.action(async (sessionId, _options, command) => {
|
|
13
14
|
const service = await runtime(context, command), options = object(command.opts());
|
|
@@ -18,6 +19,8 @@ export function registerState(chat, context) {
|
|
|
18
19
|
view = applySnapshot(view, snapshot.pipeline);
|
|
19
20
|
}
|
|
20
21
|
const result = await service.inspect(view), names = z.array(z.string()).parse(options.includeFile);
|
|
22
|
+
if (result.taskProgress)
|
|
23
|
+
result.taskProgress.changed = result.taskProgress.revision !== options.progressRevision;
|
|
21
24
|
if (names.length)
|
|
22
25
|
result.attachments = await service.query.attachments(sessionId, names);
|
|
23
26
|
context.output.write(service.withGuidance(result));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/commands/chat/state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,UAAU,aAAa,CAAC,IAAa,EAAE,OAAuB;IAClE,IAAI;SACD,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,WAAW,CAAC;SACxB,MAAM,CAAC,0BAA0B,EAAE,UAAU,CAAC;SAC9C,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,WAAW,EAAE,EAAE,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE;QACvE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAC7C,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,IAAI,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACnF,IAAI,QAAQ,CAAC,QAAQ;gBAAE,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EACxC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,KAAK,CAAC,MAAM;YAAE,MAAM,CAAC,WAAW,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACzF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/commands/chat/state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,UAAU,aAAa,CAAC,IAAa,EAAE,OAAuB;IAClE,IAAI;SACD,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,WAAW,CAAC;SACxB,MAAM,CAAC,0BAA0B,EAAE,UAAU,CAAC;SAC9C,MAAM,CAAC,gCAAgC,EAAE,cAAc,CAAC;SACxD,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,WAAW,EAAE,EAAE,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE;QACvE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAC7C,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,IAAI,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACnF,IAAI,QAAQ,CAAC,QAAQ;gBAAE,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EACxC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,YAAY;YACrB,MAAM,CAAC,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,KAAK,OAAO,CAAC,gBAAgB,CAAC;QAC1F,IAAI,KAAK,CAAC,MAAM;YAAE,MAAM,CAAC,WAAW,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACzF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -20,23 +20,29 @@ export function registerStyle(chat, context) {
|
|
|
20
20
|
.command('list <sessionId>')
|
|
21
21
|
.description('查询全部风格批次')
|
|
22
22
|
.option('--anchor <preReplyMessageId>', '分支查询锚点')
|
|
23
|
+
.option('--progress-revision <revision>', '上次已展示的任务进度版本')
|
|
23
24
|
.action(async (sessionId, _options, command) => {
|
|
24
25
|
const service = await runtime(context, command), view = await service.load(sessionId), currentAnchor = styleBranchAnchor(view), anchor = text(object(command.opts()).anchor) ?? currentAnchor, choices = await service.choices(sessionId, anchor, view);
|
|
26
|
+
const taskProgress = await service.taskProgress.read(view, choices);
|
|
27
|
+
taskProgress.changed = taskProgress.revision !== object(command.opts()).progressRevision;
|
|
25
28
|
const result = service.withGuidance({
|
|
26
29
|
state: choices.length ? styleBatchState(latestStyleChoices(choices)) : 'COMPLETED',
|
|
27
30
|
sessionId,
|
|
28
31
|
choices,
|
|
32
|
+
taskProgress,
|
|
29
33
|
cursor: { branchAnchor: anchor },
|
|
30
34
|
});
|
|
31
35
|
context.output.write({
|
|
32
36
|
state: result.state,
|
|
33
37
|
sessionId,
|
|
34
38
|
choices,
|
|
39
|
+
taskProgress,
|
|
40
|
+
cursor: result.cursor,
|
|
35
41
|
// 历史批次只供查看;选择命令仅接受当前未决批次。
|
|
36
42
|
nextActions: anchor === currentAnchor ? result.nextActions : [],
|
|
37
43
|
});
|
|
38
44
|
});
|
|
39
|
-
withWait(style.command('select <sessionId> <choiceId>').description('
|
|
45
|
+
withWait(style.command('select <sessionId> <choiceId>').description('选择风格并自动生成研发规划')).action(async (sessionId, choiceId, _options, command) => {
|
|
40
46
|
const service = await runtime(context, command);
|
|
41
47
|
const response = await businessWrite(context, service, sessionId, () => service.selectStyle(sessionId, choiceId));
|
|
42
48
|
context.output.write(await service.accepted(object(response), sessionId, object(command.opts()).wait !== false, waitOptions(command)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.js","sourceRoot":"","sources":["../../../src/commands/chat/style.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"style.js","sourceRoot":"","sources":["../../../src/commands/chat/style.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,11 @@ import { runtime, positive, waitOptions } from '../shared.js';
|
|
|
2
2
|
export function registerWait(chat, context) {
|
|
3
3
|
chat
|
|
4
4
|
.command('wait <sessionId>')
|
|
5
|
-
.description('
|
|
5
|
+
.description('等待当前交互或任务结果,期间持续展示任务进度')
|
|
6
6
|
.option('--message-id <messageId>', '起始消息 ID')
|
|
7
7
|
.option('--timeout <seconds>', '本地等待上限;不传则持续等待', positive)
|
|
8
8
|
.option('--interval <seconds>', '轮询最小间隔', positive)
|
|
9
|
+
.option('--progress-revision <revision>', '上次已展示的任务进度版本;仅输出变化的进度')
|
|
9
10
|
.action(async (sessionId, _options, command) => context.output.write(await (await runtime(context, command)).wait(sessionId, waitOptions(command))));
|
|
10
11
|
}
|
|
11
12
|
//# sourceMappingURL=wait.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/commands/chat/wait.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,OAAuB;IACjE,IAAI;SACD,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/commands/chat/wait.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,OAAuB;IACjE,IAAI;SACD,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,0BAA0B,EAAE,SAAS,CAAC;SAC7C,MAAM,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,QAAQ,CAAC;SACzD,MAAM,CAAC,sBAAsB,EAAE,QAAQ,EAAE,QAAQ,CAAC;SAClD,MAAM,CAAC,gCAAgC,EAAE,uBAAuB,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE,CACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CACpG,CAAC;AACN,CAAC"}
|
|
@@ -23,6 +23,7 @@ export declare function waitOptions(command: Command): {
|
|
|
23
23
|
timeout?: number;
|
|
24
24
|
interval?: number;
|
|
25
25
|
messageId?: string;
|
|
26
|
+
progressRevision?: string;
|
|
26
27
|
};
|
|
27
28
|
export declare function withWait(command: Command, noWaitDescription?: string): Command;
|
|
28
29
|
export declare function readInput(path: string): Promise<JsonObject>;
|
package/dist/commands/shared.js
CHANGED
|
@@ -48,6 +48,7 @@ export function waitOptions(command) {
|
|
|
48
48
|
timeout: typeof options.timeout === 'number' ? options.timeout : undefined,
|
|
49
49
|
interval: typeof options.interval === 'number' ? options.interval : undefined,
|
|
50
50
|
messageId: text(options.messageId),
|
|
51
|
+
progressRevision: text(options.progressRevision),
|
|
51
52
|
};
|
|
52
53
|
}
|
|
53
54
|
export function withWait(command, noWaitDescription = '服务端接受请求后立即返回') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAerD,KAAK,UAAU,qBAAqB,CAClC,OAAuB,EACvB,OAAgB,EAChB,YAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,aAAa,CAAC;QAC3B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QAChC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;KAC7B,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC;QACjC,KAAK,EAAE,OAAO,CAAC,QAAQ;QACvB,MAAM;QACN,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY;KACb,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,OAAO,GACX,OAAO,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC;QAC7C,IAAI,eAAe,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxG,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;AAC1D,CAAC;AAED,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAuB,EACvB,OAAgB,EAChB,YAAY,GAAG,KAAK;IAEpB,OAAO,CAAC,UAAU,KAAK,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC7E,OAAO,OAAO,CAAC,UAAU,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAuB,EAAE,OAAgB;IACrE,OAAO,CAAC,MAAM,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9D,CAAC;AACD,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC5F,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,OAAgB;
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -79,6 +79,46 @@ export type DevelopmentProgress = {
|
|
|
79
79
|
/** 当前研发轮的快照;规划与问答轮不要求产生快照。 */
|
|
80
80
|
snapshot?: DevelopmentSnapshot;
|
|
81
81
|
};
|
|
82
|
+
export type TaskProgressStatus = 'submitted' | 'queued' | 'running' | 'waiting' | 'needs_input' | 'completed' | 'failed' | 'interrupted' | 'unknown';
|
|
83
|
+
export type TaskProgressItem = {
|
|
84
|
+
id: string;
|
|
85
|
+
kind: 'feature' | 'message' | 'consult' | 'subtask' | 'style' | 'other-member' | 'request';
|
|
86
|
+
title: string;
|
|
87
|
+
status: TaskProgressStatus;
|
|
88
|
+
detail?: string;
|
|
89
|
+
activity?: {
|
|
90
|
+
readCount?: number;
|
|
91
|
+
editCount?: number;
|
|
92
|
+
deployCount?: number;
|
|
93
|
+
toolCount?: number;
|
|
94
|
+
};
|
|
95
|
+
messageId?: string;
|
|
96
|
+
roundId?: string;
|
|
97
|
+
agentId?: string;
|
|
98
|
+
featureId?: number;
|
|
99
|
+
/** 与 Glow 同源的功能步骤,保留服务端顺序和状态。 */
|
|
100
|
+
steps?: Array<{
|
|
101
|
+
content: string;
|
|
102
|
+
status: 'pending' | 'in_progress' | 'completed';
|
|
103
|
+
}>;
|
|
104
|
+
stepProgress?: {
|
|
105
|
+
completed: number;
|
|
106
|
+
total: number;
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
export type TaskProgressSnapshot = {
|
|
110
|
+
/** 同一项目始终更新同一张卡片。 */
|
|
111
|
+
id: string;
|
|
112
|
+
revision: string;
|
|
113
|
+
activeCount: number;
|
|
114
|
+
tasks: Array<TaskProgressItem>;
|
|
115
|
+
/** 可直接展示的 Markdown 进度卡,不包含估算百分比。 */
|
|
116
|
+
markdown: string;
|
|
117
|
+
/** 进度来源是否完整读取,不代表任务是否完成。 */
|
|
118
|
+
complete: boolean;
|
|
119
|
+
warnings: Array<string>;
|
|
120
|
+
changed?: boolean;
|
|
121
|
+
};
|
|
82
122
|
export type CreationResult = {
|
|
83
123
|
state: CreationState;
|
|
84
124
|
sessionId: string;
|
|
@@ -95,14 +135,26 @@ export type CreationResult = {
|
|
|
95
135
|
text: string;
|
|
96
136
|
status?: string;
|
|
97
137
|
}>;
|
|
138
|
+
taskProgress?: TaskProgressSnapshot;
|
|
139
|
+
/** 整轮完成后附加 Glow 同源的工具调用次数,原始完成说明及后续引导保持不变。 */
|
|
140
|
+
toolUsage?: {
|
|
141
|
+
toolCount?: number;
|
|
142
|
+
complete: boolean;
|
|
143
|
+
markdown: string;
|
|
144
|
+
};
|
|
98
145
|
interactions: Array<Interaction>;
|
|
99
146
|
choices?: Array<Choice>;
|
|
147
|
+
/** 用户选定风格后,自动衔接演示状态与研发规划;不代表已确认规划。 */
|
|
148
|
+
stylePlanning?: {
|
|
149
|
+
choiceId: string;
|
|
150
|
+
};
|
|
100
151
|
demo?: DemoPreview;
|
|
101
152
|
development?: DevelopmentProgress;
|
|
102
153
|
cursor?: {
|
|
103
154
|
messageId?: string;
|
|
104
155
|
etag?: string;
|
|
105
156
|
branchAnchor?: string;
|
|
157
|
+
progressRevision?: string;
|
|
106
158
|
};
|
|
107
159
|
attachments?: Array<Record<string, unknown>>;
|
|
108
160
|
waitTimedOut?: boolean;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/** 读取 Glow 同源功能与 Todo,以真实功能 ID 组装步骤进度。@author xiuyu.yi */
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { parseWire } from '../contracts/node-wire.js';
|
|
4
|
+
import { object } from '../contracts/value.js';
|
|
5
|
+
const featureId = z.number().int().positive().safe();
|
|
6
|
+
const status = z.enum(['pending', 'in_progress', 'completed']);
|
|
7
|
+
const featureSchema = z.object({
|
|
8
|
+
id: featureId,
|
|
9
|
+
title: z.string().trim().min(1),
|
|
10
|
+
checked: z.boolean(),
|
|
11
|
+
status,
|
|
12
|
+
});
|
|
13
|
+
const stepSchema = z.object({
|
|
14
|
+
featureId,
|
|
15
|
+
content: z.string().trim().min(1),
|
|
16
|
+
status,
|
|
17
|
+
});
|
|
18
|
+
function attachmentArray(raw) {
|
|
19
|
+
// 尚未生成附件时可以为空;损坏的 JSON 必须交由调用方显示读取失败。
|
|
20
|
+
if (raw === null || raw === undefined || raw === '')
|
|
21
|
+
return [];
|
|
22
|
+
return parseWire(z.array(z.unknown()), typeof raw === 'string' ? JSON.parse(raw) : raw);
|
|
23
|
+
}
|
|
24
|
+
export function projectFeatureTasks(sessionId, rawFeatures, rawTodos) {
|
|
25
|
+
const features = attachmentArray(rawFeatures)
|
|
26
|
+
.filter((item) => object(item).checked === true || object(item).status === 'completed')
|
|
27
|
+
.map((item) => parseWire(featureSchema, item));
|
|
28
|
+
const ids = new Set(features.map((feature) => feature.id));
|
|
29
|
+
// 功能 ID 冲突时不能凭标题或数组下标猜关联。
|
|
30
|
+
if (ids.size !== features.length)
|
|
31
|
+
throw new Error('功能 ID 重复');
|
|
32
|
+
const stepsByFeature = new Map();
|
|
33
|
+
for (const raw of attachmentArray(rawTodos)) {
|
|
34
|
+
// 与 Glow 一致:旧版未关联功能的 Todo 不混入任意功能。
|
|
35
|
+
if (!ids.has(object(raw).featureId))
|
|
36
|
+
continue;
|
|
37
|
+
const step = parseWire(stepSchema, raw);
|
|
38
|
+
const steps = stepsByFeature.get(step.featureId) ?? [];
|
|
39
|
+
steps.push({ content: step.content, status: step.status });
|
|
40
|
+
stepsByFeature.set(step.featureId, steps);
|
|
41
|
+
}
|
|
42
|
+
return features.map((feature) => {
|
|
43
|
+
const steps = stepsByFeature.get(feature.id) ?? [];
|
|
44
|
+
return {
|
|
45
|
+
id: `feature:${sessionId}:${feature.id}`,
|
|
46
|
+
kind: 'feature',
|
|
47
|
+
featureId: feature.id,
|
|
48
|
+
title: feature.title,
|
|
49
|
+
status: feature.status === 'completed'
|
|
50
|
+
? 'completed'
|
|
51
|
+
: feature.status === 'in_progress'
|
|
52
|
+
? 'running'
|
|
53
|
+
: 'waiting',
|
|
54
|
+
steps,
|
|
55
|
+
...(steps.length
|
|
56
|
+
? {
|
|
57
|
+
stepProgress: {
|
|
58
|
+
completed: steps.filter((step) => step.status === 'completed').length,
|
|
59
|
+
total: steps.length,
|
|
60
|
+
},
|
|
61
|
+
}
|
|
62
|
+
: { detail: '步骤尚未生成' }),
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=feature-progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-progress.js","sourceRoot":"","sources":["../../src/conversation/feature-progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { RuntimeConfig } from '../config/runtime-config.js';
|
|
2
2
|
import type { CreationResult, NextAction } from '../contracts/cli-output.js';
|
|
3
|
-
export type GuidanceResult = Pick<CreationResult, 'state' | 'sessionId'> & Partial<Pick<CreationResult, 'interactions' | 'choices' | 'messageId' | 'cursor' | 'demo' | 'development'>>;
|
|
3
|
+
export type GuidanceResult = Pick<CreationResult, 'state' | 'sessionId'> & Partial<Pick<CreationResult, 'interactions' | 'choices' | 'messageId' | 'cursor' | 'demo' | 'development' | 'stylePlanning' | 'taskProgress' | 'toolUsage'>>;
|
|
4
4
|
export declare function buildNextActions(result: GuidanceResult, config: Pick<RuntimeConfig, 'endpoint' | 'locale'>): Array<NextAction>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** 根据当前结果提供操作引导,不替用户作答或执行操作。@author xiuyu.yi */
|
|
2
2
|
import { COMMAND_NAME } from '../config/constants.js';
|
|
3
|
-
import { latestStyleChoices } from '../interactions/parsers/style-selection.js';
|
|
3
|
+
import { latestStyleChoices, readyStyleChoices, styleChoiceLabel, } from '../interactions/parsers/style-selection.js';
|
|
4
4
|
const QUESTIONNAIRE_INSTRUCTION = '请一次性向用户完整展示当前交互 questions 中的全部问题和选项:保留原始问题、选项标签及说明,标明题号、选项编号、multiSelect 单选/多选规则和 allowOther 自定义回答能力;展示编号须与 question.id、options.index 对应,不要只概括问题、逐题提问或省略选项。提示用户“请按题号回答,例如1A、2B,也可以补充自己的要求”,示例不代表固定题数或默认答案。收集整份问卷的回答;若用户仅回答部分题目,保留已答内容并一次性展示剩余问题及选项,不要替用户选择推荐项,答案齐全后再统一提交';
|
|
5
5
|
const PLAN_REVIEW_INSTRUCTION = '请按 messages 顺序展示原始规划对话,与产品页面保持一致,不自行摘要、改写或追加 attachments 中的完整研发规划。然后展示:\n- **确认规划**:回复 **“确认规划”** 继续。\n- **调整功能**:直接告诉我需要增加或修改的内容。\n每次调整后都要等待并展示更新方案,再次给出这两个入口;如果服务端再次提问,先回答问题再等待方案。补充要求不等于确认,不能确认旧方案。';
|
|
6
6
|
const FEATURE_SELECTION_INSTRUCTION = '请按 messages 顺序展示原始对话和功能清单,保留展示编号与 details.features 中真实 id 的对应关系;无需额外生成或链接功能清单文档,也不追加勾选状态提示。此时功能尚待选择开发,不展示“继续创作”或“上线运营”入口。最后只提示:“请回复要开发的功能编号或具体需求。”';
|
|
@@ -19,23 +19,53 @@ const INTERACTION_INSTRUCTIONS = {
|
|
|
19
19
|
START_EXECUTION: '请用户确认开始执行当前计划',
|
|
20
20
|
};
|
|
21
21
|
export function buildNextActions(result, config) {
|
|
22
|
-
return nextActionsForState(result, config).map((action) =>
|
|
23
|
-
|
|
22
|
+
return nextActionsForState(result, config).map((action) => {
|
|
23
|
+
const progressInstruction = result.state === 'COMPLETED'
|
|
24
|
+
? '整轮已结束,按 messages 顺序原样展示本轮完成说明,保留服务端返回的内容、快照链接和后续引导。不改写为步骤表或结束卡片,不以 taskProgress.markdown 替代原始回复。'
|
|
25
|
+
: result.taskProgress
|
|
26
|
+
? '每次查询都展示 taskProgress.markdown 进度卡,即使 changed 为 false 也展示。完整展示全部功能及内部步骤状态和完成数,不只展示最后一个。不追加执行详情或工具次数。界面支持原位更新时按 taskProgress.id 更新同一张卡,否则每次展示当前快照。保留状态待同步提示,不虚构阶段或百分比。'
|
|
27
|
+
: '';
|
|
28
|
+
const waitInstruction = action.requiresUserInput
|
|
29
|
+
? '等待用户明确响应,不设置答题倒计时;未收到响应时保持当前步骤,不自动选择、提交、跳过或继续。'
|
|
30
|
+
: '';
|
|
31
|
+
return {
|
|
24
32
|
...action,
|
|
25
|
-
instruction:
|
|
26
|
-
|
|
27
|
-
|
|
33
|
+
instruction: [
|
|
34
|
+
progressInstruction,
|
|
35
|
+
action.instruction,
|
|
36
|
+
waitInstruction,
|
|
37
|
+
...(result.state === 'COMPLETED' && result.toolUsage
|
|
38
|
+
? [
|
|
39
|
+
'只在原始完成说明之后补充 toolUsage.markdown,继续保留原有预览链接及后续操作引导;不展示读取、修改或部署次数。',
|
|
40
|
+
]
|
|
41
|
+
: []),
|
|
42
|
+
]
|
|
43
|
+
.filter(Boolean)
|
|
44
|
+
.join(' '),
|
|
45
|
+
};
|
|
46
|
+
});
|
|
28
47
|
}
|
|
29
48
|
function nextActionsForState(result, config) {
|
|
30
49
|
// 显式保留连接地址,避免调用方执行下一步时切回默认环境;凭据不进入命令。
|
|
31
50
|
const command = [COMMAND_NAME, '--endpoint', config.endpoint, '--locale', config.locale, 'chat'];
|
|
51
|
+
const progressRevision = result.taskProgress?.revision ?? result.cursor?.progressRevision;
|
|
52
|
+
const progressOptions = progressRevision ? ['--progress-revision', progressRevision] : [];
|
|
53
|
+
if (result.stylePlanning && ['ACCEPTED', 'RUNNING', 'QUEUED', 'COMPLETED'].includes(result.state))
|
|
54
|
+
return [
|
|
55
|
+
{
|
|
56
|
+
action: 'CONTINUE_STYLE_PLANNING',
|
|
57
|
+
instruction: '用户已选定风格,提示已采用该方案、正在生成研发规划。继续等待,CLI 会内部完成演示状态衔接并生成规划;不展示演示完成提示、使用场景说明或演示链接,不询问是否查看演示或是否开始研发。不要声称用户已实际查看演示。生成规划后沿用原有规划展示和确认引导;遇到问题或错误原样展示,不自动确认规划或选择开发功能。',
|
|
58
|
+
requiresUserInput: false,
|
|
59
|
+
command: [...command, 'wait', ...progressOptions, '--', result.sessionId],
|
|
60
|
+
},
|
|
61
|
+
];
|
|
32
62
|
if (result.development?.snapshot?.status === 'PENDING')
|
|
33
63
|
return [
|
|
34
64
|
{
|
|
35
65
|
action: 'WAIT',
|
|
36
66
|
instruction: '本轮任务已结束,正在同步对应的研发快照;继续查询,不重复提交研发需求,不使用旧演示链接代替本轮快照。',
|
|
37
67
|
requiresUserInput: false,
|
|
38
|
-
command: [...command, 'wait', '--', result.sessionId],
|
|
68
|
+
command: [...command, 'wait', ...progressOptions, '--', result.sessionId],
|
|
39
69
|
},
|
|
40
70
|
];
|
|
41
71
|
if (result.state === 'NEEDS_INPUT' || result.state === 'NEEDS_SELECTION') {
|
|
@@ -105,7 +135,7 @@ function nextActionsForState(result, config) {
|
|
|
105
135
|
return [
|
|
106
136
|
{
|
|
107
137
|
action: 'SELECT_STYLE',
|
|
108
|
-
instruction:
|
|
138
|
+
instruction: `请按原始 index 对应的 A/B/C/D 展示本批方案及 screenshotUrl 可点击链接,说明选定风格后会生成研发规划供用户确认;仅在用户选择${styleChoiceLabel(choice)}(风格 ${choice.index + 1})后执行此命令。CLI 会静默完成演示衔接并生成研发规划,不再询问是否查看演示或是否开始研发;规划仍按原流程展示并等待确认。`,
|
|
109
139
|
requiresUserInput: true,
|
|
110
140
|
choiceId: choice.choiceId,
|
|
111
141
|
command: [...command, 'style', 'select', '--', result.sessionId, choice.choiceId],
|
|
@@ -152,18 +182,27 @@ function nextActionsForState(result, config) {
|
|
|
152
182
|
}
|
|
153
183
|
if (['ACCEPTED', 'RUNNING', 'QUEUED'].includes(result.state)) {
|
|
154
184
|
const anchor = result.cursor?.branchAnchor;
|
|
185
|
+
const styles = latestStyleChoices(result.choices ?? []);
|
|
186
|
+
const ready = readyStyleChoices(styles).sort((left, right) => left.index - right.index);
|
|
187
|
+
const pending = styles
|
|
188
|
+
.filter((choice) => choice.status === 'running' || (choice.status === 'success' && !choice.screenshotUrl))
|
|
189
|
+
.sort((left, right) => left.index - right.index);
|
|
190
|
+
const styleProgress = ready.length
|
|
191
|
+
? `已生成${ready.map(styleChoiceLabel).join('、')}。${pending.length ? `继续等待${pending.map(styleChoiceLabel).join('、')}。` : ''}`
|
|
192
|
+
: '风格仍在生成。';
|
|
155
193
|
return [
|
|
156
194
|
{
|
|
157
195
|
action: anchor ? 'QUERY_STYLES' : 'WAIT',
|
|
158
196
|
instruction: anchor
|
|
159
|
-
?
|
|
197
|
+
? `${styleProgress} 请立即提示本次新完成的方案,并展示对应 screenshotUrl 的可点击链接,不要等整批完成后才提示。按原始 index 固定对应 A/B/C/D,以 choiceId 区分候选,同一候选已提示过就不重复提示;没有新完成方案时继续等待。继续查询本批剩余候选,全部结束后再展示本批结果并等待用户选择,不自动选中已完成方案,不重复生成。`
|
|
160
198
|
: '任务尚未结束,继续等待下一步问题或结果;不要重复提交。',
|
|
161
199
|
requiresUserInput: false,
|
|
162
200
|
command: anchor
|
|
163
|
-
? [...command, 'style', 'list', '--anchor', anchor, '--', result.sessionId]
|
|
201
|
+
? [...command, 'style', 'list', '--anchor', anchor, ...progressOptions, '--', result.sessionId]
|
|
164
202
|
: [
|
|
165
203
|
...command,
|
|
166
204
|
'wait',
|
|
205
|
+
...progressOptions,
|
|
167
206
|
...(result.messageId ? ['--message-id', result.messageId] : []),
|
|
168
207
|
'--',
|
|
169
208
|
result.sessionId,
|