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.
@@ -0,0 +1,168 @@
1
+ # 证据和门禁
2
+
3
+ KCode Harness 的门禁用于避免跳阶段、猜 SDK、伪造验证结果或在错误产品技术栈上写代码。
4
+
5
+ ## 查看门禁
6
+
7
+ ```text
8
+ /kd-gate
9
+ /kd-status
10
+ ```
11
+
12
+ 门禁不通过时,先按原因补齐产品、文档、问题答案、计划、证据或风险说明。
13
+
14
+ ## 产品确认
15
+
16
+ 当需求涉及具体金蝶产品实现、构建、元数据或 SDK 查证时,需要确认产品画像:
17
+
18
+ ```text
19
+ /kd-product cangqiong --version V6.0
20
+ ```
21
+
22
+ 如果只是整理需求文档或处理产品无关的工程事项,可以先完成需求梳理,并在计划中写明不涉及产品实现。后续实际要改金蝶产品代码、构建、元数据或 SDK 时,再按范围确认产品。
23
+
24
+ 详见 [产品画像确认](PRODUCT_PROFILE.md)。
25
+
26
+ ## 计划门禁
27
+
28
+ 进入 `execute` 前,`PLAN.md` 必须包含:
29
+
30
+ - 已检查的项目结构。
31
+ - 目标源码根 / 路径。
32
+ - 允许修改的文件。
33
+ - 必需的金蝶查证项。
34
+ - `## 执行步骤`,并用 `- [ ] STEP-001:...` 格式拆分步骤。
35
+ - `## TDD / 红绿检查`。
36
+ - `## 验证命令`。
37
+ - 回滚 / 影响控制。
38
+
39
+ `execute` 阶段只能写 `PLAN.md` 明确列出的源码文件。
40
+
41
+ ## SDK 签名证据
42
+
43
+ 涉及 Java/C# 产品代码时,进入 `execute` 前必须已有:
44
+
45
+ ```text
46
+ evidence/sdk-signature.md
47
+ ```
48
+
49
+ 推荐工具:
50
+
51
+ ```text
52
+ kd_sdk_signature product=cangqiong query=QueryServiceHelper method=loadSingle
53
+ kd_sdk_signature product=flagship query=SaveServiceHelper method=save
54
+ kd_sdk_signature product=enterprise query=DynamicObject method=GetDynamicObject
55
+ ```
56
+
57
+ 只有这些来源可以作为签名事实:
58
+
59
+ - `kd_sdk_signature` 从当前项目真实 jar/dll 读取的结果。
60
+ - 当前项目构建输出。
61
+ - 项目源码封装。
62
+ - 官方元数据。
63
+
64
+ `kd_search`、`kd_cosmic_api` 和随包知识只能作为线索。
65
+
66
+ ## TDD 红绿证据
67
+
68
+ 写生产源码前必须有红灯证据:
69
+
70
+ ```text
71
+ evidence/tdd-red.md
72
+ ```
73
+
74
+ 进入 `verify` 前必须有绿灯证据:
75
+
76
+ ```text
77
+ evidence/tdd-green.md
78
+ ```
79
+
80
+ 绿灯证据必须包含真实成功输出和:
81
+
82
+ ```text
83
+ Exit: 0
84
+ ```
85
+
86
+ 或:
87
+
88
+ ```text
89
+ 退出码:0
90
+ ```
91
+
92
+ 不能写:
93
+
94
+ - “需在开发环境验证”
95
+ - “待验证”
96
+ - “未执行”
97
+ - “应该可以”
98
+ - “Kingdee IDE 中编译”
99
+
100
+ 如果命令无法运行,记录真实阻塞原因和残余风险,不能把它当绿灯。
101
+
102
+ ## evidence/index.json
103
+
104
+ 所有 evidence 文件必须登记在:
105
+
106
+ ```text
107
+ evidence/index.json
108
+ ```
109
+
110
+ KCode 内置工具和统一 evidence 写入路径会自动维护索引。不要手工塞文件绕过门禁。
111
+
112
+ 常见 evidence:
113
+
114
+ ```text
115
+ evidence/sdk-signature.md
116
+ evidence/cosmic-config.txt
117
+ evidence/cosmic-metadata.json
118
+ evidence/cosmic-api.txt
119
+ evidence/ksql-lint.txt
120
+ evidence/tdd-red.md
121
+ evidence/tdd-green.md
122
+ evidence/step-001.md
123
+ ```
124
+
125
+ ## Cosmic 官方能力证据
126
+
127
+ 苍穹、星瀚和星空旗舰版通常需要:
128
+
129
+ ```text
130
+ kd_cosmic_config product=cangqiong
131
+ kd_cosmic_metadata product=cangqiong form=<formId或单据名>
132
+ kd_cosmic_api product=cangqiong mode=search query=<关键词>
133
+ ```
134
+
135
+ 这些工具成功执行后会自动写入 run 目录下的 evidence 文件。
136
+
137
+ ## KSQL / SQL 证据
138
+
139
+ 交付 KSQL/SQL 数据修复内容时,ship 前通常需要:
140
+
141
+ ```text
142
+ evidence/cosmic-metadata.json
143
+ evidence/ksql-lint.txt
144
+ ```
145
+
146
+ 运行:
147
+
148
+ ```text
149
+ kd_ksql_lint product=cangqiong path=<sql文件路径>
150
+ ```
151
+
152
+ ## 风险确认
153
+
154
+ 进入 `ship` 前必须确认风险等级和原因:
155
+
156
+ ```text
157
+ /kd-risk low 已完成本地构建和元数据检查,无残余交付风险
158
+ ```
159
+
160
+ 等级:
161
+
162
+ ```text
163
+ low
164
+ medium
165
+ high
166
+ ```
167
+
168
+ 风险原因应来自 `VERIFY.md` 和 `SHIP.md` 的真实验证结果,不要为了过门禁随手写 `low`。
@@ -0,0 +1,149 @@
1
+ # Harness 工作流
2
+
3
+ KCode Harness 把金蝶开发工作拆成固定阶段:
4
+
5
+ ```text
6
+ discuss -> spec -> plan -> execute -> verify -> ship
7
+ ```
8
+
9
+ run 可以是一条明确需求,也可以是一组同一目标下的需求。
10
+
11
+ ## 创建 run
12
+
13
+ 推荐显式指定产品:
14
+
15
+ ```text
16
+ /kd-start --product cangqiong 实现采购订单保存校验
17
+ ```
18
+
19
+ 也可以直接提供需求文档来源,例如本地文件、目录或在线文档链接:
20
+
21
+ ```text
22
+ /kd-start E:\project\docs\需求说明.md
23
+ /kd-start https://example.com/requirements
24
+ ```
25
+
26
+ 在线文档如果需要登录或权限,KCode 会提示你提供可访问链接、导出文件路径或关键内容。
27
+
28
+ 如果你直接输入自然语言需求,KCode 会自动创建 run,并进入 `discuss` 阶段分析需求来源和范围。
29
+
30
+ 查看当前状态:
31
+
32
+ ```text
33
+ /kd-status
34
+ /kd-gate
35
+ ```
36
+
37
+ 如果产品未知,先看 [产品画像确认](PRODUCT_PROFILE.md)。
38
+
39
+ ## 阶段说明
40
+
41
+ ```text
42
+ discuss 梳理需求、产品版本、目标对象、边界和开放问题
43
+ spec 明确验收标准、数据对象、异常、性能和风险
44
+ plan 检查当前项目结构,记录真实目标路径、待改文件、查证项和验证命令
45
+ execute 只实现 PLAN.md 中批准的内容
46
+ verify 运行检查、构建或领域验证并记录证据
47
+ ship 汇总变更、验证证据、风险和后续事项
48
+ ```
49
+
50
+ 推进阶段:
51
+
52
+ ```text
53
+ /kd-advance
54
+ /kd-advance spec
55
+ /kd-advance plan
56
+ /kd-advance execute
57
+ /kd-advance verify
58
+ /kd-advance ship
59
+ ```
60
+
61
+ 门禁不通过时,不要绕过。先按 `/kd-gate` 给出的原因补齐产品、文档、计划、证据或风险说明。
62
+
63
+ ## 阶段文档
64
+
65
+ 每个 run 会落地到:
66
+
67
+ ```text
68
+ .pi/kd/runs/<run-id>/
69
+ ```
70
+
71
+ 主要文件:
72
+
73
+ ```text
74
+ RUN.json
75
+ CONTEXT.md
76
+ SPEC.md
77
+ PLAN.md
78
+ EXECUTION.md
79
+ VERIFY.md
80
+ SHIP.md
81
+ evidence/
82
+ evidence/index.json
83
+ ```
84
+
85
+ 创建缺失阶段文档:
86
+
87
+ ```text
88
+ /kd-artifact plan
89
+ ```
90
+
91
+ `/kd-artifact` 默认不会覆盖已有阶段文档。确认要整体替换时必须显式使用:
92
+
93
+ ```text
94
+ /kd-artifact plan <完整内容> --replace
95
+ ```
96
+
97
+ ## 待确认问题
98
+
99
+ 需要确认产品、目标单据、插件位置、高风险 SQL 或方案选择时,KCode 会记录待确认问题。未回答的阻断问题会阻止阶段推进。
100
+
101
+ 手动回答:
102
+
103
+ ```text
104
+ /kd-answer Q-001 采购订单
105
+ ```
106
+
107
+ 原则:
108
+
109
+ - 一次只问一个当前最阻塞的问题。
110
+ - 不要把 FormId、字段、触发时机、弹窗内容打包成问题清单。
111
+ - 得到答案后再继续问下一个必要问题。
112
+
113
+ ## 多个需求
114
+
115
+ 查看历史 run:
116
+
117
+ ```text
118
+ /kd-runs
119
+ ```
120
+
121
+ 切换 run:
122
+
123
+ ```text
124
+ /kd-switch <run-id>
125
+ ```
126
+
127
+ 完成当前 run:
128
+
129
+ ```text
130
+ /kd-finish
131
+ ```
132
+
133
+ 同一目标下的一组需求可以放在同一个 run 中处理。无关目标建议创建新 run:
134
+
135
+ ```text
136
+ /kd-start --product cangqiong E:\project\docs\本轮采购订单改造.docx
137
+ ```
138
+
139
+ ## 写代码规则
140
+
141
+ KCode 会阻止过早写入 Java/XML/SQL/C# 等产品代码:
142
+
143
+ - 未进入 `execute` 阶段不能写产品代码。
144
+ - `execute` 只能写 `PLAN.md` 中批准的真实源码文件。
145
+ - 临时发现要改新文件,先回到 `plan` 更新计划。
146
+ - 不允许凭空写 demo、sample、scaffold。
147
+ - 必须先理解当前业务项目已有目录、模块、包名、基类和本地封装。
148
+
149
+ 证据和门禁细节见 [证据和门禁](EVIDENCE_AND_GATES.md)。
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## 目标
4
4
 
