kcode-pi 0.1.20 → 0.1.23

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.md CHANGED
@@ -1,297 +1,102 @@
1
1
  # KCode
2
2
 
3
- KCode 是面向金蝶开发的 Pi 工作环境启动器。安装后会提供全局命令 `kcode`,自动携带 Pi CLI,并在当前业务项目中加载金蝶专属工具、skills、prompts、themes 和知识库。
3
+ KCode 是面向金蝶开发的 Pi 工作环境启动器。它提供全局命令 `kcode`,自动携带 Pi CLI,并在当前业务项目中加载金蝶专属工具、skills、prompts、themes、知识库和 Harness 工作流。
4
4
 
5
- KCode 默认面向中文用户:README、`kcode help`、Pi 内 `/kd-*` 命令说明、工具参数说明、内置 prompts 和 Harness 阶段文档模板均使用中文。命令名和产品标识仍保持英文,例如 `/kd-start`、`kd_search`、`flagship`。
5
+ KCode 默认面向中文用户。命令名和产品标识保持英文,例如 `/kd-start`、`/kd-product`、`kd_search`、`flagship`。
6
6
 
7
- KCode 不要求你单独安装全局 `pi` 命令,也不会修改用户全局 Pi 配置。它只维护当前项目的:
7
+ ## 文档导航
8
8
 
9
- ```text
10
- .pi/settings.json
11
- ```
9
+ 如果你是第一次使用,按顺序看:
10
+
11
+ 1. [用户指南](docs/USER_GUIDE.md):安装、初始化、启动、模型配置、升级。
12
+ 2. [Harness 工作流](docs/HARNESS_WORKFLOW.md):如何从需求进入 discuss -> spec -> plan -> execute -> verify -> ship。
13
+ 3. [产品画像确认](docs/PRODUCT_PROFILE.md):如何用 `/kd-product` 确认苍穹、星瀚、星空旗舰版或企业版。
14
+ 4. [证据和门禁](docs/EVIDENCE_AND_GATES.md):为什么需要 evidence、SDK 签名、TDD 红绿证据、风险确认。
15
+ 5. [命令参考](docs/COMMAND_REFERENCE.md):完整 `kcode` 子命令、Pi 内 `/kd-*` 命令和内置工具参数。
16
+ 6. [更新日志](docs/CHANGELOG.md):查看版本变化、发布验证和近期改进。
17
+ 7. [故障排查](docs/TROUBLESHOOTING.md):模型、旧版本、Windows 路径、终端显示等常见问题。
18
+
19
+ 维护者文档:
20
+
21
+ - [开发与发布说明](docs/DEVELOPMENT.md)
22
+ - [发行版方案](docs/KCODE_DISTRIBUTION.md)
23
+ - [更新日志](docs/CHANGELOG.md)
12
24
 
13
- ## 安装
25
+ ## 快速开始
14
26
 
15
27
  环境要求:
16
28
 
17
29
  - Node.js `>=22.19.0`
18
30
  - npm
19
31
  - Windows 推荐使用 Windows Terminal
20
- - 不需要安装 Python。KCode 随包工具使用 Node/TypeScript 实现;只有你自己的业务项目或外部脚本明确依赖 Python 时才需要另行安装。
21
32
 
22
- 全局安装:
33
+ 安装:
23
34
 
24
35
  ```powershell
25
36
  npm install -g kcode-pi
26
37
  ```
27
38
 
28
- 如果企业内发布包名不是 `kcode-pi`,请替换为实际包名。全局命令仍是:
29
-
30
- ```powershell
31
- kcode
32
- ```
33
-
34
- ## 首次使用
35
-
36
- 进入你的业务项目根目录,不是 KCode 源码目录:
37
-
38
- ```powershell
39
- cd E:\projects\your-business-project
40
- ```
41
-
42
- 初始化项目级 KCode 配置:
39
+ 进入你的实际业务项目根目录后执行:
43
40
 
44
41
  ```powershell
45
42
  kcode init
46
- ```
47
-
48
- `init` 会登记 KCode package,并生成项目常驻上下文:
49
-
50
- ```text
51
- .pi/kd/PROJECT_CONTEXT.md
52
- ```
53
-
54
- 如果项目结构后来变化,手动刷新:
55
-
56
- ```powershell
57
- kcode context --refresh
58
- ```
59
-
60
- 检查环境:
61
-
62
- ```powershell
63
- kcode doctor
64
43
  kcode doctor --deep
65
- ```
66
-
67
- 修复项目级 KCode 配置:
68
-
69
- ```powershell
70
- kcode repair
71
- ```
72
-
73
- 查看当前 KCode 版本:
74
-
75
- ```powershell
76
- kcode version
77
- ```
78
-
79
- 启动工作环境:
80
-
81
- ```powershell
82
44
  kcode start
83
45
  ```
84
46
 
