kcode-pi 0.1.34 → 0.1.38

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.
Files changed (43) hide show
  1. package/README.md +10 -10
  2. package/dist/cli/kcode.js +3 -3
  3. package/dist/context/project-context.js +4 -5
  4. package/dist/harness/prompt-policy.d.ts +19 -0
  5. package/dist/harness/prompt-policy.js +206 -0
  6. package/dist/harness/types.d.ts +74 -0
  7. package/dist/harness/types.js +16 -0
  8. package/dist/product/profile.d.ts +20 -0
  9. package/dist/product/profile.js +103 -0
  10. package/docs/CHANGELOG.md +90 -2
  11. package/docs/COMMAND_REFERENCE.md +27 -12
  12. package/docs/DEVELOPMENT.md +3 -3
  13. package/docs/EVIDENCE_AND_GATES.md +15 -8
  14. package/docs/HARNESS_WORKFLOW.md +32 -12
  15. package/docs/KCODE_DISTRIBUTION.md +7 -7
  16. package/docs/PRODUCT_PROFILE.md +9 -9
  17. package/docs/TROUBLESHOOTING.md +8 -8
  18. package/docs/USER_GUIDE.md +10 -10
  19. package/extensions/kingdee-harness.ts +141 -86
  20. package/extensions/kingdee-header.ts +1 -1
  21. package/extensions/kingdee-subagents.ts +1 -1
  22. package/extensions/kingdee-tools.ts +44 -44
  23. package/package.json +1 -1
  24. package/src/cli/kcode.ts +3 -3
  25. package/src/context/project-context.ts +4 -5
  26. package/src/harness/artifacts.ts +6 -7
  27. package/src/harness/data-source-policy.ts +346 -0
  28. package/src/harness/delegation.ts +28 -23
  29. package/src/harness/gates.ts +16 -1
  30. package/src/harness/messages.ts +65 -11
  31. package/src/harness/path-policy.ts +1 -0
  32. package/src/harness/plan-steps.ts +3 -3
  33. package/src/harness/prompt-policy.ts +227 -0
  34. package/src/harness/prompt.ts +12 -16
  35. package/src/harness/question-memory.ts +220 -0
  36. package/src/harness/repair.ts +18 -3
  37. package/src/harness/state.ts +93 -6
  38. package/src/harness/types.ts +19 -0
  39. package/src/official/kingdee-skills.ts +4 -4
  40. package/src/product/profile.ts +2 -2
  41. package/src/rules/checker.ts +27 -27
  42. package/src/tools/build-debug.ts +5 -5
  43. package/src/tools/sdk-signature.ts +4 -4
package/docs/CHANGELOG.md CHANGED
@@ -6,6 +6,94 @@
6
6
 
7
7
  - 暂无。
8
8
 