5
- KCode 不 fork Pi,也不替换 Pi 生态。KCode 提供一个企业入口,自动携带 Pi CLI,并把 KCodeV2 和经过审查的 Pi packages 以项目级配置方式组合起来。
5
+ KCode 不 fork Pi,也不替换 Pi 生态。KCode 提供一个面向金蝶开发的入口,自动携带 Pi CLI,并把 KCode package 和经过审查的 Pi packages 以项目级配置方式组合起来。
6
6
 
7
7
  核心目标:
8
8
 
@@ -15,8 +15,8 @@ KCode 不 fork Pi,也不替换 Pi 生态。KCode 提供一个企业入口,
15
15
  ## 推荐结构
16
16
 
17
17
  ```text
18
- kcode-pi 当前仓库,作为 Pi package 提供金蝶工具、skills、prompts、themes。
19
- kcode cli 启动器,负责项目初始化、环境检查和启动随包 Pi CLI。
18
+ kcode-pi npm 包,作为 Pi package 提供金蝶工具、skills、prompts、themes。
19
+ kcode 全局命令,负责项目初始化、环境检查和启动随包 Pi CLI。
20
20
  ```
21
21
 
22
22
  `kcode` 启动器只管理当前项目的 `.pi/settings.json`,不写 `~/.pi` 或其他用户全局目录。启动时优先调用随包 `@earendil-works/pi-coding-agent` 的 `dist/cli.js`,仅在随包 CLI 缺失时回退全局 `pi`。