85
- `kcode start` 会先确保 `.pi/settings.json` 已登记当前安装的 KCode package,然后启动随包 Pi CLI。
86
-
87
- ## 配置模型
88
-
89
- 首次启动 Pi 时,如果看到:
90
-
91
- ```text
92
- Warning: No models available.
93
- ```
94
-
95
- 说明还没有配置模型供应商。进入 `kcode start` 后输入:
47
+ 如果首次启动提示没有模型,在 KCode/Pi 中执行:
96
48
 
97
49
  ```text
98
50
  /login
99
- ```
100
-
101
- 选择供应商并登录或填写 API Key。常见选择包括:
102
-
103
- ```text
104
- ChatGPT Plus/Pro (Codex)
105
- Claude Pro/Max
106
- GitHub Copilot
107
- OpenAI
108
- Anthropic
109
- DeepSeek
110
- Gemini
111
- ```
112
-
113
- 也可以在 PowerShell 中设置环境变量后再启动:
114
-
115
- ```powershell
116
- $env:OPENAI_API_KEY="sk-..."
117
- kcode start
118
- ```
119
-
120
- 或:
121
-
122
- ```powershell
123
- $env:ANTHROPIC_API_KEY="sk-ant-..."
124
- kcode start
125
- ```
126
-
127
- 登录或配置完成后,可在 Pi 中使用:
128
-
129
- ```text
130
51
  /model
131
52
  ```
132
53
 
133
- 选择模型。
134
-
135
- ### 自定义模型供应商
136
-
137
- 如果你的模型服务是企业网关、代理服务、Ollama、LM Studio、vLLM,或其他 OpenAI-compatible endpoint,不需要改 KCode。Pi 原生支持通过用户级配置文件添加自定义供应商:
54
+ ## 第一个需求
138
55
 
139
- ```powershell
140
- notepad $env:USERPROFILE\.pi\agent\models.json
141
- ```
142
-
143
- 写入或合并:
144
-
145
- ```json
146
- {
147
- "providers": {
148
- "corp-ai": {
149
- "baseUrl": "https://ai.example.com/v1",
150
- "api": "openai-completions",
151
- "apiKey": "$CORP_AI_API_KEY",
152
- "compat": {
153
- "supportsDeveloperRole": false,
154
- "supportsReasoningEffort": false
155
- },
156
- "models": [
157
- {
158
- "id": "corp-coder",
159
- "name": "Corp Coder",
160
- "reasoning": false,
161
- "input": ["text"],
162
- "contextWindow": 128000,
163
- "maxTokens": 16384,
164
- "cost": {
165
- "input": 0,
166
- "output": 0,
167
- "cacheRead": 0,
168
- "cacheWrite": 0
169
- }
170
- }
171
- ]
172
- }
173
- }
174
- }
175
- ```
176
-
177
- 再设置 API Key 并启动:
178
-
179
- ```powershell
180
- $env:CORP_AI_API_KEY="sk-..."
181
- kcode start
182
- ```
183
-
184
- 进入后使用:
56
+ 推荐显式指定产品:
185
57
 
186
58
  ```text
187
- /model
188
- ```
189
-
190
- 选择 `corp-ai/corp-coder`。也可以直接指定:
191
-
192
- ```powershell
193
- kcode start --provider corp-ai --model corp-coder
194
- ```
195
-
196
- 说明:
197
-
198
- - `/login` 用于 Pi 内置供应商或扩展注册过登录流程的供应商。
199
- - 任意自定义 endpoint/API key 推荐写 `~\.pi\agent\models.json`。
200
- - `api` 常用值是 `openai-completions`,适合大多数 OpenAI-compatible 服务。
201
- - 如果服务支持 Anthropic Messages 或 Google Generative AI,可按 Pi 文档改为对应 API 类型。
202
-
203
- ## 常用命令
204
-
205
- ### `kcode init`
206
-
207
- 初始化或更新当前项目的 `.pi/settings.json`。
208
-
209
- ```powershell
210
- kcode init
59
+ /kd-start --product cangqiong 实现采购订单保存校验
211
60
  ```
212
61
 
213
- 它只修改当前项目,不写用户全局 Pi 配置。`kcode-pi@0.1.2` 起,`init` 会自动清理同名旧 KCode package 路径,避免 Node 版本切换后重复加载。
214
-
215
- 同时会确保项目常驻上下文存在:
62
+ 也可以直接提供需求文档:
216
63
 
217
64
  ```text
218
- .pi/kd/PROJECT_CONTEXT.md
219
- ```
220
-
221
- 这份文件记录项目根目录、真实源码根、构建文件、模块线索和 KCode 持久约束。KCode Harness 会在每次对话继续时读取它,降低中断后丢失项目结构上下文的风险。
222
-
223
- ### `kcode context`
224
-
225
- 生成或刷新项目常驻上下文。
226
-
227
- ```powershell
228
- kcode context
229
- kcode context --refresh
65
+ /kd-start --product cangqiong E:\project\docs\需求说明.md
230
66
  ```
