@kodax-ai/kodax 0.7.76 → 0.7.78
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 +758 -371
- package/LICENSE +158 -158
- package/README.md +1702 -1508
- package/README_CN.md +1019 -869
- package/config-templates/config.example.jsonc +86 -4
- package/config-templates/integrations/a2a.example.jsonc +98 -98
- package/config-templates/integrations/extensions.example.jsonc +7 -7
- package/config-templates/integrations/mcp.example.jsonc +16 -16
- package/dist/builtin/code-review/SKILL.md +22 -22
- package/dist/builtin/skill-creator/scripts/aggregate-benchmark.d.ts +46 -46
- package/dist/builtin/skill-creator/scripts/analyze-benchmark.d.ts +46 -46
- package/dist/builtin/skill-creator/scripts/compare-runs.d.ts +62 -62
- package/dist/builtin/skill-creator/scripts/generate-review.d.ts +33 -33
- package/dist/builtin/skill-creator/scripts/grade-evals.d.ts +73 -73
- package/dist/builtin/skill-creator/scripts/improve-description.d.ts +23 -23
- package/dist/builtin/skill-creator/scripts/init-skill.d.ts +14 -14
- package/dist/builtin/skill-creator/scripts/install-skill.d.ts +29 -29
- package/dist/builtin/skill-creator/scripts/package-skill.d.ts +38 -38
- package/dist/builtin/skill-creator/scripts/quick-validate.d.ts +8 -8
- package/dist/builtin/skill-creator/scripts/run-eval.d.ts +66 -66
- package/dist/builtin/skill-creator/scripts/run-loop.d.ts +49 -49
- package/dist/builtin/skill-creator/scripts/run-trigger-eval.d.ts +58 -58
- package/dist/chunks/agent-ASP4MS3X.js +2 -0
- package/dist/chunks/argument-completer-JYQ7FX3W.js +2 -0
- package/dist/chunks/chunk-2CFHBKRE.js +5 -0
- package/dist/chunks/chunk-35PPHOQ2.js +292 -0
- package/dist/chunks/chunk-43QNNDHR.js +29 -0
- package/dist/chunks/chunk-5BNQXXGY.js +1 -0
- package/dist/chunks/chunk-5GO6FH7L.js +458 -0
- package/dist/chunks/chunk-5NDCSFOP.js +78 -0
- package/dist/chunks/chunk-6FOJVETH.js +22 -0
- package/dist/chunks/chunk-6XM4B6K2.js +48 -0
- package/dist/chunks/chunk-6YZUE6NC.js +240 -0
- package/dist/chunks/{chunk-RDXRM3UI.js → chunk-7OEBJGHK.js} +1 -1
- package/dist/chunks/chunk-KQLQYHWU.js +386 -0
- package/dist/chunks/chunk-NXO6GWSY.js +46 -0
- package/dist/chunks/chunk-T2XZTLYE.js +316 -0
- package/dist/chunks/chunk-TQDBTTIM.js +348 -0
- package/dist/chunks/{chunk-SMT2JSM3.js → chunk-UID7BLAB.js} +9 -9
- package/dist/chunks/chunk-VAT2QYXM.js +765 -0
- package/dist/chunks/chunk-YAZQTC2L.js +5 -0
- package/dist/chunks/chunk-YVRYHC4C.js +655 -0
- package/dist/chunks/{chunk-PXKSE54E.js → chunk-Z3KFRTSB.js} +1 -1
- package/dist/chunks/compaction-config-BQSSIWK5.js +2 -0
- package/dist/chunks/{construction-bootstrap-5F5KF2BZ.js → construction-bootstrap-VQLQGWPY.js} +1 -1
- package/dist/chunks/dist-BFT5YIGU.js +2 -0
- package/dist/chunks/dist-PCFE24YP.js +2 -0
- package/dist/chunks/host-UTFXCYYM.js +2 -0
- package/dist/chunks/run-manager-PJU3WIFJ.js +2 -0
- package/dist/chunks/utils-SID4HW2Q.js +2 -0
- package/dist/index.d.ts +21 -19
- package/dist/index.js +6 -6
- package/dist/kodax_bootstrap.js +25 -25
- package/dist/kodax_cli.js +1787 -1341
- package/dist/kodax_resume.js +17 -17
- package/dist/provider-capabilities.json +392 -362
- package/dist/runtime-worker.js +1707 -1279
- package/dist/sandbox-workspace-session.js +563 -0
- package/dist/sdk-a2a.d.ts +18 -17
- package/dist/sdk-a2a.js +8 -8
- package/dist/sdk-agent.d.ts +320 -70
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +135 -168
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-experimental-memory.d.ts +14 -597
- package/dist/sdk-experimental-memory.js +1 -1
- package/dist/sdk-llm.d.ts +219 -6
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +1 -1
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +70 -27
- package/dist/sdk-repl.js +2 -2
- package/dist/sdk-runtime.d.ts +212 -149
- package/dist/sdk-runtime.js +1 -1
- package/dist/sdk-sandbox.d.ts +93 -0
- package/dist/sdk-sandbox.js +2 -0
- package/dist/sdk-session.d.ts +8 -8
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.d.ts +2 -2
- package/dist/sdk-skills.js +1 -1
- package/dist/semantic-worker.js +15 -15
- package/dist/types-chunks/{base.d-ChvpaKjZ.d.ts → base.d-4e74xDdy.d.ts} +13 -1
- package/dist/types-chunks/{bash-prefix-extractor.d-r1beOESM.d.ts → bash-prefix-extractor.d-uAe2Oqda.d.ts} +319 -9
- package/dist/types-chunks/{capability-learning.d-DPrYxRjF.d.ts → capability-learning.d-CVsdHw4j.d.ts} +1 -1
- package/dist/types-chunks/{capsule.d-zeqV4IQX.d.ts → capsule.d-BlSv9l3V.d.ts} +2 -2
- package/dist/types-chunks/{guardrail.d-CWYD1bdL.d.ts → guardrail.d-BRE_ErEj.d.ts} +1 -1
- package/dist/types-chunks/{guardrail.d-qjuKJZ31.d.ts → guardrail.d-CXDYRgZ3.d.ts} +201 -35
- package/dist/types-chunks/{history-retrieval.d-BKTJIrVd.d.ts → history-retrieval.d-DtCy7x64.d.ts} +2 -2
- package/dist/types-chunks/{integration-config.d-ojG4swOP.d.ts → integration-config.d-BNowXE8k.d.ts} +23 -8
- package/dist/types-chunks/{public-api.d-CX4B11qY.d.ts → public-api.d-B3AohsxN.d.ts} +37 -8
- package/dist/types-chunks/{commands.d-DUxnK2TU.d.ts → repl.d-Ie_ZXb_U.d.ts} +89 -78
- package/dist/types-chunks/{side-query.d-DWTMsndP.d.ts → resolver.d-iAQ9ocLB.d.ts} +23 -74
- package/dist/types-chunks/{run-manager.d-B9fEIjZk.d.ts → run-manager.d-D1twIhF9.d.ts} +1 -1
- package/dist/types-chunks/{sdk-session-B0fhAOPa.d.ts → sdk-session-DB9KksIx.d.ts} +3 -3
- package/dist/types-chunks/side-query.d-DTuLPcC5.d.ts +77 -0
- package/dist/types-chunks/types-D3g6XUQr.d.ts +662 -0
- package/dist/types-chunks/{types.d-sRLugmjy.d.ts → types.d-BA-Jwpfs.d.ts} +506 -11
- package/dist/types-chunks/{types.d-DEctY20M.d.ts → types.d-BH0ZkTGf.d.ts} +2 -2
- package/dist/types-chunks/{types.d-DCQVBqVn.d.ts → types.d-BbtGlKZu.d.ts} +25 -3
- package/dist/types-chunks/{types.d-CSmF0t0n.d.ts → types.d-DIpZJKUl.d.ts} +15 -0
- package/dist/types-chunks/{types.d-Bm_y6YuM.d.ts → types.d-DVDTIfB_.d.ts} +4 -4
- package/dist/types-chunks/{utils.d-D0wPxz8y.d.ts → utils.d-CVp6bFl9.d.ts} +23 -7
- package/docs/SDK_EMBEDDER_GUIDE.md +592 -119
- package/package.json +9 -1
- package/scripts/kodax-bin.cjs +28 -28
- package/scripts/production-env.cjs +25 -25
- package/dist/chunks/agent-7X5CFET2.js +0 -2
- package/dist/chunks/argument-completer-3NHIKB4N.js +0 -2
- package/dist/chunks/chunk-4PWPNCNK.js +0 -158
- package/dist/chunks/chunk-7FJNLJLF.js +0 -369
- package/dist/chunks/chunk-COQYLD4U.js +0 -5
- package/dist/chunks/chunk-D3T24FJW.js +0 -78
- package/dist/chunks/chunk-EI4JBQKL.js +0 -46
- package/dist/chunks/chunk-HGT6WQ24.js +0 -321
- package/dist/chunks/chunk-HS3XHF3R.js +0 -622
- package/dist/chunks/chunk-IDCGNQ4H.js +0 -5
- package/dist/chunks/chunk-KAY2XLCP.js +0 -74
- package/dist/chunks/chunk-OD6LVXU6.js +0 -329
- package/dist/chunks/chunk-OSF3H4RR.js +0 -22
- package/dist/chunks/chunk-TGMBHGZO.js +0 -427
- package/dist/chunks/chunk-VWSLC2WO.js +0 -770
- package/dist/chunks/chunk-Y3AMP22L.js +0 -37
- package/dist/chunks/compaction-config-7J2XE35D.js +0 -2
- package/dist/chunks/dist-2RA7LSH3.js +0 -2
- package/dist/chunks/dist-URKXBOC6.js +0 -2
- package/dist/chunks/host-RKZ2OGFT.js +0 -2
- package/dist/chunks/run-manager-7RM4HEH6.js +0 -2
- package/dist/chunks/utils-X3TEH6IO.js +0 -2
- package/dist/types-chunks/center-types.d-BBT122uJ.d.ts +0 -91
package/README_CN.md
CHANGED
|
@@ -1,908 +1,1058 @@
|
|
|
1
|
-
<p align="center">
|
|
2
|
-
<picture>
|
|
3
|
-
<source media="(prefers-color-scheme: dark)" srcset="assets/logo-dark.svg">
|
|
4
|
-
<source media="(prefers-color-scheme: light)" srcset="assets/logo-light.svg">
|
|
5
|
-
<img src="assets/logo-light.svg" alt="KodaX" width="640">
|
|
6
|
-
</picture>
|
|
7
|
-
</p>
|
|
8
|
-
|
|
9
|
-
<p align="center">
|
|
10
|
-
<b>源代码可用的 AI Coding Agent,跑你能拿到的任何 LLM。</b><br>
|
|
11
|
-
Anthropic · OpenAI · DeepSeek · Kimi · 智谱 · MiniMax · 小米 MiMo · 火山方舟 · Qwen · Gemini · Codex<br>
|
|
12
|
-
REPL · CLI · 库 · 免 Node 单文件二进制
|
|
13
|
-
</p>
|
|
14
|
-
|
|
15
|
-
<p align="center">
|
|
16
|
-
<a href="https://www.npmjs.com/package/@kodax-ai/kodax"><img alt="npm version" src="https://img.shields.io/npm/v/@kodax-ai/kodax?style=flat-square&color=cb3837"></a>
|
|
17
|
-
<a href="LICENSE"><img alt="license" src="https://img.shields.io/badge/license-KAI--FCL_1.0-orange?style=flat-square"></a>
|
|
18
|
-
<a href="https://github.com/icetomoyo/KodaX/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/icetomoyo/KodaX?style=flat-square&logo=github&color=f1c40f"></a>
|
|
19
|
-
<a href="https://github.com/icetomoyo/KodaX/actions"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/icetomoyo/KodaX/release.yml?style=flat-square&label=release"></a>
|
|
20
|
-
<img alt="providers" src="https://img.shields.io/badge/LLMs-16_aliases_+_custom-2ecc71?style=flat-square">
|
|
21
|
-
</p>
|
|
22
|
-
|
|
23
|
-
<p align="center">
|
|
24
|
-
<a href="#30-秒上手">安装</a> ·
|
|
25
|
-
<a href="#四种使用形态">使用形态</a> ·
|
|
26
|
-
<a href="#为什么用-kodax">为什么用</a> ·
|
|
27
|
-
<a href="CHANGELOG.md">更新日志</a> ·
|
|
28
|
-
<a href="docs/FEATURE_LIST.md">Roadmap</a> ·
|
|
29
|
-
<a href="https://github.com/icetomoyo/KodaX/discussions">讨论</a> ·
|
|
30
|
-
<a href="README.md">English README</a>
|
|
31
|
-
</p>
|
|
32
|
-
|
|
33
|
-
<p align="center">
|
|
34
|
-
<img src="kodax-hd.gif" alt="KodaX 实战演示" width="880">
|
|
35
|
-
</p>
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## 30 秒上手
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
npm i -g @kodax-ai/kodax
|
|
43
|
-
|
|
44
|
-
# 选一个你有 API key 的 provider
|
|
45
|
-
export ZHIPU_API_KEY=... #
|
|
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
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
**v0.7.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/logo-dark.svg">
|
|
4
|
+
<source media="(prefers-color-scheme: light)" srcset="assets/logo-light.svg">
|
|
5
|
+
<img src="assets/logo-light.svg" alt="KodaX" width="640">
|
|
6
|
+
</picture>
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<b>源代码可用的 AI Coding Agent,跑你能拿到的任何 LLM。</b><br>
|
|
11
|
+
Anthropic · OpenAI · DeepSeek · Kimi · 智谱 · MiniMax · 小米 MiMo · 火山方舟 · Qwen · Gemini · Codex<br>
|
|
12
|
+
REPL · CLI · 库 · 免 Node 单文件二进制
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<p align="center">
|
|
16
|
+
<a href="https://www.npmjs.com/package/@kodax-ai/kodax"><img alt="npm version" src="https://img.shields.io/npm/v/@kodax-ai/kodax?style=flat-square&color=cb3837"></a>
|
|
17
|
+
<a href="LICENSE"><img alt="license" src="https://img.shields.io/badge/license-KAI--FCL_1.0-orange?style=flat-square"></a>
|
|
18
|
+
<a href="https://github.com/icetomoyo/KodaX/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/icetomoyo/KodaX?style=flat-square&logo=github&color=f1c40f"></a>
|
|
19
|
+
<a href="https://github.com/icetomoyo/KodaX/actions"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/icetomoyo/KodaX/release.yml?style=flat-square&label=release"></a>
|
|
20
|
+
<img alt="providers" src="https://img.shields.io/badge/LLMs-16_aliases_+_custom-2ecc71?style=flat-square">
|
|
21
|
+
</p>
|
|
22
|
+
|
|
23
|
+
<p align="center">
|
|
24
|
+
<a href="#30-秒上手">安装</a> ·
|
|
25
|
+
<a href="#四种使用形态">使用形态</a> ·
|
|
26
|
+
<a href="#为什么用-kodax">为什么用</a> ·
|
|
27
|
+
<a href="CHANGELOG.md">更新日志</a> ·
|
|
28
|
+
<a href="docs/FEATURE_LIST.md">Roadmap</a> ·
|
|
29
|
+
<a href="https://github.com/icetomoyo/KodaX/discussions">讨论</a> ·
|
|
30
|
+
<a href="README.md">English README</a>
|
|
31
|
+
</p>
|
|
32
|
+
|
|
33
|
+
<p align="center">
|
|
34
|
+
<img src="kodax-hd.gif" alt="KodaX 实战演示" width="880">
|
|
35
|
+
</p>
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 30 秒上手
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npm i -g @kodax-ai/kodax
|
|
43
|
+
|
|
44
|
+
# 选一个你有 API key 的 provider(`kodax setup --help` 会列出全部)
|
|
45
|
+
export ZHIPU_API_KEY=... # ANTHROPIC_API_KEY / OPENAI_API_KEY / DEEPSEEK_API_KEY /
|
|
46
|
+
# KIMI_API_KEY / KIMI_CODE_API_KEY / QWEN_API_KEY /
|
|
47
|
+
# QWEN_TOKEN_API_KEY / ZHIPU_CODING_API_KEY /
|
|
48
|
+
# ZAI_CODING_API_KEY / MINIMAX_CODING_API_KEY /
|
|
49
|
+
# MIMO_API_KEY / MIMO_CODING_API_KEY / ARK_CODING_API_KEY
|
|
50
|
+
|
|
51
|
+
kodax
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
就这样。进 REPL,自然语言提问。新机器只要还没有选择 provider,交互式运行
|
|
55
|
+
`kodax` 就会先进入 setup,即使已经存在受支持的 API Key 环境变量。setup 会检查
|
|
56
|
+
core、MCP、Extensions、A2A 的活跃配置和注释模板,不覆盖已有文件,也不会要求输入
|
|
57
|
+
或保存 Key。选择 provider/model 后,按提示设置对应环境变量、重启终端,再运行
|
|
58
|
+
`kodax`。使用 `kodax setup --custom` 配置自定义 provider;使用
|
|
59
|
+
`kodax setup --help` 或 REPL `/setup --help` 查看完整路径、环境变量、命令和快捷键。
|
|
60
|
+
交互式 setup 还会检查一次可选 ASRT sandbox:Windows 可能弹出一次 UAC;
|
|
61
|
+
macOS/Linux 会报告 Seatbelt/bubblewrap 所需依赖。拒绝 UAC 或缺少依赖不会破坏普通
|
|
62
|
+
权限管理,日常启动也不会反复提醒。
|
|
63
|
+
|
|
64
|
+
> **不装 Node 的目标机器**:从 [GitHub Releases](https://github.com/icetomoyo/KodaX/releases) 拿 Bun 编译的单文件二进制(Win / macOS / Linux × x64 + arm64)。详见 [docs/release.md](docs/release.md)。
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 四种使用形态
|
|
69
|
+
|
|
70
|
+
| 形态 | 命令 / 入口 | 什么时候用 |
|
|
71
|
+
|---|---|---|
|
|
72
|
+
| **REPL** | `kodax` | 交互式多轮编码会话,流式 UI + 权限 + slash 命令 |
|
|
73
|
+
| **CLI** | `kodax -p "your task"` | 单次脚本任务、CI、批量处理 |
|
|
74
|
+
| **库** | `import { runKodaX } from '@kodax-ai/kodax'` | 嵌入你自己的工具 / agent / 服务 |
|
|
75
|
+
| **单文件二进制** | `./kodax` | 分发到没装 Node 的机器 |
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Runtime SDK 与共享 daemon
|
|
80
|
+
|
|
81
|
+
`@kodax-ai/kodax/runtime` 支持 inline、Worker 和本机共享 daemon。FEATURE_269
|
|
82
|
+
让 CLI、Space、IDE 与其他本地 SDK 客户端可以原子加入同一个 Coder
|
|
83
|
+
session/run,共享 transcript、Todo、tool、AskUser、permission、队列与唯一终态。
|
|
84
|
+
daemon mutation 使用持久 operation identity 和 revision CAS;崩溃后不会盲目重放
|
|
85
|
+
可能已有副作用的 provider、run 或 Host Tool 调用。
|
|
86
|
+
|
|
87
|
+
Space 的 provider credential 仍由 OS keychain 持有,只通过 run/provider-scoped
|
|
88
|
+
broker 使用;Space Artifact/Office/Control 只通过显式绑定到该 run 的 Host Tool
|
|
89
|
+
lease 暴露。CLI run 不会因为 Space 后来加入而继承这些能力。Partner 继续使用独立
|
|
90
|
+
data/session root 下的 inline Runtime,不参与 Coder owner fence。capability 缺失时必须
|
|
91
|
+
fail closed,不能静默退回 inline Coder。完整接入说明见
|
|
92
|
+
[SDK Embedder Guide §23](docs/SDK_EMBEDDER_GUIDE.md#23-shared-coder-daemon-for-space-and-ide-hosts-feature_269-v0769)。
|
|
93
|
+
|
|
94
|
+
**v0.7.71 Electron 打包修复**:packaged/asar Electron 宿主可以直接自动启动
|
|
95
|
+
daemon,不会再次打开 GUI。`ELECTRON_RUN_AS_NODE` 只存在于子进程启动边界,
|
|
96
|
+
在 daemon 与普通用户子进程代码加载前即被移除。该路径要求 Electron 默认开启的
|
|
97
|
+
`RunAsNode` fuse;主动关闭该 fuse 的宿主必须通过普通 Node/KodaX CLI 启动 daemon,
|
|
98
|
+
再使用 attach-only 模式连接。SDK 的 `homeDir` 是拥有 `.kodax` 的 CLI 风格基础目录,
|
|
99
|
+
不是 `.kodax` 目录本身。
|
|
100
|
+
|
|
101
|
+
**v0.7.75 Windows GUI 稳定性候选版**:Runtime Worker 可达的非交互后台子进程
|
|
102
|
+
在 Windows 上统一请求隐藏控制台,覆盖 memory/Git、provider CLI/ACP、LSP、
|
|
103
|
+
clipboard、worktree、review、extension command、checkpoint 与 sandbox 路径;
|
|
104
|
+
显式 editor、terminal 和 PTY 行为保持不变。SDK bundle 增加静态子进程审计,
|
|
105
|
+
packaged Electron 回归连续执行 20 次普通查询并检查控制台可见性。KodaX Space
|
|
106
|
+
产品级验证仍然有价值,但不阻塞 SDK 打包、tag 或 npm 发布。
|
|
107
|
+
|
|
108
|
+
同一候选版还会区分“当前请求完成后的可选后续工作”和“完成当前请求所必需的
|
|
109
|
+
澄清”,只为符合资格的 Sidecar `revise` 发布预算审批状态,并在 embedded 与
|
|
110
|
+
daemon Runtime 边界保留结构化 blocked 原因。
|
|
111
|
+
|
|
105
112
|
**v0.7.76 Kimi Code 模型目录更新**:`kimi-code` 现在默认使用官方
|
|
106
113
|
`k3-256k` Model ID,并直接发送该同名 ID。`kimi-for-coding` 继续作为 K2.7 Code
|
|
107
114
|
可选模型,同时保留 `kimi-for-coding-highspeed` 与 1M `k3` tier。K3 支持
|
|
108
115
|
`low` / `high` / `max` 思考强度,默认 `high`;256K 路由支持图片但不支持视频输入。
|
|
109
116
|
|
|
110
|
-
**v0.7.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
目标机器不装 Node。一份文件随处跑 —— 受管环境、内网、CI runner、断网机器都行。
|
|
142
|
-
</td>
|
|
143
|
-
<td width="33%" align="center" valign="top">
|
|
144
|
-
<h3>🌳 可分叉会话血缘</h3>
|
|
145
|
-
<sub>fork · rewind · 并行编辑</sub>
|
|
146
|
-
<br><br>
|
|
147
|
-
对话历史是 DAG 不是链表。即将发布的 <b>KodaX Space</b> 桌面端基于此。
|
|
148
|
-
</td>
|
|
149
|
-
</tr>
|
|
150
|
-
<tr>
|
|
151
|
-
<td align="center" valign="top">
|
|
152
|
-
<h3>🤖 默认多 agent</h3>
|
|
153
|
-
<sub>V2 Worker 单循环 + Sidecar Verifier + 异步子 agent</sub>
|
|
154
|
-
<br><br>
|
|
155
|
-
<code>spawn_agent</code>、<code>send_message</code>、<code>followup_task</code>、<code>interrupt_agent</code>,多实例自动协调(content-hash safety net)。
|
|
156
|
-
</td>
|
|
157
|
-
<td align="center" valign="top">
|
|
158
|
-
<h3>🧩 Skills + 自构造</h3>
|
|
159
|
-
<sub>Markdown skill,自然语言触发</sub>
|
|
160
|
-
<br><br>
|
|
161
|
-
5 阶自改造阶梯(scaffold → validate → stage → test → activate),由 8 条 admission invariant 守护。
|
|
162
|
-
</td>
|
|
163
|
-
<td align="center" valign="top">
|
|
164
|
-
<h3>🛠 50+ 内置工具</h3>
|
|
165
|
-
<sub>文件 · shell · 搜索 · MCP · ACP</sub>
|
|
166
|
-
<br><br>
|
|
167
|
-
repo intelligence、语义搜索、git worktree、web fetch,统一从干净的 tool definition 接口暴露。
|
|
168
|
-
</td>
|
|
169
|
-
</tr>
|
|
170
|
-
</table>
|
|
117
|
+
**v0.7.77 正式版**:AMA 现在通过现有 Actor 控制面按需组合六种具名问题解决
|
|
118
|
+
模式,不引入固定拓扑或隐藏 Workflow。可选策略元数据会形成有界、仅记录事实的
|
|
119
|
+
`PatternTrace`,现有 Sidecar 仍是唯一的终态答案质量裁决者。治理式记忆可在工具
|
|
120
|
+
失败、验证失败或已提交 compact 之后稀疏触发,在下一次 Action-LLM 请求前注入最多
|
|
121
|
+
三条 prompt-safe、低权威证据;默认路径不增加 selector 模型调用,SDK 宿主可在
|
|
122
|
+
进程内显式注入 `memoryRecallRunner`。公开 `kimi` provider 同时新增 1M
|
|
123
|
+
`kimi-k3` 路由,并继续以 K2.7 Code 为默认。详见
|
|
124
|
+
[v0.7.77 设计](docs/features/v0.7.77.md)与
|
|
125
|
+
[发布检查清单](docs/release.md#v0777-release-ready-candidate-verification)。
|
|
126
|
+
冻结的 F274/F275 付费评测已完成;F274 最终 Layer 2/Layer 3 与 F275 pilot 盲审均
|
|
127
|
+
为 `recommend-ship`,随后形成发布确定性契约的联合 `SHIP` 决策。语义记忆选择仍为
|
|
128
|
+
实验性、宿主显式启用能力;本版本不宣称任务质量、token 或延迟改善。
|
|
129
|
+
|
|
130
|
+
**v0.7.78 证据门禁学习、首次配置与权限/沙盒正式版**:后台学习遵循
|
|
131
|
+
Memory-first;只有重复且独立验证的证据,或带已验证终态证据的显式
|
|
132
|
+
preserve-as-Skill 请求,才能把低风险声明式 Skill 放入不可变、项目级的有界
|
|
133
|
+
canary。自动项目信任需要完成三次精确 revision 使用并取得独立验证成功;每个
|
|
134
|
+
revision 都可在 `/learn` 中查看、禁用、回滚、信任或拒绝。受保护/正式 Skill、
|
|
135
|
+
全局提升和 Extension 编写仍必须由用户显式决定。
|
|
136
|
+
|
|
137
|
+
### 将 learned Skill 提升到用户正式目录
|
|
138
|
+
|
|
139
|
+
自动 canary 激活和用户目录提升不是一回事:
|
|
140
|
+
|
|
141
|
+
- 独立验证成功会把项目 Learned Area 中的 `testing` 变为
|
|
142
|
+
`active_learned`;
|
|
143
|
+
- `/learn promote` 是一次显式所有权转移:它把精确 fingerprint 对应、且已审查的
|
|
144
|
+
`ready` 或 `active_learned` revision 复制到用户正式 Skill 目录,并把生命周期
|
|
145
|
+
改为 `promoted_user`。
|
|
146
|
+
|
|
147
|
+
先检查具体 revision,再按名称、slug 或精确 capability ID 提升:
|
|
171
148
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|---|---|---|---|---|---|---|
|
|
176
|
-
| 源代码许可 | ⚠️ KAI-FCL,非商业 | ❌ source-available | ✅ Apache 2.0 | ✅ Apache 2.0 | ❌ 闭源 | ✅ Apache 2.0 |
|
|
177
|
-
| 免 Node 单文件 | ✅ Bun | ❌ 需 Node | ❌ 需 Python | ✅ Rust | ❌ Electron | ❌ 插件 |
|
|
178
|
-
| 国内 6 家原生<br><sub>(智谱·Kimi·MiniMax·MiMo·方舟·Qwen)</sub> | ✅ 6 家原生 | ❌ | ⚠ 走 LiteLLM | ❌ OpenAI 主线 | ❌ 无 provider 菜单 | ⚠ Kimi/Qwen/DeepSeek |
|
|
179
|
-
| 可分叉会话血缘 | ✅ fork & rewind | ⚠ routines/sessions | ❌ | ❌ | ❌ | ⚠ checkpoints |
|
|
180
|
-
| Multi-agent + MCP + 50+ 工具 | ✅ 三项全有 | ✅ 三项全有 | ⚠ 有 tools, 无 MCP | ✅ 三项全有 | ⚠ Composer + MCP | ✅ 三项全有 |
|
|
181
|
-
|
|
182
|
-
<sub>数据于 2026-05 对照官方公开文档核对([Claude Code](https://github.com/anthropics/claude-code) · [Aider](https://aider.chat/docs/llms.html) · [Codex CLI](https://github.com/openai/codex) · [Cursor](https://cursor.com) · [Cline](https://github.com/cline/cline))。⚠ 表示部分支持 / 需额外配置 / 非 first-class。欢迎 PR 修正。</sub>
|
|
183
|
-
|
|
184
|
-
## 详细配置
|
|
185
|
-
|
|
186
|
-
> 上面的 `npm i -g @kodax-ai/kodax` 一行就够了。下面这一节是给"从源码构建 / 接自定义 provider / 把 KodaX 当库使用"的场景。
|
|
187
|
-
|
|
188
|
-
### 1. 从源码构建
|
|
189
|
-
|
|
190
|
-
```bash
|
|
191
|
-
git clone https://github.com/icetomoyo/KodaX.git
|
|
192
|
-
cd KodaX
|
|
193
|
-
npm install
|
|
194
|
-
npm run build
|
|
195
|
-
npm link
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
构建完成后就可以直接启动:
|
|
199
|
-
|
|
200
|
-
```bash
|
|
201
|
-
kodax
|
|
149
|
+
```text
|
|
150
|
+
/learn show normalize-release-notes
|
|
151
|
+
/learn promote normalize-release-notes --scope user
|
|
202
152
|
```
|
|
203
153
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
154
|
+
`--scope user` 是目前唯一支持的 scope,也可以省略。错误 scope、未知或重复
|
|
155
|
+
option,以及多余参数都会失败且不改变目录。目标位置是所配置 KodaX home 下的
|
|
156
|
+
`skills/<slug>/SKILL.md`,通常为
|
|
157
|
+
`~/.kodax/skills/<slug>/SKILL.md`;不同内容的同名正式 Skill 永远不会被覆盖。
|
|
158
|
+
|
|
159
|
+
专属帮助入口为 `/learn promote --help`、`/learn help promote` 和
|
|
160
|
+
`/help learn promote`。在 Ink Learning Center 中可执行 `/learn`,选择一个
|
|
161
|
+
`active_learned` Skill,再选择 **Promote to user catalog**。
|
|
162
|
+
|
|
163
|
+
首次 setup 会创建并校验 core/MCP/Extensions/A2A 分离配置及带注释模板,不覆盖
|
|
164
|
+
现有配置,也不收集密钥。Auto[LLM] 在 classifier 延迟之前放行可精确建模的普通
|
|
165
|
+
读取及 workspace/temp 变更;classifier 基础设施失败只重试一次,随后按
|
|
166
|
+
Accept-edits 边界降级,绝不切换到 rules。ASRT 是可选执行期 containment,不是
|
|
167
|
+
权限裁决者;`/sandbox` 是显式诊断入口,SDK 宿主也可独立使用 `/sandbox`
|
|
168
|
+
subpath,且不可用时不会静默改为非隔离执行。KodaX 自身的 workspace containment
|
|
169
|
+
会拒绝读取常见的用户主目录凭据路径及完整的已解析 agent home,同时不把普通外部
|
|
170
|
+
读取收窄成 allowlist。详见
|
|
171
|
+
[v0.7.78 设计](docs/features/v0.7.78.md)、
|
|
172
|
+
[发布检查清单](docs/release.md#v0778-release-verification)与
|
|
173
|
+
[SDK 指南第 29–30 节](docs/SDK_EMBEDDER_GUIDE.md#29-evidence-gated-background-skill-learning-feature_263-v0778)。
|
|
174
|
+
|
|
175
|
+
本次发布收口同时保证相邻表面不扭曲意图:Edit/Plan 可加载静态 Skill 指令,但不
|
|
176
|
+
预授权其后续副作用;动态 Skill 命令必须由宿主显式控制 executor;根 AMA 使用受
|
|
177
|
+
治理的 `memory_intent` 生命周期(包括在后续取消前已捕获的显式意图);Workflow
|
|
178
|
+
Actor wait 只有在 workflow 显式设置
|
|
179
|
+
deadline 时才超时;embedded、Worker 与 daemon 的 Runtime Auto v4 均声明
|
|
180
|
+
`fallbackPersistsEngine:false`。Actor owner 还会验证 Runtime identity,而不是只看
|
|
181
|
+
PID,因此 PID 复用不会卡住已崩溃 owner。恢复 Session 选择器也改为显示宿主本地时区。
|
|
182
|
+
|
|
183
|
+
v0.7.77 还增加了由宿主显式配置的 Shell Execution Contract。Runtime Session
|
|
184
|
+
设置或单次 Run 可以选择 `pwsh`、Windows PowerShell、`cmd`、`bash`、`zsh`
|
|
185
|
+
或 Git Bash 的绝对路径;KodaX 会在实际项目 cwd 中解析 shell 环境,再通过同一
|
|
186
|
+
解释器执行命令。环境缓存按 contract 与 cwd 隔离,使用有界 TTL,也可由宿主显式
|
|
187
|
+
刷新。Provider 凭据与执行控制变量会在加载 profile/setup 前以及实际执行前分别
|
|
188
|
+
过滤。没有配置 `shellExecution` 的调用保持原有命令行为。详见
|
|
189
|
+
[SDK Embedder Guide 第 28 节](docs/SDK_EMBEDDER_GUIDE.md#28-host-configurable-shell-execution-contract-v0777)
|
|
190
|
+
与 [Issue 214 回归指南](docs/test-guides/ISSUE_214_v0.7.77_REGRESSION_GUIDE.md)。
|
|
191
|
+
|
|
192
|
+
Kimi Code 请求现在还会携带由 Runtime 逻辑上下文派生的稳定、不透明 Prompt Cache
|
|
193
|
+
affinity key。它会在跨 Run、重试、fallback、恢复与压缩时复用;递归子 Agent 则按
|
|
194
|
+
规范 Agent 路径获得与 root 和临时 transcript Session 隔离的 key。公开 Kimi 与
|
|
195
|
+
官方 OpenAI 使用对应的 `prompt_cache_key`;其他兼容网关保持显式 opt-in,因为
|
|
196
|
+
部分严格端点会拒绝未知字段。该能力提高缓存路由稳定性,但不能绕过 Provider TTL
|
|
197
|
+
或缓存分片。详见
|
|
198
|
+
[Issue 215 回归指南](docs/test-guides/ISSUE_215_v0.7.77_REGRESSION_GUIDE.md)。
|
|
199
|
+
Codex CLI 的缓存读取/写入与 Gemini CLI 的缓存读取现在会原样贯穿 CLI bridge
|
|
200
|
+
和 Runtime diagnostics,不做估算;Provider 明确报告的 `0` 与未报告字段保持
|
|
201
|
+
可区分。详见
|
|
202
|
+
[Issue 216 回归指南](docs/test-guides/ISSUE_216_v0.7.77_REGRESSION_GUIDE.md)。
|
|
203
|
+
CLI bridge 还会让首个原生 CLI turn 以 fresh 模式启动,只恢复 CLI 自己报告的
|
|
204
|
+
原生 session ID;无 conversation ID 的 stateless 调用每次创建独立 ACP Session,
|
|
205
|
+
非零 CLI 退出会显式失败。用户主动取消保持安静,hard/idle timeout 的 Abort 则会
|
|
206
|
+
作为失败进入 Runtime 恢复路径,不再伪装成空成功;已经报告成功但迟迟不退出的
|
|
207
|
+
CLI 也会在配置的 deadline 被终止。详见
|
|
208
|
+
[Issue 217 回归指南](docs/test-guides/ISSUE_217_v0.7.77_REGRESSION_GUIDE.md)。
|
|
207
209
|
|
|
210
|
+
**v0.7.72–v0.7.73 Runtime 权限契约:**Auto Mode 的权限决策由 Runtime Session 持有,
|
|
211
|
+
不再由 UI hook 抢先决定。Runtime 会跨 turn 复用 LLM/rules guardrail,先分类、
|
|
212
|
+
仅在 `escalate` 时创建共享 permission 请求,并持久化显式选择的 engine。
|
|
213
|
+
Session 也可设置 classifier model 和有界 timeout;`auto` 默认使用 LLM
|
|
214
|
+
分类,没有有效 classifier model 时会在调用 provider 或创建审批前返回可恢复配置错误,
|
|
215
|
+
绝不静默退回 rules。v0.7.78 中 classifier 失败会重试一次,再按 Accept-edits
|
|
216
|
+
安全边界降级,绝不把 engine 改为 rules。Runtime 权限请求可给出由 Runtime 生成的精确作用域建议:一次允许、
|
|
217
|
+
本 Session 允许,或(仅安全场景)持久允许;客户端只能回传不透明 suggestion id,不能从
|
|
218
|
+
预览内容自行扩大范围。持久授权由 daemon 持有并通过 revision 管理。没有宿主审批回调时,
|
|
219
|
+
不会向模型暴露 `exit_plan_mode`。完整 SDK 接入见
|
|
220
|
+
[Runtime Auto Mode 指引](docs/SDK_EMBEDDER_GUIDE.md#24-runtime-owned-auto-mode-and-plan-approval-bridges-v072)。
|
|
221
|
+
|
|
222
|
+
**v0.7.74 Auto 切换可靠性:**默认用 `Shift+Tab` 在 `Plan -> Edits -> Auto`
|
|
223
|
+
之间循环,`Shift+Enter` 仍用于换行。进入 Auto 时状态栏会立即显示已解析的
|
|
224
|
+
`Auto[LLM]` 或 `Auto[RULES]`,同一 Session 的 Runtime 设置按键入顺序串行提交,
|
|
225
|
+
快速循环不会让较早的异步结果覆盖最后一次选择。`Auto[RULES]` 是手动选择后的
|
|
226
|
+
合法粘性状态;从 v0.7.78 起它只由显式/持久化选择产生。使用
|
|
227
|
+
`/auto-engine llm` 可显式选择 LLM 分类。
|
|
228
|
+
|
|
229
|
+
## 为什么用 KodaX
|
|
230
|
+
|
|
231
|
+
<table>
|
|
232
|
+
<tr>
|
|
233
|
+
<td width="33%" align="center" valign="top">
|
|
234
|
+
<h3>🇨🇳 6 家国内 LLM 原生</h3>
|
|
235
|
+
<sub>智谱 · Kimi · MiniMax · 小米 MiMo · 火山方舟 · 通义千问</sub>
|
|
236
|
+
<br><br>
|
|
237
|
+
first-class 适配器,跨 provider 在 5-alias canonical panel 做过 <a href="benchmark/EVAL_GUIDELINES.md">prompt-eval 校准</a> —— 不是 OpenAI-compat 转发。
|
|
238
|
+
</td>
|
|
239
|
+
<td width="33%" align="center" valign="top">
|
|
240
|
+
<h3>📦 单文件二进制</h3>
|
|
241
|
+
<sub>Bun --compile · Win / macOS / Linux · x64 + arm64</sub>
|
|
242
|
+
<br><br>
|
|
243
|
+
目标机器不装 Node。一份文件随处跑 —— 受管环境、内网、CI runner、断网机器都行。
|
|
244
|
+
</td>
|
|
245
|
+
<td width="33%" align="center" valign="top">
|
|
246
|
+
<h3>🌳 可分叉会话血缘</h3>
|
|
247
|
+
<sub>fork · rewind · 并行编辑</sub>
|
|
248
|
+
<br><br>
|
|
249
|
+
对话历史是 DAG 不是链表。即将发布的 <b>KodaX Space</b> 桌面端基于此。
|
|
250
|
+
</td>
|
|
251
|
+
</tr>
|
|
252
|
+
<tr>
|
|
253
|
+
<td align="center" valign="top">
|
|
254
|
+
<h3>🤖 默认多 agent</h3>
|
|
255
|
+
<sub>V2 Worker 单循环 + Sidecar Verifier + 异步子 agent</sub>
|
|
256
|
+
<br><br>
|
|
257
|
+
<code>spawn_agent</code>、<code>send_message</code>、<code>followup_task</code>、<code>interrupt_agent</code>,多实例自动协调(content-hash safety net)。
|
|
258
|
+
</td>
|
|
259
|
+
<td align="center" valign="top">
|
|
260
|
+
<h3>🧩 Skills + 自构造</h3>
|
|
261
|
+
<sub>Markdown skill,自然语言触发</sub>
|
|
262
|
+
<br><br>
|
|
263
|
+
5 阶自改造阶梯(scaffold → validate → stage → test → activate),由 8 条 admission invariant 守护。
|
|
264
|
+
</td>
|
|
265
|
+
<td align="center" valign="top">
|
|
266
|
+
<h3>🛠 50+ 内置工具</h3>
|
|
267
|
+
<sub>文件 · shell · 搜索 · MCP · ACP</sub>
|
|
268
|
+
<br><br>
|
|
269
|
+
repo intelligence、语义搜索、git worktree、web fetch,统一从干净的 tool definition 接口暴露。
|
|
270
|
+
</td>
|
|
271
|
+
</tr>
|
|
272
|
+
</table>
|
|
273
|
+
|
|
274
|
+
## 同类产品对比
|
|
275
|
+
|
|
276
|
+
| 能力 | **KodaX** | Claude Code | Aider | Codex CLI | Cursor | Cline |
|
|
277
|
+
|---|---|---|---|---|---|---|
|
|
278
|
+
| 源代码许可 | ⚠️ KAI-FCL,非商业 | ❌ source-available | ✅ Apache 2.0 | ✅ Apache 2.0 | ❌ 闭源 | ✅ Apache 2.0 |
|
|
279
|
+
| 免 Node 单文件 | ✅ Bun | ❌ 需 Node | ❌ 需 Python | ✅ Rust | ❌ Electron | ❌ 插件 |
|
|
280
|
+
| 国内 6 家原生<br><sub>(智谱·Kimi·MiniMax·MiMo·方舟·Qwen)</sub> | ✅ 6 家原生 | ❌ | ⚠ 走 LiteLLM | ❌ OpenAI 主线 | ❌ 无 provider 菜单 | ⚠ Kimi/Qwen/DeepSeek |
|
|
281
|
+
| 可分叉会话血缘 | ✅ fork & rewind | ⚠ routines/sessions | ❌ | ❌ | ❌ | ⚠ checkpoints |
|
|
282
|
+
| Multi-agent + MCP + 50+ 工具 | ✅ 三项全有 | ✅ 三项全有 | ⚠ 有 tools, 无 MCP | ✅ 三项全有 | ⚠ Composer + MCP | ✅ 三项全有 |
|
|
283
|
+
|
|
284
|
+
<sub>数据于 2026-05 对照官方公开文档核对([Claude Code](https://github.com/anthropics/claude-code) · [Aider](https://aider.chat/docs/llms.html) · [Codex CLI](https://github.com/openai/codex) · [Cursor](https://cursor.com) · [Cline](https://github.com/cline/cline))。⚠ 表示部分支持 / 需额外配置 / 非 first-class。欢迎 PR 修正。</sub>
|
|
285
|
+
|
|
286
|
+
## 详细配置
|
|
287
|
+
|
|
288
|
+
> 上面的 `npm i -g @kodax-ai/kodax` 一行就够了。下面这一节是给"从源码构建 / 接自定义 provider / 把 KodaX 当库使用"的场景。
|
|
289
|
+
|
|
290
|
+
### 1. 从源码构建
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
git clone https://github.com/icetomoyo/KodaX.git
|
|
294
|
+
cd KodaX
|
|
295
|
+
npm install
|
|
296
|
+
npm run build
|
|
297
|
+
npm link
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
构建完成后就可以直接启动:
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
kodax
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### 2. 配置模型提供商
|
|
307
|
+
|
|
308
|
+
可以先运行不会收集 Key 的交互配置:
|
|
309
|
+
|
|
208
310
|
```bash
|
|
209
311
|
kodax setup
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
命令会保存 provider/model,告诉你准确的环境变量名,然后退出以便重启终端。
|
|
213
|
-
也可以直接设置 API Key:
|
|
214
|
-
|
|
215
|
-
```bash
|
|
216
|
-
# macOS / Linux
|
|
217
|
-
export ZHIPU_API_KEY=your_api_key
|
|
218
|
-
|
|
219
|
-
# PowerShell
|
|
220
|
-
$env:ZHIPU_API_KEY="your_api_key"
|
|
221
|
-
```
|
|
222
312
|
|
|
223
|
-
|
|
224
|
-
|
|
313
|
+
# 交互配置自定义 OpenAI/Anthropic-compatible provider
|
|
314
|
+
kodax setup --custom
|
|
225
315
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
kodax --provider qwen-token-plan
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
然后在 `~/.kodax/config.json` 里写一个最小配置:
|
|
232
|
-
|
|
233
|
-
```json
|
|
234
|
-
{
|
|
235
|
-
"provider": "zhipu-coding",
|
|
236
|
-
"effort": "auto"
|
|
237
|
-
}
|
|
316
|
+
# 只显示完整指导,不修改文件
|
|
317
|
+
kodax setup --help
|
|
238
318
|
```
|
|
239
319
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
kodax
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
320
|
+
setup 会检查以下活跃文件以及对应的 `*.example.jsonc` 注释模板:
|
|
321
|
+
|
|
322
|
+
- `~/.kodax/config.json` 与 `~/.kodax/config.example.jsonc`
|
|
323
|
+
- `~/.kodax/integrations/mcp.json`
|
|
324
|
+
- `~/.kodax/integrations/extensions.json`
|
|
325
|
+
- `~/.kodax/integrations/a2a.json`
|
|
326
|
+
|
|
327
|
+
活跃 `config.json` 仍是严格 JSON;`config.example.jsonc` 第一行指向全部分离配置,
|
|
328
|
+
并注释说明所有受支持的 core 配置项。setup 不覆盖已有文件;创建空的权威分离配置
|
|
329
|
+
前会先保全可读取的旧 `config.json#mcpServers` / `config.json#extensions`。命令会
|
|
330
|
+
先验证已有活动配置;发现无效文件时会报告并停止,不创建或覆盖任何配置。随后才会
|
|
331
|
+
保存 provider/model,告诉你准确的环境变量名,然后退出以便重启终端。也可以直接设置 API Key:
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
# macOS / Linux
|
|
335
|
+
export ZHIPU_API_KEY=your_api_key
|
|
336
|
+
|
|
337
|
+
# PowerShell
|
|
338
|
+
$env:ZHIPU_API_KEY="your_api_key"
|
|
248
339
|
```
|
|
249
340
|
|
|
250
|
-
|
|
341
|
+
### 2.1 激活可选 sandbox
|
|
251
342
|
|
|
252
|
-
|
|
253
|
-
/help
|
|
254
|
-
/mode
|
|
255
|
-
/agent-mode ama
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
### 4. 作为库使用
|
|
343
|
+
`kodax setup` 与首次安装 setup 会检查 sandbox。也可以显式检查或激活:
|
|
259
344
|
|
|
260
345
|
```bash
|
|
261
|
-
|
|
346
|
+
kodax sandbox doctor
|
|
347
|
+
kodax sandbox setup
|
|
262
348
|
```
|
|
263
349
|
|
|
264
|
-
|
|
265
|
-
|
|
350
|
+
- Windows 使用受限 sandbox 账户和网络策略。普通 Terminal 即可,按提示同意一次
|
|
351
|
+
UAC;不必先以管理员身份启动 Terminal。
|
|
352
|
+
- macOS 使用 Seatbelt/`sandbox-exec`,需要 ripgrep:
|
|
353
|
+
`brew install ripgrep`。
|
|
354
|
+
- Linux 使用 bubblewrap,需要 `bubblewrap`、`socat` 和 `ripgrep`,请根据发行版用
|
|
355
|
+
`apt`、`dnf` 或 `pacman` 安装。
|
|
266
356
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
);
|
|
274
|
-
```
|
|
357
|
+
KodaX 不会自动运行 `sudo` 或系统包管理器。sandbox 未激活时,确定性安全操作与
|
|
358
|
+
Auto[LLM] 的权限体验保持一致,只缺少 OS 级 containment;普通运行不会反复打扰。
|
|
359
|
+
在 REPL 中,`/sandbox` 会刷新 ready 状态与诊断,但不会激活 backend 或请求提权。
|
|
360
|
+
逐命令 sandbox 路由属于内部机制,不显示在普通命令历史中。SDK 嵌入方还可通过
|
|
361
|
+
`@kodax-ai/kodax/sandbox` 在 Auto[LLM] 之外独立使用该能力,
|
|
362
|
+
见 [SDK sandbox 指南](docs/SDK_EMBEDDER_GUIDE.md#30-standalone-sandbox-sdk-v0778)。
|
|
275
363
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
364
|
+
Qwen Token Plan 需要选择 `qwen-token-plan` 并使用单独的凭据;`QWEN_API_KEY`
|
|
365
|
+
不能用于该路由:
|
|
366
|
+
|
|
367
|
+
```bash
|
|
368
|
+
export QWEN_TOKEN_API_KEY=your_api_key
|
|
369
|
+
kodax --provider qwen-token-plan
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
然后在 `~/.kodax/config.json` 里写一个最小配置:
|
|
373
|
+
|
|
374
|
+
```json
|
|
375
|
+
{
|
|
376
|
+
"provider": "zhipu-coding",
|
|
377
|
+
"effort": "auto"
|
|
378
|
+
}
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### 3. 启动 REPL 或执行单次任务
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
# 进入交互式 REPL
|
|
385
|
+
kodax
|
|
386
|
+
|
|
387
|
+
# 单次任务
|
|
388
|
+
kodax "Review this repository and summarize the architecture"
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
进入 REPL 后,你可以直接自然语言提问,也可以使用命令:
|
|
392
|
+
|
|
393
|
+
```text
|
|
394
|
+
/help
|
|
395
|
+
/mode
|
|
396
|
+
/agent-mode ama
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
### 4. 作为库使用
|
|
400
|
+
|
|
401
|
+
```bash
|
|
402
|
+
npm install @kodax-ai/kodax
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
```typescript
|
|
406
|
+
import { runKodaX } from '@kodax-ai/kodax';
|
|
407
|
+
|
|
408
|
+
const result = await runKodaX(
|
|
409
|
+
{
|
|
410
|
+
provider: 'zhipu-coding',
|
|
411
|
+
effort: 'auto',
|
|
412
|
+
},
|
|
413
|
+
'Explain this codebase'
|
|
414
|
+
);
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
#### SDK Subpath 导入(v0.7.39+)
|
|
418
|
+
|
|
419
|
+
如果只想用某个子能力,按 subpath 引入更轻量,bundler 也能更好地 tree-shake:
|
|
420
|
+
|
|
421
|
+
```typescript
|
|
422
|
+
import { Runner } from '@kodax-ai/kodax/agent'; // Agent runtime
|
|
423
|
+
import { getProvider } from '@kodax-ai/kodax/llm'; // LLM 抽象(16 个内置 alias)
|
|
424
|
+
import { runKodaX } from '@kodax-ai/kodax/coding'; // Coding tools + prompts
|
|
425
|
+
import { createImageArtifactFromPath } from '@kodax-ai/kodax/media'; // 输入 artifact helpers
|
|
426
|
+
import { SkillRegistry } from '@kodax-ai/kodax/skills'; // 零依赖 skill loader
|
|
427
|
+
import { loadConfig } from '@kodax-ai/kodax/repl'; // REPL 配置 / session 工具
|
|
428
|
+
import { createMcpManager } from '@kodax-ai/kodax/mcp'; // MCP popout manager(v0.7.42 起)
|
|
288
429
|
import { listSessions } from '@kodax-ai/kodax/session'; // session 历史工具
|
|
289
430
|
import { createKodaXRuntime } from '@kodax-ai/kodax/runtime'; // embedded/Worker/daemon 宿主 API
|
|
431
|
+
import { runKodaXSandboxed } from '@kodax-ai/kodax/sandbox'; // 独立 ASRT 受控执行
|
|
290
432
|
import { createKodaXA2AServer } from '@kodax-ai/kodax/a2a'; // A2A 1.0 双向接入
|
|
291
433
|
import { createMemoryAgent } from '@kodax-ai/kodax/experimental-memory'; // opt-in 实验性记忆 SDK
|
|
292
434
|
```
|
|
293
435
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
完整的宿主集成契约——包括 embedded/Worker/daemon 所有权、外部 Agent 注册与任务控制、session cursor 分页、workflow 模型分层和效率遥测——见 [SDK Embedder Integration Guide](docs/SDK_EMBEDDER_GUIDE.md)。
|
|
297
|
-
|
|
298
|
-
> **SDK 是 ESM-only**。在 CommonJS 上下文(Electron main 进程、传统 Webpack CJS bundle、`require()` 调用方)必须用 `await import('@kodax-ai/kodax/...')` 代替 `require()`。详见 [docs/SDK_EMBEDDER_GUIDE.md §5](docs/SDK_EMBEDDER_GUIDE.md#5-consuming-from-a-commonjs-context-electron-main-cjs-bundles),含 Electron main 完整 recipe + 为什么大多数 subpath 物理上无法做 dual ESM/CJS bundle。
|
|
299
|
-
|
|
300
|
-
### 5. 自定义 Provider(OpenAI / Anthropic 兼容端点)
|
|
301
|
-
|
|
302
|
-
任何 OpenAI 或 Anthropic 协议兼容的 endpoint 都可以通过 `customProviders[]` 接入,CLI 模式写在 `~/.kodax/config.json` 里:
|
|
303
|
-
|
|
304
|
-
```json
|
|
305
|
-
{
|
|
306
|
-
"provider": "my-openai-compatible",
|
|
307
|
-
"customProviders": [
|
|
308
|
-
{
|
|
309
|
-
"name": "my-openai-compatible",
|
|
310
|
-
"protocol": "openai",
|
|
311
|
-
"baseUrl": "https://example.com/v1",
|
|
312
|
-
"apiKeyEnv": "MY_LLM_API_KEY",
|
|
313
|
-
"model": "my-model",
|
|
314
|
-
"userAgentMode": "compat",
|
|
315
|
-
"reasoning": {
|
|
316
|
-
"efforts": ["off", "low", "medium", "high", "max"],
|
|
317
|
-
"default": "high"
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
]
|
|
321
|
-
}
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
`userAgentMode` 默认 `"compat"`(发送 `KodaX` 而非上游 SDK 的 User-Agent);如果你的网关要求原生 SDK header,再切到 `"sdk"`。
|
|
325
|
-
|
|
326
|
-
自定义 reasoning 模型优先使用 v0.7.57 的 `reasoning: { efforts, default }`;无 thinking 能力的模型使用 `"reasoning": "none"`。SDK 宿主的 effort 选择器应从 `reasoningProfile.supportedEfforts` / `defaultEffort` 动态生成,不要假定固定五档。
|
|
327
|
-
|
|
328
|
-
#### OpenAI 兼容推理模型
|
|
329
|
-
|
|
330
|
-
部分 OpenAI-compatible 推理模型要求多轮请求时回放上一轮 assistant 的 `reasoning_content`。DeepSeek V4 thinking mode 是已知必须开启的场景;内置 DeepSeek provider 已经默认开启,但自定义 provider 需要显式配置:
|
|
331
|
-
|
|
332
|
-
```json
|
|
333
|
-
{
|
|
334
|
-
"customProviders": [
|
|
335
|
-
{
|
|
336
|
-
"name": "my-deepseek-v4",
|
|
337
|
-
"protocol": "openai",
|
|
338
|
-
"baseUrl": "https://example.com/v1",
|
|
339
|
-
"apiKeyEnv": "MY_DEEPSEEK_API_KEY",
|
|
340
|
-
"model": "deepseek-v4-flash",
|
|
341
|
-
"reasoningPreset": "deepseek-v4-openai",
|
|
342
|
-
"replayReasoningContent": true
|
|
343
|
-
}
|
|
344
|
-
]
|
|
436
|
+
13 个 SDK 入口(root + 12 subpath)通过 ESM 共享 chunk 复用底层代码 —— 只 import `/agent` 不会把 `/repl` 的 Ink + React 一起拉进来。
|
|
437
|
+
|
|
438
|
+
完整的宿主集成契约——包括 embedded/Worker/daemon 所有权、外部 Agent 注册与任务控制、session cursor 分页、workflow 模型分层和效率遥测——见 [SDK Embedder Integration Guide](docs/SDK_EMBEDDER_GUIDE.md)。
|
|
439
|
+
|
|
440
|
+
> **SDK 是 ESM-only**。在 CommonJS 上下文(Electron main 进程、传统 Webpack CJS bundle、`require()` 调用方)必须用 `await import('@kodax-ai/kodax/...')` 代替 `require()`。详见 [docs/SDK_EMBEDDER_GUIDE.md §5](docs/SDK_EMBEDDER_GUIDE.md#5-consuming-from-a-commonjs-context-electron-main-cjs-bundles),含 Electron main 完整 recipe + 为什么大多数 subpath 物理上无法做 dual ESM/CJS bundle。
|
|
441
|
+
|
|
442
|
+
### 5. 自定义 Provider(OpenAI / Anthropic 兼容端点)
|
|
443
|
+
|
|
444
|
+
任何 OpenAI 或 Anthropic 协议兼容的 endpoint 都可以通过 `customProviders[]` 接入,CLI 模式写在 `~/.kodax/config.json` 里:
|
|
445
|
+
|
|
446
|
+
```json
|
|
447
|
+
{
|
|
448
|
+
"provider": "my-openai-compatible",
|
|
449
|
+
"customProviders": [
|
|
450
|
+
{
|
|
451
|
+
"name": "my-openai-compatible",
|
|
452
|
+
"protocol": "openai",
|
|
453
|
+
"baseUrl": "https://example.com/v1",
|
|
454
|
+
"apiKeyEnv": "MY_LLM_API_KEY",
|
|
455
|
+
"model": "my-model",
|
|
456
|
+
"userAgentMode": "compat",
|
|
457
|
+
"reasoning": {
|
|
458
|
+
"efforts": ["off", "low", "medium", "high", "max"],
|
|
459
|
+
"default": "high"
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
]
|
|
463
|
+
}
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
`userAgentMode` 默认 `"compat"`(发送 `KodaX` 而非上游 SDK 的 User-Agent);如果你的网关要求原生 SDK header,再切到 `"sdk"`。
|
|
467
|
+
|
|
468
|
+
自定义 reasoning 模型优先使用 v0.7.57 的 `reasoning: { efforts, default }`;无 thinking 能力的模型使用 `"reasoning": "none"`。SDK 宿主的 effort 选择器应从 `reasoningProfile.supportedEfforts` / `defaultEffort` 动态生成,不要假定固定五档。
|
|
469
|
+
|
|
470
|
+
#### OpenAI 兼容推理模型
|
|
471
|
+
|
|
472
|
+
部分 OpenAI-compatible 推理模型要求多轮请求时回放上一轮 assistant 的 `reasoning_content`。DeepSeek V4 thinking mode 是已知必须开启的场景;内置 DeepSeek provider 已经默认开启,但自定义 provider 需要显式配置:
|
|
473
|
+
|
|
474
|
+
```json
|
|
475
|
+
{
|
|
476
|
+
"customProviders": [
|
|
477
|
+
{
|
|
478
|
+
"name": "my-deepseek-v4",
|
|
479
|
+
"protocol": "openai",
|
|
480
|
+
"baseUrl": "https://example.com/v1",
|
|
481
|
+
"apiKeyEnv": "MY_DEEPSEEK_API_KEY",
|
|
482
|
+
"model": "deepseek-v4-flash",
|
|
483
|
+
"reasoningPreset": "deepseek-v4-openai",
|
|
484
|
+
"replayReasoningContent": true
|
|
485
|
+
}
|
|
486
|
+
]
|
|
487
|
+
}
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
如果网关同时代理 DeepSeek 和 OpenAI proper,建议用 per-model override,避免把 `reasoning_content` 发给不接受该字段的模型:
|
|
491
|
+
|
|
492
|
+
```json
|
|
493
|
+
{
|
|
494
|
+
"models": [
|
|
495
|
+
{ "id": "deepseek-v4-flash", "replayReasoningContent": true },
|
|
496
|
+
{ "id": "gpt-5", "replayReasoningContent": false }
|
|
497
|
+
]
|
|
345
498
|
}
|
|
346
499
|
```
|
|
347
500
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
{ "id": "deepseek-v4-flash", "replayReasoningContent": true },
|
|
354
|
-
{ "id": "gpt-5", "replayReasoningContent": false }
|
|
355
|
-
]
|
|
356
|
-
}
|
|
357
|
-
```
|
|
501
|
+
如果已确认自定义端点支持缓存 affinity 路由,可以设置
|
|
502
|
+
`"promptCacheAffinity": true`。Anthropic-compatible 请求会把不透明逻辑上下文
|
|
503
|
+
key 写入 `metadata.user_id`,OpenAI-compatible 请求写入 `prompt_cache_key`。
|
|
504
|
+
默认值为 `false`,因为部分严格兼容网关会拒绝未知请求字段;不要只因端点宣称协议
|
|
505
|
+
兼容就开启。
|
|
358
506
|
|
|
359
507
|
Sidecar verifier 的结构化裁决请求会优先使用 provider 级 `tool_choice` 强制工具调用;如果某个兼容端点明确拒绝 `tool_choice` 参数,KodaX 会对该 verifier 请求自动重试一次“不强制但仍带 tools”的兼容模式,并保持 fail-open,不会阻塞主 Worker。
|
|
360
|
-
|
|
361
|
-
调试 Worker 结束后的 verifier 行为时可设置:
|
|
362
|
-
|
|
363
|
-
```bash
|
|
364
|
-
export KODAX_VERIFIER_LOG=1
|
|
365
|
-
export KODAX_VERIFIER_PROVIDER=anthropic
|
|
366
|
-
export KODAX_VERIFIER_MODEL=claude-haiku-4-5-20251001
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
`KODAX_VERIFIER_LOG=1` 等价于在 `~/.kodax/config.json` 写 `"verifierLog": true`,会显示 verifier gate、elapsedMs 和 trace;`KODAX_VERIFIER_PROVIDER` / `KODAX_VERIFIER_MODEL` 需要成对设置,用独立模型执行 verifier;`KODAX_VERIFIER_ALWAYS=1` 仅建议调试和回归测试时使用。
|
|
370
|
-
|
|
371
|
-
SDK / headless 宿主可以通过 `KodaXEvents.onSidecarMessage` 观察 Sidecar
|
|
372
|
-
Verifier 的 `revise` / `blocked` 可执行消息;JSONL 输出使用同形
|
|
373
|
-
`sidecar.message` 事件。`accept` 仍保持静默。
|
|
374
|
-
|
|
375
|
-
#### 给自定义 provider 开图片 / vision 输入(FEATURE_134 v0.7.40)
|
|
376
|
-
|
|
377
|
-
如果你的自定义 provider 后面的模型支持 vision,加 `capabilityProfile.multimodalSupport: "image-input"` 显式开启,KodaX 的 SA-path policy gate 就不会人为拦截多模态请求。内置 vision-capable alias(Anthropic、OpenAI、DeepSeek、Kimi、Qwen、Zhipu、MiniMax、MiMo、Ark,以及通过 CLI `@<path>` file-include 语法传图的 Gemini-CLI)已经默认开了这个 flag。Codex-CLI 和自定义 provider 在底层模型支持图片输入时需要手动 opt-in。
|
|
378
|
-
|
|
379
|
-
```json
|
|
380
|
-
{
|
|
381
|
-
"customProviders": [
|
|
382
|
-
{
|
|
383
|
-
"name": "my-vision-provider",
|
|
384
|
-
"protocol": "openai",
|
|
385
|
-
"baseUrl": "https://example.com/v1",
|
|
386
|
-
"apiKeyEnv": "MY_LLM_API_KEY",
|
|
387
|
-
"model": "my-vision-model",
|
|
388
|
-
"capabilityProfile": {
|
|
389
|
-
"transport": "native-api",
|
|
390
|
-
"conversationSemantics": "full-history",
|
|
391
|
-
"mcpSupport": "none",
|
|
392
|
-
"contextFidelity": "full",
|
|
393
|
-
"toolCallingFidelity": "full",
|
|
394
|
-
"sessionSupport": "full",
|
|
395
|
-
"longRunningSupport": "full",
|
|
396
|
-
"multimodalSupport": "image-input",
|
|
397
|
-
"evidenceSupport": "full"
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
]
|
|
401
|
-
}
|
|
402
|
-
```
|
|
403
|
-
|
|
404
|
-
序列化层(Anthropic-compat 走 `packages/llm/src/providers/anthropic.ts:770`,OpenAI-compat 走 `openai.ts:904`)通过基类继承自动转发 image block。这个 flag 只控制 KodaX 自身是否预先拒绝多模态请求 —— 上游模型到底支不支持 vision 由 provider 自己决定。如果模型实际是 text-only,你会看到真实的上游 API 错误,而不是 KodaX 一侧的 `[Provider Policy] multimodal requests are unsupported` 预拦截。
|
|
405
|
-
|
|
406
|
-
库模式下用 `registerCustomProviders()` 显式注册:
|
|
407
|
-
|
|
408
|
-
```typescript
|
|
409
|
-
import { registerCustomProviders, runKodaX } from '@kodax-ai/kodax';
|
|
410
|
-
|
|
411
|
-
registerCustomProviders([
|
|
412
|
-
{
|
|
413
|
-
name: 'my-openai-compatible',
|
|
414
|
-
protocol: 'openai',
|
|
415
|
-
baseUrl: 'https://example.com/v1',
|
|
416
|
-
apiKeyEnv: 'MY_LLM_API_KEY',
|
|
417
|
-
model: 'my-model',
|
|
418
|
-
userAgentMode: 'compat',
|
|
419
|
-
},
|
|
420
|
-
]);
|
|
421
|
-
|
|
422
|
-
await runKodaX({ provider: 'my-openai-compatible' }, '解释这个仓库');
|
|
423
|
-
```
|
|
424
|
-
|
|
425
|
-
### 6. Runtime 与本机 daemon
|
|
426
|
-
|
|
427
|
-
交互 REPL、位置参数、slash-command 生成的任务和 `kodax -p` 现在都走统一的
|
|
428
|
-
`KodaXRuntime` 入口。默认使用最低延迟的进程内 `embedded`;单一 SDK 宿主需要
|
|
429
|
-
独立 V8 与硬销毁时,可选择 Worker-hosted embedded;需要后台持续运行、断线后
|
|
430
|
-
查询或多个本机客户端共享时,可切到 `daemon`:
|
|
431
|
-
|
|
432
|
-
```ts
|
|
433
|
-
import { createKodaXRuntime } from '@kodax-ai/kodax/runtime';
|
|
434
|
-
|
|
435
|
-
const isolated = await createKodaXRuntime({
|
|
436
|
-
mode: 'embedded',
|
|
437
|
-
isolation: 'worker',
|
|
438
|
-
requirements: { hardDispose: true },
|
|
439
|
-
});
|
|
440
|
-
```
|
|
441
|
-
|
|
442
|
-
inline 形态由调用方私有且开销最低;Worker 形态仍然私有,但可硬销毁;
|
|
443
|
-
daemon 形态使用独立进程并允许多个客户端共享。`runtime.close()` 会关闭
|
|
444
|
-
私有 inline/Worker Runtime,但对 daemon 只断开当前客户端。矛盾的隔离参数
|
|
445
|
-
会直接报错,不会静默降级。Worker 是 V8 故障隔离边界,不是安全沙箱。
|
|
446
|
-
|
|
447
|
-
daemon 按设计会持续驻留。测试若自动启动 daemon,删除临时 home 前还必须执行
|
|
448
|
-
`kodax daemon stop --home <目录> --profile <名称>`(或发送已认证的
|
|
449
|
-
`runtime.shutdown`)。不要按进程名批量结束 Node;应先核验命令行和父进程归属。
|
|
450
|
-
|
|
451
|
-
```bash
|
|
452
|
-
kodax daemon start
|
|
453
|
-
kodax daemon stop --profile default
|
|
454
|
-
kodax --runtime-mode daemon
|
|
455
|
-
kodax -p "检查这个仓库" --runtime-mode daemon
|
|
456
|
-
```
|
|
457
|
-
|
|
458
|
-
持久设置写入 `~/.kodax/config.json`:
|
|
459
|
-
|
|
460
|
-
```json
|
|
461
|
-
{
|
|
462
|
-
"runtimeMode": "daemon"
|
|
463
|
-
}
|
|
464
|
-
```
|
|
465
|
-
|
|
466
|
-
统一优先级是:显式 CLI/SDK 参数 > 环境变量 > `config.json` > 内置默认值。
|
|
467
|
-
`KODAX_RUNTIME_MODE=daemon` 适合临时覆盖。其他成对配置也遵循相同规则,例如
|
|
468
|
-
`provider` ↔ `KODAX_PROVIDER`、`effort` ↔ `KODAX_EFFORT`。JSON 保持 camelCase,
|
|
469
|
-
环境变量保持 `KODAX_UPPER_SNAKE_CASE`,两者按语义一一对应。
|
|
470
|
-
|
|
471
|
-
一个 daemon 可以承载多个 session。不同 session 可以并发运行;同一个 session
|
|
472
|
-
内部仍保持一次只运行一个任务,后续任务按队列执行。多个 `kodax` 进程可以连接
|
|
473
|
-
同一个 daemon,并分别打开或观察不同 session。
|
|
474
|
-
|
|
475
|
-
### 7. 打包成单文件二进制(无需 Node)
|
|
476
|
-
|
|
477
|
-
KodaX 可以用 `bun --compile` 打包成单可执行文件 + 一个 `builtin/` sidecar 目录,目标机器**不需要安装 Node.js 或任何运行时**。
|
|
478
|
-
|
|
479
|
-
支持目标:`win-x64`、`linux-x64`、`linux-arm64`、`darwin-x64`、`darwin-arm64`。Win7 / glibc < 2.27 的发行版 / 龙芯 LoongArch 暂不支持。
|
|
480
|
-
|
|
481
|
-
本地构建:
|
|
482
|
-
|
|
483
|
-
```bash
|
|
484
|
-
# 先在构建机器上装好 Bun(一次性)
|
|
485
|
-
npm i -g bun # 或 scoop / brew / curl,详见 docs/release.md
|
|
486
|
-
|
|
487
|
-
npm run build:binary # 当前平台(最快)
|
|
488
|
-
npm run build:binary:all # 一台机器出全部 5 个目标
|
|
489
|
-
node scripts/build-binary.mjs --target=linux-arm64 # 指定平台
|
|
490
|
-
```
|
|
491
|
-
|
|
492
|
-
产物在 `dist/binary/<target>/`:
|
|
493
|
-
|
|
494
|
-
```
|
|
495
|
-
dist/binary/linux-x64/
|
|
496
|
-
├── kodax # ~60 MB Bun 编译的二进制
|
|
497
|
-
├── builtin/ # 内置 skills sidecar
|
|
498
|
-
├── provider-capabilities.json
|
|
499
|
-
├── semantic-worker.js # Repo intelligence Worker
|
|
500
|
-
├── runtime-worker.js # SDK Runtime Worker
|
|
501
|
-
└── constructed-handler-worker.js # Constructed tool Worker
|
|
502
|
-
```
|
|
503
|
-
|
|
504
|
-
冒烟验证:`dist/binary/<host>/kodax --version`。
|
|
505
|
-
|
|
506
|
-
**自动发布**:推送 `v*` git tag 会触发 `.github/workflows/release.yml`,在原生 runner 上构建全部 5 个目标、跑冒烟测试,然后自动创建 GitHub Release 并上传 archives + SHA256SUMS。也可以从 Actions UI 用 `workflow_dispatch` 不打 tag 跑流水线测试。
|
|
507
|
-
|
|
508
|
-
详细的构建参数、archive 结构、`KODAX_BUNDLED` / `KODAX_VERSION` build-time defines、故障排查,参见 [docs/release.md](docs/release.md)。
|
|
509
|
-
|
|
510
|
-
## 内置 Provider 列表
|
|
511
|
-
|
|
512
|
-
| Provider | 环境变量 | Reasoning | 默认 Model |
|
|
513
|
-
|----------|----------|-----------|-----------|
|
|
514
|
-
| anthropic | `ANTHROPIC_API_KEY` | Native | claude-sonnet-4-6(可 `/model` 切换 `claude-opus-4-6` / `claude-haiku-4-5`) |
|
|
515
|
-
| openai | `OPENAI_API_KEY` | Native | gpt-5.3-codex(可 `/model` 切换 `gpt-5.4` / `gpt-5.3-codex-spark`) |
|
|
516
|
-
| kimi | `KIMI_API_KEY` | Native | kimi-k2.7-code(262,144 token;可 `/model` 切换 `kimi-k2.7-code-highspeed` / `kimi-k2.6` / `kimi-k2.5`) |
|
|
517
|
-
| kimi-code | `KIMI_CODE_API_KEY` | Native | k3-256k(Moderato+,256K,直接请求同名上游模型;可 `/model` 切换 `k3`〔Allegretto+,1M〕/ `kimi-for-coding`〔K2.7 Code〕/ `kimi-for-coding-highspeed`) |
|
|
518
|
-
| qwen | `QWEN_API_KEY` | Native | qwen3.5-plus |
|
|
519
|
-
| qwen-token-plan | `QWEN_TOKEN_API_KEY` | Native | qwen3.8-max-preview(Anthropic 协议;可 `/model` 切换 `qwen3.7-max` / `qwen3.7-plus` / `qwen3.6-flash` / `glm-5.2` / `deepseek-v4-pro`;均为 1M ctx;Qwen 3.8 / 3.7 Plus / 3.6 Flash 支持图片理解) |
|
|
520
|
-
| zhipu | `ZHIPU_API_KEY` | Native | glm-5(可 `/model` 切换 `glm-5.2` 1M ctx / `glm-5.1` / `glm-5-turbo`) |
|
|
521
|
-
| zhipu-coding | `ZHIPU_CODING_API_KEY` | Native | glm-5.2(1M ctx;仍可通过 `/model` 显式选择兼容模型 `glm-5.1` / `glm-5-turbo`) |
|
|
522
|
-
| zai-coding | `ZAI_CODING_API_KEY` | Native | glm-5.2(GLM Coding Plan 海外站,通过 `api.z.ai` 接入,Anthropic 协议 — 模型清单和 `zhipu-coding` 完全一致) |
|
|
523
|
-
| minimax-coding | `MINIMAX_CODING_API_KEY` | Native | MiniMax-M3(Frontier Coding,原生多模态 + 1M ctx;仍可通过 `/model` 显式选择兼容模型 `MiniMax-M2.7` / `MiniMax-M2.7-highspeed`) |
|
|
524
|
-
| mimo | `MIMO_API_KEY` | Native | mimo-v2.5-pro(小米 MiMo 按量计费,Anthropic 协议) |
|
|
525
|
-
| mimo-coding | `MIMO_CODING_API_KEY` | Native | mimo-v2.5-pro(小米 MiMo Token Plan,Anthropic 协议) |
|
|
526
|
-
| ark-coding | `ARK_CODING_API_KEY` | Native | glm-5.2(火山方舟 Coding Plan — GLM-5.2(别名 `glm-latest`) · Kimi K2.7 Code / K2.6 · MiniMax M3 / M2.7 · DeepSeek V4 Pro / V4 Flash · Doubao Seed 2.0 Code / Pro / Lite · Doubao Seed Code) |
|
|
527
|
-
| deepseek | `DEEPSEEK_API_KEY` | Native | deepseek-v4-flash(可 `/model` 切换 `deepseek-v4-pro`) |
|
|
528
|
-
| gemini-cli |
|
|
529
|
-
| codex-cli |
|
|
530
|
-
|
|
531
|
-
> 不在表里的端点:用上面"自定义 Provider"那一节加进来即可。
|
|
532
|
-
|
|
533
|
-
## 内置工具一览
|
|
534
|
-
|
|
535
|
-
KodaX 有 50+ 个内置工具,按类别分组如下(实际暴露给 LLM 是一张扁平表)。
|
|
536
|
-
|
|
537
|
-
**文件操作**
|
|
538
|
-
|
|
539
|
-
| 工具 | 说明 |
|
|
540
|
-
|------|------|
|
|
541
|
-
| `read` | 读取文件(支持 offset / limit) |
|
|
542
|
-
| `write` | 创建新文件或完整重写 |
|
|
543
|
-
| `edit` | 精确字符串替换(支持 `replace_all`) |
|
|
544
|
-
| `multi_edit` | 对同一文件做一批独立 edit,整批原子提交 |
|
|
545
|
-
| `insert_after_anchor` | 在唯一 anchor 后插入内容,避免整文件重写 |
|
|
546
|
-
| `undo` | 撤销最近一次文件修改 |
|
|
547
|
-
|
|
548
|
-
**Shell 与搜索**
|
|
549
|
-
|
|
550
|
-
| 工具 | 说明 |
|
|
551
|
-
|------|------|
|
|
552
|
-
| `bash` | 执行 shell 命令(支持后台、输出截断) |
|
|
553
|
-
| `glob` / `grep` | 文件名匹配 / 正则内容搜索 |
|
|
554
|
-
| `code_search` | 代码搜索,比裸 grep 噪音更低 |
|
|
555
|
-
| `semantic_lookup` | 借助 repo intelligence 的符号 / 模块 / 流程感知查找 |
|
|
556
|
-
| `web_search` / `web_fetch` | 联网搜索 / 抓取,自带 trust + 时效信号 |
|
|
557
|
-
|
|
558
|
-
**Repo Intelligence working tools**
|
|
559
|
-
|
|
560
|
-
| 工具 | 说明 |
|
|
561
|
-
|------|------|
|
|
562
|
-
| `repo_overview` | 仓库结构、关键区域、入口提示、intelligence 快照 |
|
|
563
|
-
| `changed_scope` | 当前 diff 涉及的文件 / 区域 / 类别 |
|
|
564
|
-
| `changed_diff` / `changed_diff_bundle` | 单文件 / 多文件分页 diff |
|
|
565
|
-
| `module_context` | 模块 capsule(依赖、入口、符号、测试、文档) |
|
|
566
|
-
| `symbol_context` | 定义 + 可能的 caller/callee + 备选 |
|
|
567
|
-
| `process_context` | 入口的近似静态执行/流程 capsule |
|
|
568
|
-
| `impact_estimate` | 符号 / 路径 / 模块的影响面估算 |
|
|
569
|
-
|
|
570
|
-
**MCP 能力**(配置了 MCP server 时可用)
|
|
571
|
-
|
|
572
|
-
| 工具 | 说明 |
|
|
573
|
-
|------|------|
|
|
574
|
-
| `mcp_search` / `mcp_describe` / `mcp_call` | 通过共享 capability runtime 发现并调用 MCP 工具 |
|
|
575
|
-
| `mcp_read_resource` / `mcp_get_prompt` | 读取 MCP 资源、获取 MCP prompt |
|
|
576
|
-
|
|
577
|
-
**Git Worktree**
|
|
578
|
-
|
|
579
|
-
| 工具 | 说明 |
|
|
580
|
-
|------|------|
|
|
581
|
-
| `worktree_create` | 在隔离分支上新建 worktree,让 agent 安全工作 |
|
|
582
|
-
| `worktree_remove` | 移除 worktree(自带安全检查) |
|
|
583
|
-
|
|
584
|
-
**Agent 控制 / 交互**
|
|
585
|
-
|
|
586
|
-
| 工具 | 说明 |
|
|
587
|
-
|------|------|
|
|
588
|
-
| `spawn_agent` | 创建命名子 Actor,并在继承权限、会话并发和根工作预算约束下启动首个 Turn。 |
|
|
589
|
-
| `send_message` | 向 Actor 的持久 mailbox 提交有界信息,不启动新 Turn。 |
|
|
590
|
-
| `followup_task` | 在安全边界加入运行中的 Actor,或为 idle Actor 原子启动新 Turn。 |
|
|
591
|
-
| `wait_agent` | 等待当前作用域的 mailbox / 用户输入 / 中断 / 超时,只返回唤醒确认,Actor progress 不会唤醒模型。 |
|
|
592
|
-
| `interrupt_agent` | 请求中断 active Turn,同时保留 Actor 身份。 |
|
|
593
|
-
| `list_agents` | 查看调用方有权访问的 Actor 子树与 Turn 状态。 |
|
|
594
|
-
| `agent_output` | 读取有权限的 Actor/Turn 有界持久输出。 |
|
|
595
|
-
| `ask_user_question` | 向用户发起单选 / 多选 / 自由文本提问 |
|
|
596
|
-
| `exit_plan_mode` | 仅在当前 REPL/宿主提供审批回调时提交最终方案 |
|
|
597
|
-
| `emit_managed_protocol` | managed-task 协议侧信道(verdict role payload)。v0.7.42 FEATURE_184 起默认走 V2 Worker 单循环 + Sidecar Verifier;v0.7.43 FEATURE_193 退役 V1 chain。 |
|
|
598
|
-
|
|
599
|
-
## Repo Intelligence(内置 full/light 引擎)
|
|
600
|
-
|
|
601
|
-
KodaX 内置 repo intelligence(`repo_overview` / `module_context` / `symbol_context` / `process_context` / `impact_estimate` 等),让 coding agent 不靠零散 grep/glob 就能理解大型仓库。
|
|
602
|
-
|
|
603
|
-
REPL 中使用 `/repo-intel status` 查看当前引擎状态。旧的独立 `repointel` host skill 已移除;repo intelligence 已内置于 KodaX,无需任何外部安装。
|
|
604
|
-
|
|
605
|
-
```bash
|
|
606
|
-
# 选一个运行模式(auto | full | light | off)
|
|
607
|
-
kodax --repo-intelligence full --repo-intelligence-trace
|
|
608
|
-
```
|
|
609
|
-
|
|
610
|
-
## 仓库结构
|
|
611
|
-
|
|
612
|
-
KodaX 是基于 npm workspaces 的 TypeScript monorepo,**源码层 4 个 workspace 包**(FEATURE_194 v0.7.43 包合并 — 9 → 4,ADR-036),npm 上以单 bundle 包 `@kodax-ai/kodax` 发布 +
|
|
613
|
-
|
|
614
|
-
| Workspace 包 | 作用 | 主要依赖 |
|
|
615
|
-
|----|------|---------|
|
|
616
|
-
| `@kodax-ai/llm` | LLM 抽象层(16 个内置 provider alias + 自定义 provider 注册),可独立使用 | `@anthropic-ai/sdk`, `openai` |
|
|
617
|
-
| `@kodax-ai/agent` | 通用 Agent 框架 —— Runner / runFanOut / runWithIdleYield / AgentActorController / AgentTurnScheduler + media/input artifacts + 会话管理 + tokenization + 面向自定义 loop 的可插拔 compaction primitive(不关闭 KodaX coding runtime 的始终开启策略)+ **inline 后**:session-lineage 子树 + capabilities (mcp + skills + builtin) + tracing(subpaths: `/media`、`/session-lineage`、`/capabilities/mcp`、`/capabilities/skills`、`/tracing`) | `@kodax-ai/llm`, `js-tiktoken`, `fflate`, `jimp`, `yaml` |
|
|
618
|
-
| `@kodax-ai/coding` | Coding Agent:50+ 工具(含 canonical Actor 协作工具)、role prompts、agent loop、auto-continue + repo-intelligence protocol(v0.7.43 inline) | `@kodax-ai/llm`, `@kodax-ai/agent` |
|
|
619
|
-
| `@kodax-ai/repl` | 完整交互式终端 UI(Ink / React、权限模式、命令系统、流式渲染) | `@kodax-ai/coding`, `ink`, `react` |
|
|
620
|
-
|
|
621
|
-
根目录 `src/kodax_cli.ts` 是 CLI 入口;`src/sdk-{agent,llm,coding,media,repl,skills,mcp,session,runtime,a2a,experimental-memory}.ts` 是 SDK subpath 入口;构建产物在 `dist/`,单文件二进制在 `dist/binary/<target>/`。
|
|
622
|
-
|
|
623
|
-
### 源码层 vs npm 发布层
|
|
624
|
-
|
|
625
|
-
KodaX 有两层结构,SDK 用户需要分开理解:
|
|
626
|
-
|
|
627
|
-
- **源码层**:上面 4 个 workspace 包(开发者读代码时看到的物理结构)。
|
|
628
|
-
- **npm 发布层**:单个 bundled 包 `@kodax-ai/kodax`,对外暴露
|
|
629
|
-
- **完整包 subpath**(`/agent`、`/llm`、`/coding`、`/repl`)—— 每个 1:1 对应一个源码包,暴露完整公开 API。
|
|
630
|
-
-
|
|
631
|
-
|
|
632
|
-
| 源码包 | npm subpath | 类型 | 内容 | 典型消费者 |
|
|
633
|
-
|---|---|---|---|---|
|
|
634
|
-
| `packages/llm` | `@kodax-ai/kodax/llm` | 完整包 |
|
|
635
|
-
| `packages/agent` | `@kodax-ai/kodax/agent` | 完整包 | Runner / fan-out / 外部 Agent plane / session-lineage / capabilities / tracing (331 exports) | 自定义 agent 框架 |
|
|
636
|
-
| `packages/agent` | `@kodax-ai/kodax/skills` | **窄子集** | 仅 Skills 系统 —— `SkillRegistry` / `loadFullSkill` / `expandSkillForLLM` 等 (26 exports = v0.7.43 之前 `@kodax-ai/skills` 完整 API) | Skill 加载器、IDE 插件 |
|
|
637
|
-
| `packages/agent` | `@kodax-ai/kodax/mcp` | **窄子集** | 仅 MCP —— `McpCapabilityProvider` / `createMcpTransport` / `searchMcpCatalog` 等 (23 exports) | MCP server 宿主 |
|
|
638
|
-
| `packages/agent` | `@kodax-ai/kodax/media` | **窄子集** | 结构化图片/文件/视频输入 artifact helpers (22 exports) | 桌面宿主、多模态客户端 |
|
|
639
|
-
| `packages/agent` | `@kodax-ai/kodax/experimental-memory` | **实验性子集** | F228-backed `MemoryAgent` / `MemorySession` scope、recall、query、observation、outcome 契约 | 显式评估 FEATURE_260 的 SDK 宿主 |
|
|
640
|
-
| `packages/coding` | `@kodax-ai/kodax/coding` | 完整包 | Coding agent + 50+ 工具 + repo-intelligence (505 exports) | 构建 Claude Code 形态产品 |
|
|
641
|
-
| `packages/repl` | `@kodax-ai/kodax/repl` | 完整包 | Ink TUI + 权限模式 + 命令系统 (217 exports) | 终端 UI 消费者 |
|
|
508
|
+
|
|
509
|
+
调试 Worker 结束后的 verifier 行为时可设置:
|
|
510
|
+
|
|
511
|
+
```bash
|
|
512
|
+
export KODAX_VERIFIER_LOG=1
|
|
513
|
+
export KODAX_VERIFIER_PROVIDER=anthropic
|
|
514
|
+
export KODAX_VERIFIER_MODEL=claude-haiku-4-5-20251001
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
`KODAX_VERIFIER_LOG=1` 等价于在 `~/.kodax/config.json` 写 `"verifierLog": true`,会显示 verifier gate、elapsedMs 和 trace;`KODAX_VERIFIER_PROVIDER` / `KODAX_VERIFIER_MODEL` 需要成对设置,用独立模型执行 verifier;`KODAX_VERIFIER_ALWAYS=1` 仅建议调试和回归测试时使用。
|
|
518
|
+
|
|
519
|
+
SDK / headless 宿主可以通过 `KodaXEvents.onSidecarMessage` 观察 Sidecar
|
|
520
|
+
Verifier 的 `revise` / `blocked` 可执行消息;JSONL 输出使用同形
|
|
521
|
+
`sidecar.message` 事件。`accept` 仍保持静默。
|
|
522
|
+
|
|
523
|
+
#### 给自定义 provider 开图片 / vision 输入(FEATURE_134 v0.7.40)
|
|
524
|
+
|
|
525
|
+
如果你的自定义 provider 后面的模型支持 vision,加 `capabilityProfile.multimodalSupport: "image-input"` 显式开启,KodaX 的 SA-path policy gate 就不会人为拦截多模态请求。内置 vision-capable alias(Anthropic、OpenAI、DeepSeek、Kimi、Qwen、Zhipu、MiniMax、MiMo、Ark,以及通过 CLI `@<path>` file-include 语法传图的 Gemini-CLI)已经默认开了这个 flag。Codex-CLI 和自定义 provider 在底层模型支持图片输入时需要手动 opt-in。
|
|
526
|
+
|
|
527
|
+
```json
|
|
528
|
+
{
|
|
529
|
+
"customProviders": [
|
|
530
|
+
{
|
|
531
|
+
"name": "my-vision-provider",
|
|
532
|
+
"protocol": "openai",
|
|
533
|
+
"baseUrl": "https://example.com/v1",
|
|
534
|
+
"apiKeyEnv": "MY_LLM_API_KEY",
|
|
535
|
+
"model": "my-vision-model",
|
|
536
|
+
"capabilityProfile": {
|
|
537
|
+
"transport": "native-api",
|
|
538
|
+
"conversationSemantics": "full-history",
|
|
539
|
+
"mcpSupport": "none",
|
|
540
|
+
"contextFidelity": "full",
|
|
541
|
+
"toolCallingFidelity": "full",
|
|
542
|
+
"sessionSupport": "full",
|
|
543
|
+
"longRunningSupport": "full",
|
|
544
|
+
"multimodalSupport": "image-input",
|
|
545
|
+
"evidenceSupport": "full"
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
]
|
|
549
|
+
}
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
序列化层(Anthropic-compat 走 `packages/llm/src/providers/anthropic.ts:770`,OpenAI-compat 走 `openai.ts:904`)通过基类继承自动转发 image block。这个 flag 只控制 KodaX 自身是否预先拒绝多模态请求 —— 上游模型到底支不支持 vision 由 provider 自己决定。如果模型实际是 text-only,你会看到真实的上游 API 错误,而不是 KodaX 一侧的 `[Provider Policy] multimodal requests are unsupported` 预拦截。
|
|
553
|
+
|
|
554
|
+
库模式下用 `registerCustomProviders()` 显式注册:
|
|
555
|
+
|
|
556
|
+
```typescript
|
|
557
|
+
import { registerCustomProviders, runKodaX } from '@kodax-ai/kodax';
|
|
558
|
+
|
|
559
|
+
registerCustomProviders([
|
|
560
|
+
{
|
|
561
|
+
name: 'my-openai-compatible',
|
|
562
|
+
protocol: 'openai',
|
|
563
|
+
baseUrl: 'https://example.com/v1',
|
|
564
|
+
apiKeyEnv: 'MY_LLM_API_KEY',
|
|
565
|
+
model: 'my-model',
|
|
566
|
+
userAgentMode: 'compat',
|
|
567
|
+
},
|
|
568
|
+
]);
|
|
569
|
+
|
|
570
|
+
await runKodaX({ provider: 'my-openai-compatible' }, '解释这个仓库');
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
### 6. Runtime 与本机 daemon
|
|
574
|
+
|
|
575
|
+
交互 REPL、位置参数、slash-command 生成的任务和 `kodax -p` 现在都走统一的
|
|
576
|
+
`KodaXRuntime` 入口。默认使用最低延迟的进程内 `embedded`;单一 SDK 宿主需要
|
|
577
|
+
独立 V8 与硬销毁时,可选择 Worker-hosted embedded;需要后台持续运行、断线后
|
|
578
|
+
查询或多个本机客户端共享时,可切到 `daemon`:
|
|
579
|
+
|
|
580
|
+
```ts
|
|
581
|
+
import { createKodaXRuntime } from '@kodax-ai/kodax/runtime';
|
|
582
|
+
|
|
583
|
+
const isolated = await createKodaXRuntime({
|
|
584
|
+
mode: 'embedded',
|
|
585
|
+
isolation: 'worker',
|
|
586
|
+
requirements: { hardDispose: true },
|
|
587
|
+
});
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
inline 形态由调用方私有且开销最低;Worker 形态仍然私有,但可硬销毁;
|
|
591
|
+
daemon 形态使用独立进程并允许多个客户端共享。`runtime.close()` 会关闭
|
|
592
|
+
私有 inline/Worker Runtime,但对 daemon 只断开当前客户端。矛盾的隔离参数
|
|
593
|
+
会直接报错,不会静默降级。Worker 是 V8 故障隔离边界,不是安全沙箱。
|
|
594
|
+
|
|
595
|
+
daemon 按设计会持续驻留。测试若自动启动 daemon,删除临时 home 前还必须执行
|
|
596
|
+
`kodax daemon stop --home <目录> --profile <名称>`(或发送已认证的
|
|
597
|
+
`runtime.shutdown`)。不要按进程名批量结束 Node;应先核验命令行和父进程归属。
|
|
598
|
+
|
|
599
|
+
```bash
|
|
600
|
+
kodax daemon start
|
|
601
|
+
kodax daemon stop --profile default
|
|
602
|
+
kodax --runtime-mode daemon
|
|
603
|
+
kodax -p "检查这个仓库" --runtime-mode daemon
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
持久设置写入 `~/.kodax/config.json`:
|
|
607
|
+
|
|
608
|
+
```json
|
|
609
|
+
{
|
|
610
|
+
"runtimeMode": "daemon"
|
|
611
|
+
}
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
统一优先级是:显式 CLI/SDK 参数 > 环境变量 > `config.json` > 内置默认值。
|
|
615
|
+
`KODAX_RUNTIME_MODE=daemon` 适合临时覆盖。其他成对配置也遵循相同规则,例如
|
|
616
|
+
`provider` ↔ `KODAX_PROVIDER`、`effort` ↔ `KODAX_EFFORT`。JSON 保持 camelCase,
|
|
617
|
+
环境变量保持 `KODAX_UPPER_SNAKE_CASE`,两者按语义一一对应。
|
|
618
|
+
|
|
619
|
+
一个 daemon 可以承载多个 session。不同 session 可以并发运行;同一个 session
|
|
620
|
+
内部仍保持一次只运行一个任务,后续任务按队列执行。多个 `kodax` 进程可以连接
|
|
621
|
+
同一个 daemon,并分别打开或观察不同 session。
|
|
622
|
+
|
|
623
|
+
### 7. 打包成单文件二进制(无需 Node)
|
|
624
|
+
|
|
625
|
+
KodaX 可以用 `bun --compile` 打包成单可执行文件 + 一个 `builtin/` sidecar 目录,目标机器**不需要安装 Node.js 或任何运行时**。
|
|
626
|
+
|
|
627
|
+
支持目标:`win-x64`、`linux-x64`、`linux-arm64`、`darwin-x64`、`darwin-arm64`。Win7 / glibc < 2.27 的发行版 / 龙芯 LoongArch 暂不支持。
|
|
628
|
+
|
|
629
|
+
本地构建:
|
|
630
|
+
|
|
631
|
+
```bash
|
|
632
|
+
# 先在构建机器上装好 Bun(一次性)
|
|
633
|
+
npm i -g bun # 或 scoop / brew / curl,详见 docs/release.md
|
|
634
|
+
|
|
635
|
+
npm run build:binary # 当前平台(最快)
|
|
636
|
+
npm run build:binary:all # 一台机器出全部 5 个目标
|
|
637
|
+
node scripts/build-binary.mjs --target=linux-arm64 # 指定平台
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
产物在 `dist/binary/<target>/`:
|
|
641
|
+
|
|
642
|
+
```
|
|
643
|
+
dist/binary/linux-x64/
|
|
644
|
+
├── kodax # ~60 MB Bun 编译的二进制
|
|
645
|
+
├── builtin/ # 内置 skills sidecar
|
|
646
|
+
├── provider-capabilities.json
|
|
647
|
+
├── semantic-worker.js # Repo intelligence Worker
|
|
648
|
+
├── runtime-worker.js # SDK Runtime Worker
|
|
649
|
+
└── constructed-handler-worker.js # Constructed tool Worker
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
冒烟验证:`dist/binary/<host>/kodax --version`。
|
|
653
|
+
|
|
654
|
+
**自动发布**:推送 `v*` git tag 会触发 `.github/workflows/release.yml`,在原生 runner 上构建全部 5 个目标、跑冒烟测试,然后自动创建 GitHub Release 并上传 archives + SHA256SUMS。也可以从 Actions UI 用 `workflow_dispatch` 不打 tag 跑流水线测试。
|
|
655
|
+
|
|
656
|
+
详细的构建参数、archive 结构、`KODAX_BUNDLED` / `KODAX_VERSION` build-time defines、故障排查,参见 [docs/release.md](docs/release.md)。
|
|
657
|
+
|
|
658
|
+
## 内置 Provider 列表
|
|
659
|
+
|
|
660
|
+
| Provider | 环境变量 | Reasoning | 默认 Model |
|
|
661
|
+
|----------|----------|-----------|-----------|
|
|
662
|
+
| anthropic | `ANTHROPIC_API_KEY` | Native | claude-sonnet-4-6(可 `/model` 切换 `claude-opus-4-6` / `claude-haiku-4-5`) |
|
|
663
|
+
| openai | `OPENAI_API_KEY` | Native | gpt-5.3-codex(可 `/model` 切换 `gpt-5.4` / `gpt-5.3-codex-spark`) |
|
|
664
|
+
| kimi | `KIMI_API_KEY` | Native | kimi-k2.7-code(262,144 token;可 `/model` 切换 `kimi-k3`〔1M〕/ `kimi-k2.7-code-highspeed` / `kimi-k2.6` / `kimi-k2.5`) |
|
|
665
|
+
| kimi-code | `KIMI_CODE_API_KEY` | Native | k3-256k(Moderato+,256K,直接请求同名上游模型;可 `/model` 切换 `k3`〔Allegretto+,1M〕/ `kimi-for-coding`〔K2.7 Code〕/ `kimi-for-coding-highspeed`) |
|
|
666
|
+
| qwen | `QWEN_API_KEY` | Native | qwen3.5-plus |
|
|
667
|
+
| qwen-token-plan | `QWEN_TOKEN_API_KEY` | Native | qwen3.8-max-preview(Anthropic 协议;可 `/model` 切换 `qwen3.7-max` / `qwen3.7-plus` / `qwen3.6-flash` / `glm-5.2` / `deepseek-v4-pro`;均为 1M ctx;Qwen 3.8 / 3.7 Plus / 3.6 Flash 支持图片理解) |
|
|
668
|
+
| zhipu | `ZHIPU_API_KEY` | Native | glm-5(可 `/model` 切换 `glm-5.2` 1M ctx / `glm-5.1` / `glm-5-turbo`) |
|
|
669
|
+
| zhipu-coding | `ZHIPU_CODING_API_KEY` | Native | glm-5.2(1M ctx;仍可通过 `/model` 显式选择兼容模型 `glm-5.1` / `glm-5-turbo`) |
|
|
670
|
+
| zai-coding | `ZAI_CODING_API_KEY` | Native | glm-5.2(GLM Coding Plan 海外站,通过 `api.z.ai` 接入,Anthropic 协议 — 模型清单和 `zhipu-coding` 完全一致) |
|
|
671
|
+
| minimax-coding | `MINIMAX_CODING_API_KEY` | Native | MiniMax-M3(Frontier Coding,原生多模态 + 1M ctx;仍可通过 `/model` 显式选择兼容模型 `MiniMax-M2.7` / `MiniMax-M2.7-highspeed`) |
|
|
672
|
+
| mimo | `MIMO_API_KEY` | Native | mimo-v2.5-pro(小米 MiMo 按量计费,Anthropic 协议) |
|
|
673
|
+
| mimo-coding | `MIMO_CODING_API_KEY` | Native | mimo-v2.5-pro(小米 MiMo Token Plan,Anthropic 协议) |
|
|
674
|
+
| ark-coding | `ARK_CODING_API_KEY` | Native | glm-5.2(火山方舟 Coding Plan — GLM-5.2(别名 `glm-latest`) · Kimi K2.7 Code / K2.6 · MiniMax M3 / M2.7 · DeepSeek V4 Pro / V4 Flash · Doubao Seed 2.0 Code / Pro / Lite · Doubao Seed Code) |
|
|
675
|
+
| deepseek | `DEEPSEEK_API_KEY` | Native | deepseek-v4-flash(可 `/model` 切换 `deepseek-v4-pro`) |
|
|
676
|
+
| gemini-cli | 由 Provider CLI 完成认证(无 KodaX API-key 环境变量) | Prompt-only / CLI bridge | (通过 gemini CLI) |
|
|
677
|
+
| codex-cli | 由 Provider CLI 完成认证(无 KodaX API-key 环境变量) | Prompt-only / CLI bridge | (通过 codex CLI) |
|
|
678
|
+
|
|
679
|
+
> 不在表里的端点:用上面"自定义 Provider"那一节加进来即可。
|
|
680
|
+
|
|
681
|
+
## 内置工具一览
|
|
682
|
+
|
|
683
|
+
KodaX 有 50+ 个内置工具,按类别分组如下(实际暴露给 LLM 是一张扁平表)。
|
|
684
|
+
|
|
685
|
+
**文件操作**
|
|
686
|
+
|
|
687
|
+
| 工具 | 说明 |
|
|
688
|
+
|------|------|
|
|
689
|
+
| `read` | 读取文件(支持 offset / limit) |
|
|
690
|
+
| `write` | 创建新文件或完整重写 |
|
|
691
|
+
| `edit` | 精确字符串替换(支持 `replace_all`) |
|
|
692
|
+
| `multi_edit` | 对同一文件做一批独立 edit,整批原子提交 |
|
|
693
|
+
| `insert_after_anchor` | 在唯一 anchor 后插入内容,避免整文件重写 |
|
|
694
|
+
| `undo` | 撤销最近一次文件修改 |
|
|
695
|
+
|
|
696
|
+
**Shell 与搜索**
|
|
697
|
+
|
|
698
|
+
| 工具 | 说明 |
|
|
699
|
+
|------|------|
|
|
700
|
+
| `bash` | 执行 shell 命令(支持后台、输出截断) |
|
|
701
|
+
| `glob` / `grep` | 文件名匹配 / 正则内容搜索 |
|
|
702
|
+
| `code_search` | 代码搜索,比裸 grep 噪音更低 |
|
|
703
|
+
| `semantic_lookup` | 借助 repo intelligence 的符号 / 模块 / 流程感知查找 |
|
|
704
|
+
| `web_search` / `web_fetch` | 联网搜索 / 抓取,自带 trust + 时效信号 |
|
|
705
|
+
|
|
706
|
+
**Repo Intelligence working tools**
|
|
707
|
+
|
|
708
|
+
| 工具 | 说明 |
|
|
709
|
+
|------|------|
|
|
710
|
+
| `repo_overview` | 仓库结构、关键区域、入口提示、intelligence 快照 |
|
|
711
|
+
| `changed_scope` | 当前 diff 涉及的文件 / 区域 / 类别 |
|
|
712
|
+
| `changed_diff` / `changed_diff_bundle` | 单文件 / 多文件分页 diff |
|
|
713
|
+
| `module_context` | 模块 capsule(依赖、入口、符号、测试、文档) |
|
|
714
|
+
| `symbol_context` | 定义 + 可能的 caller/callee + 备选 |
|
|
715
|
+
| `process_context` | 入口的近似静态执行/流程 capsule |
|
|
716
|
+
| `impact_estimate` | 符号 / 路径 / 模块的影响面估算 |
|
|
717
|
+
|
|
718
|
+
**MCP 能力**(配置了 MCP server 时可用)
|
|
719
|
+
|
|
720
|
+
| 工具 | 说明 |
|
|
721
|
+
|------|------|
|
|
722
|
+
| `mcp_search` / `mcp_describe` / `mcp_call` | 通过共享 capability runtime 发现并调用 MCP 工具 |
|
|
723
|
+
| `mcp_read_resource` / `mcp_get_prompt` | 读取 MCP 资源、获取 MCP prompt |
|
|
724
|
+
|
|
725
|
+
**Git Worktree**
|
|
726
|
+
|
|
727
|
+
| 工具 | 说明 |
|
|
728
|
+
|------|------|
|
|
729
|
+
| `worktree_create` | 在隔离分支上新建 worktree,让 agent 安全工作 |
|
|
730
|
+
| `worktree_remove` | 移除 worktree(自带安全检查) |
|
|
731
|
+
|
|
732
|
+
**Agent 控制 / 交互**
|
|
733
|
+
|
|
734
|
+
| 工具 | 说明 |
|
|
735
|
+
|------|------|
|
|
736
|
+
| `spawn_agent` | 创建命名子 Actor,并在继承权限、会话并发和根工作预算约束下启动首个 Turn。 |
|
|
737
|
+
| `send_message` | 向 Actor 的持久 mailbox 提交有界信息,不启动新 Turn。 |
|
|
738
|
+
| `followup_task` | 在安全边界加入运行中的 Actor,或为 idle Actor 原子启动新 Turn。 |
|
|
739
|
+
| `wait_agent` | 等待当前作用域的 mailbox / 用户输入 / 中断 / 超时,只返回唤醒确认,Actor progress 不会唤醒模型。 |
|
|
740
|
+
| `interrupt_agent` | 请求中断 active Turn,同时保留 Actor 身份。 |
|
|
741
|
+
| `list_agents` | 查看调用方有权访问的 Actor 子树与 Turn 状态。 |
|
|
742
|
+
| `agent_output` | 读取有权限的 Actor/Turn 有界持久输出。 |
|
|
743
|
+
| `ask_user_question` | 向用户发起单选 / 多选 / 自由文本提问 |
|
|
744
|
+
| `exit_plan_mode` | 仅在当前 REPL/宿主提供审批回调时提交最终方案 |
|
|
745
|
+
| `emit_managed_protocol` | managed-task 协议侧信道(verdict role payload)。v0.7.42 FEATURE_184 起默认走 V2 Worker 单循环 + Sidecar Verifier;v0.7.43 FEATURE_193 退役 V1 chain。 |
|
|
746
|
+
|
|
747
|
+
## Repo Intelligence(内置 full/light 引擎)
|
|
748
|
+
|
|
749
|
+
KodaX 内置 repo intelligence(`repo_overview` / `module_context` / `symbol_context` / `process_context` / `impact_estimate` 等),让 coding agent 不靠零散 grep/glob 就能理解大型仓库。
|
|
750
|
+
|
|
751
|
+
REPL 中使用 `/repo-intel status` 查看当前引擎状态。旧的独立 `repointel` host skill 已移除;repo intelligence 已内置于 KodaX,无需任何外部安装。
|
|
752
|
+
|
|
753
|
+
```bash
|
|
754
|
+
# 选一个运行模式(auto | full | light | off)
|
|
755
|
+
kodax --repo-intelligence full --repo-intelligence-trace
|
|
756
|
+
```
|
|
757
|
+
|
|
758
|
+
## 仓库结构
|
|
759
|
+
|
|
760
|
+
KodaX 是基于 npm workspaces 的 TypeScript monorepo,**源码层 4 个 workspace 包**(FEATURE_194 v0.7.43 包合并 — 9 → 4,ADR-036),npm 上以单 bundle 包 `@kodax-ai/kodax` 发布 + 12 个 SDK subpath exports(`/agent`、`/llm`、`/coding`、`/media`、`/repl`、`/skills`、`/mcp`、`/session`、`/runtime`、`/sandbox`、`/a2a`、`/experimental-memory`;ADR-024 + ADR-032 + ADR-038)。核心包:
|
|
761
|
+
|
|
762
|
+
| Workspace 包 | 作用 | 主要依赖 |
|
|
763
|
+
|----|------|---------|
|
|
764
|
+
| `@kodax-ai/llm` | LLM 抽象层(16 个内置 provider alias + 自定义 provider 注册),可独立使用 | `@anthropic-ai/sdk`, `openai` |
|
|
765
|
+
| `@kodax-ai/agent` | 通用 Agent 框架 —— Runner / runFanOut / runWithIdleYield / AgentActorController / AgentTurnScheduler + media/input artifacts + 会话管理 + tokenization + 面向自定义 loop 的可插拔 compaction primitive(不关闭 KodaX coding runtime 的始终开启策略)+ **inline 后**:session-lineage 子树 + capabilities (mcp + skills + builtin) + tracing(subpaths: `/media`、`/session-lineage`、`/capabilities/mcp`、`/capabilities/skills`、`/tracing`) | `@kodax-ai/llm`, `js-tiktoken`, `fflate`, `jimp`, `yaml` |
|
|
766
|
+
| `@kodax-ai/coding` | Coding Agent:50+ 工具(含 canonical Actor 协作工具)、role prompts、agent loop、auto-continue + repo-intelligence protocol(v0.7.43 inline) | `@kodax-ai/llm`, `@kodax-ai/agent` |
|
|
767
|
+
| `@kodax-ai/repl` | 完整交互式终端 UI(Ink / React、权限模式、命令系统、流式渲染) | `@kodax-ai/coding`, `ink`, `react` |
|
|
768
|
+
|
|
769
|
+
根目录 `src/kodax_cli.ts` 是 CLI 入口;`src/sdk-{agent,llm,coding,media,repl,skills,mcp,session,runtime,sandbox,a2a,experimental-memory}.ts` 是 SDK subpath 入口;构建产物在 `dist/`,单文件二进制在 `dist/binary/<target>/`。
|
|
770
|
+
|
|
771
|
+
### 源码层 vs npm 发布层
|
|
772
|
+
|
|
773
|
+
KodaX 有两层结构,SDK 用户需要分开理解:
|
|
774
|
+
|
|
775
|
+
- **源码层**:上面 4 个 workspace 包(开发者读代码时看到的物理结构)。
|
|
776
|
+
- **npm 发布层**:单个 bundled 包 `@kodax-ai/kodax`,对外暴露 12 个 SDK subpath(SDK 消费者 `import` 时看到的接口)。subpath 分两种角色:
|
|
777
|
+
- **完整包 subpath**(`/agent`、`/llm`、`/coding`、`/repl`)—— 每个 1:1 对应一个源码包,暴露完整公开 API。
|
|
778
|
+
- **集成与窄子集 subpath**(`/media`、`/skills`、`/mcp`、`/session`、`/runtime`、`/sandbox`、`/a2a`、`/experimental-memory`)—— 聚焦能力或宿主集成边界;`/experimental-memory` 明确为 opt-in 不稳定接口。
|
|
779
|
+
|
|
780
|
+
| 源码包 | npm subpath | 类型 | 内容 | 典型消费者 |
|
|
781
|
+
|---|---|---|---|---|
|
|
782
|
+
| `packages/llm` | `@kodax-ai/kodax/llm` | 完整包 | 16-alias LLM 抽象 (108 exports) | 独立 LLM 客户端 |
|
|
783
|
+
| `packages/agent` | `@kodax-ai/kodax/agent` | 完整包 | Runner / fan-out / 外部 Agent plane / session-lineage / capabilities / tracing (331 exports) | 自定义 agent 框架 |
|
|
784
|
+
| `packages/agent` | `@kodax-ai/kodax/skills` | **窄子集** | 仅 Skills 系统 —— `SkillRegistry` / `loadFullSkill` / `expandSkillForLLM` 等 (26 exports = v0.7.43 之前 `@kodax-ai/skills` 完整 API) | Skill 加载器、IDE 插件 |
|
|
785
|
+
| `packages/agent` | `@kodax-ai/kodax/mcp` | **窄子集** | 仅 MCP —— `McpCapabilityProvider` / `createMcpTransport` / `searchMcpCatalog` 等 (23 exports) | MCP server 宿主 |
|
|
786
|
+
| `packages/agent` | `@kodax-ai/kodax/media` | **窄子集** | 结构化图片/文件/视频输入 artifact helpers (22 exports) | 桌面宿主、多模态客户端 |
|
|
787
|
+
| `packages/agent` | `@kodax-ai/kodax/experimental-memory` | **实验性子集** | F228-backed `MemoryAgent` / `MemorySession` scope、recall、query、observation、outcome 契约 | 显式评估 FEATURE_260 的 SDK 宿主 |
|
|
788
|
+
| `packages/coding` | `@kodax-ai/kodax/coding` | 完整包 | Coding agent + 50+ 工具 + repo-intelligence (505 exports) | 构建 Claude Code 形态产品 |
|
|
789
|
+
| `packages/repl` | `@kodax-ai/kodax/repl` | 完整包 | Ink TUI + 权限模式 + 命令系统 (217 exports) | 终端 UI 消费者 |
|
|
642
790
|
| `packages/repl` | `@kodax-ai/kodax/session` | **窄子集** | 仅会话管理 —— `listSessions` / `loadFullTranscript` / `appendClientNotice` / `forkSession` / `compactSession` / `watchSessions` 等 (17 exports) | 读取 session 历史的 IDE 插件和桌面宿主 |
|
|
643
791
|
| `src` | `@kodax-ai/kodax/runtime` | 宿主 API | Embedded/Worker/daemon facade,含 sessions/runs/events/permissions/catalog/MCP/artifacts/diagnostics/外部 Agent 和 daemon schema (10 exports) | SDK 宿主、Space/IDE、daemon client |
|
|
792
|
+
| `src` | `@kodax-ai/kodax/sandbox` | 宿主 API | 显式 ASRT capability/doctor/setup 与宿主自有受控命令执行;不可用时绝不静默普通执行 | 需要独立进程 containment 的 SDK 宿主 |
|
|
644
793
|
| `src` | `@kodax-ai/kodax/a2a` | 集成边界 | A2A 1.0 Agent Card 发现、JSON-RPC/SSE F258 executor、安全 fetch 与鉴权 Runtime Agent server | Agent 编排器和 KodaX 宿主 |
|
|
645
|
-
|
|
646
|
-
**经验法则**:需要 Runner / Agent / fan-out 时从 `/agent` 引入;只需要 skills 或 mcp API 时从 `/skills` 或 `/mcp` 引入,bundle 更小。窄子集是完整包的真子集 —— **不会**有额外符号。
|
|
647
|
-
|
|
648
|
-
**Workflow process surface(FEATURE_229,v0.7.50)**:动态工作流不再只是 REPL 私有文本,而是 Agent 层可复用的 process/event/snapshot 契约。SDK 宿主可以订阅 `WorkflowProcessEvent`、轮询 `WorkflowProcessSnapshot`,并通过 `createWorkflowRunManager` / `createWorkflowLifecycleController` 做 stop/pause/resume、读取 final result/artifact、删除/清理 terminal runs、管理 workflow identity/preflight。`/coding` 负责 coding workflow backend 与 run graph,`/repl` 只是消费同一份 snapshot 渲染 UI;SDK 不需要解析 slash-command 输出或 Ink view-model。`KodaXEvents` 回调新增可选 meta 尾参(`KodaXToolEventMeta` / `KodaXActivityEventMeta` / `KodaXWorkflowEventMeta`),宿主据此把每个子 Agent 的 tool/thinking/progress 事件归因到对应 workflow run 与 child id,无需第二套事件协议;生成/保存的工作流脚本在运行前过 `validateRestrictedWorkflowSource`(编译 + 源策略检查)与 generator 的 repair/smoke 循环。分层取舍见 [docs/ADR.md ADR-040](docs/ADR.md)。
|
|
649
|
-
|
|
650
|
-
**宿主读持久化历史(FEATURE_230 + FEATURE_234,v0.7.51;v0.7.63 hardening)**:面向「宿主读持久化状态」的 additive 闭环。**持久化工具记录回放**——resume 的会话现在会回放助手用过的工具卡片,而不是退化成纯文本。`messages` / `lineage` 仍是 canonical;`SessionData.uiHistory` 成为有界、脱敏、仅 terminal 状态的回放缓存。SDK transcript 契约明确化:`loadSession()` = 活动 model context,`loadFullTranscript()` = 带结构化条目的追加序 host scrollback(`message` / `compaction` / `branch_summary` / `rewind_marker` / `client_notice` / `task_result`)并带 clone provenance(`logicalId` / `sourceEntryId`),`uiHistory` = 可选回放缓存,工具卡片始终可从 canonical messages 重建。宿主可用 `appendClientNotice()` 持久化本地 slash 输出且不进入模型上下文;workflow/child 完成结果通过结构化 `taskResults[]` 暴露,不再要求解析 `<task-completed>` 文本。`rewind_marker` 只用于 host scrollback 审计,不进入 model-context messages。**Workflow run 宿主归属**——`WorkflowProcessTrackerOptions` / `WorkflowProcessSnapshot` 新增 host-owned 不透明 `hostMetadata?: Record<string, string>`,SDK 存储、持久化进 `run.json`、回读回显(含进程重启后)但不解释其含义,让宿主零侧表把 run 归回发起它的 session/surface。未 stamp 的旧 run 诚实回显 `hostMetadata === undefined`。详见 [docs/features/v0.7.51.md](docs/features/v0.7.51.md)。
|
|
651
|
-
|
|
652
|
-
**会话恢复与 ACP 污染修复(FEATURE_261,v0.7.67)**:直接运行 `kodax -r` 会进入可搜索、上下选择、Tab 补全和翻页的交互式会话选择器,并显示当前选中项的完整 session ID;`kodax -r <值>` 优先按完整 ID 恢复,ID 不存在时再按忽略大小写的完整标题匹配。标题唯一则直接恢复,同名标题则进入只包含候选项的选择器,绝不静默选第一条。`listSessions()` / Runtime / daemon 会话列表新增 `surface` 精确过滤和不透明 `cursor` 分页。ACP session 改为收到首个有效 prompt 后才持久化,ACP 测试强制使用临时 runtime home,避免测试记录写入真实 `~/.kodax/sessions`。`kodax -s cleanup-acp` 只预览严格匹配的空 ACP 污染记录;仅显式追加 `--apply-session-cleanup` 时才归档,不做永久删除。
|
|
653
|
-
|
|
654
|
-
**v0.7.74 最近会话恢复闭环:**`kodax -c`、Ink/Classic 启动、单次 CLI 与 coding
|
|
655
|
-
runtime auto-resume 都会扫描最多 1000 条最新摘要并跳过 `msgCount=0` 的 ACP/bootstrap
|
|
656
|
-
占位会话;显式 session ID 始终优先。交互式恢复会在下一轮前恢复保存的 workspace
|
|
657
|
-
runtime、消息、UI 历史、lineage、artifact、extension 状态、标题、tag 与 session ID,
|
|
658
|
-
因此相对 shell 命令不会错误地落回启动目录。
|
|
659
|
-
|
|
660
|
-
**实验性 Memory Agent SDK(FEATURE_260,v0.7.68)**:`/experimental-memory` 暴露基于既有 F228 治理平面的薄 `MemoryAgent` 与 scoped `MemorySession`。被动 recall 零等待,`query()` 只读且由主 Action LLM 主动选择;持久化仍必须经过 proposal/preview/fingerprint/apply。召回内容保持低权限,安全与 scope 边界仍由确定性代码门禁承担。直接 session 示例与宿主边界见 [SDK Embedder Guide §21](docs/SDK_EMBEDDER_GUIDE.md#21-experimental-governed-memory--experimental-memory-feature_260-v0768)。
|
|
661
|
-
|
|
662
|
-
**双向 A2A 1.0(FEATURE_267,v0.7.69)**:`/a2a` 可发现 allowlist 内的 Agent Card,并通过既有 F258 plane 安装 JSON-RPC/SSE executor。配置中的出站 Agent 还会作为 `external:<name>` 自动注册到 embedded CLI 与用户 daemon Runtime,因此主 Agent 无需宿主代码即可编排。一个 `a2a.json` 可保存多个出站注册,但最多只有一个入站 server;入站可发布 Runtime 默认 Agent,或发布一个经过验证的 `~/.kodax/agents/*.md` Agent。内置 listener 仅允许 loopback
|
|
663
|
-
|
|
664
|
-
**A2A 互操作与认证加固**:发现得到的 interface 必须与受信 Agent Card 同源,且只有
|
|
665
|
-
完整满足 Card/Skill 的一个 security requirement 时才会携带凭据。无代码 client
|
|
666
|
-
支持 HTTP Bearer 兼容模式与 OAuth 2.0 Client Credentials;OAuth 的短期 access
|
|
667
|
-
token 由外部 Authorization Server 签发,KodaX 只在进程内缓存。入站 `a2a serve`
|
|
668
|
-
可以按外部 issuer/JWKS 校验 RFC 9068 JWT access token,但不会自行签发生产 token。
|
|
669
|
-
服务按 CLI、环境变量、配置、内置默认值的顺序解析 provider,Markdown Agent 也可
|
|
670
|
-
固定自己的 provider。补充输入会继续原 Runtime run;任务历史、保留策略与稳定
|
|
671
|
-
cursor 分页均有边界;带鉴权的 SSE 会先校验关联信息,流在正常终止但未给出终态时
|
|
672
|
-
回退 polling。仅远端直接 artifact、输出 broker 暂存结果,以及成功授权执行的 Skill
|
|
673
|
-
脚本输出可以发布;普通工作区写入与本地路径不会暴露。
|
|
674
|
-
|
|
675
|
-
这里的认证与逐 Agent 激活加固,是对 v0.7.69 F267/F268 设计的发布后补全,
|
|
676
|
-
随 v0.7.71 补丁交付;并不表示早期 v0.7.69 二进制已经包含后续 OAuth profile。
|
|
677
|
-
|
|
678
|
-
**v0.7.70 MCP 发现加固**:能力使用精确 ID 和带 revision 的 cursor,结果按真实物理
|
|
679
|
-
容量准入。紧凑 CJK 查询会分词;跨语言 lexical 零匹配只会返回容量内的无损分组
|
|
680
|
-
清单,或一条使用 catalog 语言的简短重试提示。部分 provider 失败会显式保留,
|
|
681
|
-
不会伪装成完整结果。
|
|
682
|
-
|
|
683
|
-
完整的内置调用路径不需要再写 TypeScript:
|
|
684
|
-
|
|
685
|
-
```bash
|
|
686
|
-
# 调用外部 A2A Agent
|
|
687
|
-
kodax a2a add research https://agent.example/.well-known/agent-card.json --effect read
|
|
688
|
-
kodax a2a test research
|
|
689
|
-
kodax a2a call research "总结这个主题"
|
|
690
|
-
|
|
691
|
-
# 先保存受 OAuth 保护的 Agent,再热启用/停用
|
|
692
|
-
export RESEARCH_A2A_CLIENT_SECRET='由你的授权服务器分配'
|
|
693
|
-
# PowerShell:$env:RESEARCH_A2A_CLIENT_SECRET='由你的授权服务器分配'
|
|
694
|
-
# PowerShell:将命令写成一行,或把每个行尾反斜杠替换为反引号。
|
|
695
|
-
kodax a2a add reviewer https://reviewer.example/.well-known/agent-card.json \
|
|
696
|
-
--disabled --effect read --oauth-scheme enterprise-oauth \
|
|
697
|
-
--oauth-issuer https://identity.example/ \
|
|
698
|
-
--oauth-token-url https://identity.example/oauth/token \
|
|
699
|
-
--oauth-client-id kodax-reviewer \
|
|
700
|
-
--oauth-client-secret-env RESEARCH_A2A_CLIENT_SECRET \
|
|
701
|
-
--oauth-scope a2a.invoke --oauth-resource https://reviewer.example/
|
|
702
|
-
kodax a2a enable reviewer
|
|
703
|
-
kodax a2a disable reviewer # 只阻止新调度,不取消已运行任务
|
|
704
|
-
|
|
705
|
-
# 暴露 Runtime 默认 Agent,或指定 ~/.kodax/agents/*.md 中的 Agent 名称
|
|
706
|
-
export KODAX_A2A_TOKEN='请替换为足够长的随机令牌'
|
|
707
|
-
# PowerShell:$env:KODAX_A2A_TOKEN='请替换为足够长的随机令牌'
|
|
708
|
-
kodax a2a expose # 或:kodax a2a expose document-agent
|
|
709
|
-
kodax a2a serve # 仅监听 http://127.0.0.1:8765
|
|
710
|
-
```
|
|
711
|
-
|
|
794
|
+
|
|
795
|
+
**经验法则**:需要 Runner / Agent / fan-out 时从 `/agent` 引入;只需要 skills 或 mcp API 时从 `/skills` 或 `/mcp` 引入,bundle 更小。窄子集是完整包的真子集 —— **不会**有额外符号。
|
|
796
|
+
|
|
797
|
+
**Workflow process surface(FEATURE_229,v0.7.50)**:动态工作流不再只是 REPL 私有文本,而是 Agent 层可复用的 process/event/snapshot 契约。SDK 宿主可以订阅 `WorkflowProcessEvent`、轮询 `WorkflowProcessSnapshot`,并通过 `createWorkflowRunManager` / `createWorkflowLifecycleController` 做 stop/pause/resume、读取 final result/artifact、删除/清理 terminal runs、管理 workflow identity/preflight。`/coding` 负责 coding workflow backend 与 run graph,`/repl` 只是消费同一份 snapshot 渲染 UI;SDK 不需要解析 slash-command 输出或 Ink view-model。`KodaXEvents` 回调新增可选 meta 尾参(`KodaXToolEventMeta` / `KodaXActivityEventMeta` / `KodaXWorkflowEventMeta`),宿主据此把每个子 Agent 的 tool/thinking/progress 事件归因到对应 workflow run 与 child id,无需第二套事件协议;生成/保存的工作流脚本在运行前过 `validateRestrictedWorkflowSource`(编译 + 源策略检查)与 generator 的 repair/smoke 循环。分层取舍见 [docs/ADR.md ADR-040](docs/ADR.md)。
|
|
798
|
+
|
|
799
|
+
**宿主读持久化历史(FEATURE_230 + FEATURE_234,v0.7.51;v0.7.63 hardening)**:面向「宿主读持久化状态」的 additive 闭环。**持久化工具记录回放**——resume 的会话现在会回放助手用过的工具卡片,而不是退化成纯文本。`messages` / `lineage` 仍是 canonical;`SessionData.uiHistory` 成为有界、脱敏、仅 terminal 状态的回放缓存。SDK transcript 契约明确化:`loadSession()` = 活动 model context,`loadFullTranscript()` = 带结构化条目的追加序 host scrollback(`message` / `compaction` / `branch_summary` / `rewind_marker` / `client_notice` / `task_result`)并带 clone provenance(`logicalId` / `sourceEntryId`),`uiHistory` = 可选回放缓存,工具卡片始终可从 canonical messages 重建。宿主可用 `appendClientNotice()` 持久化本地 slash 输出且不进入模型上下文;workflow/child 完成结果通过结构化 `taskResults[]` 暴露,不再要求解析 `<task-completed>` 文本。`rewind_marker` 只用于 host scrollback 审计,不进入 model-context messages。**Workflow run 宿主归属**——`WorkflowProcessTrackerOptions` / `WorkflowProcessSnapshot` 新增 host-owned 不透明 `hostMetadata?: Record<string, string>`,SDK 存储、持久化进 `run.json`、回读回显(含进程重启后)但不解释其含义,让宿主零侧表把 run 归回发起它的 session/surface。未 stamp 的旧 run 诚实回显 `hostMetadata === undefined`。详见 [docs/features/v0.7.51.md](docs/features/v0.7.51.md)。
|
|
800
|
+
|
|
801
|
+
**会话恢复与 ACP 污染修复(FEATURE_261,v0.7.67)**:直接运行 `kodax -r` 会进入可搜索、上下选择、Tab 补全和翻页的交互式会话选择器,并显示当前选中项的完整 session ID;`kodax -r <值>` 优先按完整 ID 恢复,ID 不存在时再按忽略大小写的完整标题匹配。标题唯一则直接恢复,同名标题则进入只包含候选项的选择器,绝不静默选第一条。`listSessions()` / Runtime / daemon 会话列表新增 `surface` 精确过滤和不透明 `cursor` 分页。ACP session 改为收到首个有效 prompt 后才持久化,ACP 测试强制使用临时 runtime home,避免测试记录写入真实 `~/.kodax/sessions`。`kodax -s cleanup-acp` 只预览严格匹配的空 ACP 污染记录;仅显式追加 `--apply-session-cleanup` 时才归档,不做永久删除。
|
|
802
|
+
|
|
803
|
+
**v0.7.74 最近会话恢复闭环:**`kodax -c`、Ink/Classic 启动、单次 CLI 与 coding
|
|
804
|
+
runtime auto-resume 都会扫描最多 1000 条最新摘要并跳过 `msgCount=0` 的 ACP/bootstrap
|
|
805
|
+
占位会话;显式 session ID 始终优先。交互式恢复会在下一轮前恢复保存的 workspace
|
|
806
|
+
runtime、消息、UI 历史、lineage、artifact、extension 状态、标题、tag 与 session ID,
|
|
807
|
+
因此相对 shell 命令不会错误地落回启动目录。
|
|
808
|
+
|
|
809
|
+
**实验性 Memory Agent SDK(FEATURE_260,v0.7.68)**:`/experimental-memory` 暴露基于既有 F228 治理平面的薄 `MemoryAgent` 与 scoped `MemorySession`。被动 recall 零等待,`query()` 只读且由主 Action LLM 主动选择;持久化仍必须经过 proposal/preview/fingerprint/apply。召回内容保持低权限,安全与 scope 边界仍由确定性代码门禁承担。直接 session 示例与宿主边界见 [SDK Embedder Guide §21](docs/SDK_EMBEDDER_GUIDE.md#21-experimental-governed-memory--experimental-memory-feature_260-v0768)。
|
|
810
|
+
|
|
811
|
+
**双向 A2A 1.0(FEATURE_267,v0.7.69)**:`/a2a` 可发现 allowlist 内的 Agent Card,并通过既有 F258 plane 安装 JSON-RPC/SSE executor。配置中的出站 Agent 还会作为 `external:<name>` 自动注册到 embedded CLI 与用户 daemon Runtime,因此主 Agent 无需宿主代码即可编排。一个 `a2a.json` 可保存多个出站注册,但最多只有一个入站 server;入站可发布 Runtime 默认 Agent,或发布一个经过验证的 `~/.kodax/agents/*.md` Agent。内置 listener 仅允许 loopback,且不会返回 Fetch 兼容客户端禁止的端口;公网部署必须由宿主用 TLS、鉴权和授权包住 `handle()`。不宣称支持 A2A 0.3、gRPC、HTTP+JSON、push notification,也不会自动把本地 Agent 暴露到网络。详见 [SDK Embedder Guide §22](docs/SDK_EMBEDDER_GUIDE.md#22-bidirectional-a2a-10--a2a-feature_267-v0769)。
|
|
812
|
+
|
|
813
|
+
**A2A 互操作与认证加固**:发现得到的 interface 必须与受信 Agent Card 同源,且只有
|
|
814
|
+
完整满足 Card/Skill 的一个 security requirement 时才会携带凭据。无代码 client
|
|
815
|
+
支持 HTTP Bearer 兼容模式与 OAuth 2.0 Client Credentials;OAuth 的短期 access
|
|
816
|
+
token 由外部 Authorization Server 签发,KodaX 只在进程内缓存。入站 `a2a serve`
|
|
817
|
+
可以按外部 issuer/JWKS 校验 RFC 9068 JWT access token,但不会自行签发生产 token。
|
|
818
|
+
服务按 CLI、环境变量、配置、内置默认值的顺序解析 provider,Markdown Agent 也可
|
|
819
|
+
固定自己的 provider。补充输入会继续原 Runtime run;任务历史、保留策略与稳定
|
|
820
|
+
cursor 分页均有边界;带鉴权的 SSE 会先校验关联信息,流在正常终止但未给出终态时
|
|
821
|
+
回退 polling。仅远端直接 artifact、输出 broker 暂存结果,以及成功授权执行的 Skill
|
|
822
|
+
脚本输出可以发布;普通工作区写入与本地路径不会暴露。
|
|
823
|
+
|
|
824
|
+
这里的认证与逐 Agent 激活加固,是对 v0.7.69 F267/F268 设计的发布后补全,
|
|
825
|
+
随 v0.7.71 补丁交付;并不表示早期 v0.7.69 二进制已经包含后续 OAuth profile。
|
|
826
|
+
|
|
827
|
+
**v0.7.70 MCP 发现加固**:能力使用精确 ID 和带 revision 的 cursor,结果按真实物理
|
|
828
|
+
容量准入。紧凑 CJK 查询会分词;跨语言 lexical 零匹配只会返回容量内的无损分组
|
|
829
|
+
清单,或一条使用 catalog 语言的简短重试提示。部分 provider 失败会显式保留,
|
|
830
|
+
不会伪装成完整结果。
|
|
831
|
+
|
|
832
|
+
完整的内置调用路径不需要再写 TypeScript:
|
|
833
|
+
|
|
834
|
+
```bash
|
|
835
|
+
# 调用外部 A2A Agent
|
|
836
|
+
kodax a2a add research https://agent.example/.well-known/agent-card.json --effect read
|
|
837
|
+
kodax a2a test research
|
|
838
|
+
kodax a2a call research "总结这个主题"
|
|
839
|
+
|
|
840
|
+
# 先保存受 OAuth 保护的 Agent,再热启用/停用
|
|
841
|
+
export RESEARCH_A2A_CLIENT_SECRET='由你的授权服务器分配'
|
|
842
|
+
# PowerShell:$env:RESEARCH_A2A_CLIENT_SECRET='由你的授权服务器分配'
|
|
843
|
+
# PowerShell:将命令写成一行,或把每个行尾反斜杠替换为反引号。
|
|
844
|
+
kodax a2a add reviewer https://reviewer.example/.well-known/agent-card.json \
|
|
845
|
+
--disabled --effect read --oauth-scheme enterprise-oauth \
|
|
846
|
+
--oauth-issuer https://identity.example/ \
|
|
847
|
+
--oauth-token-url https://identity.example/oauth/token \
|
|
848
|
+
--oauth-client-id kodax-reviewer \
|
|
849
|
+
--oauth-client-secret-env RESEARCH_A2A_CLIENT_SECRET \
|
|
850
|
+
--oauth-scope a2a.invoke --oauth-resource https://reviewer.example/
|
|
851
|
+
kodax a2a enable reviewer
|
|
852
|
+
kodax a2a disable reviewer # 只阻止新调度,不取消已运行任务
|
|
853
|
+
|
|
854
|
+
# 暴露 Runtime 默认 Agent,或指定 ~/.kodax/agents/*.md 中的 Agent 名称
|
|
855
|
+
export KODAX_A2A_TOKEN='请替换为足够长的随机令牌'
|
|
856
|
+
# PowerShell:$env:KODAX_A2A_TOKEN='请替换为足够长的随机令牌'
|
|
857
|
+
kodax a2a expose # 或:kodax a2a expose document-agent
|
|
858
|
+
kodax a2a serve # 仅监听 http://127.0.0.1:8765
|
|
859
|
+
```
|
|
860
|
+
|
|
712
861
|
MCP、A2A、Extension 分别使用 `~/.kodax/integrations/` 下的一个用户级文件。
|
|
713
|
-
可以通过 `kodax config
|
|
714
|
-
`kodax
|
|
715
|
-
`kodax
|
|
716
|
-
`
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
`--
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
│ ├──
|
|
771
|
-
│
|
|
772
|
-
│ │ ├──
|
|
773
|
-
│ │
|
|
774
|
-
│ │ │
|
|
775
|
-
│ │ └──
|
|
776
|
-
│
|
|
777
|
-
│
|
|
778
|
-
│ └──
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
│
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
│ ├── build-
|
|
785
|
-
│
|
|
786
|
-
└── .
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
| **
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
npm run build:binary
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
- light
|
|
868
|
-
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
- [
|
|
878
|
-
- [docs/
|
|
879
|
-
- [docs/
|
|
880
|
-
- [docs/
|
|
881
|
-
- [docs/
|
|
882
|
-
- [docs/
|
|
883
|
-
- [docs/
|
|
884
|
-
- [docs/
|
|
885
|
-
- [
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
notice
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
-
|
|
862
|
+
可以通过 `kodax config paths` 查看全部活跃/模板路径,通过
|
|
863
|
+
`kodax config template <core|mcp|a2a|extensions>` 查看模板,通过
|
|
864
|
+
`kodax integrations migrate --apply` 迁移旧配置,并用 `kodax mcp`、
|
|
865
|
+
`kodax a2a`、`kodax extensions` 管理。迁移只导入旧
|
|
866
|
+
`config.json#mcpServers` 与 `config.json#extensions`;A2A 没有旧来源,且不会
|
|
867
|
+
覆盖已有目标文件。第一次 MCP/Extension 修改可以暂存旧条目;只有在检查目标文件
|
|
868
|
+
和明文 secret 警告后,才应同时使用 `--apply --cleanup-legacy` 清理旧 key。
|
|
869
|
+
运行中的 CLI/daemon 保留最后一个
|
|
870
|
+
有效版本,完整替换 MCP provider、逐条协调 Extension,并热注册出站 A2A Agent。
|
|
871
|
+
每个 A2A 条目都有期望态 `enabled`;`kodax a2a list` 显示配置,实际已应用注册以
|
|
872
|
+
拥有该 Runtime 的进程为准。自动协调不会获取已停用条目的 Card 或 token;拥有者
|
|
873
|
+
观察并应用该 revision 后,停用条目才会阻止新调度,CLI 写入返回本身不是跨进程生效
|
|
874
|
+
确认。`a2a add --disabled` 默认仍会校验 Card,除非显式使用 `--no-test`;`a2a test`
|
|
875
|
+
只做 discovery/security planning,不会申请 OAuth token。示例中的固定
|
|
876
|
+
`KODAX_A2A_TOKEN` 是运维侧预先提供的兼容凭据,并非 KodaX 自行生成或签发。
|
|
877
|
+
停用条目可随时重新启用。
|
|
878
|
+
`a2a serve` 会在监听前装载已配置的 MCP/Extension 能力并固定执行权威,同时热加载
|
|
879
|
+
公开信息、鉴权和限额。Agent、Skill、Extension 工具权威、工作区、tool policy
|
|
880
|
+
或任务存储变更必须显式重启服务。
|
|
881
|
+
|
|
882
|
+
A2A 配置迁移与历史任务 owner 迁移是两件事。如果升级 realm-aware owner key
|
|
883
|
+
后仍需访问 v0.7.70 的任务库,应先停止 A2A server,执行
|
|
884
|
+
`kodax a2a migrate-tasks` 查看精确 owner 计划,再用
|
|
885
|
+
`--apply --confirm-server-stopped` 应用。OAuth 还必须提供已知历史
|
|
886
|
+
`--subject`;正常服务不会猜测或双读 legacy owner key。
|
|
887
|
+
|
|
888
|
+
托管 A2A 上下文默认位于 `~/kodax_a2a_server_workspace/<runtime-profile>/contexts/`。
|
|
889
|
+
精确授权的 Skill 脚本必须使用隔离策略,并通过 `kodax sandbox doctor`;
|
|
890
|
+
Windows 的一次性显式初始化由 `kodax sandbox setup` 完成。
|
|
891
|
+
|
|
892
|
+
**v0.7.72 会话恢复与队列闭环:**裸 `kodax -r` 先加载可搜索选择器,不为列出
|
|
893
|
+
session 预加载完整 CLI;选中后才把 stdin 交给恢复后的 REPL,Esc 会释放选择器的
|
|
894
|
+
stdin 并立即回到原 shell。历史回放保留每条持久 event 的原始时间。用户 follow-up
|
|
895
|
+
使用 session-root Actor queue scope,避免一个 session/child 的待处理输入被另一个
|
|
896
|
+
REPL 显示、唤醒或消费。
|
|
897
|
+
|
|
898
|
+
**外部 Agent SDK plane(FEATURE_258,v0.7.67)**:`/agent` 导出协议中立的 executor、registration、policy、credential broker、artifact policy、catalog 和 durable task 契约;`/runtime` 通过 `admin.agentRegistrations`、`agents`、`agentTasks` 向 embedded 与 daemon client 提供同一组 DTO API。Executor factory 是宿主函数,只能装入 inline owner,或在创建新的 in-process daemon owner 时装入;不能通过既有 daemon 连接或 Runtime Worker 边界注入。Plane 关闭后是终态:未完成的 wait 和后续所有服务调用都会拒绝;受限 Workflow 脚本会完整校验并传递 `phase` 与外部 `target`。完整所有权、注册、preflight、启动/等待/继续/取消/对账和安全边界见 [SDK Embedder Guide §18](docs/SDK_EMBEDDER_GUIDE.md#18-external-agent-executor-plane-feature_258-v0767)。
|
|
899
|
+
|
|
900
|
+
**成本受控 Workflow SDK(FEATURE_259,v0.7.67)**:SDK 调用方用 run-scoped `modelTiers` 与 `workflow.maxConcurrency` 配置路由和并发,workflow 作者只表达 `fast` / `balanced` / `deep` 语义意图。terminal workflow event 回显 tier/source/fallback/usage/duration,持久化 `run.json.efficiencyReport` 给出 token coverage、role/tier 启动数、packet-read 拓扑、review wave 和 quality gate 结果。完整配置与遥测读取方式见 [SDK Embedder Guide §20](docs/SDK_EMBEDDER_GUIDE.md#20-cost-disciplined-workflow-routing-and-telemetry-feature_259-v0767)。
|
|
901
|
+
|
|
902
|
+
**Inline workflow authoring(FEATURE_246,v0.7.58;F270 于 v0.7.72 更新)**:Worker 在明确表达 Workflow 意图时,可通过 model-callable 的 `run_workflow` 工具在会话内编写并运行工作流。F270 退役 AMAW 与复杂度驱动激活;AMA 保留显式 `/workflow`、named/SDK 和自然语言 Workflow 请求。Workflow 子 Agent 统一运行在 Actor 控制面。详见 [docs/features/v0.7.58.md](docs/features/v0.7.58.md)、[docs/features/v0.7.72.md](docs/features/v0.7.72.md) 与 ADR-044/046/047/048/049/055。
|
|
903
|
+
|
|
904
|
+
**历史工作流激活分层(FEATURE_248 + FEATURE_249,v0.7.59;F270 于 v0.7.72 取代)**:v0.7.59 引入 AMAW 和 AMA 的显式请求行为。F270 退役 AMAW 及其复杂度驱动指令;SA 保持单独作业,AMA 成为唯一自适应多 Agent 模式,并且只在明确 Workflow 意图下激活 Workflow。详见 [docs/features/v0.7.59.md](docs/features/v0.7.59.md) 与 [docs/features/v0.7.72.md](docs/features/v0.7.72.md)。
|
|
905
|
+
|
|
906
|
+
**managed 工具路径的渐进披露(FEATURE_250,v0.7.60;当前策略于 v0.7.74 纠偏)**:deferred-tool 机制同时应用于 AMA managed path 与 SA。当前延迟集合精确包含 11 个工具:6 个 repo-intelligence、4 个 web/code discovery,以及 `run_workflow`;其 `input_schema` 仍可直接调用,完整描述按需由 `tool_search` 返回。5 个固定 `mcp_*` facade 与 `get_goal` / `create_goal` / `update_goal` 生命周期工具常驻完整契约。v0.7.74 的 Goal 纠偏相对旧 hint 仅增加约 109 个估算 schema token(其中常驻的 `get_goal` 反而少 12 token),消除一次发现往返,并且不改变工具 schema、handler、权限、Goal 状态或压缩保护。详见 [docs/features/v0.7.60.md](docs/features/v0.7.60.md) 与 [docs/features/v0.7.74.md](docs/features/v0.7.74.md#feature_250-v0774-correction-resident-goal-lifecycle-tools)。
|
|
907
|
+
|
|
908
|
+
**上下文高效的工具结果 + Workflow 质量预检(FEATURE_251 + FEATURE_252,v0.7.61;2026-07-14 纠偏)**:本地工具先完整采集,只采用契约等价且严格更短的无损规范化;命令专用 Bash 有损过滤默认关闭,compound Bash 不使用语义 adapter。并行结果由唯一 owner 按最终 provider 请求统一判容:先求满足 `Pmax + 输出预留 + max(2048, Pmax 的 3%) <= 上下文窗口` 的最大最终输入,再只使用剩余物理容量。能放下就逐字交付,只有真实溢出才持久化完整结果并返回 `KODAX_RESULT_INCOMPLETE`。历史仍遵守相同的物理容量安全规则:容量内不做默认有损 microcompaction,压力下 summary-first,无法形成可恢复请求时 typed failure,禁止静默删除。FEATURE_272 仅取代 FEATURE_251 的大型压缩默认触发策略;FEATURE_252 的确定性 workflow 启动前合约 lint 保持不变。详见 [docs/features/v0.7.61.md](docs/features/v0.7.61.md) 与 [docs/ADR.md ADR-050](docs/ADR.md)。
|
|
909
|
+
|
|
910
|
+
**可靠且始终开启的上下文压缩(FEATURE_272,v0.7.74)**:自动大型压缩不允许关闭。百分比阈值默认 75%,并限制在 15-90%;可选 `triggerTokens` 未设置或为 0 时不生效,否则百分比、绝对值和物理容量三者取最小。最近原始尾部保护量为有效阈值的 20%。一次事务压缩保护尾部之外的完整 eligible prefix,并用精确 query ledger 保留所有真实用户请求;只有实际减少 token、恢复物理可用且等待持久化提交成功后才发出成功事件。原始正文从内存驱逐前,Session owner 会先持久化并刷盘精确 lineage;sidecar 与精简 Session 通过稳定 entry ID 合并去重。根 Agent 与持久化子 Agent 都可用有界的 `session_history_search` → `session_history_read` 回溯自己的被省略细节;子 Agent 只绑定独立隐藏的 worker Session,永远不能读取根历史。SDK/Runtime 则使用 revision-bound `transcriptSearch`、分页和无损 chunk;隐藏思考、system 指令与合成 checkpoint 不进入模型检索。详见 [功能设计](docs/features/v0.7.74.md)、[SDK 指南第 25 节](docs/SDK_EMBEDDER_GUIDE.md#25-always-on-context-compaction-and-bounded-transcript-recovery-v0774) 与 [ADR-057](docs/ADR.md#adr-057-large-compaction-is-an-always-on-context-scoped-full-coverage-transaction)。
|
|
911
|
+
|
|
912
|
+
**邮箱驱动的 Agent 协作(FEATURE_273,v0.7.74)**:`wait_agent` 现在是真正的模型侧 mailbox yield,只接受一个有界 `timeout_ms`,不再读取 Actor progress/event。它只因当前作用域的 Agent 消息或完成通知、根用户输入、中断或超时而唤醒;progress 仍通过 UI/SDK snapshot、replay 和 long-poll 提供,但不会触发父模型重采样。工具只返回 wake acknowledgement,可信 Agent evidence 与结构化 task metadata 在下一安全边界只注入一次。未确认的根 completion 可在硬重启后恢复,同进程 Runtime 重建按子 `turnId` 去重,已确认或旧版历史 completion 不重放。树状态用 `list_agents`,已知结果用 `agent_output`。详见 [功能设计](docs/features/v0.7.74.md#feature_273-mailbox-driven-agent-wait-and-telemetrycontrol-separation)、[SDK 指南第 26 节](docs/SDK_EMBEDDER_GUIDE.md#26-agent-mailbox-control-versus-sdk-event-telemetry-v0774) 与 [ADR-058](docs/ADR.md#adr-058-model-agent-wait-is-mailbox-control-not-event-telemetry)。
|
|
913
|
+
|
|
914
|
+
**活跃 Run 中断输入(v0.7.74)**:embedded Runtime 与 shared daemon 声明 `interruptInput:1`。`runtime.runs.submitInput()` 把不可变、有序的输入排入当前 active Actor Run;同一安全 Runner 边界前接纳的输入按 FIFO 作为独立 user message 一次性交给下一次 LLM 请求,不创建 continuation Run。Run snapshot/event 暴露 queued/delivered 状态,确认只匹配实际消费的 ID,终态清理保证未交付输入不会泄漏到后续 Run。
|
|
915
|
+
|
|
916
|
+
```
|
|
917
|
+
KodaX/ # 4 workspace packages(FEATURE_194 v0.7.43)
|
|
918
|
+
├── packages/
|
|
919
|
+
│ ├── llm/ # @kodax-ai/llm —— 16 个内置 provider alias
|
|
920
|
+
│ ├── agent/ # @kodax-ai/agent —— Runner / fan-out / idle-yield + 子树:
|
|
921
|
+
│ │ ├── session-lineage/ # 分支 session tree (v0.7.43 inline)
|
|
922
|
+
│ │ ├── capabilities/
|
|
923
|
+
│ │ │ ├── mcp/ # MCP 集成 (v0.7.43 inline)
|
|
924
|
+
│ │ │ └── skills/ # Skills 标准实现 + builtin (v0.7.43 inline)
|
|
925
|
+
│ │ └── tracing/ # 追踪 / 可观测性 (v0.7.43 inline)
|
|
926
|
+
│ ├── coding/ # @kodax-ai/coding —— tools + prompts + agent loop
|
|
927
|
+
│ │ └── repo-intelligence/ # 含 protocol.ts (v0.7.43 inline)
|
|
928
|
+
│ └── repl/ # @kodax-ai/repl —— Ink TUI
|
|
929
|
+
├── src/
|
|
930
|
+
│ ├── kodax_cli.ts # CLI 主入口(bin: `kodax`)
|
|
931
|
+
│ └── sdk-*.ts # SDK subpath 入口 → @kodax-ai/kodax/{agent,llm,coding,media,repl,skills,mcp,session,runtime,sandbox,a2a,experimental-memory}
|
|
932
|
+
├── scripts/
|
|
933
|
+
│ ├── build-bundle.mjs # esbuild 单 bundle 多 entry 打包(CLI + root + 12 SDK subpath + chunks)
|
|
934
|
+
│ ├── build-binary.mjs # Bun --compile 单文件二进制打包
|
|
935
|
+
│ └── release.mjs # 构建/审计后仅临时切换 private 以 pack/publish
|
|
936
|
+
└── .github/workflows/
|
|
937
|
+
└── release.yml # 推 v* tag 自动发布 GitHub Release
|
|
938
|
+
```
|
|
939
|
+
|
|
940
|
+
这套拆分让你既可以把 KodaX 当成完整产品使用,也可以只复用其中某一层能力 —— SDK 消费者装 `@kodax-ai/kodax` 后从 subpath(`@kodax-ai/kodax/agent` 等)按需 import。
|
|
941
|
+
## API 导出
|
|
942
|
+
|
|
943
|
+
```typescript
|
|
944
|
+
// 主函数
|
|
945
|
+
export { runKodaX, KodaXClient };
|
|
946
|
+
|
|
947
|
+
// 类型
|
|
948
|
+
export type {
|
|
949
|
+
KodaXEvents, KodaXOptions, KodaXResult,
|
|
950
|
+
KodaXMessage, KodaXContentBlock,
|
|
951
|
+
KodaXSessionStorage, KodaXToolDefinition
|
|
952
|
+
};
|
|
953
|
+
|
|
954
|
+
// 工具
|
|
955
|
+
export { KODAX_TOOLS, KODAX_TOOL_REQUIRED_PARAMS, executeTool };
|
|
956
|
+
|
|
957
|
+
// Provider
|
|
958
|
+
export { getProvider, KODAX_PROVIDERS, KodaXBaseProvider };
|
|
959
|
+
|
|
960
|
+
// 工具函数
|
|
961
|
+
export {
|
|
962
|
+
estimateTokens,
|
|
963
|
+
getGitRoot, getGitContext, getEnvContext, getProjectSnapshot,
|
|
964
|
+
checkPromiseSignal
|
|
965
|
+
};
|
|
966
|
+
```
|
|
967
|
+
|
|
968
|
+
---
|
|
969
|
+
|
|
970
|
+
## 术语说明
|
|
971
|
+
|
|
972
|
+
| 术语 | 含义 | 位置 |
|
|
973
|
+
|------|------|------|
|
|
974
|
+
| **Skills** | Agent 能力(KODAX_TOOLS: read, write, bash 等)+ 扩展 Skills | Coding 层 + Skills 层 |
|
|
975
|
+
| **Commands** | CLI 快捷命令(/review, /test 等) | REPL 层 |
|
|
976
|
+
|
|
977
|
+
---
|
|
978
|
+
|
|
979
|
+
## 开发
|
|
980
|
+
|
|
981
|
+
```bash
|
|
982
|
+
# 开发模式
|
|
983
|
+
npm run dev "你的任务"
|
|
984
|
+
|
|
985
|
+
# 构建
|
|
986
|
+
npm run build
|
|
987
|
+
|
|
988
|
+
# 可选:只构建 workspace packages
|
|
989
|
+
npm run build:packages
|
|
990
|
+
|
|
991
|
+
# 打包成单文件二进制(当前平台 / 全平台)
|
|
992
|
+
npm run build:binary
|
|
993
|
+
npm run build:binary:all
|
|
994
|
+
|
|
995
|
+
# 测试
|
|
996
|
+
npm test
|
|
997
|
+
|
|
998
|
+
# Eval-driven development(provider 矩阵、identity round-trip 等)
|
|
999
|
+
npm run test:eval
|
|
1000
|
+
|
|
1001
|
+
# 清理
|
|
1002
|
+
npm run clean
|
|
1003
|
+
```
|
|
1004
|
+
|
|
1005
|
+
### Repo Intelligence 缓存目录
|
|
1006
|
+
|
|
1007
|
+
KodaX 现在会把 Repo Intelligence 的本地缓存分成内置引擎 profile:
|
|
1008
|
+
|
|
1009
|
+
- `.agent/repo-intelligence/`
|
|
1010
|
+
- full 引擎索引、缓存和现有 task-engine 产物。
|
|
1011
|
+
- `.agent/repo-intelligence/light/`
|
|
1012
|
+
- light 模式启发式索引缓存。
|
|
1013
|
+
|
|
1014
|
+
这样拆开的目的很明确:
|
|
1015
|
+
|
|
1016
|
+
- full 和 light profile 可以独立重建。
|
|
1017
|
+
- light 模式的低置信度状态不会被误认为 full 引擎状态。
|
|
1018
|
+
- 未来缓存迁移可以删除一个 profile,而不破坏另一个。
|
|
1019
|
+
|
|
1020
|
+
`.agent/repo-intelligence/` 是本地生成目录,不应该提交到 Git。
|
|
1021
|
+
|
|
1022
|
+
---
|
|
1023
|
+
|
|
1024
|
+
## 文档
|
|
1025
|
+
|
|
1026
|
+
- [README.md](README.md) - 英文版 README
|
|
1027
|
+
- [docs/SDK_EMBEDDER_GUIDE.md](docs/SDK_EMBEDDER_GUIDE.md) - SDK 宿主集成、shared Runtime、v0.7.74 压缩/历史恢复、Agent 遥测与活跃 Run 输入契约
|
|
1028
|
+
- [docs/release.md](docs/release.md) - 单文件二进制构建与发布流程
|
|
1029
|
+
- [docs/PRD.md](docs/PRD.md) - 产品需求
|
|
1030
|
+
- [docs/ADR.md](docs/ADR.md) - 架构决策
|
|
1031
|
+
- [docs/HLD.md](docs/HLD.md) - 高层设计
|
|
1032
|
+
- [docs/DD.md](docs/DD.md) - 详细设计
|
|
1033
|
+
- [docs/FEATURE_LIST.md](docs/FEATURE_LIST.md) - Feature 跟踪
|
|
1034
|
+
- [docs/test-guides/](docs/test-guides/) - 功能专用测试指南
|
|
1035
|
+
- [CHANGELOG.md](CHANGELOG.md) - 更新日志(v0.7.0+;更早版本见 [CHANGELOG_ARCHIVE](docs/CHANGELOG_ARCHIVE.md))
|
|
1036
|
+
|
|
1037
|
+
|
|
1038
|
+
---
|
|
1039
|
+
|
|
1040
|
+
## 许可证
|
|
1041
|
+
|
|
1042
|
+
[KodaX-AI Fair Core License (KAI-FCL) 1.0](LICENSE) - Copyright 2026 icetomoyo。
|
|
1043
|
+
|
|
1044
|
+
KAI-FCL 是 source-available / fair-core 协议,不是 OSI open source。商业、
|
|
1045
|
+
企业、托管部署、付费服务或客户再分发用途,需要 KodaX-AI 授权,并在需要时
|
|
1046
|
+
具备有效 entitlement。
|
|
1047
|
+
|
|
1048
|
+
KodaX-AI 当前官方许可政策:KodaX 0.7.70 及之后版本,在由 KodaX-AI 带有该
|
|
1049
|
+
notice 分发时,适用 KAI-FCL 或配套 KodaX-AI 客户条款。此前已带 Apache-2.0
|
|
1050
|
+
notice 分发的历史 tag、source archive、二进制、npm 包或其他副本,仍只对那些
|
|
1051
|
+
特定副本保留 Apache-2.0。
|
|
1052
|
+
|
|
1053
|
+
## 相关仓库
|
|
1054
|
+
|
|
1055
|
+
建议把公仓和私仓 clone 到同一个父目录下,例如:
|
|
1056
|
+
|
|
1057
|
+
- public repo: `<parent>/KodaX`
|
|
1058
|
+
- private repo: `<parent>/KodaX-private`(未公开发布)
|