@@ -29,12 +29,12 @@ kcode cli 启动器,负责项目初始化、环境检查和启动随包 Pi
29
29
  .pi/settings.json
30
30
  ```
31
31
 
32
- 默认只写入当前 KCodeV2 package
32
+ 默认只写入当前安装的 KCode package 路径:
33
33
 
34
34
  ```json
35
35
  {
36
36
  "packages": [
37
- "E:\\projects\\kingdee\\KCodeV2"
37
+ "<当前 kcode-pi 安装路径>"
38
38
  ]
39
39
  }
40
40
  ```
@@ -44,7 +44,7 @@ kcode cli 启动器,负责项目初始化、环境检查和启动随包 Pi
44
44
  ```json
45
45
  {
46
46
  "packages": [
47
- "E:\\projects\\kingdee\\KCodeV2",
47
+ "<当前 kcode-pi 安装路径>",
48
48
  "npm:pi-subagents@1.2.3"
49
49
  ]
50
50
  }
@@ -57,7 +57,7 @@ kcode cli 启动器,负责项目初始化、环境检查和启动随包 Pi
57
57
  允许接入前必须检查:
58
58
 
59
59
  - package 来源和维护状态。
60
- - license 是否允许企业内部分发。
60
+ - license 是否允许随包分发和商业使用。
61
61
  - 是否注册 extensions、hooks、commands、tools。