231
67
 
232
- 建议在以下情况刷新:
233
-
234
- - 初次接入已有业务项目。
235
- - 新增、移动或删除模块。
236
- - 从分支切换到不同项目结构。
237
- - Agent 写代码前发现 `PROJECT_CONTEXT.md` 与当前项目不一致。
238
-
239
- 项目上下文是按业务项目隔离的:
240
-
241
- - 在 `E:\projects\a` 运行 `kcode context`,只会写 `E:\projects\a\.pi\kd\PROJECT_CONTEXT.md`。
242
- - 切换到 `E:\projects\b` 后,需要在 `b` 项目下运行 `kcode init` 或 `kcode context`,不会自动携带 `a` 项目的上下文。
243
- - 切回 `a` 项目后,只要 `.pi/kd/` 没有删除,原来的 `PROJECT_CONTEXT.md`、`active-run.json` 和历史 runs 都还在。
244
- - 如果项目被复制、移动路径或重建工作区,建议重新运行 `kcode context --refresh`,让绝对路径和源码根重新匹配当前目录。
68
+ 如果已经创建了 run,但标题栏显示产品未确认:
245
69
 
246
- ### `kcode doctor`
247
-
248
- 检查 Node、随包 Pi CLI、KCode package 路径和项目配置。
249
-
250
- ```powershell
251
- kcode doctor
252
- kcode doctor --deep
253
- ```
254
-
255
- `--deep` 会额外检查 Node 版本、npm 全局目录、项目 `.pi/settings.json` 中的重复/旧 KCode package 路径、项目上下文和 active run。
256
-
257
- ### `kcode repair`
258
-
259
- 清理当前项目 `.pi/settings.json` 中旧 Node/nvm 版本下的 KCode package 路径,只保留当前安装路径,并刷新项目上下文。
260
-
261
- ```powershell
262
- kcode repair
70
+ ```text
71
+ /kd-product cangqiong --version V6.0
72
+ /kd-gate
73
+ /kd-status
263
74
  ```
264
75
 
265
- ### `kcode version`
266
-
267
- 显示当前 KCode package 版本、安装路径、随包 Pi CLI 版本和 Node 版本。
76
+ 支持的产品画像:
268
77
 
269
- ```powershell
270
- kcode version
271
- kcode --version
272
- kcode -v
78
+ ```text
79
+ cangqiong 金蝶苍穹 / Cosmic Java
80
+ xinghan 金蝶星瀚 / 基于苍穹/Cosmic
81
+ flagship 星空旗舰版 / 基于苍穹/Cosmic
82
+ enterprise 金蝶企业版 / C#
273
83
  ```
274
84
 
275
- ### `kcode start`
276
-
277
- 启动 KCode 工作环境。
85
+ 进入 `ship` 前还需要确认风险:
278
86
 
279
- ```powershell
280
- kcode start
87
+ ```text
88
+ /kd-risk low 已完成本地构建和元数据检查,无残余交付风险
89
+ /kd-gate
281
90
  ```
282
91
 
283
- `start` 后面的参数会原样透传给 Pi CLI,例如:
284
-
285
- ```powershell
286
- kcode start --provider openai --model gpt-4o
287
- ```
92
+ 完整解释见 [产品画像确认](docs/PRODUCT_PROFILE.md) [证据和门禁](docs/EVIDENCE_AND_GATES.md)。
288
93
 
289
94
  ## Pi 内 KCode 命令
290
95
 
291
- 进入 `kcode start` 后,可以使用以下 KCode 命令:
96
+ 进入 `kcode start` 后常用:
292
97
 
293
98
  ```text
294
- /kd-start [--product 产品] [--version 版本] <需求>
99
+ /kd-start [--product 产品] [--version 版本] <需求或需求文档>
295
100
  /kd-product <产品> [--version 版本]
296
101
  /kd-risk <low|medium|high> <原因>
297
102
  /kd-status
@@ -305,77 +110,37 @@ kcode start --provider openai --model gpt-4o
305
110
  /kd-answer Q-001 <答案>