9
+ ## 0.1.38 - 2026-06-07
10
+
11
+ ### 修复
12
+
13
+ - 将用户要求的“足够事实后再编码”规则集中写入运行时策略,并自动生成到 `.pi/kd/PROJECT_CONTEXT.md` 的持久规则中,确保新会话继承约束。
14
+ - 明确 API/SDK 文档不能替代 FormId、字段/实体、插件事件、SQL/KSQL 表名、字段映射、并发、日志和验收数据等业务事实。
15
+ - `run.facts` 固化为唯一结构化事实源;已回答 questions 仅作为审计记录,读取状态时不再从历史问题答案反推门禁事实。
16
+ - 状态读取时过滤未知 `factLabel` 和无效事实值,规范化可识别事实标签,避免自造标签或占位答案污染门禁。
17
+
18
+ ### 文档
19
+
20
+ - 在 Harness 工作流和证据门禁文档中补充项目持久规则、业务事实门禁和外部/BOS 人工验证边界。
21
+
22
+ ### 验证
23
+
24
+ - `npm run check`
25
+ - `npm run smoke:harness`
26
+ - `npm run smoke:kcode-command`
27
+ - `npm run smoke:package`
28
+ - `npm run smoke:official`
29
+ - `npm run build:cli`
30
+ - `git diff --check`
31
+
32
+ ## 0.1.37 - 2026-06-07
33
+
34
+ ### 修复
35
+
36
+ - `factLabel` 限制为集中定义的事实标签或别名,禁止 LLM 自造标签写入门禁事实。
37
+ - 数据源上下文门禁只信任结构化 facts 和 evidence,不再仅凭 PLAN 自由文本证明 FormId、字段、插件事件或读写方式。
38
+ - 开放事实问题拒绝“可以、好的、是”等口头确认语;确认题只接受明确肯定或明确否定。
39
+ - 重复 open 问题不会再次写入阶段文档,`/kd-answer` 会区分已回答、无效答案和问题不存在。
40
+
41
+ ### 验证
42
+
43
+ - `npm run check`
44
+ - `npm run smoke:harness`
45
+ - `npm run smoke:package`
46
+ - `npm run smoke:official`
47
+ - `npm run build:cli`
48
+ - `git diff --check`
49
+
50
+ ## 0.1.36 - 2026-06-07
51
+
52
+ ### 修复
53
+
54
+ - `kd_question` 改为结构化事实账本:带 `factLabel` 的答案会写入 current fact,否定确认题不会成为事实。
55
+ - 同一 `factLabel` 已有 open 问题或当前事实时禁止重复提问;事实更正必须使用 `action=revise`,旧值会标记为 superseded。
56
+ - 移除 `kd_question` 的交互输入/自定义输入路径;当前只有一个 open blocking 问题时,用户普通短答会自动记录为答案。
57
+ - 占位答案如“待确认、未知、按实际环境、TODO/TBD”不能解除门禁。
58
+ - 子 agent 上下文显式注入已问已答事实和未回答问题,避免委派任务丢失关键约束。
59
+ - Cosmic metadata 数据源证据要求 evidence index `exitCode=0` 且 JSON 内容可解析,避免失败或空证据通过门禁。
60
+ - `kd_verify_result` 拒绝空命令、`unknown` 和占位命令,避免坏 payload 写入验证证据。
61
+
62
+ ### 验证
63
+
64
+ - `npm run check`
65
+ - `npm run smoke:harness`
66
+ - `npm run smoke:package`
67
+ - `npm run smoke:official`
68
+ - `npm run build:cli`
69
+ - `git diff --check`
70
+
71
+ ## 0.1.35 - 2026-06-07
72
+
73
+ ### 新增
74
+
75
+ - 新增集中式工程指令策略,统一管理实现契约、数据源上下文、第三方对接上下文、提示风格和阶段约束。
76
+ - 新增数据源与实现就绪门禁,产品代码写入前必须具备触发入口、源对象、目标对象、字段映射、业务规则、失败处理和验收样例。
77
+ - 新增第三方对接上下文门禁,要求接口文档、对接方向、认证配置、字段映射、并发幂等、重试限流、错误补偿、日志脱敏和验收样例齐全后再编码。
78
+
79
+ ### 改进
80
+
81
+ - 将 Harness、extensions、CLI、工具说明、静态检查结果和文档中的用户/LLM 可见文本改为正式工程指令,减少口语化表达。
82
+ - 强化企业版 C#、企业版 Python、苍穹、星瀚和星空旗舰版的数据源证据要求。
83
+ - 企业版 Python 插件明确为用户侧 BOS 注册和功能测试证据,LLM 不能替代外部系统操作,只能要求用户提供可核验证据并记录来源。
84
+ - 子 agent、自动修复循环、项目上下文、SDK 签名和 KSQL/SQL lint 的输出改为“必须/禁止/执行/记录”式约束。
85
+
86
+ ### 验证
87
+
88
+ - `npm run check`
89
+ - `npm run smoke:harness`
90
+ - `npm run smoke:package`
91
+ - `npm run smoke:checker`
92
+ - `npm run smoke:build-debug`
93
+ - `npm run smoke:official`
94
+ - `npm run build:cli`
95
+ - `git diff --check`
96
+
9
97
  ## 0.1.30 - 2026-06-07
10
98
 
11
99
  ### 新增
@@ -99,7 +187,7 @@
99
187
  ### 改进
100
188
 
101
189
  - 收敛运行时 prompt,只保留状态、最近阶段资料、项目上下文摘要、当前阶段任务和核心约束。
102
- - 精简 `kd-plan`、`kd-execute`、`kd-verify` 命令入口提示,减少和 skills、门禁规则的重复。
190
+ - 精简 `kd-plan`、`kd-execute`、`kd-verify` 命令入口指令,减少和 skills、门禁规则的重复。
103
191
  - 移除不存在的 IDE 相关验证表述,保留 Gradle/dotnet 的真实构建验证策略。
104
192
 
105
193
  ### 验证
@@ -116,7 +204,7 @@
116
204
 
117
205
  - 将包版本更新到 `0.1.23`,并同步 `package-lock.json` 顶层版本信息。
118
206
  - 改进文档示例、用户文档和 README 使用说明。
119
- - 优化 Harness 门禁、证据跟踪、恢复流程和风险确认提示。
207
+ - 优化 Harness 门禁、证据跟踪、恢复流程和风险确认指令。
120
208
  - 使用 Gradle 和 dotnet 作为对应产品画像的构建验证入口。
121
209
  - 本地化 KCode prompts,并要求关键 SDK 结论提供签名证据。
122
210
 
@@ -1,6 +1,6 @@
1
1
  # 命令参考
2
2
 
3
- 本文集中说明 KCode 的终端命令、Pi 内命令和内置工具参数。首次使用请先看 [用户指南](USER_GUIDE.md),工作流顺序请看 [Harness 工作流](HARNESS_WORKFLOW.md)。
3
+ 本文集中说明 KCode 的终端命令、Pi 内命令和内置工具参数。首次使用阅读 [用户指南](USER_GUIDE.md),工作流顺序见 [Harness 工作流](HARNESS_WORKFLOW.md)。
4
4
 
