dsh-plan-completion 0.1.0 → 0.1.1
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/CHANGELOG.md +71 -46
- package/README.md +271 -263
- package/client.js +2040 -1994
- package/cordis.patch.yml +13 -12
- package/docs/delivery-notes.md +104 -102
- package/docs/phase-2-plan.md +72 -68
- package/docs/publish-assessment.md +100 -98
- package/docs/security.md +57 -0
- package/host/security.js +66 -0
- package/index.js +1281 -1325
- package/locale/en.json +6 -6
- package/locale/zh.json +6 -6
- package/package.json +58 -58
package/cordis.patch.yml
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
- insert:
|
|
2
|
-
- id: plan-completion
|
|
3
|
-
name: 'dsh-plan-completion'
|
|
4
|
-
config:
|
|
5
|
-
evidenceChars: 1500
|
|
6
|
-
maxTokensPatch: 400
|
|
7
|
-
maxTokensRewrite: 1200
|
|
8
|
-
warmBackfill: true
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
#
|
|
1
|
+
- insert:
|
|
2
|
+
- id: plan-completion
|
|
3
|
+
name: 'dsh-plan-completion'
|
|
4
|
+
config:
|
|
5
|
+
evidenceChars: 1500
|
|
6
|
+
maxTokensPatch: 400
|
|
7
|
+
maxTokensRewrite: 1200
|
|
8
|
+
warmBackfill: true
|
|
9
|
+
modelCalls: true # false: heuristic-only; no plugin model requests
|
|
10
|
+
# Debug endpoints (debug/diag/theme/experiment/autojob/steps/reset) stay off in production.
|
|
11
|
+
enableDebugRoutes: false
|
|
12
|
+
# Optional: set a local directory to persist debug logs / experiment data.
|
|
13
|
+
# debugDir: '<local debug directory>'
|
package/docs/delivery-notes.md
CHANGED
|
@@ -1,104 +1,106 @@
|
|
|
1
|
-
# 交付说明 · 会话计划补全插件(dsh-plan-completion)v0.1.0
|
|
2
|
-
|
|
3
|
-
>
|
|
4
|
-
|
|
5
|
-
>
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
|
20
|
-
|
|
21
|
-
| `dsh-plan-completion/
|
|
22
|
-
| `dsh-plan-completion/
|
|
23
|
-
| `dsh-plan-completion/
|
|
24
|
-
| `dsh-plan-completion/
|
|
25
|
-
| `
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
|
44
|
-
|
|
45
|
-
| `
|
|
46
|
-
|
|
|
47
|
-
| `
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
1.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
- [ ]
|
|
92
|
-
- [ ]
|
|
93
|
-
- [ ]
|
|
94
|
-
- [
|
|
95
|
-
- [ ]
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
1
|
+
# 交付说明 · 会话计划补全插件(dsh-plan-completion)v0.1.0
|
|
2
|
+
|
|
3
|
+
> 历史文档:以下保留 v0.1.0 的交付/评估/计划记录。当前未发布修复已接入鉴权、收紧模型路由及诊断数据,详见 [security.md](security.md) 和 [CHANGELOG](../CHANGELOG.md);旧记录中的“无鉴权”、原始诊断字段与独立评审不代表当前实现。
|
|
4
|
+
|
|
5
|
+
> 一期交付 · 2026-11-02 · 真机验收通过
|
|
6
|
+
> 设计与实现说明见 `README.md`;设计规格见 `docs/design-v1.2.md`
|
|
7
|
+
> 实验数据归档见 `docs/experiment-archive.md`
|
|
8
|
+
|
|
9
|
+
## 一、它是什么
|
|
10
|
+
|
|
11
|
+
在 DSH 输入框上方常驻的「计划补全」助手:
|
|
12
|
+
|
|
13
|
+
- 每次 AI 回合结束,自动在输入框上方生成一句**可直接发送的下一句建议**;按 `Tab` 填入输入框(只填入、不发送)。
|
|
14
|
+
- 左侧常驻 `▤ vX.Y` 入口,点开可看**隐式计划**:步骤列表、每步状态、证据与最近更新原因。
|
|
15
|
+
- 计划与建议都是后台由独立模型调用生成,**不进入主对话、不改变 Agent 的提示词/工具/行为**。
|
|
16
|
+
|
|
17
|
+
## 二、交付物
|
|
18
|
+
|
|
19
|
+
| 路径 | 说明 |
|
|
20
|
+
|---|---|
|
|
21
|
+
| `dsh-plan-completion/index.js` | Host 半:事件监听、计划/建议生成、HTTP 路由、slash 命令、用户编辑通道 |
|
|
22
|
+
| `dsh-plan-completion/client.js` | Client 半:建议条 + 常驻入口 + 计划 Popover + Tab/快捷键 + 主题适配 |
|
|
23
|
+
| `dsh-plan-completion/host/*.js` | 纯函数模块:plan / prompt / evidence / heuristics / config / store / job / experiment |
|
|
24
|
+
| `dsh-plan-completion/test/` | 111 个单测(plan / prompt / heuristics / evidence / job / store / pipeline / Host 接线 / Client 生命周期 / 安全与隐私) |
|
|
25
|
+
| `dsh-plan-completion/cordis.patch.yml` | 插件装配行 + **生产配置** |
|
|
26
|
+
| `dsh-plan-completion/README.md` | 实现说明、触发链路、数据通道、配置、验证状态、已知限制 |
|
|
27
|
+
| `docs/experiment-archive.md` | 实验与验收数据摘要(仓库内);原始数据仅本地保留(`research/archive/…`) |
|
|
28
|
+
|
|
29
|
+
## 三、安装 / 卸载
|
|
30
|
+
|
|
31
|
+
已安装在当前 profile(bundle id `dsh-plan-completion`)。重装 / 卸载:
|
|
32
|
+
|
|
33
|
+
```powershell
|
|
34
|
+
plugin_manager install_bundle target='<repo>'
|
|
35
|
+
plugin_manager remove_bundle target='dsh-plan-completion'
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
- **Host 代码变更**:需要一次 profile 重组(`plugin_manager set_plugin` 开关一次,或重装)后生效。
|
|
39
|
+
- **Client 代码变更**:需要刷新页面(Ctrl+R)后生效;链接的本地 bundle 不会自动热更。
|
|
40
|
+
|
|
41
|
+
## 四、使用
|
|
42
|
+
|
|
43
|
+
| 操作 | 效果 |
|
|
44
|
+
|---|---|
|
|
45
|
+
| `Tab`(输入框聚焦) | 把当前建议填入输入框(不发送) |
|
|
46
|
+
| `Alt+1..3` | 填入第 1~3 条备选建议 |
|
|
47
|
+
| `Esc` | 关闭当前建议(只留 `▤` 入口) |
|
|
48
|
+
| 点击 `▤ vX.Y` | 打开计划页(步骤 / 状态 / 证据 / 更新原因) |
|
|
49
|
+
| `Ctrl+Alt+P` | 快速打开/关闭计划页 |
|
|
50
|
+
| `/roadmap` | 在会话里查看当前计划(只读) |
|
|
51
|
+
| `/replan <方向>` | 带方向强制重写计划(用户编辑过计划后,这是唯一能整体重写的入口) |
|
|
52
|
+
|
|
53
|
+
## 五、生产配置(已冻结)
|
|
54
|
+
|
|
55
|
+
`cordis.patch.yml`:
|
|
56
|
+
|
|
57
|
+
```yaml
|
|
58
|
+
- insert:
|
|
59
|
+
- id: plan-completion
|
|
60
|
+
name: 'dsh-plan-completion'
|
|
61
|
+
config:
|
|
62
|
+
evidenceChars: 1500 # patch 路径证据字符预算
|
|
63
|
+
maxTokensPatch: 400 # patch 输出上限(实测只需 65~120)
|
|
64
|
+
maxTokensRewrite: 1200 # rewrite/冷启动输出上限(输出完整步骤表)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
改配置 → 重组插件 → 看 Host 启动日志 `host-ready.settings` 确认生效。
|
|
68
|
+
|
|
69
|
+
## 六、验证证据链
|
|
70
|
+
|
|
71
|
+
1. **单测**:78 tests / 78 pass / 0 fail。
|
|
72
|
+
2. **两轮隔离测试**(固定快照 + 固定计划;温度 0;每组 3 次;字符切片;跨模型盲评):
|
|
73
|
+
- 证据 800/2000/4000 字符 → 盲评 4.67/5 持平;输出 200/300/500 → 4.63/4.67/4.70;27/27 解析成功、可用率 100%。
|
|
74
|
+
- 结论:证据 800~1200 字符、输出 200~300 tokens 足够;增加上下文无收益。
|
|
75
|
+
3. **6 条真机 auto-job 样本**:输出 75~113 tok(均值 88)、延迟 1.25~1.53s、建议 21~36 字、6/6 可用;计划无实质变化时不 bump。
|
|
76
|
+
4. **配置生效**:`host-ready.config` 回显 1500/400/1200;force 调用 `maxTokens:1200`、patch 调用 `maxTokens:400`。
|
|
77
|
+
5. **UI 验收**:浅色 / 暗色主题截图、建议胶囊与会话卡片左缘对齐、无建议时只剩 `▤`、新会话/切会话行为符合预期。
|
|
78
|
+
6. **用户编辑通道**:标记 s4 done → `gen+1 / editedByUser=true / reason 记录`,之后模型只能 patch;整计划整理(分类)→ 7 步 `[交付]/[验证]/[冻结]/[收尾]/[二期]`。
|
|
79
|
+
|
|
80
|
+
## 七、已知限制(v0.1.1 现状)
|
|
81
|
+
|
|
82
|
+
1. **旧会话回填已支持**(v0.1.1):打开插件从未观察过的会话时,Client 会 POST `/plan-completion/warm`,Host 从持久化会话日志重建计划+建议(同一会话 10 分钟内只回填一次;需要一次模型调用,可用 `warmBackfill:false` 关闭)。不触发回填时仍只有 `▤` 入口。
|
|
83
|
+
2. **计划不持久化**:进程内存保存,DSH 重启后计划丢失,下个回合结束重新生成(二期接 `storageDomain`)。
|
|
84
|
+
3. **用户编辑锁**:`editedByUser=true` 后模型不能自动 rewrite 覆盖计划,只能 patch;需要整体重构用 `/replan`。
|
|
85
|
+
4. **调试路由**:`experiment|autojob|steps|theme|diag|reset|debug` 仅在 `enableDebugRoutes:true` 时注册,且与其他路由一样必须通过宿主 `connection.requestRejection`(v0.1.1 起)。
|
|
86
|
+
5. **无「核对进度」按钮**:计划页当前只展示状态/证据;按需模型核对按钮在二期清单(见下)。
|
|
87
|
+
6. **模型路由**:v0.1.1 起只使用宿主当前默认 provider/model(不再自动改投其他供应商);`modelCalls:false` 可关闭插件全部模型调用。用户三选一设置页仍在二期。
|
|
88
|
+
|
|
89
|
+
## 八、二期清单
|
|
90
|
+
|
|
91
|
+
- [ ] 计划持久化(`storageDomain` + 文件存储,重启不丢)
|
|
92
|
+
- [ ] 模型选择设置页(跟随会话默认 / 固定模型 / 自动挑非思考模型)
|
|
93
|
+
- [ ] 右栏计划页(`ctx.sidebarRightTabs.register`,替代/补充浮层)
|
|
94
|
+
- [x] 路由鉴权(`connection.requestRejection` / `connection.fetch`)——已在 v0.1.1 交付
|
|
95
|
+
- [ ] 「核对进度」按钮(按需一次调用,输出计划 vs 实际差异清单)
|
|
96
|
+
- [x] 挂载时回填(打开老会话时按需生成计划/建议)——已在 v0.1.1 交付
|
|
97
|
+
- [ ] 每日 token 预算闸(可选)
|
|
98
|
+
|
|
99
|
+
## 九、排障
|
|
100
|
+
|
|
101
|
+
- 运行日志:`<debugDir>/plan-completion-runtime.jsonl`(Host 侧 debugLog;含 `host-ready` / `routes-registered` / `model-usage` / `client-diag` / `user-edit`)。
|
|
102
|
+
- 状态自检:`GET /plan-completion/state?sessionId=…`、`GET /plan-completion/debug`。
|
|
103
|
+
- 客户端自检:`POST /plan-completion/diag` 上报 `build / hasPill / hasEntry / entryText / suggestVisible / rowHeight` 与计算样式。
|
|
104
|
+
- 插件「没显示」排查顺序:① Ctrl+R 刷新页面 → ② 确认 profile 里插件 enabled → ③ `/plan-completion/debug` 看 `host-ready` 服务是否齐全 → ④ 看 `client-diag` 是否有 `hasPill/hasEntry`。
|
|
103
105
|
|
|
104
106
|
|
package/docs/phase-2-plan.md
CHANGED
|
@@ -1,69 +1,73 @@
|
|
|
1
|
-
# 会话计划补全插件 · 二期计划
|
|
2
|
-
|
|
3
|
-
>
|
|
4
|
-
|
|
5
|
-
>
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
|
18
|
-
|
|
19
|
-
| P0-
|
|
20
|
-
| P0-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
|
29
|
-
|
|
30
|
-
| P1-
|
|
31
|
-
| P1-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
1
|
+
# 会话计划补全插件 · 二期计划
|
|
2
|
+
|
|
3
|
+
> 历史文档:以下保留 v0.1.0 的交付/评估/计划记录。当前未发布修复已接入鉴权、收紧模型路由及诊断数据,详见 [security.md](security.md) 和 [CHANGELOG](../CHANGELOG.md);旧记录中的“无鉴权”、原始诊断字段与独立评审不代表当前实现。
|
|
4
|
+
|
|
5
|
+
> 版本:v2.0 计划草案 · 2026-11-02
|
|
6
|
+
> 依据:一期交付(见 `dsh-plan-completion/交付说明.md`)+ 本次真机反馈(常驻、计划页视觉、GitHub 发布评估)
|
|
7
|
+
> 目标:把「能用」的一期做成「稳、好看、可发布」的二期
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 一、二期范围与优先级
|
|
12
|
+
|
|
13
|
+
### P0(必须,决定可用性与发布)
|
|
14
|
+
|
|
15
|
+
> 更新(v0.1.1):P0-1(挂载回填)、P0-2(Hero 常驻)、P0-4(路由鉴权)已交付;以下保留原始规划记录,未完成项为 P0-3 / P0-5 / P0-6。
|
|
16
|
+
|
|
17
|
+
| # | 事项 | 现状问题 | 方案 | 验收标准 | 预估 |
|
|
18
|
+
|---|---|---|---|---|---|
|
|
19
|
+
| P0-1 | ✅ **挂载时回填(旧会话也能有建议)** | 插件只处理「激活后观察到 turn/end」的会话;老会话打开只有裸入口 | client 挂载时若 `state.stale && !plan`,POST `/plan-completion/warm {sessionId}`;host 用 `session.snapshotEvents` 回填一次计划+建议(可在会话无新回合时工作) | 打开任意历史会话 ≤5s 出现建议;同一会话只回填一次(按 session+seq 去重) | ✅ 已交付(v0.1.1) |
|
|
20
|
+
| P0-2 | ✅ **真·常驻(hero / 新会话也有入口)** | `conversation.input.dock` 在无 Session 的 hero 页不渲染;删除全部消息后栏位消失 | 在 `shell.overlay` 增加一个随 composer 定位的轻量 `▤ 计划` 入口(hero 时显示;已有 dock 时隐藏避免重复);无计划时保留虚线提示胶囊(一期已做) | 新会话 hero、删除全部消息、旧会话、正常会话四种状态都有入口且不重叠 | ✅ 已交付(v0.1.1) |
|
|
21
|
+
| P0-3 | **计划持久化** | 进程内存,DSH 重启丢失 | `storageDomain` 持久化 plan(按 sessionId 分 key)+ 启动时恢复 + 版本号 `gen.rev` 保留 | 重启 DSH 后同一会话仍显示原计划与版本;schema 变更可迁移 | 1d |
|
|
22
|
+
| P0-4 | ✅ **路由鉴权** | `/plan-completion/*` 调试路由无鉴权(本机回环) | 使用 `connection.requestRejection` 校验来源、或改用 `connection.fetch` 同源校验;调试路由默认仅本机、可配置关闭 | 非本机/非 DSH 页面的请求被拒;客户端不受影响 | ✅ 已交付(v0.1.1) |
|
|
23
|
+
| P0-5 | **「核对进度」按钮** | 计划页只能看状态,无法对照实际进度 | 计划页底部加「核对进度」→ POST `/plan-completion/verify` → 一次模型调用生成「计划 vs 实际差异 + 建议修正」→ 展示在计划页(可折叠、可采纳) | 点击后 ≤5s 返回差异清单;采纳后生成 patch;失败有降级文案 | 1d |
|
|
24
|
+
| P0-6 | **发布工程化** | 无 git 仓库 / LICENSE / CI / 包元数据、README 含本地绝对路径 | 见 `发布评估-GitHub.md` 的 P0 清单 | 全部 P0 项 PASS,`node --test` 绿,仓库可公开 | 1d |
|
|
25
|
+
|
|
26
|
+
### P1(体验增强)
|
|
27
|
+
|
|
28
|
+
| # | 事项 | 方案 | 验收 |
|
|
29
|
+
|---|---|---|---|
|
|
30
|
+
| P1-1 | 模型三选一设置页 | 跟随会话默认 / 固定模型 / 自动挑非思考模型;落插件 config + 设置页 | UI 可切换并即时生效,日志记录实际路由 |
|
|
31
|
+
| P1-2 | 右栏计划页 | `ctx.sidebarRightTabs.register` 提供常驻计划 tab,浮层保留为快捷入口 | 右栏可打开、与浮层状态一致 |
|
|
32
|
+
| P1-3 | 建议「依据」展示 | 保持一行;hover tooltip 显示 `plan.reason`;`suggestionLines: 1\|2` 作为配置项(默认 1) | 默认视觉不变,hover 可看依据 |
|
|
33
|
+
| P1-4 | 计划页编辑能力 | 状态点击切换(走 `/steps`)、步骤增删、`/replan` 入口按钮;`editedByUser` 语义保持 | 用户编辑后 gen+1、模型只 patch |
|
|
34
|
+
| P1-5 | 每日 token 预算闸 | 配置 `dailyTokenBudget`,超限降级启发式并提示 | 超预算时无模型调用、UI 有提示 |
|
|
35
|
+
| P1-6 | 单元测试补强 | client 纯逻辑(normalize/format/fill 决策)抽到可测模块;新增 shared-host 生命周期测试 | 测试 ≥120 且 CI 绿 |
|
|
36
|
+
|
|
37
|
+
### P2(打磨)
|
|
38
|
+
|
|
39
|
+
- 计划导出 Markdown / 复制为 checklist;
|
|
40
|
+
- 建议历史(最近 5 条,可回填);
|
|
41
|
+
- 多语言补全(en 全文案);
|
|
42
|
+
- 图标与空态插画;
|
|
43
|
+
- 性能:轮询降频策略、页面隐藏时暂停;
|
|
44
|
+
- 失败重试策略统一(模型超时/空输出/非法 JSON 的退避)。
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 二、本轮已顺带修复的技术债(记录)
|
|
49
|
+
|
|
50
|
+
1. **重复 handler 泄漏**:插件 toggle/hot reload 后旧模块的 HTTP 路由仍存活,导致同一路径出现新旧两个处理实例(`/state` 读旧、`/reset` 写新)。已改为 `globalThis` 共享状态 + 注册前 dispose 旧 disposers。
|
|
51
|
+
2. **客户端不清空计划**:服务端返回 `plan:null` 时客户端仍保留旧计划,导致「计划/建议不消失」。已加 `handlePlanFetch → clearPlanResult`。
|
|
52
|
+
3. **常驻兜底**:无计划时显示虚线提示胶囊 + `▤ 计划` 入口(已验证 `entryText=▤计划`、`suggestVisible=false`)。
|
|
53
|
+
4. **计划页视觉 v2**:卡片式面板(16px 圆角、双层阴影、分区 header/body/footer、状态胶囊、建议高亮卡、底部操作栏),截图验证通过。
|
|
54
|
+
5. **调试日志路径可配置**:`config.debugDir` / `DSH_PLAN_COMPLETION_DEBUG_DIR`,为空不写文件(为发布清路径做准备)。
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 三、里程碑
|
|
59
|
+
|
|
60
|
+
| 里程碑 | 内容 | 出口标准 |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| M2.0 | P0-1/2/3(回填、常驻、持久化) | 四类会话状态都有入口;重启不丢计划 |
|
|
63
|
+
| M2.1 | P0-4/5(鉴权、核对按钮) | 安全审计 + 核对可用 |
|
|
64
|
+
| M2.2 | P0-6 + P1-1/2(发布工程化、设置页、右栏) | GitHub 公开、CI 绿、文档齐 |
|
|
65
|
+
| M2.3 | P1-3/4/5/6(依据、编辑、预算、测试) | 体验与稳定性达标 |
|
|
66
|
+
|
|
67
|
+
## 四、风险
|
|
68
|
+
|
|
69
|
+
- **回填成本**:打开旧会话触发一次模型调用;用「每个会话一次 + 预算闸」控制。
|
|
70
|
+
- **跨版本兼容**:持久化 schema 需版本字段与迁移器。
|
|
71
|
+
- **鉴权改动**:可能影响现有同源 fetch 契约(一期已验证的通道),需回归。
|
|
72
|
+
- **用户编辑锁**:编辑后模型不能 rewrite,需在 UI 明确「/replan 可整体重写」。
|
|
69
73
|
|