306
111
  ```
307
112
 
308
- 典型开始方式:
309
-
310
- ```text
311
- /kd-start --product flagship 实现采购订单插件
312
- ```
313
-
314
- `/kd-start` 会创建新的功能点 run,并立即触发 Agent 进入 `discuss` 阶段。如果未识别出产品画像,例如显示 `(unknown/unknown)`,下一步应先确认产品、版本和技术栈,而不是直接写代码。
315
-
316
- 进入 `ship` 前必须确认风险等级:
317
-
318
- ```text
319
- /kd-risk low 已完成本地构建和元数据检查,无残余交付风险
320
- ```
321
-
322
- `/kd-artifact` 默认只创建缺失阶段文档。若阶段文档已存在,带内容调用不会直接覆盖;确认要整体替换时必须追加 `--replace`。
323
-
324
- 暂停后接续:
325
-
326
- ```text
327
- /kd-resume
328
- /kd-resume 继续确认采购入库单即时库存检查插件
329
- ```
330
-
331
- 重新 `kcode start` 时,如果当前项目存在未完成 active run,KCode 会提示当前功能点和阶段。`/kd-resume` 会读取项目常驻上下文、active run 状态和已落盘的阶段文档,再把完整工作流上下文交给 Agent 继续。
332
-
333
- 支持的产品画像:
334
-
335
- ```text
336
- cosmic -> Cosmic 平台底座
337
- cangqiong -> Cosmic / Java
338
- xinghan -> Cosmic / Java
339
- flagship -> Cosmic / Java
340
- enterprise -> Enterprise / C#
341
- ```
342
-
343
- 企业版补充:
344
-
345
- - 默认企业版插件按 `Enterprise / C#` 处理。
346
- - 只有明确提出 `Python插件`、`IronPython`,或带企业版/BOS 语境的 `Python脚本` 时,KCode 才切换到 `Enterprise / Python(IronPython)`。
347
- - Python 插件同样必须走 Harness 工作流,`.py` 写入也必须等到 `execute` 阶段。
348
-
349
- 工作流阶段:
350
-
351
- ```text
352
- discuss -> spec -> plan -> execute -> verify -> ship
353
- ```
113
+ 完整说明见 [命令参考](docs/COMMAND_REFERENCE.md)。
354
114
 
355
- KCode 会把金蝶开发需求纳入 Harness 工作流。你可以直接输入自然语言需求;如果当前项目还没有 active run,KCode 会自动创建 run 并进入 `discuss` 阶段,而不是直接生成代码。
356
-
357
- 一个功能点对应一个 run。每个 run 都有独立阶段、计划、执行记录和证据;做另一个功能点时,不要复用上一个功能点的阶段。
358
-
359
- ```text
360
- /kd-start 实现采购订单保存校验
361
- /kd-finish
362
- /kd-start 实现采购订单列表字段展示
363
- ```
115
+ ## 内置金蝶工具
364
116
 
365
- 查看和切换当前项目里的功能点 run:
117
+ KCode 会向 Pi 注册:
366
118
 
367
119
  ```text
368
- /kd-runs
369
- /kd-switch <run-id>
120
+ kd_plan_status 查看当前 Harness run、阶段、产物和门禁
121
+ kd_question 记录/回答/查看阻断问题
122
+ kd_search 搜索随包金蝶知识库
123
+ kd_table 查询随包表结构
124
+ kd_check 检查金蝶 Java/C#/Python 插件代码
125
+ kd_cosmic_config 运行 Cosmic 官方能力配置预检
126
+ kd_cosmic_metadata 查询 Cosmic 表单/单据元数据
127
+ kd_cosmic_api 查询随包 Cosmic API 知识线索
128
+ kd_sdk_signature 从当前项目实际 SDK jar/dll 中读取类和方法签名
129
+ kd_ksql_lint 运行 KSQL/SQL lint
130
+ kd_build 按产品画像执行或 dry-run 构建
131
+ kd_debug 分析金蝶日志和堆栈
370
132
  ```
371
133
 
372
- 如果当前 active run 处于 `execute` 或 `verify`,但你提出的是另一个需求,KCode 会要求先创建新 run 或切换 run,避免把新需求塞进旧功能点的 `PLAN.md` 和阶段门禁。
134
+ 工具细节和使用顺序见 [Harness 工作流](docs/HARNESS_WORKFLOW.md)。
135
+ 完整参数见 [命令参考](docs/COMMAND_REFERENCE.md)。
373
136
 
374
- 每次进入 Harness 时,KCode 会附带 `.pi/kd/PROJECT_CONTEXT.md`。这份上下文不会替代计划阶段的实际文件检查,但会让 Agent 在暂停、恢复、重新打开终端后仍知道当前项目的源码根、模块线索和禁止猜路径规则。
137
+ ## 运行状态文件
375
138
 
376
- 每个需求 run 的设计和执行文档会落到本地:
139
+ KCode 只维护当前业务项目内的配置和工作流状态:
377
140
 
378
141
  ```text
142
+ .pi/settings.json
143
+ .pi/kd/PROJECT_CONTEXT.md
379
144
  .pi/kd/active-run.json
380
145
  .pi/kd/runs/<run-id>/RUN.json
381
146
  .pi/kd/runs/<run-id>/CONTEXT.md
@@ -388,237 +153,15 @@ KCode 会把金蝶开发需求纳入 Harness 工作流。你可以直接输入
388
153
  .pi/kd/runs/<run-id>/evidence/index.json
389
154
  ```
390
155
 