62
62
  - 是否写全局配置或访问敏感路径。
63
63
  - 是否与 KCode harness、权限策略、上下文策略冲突。
@@ -83,7 +83,7 @@ kcode start 初始化后启动 KCode 工作环境
83
83
  - 不改用户全局 Pi 配置。
84
84
  - 不覆盖用户已安装 package。
85
85
  - 不自动安装未在 allowlist 中的 package。
86
- - 不把第三方 package 静默 bundle 进 KCodeV2
86
+ - 不把第三方 package 静默 bundle 进 KCode
87
87
  - 所有新增 package 固定版本,变更必须记录。
88
88
 
89
89
  ## 当前限制
@@ -0,0 +1,108 @@
1
+ # 产品画像确认
2
+
3
+ 产品画像决定 KCode 使用哪套产品知识、SDK/元数据来源、构建策略、目录约束和门禁规则。标题栏里如果出现 `产品:未确认`,必须先确认产品。
4
+
5
+ ## 支持的产品
6
+
7
+ ```text
8
+ cangqiong 金蝶苍穹 / Cosmic Java
9
+ xinghan 金蝶星瀚 / 基于苍穹/Cosmic
10
+ flagship 星空旗舰版 / 基于苍穹/Cosmic
11
+ enterprise 金蝶企业版 / C#
12
+ ```
13
+
14
+ `Cosmic` 在 KCode 中就是苍穹平台语境,不作为独立产品画像。用户输入 `cosmic` 或 `云苍穹` 时,KCode 会按 `cangqiong` 归一处理。星瀚和星空旗舰版都基于苍穹/Cosmic 平台,但具体接口、目录和元数据可能存在产品差异,最终以当前产品、项目 SDK、元数据和构建证据为准。
15
+
16
+ 企业版默认按 C# 处理。只有明确提出 `Python插件`、`IronPython`,或带企业版/BOS 语境的 `Python脚本` 时,KCode 才切换到企业版 Python/IronPython 模式。
17
+
18
+ ## 创建 run 时确认产品
19
+
20
+ 推荐:
21
+
22
+ ```text
23
+ /kd-start --product cangqiong --version V6.0 实现采购订单保存校验
24
+ ```
25
+
26
+ 也可以省略版本:
27
+
28
+ ```text
29
+ /kd-start --product flagship 实现采购订单插件
30
+ ```
31
+
32
+ ## 已有 run 补产品
33
+
34
+ 如果 run 已经创建,但标题栏显示:
35
+
36
+ ```text
37
+ 产品:未确认
38
+ ```
39
+
40
+ 执行:
41
+
42
+ ```text
43
+ /kd-product cangqiong --version V6.0
44
+ /kd-gate
45
+ /kd-status
46
+ ```
47
+
48
+ 如果不确定具体产品,但明确属于金蝶苍穹相关技术栈,优先确认业务实际使用的是苍穹、星瀚还是星空旗舰版,不要把 `cosmic` 当成产品名。
49
+
50
+ ## 如何选择
51
+
52
+ 选择 `cangqiong`:
53
+
54
+ - 明确是金蝶苍穹。
55
+ - Java 插件、Cosmic 表单/单据/元数据。
56
+
57
+ 选择 `xinghan`:
58
+
59
+ - 明确是金蝶星瀚。
60
+ - 基于苍穹/Cosmic 平台,优先按平台 Java 插件处理。
61
+ - 接口或元数据存在星瀚差异时,以星瀚产品和当前项目证据为准。
62
+
63
+ 选择 `flagship`:
64
+
65
+ - 明确是星空旗舰版。
66
+ - 基于苍穹/Cosmic 平台,Java 插件规则适用。
67
+ - 接口或目录存在旗舰版差异时,以旗舰版产品和当前项目证据为准。
68
+ - 如果项目存在 `code/` 目录,生产代码应跟随 `code/` 下真实结构。
69
+
70
+ 选择 `enterprise`:
71
+
72
+ - 明确是金蝶企业版 / BOS C#。
73
+ - Java/Cosmic API 不适用。
74
+
75
+ ## 常见问题
76
+
77
+ ### 为什么不能保持 unknown?
78
+
79
+ 因为 unknown 会导致:
80
+
81
+ - 无法选择对应产品的知识范围、SDK/元数据查证来源和门禁规则。
82
+ - 无法确定构建策略、目录约束和证据要求,例如苍穹/星瀚/旗舰版的 Java 插件、企业版 C# 插件、企业版 Python/IronPython 脚本或 KSQL/SQL 数据脚本各自的验证方式。
83
+ - 构建命令无法可靠选择。
84
+ - SDK 签名和证据门禁会失去产品约束。
85
+
86
+ KCode 会阻止 unknown run 离开 `discuss`。
87
+
88
+ ### Header 和 `/kd-status` 不一致怎么办?
89
+
90
+ 先刷新门禁:
91
+
92
+ ```text
93
+ /kd-gate
94
+ /kd-status
95
+ ```
96
+
97
+ 如果刚升级过 KCode,重新启动:
98
+
99
+ ```powershell
100
+ kcode start
101
+ ```
102
+
103
+ 仍异常时运行:
104
+
105
+ ```powershell
106
+ kcode doctor --deep
107
+ kcode repair
108
+ ```
@@ -0,0 +1,135 @@
1
+ # 故障排查
2
+
3
+ ## 找不到模型
4
+
5
+ 现象:
6
+
7
+ ```text
8
+ Warning: No models available.
9
+ ```
10
+
11
+ 处理:
12
+
13
+ ```text
14
+ /login
15
+ /model
16
+ ```
17
+
18
+ 或先设置供应商 API Key:
19
+
20
+ ```powershell
21
+ $env:OPENAI_API_KEY="sk-..."
22
+ kcode start
23
+ ```
24
+
25
+ ## 产品一直是未确认
26
+
27
+ 查看状态:
28
+
29
+ ```text
30
+ /kd-status
31
+ ```
32
+
33
+ 确认产品:
34
+
35
+ ```text
36
+ /kd-product cangqiong --version V6.0
37
+ /kd-gate
38
+ ```
39
+
40
+ 如果不知道选哪个,看 [产品画像确认](PRODUCT_PROFILE.md)。
41
+
42
+ ## ship 阶段门禁阻塞
43
+
44
+ 常见原因:
45
+
46
+ - 产品画像未确认。
47
+ - 风险等级或风险原因未知。
48
+ - 缺少 `SHIP.md` 必需章节。
49
+ - 缺少 evidence 文件。
50
+ - evidence 文件未登记到 `evidence/index.json`。
51
+ - KSQL/SQL 交付缺少元数据或 lint 证据。
52
+
53
+ 常用命令:
54
+
55
+ ```text
56
+ /kd-status
57
+ /kd-gate
58
+ /kd-risk low 已完成验证,无残余交付风险
59
+ ```
60
+
61
+ ## 仍然加载旧版本 KCode
62
+
63
+ 检查当前版本:
64
+
65
+ ```powershell
66
+ kcode version
67
+ ```
68
+
69
+ 检查项目配置:
70
+
71
+ ```powershell
72
+ type .pi\settings.json
73
+ ```
74
+
75
+ 如果 `packages` 中有多条 `kcode-pi` 路径:
76
+
77
+ ```powershell
78
+ kcode repair
79
+ ```
80
+
81
+ 如果使用 nvm,Windows 上每个 Node 版本都有独立全局 npm 安装目录。切换 Node 后重新安装并初始化:
82
+
83
+ ```powershell
84
+ npm install -g kcode-pi@latest
85
+ kcode init
86
+ ```
87
+
88
+ ## npm install 没有更新
89
+
90
+ 先确认 registry 上的版本:
91
+
92
+ ```powershell
93
+ npm view kcode-pi version
94
+ npm view kcode-pi versions --json
95
+ ```
96
+
97
+ 必要时重装:
98
+
99
+ ```powershell
100
+ npm uninstall -g kcode-pi
101
+ npm install -g kcode-pi@latest
102
+ kcode version
103
+ ```
104
+
105
+ 如果提示 `EEXIST: file already exists ... kcode.cmd`,确认旧 shim:
106
+
107
+ ```powershell
108
+ npm root -g
109
+ where kcode
110
+ ```
111
+
112
+ 删除旧 `kcode.cmd`、`kcode.ps1` 后重装。
113
+
114
+ ## Windows 下出现 /mnt/d 路径
115
+
116
+ 现象:
117
+
118
+ ```text
119
+ read /mnt/d/projects/xxx/src/main/java/Foo.java
120
+ ENOENT: no such file or directory, access 'D:\mnt\d\projects\xxx\src\main\java\Foo.java'
121
+ ```
122
+
123
+ 原因是当前运行环境是 Windows,但路径被写成了 WSL/MSYS 风格。
124
+
125
+ 正确做法:
126
+
127
+ - 优先使用项目相对路径。
128
+ - 必须用绝对路径时,使用 `D:\projects\xxx\...`。
129
+ - 不要使用 `/mnt/d/...` 或 `/d/...`。
130
+
131
+ 刷新项目上下文:
132
+
133
+ ```powershell
134
+ kcode context --refresh
135
+ ```