5
5
  ## 终端命令
6
6
 
@@ -77,7 +77,7 @@ kcode doctor --deep
77
77
  kcode repair
78
78
  ```
79
79
 
80
- 升级后或 `doctor --deep` 提示旧路径时使用。
80
+ 升级后或 `doctor --deep` 报告旧路径时使用。
81
81
 
82
82
  ### kcode start
83
83
 
@@ -87,7 +87,7 @@ kcode repair
87
87
  kcode start
88
88
  ```
89
89
 
90
- `start` 会先自动执行项目级初始化,再启动随包 Pi CLI。后续参数会原样传给 Pi CLI:
90
+ `start` 会自动执行项目级初始化,再启动随包 Pi CLI。后续参数会原样传给 Pi CLI:
91
91
 
92
92
  ```powershell
93
93
  kcode start --provider openai --model gpt-4o
@@ -99,13 +99,13 @@ kcode start --provider openai --model gpt-4o
99
99
 
100
100
  ### /kd-start
101
101
 
102
- 创建一个新的 Kingdee Harness run。输入可以是一条需求,也可以是需求文档来源:
102
+ 创建一个新的 Kingdee Harness run。输入允许是一条需求,或需求文档来源:
103
103
 
104
104
  ```text
105
105
  /kd-start [--product 产品] [--version 版本] <需求或需求组>
106
106
  ```
107
107
 
108
- 推荐显式带产品:
108
+ 使用显式产品参数:
109
109
 
110
110
  ```text
111
111
  /kd-start --product cangqiong --version V6.0 实现采购订单保存校验
@@ -263,7 +263,7 @@ discuss -> spec -> plan -> execute -> verify -> ship
263
263
  /kd-review [审查重点]
264
264
  ```
265
265
 
266
- 用于检查状态机漏洞、门禁绕过、证据缺口、提示词分散和测试缺口。子 agent 不修改文件,主 agent 负责采纳结论和后续修复。
266
+ 用于检查状态机漏洞、门禁绕过、证据缺口、工程指令分散和测试缺口。子 agent 不修改文件,主 agent 负责采纳结论和后续修复。
267
267
 
268
268
  ### /kd-delegate
269
269
 
@@ -288,7 +288,7 @@ verify 只读分析验证命令和失败证据,实际验证由主 agent 执
288
288
 
289
289
  ## 内置工具
290
290
 
291
- 这些工具多数情况下会由 KCode 自动使用;当需要明确证据或排障时,也可以按下面参数手动调用。
291
+ 这些工具多数情况下由 KCode 自动使用;明确证据或排障时,支持按下面参数手动调用。
292
292
 
293
293
  ### kd_plan_status
294
294
 
@@ -303,12 +303,27 @@ kd_plan_status
303
303
  记录、回答或列出结构化问题:
304
304
 
305
305
  ```text
306
- kd_question action=ask question="采购入库单 Form ID 是否为 pur_receivebill?" choices=["","不是"]
306
+ kd_question action=ask factLabel="目标 FormId/单据或表单标识" question="目标 FormId、单据或表单标识是什么?"
307
+ kd_question action=ask factLabel="目标 FormId/单据或表单标识" proposedFactValue="pur_receivebill" question="采购入库单 Form ID 是否为 pur_receivebill?" choices=["是","不是"]
307
308
  kd_question action=answer id=Q-001 answer=是
309
+ kd_question action=revise factLabel="目标 FormId/单据或表单标识" answer="SAL_SaleOrder" reason="用户更正先前答案"
308
310
  kd_question action=list
309
311
  ```
310
312
 
311
- 一次只能登记一个当前最阻塞的问题,最多 3 个简短选项。
313
+ 一次只能登记一个当前最阻塞的问题,最多 3 个简短选项。`action=ask` 只登记 open 问题,不弹出输入框、不在工具调用内继续追问。
314
+
315
+ 结构化事实参数:
316
+
317
+ ```text
318
+ factLabel 可选,该答案要补齐的门禁事实标签
319
+ proposedFactValue 可选,确认题候选事实值;用户回答 是/yes 时写入 factLabel
320
+ ```
321
+
322
+ 门禁只消费当前结构化事实。没有 `factLabel` 的问答只作为上下文记录,不直接解除数据源、字段、接口等事实缺口。
323
+
324
+ `factLabel` 必须使用 KCode 集中定义的实现契约、数据源上下文或第三方对接事实标签,允许使用这些标签的别名并自动规范为正式标签。同一 `factLabel` 已有 open 问题时禁止重复提问;已有当前事实时禁止再次提问,必须使用 `action=revise` 显式修订。`待确认`、`未知`、`按实际环境`、`TODO/TBD`、单独“是/否”和“可以/好的”等口头确认不会解除开放事实问题。带 `proposedFactValue` 的确认题只接受明确肯定或明确否定。
325
+
326
+ 当前只有一个 open blocking 问题时,用户下一条普通短答会自动记录为该问题答案;命令、疑问句和明显的新任务不会自动记录。
312
327
 
313
328
  ### kd_subagent
314
329
 
@@ -367,7 +382,7 @@ product 可选,flagship/xinghan/cangqiong/enterprise
367
382
  edition 旧参数,等同 product
368
383
  ```
