kcode-pi 0.1.20 → 0.1.24
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 +68 -658
- package/dist/cli/kcode.js +2 -2
- package/docs/CHANGELOG.md +76 -0
- package/docs/COMMAND_REFERENCE.md +512 -0
- package/docs/DEVELOPMENT.md +4 -4
- package/docs/EVIDENCE_AND_GATES.md +167 -0
- package/docs/HARNESS_WORKFLOW.md +147 -0
- package/docs/KCODE_DISTRIBUTION.md +8 -8
- package/docs/PRODUCT_PROFILE.md +108 -0
- package/docs/TROUBLESHOOTING.md +135 -0
- package/docs/USER_GUIDE.md +209 -0
- package/extensions/kingdee-harness.ts +28 -83
- package/extensions/kingdee-tools.ts +9 -9
- package/package.json +2 -2
- package/prompts/kd-discuss.md +6 -1
- package/prompts/kd-execute.md +2 -2
- package/prompts/kd-plan.md +2 -6
- package/prompts/kd-verify.md +1 -7
- package/skills/kd-cosmic-dev/SKILL.md +5 -6
- package/skills/kd-cosmic-review/SKILL.md +2 -2
- package/skills/kd-cosmic-unittest/SKILL.md +1 -1
- package/skills/kd-execute/SKILL.md +1 -1
- package/skills/kd-plan/SKILL.md +3 -2
- package/skills/kd-verify/SKILL.md +2 -2
- package/src/cli/kcode.ts +2 -2
- package/src/harness/artifacts.ts +20 -8
- package/src/harness/gates.ts +25 -58
- package/src/harness/messages.ts +113 -0
- package/src/harness/path-policy.ts +10 -4
- package/src/harness/prompt.ts +68 -0
- package/src/harness/sdk-policy.ts +2 -1
- package/src/harness/state.ts +2 -2
- package/src/harness/tdd-policy.ts +12 -9
- package/src/product/profile.ts +6 -16
package/README.md
CHANGED
|
@@ -1,297 +1,102 @@
|
|
|
1
1
|
# KCode
|
|
2
2
|
|
|
3
|
-
KCode 是面向金蝶开发的 Pi
|
|
3
|
+
KCode 是面向金蝶开发的 Pi 工作环境启动器。它提供全局命令 `kcode`,自动携带 Pi CLI,并在当前业务项目中加载金蝶专属工具、skills、prompts、themes、知识库和 Harness 工作流。
|
|
4
4
|
|
|
5
|
-
KCode
|
|
5
|
+
KCode 默认面向中文用户。命令名和产品标识保持英文,例如 `/kd-start`、`/kd-product`、`kd_search`、`flagship`。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## 文档导航
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
/
|
|
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
|
-
|
|
214
|
-
|
|
215
|
-
同时会确保项目常驻上下文存在:
|
|
62
|
+
也可以直接提供需求文档:
|
|
216
63
|
|
|
217
64
|
```text
|
|
218
|
-
|
|
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
|
-
|
|
247
|
-
|
|
248
|
-
|
|
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
|
-
|
|
266
|
-
|
|
267
|
-
显示当前 KCode package 版本、安装路径、随包 Pi CLI 版本和 Node 版本。
|
|
76
|
+
支持的产品画像:
|
|
268
77
|
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
78
|
+
```text
|
|
79
|
+
cangqiong 金蝶苍穹 / Cosmic Java
|
|
80
|
+
xinghan 金蝶星瀚 / 基于苍穹/Cosmic
|
|
81
|
+
flagship 星空旗舰版 / 基于苍穹/Cosmic
|
|
82
|
+
enterprise 金蝶企业版 / C#
|
|
273
83
|
```
|
|
274
84
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
启动 KCode 工作环境。
|
|
85
|
+
进入 `ship` 前还需要确认风险:
|
|
278
86
|
|
|
279
|
-
```
|
|
280
|
-
|
|
87
|
+
```text
|
|
88
|
+
/kd-risk low 已完成本地构建和元数据检查,无残余交付风险
|
|
89
|
+
/kd-gate
|
|
281
90
|
```
|
|
282
91
|
|
|
283
|
-
|
|
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`
|
|
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
|
-
|
|
356
|
-
|
|
357
|
-
一个功能点对应一个 run。每个 run 都有独立阶段、计划、执行记录和证据;做另一个功能点时,不要复用上一个功能点的阶段。
|
|
358
|
-
|
|
359
|
-
```text
|
|
360
|
-
/kd-start 实现采购订单保存校验
|
|
361
|
-
/kd-finish
|
|
362
|
-
/kd-start 实现采购订单列表字段展示
|
|
363
|
-
```
|
|
115
|
+
## 内置金蝶工具
|
|
364
116
|
|
|
365
|
-
|
|
117
|
+
KCode 会向 Pi 注册:
|
|
366
118
|
|
|
367
119
|
```text
|
|
368
|
-
|
|
369
|
-
|
|
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
|
-
|
|
134
|
+
工具细节和使用顺序见 [Harness 工作流](docs/HARNESS_WORKFLOW.md)。
|
|
135
|
+
完整参数见 [命令参考](docs/COMMAND_REFERENCE.md)。
|
|
373
136
|
|
|
374
|
-
|
|
137
|
+
## 运行状态文件
|
|
375
138
|
|
|
376
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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)。
|