superun-ai-cli 0.1.30 → 0.1.32
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 +1 -0
- package/README.md +25 -2
- package/dist/api/security-review-api.d.ts +20 -0
- package/dist/api/security-review-api.js +75 -0
- package/dist/api/security-review-api.js.map +1 -0
- package/dist/commands/chat/index.js +2 -0
- package/dist/commands/chat/index.js.map +1 -1
- package/dist/commands/chat/security.d.ts +4 -0
- package/dist/commands/chat/security.js +57 -0
- package/dist/commands/chat/security.js.map +1 -0
- package/dist/commands/chat/state.js +6 -2
- package/dist/commands/chat/state.js.map +1 -1
- package/dist/commands/chat/stop.js +17 -0
- package/dist/commands/chat/stop.js.map +1 -1
- package/dist/commands/chat/wait.js +5 -1
- package/dist/commands/chat/wait.js.map +1 -1
- package/dist/commands/shared.d.ts +1 -0
- package/dist/commands/shared.js +2 -0
- package/dist/commands/shared.js.map +1 -1
- package/dist/contracts/cli-output.d.ts +4 -1
- package/dist/contracts/security-review.d.ts +102 -0
- package/dist/contracts/security-review.js +47 -0
- package/dist/contracts/security-review.js.map +1 -0
- package/dist/conversation/next-actions.d.ts +1 -1
- package/dist/conversation/next-actions.js +22 -10
- package/dist/conversation/next-actions.js.map +1 -1
- package/dist/conversation/security-review.d.ts +129 -0
- package/dist/conversation/security-review.js +246 -0
- package/dist/conversation/security-review.js.map +1 -0
- package/dist/conversation/session-waiter.d.ts +3 -1
- package/dist/conversation/session-waiter.js +5 -2
- package/dist/conversation/session-waiter.js.map +1 -1
- package/dist/interactions/managed-agent-model.d.ts +13 -13
- package/dist/output/writer.d.ts +1 -1
- package/dist/output/writer.js +8 -3
- package/dist/output/writer.js.map +1 -1
- package/dist/runtime.d.ts +4 -2
- package/dist/runtime.js +12 -5
- package/dist/runtime.js.map +1 -1
- package/package.json +1 -1
package/README.en.md
CHANGED
|
@@ -101,6 +101,7 @@ superun-ai
|
|
|
101
101
|
│ │ └── select <sessionId> <choiceId> # Choose a style and show the development feature list
|
|
102
102
|
│ ├── demo <sessionId> # View the demo and record it as viewed
|
|
103
103
|
│ ├── develop <sessionId> # Keep the demo and plan development
|
|
104
|
+
│ ├── security <sessionId> # Scan security, apply necessary fixes, and generate an audit report
|
|
104
105
|
│ ├── interaction # Answer or skip interactions
|
|
105
106
|
│ │ ├── reply <sessionId> <interactionId> # Submit an answer
|
|
106
107
|
│ │ └── skip <sessionId> <interactionId> # 跳过当前交互
|
package/README.md
CHANGED
|
@@ -103,6 +103,7 @@ superun-ai
|
|
|
103
103
|
│ │ └── select <sessionId> <choiceId> # 选择风格并展示开发功能清单
|
|
104
104
|
│ ├── demo <sessionId> # 查看演示快照并记录已查看状态
|
|
105
105
|
│ ├── develop <sessionId> # 保留演示,进入研发并生成规划
|
|
106
|
+
│ ├── security <sessionId> # 安全扫描,自动评估、必要修复并生成审计报告
|
|
106
107
|
│ ├── interaction # 回答或跳过交互
|
|
107
108
|
│ │ ├── reply <sessionId> <interactionId> # 提交回答
|
|
108
109
|
│ │ └── skip <sessionId> <interactionId> # 跳过当前交互
|
|
@@ -266,7 +267,7 @@ superun-ai chat state <sessionId>
|
|
|
266
267
|
|
|
267
268
|
不传内容时发送“帮我测一下刚才完成的功能。”;`--message` 与 `--input` 只能选一个,JSON 形状与 `chat send` 相同,支持附件。指定内容原样发送,空白内容会被拒绝。测试使用 `business_type=auto_test`,默认等待测试、结果回传及必要的修复结束;运行中不得重复发起。探索阶段和待回答交互先按当前流程处理。
|
|
268
269
|
|
|
269
|
-
每次研发完成后,引导用户选择“代码审查 / 自动测试 / 继续创作 / 上线运营”。用户明确要求“自动测试”“测一下刚才的功能”后直接调用;指定范围时将原文作为内容提交。讨论是否需要测试不等于要求执行。普通主动调用不承诺免费。
|
|
270
|
+
每次研发完成后,引导用户选择“代码审查 / 自动测试 / 安全扫描 / 继续创作 / 上线运营”。用户明确要求“自动测试”“测一下刚才的功能”后直接调用;指定范围时将原文作为内容提交。讨论是否需要测试不等于要求执行。普通主动调用不承诺免费。
|
|
270
271
|
|
|
271
272
|
结果中的 `autoTest.phase` 区分 `test` 与后续 `repair`,`autoTest.reportMessages` 保留本次最新报告,`messages` 保留对话内容。`autoTest.sourceMessageId` 用于后续回复来源校验;`previousReportMessages` 如有返回,仅用于追溯上一份报告的编号和问题,不能替代本次结果。会话 `COMPLETED` 只表示操作结束,不表示测试通过。CLI 不从正文关键词推断结构化通过数或修复状态,由接入 Agent 依据实际报告按以下规则展示。
|
|
272
273
|
|
|
@@ -325,6 +326,7 @@ superun-ai chat state <sessionId>
|
|
|
325
326
|
>
|
|
326
327
|
> - **代码审查**:回复“代码审查”,检查刚才改动的代码,发现问题后先告知你,再自动修复。
|
|
327
328
|
> - **自动测试**:回复“自动测试”,实际验证刚才完成的功能,发现确认的问题后先告知你,再自动修复。
|
|
329
|
+
> - **安全扫描**:检查项目安全风险,必要时自动修复并生成审计报告。
|
|
328
330
|
> - **继续创作**:直接告诉我想新增或调整的内容。
|
|
329
331
|
> - **上线运营**:回复“上线运营”。
|
|
330
332
|
|
|
@@ -368,6 +370,27 @@ superun-ai chat send <sessionId> --review-followup <sourceMessageId> --message "
|
|
|
368
370
|
|
|
369
371
|
不增加“暂不需要”步骤。用户明确要求“审查完再自动测试”时,在审查及修复有效完成且无遗留问题后沿用已有授权衔接,否则等待用户选择。选择自动测试后沿用自动测试的结果规则;选择上线运营后沿用现有发布流程。当前审查流程不会在修复后自动重复审查同一范围。
|
|
370
372
|
|
|
373
|
+
## 安全扫描
|
|
374
|
+
|
|
375
|
+
研发完成后的引导增加“**安全扫描**:检查项目安全风险,必要时自动修复并生成审计报告”。用户选择即执行,默认扫描当前项目全部可用项,不展示费用和预计耗时、不增加二次确认或检查项选择。
|
|
376
|
+
|
|
377
|
+
```bash
|
|
378
|
+
superun-ai chat security <sessionId>
|
|
379
|
+
superun-ai chat security <sessionId> --no-wait
|
|
380
|
+
superun-ai chat state <sessionId> --review-id <reviewId>
|
|
381
|
+
superun-ai chat wait <sessionId> --review-id <reviewId>
|
|
382
|
+
superun-ai chat stop <sessionId> --review-id <reviewId>
|
|
383
|
+
superun-ai chat security <sessionId> --retry-report <reviewId>
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
用户主动指定范围时,可通过可重复的 `--check <category>` 传实际检查项。启动使用 Glow 同源接口,服务端将扫描写入项目会话,并自动推进评估、必要修复和报告生成。不要再通过普通 `chat send` 发送扫描或修复指令。已有扫描进行中时直接跟进,不重复启动。
|
|
387
|
+
|
|
388
|
+
`securityReview` 返回本次扫描 ID、检查项、阶段和报告;`taskProgress.markdown` 展示本次检查列表及等待中、进行中、已完成、失败、取消、跳过状态。仅变化时输出扫描进度事件,按同一 ID 更新,不展示历史扫描列表或内部任务派发消息。普通 `chat state` / `wait` 会识别当前安全扫描会话;返回的等待命令携带 `--review-id`,跨修复轮次保持本次身份。`--review-id` 和 `--message-id` 不应混用。
|
|
389
|
+
|
|
390
|
+
检查完成、扫描消息结束或修复任务启动都不代表整个流程完成。CLI 等到报告成功且取得正文后,由接入 Agent 根据 `securityReview.reportResult` 展示简洁的结果摘要,保留发现的问题、修复结果和必要注意事项。报告数据用于摘要,不展开完整正文、不提供完整报告或 PDF 下载链接、不另行生成报告文件;宿主支持直接内嵌 PDF 时可展示原 PDF,否则只展示结果。正常完成后接上“继续创作 / 自动测试 / 上线运营”引导;仅有未来条件下才需处理的注意事项时不省略菜单,存在当前必须处理的阻碍时先引导解决。修复由后端自动执行,无需用户再次确认;真实业务问题仍按现有交互处理。报告生成失败时,只在用户要求后使用 `--retry-report` 重试报告;扫描失效、失败或取消时如实说明,不自动重启。
|
|
391
|
+
|
|
392
|
+
本地超时或 Ctrl+C 只结束等待,远端任务继续;使用返回的扫描 ID 恢复等待。用户明确要求取消才调用专用取消接口。启动结果不确定时先查询已有记录,不重发写请求。
|
|
393
|
+
|
|
371
394
|
## 余额不足与充值后重试
|
|
372
395
|
|
|
373
396
|
创建请求或对话执行中余额不足时,CLI 返回充值引导:前往 [superun.ai](https://superun.ai) 充值,完成后回复“重试”。用户确认前不自动重试,也不展示继续创作或上线运营菜单。
|
|
@@ -422,7 +445,7 @@ superun-ai chat publish visibility <sessionId> private
|
|
|
422
445
|
|
|
423
446
|
`routing` 包含 `status`(ready/fallback/unavailable)、`sourceFile`、`hasMultipleSides`、`defaultSide`、`groups` 和 `warnings`。每组包含 `side`、`label`、`basePath`、`entryPath`、`entryUrl`、`shareUrl` 及 `routes`(名称、路径、可生成的 URL)。默认端取第一组,进入地址取该组第一条路由,分享地址使用 basePath;动态参数路径不虚构参数和链接。
|
|
424
447
|
|
|
425
|
-
- **单端创作完成**:直接展示该端 entryUrl,命名为“查看预览”,再给“代码审查 / 自动测试 / 继续创作 / 上线运营”。
|
|
448
|
+
- **单端创作完成**:直接展示该端 entryUrl,命名为“查看预览”,再给“代码审查 / 自动测试 / 安全扫描 / 继续创作 / 上线运营”。
|
|
426
449
|
- **多端创作完成**:按原顺序逐端展示全部有名预览链接,引导点击进入;测试和继续创作引导用户说明对应端与功能。
|
|
427
450
|
- **单端发布完成**:展示“访问网站”和继续创作引导。
|
|
428
451
|
- **多端发布完成**:逐端展示全部有名正式链接,引导进入对应端,再提供继续创作引导。
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ApiClient } from '../transport/api-client.js';
|
|
2
|
+
import type { SecurityReviewView, SecurityReviewResult } from '../contracts/security-review.js';
|
|
3
|
+
export declare function securityActive(review: SecurityReviewView | SecurityReviewResult): boolean;
|
|
4
|
+
export declare class SecurityReviewApi {
|
|
5
|
+
private readonly client;
|
|
6
|
+
private startReceipt?;
|
|
7
|
+
constructor(client: ApiClient);
|
|
8
|
+
options(sessionId: string): Promise<{
|
|
9
|
+
category: string;
|
|
10
|
+
label: string;
|
|
11
|
+
description?: string | undefined;
|
|
12
|
+
seq?: number | undefined;
|
|
13
|
+
selectable?: boolean | undefined;
|
|
14
|
+
available?: boolean | undefined;
|
|
15
|
+
}[]>;
|
|
16
|
+
start(sessionId: string, checks: string[]): Promise<SecurityReviewView>;
|
|
17
|
+
query(sessionId: string, reviewId?: string, includeResults?: boolean): Promise<SecurityReviewView>;
|
|
18
|
+
cancel(sessionId: string, reviewId: string): Promise<void>;
|
|
19
|
+
retryReport(sessionId: string, reviewId: string): Promise<void>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/** Glow 同源的安全扫描接口;编排和自动修复由 Center 负责。@author xiuyu.yi */
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { parseWire } from '../contracts/node-wire.js';
|
|
4
|
+
import { CliError } from '../output/exit-codes.js';
|
|
5
|
+
import { securityReviewSchema, SecurityStage } from '../contracts/security-review.js';
|
|
6
|
+
const PREFIX = '/api/uxa-center/agent/AgentSecurityReview';
|
|
7
|
+
export function securityActive(review) {
|
|
8
|
+
return review.stage !== undefined && review.stage < SecurityStage.COMPLETED;
|
|
9
|
+
}
|
|
10
|
+
export class SecurityReviewApi {
|
|
11
|
+
client;
|
|
12
|
+
startReceipt;
|
|
13
|
+
constructor(client) {
|
|
14
|
+
this.client = client;
|
|
15
|
+
}
|
|
16
|
+
async options(sessionId) {
|
|
17
|
+
return parseWire(z.object({
|
|
18
|
+
checks: z.array(z.object({
|
|
19
|
+
category: z.string().min(1),
|
|
20
|
+
label: z.string(),
|
|
21
|
+
description: z.string().optional(),
|
|
22
|
+
seq: z.number().optional(),
|
|
23
|
+
selectable: z.boolean().optional(),
|
|
24
|
+
available: z.boolean().optional(),
|
|
25
|
+
})),
|
|
26
|
+
}), await this.client.call(`${PREFIX}/listSecurityCheckOptions`, { sessionId })).checks;
|
|
27
|
+
}
|
|
28
|
+
async start(sessionId, checks) {
|
|
29
|
+
const response = await this.client.call(`${PREFIX}/startSecurityReview`, {
|
|
30
|
+
sessionId,
|
|
31
|
+
checks,
|
|
32
|
+
locale: this.client.config.locale,
|
|
33
|
+
}, true);
|
|
34
|
+
try {
|
|
35
|
+
const started = parseWire(securityReviewSchema.omit({ found: true }).extend({ reviewId: z.string().min(1) }), response);
|
|
36
|
+
const review = { ...started, found: true, stage: started.stage ?? SecurityStage.CREATED };
|
|
37
|
+
this.startReceipt = { sessionId, review };
|
|
38
|
+
return review;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
throw new CliError('OUTCOME_UNKNOWN', '扫描已提交但回执不完整,请查询当前扫描,勿重复启动', {
|
|
42
|
+
sessionId,
|
|
43
|
+
retryable: false,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async query(sessionId, reviewId, includeResults = false) {
|
|
48
|
+
const review = parseWire(securityReviewSchema, await this.client.call(`${PREFIX}/querySecurityReview`, {
|
|
49
|
+
sessionId,
|
|
50
|
+
...(reviewId ? { reviewId } : {}),
|
|
51
|
+
includeResults,
|
|
52
|
+
}));
|
|
53
|
+
// 新建记录尚未同步到查询副本时保留已接受回执,继续等待同一个 ID,绝不重发启动。
|
|
54
|
+
if (!review.found &&
|
|
55
|
+
this.startReceipt?.sessionId === sessionId &&
|
|
56
|
+
this.startReceipt.review.reviewId === reviewId)
|
|
57
|
+
return this.startReceipt.review;
|
|
58
|
+
if (review.found &&
|
|
59
|
+
(!review.reviewId || review.stage === undefined || (reviewId && review.reviewId !== reviewId)))
|
|
60
|
+
throw new CliError('PROTOCOL_ERROR', '扫描状态缺少身份、阶段或与本次扫描不一致', {
|
|
61
|
+
sessionId,
|
|
62
|
+
reviewId,
|
|
63
|
+
});
|
|
64
|
+
if (review.found && this.startReceipt?.review.reviewId === reviewId)
|
|
65
|
+
this.startReceipt = undefined;
|
|
66
|
+
return review;
|
|
67
|
+
}
|
|
68
|
+
async cancel(sessionId, reviewId) {
|
|
69
|
+
await this.client.call(`${PREFIX}/cancelSecurityReview`, { sessionId, reviewId }, true);
|
|
70
|
+
}
|
|
71
|
+
async retryReport(sessionId, reviewId) {
|
|
72
|
+
await this.client.call(`${PREFIX}/retrySecurityAuditReport`, { sessionId, reviewId }, true);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=security-review-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-review-api.js","sourceRoot":"","sources":["../../src/api/security-review-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import { registerRetry } from './retry.js';
|
|
|
9
9
|
import { registerStyle } from './style.js';
|
|
10
10
|
import { registerDemo } from './demo.js';
|
|
11
11
|
import { registerDevelop } from './develop.js';
|
|
12
|
+
import { registerSecurity } from './security.js';
|
|
12
13
|
import { registerInteraction } from './interaction.js';
|
|
13
14
|
import { registerPlugin } from './plugin.js';
|
|
14
15
|
import { registerPublish } from './publish.js';
|
|
@@ -25,6 +26,7 @@ export function registerChat(program, context) {
|
|
|
25
26
|
registerStyle(chat, context);
|
|
26
27
|
registerDemo(chat, context);
|
|
27
28
|
registerDevelop(chat, context);
|
|
29
|
+
registerSecurity(chat, context);
|
|
28
30
|
registerInteraction(chat, context);
|
|
29
31
|
registerPlugin(chat, context);
|
|
30
32
|
registerPublish(chat, context);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/chat/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,OAAuB;IACpE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACzD,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/B,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/chat/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,OAAuB;IACpE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACzD,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/B,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { runtime, businessWrite, withWait, waitOptions } from '../shared.js';
|
|
2
|
+
import { object, text } from '../../contracts/value.js';
|
|
3
|
+
import { SecurityStage, SecurityStatus } from '../../contracts/security-review.js';
|
|
4
|
+
import { securityActive } from '../../api/security-review-api.js';
|
|
5
|
+
import { CliError } from '../../output/exit-codes.js';
|
|
6
|
+
import { appendValue } from './message.js';
|
|
7
|
+
export function registerSecurity(chat, context) {
|
|
8
|
+
withWait(chat.command('security <sessionId>').description('安全扫描,自动评估、必要修复并生成审计报告'))
|
|
9
|
+
.option('--check <category>', '仅在用户指定范围时传入检查项,可重复使用;默认全部可用项', appendValue, [])
|
|
10
|
+
.option('--retry-report <reviewId>', '只重试本次失败的审计报告,不重新扫描或修复')
|
|
11
|
+
.action(async (sessionId, _options, command) => {
|
|
12
|
+
const service = await runtime(context, command);
|
|
13
|
+
const options = object(command.opts());
|
|
14
|
+
const retryId = text(options.retryReport);
|
|
15
|
+
const requested = options.check;
|
|
16
|
+
if (retryId && requested.length)
|
|
17
|
+
throw new CliError('INVALID_ARGUMENT', '重试报告不能指定检查项');
|
|
18
|
+
const current = await service.security.query(sessionId, retryId);
|
|
19
|
+
let reviewId = current.reviewId;
|
|
20
|
+
if (retryId) {
|
|
21
|
+
if (!current.found ||
|
|
22
|
+
current.stage !== SecurityStage.FAILED ||
|
|
23
|
+
current.reportStatus !== SecurityStatus.FAILED)
|
|
24
|
+
throw new CliError('INVALID_ARGUMENT', '本次报告不处于可重试状态,请查询扫描进度', {
|
|
25
|
+
sessionId,
|
|
26
|
+
reviewId: retryId,
|
|
27
|
+
});
|
|
28
|
+
await businessWrite(context, service, sessionId, () => service.security.retryReport(sessionId, retryId));
|
|
29
|
+
}
|
|
30
|
+
else if (!current.found || !securityActive(current)) {
|
|
31
|
+
const catalog = (await service.security.options(sessionId)).filter((item) => item.selectable !== false && item.available !== false);
|
|
32
|
+
if (!catalog.length)
|
|
33
|
+
throw new CliError('INVALID_ARGUMENT', '当前项目暂无可执行的安全检查项,请先完成研发', {
|
|
34
|
+
sessionId,
|
|
35
|
+
});
|
|
36
|
+
if (requested.some((category) => !catalog.some((item) => item.category === category)))
|
|
37
|
+
throw new CliError('INVALID_ARGUMENT', '指定检查项不可用,请使用当前项目的实际检查项', {
|
|
38
|
+
checks: catalog,
|
|
39
|
+
});
|
|
40
|
+
const checks = requested.length ? [...new Set(requested)] : catalog.map((item) => item.category);
|
|
41
|
+
await businessWrite(context, service, sessionId, async () => {
|
|
42
|
+
const response = await service.security.start(sessionId, checks);
|
|
43
|
+
reviewId = response.reviewId;
|
|
44
|
+
return response;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
if (!reviewId)
|
|
48
|
+
throw new CliError('OUTCOME_UNKNOWN', '扫描回执缺少标识,请查询会话,勿重复启动', {
|
|
49
|
+
sessionId,
|
|
50
|
+
retryable: false,
|
|
51
|
+
});
|
|
52
|
+
context.output.write(options.wait === false
|
|
53
|
+
? await service.state(sessionId, reviewId)
|
|
54
|
+
: await service.wait(sessionId, { ...waitOptions(command), reviewId }));
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/commands/chat/security.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,28 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { object } from '../../contracts/value.js';
|
|
2
|
+
import { object, text } from '../../contracts/value.js';
|
|
3
3
|
import { applySnapshot } from '../../conversation/session-waiter.js';
|
|
4
4
|
import { runtime } from '../shared.js';
|
|
5
5
|
import { appendValue } from './message.js';
|
|
6
|
+
import { CliError } from '../../output/exit-codes.js';
|
|
6
7
|
export function registerState(chat, context) {
|
|
7
8
|
chat
|
|
8
9
|
.command('state <sessionId>')
|
|
9
10
|
.description('查询当前任务和交互')
|
|
10
11
|
.option('--message-id <messageId>', '刷新指定消息快照')
|
|
12
|
+
.option('--review-id <reviewId>', '查询指定的本次安全扫描及报告')
|
|
11
13
|
.option('--progress-revision <revision>', '上次已展示的任务进度版本')
|
|
12
14
|
.option('--include-file <name>', '包含指定可见附件正文,可重复使用', appendValue, [])
|
|
13
15
|
.action(async (sessionId, _options, command) => {
|
|
14
16
|
const service = await runtime(context, command), options = object(command.opts());
|
|
17
|
+
if (options.reviewId && options.messageId)
|
|
18
|
+
throw new CliError('INVALID_ARGUMENT', '扫描 ID 与消息 ID 不能同时指定');
|
|
15
19
|
let view = await service.load(sessionId);
|
|
16
20
|
if (typeof options.messageId === 'string') {
|
|
17
21
|
const snapshot = await service.conversation.snapshot(sessionId, options.messageId);
|
|
18
22
|
if (snapshot.pipeline)
|
|
19
23
|
view = applySnapshot(view, snapshot.pipeline);
|
|
20
24
|
}
|
|
21
|
-
const result = await service.inspect(view), names = z.array(z.string()).parse(options.includeFile);
|
|
25
|
+
const result = await service.inspect(view, undefined, text(options.reviewId)), names = z.array(z.string()).parse(options.includeFile);
|
|
22
26
|
if (result.taskProgress)
|
|
23
27
|
result.taskProgress.changed = result.taskProgress.revision !== options.progressRevision;
|
|
24
28
|
if (names.length)
|
|
@@ -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;
|
|
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,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,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,wBAAwB,EAAE,gBAAgB,CAAC;SAClD,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,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS;YACvC,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC;QAChE,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,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAC3E,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"}
|
|
@@ -1,14 +1,31 @@
|
|
|
1
1
|
import { Option } from 'commander';
|
|
2
2
|
import { object, text } from '../../contracts/value.js';
|
|
3
3
|
import { runtime, businessWrite } from '../shared.js';
|
|
4
|
+
import { securityActive } from '../../api/security-review-api.js';
|
|
5
|
+
import { CliError } from '../../output/exit-codes.js';
|
|
4
6
|
export function registerStop(chat, context) {
|
|
5
7
|
chat
|
|
6
8
|
.command('stop <sessionId>')
|
|
7
9
|
.description('停止远端任务')
|
|
8
10
|
.option('--message-id <messageId>', '指定任务消息')
|
|
11
|
+
.option('--review-id <reviewId>', '只取消指定安全扫描及其自动修复')
|
|
9
12
|
.addOption(new Option('--scope <scope>', '停止范围').choices(['own', 'all']).default('own'))
|
|
10
13
|
.action(async (sessionId, _options, command) => {
|
|
11
14
|
const service = await runtime(context, command), options = object(command.opts());
|
|
15
|
+
if (options.reviewId && (options.messageId || options.scope === 'all'))
|
|
16
|
+
throw new CliError('INVALID_ARGUMENT', '指定安全扫描时不能同时指定消息或全部停止');
|
|
17
|
+
const reviewId = text(options.reviewId);
|
|
18
|
+
if (reviewId) {
|
|
19
|
+
const review = await service.security.query(sessionId, reviewId);
|
|
20
|
+
if (!review.found || !securityActive(review))
|
|
21
|
+
throw new CliError('INVALID_ARGUMENT', '该安全扫描已结束或不存在,无需取消', {
|
|
22
|
+
sessionId,
|
|
23
|
+
reviewId,
|
|
24
|
+
});
|
|
25
|
+
await businessWrite(context, service, sessionId, () => service.security.cancel(sessionId, reviewId));
|
|
26
|
+
context.output.write(await service.state(sessionId, reviewId));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
12
29
|
await businessWrite(context, service, sessionId, () => service.command.stop(sessionId, options.scope === 'all' ? 'all' : 'own', text(options.messageId)));
|
|
13
30
|
context.output.write({ state: 'COMPLETED', sessionId });
|
|
14
31
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/chat/stop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,OAAuB;IACjE,IAAI;SACD,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,QAAQ,CAAC;SACrB,MAAM,CAAC,0BAA0B,EAAE,QAAQ,CAAC;SAC5C,SAAS,CAAC,IAAI,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACvF,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,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CACpD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAClG,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/chat/stop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,OAAuB;IACjE,IAAI;SACD,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,QAAQ,CAAC;SACrB,MAAM,CAAC,0BAA0B,EAAE,QAAQ,CAAC;SAC5C,MAAM,CAAC,wBAAwB,EAAE,iBAAiB,CAAC;SACnD,SAAS,CAAC,IAAI,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACvF,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,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC;YACpE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACjE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;gBAC1C,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,mBAAmB,EAAE;oBAC1D,SAAS;oBACT,QAAQ;iBACT,CAAC,CAAC;YACL,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;YACrG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QACD,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CACpD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAClG,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import { runtime, positive, waitOptions } from '../shared.js';
|
|
2
|
+
import { CliError } from '../../output/exit-codes.js';
|
|
2
3
|
export function registerWait(chat, context) {
|
|
3
4
|
chat
|
|
4
5
|
.command('wait <sessionId>')
|
|
5
6
|
.description('等待当前交互或任务结果,期间持续展示任务进度')
|
|
6
7
|
.option('--message-id <messageId>', '起始消息 ID')
|
|
8
|
+
.option('--review-id <reviewId>', '持续跟进指定安全扫描,直到报告生成')
|
|
7
9
|
.option('--timeout <seconds>', '本地等待上限;不传则持续等待', positive)
|
|
8
10
|
.option('--interval <seconds>', '轮询最小间隔', positive)
|
|
9
11
|
.option('--progress-revision <revision>', '上次已展示的任务进度版本;仅输出变化的进度')
|
|
10
12
|
.action(async (sessionId, _options, command) => {
|
|
11
13
|
const options = waitOptions(command);
|
|
14
|
+
if (options.reviewId && options.messageId)
|
|
15
|
+
throw new CliError('INVALID_ARGUMENT', '扫描 ID 与消息 ID 不能同时指定');
|
|
12
16
|
context.output.write(await (await runtime(context, command)).wait(sessionId, {
|
|
13
17
|
...options,
|
|
14
18
|
// no-wait 回执带的新消息也必须先入流,不能返回前一轮结果。
|
|
15
|
-
requiredMessageId: options.messageId,
|
|
19
|
+
requiredMessageId: options.reviewId ? undefined : options.messageId,
|
|
16
20
|
}));
|
|
17
21
|
});
|
|
18
22
|
}
|
|
@@ -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;
|
|
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;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,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,wBAAwB,EAAE,mBAAmB,CAAC;SACrD,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;QACvE,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS;YACvC,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC;QAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,MAAM,CACJ,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAChC,CAAC,IAAI,CAAC,SAAS,EAAE;YAChB,GAAG,OAAO;YACV,mCAAmC;YACnC,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS;SACpE,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -29,6 +29,7 @@ export declare function waitOptions(command: Command): {
|
|
|
29
29
|
interval?: number;
|
|
30
30
|
messageId?: string;
|
|
31
31
|
progressRevision?: string;
|
|
32
|
+
reviewId?: string;
|
|
32
33
|
};
|
|
33
34
|
export declare function withWait(command: Command, noWaitDescription?: string): Command;
|
|
34
35
|
export declare function readInput(path: string): Promise<JsonObject>;
|
package/dist/commands/shared.js
CHANGED
|
@@ -41,6 +41,7 @@ const projectOperations = new Set([
|
|
|
41
41
|
'send',
|
|
42
42
|
'test',
|
|
43
43
|
'review',
|
|
44
|
+
'security',
|
|
44
45
|
'stop',
|
|
45
46
|
'retry',
|
|
46
47
|
'demo',
|
|
@@ -95,6 +96,7 @@ export function waitOptions(command) {
|
|
|
95
96
|
interval: typeof options.interval === 'number' ? options.interval : undefined,
|
|
96
97
|
messageId: text(options.messageId),
|
|
97
98
|
progressRevision: text(options.progressRevision),
|
|
99
|
+
reviewId: text(options.reviewId),
|
|
98
100
|
};
|
|
99
101
|
}
|
|
100
102
|
export function withWait(command, noWaitDescription = '服务端接受请求后立即返回') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** 面向终端、Agent 和 MCP 调用方的稳定输出协议。@author xiuyu.yi */
|
|
2
|
+
import type { SecurityReviewResult } from './security-review.js';
|
|
2
3
|
export type CreationState = 'ACCEPTED' | 'QUEUED' | 'RUNNING' | 'PAUSED' | 'NEEDS_INPUT' | 'NEEDS_SELECTION' | 'COMPLETED' | 'FAILED' | 'INTERRUPTED' | 'CANCELLED';
|
|
3
4
|
export type InteractionKind = 'PRD_CLARIFICATION' | 'ASK_USER_TOOL' | 'ASK_USER_MESSAGE' | 'SECRET_INPUT' | 'PLUGIN_SECRET_INPUT' | 'PLUGIN_ACTION' | 'DDL_CONFIRMATION' | 'STYLE_SELECTION' | 'ENTER_IDEATION' | 'APPROVE_ARCHITECTURE_PLAN' | 'SELECT_FEATURES' | 'START_EXECUTION' | 'MANAGED_AGENT_WIZARD' | 'UNSUPPORTED';
|
|
4
5
|
export type Question = {
|
|
@@ -106,7 +107,7 @@ export type DevelopmentProgress = {
|
|
|
106
107
|
export type TaskProgressStatus = 'submitted' | 'queued' | 'running' | 'waiting' | 'needs_input' | 'completed' | 'failed' | 'interrupted' | 'unknown';
|
|
107
108
|
export type TaskProgressItem = {
|
|
108
109
|
id: string;
|
|
109
|
-
kind: 'feature' | 'message' | 'consult' | 'subtask' | 'style' | 'other-member' | 'request';
|
|
110
|
+
kind: 'feature' | 'message' | 'consult' | 'subtask' | 'style' | 'other-member' | 'request' | 'security';
|
|
110
111
|
title: string;
|
|
111
112
|
status: TaskProgressStatus;
|
|
112
113
|
detail?: string;
|
|
@@ -169,6 +170,8 @@ export type CreationResult = {
|
|
|
169
170
|
/** 自动测试及其后续修复的上下文;不以会话完成推断测试通过。 */
|
|
170
171
|
autoTest?: CheckContext<'test'>;
|
|
171
172
|
codeReview?: CheckContext<'review'>;
|
|
173
|
+
/** 本次安全扫描的完整生命周期;不以任意单条聊天消息结束判定完成。 */
|
|
174
|
+
securityReview?: SecurityReviewResult;
|
|
172
175
|
messages: Array<{
|
|
173
176
|
id: string;
|
|
174
177
|
role: 'user' | 'assistant';
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/** 安全扫描接口和 CLI 输出共用的数据契约。@author xiuyu.yi */
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export declare const securityReviewSchema: z.ZodObject<{
|
|
4
|
+
found: z.ZodBoolean;
|
|
5
|
+
reviewId: z.ZodOptional<z.ZodString>;
|
|
6
|
+
reviewSeqNo: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
stage: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
stageDesc: z.ZodOptional<z.ZodString>;
|
|
9
|
+
currentCheckCategory: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
10
|
+
checks: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
11
|
+
category: z.ZodString;
|
|
12
|
+
label: z.ZodOptional<z.ZodString>;
|
|
13
|
+
status: z.ZodNumber;
|
|
14
|
+
statusDesc: z.ZodOptional<z.ZodString>;
|
|
15
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
status: number;
|
|
17
|
+
category: string;
|
|
18
|
+
label?: string | undefined;
|
|
19
|
+
statusDesc?: string | undefined;
|
|
20
|
+
}, {
|
|
21
|
+
status: number;
|
|
22
|
+
category: string;
|
|
23
|
+
label?: string | undefined;
|
|
24
|
+
statusDesc?: string | undefined;
|
|
25
|
+
}>, "many">>;
|
|
26
|
+
assessmentStatus: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
27
|
+
remediationRequired: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
28
|
+
remediationStatus: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
29
|
+
reportStatus: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
30
|
+
reportStatusDesc: z.ZodOptional<z.ZodString>;
|
|
31
|
+
reportResult: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
32
|
+
reportPdfUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
33
|
+
reportGeneratedAt: z.ZodOptional<z.ZodNullable<z.ZodUnion<[z.ZodNumber, z.ZodString]>>>;
|
|
34
|
+
invalidatedReason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
35
|
+
}, "strip", z.ZodTypeAny, {
|
|
36
|
+
found: boolean;
|
|
37
|
+
reviewId?: string | undefined;
|
|
38
|
+
reviewSeqNo?: number | undefined;
|
|
39
|
+
stage?: number | undefined;
|
|
40
|
+
stageDesc?: string | undefined;
|
|
41
|
+
currentCheckCategory?: string | null | undefined;
|
|
42
|
+
checks?: {
|
|
43
|
+
status: number;
|
|
44
|
+
category: string;
|
|
45
|
+
label?: string | undefined;
|
|
46
|
+
statusDesc?: string | undefined;
|
|
47
|
+
}[] | undefined;
|
|
48
|
+
assessmentStatus?: number | null | undefined;
|
|
49
|
+
remediationRequired?: boolean | null | undefined;
|
|
50
|
+
remediationStatus?: number | null | undefined;
|
|
51
|
+
reportStatus?: number | null | undefined;
|
|
52
|
+
reportStatusDesc?: string | undefined;
|
|
53
|
+
reportResult?: string | null | undefined;
|
|
54
|
+
reportPdfUrl?: string | null | undefined;
|
|
55
|
+
reportGeneratedAt?: string | number | null | undefined;
|
|
56
|
+
invalidatedReason?: string | null | undefined;
|
|
57
|
+
}, {
|
|
58
|
+
found: boolean;
|
|
59
|
+
reviewId?: string | undefined;
|
|
60
|
+
reviewSeqNo?: number | undefined;
|
|
61
|
+
stage?: number | undefined;
|
|
62
|
+
stageDesc?: string | undefined;
|
|
63
|
+
currentCheckCategory?: string | null | undefined;
|
|
64
|
+
checks?: {
|
|
65
|
+
status: number;
|
|
66
|
+
category: string;
|
|
67
|
+
label?: string | undefined;
|
|
68
|
+
statusDesc?: string | undefined;
|
|
69
|
+
}[] | undefined;
|
|
70
|
+
assessmentStatus?: number | null | undefined;
|
|
71
|
+
remediationRequired?: boolean | null | undefined;
|
|
72
|
+
remediationStatus?: number | null | undefined;
|
|
73
|
+
reportStatus?: number | null | undefined;
|
|
74
|
+
reportStatusDesc?: string | undefined;
|
|
75
|
+
reportResult?: string | null | undefined;
|
|
76
|
+
reportPdfUrl?: string | null | undefined;
|
|
77
|
+
reportGeneratedAt?: string | number | null | undefined;
|
|
78
|
+
invalidatedReason?: string | null | undefined;
|
|
79
|
+
}>;
|
|
80
|
+
export type SecurityReviewView = z.infer<typeof securityReviewSchema>;
|
|
81
|
+
export type SecurityReviewResult = Omit<SecurityReviewView, 'found'> & {
|
|
82
|
+
reviewId: string;
|
|
83
|
+
};
|
|
84
|
+
export declare const SecurityStage: {
|
|
85
|
+
readonly CREATED: 0;
|
|
86
|
+
readonly CHECKING: 1;
|
|
87
|
+
readonly ASSESSING: 2;
|
|
88
|
+
readonly REMEDIATING: 3;
|
|
89
|
+
readonly REPORTING: 4;
|
|
90
|
+
readonly COMPLETED: 5;
|
|
91
|
+
readonly FAILED: 6;
|
|
92
|
+
readonly CANCELLED: 7;
|
|
93
|
+
readonly INVALIDATED: 8;
|
|
94
|
+
};
|
|
95
|
+
export declare const SecurityStatus: {
|
|
96
|
+
readonly SKIPPED: 0;
|
|
97
|
+
readonly PENDING: 1;
|
|
98
|
+
readonly RUNNING: 2;
|
|
99
|
+
readonly SUCCEEDED: 3;
|
|
100
|
+
readonly FAILED: 4;
|
|
101
|
+
readonly CANCELLED: 5;
|
|
102
|
+
};
|