369
384
 
370
- 随包表结构主要覆盖旗舰版和企业版;Cosmic 家族字段和数据库信息优先用 `kd_cosmic_metadata`。
385
+ 随包表结构主要覆盖旗舰版和企业版;Cosmic 家族字段和数据库信息默认用 `kd_cosmic_metadata`。
371
386
 
372
387
  ### kd_check
373
388
 
@@ -450,7 +465,7 @@ mode 必填,search/search-method/detail
450
465
  query 必填,类名、方法名或完整限定类名
451
466
  config 可选,ok-cosmic.json 路径
452
467
  method 可选,detail 模式下过滤方法
453
- compact 可选,请求紧凑详情输出
468
+ compact 可选,紧凑详情输出
454
469
  dryRun 可选,只展示命令
455
470
  ```
456
471
 
@@ -532,7 +547,7 @@ kd_debug text="<日志或堆栈>" product=enterprise
532
547
  ```text
533
548
  text 可选,与 path 二选一
534
549
  path 可选,与 text 二选一
535
- product 可选,产品提示
550
+ product 可选,产品上下文
536
551
  ```
537
552
 
538
553
  ## 常用组合
@@ -1,6 +1,6 @@
1
1
  # KCode 开发与发布说明
2
2
 
3
- 本文档面向 KCode 维护者。用户安装和使用说明请看根目录 `README.md`。
3
+ 本文档面向 KCode 维护者。用户安装和使用说明见根目录 `README.md`。
4
4
 
5
5
  ## 源码开发
6
6
 
@@ -117,7 +117,7 @@ npm run release:check
117
117
  npm publish
118
118
  ```
119
119
 
120
- 如果使用 scoped 包并发布到公网 npm
120
+ 使用 scoped 包并发布到公网 npm 时:
121
121
 
122
122
  ```powershell
123
123
  npm publish --access public
@@ -152,7 +152,7 @@ docs/KCODE_DISTRIBUTION.md
152
152
  - 是否写全局配置或访问敏感路径。
153
153
  - 是否与 KCode harness、权限策略、上下文策略冲突。
154
154
 
155
- 通过审查后优先使用项目级推荐安装,写入 `.pi/settings.json`。只有离线交付或强依赖时,才考虑 `dependencies` + `bundledDependencies` 内置。
155
+ 通过审查后默认使用项目级安装,写入 `.pi/settings.json`。只有离线交付或强依赖时,才允许考虑 `dependencies` + `bundledDependencies` 内置。
156
156
 
157
157
  ## 当前维护事项
158
158
 
@@ -9,17 +9,17 @@ KCode Harness 的门禁用于避免跳阶段、猜 SDK、伪造验证结果或
9
9
  /kd-status
10
10
  ```
11
11
 
12
- 门禁不通过时,先按原因补齐产品、文档、问题答案、计划、证据或风险说明。
12
+ 门禁不通过时,按原因补齐产品、文档、问题答案、计划、证据或风险说明。
13
13
 
14
14
  ## 产品确认
15
15
 
16
- 当需求涉及具体金蝶产品实现、构建、元数据或 SDK 查证时,需要确认产品画像:
16
+ 当需求涉及具体金蝶产品实现、构建、元数据或 SDK 查证时,必须确认产品画像:
17
17
 
18
18
  ```text
19
19
  /kd-product cangqiong --version V6.0
20
20
  ```
21
21
 
22
- 如果只是整理需求文档或处理产品无关的工程事项,可以先完成需求梳理,并在计划中写明不涉及产品实现。后续实际要改金蝶产品代码、构建、元数据或 SDK 时,再按范围确认产品。
22
+ 仅整理需求文档或处理产品无关工程事项时,完成需求梳理,并在计划中写明不涉及产品实现。后续实际修改金蝶产品代码、构建、元数据或 SDK 时,按范围确认产品。
23
23
 
24
24
  详见 [产品画像确认](PRODUCT_PROFILE.md)。
25
25
 
@@ -38,6 +38,13 @@ KCode Harness 的门禁用于避免跳阶段、猜 SDK、伪造验证结果或
38
38
 
39
39
  `execute` 阶段只能写 `PLAN.md` 明确列出的源码文件。
40
40
 