391
- 下次重新 `kcode start` 时,KCode 会提示当前项目的 active run。执行 `/kd-resume` 后,KCode 会读取项目常驻上下文、active run 状态和已生成的阶段文档,再继续当前功能点的当前阶段。已完成或暂停的功能点仍保留在 `.pi/kd/runs/<run-id>/`,可用 `/kd-runs` 查看,用 `/kd-switch <run-id>` 切回。
392
-
393
- 阶段含义:
394
-
395
- ```text
396
- discuss 梳理需求、产品版本、插件类型、目标单据/表单、生命周期和开放问题
397
- spec 明确验收标准、数据对象、字段、异常、性能和风险
398
- plan 检查当前项目结构,记录真实目标源码路径、待改文件、查证项和验证命令
399
- execute 只实现 PLAN.md 中批准的内容
400
- verify 运行检查、构建或领域验证并记录证据
401
- ship 汇总变更、验证证据、风险和后续事项
402
- ```
403
-
404
- 代码写入受门禁控制:
405
-
406
- - 未进入 `execute` 阶段时,KCode 会阻止写入 Java/XML/SQL 等产品代码。
407
- - 进入 `execute` 前必须已有 `PLAN.md` 和必要证据。
408
- - `PLAN.md` 必须包含 `## 执行步骤`,并用 `- [ ] STEP-001:...` 格式拆分可跟踪步骤。
409
- - `PLAN.md` 必须包含 `## TDD / 红绿检查`,声明红灯证据、绿灯证据和测试/检查命令。
410
- - Java/C# 产品代码进入 `execute` 前必须已有 `evidence/sdk-signature.md`。该证据由 `kd_sdk_signature` 成功查证当前项目真实 SDK jar/dll 后自动写入。
411
- - LLM 禁止凭记忆、模型知识或随包知识库猜 SDK 方法签名。`kd_search`、`kd_cosmic_api` 只能作为线索;最终签名事实必须来自 `kd_sdk_signature`、当前项目构建输出、项目源码封装或官方元数据。
412
- - 红绿检查不等于必须写 JUnit。金蝶项目不要为了满足门禁引入额外 jar 或测试框架。
413
- - 写生产源码前必须已有 `evidence/tdd-red.md`,内容可以是 API/基类/方法签名检查、元数据检查、编译检查、既有测试框架或外部接口最小验证的失败输出。
414
- - 进入 `execute` 后,只允许写入 `PLAN.md` 明确列出的源码文件;如果临时发现要改新文件,必须先回到 plan 更新 `PLAN.md`。
415
- - 进入 `verify` 前,`EXECUTION.md` 必须逐个完成 `PLAN.md` 中的所有 `STEP-###`,并为每个步骤记录真实存在的 `evidence/...` 文件;同时必须已有 `evidence/tdd-red.md` 和 `evidence/tdd-green.md`。
416
- - evidence 文件必须登记在 `evidence/index.json` 中。KCode 内置工具和 evidence 写入路径会自动维护索引;不要手工塞文件绕过门禁。
417
- - `evidence/tdd-green.md` 必须包含真实成功输出和 `Exit: 0` 或 `退出码:0`;不能写“需在开发环境验证”“待验证”“未执行”等不确定结论。
418
- - 如果门禁提示 evidence 内容无效,不要反复改文案或补关键词;必须重新运行 `PLAN.md` 中声明的真实验证命令,并记录命令、Exit、STDOUT/STDERR 或工具输出。
419
- - Java / 苍穹 / 星空旗舰版的语法和编译验证优先使用当前项目 Gradle 命令,例如 `.\gradlew.bat build`、`./gradlew build` 或 `.\gradlew.bat :模块:build`。
420
- - C# / 企业版的语法和编译验证使用 `dotnet build`、`dotnet build <.sln>` 或 `dotnet build <.csproj>`。
421
- - 不要写“Kingdee IDE 中编译”作为验证方式;如果构建命令无法运行,记录真实阻塞原因和残余风险,不能把它当作绿灯证据。
422
- - 旗舰版项目必须先检查当前项目结构。若存在 `code/`,跟随 `code/` 下的实际组织;若不存在,必须在 `PLAN.md` 记录实际源码根或目标文件。
423
- - 不允许凭空写 demo、sample、scaffold,或在不了解项目结构时新建猜测目录。
424
-
425
- ### SDK 签名门禁怎么用
426
-
427
- 当需求涉及 Java/C# 插件代码时,KCode 会强制要求先查证当前项目真实 SDK 的类、方法、构造器、枚举或属性签名。这个门禁是为了避免 LLM 根据记忆编出不存在的方法。
428
-
429
- 推荐操作顺序:
430
-
431
- ```text
432
- 1. discuss/spec 阶段确认需求、产品、插件类型和目标单据。
433
- 2. plan 阶段检查当前项目源码结构、构建文件和 SDK 依赖位置。
434
- 3. 用 kd_sdk_signature 查证要调用的 SDK 类型和方法。
435
- 4. 确认生成 .pi/kd/runs/<run-id>/evidence/sdk-signature.md。
436
- 5. 记录 evidence/tdd-red.md。
437
- 6. 进入 execute 后再写 PLAN.md 中列出的生产源码。
438
- 7. 写完后记录 evidence/tdd-green.md,再进入 verify。
439
- ```
440
-
441
- 示例:
442
-
443
- ```text
444
- kd_sdk_signature product=flagship query=SaveServiceHelper method=save
445
- kd_sdk_signature product=flagship query=OperationServiceHelper method=executeOperate
446
- kd_sdk_signature product=enterprise query=DynamicObject method=GetDynamicObject
447
- ```
448
-
449
- 如果 `kd_sdk_signature` 找不到结果,不要让 Agent 直接写代码。先检查:
450
-
451
- - 当前是否在业务项目根目录启动 `kcode start`。
452
- - 项目是否能看到 SDK jar/dll,例如 `lib/`、`libs/`、`bin/`、`WebSite/bin/` 或构建缓存。
453
- - `PLAN.md` 是否记录了真实源码根和 SDK 依赖位置。
454
- - 是否可以通过当前项目已有封装类、编译输出或官方元数据反查签名。
455
-
456
- 只有 `kd_sdk_signature`、当前项目构建输出、项目源码封装或官方元数据能作为签名事实。`kd_search`、`kd_cosmic_api` 和 README 里的示例只用于找线索。
457
-
458
- 示例计划步骤:
459
-
460
- ```markdown
461
- ## 执行步骤
462
-
463
- - [ ] STEP-001:检查现有插件基类、包名和目标字段。
464
- - [ ] STEP-002:运行 API/元数据/编译等红灯检查并记录证据。
465
- - [ ] STEP-003:修改 `code/scm/plugin/src/main/java/.../PurchaseOrderPlugin.java`。
466
- - [ ] STEP-004:运行同一类绿灯检查并记录证据。
467
- - [ ] STEP-005:记录变更文件和验证证据。
468
- ```
469
-
470
- 示例红绿检查:
471
-
472
- ```markdown
473
- ## TDD / 红绿检查
474
-
475
- - 红灯证据:evidence/tdd-red.md
476
- - 绿灯证据:evidence/tdd-green.md
477
- - 红绿检查命令或工具:kd_sdk_signature / kd_cosmic_metadata / kd_check / build
478
- - 不要为了满足门禁引入第三方测试 jar 或测试框架。
479
- - Java/C# SDK 签名证据:evidence/sdk-signature.md
480
- ```
481
-
482
- 示例执行记录:
483
-
484
- ```markdown
485
- ## 步骤结果
486
-
487
- - [x] STEP-001:已完成。证据:evidence/step-001.md
488
- - [x] STEP-002:已完成。证据:evidence/step-002.md
489
- - [x] STEP-003:已完成。证据:evidence/step-003.md
490
- - [x] STEP-004:已完成。证据:evidence/tdd-green.md
491
- - [x] STEP-005:已完成。证据:evidence/step-005.md
492
- ```
493
-
494
- 如果 LLM 跳过步骤、没有记录 evidence,或只是口头声明完成,KCode 不允许进入 `verify`。
495
-
496
- 结构化问题也会进入门禁。Agent 需要确认产品、目标单据、插件位置、高风险 SQL 或方案选择时,会使用 `kd_question` 记录问题;未回答的阻断问题会阻止进入下一阶段。
497
-
498
- `kd_question` 一次只允许问一个当前最阻塞的问题,不能把多个问题打包成编号清单。比如应先问:
499
-
500
- ```text
501
- 采购入库单 Form ID 是否为 pur_receivebill?
502
- ```
503
-
504
- 得到回答后,再继续问触发时机、库存条件、弹窗内容或插件位置。
505
-
506
- 在 `kcode start` 的交互式 TUI 中,`kd_question` 会弹出 KCode 问题选择/输入对话,并在用户选择或输入后自动记录答案。非交互模式或 UI 不可用时,问题会显示在对话里,用户直接回复;Agent 读取回复后再记录答案。也可以手动执行:
507
-
508
- ```text
509
- /kd-answer Q-001 采购订单
510
- ```
511
-
512
- 运行状态保存在当前业务项目:
513
-
514
- ```text
515
- .pi/kd/active-run.json
516
- .pi/kd/runs/<run-id>/
517
- .pi/kd/runs/<run-id>/RUN.json
518
- ```
519
-
520
- ## 内置金蝶工具
521
-
522
- KCode 会向 Pi 注册这些金蝶工具:
523
-
524
- ```text
525
- kd_plan_status 查看当前 Harness run、阶段、产物和门禁
526
- kd_question 记录/回答/查看阻断问题,未回答时阻止阶段推进
527
- kd_search 搜索内置金蝶 SDK 知识和代码模式
528
- kd_table 查询内置金蝶表结构
529
- kd_check 检查金蝶 Java/C# 插件代码
530
- kd_cosmic_config 运行官方 ok-cosmic 配置预检
531
- kd_cosmic_metadata 查询官方 Cosmic 表单/单据元数据
532
- kd_cosmic_api 查询随包 Cosmic API 知识线索
533
- kd_sdk_signature 从当前项目实际 SDK jar/dll 中读取类和方法签名
534
- kd_ksql_lint 运行官方 ok-ksql SQL/KSQL lint
535
- kd_build 按产品画像执行或 dry-run 构建;Java 使用 Gradle,C# 使用 dotnet build
536
- kd_debug 分析金蝶日志和堆栈
537
- ```
538
-
539
- 这些工具不依赖本机 Python:
540
-
541
- - `kd_ksql_lint` 是内置 Node 静态检查器。
542
- - `kd_cosmic_config` 使用 Node 校验 Cosmic 官方能力配置;项目没有 `ok-cosmic.json` 时会自动使用 KCode 随包默认配置。
543
- - `kd_cosmic_metadata` 使用统一路由 API 查询真实单据/表单元数据,并在当前项目 `.pi/kd/official-skills/` 下维护 JSON 缓存。
544
- - `kd_sdk_signature` 优先从当前业务项目的实际 SDK jar/dll 中读取类型和方法签名。Cosmic Java 依赖 `javap`,Enterprise C# 依赖 PowerShell 读取 DLL 元数据。
545
- - `kd_cosmic_api` 查询随包金蝶知识库,只作为 API 线索和兜底;精确方法签名优先使用 `kd_sdk_signature`、当前项目 SDK 或编译输出确认。
546
- - 当前项目存在 active run 时,`kd_sdk_signature` 成功后会自动写入 `.pi/kd/runs/<run-id>/evidence/sdk-signature.md`。Java/C# 产品代码缺少这份证据时,KCode 不允许进入 `execute` 或写生产源码。
547
-
548
- 示例:
549
-
550
- ```text
551
- kd_sdk_signature product=flagship query=QueryServiceHelper method=loadSingle path=lib
552
- kd_sdk_signature product=enterprise query=DynamicObject method=GetDynamicObject path=bin
553
- ```
554
-
555
- `method` 只是在已匹配的类/类型里过滤方法或属性;如果不知道类名,先用 `query` 搜类型关键词,再结合项目源码和构建文件缩小范围。
556
-
557
- `ok-cosmic.json` 是可选的 KCode 官方能力覆盖配置,不是苍穹工程模板里的 `cosmic.json`。业务项目里的 `cosmic.json` 通常只包含开发者标识、工程标识、MC 资源地址等运行环境信息,不能替代 `ok-cosmic.json`。
558
-
559
- 只有需要指定企业统一路由 API 或覆盖知识库路径时,才需要在业务项目根目录创建 `ok-cosmic.json`:
560
-
561
- ```json
562
- {
563
- "graph": {
564
- "dbPath": "D:\\path\\to\\ok-cosmic-docs.db"
565
- },
566
- "route": {
567
- "apiUrl": "https://your-runtime-route.example.com/api",
568
- "timeoutSeconds": 10
569
- }
570
- }
571
- ```
156
+ KCode 不要求你单独安装全局 `pi` 命令,也不会修改用户全局 Pi 配置。
572
157
 
