@kodax-ai/kodax 0.7.77 → 0.7.79
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 +3651 -3201
- package/README.md +317 -110
- package/README_CN.md +255 -91
- package/config-templates/config.example.jsonc +124 -32
- package/config-templates/integrations/a2a.example.jsonc +23 -7
- package/dist/builtin/skill-creator/scripts/aggregate-benchmark.js +2 -1
- package/dist/builtin/skill-creator/scripts/analyze-benchmark.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/analyze-benchmark.js +4 -3
- package/dist/builtin/skill-creator/scripts/compare-runs.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/compare-runs.js +4 -3
- package/dist/builtin/skill-creator/scripts/generate-review.js +2 -1
- package/dist/builtin/skill-creator/scripts/grade-evals.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/grade-evals.js +4 -3
- package/dist/builtin/skill-creator/scripts/improve-description.js +2 -1
- package/dist/builtin/skill-creator/scripts/init-skill.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/init-skill.js +4 -3
- package/dist/builtin/skill-creator/scripts/install-skill.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/install-skill.js +4 -3
- package/dist/builtin/skill-creator/scripts/package-skill.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/package-skill.js +4 -3
- package/dist/builtin/skill-creator/scripts/quick-validate.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/quick-validate.js +4 -3
- package/dist/builtin/skill-creator/scripts/run-eval.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/run-eval.js +4 -3
- package/dist/builtin/skill-creator/scripts/run-loop.js +2 -1
- package/dist/builtin/skill-creator/scripts/run-trigger-eval.js +2 -1
- package/dist/builtin/skill-creator/scripts/utils.d.ts +3 -0
- package/dist/builtin/skill-creator/scripts/utils.js +5 -1
- package/dist/chunks/agent-V4AC5JZD.js +2 -0
- package/dist/chunks/argument-completer-ZPC2MLES.js +2 -0
- package/dist/chunks/chunk-5BNQXXGY.js +1 -0
- package/dist/chunks/{chunk-EH7AOMJ7.js → chunk-67THZRM6.js} +1 -1
- package/dist/chunks/chunk-6GVQDQTQ.js +292 -0
- package/dist/chunks/chunk-B6UY3VHV.js +348 -0
- package/dist/chunks/{chunk-HORNWBYR.js → chunk-BBOVVDQJ.js} +1 -1
- package/dist/chunks/chunk-CR2IF7VF.js +30 -0
- package/dist/chunks/{chunk-FNW2XUL5.js → chunk-CXHEZY5G.js} +1 -1
- package/dist/chunks/chunk-EDZ4QILG.js +266 -0
- package/dist/chunks/chunk-GEECPO2H.js +218 -0
- package/dist/chunks/chunk-H5LLM7DB.js +89 -0
- package/dist/chunks/chunk-KLWP7POA.js +467 -0
- package/dist/chunks/{chunk-XSA37BVM.js → chunk-M4N2JZTZ.js} +2 -2
- package/dist/chunks/chunk-OWQT3FTE.js +5 -0
- package/dist/chunks/chunk-Q4M7DJOD.js +319 -0
- package/dist/chunks/{chunk-3DD4QEBH.js → chunk-QCZLCLFL.js} +10 -10
- package/dist/chunks/chunk-RQPMGRTR.js +810 -0
- package/dist/chunks/chunk-SG6P4SZS.js +123 -0
- package/dist/chunks/chunk-TSTVAU5E.js +386 -0
- package/dist/chunks/chunk-ZCZZUE5E.js +662 -0
- package/dist/chunks/compaction-config-AEUGVROL.js +2 -0
- package/dist/chunks/{construction-bootstrap-RPRL3L7R.js → construction-bootstrap-K3ZGEN5N.js} +1 -1
- package/dist/chunks/dist-GFJFRPAV.js +2 -0
- package/dist/chunks/{dist-FDSOIR35.js → dist-JMO47GJV.js} +1 -1
- package/dist/chunks/host-23K2Q6RZ.js +2 -0
- package/dist/chunks/run-manager-PGIR6ITA.js +2 -0
- package/dist/chunks/utils-6LEKJPQN.js +2 -0
- package/dist/index.d.ts +22 -21
- package/dist/index.js +6 -6
- package/dist/kodax_bootstrap.js +2 -1
- package/dist/kodax_cli.js +2225 -1468
- package/dist/kodax_resume.js +570 -34
- package/dist/provider-capabilities.json +85 -50
- package/dist/runtime-worker.js +2076 -1343
- package/dist/sandbox-workspace-session.js +829 -0
- package/dist/sdk-a2a.d.ts +24 -18
- package/dist/sdk-a2a.js +8 -8
- package/dist/sdk-agent.d.ts +315 -168
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +42 -205
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-experimental-memory.d.ts +3 -3
- package/dist/sdk-experimental-memory.js +1 -1
- package/dist/sdk-llm.d.ts +7 -6
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.d.ts +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 +77 -36
- package/dist/sdk-repl.js +2 -2
- package/dist/sdk-runtime.d.ts +406 -163
- 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 -9
- 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 +283 -18
- package/dist/types-chunks/{base.d-4e74xDdy.d.ts → base.d-DxG0m09Z.d.ts} +1 -1
- package/dist/types-chunks/{bash-prefix-extractor.d-pZdu6qt7.d.ts → bash-prefix-extractor.d-CNSidpmv.d.ts} +149 -10
- package/dist/types-chunks/{capability-learning.d-CVsdHw4j.d.ts → capability-learning.d-iPSiAmc_.d.ts} +1 -1
- package/dist/types-chunks/{capsule.d-CxCm1KZz.d.ts → capsule.d-B3q98pLQ.d.ts} +9 -7
- package/dist/types-chunks/{types.d-RdWRfUEs.d.ts → controller.d-RGV7Pjv9.d.ts} +785 -8
- package/dist/types-chunks/{guardrail.d-B0PwAZVR.d.ts → guardrail.d-1NLSFTyN.d.ts} +310 -70
- package/dist/types-chunks/{history-retrieval.d-B__aEN62.d.ts → history-retrieval.d-BAegI14A.d.ts} +16 -3
- package/dist/types-chunks/{integration-config.d-ojG4swOP.d.ts → integration-config.d-BNowXE8k.d.ts} +23 -8
- package/dist/types-chunks/{oauth-login.d-Bgb4rdLN.d.ts → oauth-login.d-6i-vidxv.d.ts} +6 -2
- package/dist/types-chunks/{public-api.d--fF88JrC.d.ts → public-api.d-BpJhHoa7.d.ts} +366 -28
- package/dist/types-chunks/{commands.d-BccESAMV.d.ts → repl.d-CZ12Ow3X.d.ts} +89 -78
- package/dist/types-chunks/{side-query.d-5JvXhuOZ.d.ts → resolver.d-C9IW4fmU.d.ts} +7 -67
- package/dist/types-chunks/{run-manager.d-B47hIqnI.d.ts → run-manager.d-CX3AUocA.d.ts} +1 -1
- package/dist/types-chunks/{sdk-session-CLWf8Adb.d.ts → sdk-session-B3cfJKqF.d.ts} +3 -3
- package/dist/types-chunks/side-query.d-CP1LiRiH.d.ts +83 -0
- package/dist/types-chunks/{types-LanCEDj8.d.ts → types-Bf3Y3mW-.d.ts} +42 -3
- package/dist/types-chunks/{types.d-CODuyyqy.d.ts → types.d-BZ9oXvTV.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-DCsKM8aT.d.ts → types.d-C0_rn--1.d.ts} +4 -4
- package/dist/types-chunks/{types.d-DIpZJKUl.d.ts → types.d-CgrXrFrq.d.ts} +16 -2
- package/dist/types-chunks/{utils.d-CDduqbFw.d.ts → utils.d-CGpHavsU.d.ts} +32 -8
- package/docs/SDK_EMBEDDER_GUIDE.md +1117 -227
- package/package.json +11 -1
- package/dist/chunks/agent-NGSWFE73.js +0 -2
- package/dist/chunks/argument-completer-WGGZPEEO.js +0 -2
- package/dist/chunks/chunk-27QLRH3D.js +0 -5
- package/dist/chunks/chunk-2MQPVY6P.js +0 -770
- package/dist/chunks/chunk-6WAPVAGQ.js +0 -74
- package/dist/chunks/chunk-AOENDSVN.js +0 -448
- package/dist/chunks/chunk-FSXI4MAV.js +0 -78
- package/dist/chunks/chunk-HV2GMZUZ.js +0 -343
- package/dist/chunks/chunk-IQT4RPCE.js +0 -46
- package/dist/chunks/chunk-JS2BHGJP.js +0 -158
- package/dist/chunks/chunk-OAMKECRG.js +0 -381
- package/dist/chunks/chunk-ON2WG2LG.js +0 -622
- package/dist/chunks/chunk-RUGAAHTF.js +0 -321
- package/dist/chunks/chunk-TGCG7U2W.js +0 -37
- package/dist/chunks/compaction-config-BE7VYWH6.js +0 -2
- package/dist/chunks/dist-ZZBNVTKU.js +0 -2
- package/dist/chunks/host-QAKQVC4A.js +0 -2
- package/dist/chunks/run-manager-N4UFWA2D.js +0 -2
- package/dist/chunks/utils-AUHCI4D5.js +0 -2
- package/dist/types-chunks/center-types.d-BBT122uJ.d.ts +0 -91
- package/dist/types-chunks/guardrail.d-CJx9RRd3.d.ts +0 -156
package/README.md
CHANGED
|
@@ -41,21 +41,30 @@
|
|
|
41
41
|
```bash
|
|
42
42
|
npm i -g @kodax-ai/kodax
|
|
43
43
|
|
|
44
|
-
# Pick any one you have an API key for:
|
|
45
|
-
export ZHIPU_API_KEY=... #
|
|
46
|
-
#
|
|
47
|
-
# QWEN_TOKEN_API_KEY /
|
|
48
|
-
#
|
|
44
|
+
# Pick any one you have an API key for (`kodax setup --help` lists all):
|
|
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
|
|
49
50
|
|
|
50
51
|
kodax
|
|
51
52
|
```
|
|
52
53
|
|
|
53
|
-
That's it. You're in the REPL — ask anything in natural language.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
`kodax
|
|
54
|
+
That's it. You're in the REPL — ask anything in natural language. On a new
|
|
55
|
+
machine, bare interactive `kodax` first checks for supported API-key environment
|
|
56
|
+
variables. If none exists, KodaX only prints Windows, macOS, and Linux setup
|
|
57
|
+
instructions and exits without creating configuration or collecting a key.
|
|
58
|
+
After setting the variable, close the current terminal, open a new one, and run
|
|
59
|
+
`kodax` again. If a supported credential exists but no provider is selected,
|
|
60
|
+
KodaX opens the provider/model metadata setup. Use `kodax setup` to rerun the
|
|
61
|
+
flow, `kodax setup --custom` for a guided custom provider, and
|
|
62
|
+
`kodax setup --help` (or REPL `/setup --help`) for paths, provider variables,
|
|
63
|
+
commands, and shortcuts. Interactive setup also checks the optional ASRT sandbox once:
|
|
64
|
+
Windows may show a one-time UAC prompt; macOS/Linux report any required
|
|
65
|
+
Seatbelt/bubblewrap dependencies. Declining or missing a dependency does not
|
|
66
|
+
break ordinary permission handling, and normal startup will not keep reminding
|
|
67
|
+
you.
|
|
59
68
|
|
|
60
69
|
> **No-Node target machines:** download a Bun-compiled single binary for Windows / macOS / Linux × x64 + arm64 from the [GitHub Releases](https://github.com/icetomoyo/KodaX/releases) page. See [docs/release.md](docs/release.md) for the build pipeline.
|
|
61
70
|
|
|
@@ -150,10 +159,33 @@ KodaX reads API keys from environment variables. For built-in providers, the fas
|
|
|
150
159
|
```bash
|
|
151
160
|
# Interactive metadata-only provider/model setup (does not collect a key)
|
|
152
161
|
kodax setup
|
|
162
|
+
|
|
163
|
+
# Guided custom OpenAI/Anthropic-compatible provider
|
|
164
|
+
kodax setup --custom
|
|
165
|
+
|
|
166
|
+
# Complete guide; does not change files
|
|
167
|
+
kodax setup --help
|
|
153
168
|
```
|
|
154
169
|
|
|
155
|
-
|
|
156
|
-
|
|
170
|
+
Setup checks these active files and matching `*.example.jsonc` references:
|
|
171
|
+
|
|
172
|
+
- `~/.kodax/config.json` and `~/.kodax/config.example.jsonc`
|
|
173
|
+
- `~/.kodax/integrations/mcp.json`
|
|
174
|
+
- `~/.kodax/integrations/extensions.json`
|
|
175
|
+
- `~/.kodax/integrations/a2a.json`
|
|
176
|
+
|
|
177
|
+
The core active file remains strict JSON. The first line of the annotated
|
|
178
|
+
`config.example.jsonc` points to all split files and documents every supported
|
|
179
|
+
core setting. Setup preserves existing files and stages readable legacy
|
|
180
|
+
`config.json#mcpServers` / `config.json#extensions` before creating empty
|
|
181
|
+
authoritative split files. It tells you the exact environment-variable name to
|
|
182
|
+
set and exits so you can restart the terminal. Existing active files are
|
|
183
|
+
validated first; an invalid file is reported without creating or overwriting
|
|
184
|
+
configuration. For a custom provider, setup asks for an `apiKeyEnv` name such
|
|
185
|
+
as `MY_LLM_API_KEY`, not the API key itself. `config.json` stores that name
|
|
186
|
+
only; after setup, set the environment variable with exactly that name to the
|
|
187
|
+
provider's actual API key. KodaX does not set the OS environment variable for
|
|
188
|
+
you. You can also configure it directly:
|
|
157
189
|
|
|
158
190
|
```bash
|
|
159
191
|
# macOS / Linux
|
|
@@ -163,6 +195,54 @@ export ZHIPU_API_KEY=your_api_key
|
|
|
163
195
|
$env:ZHIPU_API_KEY="your_api_key"
|
|
164
196
|
```
|
|
165
197
|
|
|
198
|
+
### 2.1 Activate the optional sandbox
|
|
199
|
+
|
|
200
|
+
`kodax setup` and first-run setup check sandbox readiness. You can inspect or
|
|
201
|
+
activate it explicitly:
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
kodax sandbox doctor
|
|
205
|
+
kodax sandbox setup
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
- Windows uses a restricted sandbox account and network policy. A normal
|
|
209
|
+
terminal is sufficient; approve the one-time UAC prompt.
|
|
210
|
+
- macOS uses Seatbelt/`sandbox-exec` and requires ripgrep
|
|
211
|
+
(`brew install ripgrep`).
|
|
212
|
+
- Linux uses bubblewrap and requires `bubblewrap`, `socat`, and `ripgrep`
|
|
213
|
+
(install them with your distro's `apt`, `dnf`, or `pacman`).
|
|
214
|
+
|
|
215
|
+
KodaX never runs `sudo` or a package manager automatically. If the sandbox is
|
|
216
|
+
not active, deterministic safe operations and Auto[LLM] decisions keep the
|
|
217
|
+
same permission behavior; only OS-level containment is absent. Ordinary runs
|
|
218
|
+
do not repeatedly prompt for setup. In the REPL, `/sandbox` refreshes readiness
|
|
219
|
+
and diagnostics without activating the backend or requesting elevation.
|
|
220
|
+
Per-command sandbox routing remains internal and is not shown in normal command
|
|
221
|
+
history. SDK embedders can use the same capability independently through
|
|
222
|
+
`@kodax-ai/kodax/sandbox`; see the
|
|
223
|
+
[SDK sandbox guide](docs/SDK_EMBEDDER_GUIDE.md#30-standalone-sandbox-sdk-v0778).
|
|
224
|
+
|
|
225
|
+
Credential-shaped environment variables are filtered from model-issued shell
|
|
226
|
+
commands by default. To expose exact host variables to those command targets,
|
|
227
|
+
including ASRT, add only their names to the user-level core config:
|
|
228
|
+
|
|
229
|
+
```json
|
|
230
|
+
{
|
|
231
|
+
"sandbox": {
|
|
232
|
+
"envPass": ["GH_TOKEN", "GITHUB_TOKEN", "OPENAI_API_KEY"]
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
The default list is empty. Values remain in the host environment and are never
|
|
238
|
+
stored in `config.json`; project configuration cannot extend the list.
|
|
239
|
+
Matching is exact (case-insensitive on Windows), and execution-control
|
|
240
|
+
variables such as `NODE_OPTIONS` and `BASH_ENV` remain blocked. Restart KodaX
|
|
241
|
+
after changing the host variables or this setting; stop/restart a persistent
|
|
242
|
+
KodaX daemon so it receives the new environment and configuration.
|
|
243
|
+
SDK callers pass the same shape per Run as `KodaXOptions.sandbox`, so concurrent
|
|
244
|
+
Runs can use different lists without mutating process-global configuration.
|
|
245
|
+
|
|
166
246
|
For Qwen Token Plan, select `qwen-token-plan` and use its separate credential;
|
|
167
247
|
`QWEN_API_KEY` does not authenticate this route:
|
|
168
248
|
|
|
@@ -202,6 +282,11 @@ If you need a custom base URL or an OpenAI/Anthropic-compatible endpoint, define
|
|
|
202
282
|
}
|
|
203
283
|
```
|
|
204
284
|
|
|
285
|
+
Here, `"apiKeyEnv": "MY_LLM_API_KEY"` is a reference to an environment-variable
|
|
286
|
+
name, not an API key value. Put the custom provider's actual API key in the
|
|
287
|
+
`MY_LLM_API_KEY` environment variable, then close the current terminal and open
|
|
288
|
+
a new one before running `kodax`.
|
|
289
|
+
|
|
205
290
|
`userAgentMode` defaults to `"compat"`, which sends `KodaX` instead of the official SDK User-Agent. Switch it to `"sdk"` only when your gateway expects the upstream SDK header.
|
|
206
291
|
For custom reasoning models, `reasoning: { efforts, default }` is the preferred v0.7.57 shape; use `"reasoning": "none"` for models without thinking capability. SDK hosts should render effort pickers from `reasoningProfile.supportedEfforts` / `defaultEffort` rather than assuming a fixed five-option ladder.
|
|
207
292
|
|
|
@@ -218,36 +303,45 @@ Some OpenAI-compatible reasoning models require KodaX to replay the previous ass
|
|
|
218
303
|
"baseUrl": "https://example.com/v1",
|
|
219
304
|
"apiKeyEnv": "MY_DEEPSEEK_API_KEY",
|
|
220
305
|
"model": "deepseek-v4-flash",
|
|
221
|
-
"
|
|
306
|
+
"maxOutputTokensField": "max_tokens",
|
|
307
|
+
"reasoningPreset": "deepseek-v4-flash-openai",
|
|
222
308
|
"replayReasoningContent": true
|
|
223
309
|
}
|
|
224
310
|
]
|
|
225
311
|
}
|
|
226
312
|
```
|
|
227
313
|
|
|
228
|
-
|
|
314
|
+
DeepSeek Chat Completions uses `max_tokens`; OpenAI proper defaults to
|
|
315
|
+
`max_completion_tokens`. Keep `replayReasoningContent` unset or `false` for
|
|
316
|
+
OpenAI proper and gateways that reject unknown assistant-message fields. If one
|
|
317
|
+
gateway routes mixed models, prefer per-model overrides for both fields:
|
|
229
318
|
|
|
230
319
|
```json
|
|
231
320
|
{
|
|
232
321
|
"models": [
|
|
233
|
-
{
|
|
322
|
+
{
|
|
323
|
+
"id": "deepseek-v4-flash",
|
|
324
|
+
"maxOutputTokensField": "max_tokens",
|
|
325
|
+
"reasoningPreset": "deepseek-v4-flash-openai",
|
|
326
|
+
"replayReasoningContent": true
|
|
327
|
+
},
|
|
234
328
|
{ "id": "gpt-5", "replayReasoningContent": false }
|
|
235
329
|
]
|
|
236
|
-
}
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
If a custom endpoint is confirmed to support cache-affinity routing, set
|
|
240
|
-
`"promptCacheAffinity": true`. Anthropic-compatible requests then receive the
|
|
241
|
-
opaque logical-context key as `metadata.user_id`; OpenAI-compatible requests
|
|
242
|
-
receive `prompt_cache_key`. The default is `false` because some strict
|
|
243
|
-
compatible gateways reject unknown request fields. Do not enable it solely
|
|
244
|
-
because an endpoint claims protocol compatibility.
|
|
245
|
-
|
|
246
|
-
Sidecar verifier judge calls use provider-level forced tool choice when supported. If a compatible endpoint rejects the `tool_choice` parameter, KodaX retries that verifier request once without forced tool choice and still fails open rather than blocking the main Worker.
|
|
330
|
+
}
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
If a custom endpoint is confirmed to support cache-affinity routing, set
|
|
334
|
+
`"promptCacheAffinity": true`. Anthropic-compatible requests then receive the
|
|
335
|
+
opaque logical-context key as `metadata.user_id`; OpenAI-compatible requests
|
|
336
|
+
receive `prompt_cache_key`. The default is `false` because some strict
|
|
337
|
+
compatible gateways reject unknown request fields. Do not enable it solely
|
|
338
|
+
because an endpoint claims protocol compatibility.
|
|
339
|
+
|
|
340
|
+
Sidecar verifier judge calls use provider-level forced tool choice when supported. If a compatible endpoint rejects the `tool_choice` parameter, KodaX retries that verifier request once without forced tool choice and still fails open rather than blocking the main Worker.
|
|
247
341
|
|
|
248
342
|
#### Opting a custom provider into image / vision input (FEATURE_134 v0.7.40)
|
|
249
343
|
|
|
250
|
-
If your custom provider's underlying model supports image input (vision), add a `capabilityProfile.multimodalSupport: "image-input"` block so KodaX does not artificially block multimodal requests at the SA-path policy gate. Built-in vision-capable aliases (Anthropic, OpenAI,
|
|
344
|
+
If your custom provider's underlying model supports image input (vision), add a `capabilityProfile.multimodalSupport: "image-input"` block so KodaX does not artificially block multimodal requests at the SA-path policy gate. Built-in vision-capable aliases (Anthropic, OpenAI, compatible aliases such as Kimi, Qwen, Zhipu, MiniMax, MiMo, Ark, plus Gemini-CLI via the CLI's `@<path>` file-include syntax) already ship with this flag enabled by default. DeepSeek V4 and Codex-CLI are text-only; custom providers need to opt in when their underlying model supports image input.
|
|
251
345
|
|
|
252
346
|
```json
|
|
253
347
|
{
|
|
@@ -406,66 +500,124 @@ clarification required to finish the current request, emits budget-approval
|
|
|
406
500
|
state only for eligible Sidecar revisions, and preserves structured blocked
|
|
407
501
|
reasons across embedded and daemon Runtime boundaries.
|
|
408
502
|
|
|
409
|
-
**v0.7.76 Kimi Code catalog refresh:** `kimi-code` now defaults to the official
|
|
410
|
-
`k3-256k` Model ID and sends it unchanged. `kimi-for-coding` remains selectable
|
|
411
|
-
for K2.7 Code, alongside `kimi-for-coding-highspeed` and the 1M `k3` tier. K3
|
|
412
|
-
supports `low` / `high` / `max` reasoning with `high` as default; the 256K
|
|
413
|
-
route supports image input but not video input.
|
|
414
|
-
|
|
415
|
-
**v0.7.77 release
|
|
416
|
-
problem-solving patterns through the existing Actor control plane instead of
|
|
417
|
-
using a fixed topology or hidden Workflow. Optional strategy metadata becomes
|
|
418
|
-
a bounded, fact-only `PatternTrace`; the existing Sidecar remains the only
|
|
419
|
-
terminal-answer quality judge. Governed memory can also react sparsely after a
|
|
420
|
-
tool failure, verification failure, or committed compaction and place at most
|
|
421
|
-
three prompt-safe, low-authority evidence items before the next Action-LLM
|
|
422
|
-
request. The default path adds no selector model call; SDK hosts may opt into
|
|
423
|
-
`memoryRecallRunner` in process. Public `kimi` also gains the 1M `kimi-k3`
|
|
424
|
-
route while retaining K2.7 Code as its default. See the
|
|
425
|
-
[v0.7.77 design](docs/features/v0.7.77.md) and
|
|
426
|
-
[release checklist](docs/release.md#v0777-release-ready-candidate-verification).
|
|
427
|
-
The frozen F274/F275 paid evaluation completed with `recommend-ship` from the
|
|
428
|
-
final F274 Layer 2/Layer 3 reviews and the F275 pilot review, followed by a
|
|
429
|
-
joint `SHIP` decision for the deterministic contracts. Semantic memory
|
|
430
|
-
selection remains experimental and host opt-in; no task-quality, token, or
|
|
431
|
-
latency improvement is claimed.
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
and
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
[
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
503
|
+
**v0.7.76 Kimi Code catalog refresh:** `kimi-code` now defaults to the official
|
|
504
|
+
`k3-256k` Model ID and sends it unchanged. `kimi-for-coding` remains selectable
|
|
505
|
+
for K2.7 Code, alongside `kimi-for-coding-highspeed` and the 1M `k3` tier. K3
|
|
506
|
+
supports `low` / `high` / `max` reasoning with `high` as default; the 256K
|
|
507
|
+
route supports image input but not video input.
|
|
508
|
+
|
|
509
|
+
**v0.7.77 release:** AMA now chooses and composes six named
|
|
510
|
+
problem-solving patterns through the existing Actor control plane instead of
|
|
511
|
+
using a fixed topology or hidden Workflow. Optional strategy metadata becomes
|
|
512
|
+
a bounded, fact-only `PatternTrace`; the existing Sidecar remains the only
|
|
513
|
+
terminal-answer quality judge. Governed memory can also react sparsely after a
|
|
514
|
+
tool failure, verification failure, or committed compaction and place at most
|
|
515
|
+
three prompt-safe, low-authority evidence items before the next Action-LLM
|
|
516
|
+
request. The default path adds no selector model call; SDK hosts may opt into
|
|
517
|
+
`memoryRecallRunner` in process. Public `kimi` also gains the 1M `kimi-k3`
|
|
518
|
+
route while retaining K2.7 Code as its default. See the
|
|
519
|
+
[v0.7.77 design](docs/features/v0.7.77.md) and
|
|
520
|
+
[release checklist](docs/release.md#v0777-release-ready-candidate-verification).
|
|
521
|
+
The frozen F274/F275 paid evaluation completed with `recommend-ship` from the
|
|
522
|
+
final F274 Layer 2/Layer 3 reviews and the F275 pilot review, followed by a
|
|
523
|
+
joint `SHIP` decision for the deterministic contracts. Semantic memory
|
|
524
|
+
selection remains experimental and host opt-in; no task-quality, token, or
|
|
525
|
+
latency improvement is claimed.
|
|
526
|
+
|
|
527
|
+
**v0.7.78 evidence-gated learning, setup, and permission/sandbox release:**
|
|
528
|
+
Background learning is Memory-first. Only repeated independently verified
|
|
529
|
+
evidence, or an explicit preserve-as-Skill request with verified terminal
|
|
530
|
+
evidence, can admit a low-risk declarative Skill to a bounded immutable
|
|
531
|
+
project canary; three exact-revision uses and independently verified success
|
|
532
|
+
are required before automatic project trust. Every revision remains visible
|
|
533
|
+
and reversible in `/learn`. Protected/formal Skills, global promotion, and
|
|
534
|
+
Extension authoring remain explicit user actions.
|
|
535
|
+
|
|
536
|
+
First-run setup now creates and validates the split core/MCP/Extensions/A2A
|
|
537
|
+
files and annotated templates without overwriting existing configuration or
|
|
538
|
+
collecting secrets. Auto[LLM] admits precisely modeled ordinary reads and
|
|
539
|
+
workspace/temp mutations before classifier latency, retries classifier
|
|
540
|
+
infrastructure failure once, then falls back at the Accept-edits boundary
|
|
541
|
+
without switching to rules. ASRT is optional execution containment rather
|
|
542
|
+
than permission authority; `/sandbox` is the explicit diagnostic surface, and
|
|
543
|
+
SDK hosts can use the standalone `/sandbox` subpath without a silent
|
|
544
|
+
unsandboxed fallback. KodaX's workspace containment denies reads from common
|
|
545
|
+
home credential paths and the complete resolved agent home without turning
|
|
546
|
+
ordinary external reads into an allowlist. See the
|
|
547
|
+
[v0.7.78 design](docs/features/v0.7.78.md), the
|
|
548
|
+
[release checklist](docs/release.md#v0778-release-verification), and
|
|
549
|
+
[SDK guide sections 29–30](docs/SDK_EMBEDDER_GUIDE.md#29-evidence-gated-background-skill-learning-feature_263-v0778).
|
|
550
|
+
|
|
551
|
+
The release closure also preserves intent across adjacent surfaces: static
|
|
552
|
+
Skill instructions load in Edit/Plan without granting later side effects,
|
|
553
|
+
dynamic Skill commands require an explicit host-controlled executor, root AMA
|
|
554
|
+
uses the governed `memory_intent` lifecycle (including explicit intent captured
|
|
555
|
+
before a later cancellation), Workflow Actor waits remain
|
|
556
|
+
unbounded unless the workflow sets a deadline, and Runtime Auto capability v4
|
|
557
|
+
advertises `fallbackPersistsEngine:false` across embedded, Worker, and daemon
|
|
558
|
+
hosts. Actor ownership additionally uses Runtime identity rather than PID alone,
|
|
559
|
+
so PID reuse cannot pin a crashed owner. The resume Session picker also renders
|
|
560
|
+
timestamps in the host's local timezone.
|
|
561
|
+
|
|
562
|
+
**v0.7.79 release-preparation candidate:** Configured outbound A2A Agents can persist two
|
|
563
|
+
independent, default-deny network permissions: private-address access and
|
|
564
|
+
non-loopback plaintext HTTP. The embedded Worker and shared daemon reconcile
|
|
565
|
+
and execute the same authorized configuration. Runtime embedders also gain one
|
|
566
|
+
authoritative Session status, bounded read-only diagnostics, byte-preserving
|
|
567
|
+
Session export, strict transcript observation, a provenance-checked ordinary
|
|
568
|
+
conversation projection, and bounded streaming-event coalescing with
|
|
569
|
+
capability-gated idle daemon upgrade. Standalone child-process, Session lineage,
|
|
570
|
+
shell cleanup, packaged sidecar, and parallel admission paths receive the
|
|
571
|
+
corresponding release hardening.
|
|
572
|
+
|
|
573
|
+
OpenAI-compatible custom providers can now choose `max_tokens` or
|
|
574
|
+
`max_completion_tokens` per provider or model. DeepSeek V4 Flash and Pro use
|
|
575
|
+
separate reasoning profiles and are advertised as text-only. See the
|
|
576
|
+
[v0.7.79 design](docs/features/v0.7.79.md) and
|
|
577
|
+
[release preparation checklist](docs/release.md#v0779-release-preparation).
|
|
578
|
+
FEATURE_280 was explicitly rescheduled to v0.7.81 and is not represented as
|
|
579
|
+
shipped by this candidate.
|
|
580
|
+
Issue 256 was explicitly rescheduled to v0.7.84 and is likewise not represented
|
|
581
|
+
as shipped by this candidate.
|
|
582
|
+
|
|
583
|
+
The v0.7.77 release also adds an opt-in, host-configurable Shell Execution Contract.
|
|
584
|
+
Runtime Session settings or an individual Run can select `pwsh`, Windows
|
|
585
|
+
PowerShell, `cmd`, `bash`, `zsh`, or an explicit Git Bash executable; KodaX
|
|
586
|
+
resolves the shell environment in the effective project cwd and then executes
|
|
587
|
+
the command through that same interpreter. Resolved environments are isolated
|
|
588
|
+
by contract and cwd, expire after a bounded TTL, and can be explicitly
|
|
589
|
+
refreshed. Provider credentials and execution-control variables are removed
|
|
590
|
+
before profile/setup code and again before the command starts. Credential-shaped
|
|
591
|
+
variables are also filtered on the legacy platform-shell path; explicit names
|
|
592
|
+
in user-level `sandbox.envPass` are restored only for the final command target.
|
|
593
|
+
When `shellExecution` is absent, the established interpreter path is unchanged. See
|
|
594
|
+
[SDK Embedder Guide section 28](docs/SDK_EMBEDDER_GUIDE.md#28-host-configurable-shell-execution-contract-v0777)
|
|
595
|
+
and the [Issue 214 regression guide](docs/test-guides/ISSUE_214_v0.7.77_REGRESSION_GUIDE.md).
|
|
596
|
+
|
|
597
|
+
Kimi Code requests also receive a stable, opaque prompt-cache affinity key
|
|
598
|
+
derived from the logical Runtime context. It is reused across Runs, retries,
|
|
599
|
+
fallback, resume, and compaction; recursive child Agents receive distinct keys
|
|
600
|
+
based on their canonical Agent path rather than their temporary transcript
|
|
601
|
+
Session. Public Kimi and official OpenAI use the corresponding
|
|
602
|
+
`prompt_cache_key` field, while other compatible gateways remain opt-in because
|
|
603
|
+
some reject unknown request fields. This improves routing stability but cannot
|
|
604
|
+
override Provider TTL or cache sharding. See the
|
|
605
|
+
[Issue 215 regression guide](docs/test-guides/ISSUE_215_v0.7.77_REGRESSION_GUIDE.md).
|
|
606
|
+
Codex CLI cache reads/writes and Gemini CLI cache reads now flow through the
|
|
607
|
+
CLI bridge and Runtime diagnostics without estimation. A reported `0` remains
|
|
608
|
+
distinct from an unreported field; see the
|
|
609
|
+
[Issue 216 regression guide](docs/test-guides/ISSUE_216_v0.7.77_REGRESSION_GUIDE.md).
|
|
610
|
+
The bridge also starts the first native CLI turn fresh, resumes only a native
|
|
611
|
+
session ID reported by that CLI, creates fresh ACP sessions for stateless
|
|
612
|
+
calls, recreates a closed pseudo transport, and validates the process exit even
|
|
613
|
+
after a terminal CLI event. User cancellation stays quiet, while hard/idle
|
|
614
|
+
timeout aborts remain failures eligible for Runtime recovery, and a CLI that
|
|
615
|
+
reports success but never exits is terminated at its configured deadline; see the
|
|
616
|
+
[Issue 217 regression guide](docs/test-guides/ISSUE_217_v0.7.77_REGRESSION_GUIDE.md).
|
|
617
|
+
|
|
618
|
+
One daemon owns many sessions. Different sessions may run concurrently; starts
|
|
619
|
+
within the same session are queued so that only one run is active for that
|
|
620
|
+
session. Multiple `kodax` processes can attach to the same daemon and open or
|
|
469
621
|
observe the same session. FEATURE_269 adds atomic snapshot-plus-stream joining,
|
|
470
622
|
durable idempotent mutations, revision-safe settings and grants, transport-safe
|
|
471
623
|
AskUser/permission responses, run-scoped credential and Host Tool bridges, and
|
|
@@ -488,11 +640,13 @@ The Space/IDE shared-daemon contract is documented in
|
|
|
488
640
|
|
|
489
641
|
**v0.7.72–v0.7.73 Runtime permission contract:** Auto Mode is owned by the Runtime session,
|
|
490
642
|
not by a UI hook. It reuses its LLM/rules guardrail across turns, classifies
|
|
491
|
-
before the shared permission bridge, and persists
|
|
492
|
-
|
|
643
|
+
before the shared permission bridge, and persists explicit engine selection.
|
|
644
|
+
The same session settings can select a classifier model and bounded
|
|
493
645
|
timeout; `auto` defaults to LLM classification and fails with a recoverable
|
|
494
646
|
configuration error when no effective classifier model exists, rather than
|
|
495
|
-
silently falling back.
|
|
647
|
+
silently falling back. In v0.7.78, classifier failures retry once and then use
|
|
648
|
+
the Accept-edits safety boundary; they never change the engine to rules.
|
|
649
|
+
Runtime permission prompts offer opaque, exact
|
|
496
650
|
allow-once/session/persistent grant suggestions; persistent grants are
|
|
497
651
|
daemon-owned and revisioned. Host plan exit is exposed only when the host
|
|
498
652
|
supplies an approval callback. See the [Runtime Auto Mode integration guide](docs/SDK_EMBEDDER_GUIDE.md#24-runtime-owned-auto-mode-and-plan-approval-bridges-v0772v0773).
|
|
@@ -510,7 +664,7 @@ kodax --repo-intelligence full --repo-intelligence-trace
|
|
|
510
664
|
|
|
511
665
|
## Architecture
|
|
512
666
|
|
|
513
|
-
KodaX uses a **monorepo architecture** with npm workspaces. Source layout currently has 4 workspace packages; published as a single bundled npm package `@kodax-ai/kodax` with
|
|
667
|
+
KodaX uses a **monorepo architecture** with npm workspaces. Source layout currently has 4 workspace packages; published as a single bundled npm package `@kodax-ai/kodax` with 12 SDK subpath exports (`/agent`, `/llm`, `/coding`, `/media`, `/repl`, `/skills`, `/mcp`, `/session`, `/runtime`, `/sandbox`, `/a2a`, `/experimental-memory`; ADR-024 + ADR-032 + ADR-038, with ADR-036 consolidation):
|
|
514
668
|
|
|
515
669
|
```
|
|
516
670
|
KodaX/
|
|
@@ -536,9 +690,9 @@ KodaX/
|
|
|
536
690
|
│
|
|
537
691
|
├── src/ # CLI entry + SDK subpath entries
|
|
538
692
|
│ ├── kodax_cli.ts # Main CLI entry point (bin: `kodax`)
|
|
539
|
-
│ └── sdk-*.ts # SDK subpath re-exports → @kodax-ai/kodax/{agent,llm,coding,media,repl,skills,mcp,session,runtime,a2a,experimental-memory}
|
|
693
|
+
│ └── sdk-*.ts # SDK subpath re-exports → @kodax-ai/kodax/{agent,llm,coding,media,repl,skills,mcp,session,runtime,sandbox,a2a,experimental-memory}
|
|
540
694
|
│
|
|
541
|
-
└── package.json #
|
|
695
|
+
└── package.json # Publish-shaped exports; release.mjs only toggles private during pack/publish
|
|
542
696
|
```
|
|
543
697
|
|
|
544
698
|
### Package Dependencies
|
|
@@ -585,9 +739,9 @@ Source-side workspace package names (`@kodax-ai/*`). npm consumers install the s
|
|
|
585
739
|
KodaX has two layers that consumers should understand separately:
|
|
586
740
|
|
|
587
741
|
- **Source-side**: 4 workspace packages above (what developers see when reading the repo).
|
|
588
|
-
- **npm-published**: a single bundled package `@kodax-ai/kodax` with
|
|
742
|
+
- **npm-published**: a single bundled package `@kodax-ai/kodax` with 12 SDK subpaths (what SDK consumers `import` from). The subpaths are split into two roles:
|
|
589
743
|
- **Full-package subpaths** (`/agent`, `/llm`, `/coding`, `/repl`) — each one maps 1:1 to a source workspace and exposes its complete public API.
|
|
590
|
-
- **Integration and narrow subpaths** (`/media`, `/skills`, `/mcp`, `/session`, `/runtime`, `/a2a`, `/experimental-memory`) — focused host surfaces. `/a2a` composes the neutral F258 plane with the Runtime facade; it does not add A2A wire types to `/agent`.
|
|
744
|
+
- **Integration and narrow subpaths** (`/media`, `/skills`, `/mcp`, `/session`, `/runtime`, `/sandbox`, `/a2a`, `/experimental-memory`) — focused host surfaces. `/a2a` composes the neutral F258 plane with the Runtime facade; it does not add A2A wire types to `/agent`.
|
|
591
745
|
|
|
592
746
|
| Source package | npm subpath | Type | What you get | Example consumer |
|
|
593
747
|
|---|---|---|---|---|
|
|
@@ -601,6 +755,7 @@ KodaX has two layers that consumers should understand separately:
|
|
|
601
755
|
| `packages/repl` | `@kodax-ai/kodax/repl` | Full package | Ink TUI + permission modes + commands (217 exports) | Terminal-UI consumers |
|
|
602
756
|
| `packages/repl` | `@kodax-ai/kodax/session` | **Narrow subset** | Session management only — `listSessions` / `loadFullTranscript` / `appendClientNotice` / `forkSession` / `compactSession` / `watchSessions` / ... (17 exports) | IDE plugins and desktop hosts reading session history |
|
|
603
757
|
| `src` | `@kodax-ai/kodax/runtime` | Host API | Embedded/Worker/daemon runtime facade, sessions/runs/events/permissions/catalog/MCP/artifacts/diagnostics/external agents, daemon protocol schema (10 exports) | SDK hosts, Space/IDE clients, daemon clients |
|
|
758
|
+
| `src` | `@kodax-ai/kodax/sandbox` | Host API | Explicit ASRT capability/doctor/setup and host-owned contained command execution; unavailability never means silent ordinary execution | SDK hosts that need standalone process containment |
|
|
604
759
|
| `src` | `@kodax-ai/kodax/a2a` | Integration edge | A2A 1.0 Agent Card discovery, JSON-RPC/SSE F258 executor, safe fetch policy, and authenticated Runtime-backed Agent server | Agent orchestrators and KodaX hosts |
|
|
605
760
|
|
|
606
761
|
**Rule of thumb**: if you need Runner / Agent / fan-out, import from `/agent`. If you only need skills or mcp APIs, import from `/skills` or `/mcp` to get a smaller bundle. The narrow subsets are subsets of the full packages — they do **not** expose extra symbols.
|
|
@@ -633,7 +788,7 @@ KodaX has two layers that consumers should understand separately:
|
|
|
633
788
|
|
|
634
789
|
**Experimental Memory Agent SDK (FEATURE_260, v0.7.68)**: `/experimental-memory` exposes the thin agent-layer `MemoryAgent` and scoped `MemorySession` lifecycle over the existing governed F228 plane. Passive recall is zero-wait; `query()` is read-only and deliberate; durable changes still require the proposal/preview/fingerprint/apply path. The Action LLM remains the final decision maker, recalled content stays low-authority, and safety/scope gates remain deterministic. See the [direct session and boundary guide](docs/SDK_EMBEDDER_GUIDE.md#21-experimental-governed-memory--experimental-memory-feature_260-v0768).
|
|
635
790
|
|
|
636
|
-
**Bidirectional A2A 1.0 (FEATURE_267, v0.7.69)**: `/a2a` discovers allowed Agent Cards and installs a JSON-RPC/SSE executor through the existing F258 plane. Configured outbound Agents are also registered automatically as `external:<name>` in embedded CLI and user-daemon Runtimes, so the main Agent can orchestrate them without host code. One `a2a.json` may hold many outbound registrations and at most one inbound server, which publishes either the Runtime default or one validated `~/.kodax/agents/*.md` Agent behind an authenticated Runtime facade. The built-in listener is loopback-only; public deployment uses `handle()` behind host-owned TLS and authorization. A2A 0.3, gRPC, HTTP+JSON, push notifications, and automatic public exposure are not advertised. See the [client/server recipes and security boundaries](docs/SDK_EMBEDDER_GUIDE.md#22-bidirectional-a2a-10--a2a-feature_267-v0769).
|
|
791
|
+
**Bidirectional A2A 1.0 (FEATURE_267, v0.7.69)**: `/a2a` discovers allowed Agent Cards and installs a JSON-RPC/SSE executor through the existing F258 plane. Configured outbound Agents are also registered automatically as `external:<name>` in embedded CLI and user-daemon Runtimes, so the main Agent can orchestrate them without host code. One `a2a.json` may hold many outbound registrations and at most one inbound server, which publishes either the Runtime default or one validated `~/.kodax/agents/*.md` Agent behind an authenticated Runtime facade. The built-in listener is loopback-only and will not return a port blocked by Fetch-compatible clients; public deployment uses `handle()` behind host-owned TLS and authorization. A2A 0.3, gRPC, HTTP+JSON, push notifications, and automatic public exposure are not advertised. See the [client/server recipes and security boundaries](docs/SDK_EMBEDDER_GUIDE.md#22-bidirectional-a2a-10--a2a-feature_267-v0769).
|
|
637
792
|
|
|
638
793
|
**A2A interoperability and authentication hardening** keeps a discovered
|
|
639
794
|
interface on the trusted Agent Card origin and sends credentials only when one
|
|
@@ -671,6 +826,10 @@ kodax a2a add research https://agent.example/.well-known/agent-card.json --effec
|
|
|
671
826
|
kodax a2a test research
|
|
672
827
|
kodax a2a call research "Summarize this topic"
|
|
673
828
|
|
|
829
|
+
# Explicitly authorize a private plaintext endpoint (prefer HTTPS when available)
|
|
830
|
+
kodax a2a add intranet http://10.20.30.40/.well-known/agent-card.json \
|
|
831
|
+
--allow-private --allow-insecure-http --effect read
|
|
832
|
+
|
|
674
833
|
# Stage an OAuth-protected Agent, then hot-activate/deactivate it
|
|
675
834
|
export RESEARCH_A2A_CLIENT_SECRET='provisioned-by-your-authorization-server'
|
|
676
835
|
# PowerShell: $env:RESEARCH_A2A_CLIENT_SECRET='provisioned-by-your-authorization-server'
|
|
@@ -693,7 +852,8 @@ kodax a2a serve # loopback http://127.0.0.1:8765
|
|
|
693
852
|
```
|
|
694
853
|
|
|
695
854
|
MCP, A2A, and Extension declarations live in one user file per domain under
|
|
696
|
-
`~/.kodax/integrations/`. Use `kodax config
|
|
855
|
+
`~/.kodax/integrations/`. Use `kodax config paths`,
|
|
856
|
+
`kodax config template <core|mcp|a2a|extensions>`,
|
|
697
857
|
`kodax integrations migrate --apply`, and the `kodax mcp`, `kodax a2a`, or
|
|
698
858
|
`kodax extensions` commands to manage them. Migration imports only legacy
|
|
699
859
|
`config.json#mcpServers` and `config.json#extensions`; A2A has no legacy source.
|
|
@@ -713,7 +873,12 @@ the Card by default unless `--no-test` is supplied, while `a2a test` performs
|
|
|
713
873
|
discovery/security planning without requesting an OAuth token. The fixed
|
|
714
874
|
`KODAX_A2A_TOKEN` example is an operator-provisioned compatibility credential;
|
|
715
875
|
KodaX does not generate or issue it. Disabled entries remain available for
|
|
716
|
-
later re-enable.
|
|
876
|
+
later re-enable. Private-address access and non-loopback plaintext HTTP are
|
|
877
|
+
independent, persisted, default-deny permissions (`--allow-private` and
|
|
878
|
+
`--allow-insecure-http`); exact loopback HTTP remains available without either.
|
|
879
|
+
OAuth token endpoints retain their stricter HTTPS-or-exact-loopback rule.
|
|
880
|
+
Worker-hosted SDK Runtimes can load this same configured plane inside the Worker
|
|
881
|
+
owner with `worker: { configuredA2A: true }`. `a2a serve` loads
|
|
717
882
|
its configured MCP/Extension capability surface before listening and pins that
|
|
718
883
|
execution authority; it hot-reloads publication, authentication, and limits.
|
|
719
884
|
|
|
@@ -846,10 +1011,12 @@ import { loadConfig } from '@kodax-ai/kodax/repl'; // REPL config /
|
|
|
846
1011
|
import { createMcpManager } from '@kodax-ai/kodax/mcp'; // MCP popout manager (v0.7.42)
|
|
847
1012
|
import { listSessions } from '@kodax-ai/kodax/session'; // session history helpers
|
|
848
1013
|
import { createKodaXRuntime } from '@kodax-ai/kodax/runtime'; // embedded/daemon runtime API
|
|
1014
|
+
import { runKodaXSandboxed } from '@kodax-ai/kodax/sandbox'; // standalone ASRT containment
|
|
849
1015
|
import { createKodaXA2AServer } from '@kodax-ai/kodax/a2a'; // A2A 1.0 client/server edge
|
|
1016
|
+
import { createMemoryAgent } from '@kodax-ai/kodax/experimental-memory'; // opt-in memory SDK
|
|
850
1017
|
```
|
|
851
1018
|
|
|
852
|
-
All
|
|
1019
|
+
All 13 SDK entries (root + 12 subpaths) share internal code via ESM chunk splitting — importing from `/agent` does not pull in `/repl`'s Ink + React surface.
|
|
853
1020
|
|
|
854
1021
|
For the complete host-facing contract — including embedded/Worker/daemon ownership,
|
|
855
1022
|
external-agent registration and task control, session cursor pagination, workflow
|
|
@@ -1000,16 +1167,19 @@ KodaX provides 3 permission modes for fine-grained control:
|
|
|
1000
1167
|
**Features:**
|
|
1001
1168
|
- In `accept-edits` mode, choosing "always" can persist safe Bash allow-patterns
|
|
1002
1169
|
- Plan mode includes system prompt context for LLM awareness
|
|
1003
|
-
-
|
|
1170
|
+
- Sensitive/protected or unresolved targets enter Auto[LLM]/approval review;
|
|
1171
|
+
ordinary reads outside the project are allowed
|
|
1004
1172
|
- Pattern-based permission: Allow specific Bash commands (e.g., `Bash(npm install)`)
|
|
1005
1173
|
- Unified diff display for write/edit operations
|
|
1006
|
-
- Auto Mode
|
|
1007
|
-
|
|
1008
|
-
|
|
1174
|
+
- Auto Mode first admits exactly modeled safe reads and workspace/temp
|
|
1175
|
+
mutations without classifier latency. Remaining actions are reviewed against
|
|
1176
|
+
bounded user intent and exact operation facts; a safe verdict creates no
|
|
1177
|
+
pending approval request. Classifier failures retry once, then use the
|
|
1178
|
+
Accept-edits safety boundary rather than silently switching to Auto[rules].
|
|
1009
1179
|
- Shift-Tab cycles `Plan -> Edits -> Auto`; Shift+Enter inserts a newline. Auto
|
|
1010
1180
|
immediately displays `Auto[LLM]` or `Auto[RULES]`, and rapid mode changes are
|
|
1011
|
-
persisted in input order. `Auto[RULES]`
|
|
1012
|
-
|
|
1181
|
+
persisted in input order. `Auto[RULES]` remains an explicit/manual engine;
|
|
1182
|
+
use `/auto-engine llm` to select LLM classification.
|
|
1013
1183
|
- Runtime-backed prompts can offer exact `allow once`, `allow this session`,
|
|
1014
1184
|
and `always allow` choices. Return the Runtime-issued opaque suggestion;
|
|
1015
1185
|
never derive or widen a permission rule from the displayed command or path.
|
|
@@ -1176,7 +1346,7 @@ await runKodaX({
|
|
|
1176
1346
|
|
|
1177
1347
|
## SDK Usage
|
|
1178
1348
|
|
|
1179
|
-
KodaX ships as a single npm package `@kodax-ai/kodax` with
|
|
1349
|
+
KodaX ships as a single npm package `@kodax-ai/kodax` with 12 SDK subpath exports (ADR-024 v0.7.39 + ADR-032 v0.7.42 + ADR-038 v0.7.49 + v0.7.56 `/media` + v0.7.64 `/runtime` + v0.7.68 `/experimental-memory` + v0.7.69 `/a2a` + v0.7.78 `/sandbox`). Each subpath is tree-shake-friendly so consumers pull only what they need:
|
|
1180
1350
|
|
|
1181
1351
|
```bash
|
|
1182
1352
|
npm install @kodax-ai/kodax
|
|
@@ -1193,6 +1363,7 @@ import { SkillRegistry } from '@kodax-ai/kodax/skills'; // zero-dep sk
|
|
|
1193
1363
|
import { createMcpManager } from '@kodax-ai/kodax/mcp'; // MCP popout manager (v0.7.42)
|
|
1194
1364
|
import { listSessions } from '@kodax-ai/kodax/session'; // session history helpers
|
|
1195
1365
|
import { createKodaXRuntime } from '@kodax-ai/kodax/runtime'; // embedded/daemon runtime API
|
|
1366
|
+
import { runKodaXSandboxed } from '@kodax-ai/kodax/sandbox'; // explicit standalone containment
|
|
1196
1367
|
import { createKodaXA2AServer } from '@kodax-ai/kodax/a2a'; // A2A 1.0 client/server edge
|
|
1197
1368
|
import { createMemoryAgent } from '@kodax-ai/kodax/experimental-memory'; // opt-in experimental memory SDK
|
|
1198
1369
|
```
|
|
@@ -1359,7 +1530,7 @@ await runInkInteractiveMode({ provider: 'zhipu-coding', effort: 'auto' });
|
|
|
1359
1530
|
| kimi | `KIMI_API_KEY` | Native | kimi-k2.7-code (262,144-token context; `kimi-k3` 1M / `kimi-k2.7-code-highspeed` / `kimi-k2.6` / `kimi-k2.5` via `/model`) |
|
|
1360
1531
|
| kimi-code | `KIMI_CODE_API_KEY` | Native | k3-256k (Moderato+, 256K, direct upstream ID; `k3` 1M / `kimi-for-coding` K2.7 Code / `kimi-for-coding-highspeed` via `/model`) |
|
|
1361
1532
|
| qwen | `QWEN_API_KEY` | Native | qwen3.5-plus |
|
|
1362
|
-
| qwen-token-plan | `QWEN_TOKEN_API_KEY` | Native | qwen3.8-max
|
|
1533
|
+
| qwen-token-plan | `QWEN_TOKEN_API_KEY` | Native | qwen3.8-max (Anthropic-compat; legacy `qwen3.8-max-preview` plus `qwen3.7-max` / `qwen3.7-plus` / `qwen3.6-flash` / `glm-5.2` / `deepseek-v4-pro` via `/model`; all 1M context; image input on both Qwen 3.8 IDs / 3.7 Plus / 3.6 Flash) |
|
|
1363
1534
|
| zhipu | `ZHIPU_API_KEY` | Native | glm-5 (`glm-5.2` 1M ctx / `glm-5.1` / `glm-5-turbo` via `/model`) |
|
|
1364
1535
|
| zhipu-coding | `ZHIPU_CODING_API_KEY` | Native | glm-5.2 (1M ctx; legacy `glm-5.1` and `glm-5-turbo` remain selectable via `/model`) |
|
|
1365
1536
|
| zai-coding | `ZAI_CODING_API_KEY` | Native | glm-5.2 (Zhipu Coding Plan overseas mirror via `api.z.ai`, Anthropic-compat — same model lineup as `zhipu-coding`, served from outside CN) |
|
|
@@ -1368,8 +1539,8 @@ await runInkInteractiveMode({ provider: 'zhipu-coding', effort: 'auto' });
|
|
|
1368
1539
|
| mimo-coding | `MIMO_CODING_API_KEY` | Native | mimo-v2.5-pro (Xiaomi Token Plan, Anthropic-compat) |
|
|
1369
1540
|
| ark-coding | `ARK_CODING_API_KEY` | Native | glm-5.2 (Volcengine Ark Coding Plan — GLM-5.2 (alias: `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) |
|
|
1370
1541
|
| deepseek | `DEEPSEEK_API_KEY` | Native | deepseek-v4-flash (`deepseek-v4-pro` via `/model`) |
|
|
1371
|
-
| gemini-cli |
|
|
1372
|
-
| codex-cli |
|
|
1542
|
+
| gemini-cli | Provider CLI authentication (no KodaX API-key variable) | Prompt-only / CLI bridge | (via gemini CLI) |
|
|
1543
|
+
| codex-cli | Provider CLI authentication (no KodaX API-key variable) | Prompt-only / CLI bridge | (via codex CLI) |
|
|
1373
1544
|
|
|
1374
1545
|
> **Custom providers**: any OpenAI- or Anthropic-compatible endpoint can be added via `customProviders[]` in `~/.kodax/config.json` (CLI) or `registerCustomProviders()` (library). See the [Quick Start](#2-configure-a-provider) for the configuration shape.
|
|
1375
1546
|
|
|
@@ -1484,6 +1655,42 @@ Built-in skills include:
|
|
|
1484
1655
|
- **git-workflow** - Git commit and workflow automation
|
|
1485
1656
|
|
|
1486
1657
|
Skills are stored in `~/.kodax/skills/` and can be extended with custom skills.
|
|
1658
|
+
F263 background learning is Memory-first: a single correction does not create
|
|
1659
|
+
a Skill. Repeated independently verified evidence can create a low-risk,
|
|
1660
|
+
immutable project-scoped testing revision for at most three exact-revision
|
|
1661
|
+
uses. Promotion requires independently verified success. Use `/learn` to
|
|
1662
|
+
inspect, disable, rollback, trust, or reject learned revisions. Protected or
|
|
1663
|
+
formal Skills, user-global promotion, and Extension authoring remain explicit
|
|
1664
|
+
user actions.
|
|
1665
|
+
|
|
1666
|
+
### Promote a learned Skill to the user catalog
|
|
1667
|
+
|
|
1668
|
+
Automatic canary activation and user-catalog promotion are different:
|
|
1669
|
+
|
|
1670
|
+
- independently verified canary success changes `testing` to
|
|
1671
|
+
`active_learned` inside the project-scoped Learned Area;
|
|
1672
|
+
- `/learn promote` is an explicit ownership transfer that copies one exact
|
|
1673
|
+
reviewed `ready` or `active_learned` revision into the formal user Skill
|
|
1674
|
+
catalog and changes its lifecycle to `promoted_user`.
|
|
1675
|
+
|
|
1676
|
+
Inspect the revision first, then promote it by name, slug, or exact capability
|
|
1677
|
+
ID:
|
|
1678
|
+
|
|
1679
|
+
```text
|
|
1680
|
+
/learn show normalize-release-notes
|
|
1681
|
+
/learn promote normalize-release-notes --scope user
|
|
1682
|
+
```
|
|
1683
|
+
|
|
1684
|
+
`--scope user` is the only supported scope and may be omitted. Invalid scopes,
|
|
1685
|
+
unknown options, duplicate scope options, and extra operands fail without
|
|
1686
|
+
changing the catalog. Promotion writes to the configured KodaX user Skill
|
|
1687
|
+
directory—normally `~/.kodax/skills/<slug>/SKILL.md`—and never overwrites
|
|
1688
|
+
different formal Skill content.
|
|
1689
|
+
|
|
1690
|
+
Use `/learn promote --help`, `/learn help promote`, or
|
|
1691
|
+
`/help learn promote` for the dedicated command reference. In the Ink Learning
|
|
1692
|
+
Center, open `/learn`, select an `active_learned` Skill, and choose
|
|
1693
|
+
**Promote to user catalog**.
|
|
1487
1694
|
|
|
1488
1695
|
---
|
|
1489
1696
|
|