41
+ 业务事实门禁:
42
+
43
+ - 通用实现契约必须覆盖触发入口、源对象、目标对象、数据变化或字段映射、业务规则、失败处理和验收样例。
44
+ - 数据源上下文必须覆盖目标 FormId/单据或表单标识、插件类型和触发事件、字段/实体/分录标识、数据读取写入方式;SQL/KSQL 场景还必须覆盖表名和数据库字段名。
45
+ - 第三方对接必须覆盖接口文档、对接方向、触发时机、接口地址、认证配置、字段映射、并发/幂等、超时重试限流、错误补偿、日志脱敏和请求/响应样例。
46
+ - API 文档、SDK 知识库和 PLAN 自由文本不能替代结构化 facts 或 evidence。
47
+
41
48
  ## SDK 签名证据
42
49
 
43
50
  涉及 Java/C# 产品代码时,进入 `execute` 前必须已有:
@@ -46,7 +53,7 @@ KCode Harness 的门禁用于避免跳阶段、猜 SDK、伪造验证结果或
46
53
  evidence/sdk-signature.md
47
54
  ```
48
55
 
49
- 推荐工具:
56
+ 使用工具:
50
57
 
51
58
  ```text
52
59
  kd_sdk_signature product=cangqiong query=QueryServiceHelper method=loadSingle
@@ -54,7 +61,7 @@ kd_sdk_signature product=flagship query=SaveServiceHelper method=save
54
61
  kd_sdk_signature product=enterprise query=DynamicObject method=GetDynamicObject
55
62
  ```
56
63
 
57
- 只有这些来源可以作为签名事实:
64
+ 只有以下来源允许作为签名事实:
58
65
 
59
66
  - `kd_sdk_signature` 从当前项目真实 jar/dll 读取的结果。
60
67
  - 当前项目构建输出。
@@ -96,7 +103,7 @@ Exit: 0
96
103
  - “未执行”
97
104
  - “应该可以”
98
105
 
99
- 如果命令无法运行,记录真实阻塞原因和残余风险,不能把它当绿灯。
106
+ 命令无法运行时,记录真实阻塞原因和残余风险。禁止把未运行命令当作绿灯。
100
107
 
101
108
  ## evidence/index.json
102
109
 
@@ -123,7 +130,7 @@ evidence/step-001.md
123
130
 
124
131
  ## Cosmic 官方能力证据
125
132
 
126
- 苍穹、星瀚和星空旗舰版通常需要:
133
+ 苍穹、星瀚和星空旗舰版通常要求:
127
134
 
128
135
  ```text
129
136
  kd_cosmic_config product=cangqiong
@@ -135,7 +142,7 @@ kd_cosmic_api product=cangqiong mode=search query=<关键词>
135
142
 
136
143
  ## KSQL / SQL 证据
137
144
 
138
- 交付 KSQL/SQL 数据修复内容时,ship 前通常需要:
145
+ 交付 KSQL/SQL 数据修复内容时,ship 前通常要求:
139
146
 
140
147
  ```text
141
148
  evidence/cosmic-metadata.json
@@ -6,26 +6,26 @@ KCode Harness 把金蝶开发工作拆成固定阶段:
6
6
  discuss -> spec -> plan -> execute -> verify -> ship
7
7
  ```
8
8
 
9
- run 可以是一条明确需求,也可以是一组同一目标下的需求。
9
+ run 允许包含一条明确需求,或同一目标下的一组需求。
10
10
 
11
11
  ## 创建 run
12
12
 
13
- 推荐显式指定产品:
13
+ 使用显式产品参数:
14
14
 
15
15
  ```text
16
16
  /kd-start --product cangqiong 实现采购订单保存校验
17
17
  ```
18
18
 
19
- 也可以直接提供需求文档来源,例如本地文件、目录或在线文档链接:
19
+ 支持直接提供需求文档来源,例如本地文件、目录或在线文档链接:
20
20
 
21
21
  ```text
22
22
  /kd-start E:\project\docs\需求说明.md
23
23
  /kd-start https://example.com/requirements
24
24
  ```
25
25
 
26
- 在线文档如果需要登录或权限,KCode 会提示你提供可访问链接、导出文件路径或关键内容。
26
+ 在线文档要求登录或权限时,KCode 会要求提供可访问链接、导出文件路径或关键内容。
27
27
 
28
- 如果你直接输入自然语言需求,KCode 会自动创建 run,并进入 `discuss` 阶段分析需求来源和范围。
28
+ 直接输入自然语言需求时,KCode 会自动创建 run,并进入 `discuss` 阶段分析需求来源和范围。
29
29
 
30
30
  查看当前状态:
31
31
 
@@ -34,7 +34,7 @@ run 可以是一条明确需求,也可以是一组同一目标下的需求。
34
34
  /kd-gate
35
35
  ```
36
36
 
37
- 如果产品未知,先看 [产品画像确认](PRODUCT_PROFILE.md)。
37
+ 产品未知时,查看 [产品画像确认](PRODUCT_PROFILE.md)。
38
38
 
39
39
  ## 阶段说明
40
40
 
@@ -58,7 +58,7 @@ ship 汇总变更、验证证据、风险和后续事项
58
58
  /kd-advance ship
59
59
  ```
60
60
 