573
158
  ## 升级
574
159
 
575
- 查看当前安装版本:
576
-
577
- ```powershell
578
- kcode version
579
- npm ls -g kcode-pi --depth=0
580
- ```
581
-
582
- 查看 npm 最新版本:
583
-
584
- ```powershell
585
- npm view kcode-pi version
586
- ```
587
-
588
- 升级到最新版本:
589
-
590
160
  ```powershell
591
161
  npm install -g kcode-pi@latest
592
- ```
593
-
594
- 如果 `npm install -g` 没有更新到新版本,或提示 `EEXIST: file already exists ... kcode.cmd`,通常是全局命令 shim 或旧包目录没有被 npm 清干净。按下面顺序处理:
595
-
596
- ```powershell
597
- npm uninstall -g kcode-pi
598
- npm install -g kcode-pi@latest
599
162
  kcode version
600
163
  ```
601
164
 
602
- 如果仍提示 `kcode.cmd` 已存在,先确认它属于旧的 `kcode-pi` 全局安装:
603
-
604
- ```powershell
605
- npm root -g
606
- where kcode
607
- ```
608
-
609
- 删除 `where kcode` 指向的旧 `kcode.cmd`、`kcode.ps1` 后再重装:
610
-
611
- ```powershell
612
- npm install -g kcode-pi@latest
613
- ```
614
-
615
- 如果 npm 仍使用缓存或企业镜像没有同步新版本,先确认 registry 上真实可安装版本:
616
-
617
- ```powershell
618
- npm view kcode-pi version
619
- npm view kcode-pi versions --json
620
- ```
621
-
622
165
  升级后建议在业务项目根目录重新执行:
623
166
 
624
167
  ```powershell
@@ -626,137 +169,4 @@ kcode init
626
169
  kcode doctor --deep
627
170
  ```
628
171
 
629
- ## nvm 与 Node 版本切换
630
-
631
- 如果使用 nvm,Windows 上每个 Node 版本都有独立的全局 npm 安装目录,例如:
632
-
633
- ```text
634
- C:\Users\Administrator\AppData\Local\nvm\v24.16.0\node_modules\kcode-pi
635
- C:\Users\Administrator\AppData\Local\nvm\v22.19.0\node_modules\kcode-pi
636
- ```
637
-
638
- 切换 Node 版本并重新全局安装 KCode 后,在业务项目根目录重新执行:
639
-
640
- ```powershell
641
- kcode init
642
- ```
643
-
644
- `kcode-pi@0.1.2` 起会自动清理 `.pi/settings.json` 中同名旧路径,只保留当前 Node 版本下的安装路径。
645
-
646
- 如果旧版本已经出现工具冲突:
647
-
648
- ```text
649
- Tool "kd_search" conflicts with ...\nvm\v22.19.0\node_modules\kcode-pi\extensions\kingdee-tools.ts
650
- ```
651
-
652
- 打开当前业务项目的配置:
653
-
654
- ```powershell
655
- notepad .pi\settings.json
656
- ```
657
-
658
- 删除旧 Node 版本下的 `kcode-pi` 路径,只保留当前 `nvm current` 对应的那一条,然后运行:
659
-
660
- ```powershell
661
- kcode start
662
- ```
663
-
664
- ## 常见问题
665
-
666
- ### 找不到模型
667
-
668
- 现象:
669
-
670
- ```text
671
- Warning: No models available.
672
- ```
673
-
674
- 处理:
675
-
676
- ```text
677
- /login
678
- /model
679
- ```
680
-
681
- 或先设置供应商 API Key,再运行 `kcode start`。
682
-
683
- ### 终端输入逐字换行或选择列表有残影
684
-
685
- 这通常是 Pi TUI 与当前终端/Node/TTY 环境的兼容问题。优先使用:
686
-
687
- - Windows Terminal
688
- - Node.js `22.19.0` 或更新的 Node 22 LTS
689
- - 宽度正常的终端窗口
690
-
691
- 检查终端尺寸:
692
-
693
- ```powershell
694
- node -e "console.log({isTTY:process.stdout.isTTY, columns:process.stdout.columns, rows:process.stdout.rows, term:process.env.TERM})"
695
- ```
696
-
697
- 如果 `columns` 很小或异常,重新打开 Windows Terminal,或尝试:
698
-
699
- ```powershell
700
- $env:TERM="xterm-256color"
701
- $env:COLORTERM="truecolor"
702
- kcode start
703
- ```
704
-
705
- 也可以在 Pi 全局设置中启用兼容项:
706
-
707
- ```powershell
708
- notepad $env:USERPROFILE\.pi\agent\settings.json
709
- ```
710
-
711
- 写入或合并:
712
-
713
- ```json
714
- {
715
- "terminal": {
716
- "clearOnShrink": true
717
- },
718
- "showHardwareCursor": true
719
- }
720
- ```
721
-
722
- ### Windows 下出现 `/mnt/d/...` 找不到文件
723
-
724
- 现象:
725
-
726
- ```text
727
- read /mnt/d/projects/xxx/src/main/java/Foo.java
728
- ENOENT: no such file or directory, access 'D:\mnt\d\projects\xxx\src\main\java\Foo.java'
729
- ```
730
-
731
- 原因是当前运行环境是 Windows,但 LLM 或工具把 Windows 路径误写成了 WSL/MSYS 风格路径。正确做法:
732
-
733
- - 优先使用项目相对路径,例如 `code/fi/module/src/main/java/.../Foo.java`。
734
- - 如果必须使用绝对路径,在 Windows 下使用 `D:\projects\xxx\...`,不要使用 `/mnt/d/...` 或 `/d/...`。
735
- - 发现项目结构变化后运行 `kcode context --refresh`,让项目常驻上下文重新记录真实源码根。
736
-
737
- KCode Harness 会拦截常见 `/mnt/<drive>/...` 和 `/<drive>/...` 文件工具调用,并提示改用 Windows 路径或项目相对路径。
738
-
739
- ### 仍然加载旧版本 KCode
740
-
741
- 先检查当前项目配置:
742
-
743
- ```powershell
744
- type .pi\settings.json
745
- ```
746
-
747
- 如果 `packages` 中有多条 `kcode-pi` 路径,运行:
748
-
749
- ```powershell
750
- kcode repair
751
- ```
752
-
753
- 如果使用的是 `0.1.1` 或更早版本,请手工删除旧路径,或升级到最新版。
754
-
755
- ## 更多文档
756
-
757
- 维护者和开发文档放在:
758
-
759
- ```text
760
- docs/DEVELOPMENT.md
761
- docs/KCODE_DISTRIBUTION.md
762
- ```
172
+ 更多升级和异常处理见 [故障排查](docs/TROUBLESHOOTING.md)。