61
- 门禁不通过时,先按 `/kd-gate` 给出的原因补齐产品、文档、计划、证据或风险说明。
61
+ 门禁不通过时,按 `/kd-gate` 给出的原因补齐产品、文档、计划、证据或风险说明。
62
62
 
63
63
  ## 阶段文档
64
64
 
@@ -96,7 +96,7 @@ evidence/index.json
96
96
 
97
97
  ## 待确认问题
98
98
 
99
- 需要确认产品、目标单据、插件位置、高风险 SQL 或方案选择时,KCode 会记录待确认问题。未回答的阻断问题会阻止阶段推进。
99
+ 产品、目标单据、插件位置、高风险 SQL 或方案选择要求确认时,KCode 会记录待确认问题。未回答的阻断问题会阻止阶段推进。
100
100
 
101
101
  手动回答:
102
102
 
@@ -107,6 +107,11 @@ evidence/index.json
107
107
  原则:
108
108
 
109
109
  - 一次只问一个当前最阻塞的问题。
110
+ - 问题登记后保持 open;用户回答后必须用 `/kd-answer` 或 `kd_question action=answer` 记录。
111
+ - 需要解除门禁事实缺口的问题必须带结构化 `factLabel`;确认题必须用 `proposedFactValue` 表示候选事实值。
112
+ - 同一 `factLabel` 已有 open 问题或当前事实时禁止重复提问;用户更正事实时使用 `kd_question action=revise`,旧事实会标记为 superseded。
113
+ - 当前只有一个 open blocking 问题时,用户下一条普通短答会自动记录;占位答案不会解除门禁。
114
+ - 数据源 FormId、字段/实体、插件事件和读写方式必须来自结构化 facts 或 evidence;PLAN 自由文本不能单独证明这些事实。
110
115
  - 得到答案后再继续问下一个必要问题。
111
116
 
112
117
  ## 多个需求
@@ -129,7 +134,7 @@ evidence/index.json
129
134
  /kd-finish
130
135
  ```
131
136
 
132
- 同一目标下的一组需求可以放在同一个 run 中处理。无关目标建议创建新 run:
137
+ 同一目标下的一组需求允许放在同一个 run 中处理。无关目标创建新 run:
133
138
 
134
139
  ```text
135
140
  /kd-start --product cangqiong E:\project\docs\本轮采购订单改造.docx
@@ -141,8 +146,23 @@ KCode 会阻止过早写入 Java/XML/SQL/C# 等产品代码:
141
146
 
142
147
  - 未进入 `execute` 阶段不能写产品代码。
143
148
  - `execute` 只能写 `PLAN.md` 中批准的真实源码文件。
144
- - 临时发现要改新文件,先回到 `plan` 更新计划。
145
- - 必须先理解当前业务项目已有目录、模块、包名、基类和本地封装。
149
+ - 临时发现要改新文件,回到 `plan` 更新计划。
150
+ - 必须理解当前业务项目已有目录、模块、包名、基类和本地封装后再编码。
151
+ - API 文档、SDK 文档和知识库只能作为技术用法证据,不能替代 FormId、字段/实体、插件事件、SQL/KSQL 表名、数据库字段名、字段映射、并发/幂等、日志脱敏和验收数据等业务事实。
152
+ - 信息不足时登记一个最阻塞的结构化问题;禁止生成模板代码或占位实现。
153
+ - 内部插件、自动下推、第三方对接、字段改写和数据同步统一按实现契约、数据源上下文和对接上下文补齐事实,不为单个业务场景写死提示词。
154
+
155
+ ## 项目持久规则
156
+
157
+ `kcode init` 和 `kcode context --refresh` 会生成 `.pi/kd/PROJECT_CONTEXT.md`。新会话必须先读取该文件,再计划或编辑代码。
158
+
159
+ 持久规则由 `src/harness/prompt-policy.ts` 集中管理,并自动写入项目上下文。规则要求:
160
+
161
+ - `run.facts` 是唯一结构化事实源,已回答 questions 只作为审计记录。
162
+ - `factLabel` 必须使用集中定义的事实标签或别名。
163
+ - PLAN 自由文本不能单独证明 FormId、字段、插件事件或读写方式。
164
+ - 外部系统操作、BOS 注册、人工功能测试和生产验证必须由用户提供可核验证据。
165
+ - 不做旧状态迁移兼容或旧问题答案推断;坏状态只过滤,缺失事实重新提问确认。
146
166
 
147
167
  证据和门禁细节见 [证据和门禁](EVIDENCE_AND_GATES.md)。
148
168
 
@@ -152,7 +172,7 @@ KCode 支持把局部任务委派给隔离子 agent,用来降低长上下文
152
172
 
153
173
  触发方式有两种:
154
174
 
155
- - 自动:主 agent 在大量调研、独立交叉审查、长上下文复盘或可并行拆分时,可以主动调用 `kd_subagent`。
175
+ - 自动:主 agent 在大量调研、独立交叉审查、长上下文复盘或可并行拆分时,允许主动调用 `kd_subagent`。
156
176
  - 显式:用户用 `/kd-review` 或 `/kd-delegate` 指定委派任务。
157
177
 
158
178
  常用入口:
@@ -10,16 +10,16 @@ KCode 不 fork Pi,也不替换 Pi 生态。KCode 提供一个面向金蝶开
10
10
  - 不修改用户全局 Pi 配置。
11
11
  - 不强制安装未审查的第三方 package。
12
12
  - 支持项目内复现同一套金蝶开发环境。
13
- - 不要求用户额外安装全局 `pi` 命令。
13
+ - 无需用户额外安装全局 `pi` 命令。
14
14
 
15
- ## 推荐结构
15
+ ## 分发结构
16
16
 
17
17
  ```text
18
18
  kcode-pi npm 包,作为 Pi package 提供金蝶工具、skills、prompts、themes。
19
19
  kcode 全局命令,负责项目初始化、环境检查和启动随包 Pi CLI。
20
20
  ```
21
21
 
22
- `kcode` 启动器只管理当前项目的 `.pi/settings.json`,不写 `~/.pi` 或其他用户全局目录。启动时优先调用随包 `@earendil-works/pi-coding-agent` 的 `dist/cli.js`,仅在随包 CLI 缺失时回退全局 `pi`。
22
+ `kcode` 启动器只管理当前项目的 `.pi/settings.json`,不写 `~/.pi` 或其他用户全局目录。启动时默认调用随包 `@earendil-works/pi-coding-agent` 的 `dist/cli.js`,仅在随包 CLI 缺失时回退全局 `pi`。
23
23
 
24
24
  ## 项目级配置
25
25
 
@@ -39,7 +39,7 @@ kcode 全局命令,负责项目初始化、环境检查和启动随包
39
39
  }
40
40
  ```
41
41
 
42
- 后续如需接入第三方 Pi package,先进入 allowlist,再固定版本写入项目配置:
42
+ 后续接入第三方 Pi package 时,进入 allowlist 后再固定版本写入项目配置:
43
43
 
44
44
  ```json
45
45
  {
@@ -64,10 +64,10 @@ kcode 全局命令,负责项目初始化、环境检查和启动随包
64
64
 
65
65
  通过审查后有两种接入方式:
66
66
 
67
- 1. 项目级推荐安装:写入 `.pi/settings.json`。
67
+ 1. 项目级安装:写入 `.pi/settings.json`。
68
68
  2. 离线内置:写入 `dependencies` 和 `bundledDependencies`,并在 `package.json -> pi` 中显式引用其资源。
69
69
 
70
- 优先使用项目级推荐安装。只有离线交付或强依赖时,才考虑离线内置。
70
+ 默认使用项目级安装。只有离线交付或强依赖时,才允许考虑离线内置。
71
71
 
72
72
  ## 命令设计
73
73
 
@@ -88,4 +88,4 @@ kcode start 初始化后启动 KCode 工作环境
88
88
 
89
89
  ## 当前限制
90
90
 
91
- 当前仓库已可作为 npm 包发布,并提供全局 `kcode` 命令。真实交互式 Pi runtime smoke 需要在具备可用模型/API 配置的环境中执行。
91
+ 当前仓库已可作为 npm 包发布,并提供全局 `kcode` 命令。真实交互式 Pi runtime smoke 必须在具备可用模型/API 配置的环境中执行。
@@ -1,6 +1,6 @@
1
1
  # 产品画像确认
2
2
 
3
- 产品画像决定 KCode 使用哪套产品知识、SDK/元数据来源、构建策略、目录约束和门禁规则。标题栏里如果出现 `产品:未确认`,必须先确认产品。
3
+ 产品画像决定 KCode 使用哪套产品知识、SDK/元数据来源、构建策略、目录约束和门禁规则。标题栏出现 `产品:未确认` 时,必须确认产品。
4
4
 
5
5
  ## 支持的产品
6
6
 
@@ -17,13 +17,13 @@ enterprise 金蝶企业版 / C#
17
17
 
18
18
  ## 创建 run 时确认产品
19
19
 
20
- 推荐:
20
+ 使用显式产品参数:
21
21
 
22
22
  ```text
23
23
  /kd-start --product cangqiong --version V6.0 实现采购订单保存校验
24
24
  ```
25
25
 
26
- 也可以省略版本:
26
+ 允许省略版本:
27
27
 
28
28
  ```text
29
29
  /kd-start --product flagship 实现采购订单插件
@@ -31,7 +31,7 @@ enterprise 金蝶企业版 / C#
31
31
 
32
32
  ## 已有 run 补产品
33
33
 
34
- 如果 run 已经创建,但标题栏显示:
34
+ run 已经创建且标题栏显示以下内容时:
35
35
 
36
36
  ```text
37
37
  产品:未确认
@@ -45,7 +45,7 @@ enterprise 金蝶企业版 / C#
45
45
  /kd-status
46
46
  ```
47
47
 
48
- 如果不确定具体产品,但明确属于金蝶苍穹相关技术栈,优先确认业务实际使用的是苍穹、星瀚还是星空旗舰版,不要把 `cosmic` 当成产品名。
48
+ 具体产品不确定但明确属于金蝶苍穹相关技术栈时,确认业务实际使用的是苍穹、星瀚还是星空旗舰版。禁止把 `cosmic` 当成产品名。
49
49
 
50
50
  ## 如何选择
51
51
 
@@ -57,7 +57,7 @@ enterprise 金蝶企业版 / C#
57
57
  选择 `xinghan`:
58
58
 
59
59
  - 明确是金蝶星瀚。
60
- - 基于苍穹/Cosmic 平台,优先按平台 Java 插件处理。
60
+ - 基于苍穹/Cosmic 平台,默认按平台 Java 插件处理。
61
61
  - 接口或元数据存在星瀚差异时,以星瀚产品和当前项目证据为准。
62
62
 
63
63
  选择 `flagship`:
@@ -65,7 +65,7 @@ enterprise 金蝶企业版 / C#
65
65
  - 明确是星空旗舰版。
66
66
  - 基于苍穹/Cosmic 平台,Java 插件规则适用。
67
67
  - 接口或目录存在旗舰版差异时,以旗舰版产品和当前项目证据为准。
68
- - 如果项目存在 `code/` 目录,生产代码应跟随 `code/` 下真实结构。
68
+ - 项目存在 `code/` 目录时,生产代码应跟随 `code/` 下真实结构。
69
69
 
70
70
  选择 `enterprise`:
71
71
 
@@ -87,14 +87,14 @@ KCode 会阻止 unknown run 离开 `discuss`。
87
87
 
88
88
  ### Header 和 `/kd-status` 不一致怎么办?
89
89
 
90
- 先刷新门禁:
90
+ 刷新门禁:
91
91
 
92
92
  ```text
93
93
  /kd-gate
94
94
  /kd-status
95
95
  ```
96
96
 
97
- 如果刚升级过 KCode,重新启动:
97
+ 刚升级过 KCode 时,重新启动:
98
98
 
99
99
  ```powershell
100
100
  kcode start
@@ -15,7 +15,7 @@ Warning: No models available.
15
15
  /model
16
16
  ```
17
17
 
18
- 或先设置供应商 API Key:
18
+ 或设置供应商 API Key:
19
19
 
20
20
  ```powershell
21
21
  $env:OPENAI_API_KEY="sk-..."
@@ -37,7 +37,7 @@ kcode start
37
37
  /kd-gate
38
38
  ```
39
39
 
40
- 如果不知道选哪个,看 [产品画像确认](PRODUCT_PROFILE.md)。
40
+ 产品无法判断时,查看 [产品画像确认](PRODUCT_PROFILE.md)。
41
41
 
42
42
  ## ship 阶段门禁阻塞
43
43
 
@@ -72,13 +72,13 @@ kcode version
72
72
  type .pi\settings.json
73
73
  ```
74
74
 
75
- 如果 `packages` 中有多条 `kcode-pi` 路径:
75
+ `packages` 中存在多条 `kcode-pi` 路径时:
76
76
 
77
77
  ```powershell
78
78
  kcode repair
79
79
  ```
80
80
 
81
- 如果使用 nvmWindows 上每个 Node 版本都有独立全局 npm 安装目录。切换 Node 后重新安装并初始化:
81
+ 使用 nvm 时,Windows 上每个 Node 版本都有独立全局 npm 安装目录。切换 Node 后重新安装并初始化:
82
82
 
83
83
  ```powershell
84
84
  npm install -g kcode-pi@latest
@@ -87,7 +87,7 @@ kcode init
87
87
 
88
88
  ## npm install 没有更新
89
89
 
90
- 先确认 registry 上的版本:
90
+ 确认 registry 上的版本:
91
91
 
92
92
  ```powershell
93
93
  npm view kcode-pi version
@@ -102,7 +102,7 @@ npm install -g kcode-pi@latest
102
102
  kcode version
103
103
  ```
104
104
 
105
- 如果提示 `EEXIST: file already exists ... kcode.cmd`,确认旧 shim:
105
+ 出现 `EEXIST: file already exists ... kcode.cmd` 时,确认旧 shim:
106
106
 
107
107
  ```powershell
108
108
  npm root -g
@@ -124,9 +124,9 @@ ENOENT: no such file or directory, access 'D:\mnt\d\projects\xxx\src\main\java\F
124
124
 
125
125
  正确做法:
126
126
 
127
- - 优先使用项目相对路径。
127
+ - 默认使用项目相对路径。
128
128
  - 必须用绝对路径时,使用 `D:\projects\xxx\...`。
129
- - 不要使用 `/mnt/d/...` 或 `/d/...`。
129
+ - 禁止使用 `/mnt/d/...` 或 `/d/...`。
130
130
 
131
131
  刷新项目上下文:
132
132