@kodax-ai/kodax 0.7.95 → 0.7.96-alpha.2
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 +178 -1
- package/LICENSE +158 -158
- package/README.md +149 -24
- package/README_CN.md +117 -24
- package/config-templates/config.example.jsonc +2 -1
- package/config-templates/integrations/a2a.example.jsonc +91 -91
- 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 +82 -82
- package/dist/builtin/git-workflow/SKILL.md +84 -84
- package/dist/builtin/skill-creator/SKILL.md +127 -127
- package/dist/builtin/skill-creator/agents/analyzer.md +12 -12
- package/dist/builtin/skill-creator/agents/comparator.md +13 -13
- package/dist/builtin/skill-creator/agents/grader.md +13 -13
- package/dist/builtin/skill-creator/references/schemas.md +227 -227
- package/dist/builtin/skill-creator/scripts/aggregate-benchmark.d.ts +46 -46
- package/dist/builtin/skill-creator/scripts/aggregate-benchmark.js +208 -208
- package/dist/builtin/skill-creator/scripts/analyze-benchmark.d.ts +46 -46
- package/dist/builtin/skill-creator/scripts/analyze-benchmark.js +286 -286
- package/dist/builtin/skill-creator/scripts/compare-runs.d.ts +62 -62
- package/dist/builtin/skill-creator/scripts/compare-runs.js +330 -330
- package/dist/builtin/skill-creator/scripts/generate-review.d.ts +33 -33
- package/dist/builtin/skill-creator/scripts/generate-review.js +414 -414
- package/dist/builtin/skill-creator/scripts/grade-evals.d.ts +73 -73
- package/dist/builtin/skill-creator/scripts/grade-evals.js +402 -402
- package/dist/builtin/skill-creator/scripts/improve-description.d.ts +23 -23
- package/dist/builtin/skill-creator/scripts/improve-description.js +160 -160
- package/dist/builtin/skill-creator/scripts/init-skill.d.ts +14 -14
- package/dist/builtin/skill-creator/scripts/init-skill.js +155 -155
- package/dist/builtin/skill-creator/scripts/install-skill.d.ts +29 -29
- package/dist/builtin/skill-creator/scripts/install-skill.js +173 -173
- package/dist/builtin/skill-creator/scripts/package-skill.d.ts +38 -38
- package/dist/builtin/skill-creator/scripts/package-skill.js +121 -121
- package/dist/builtin/skill-creator/scripts/quick-validate.d.ts +8 -8
- package/dist/builtin/skill-creator/scripts/quick-validate.js +163 -163
- package/dist/builtin/skill-creator/scripts/run-eval.d.ts +66 -66
- package/dist/builtin/skill-creator/scripts/run-eval.js +353 -353
- package/dist/builtin/skill-creator/scripts/run-loop.d.ts +49 -49
- package/dist/builtin/skill-creator/scripts/run-loop.js +242 -242
- package/dist/builtin/skill-creator/scripts/run-trigger-eval.d.ts +58 -58
- package/dist/builtin/skill-creator/scripts/run-trigger-eval.js +224 -224
- package/dist/builtin/tdd/SKILL.md +56 -56
- package/dist/chunks/agent-4FABF6WK.js +2 -0
- package/dist/chunks/argument-completer-72VHB2VL.js +2 -0
- package/dist/chunks/{chunk-7JXA3533.js → chunk-4OIQZWA5.js} +223 -226
- package/dist/chunks/{chunk-BNVSKIAB.js → chunk-6BVF3HZ7.js} +136 -136
- package/dist/chunks/chunk-7JZZIFZH.js +501 -0
- package/dist/chunks/chunk-AC7Z2OIY.js +2 -0
- package/dist/chunks/{chunk-JS452J2F.js → chunk-C4KYZAFU.js} +2 -2
- package/dist/chunks/chunk-CHUPIWIF.js +251 -0
- package/dist/chunks/{chunk-C4DTUKTR.js → chunk-GYUU7XLH.js} +5 -4
- package/dist/chunks/{chunk-OK4AXDC5.js → chunk-HAX55GOQ.js} +1 -1
- package/dist/chunks/chunk-JKTJCGO2.js +418 -0
- package/dist/chunks/{chunk-O743AJ5V.js → chunk-LQYETRFK.js} +171 -175
- package/dist/chunks/{chunk-2PEDBGKN.js → chunk-LTUZTQ6W.js} +1 -1
- package/dist/chunks/chunk-LYWDUSKO.js +2 -0
- package/dist/chunks/chunk-NGH6T4FD.js +92 -0
- package/dist/chunks/{chunk-SRIJX5ZP.js → chunk-NVRWCSA5.js} +1 -1
- package/dist/chunks/chunk-O4DS7RIQ.js +384 -0
- package/dist/chunks/chunk-ORXU6OWZ.js +2 -0
- package/dist/chunks/chunk-POTW3O65.js +124 -0
- package/dist/chunks/{chunk-2TM3W3GK.js → chunk-RIQSS56Y.js} +1 -1
- package/dist/chunks/chunk-U27XKEN5.js +407 -0
- package/dist/chunks/{chunk-6ABQJUK6.js → chunk-XUX6OUCA.js} +2 -2
- package/dist/chunks/{client-JDOS3YJR.js → client-4C456K4O.js} +1 -1
- package/dist/chunks/compaction-config-3VQRDFF4.js +2 -0
- package/dist/chunks/{construction-bootstrap-YCWHHUYO.js → construction-bootstrap-AHN7EDGG.js} +1 -1
- package/dist/chunks/dist-BCBQXAGI.js +2 -0
- package/dist/chunks/dist-QK2YDWU6.js +2 -0
- package/dist/chunks/host-VIHV7ADG.js +2 -0
- package/dist/chunks/run-manager-NBVMU3KV.js +2 -0
- package/dist/chunks/utils-MEJZ2IGI.js +2 -0
- package/dist/index.d.ts +22 -21
- package/dist/index.js +7 -7
- package/dist/kodax_bootstrap.js +26 -26
- package/dist/kodax_cli.js +1905 -1882
- package/dist/native/darwin-arm64/LICENSE-APACHE.txt +13 -0
- package/dist/native/darwin-arm64/kodax-text-transaction.node +0 -0
- package/dist/native/darwin-arm64/manifest.json +16 -0
- package/dist/native/darwin-x64/LICENSE-APACHE.txt +13 -0
- package/dist/native/darwin-x64/kodax-text-transaction.node +0 -0
- package/dist/native/darwin-x64/manifest.json +16 -0
- package/dist/native/linux-arm64/LICENSE-APACHE.txt +13 -0
- package/dist/native/linux-arm64/kodax-text-transaction.node +0 -0
- package/dist/native/linux-arm64/manifest.json +16 -0
- package/dist/native/linux-x64/LICENSE-APACHE.txt +13 -0
- package/dist/native/linux-x64/kodax-text-transaction.node +0 -0
- package/dist/native/linux-x64/manifest.json +16 -0
- package/dist/native/win32-x64/LICENSE-APACHE.txt +13 -0
- package/dist/native/win32-x64/NOTICE-windows-sandbox.txt +8 -0
- package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
- package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
- package/dist/native/win32-x64/manifest.json +30 -0
- package/dist/provider-capabilities.json +108 -2
- package/dist/runtime-worker.js +1745 -1727
- package/dist/sandbox-network-broker.js +1715 -0
- package/dist/sdk-a2a.d.ts +13 -12
- package/dist/sdk-a2a.js +1 -1
- package/dist/sdk-agent.d.ts +27 -18
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +107 -58
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-experimental-memory.d.ts +4 -4
- package/dist/sdk-experimental-memory.js +1 -1
- package/dist/sdk-llm.d.ts +9 -10
- 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 +25 -17
- package/dist/sdk-repl.js +1 -1
- package/dist/sdk-runtime.d.ts +41 -17
- package/dist/sdk-runtime.js +1 -1
- package/dist/sdk-sandbox.d.ts +17 -3
- package/dist/sdk-sandbox.js +1 -1
- package/dist/sdk-session.d.ts +8 -7
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/semantic-worker.js +61 -61
- package/dist/types-chunks/{base.d-vopO1rml.d.ts → base.d-COo8E2dk.d.ts} +18 -27
- package/dist/types-chunks/{bash-prefix-extractor.d-B2rxNI4L.d.ts → bash-prefix-extractor.d-DQOlA8cy.d.ts} +72 -52
- package/dist/types-chunks/{capability-learning.d-CE1tm29C.d.ts → capability-learning.d-lRPgA3Or.d.ts} +1 -1
- package/dist/types-chunks/{capsule.d-Y7QRS4J2.d.ts → capsule.d-0zxsgXg_.d.ts} +3 -3
- package/dist/types-chunks/{controller.d-BR-UVeUR.d.ts → controller.d-BTtyIIC1.d.ts} +1 -1
- package/dist/types-chunks/{controller.d-C5noq5-w.d.ts → controller.d-C7tXUcXo.d.ts} +2 -2
- package/dist/types-chunks/{guardrail.d-DqHD-61O.d.ts → guardrail.d-DKTyEHJa.d.ts} +5 -5
- package/dist/types-chunks/{history-retrieval.d-CKU8zmt_.d.ts → history-retrieval.d-CHnL99S7.d.ts} +2 -2
- package/dist/types-chunks/{public-api.d-D7fXaWW8.d.ts → public-api.d-Dx3L3W4Z.d.ts} +7 -4
- package/dist/types-chunks/{repl.d-BYDb14s6.d.ts → repl.d-mO01olIa.d.ts} +5 -5
- package/dist/types-chunks/{resolver.d-CwHUwbdE.d.ts → resolver.d-DlXPjeyx.d.ts} +38 -6
- package/dist/types-chunks/{review-inbox.d-BSgFewyj.d.ts → review-inbox.d-WDSe1nze.d.ts} +1 -1
- package/dist/types-chunks/{run-manager.d-BVJSntpS.d.ts → run-manager.d-DENbbzgR.d.ts} +1 -1
- package/dist/types-chunks/{sdk-session-CqEG84oP.d.ts → sdk-session-DYHGXXH4.d.ts} +3 -3
- package/dist/types-chunks/{shell-command-sets.d-DqaaBwhU.d.ts → shell-command-sets.d-CjFqS4dp.d.ts} +1 -1
- package/dist/types-chunks/{side-query.d-iH0P9ASy.d.ts → side-query.d-j8A3sFv_.d.ts} +2 -2
- package/dist/types-chunks/{types.d-rUOjXych.d.ts → types.d-BbZjR0Wr.d.ts} +1 -1
- package/dist/types-chunks/{types.d-CaTXAW_Q.d.ts → types.d-BkTIKdH6.d.ts} +2 -2
- package/dist/types-chunks/{types.d-C5xQEFcj.d.ts → types.d-DncLrpu_.d.ts} +4 -4
- package/dist/types-chunks/{types.d-CK9A9rpP.d.ts → types.d-Xy0f3x4i.d.ts} +9 -0
- package/dist/types-chunks/{utils.d-CWUyLiXo.d.ts → utils.d-CnxefMos.d.ts} +6 -6
- package/package.json +10 -3
- package/public_docs/README.md +130 -0
- package/public_docs/configuration/sandbox.md +289 -0
- package/public_docs/sdk/embedder-guide.md +6674 -0
- package/scripts/kodax-bin.cjs +28 -28
- package/scripts/production-env.cjs +25 -25
- package/dist/chunks/agent-XXZMXKKA.js +0 -2
- package/dist/chunks/argument-completer-KCYDGTQW.js +0 -2
- package/dist/chunks/chunk-77PNP27P.js +0 -92
- package/dist/chunks/chunk-7QBWHCIZ.js +0 -2
- package/dist/chunks/chunk-BHE66SP3.js +0 -123
- package/dist/chunks/chunk-BR2OSB2I.js +0 -722
- package/dist/chunks/chunk-DSMONSVB.js +0 -407
- package/dist/chunks/chunk-Q5VRWSKG.js +0 -418
- package/dist/chunks/chunk-XWRPOGJN.js +0 -4
- package/dist/chunks/chunk-Y5VIQBT6.js +0 -383
- package/dist/chunks/compaction-config-EGS4577X.js +0 -2
- package/dist/chunks/dist-ITTXQHRJ.js +0 -2
- package/dist/chunks/dist-KFYN3OKD.js +0 -2
- package/dist/chunks/host-VAYADIPW.js +0 -2
- package/dist/chunks/run-manager-52IJZMZJ.js +0 -2
- package/dist/chunks/utils-P7PBSL3R.js +0 -2
- package/dist/sandbox-workspace-session.js +0 -1705
package/README.md
CHANGED
|
@@ -61,7 +61,8 @@ KodaX opens the provider/model metadata setup. Use `kodax setup` to rerun the
|
|
|
61
61
|
flow, `kodax setup --custom` for a guided custom provider, and
|
|
62
62
|
`kodax setup --help` (or REPL `/setup --help`) for paths, provider variables,
|
|
63
63
|
commands, and shortcuts. Interactive setup also checks the optional ASRT sandbox once:
|
|
64
|
-
Windows
|
|
64
|
+
Windows requests UAC during activation (an existing v2 account rotation may
|
|
65
|
+
require a second confirmation); macOS/Linux report any required
|
|
65
66
|
Seatbelt/bubblewrap dependencies. Declining or missing a dependency does not
|
|
66
67
|
break ordinary permission handling, and normal startup will not keep reminding
|
|
67
68
|
you.
|
|
@@ -206,11 +207,13 @@ kodax sandbox setup
|
|
|
206
207
|
```
|
|
207
208
|
|
|
208
209
|
- Windows uses a restricted sandbox account and network policy. A normal
|
|
209
|
-
terminal is sufficient; approve the
|
|
210
|
+
terminal is sufficient; approve the activation UAC confirmation(s).
|
|
210
211
|
- macOS uses Seatbelt/`sandbox-exec` and requires ripgrep
|
|
211
212
|
(`brew install ripgrep`).
|
|
212
213
|
- Linux uses bubblewrap and requires `bubblewrap`, `socat`, and `ripgrep`
|
|
213
|
-
(install them with your distro's `apt`, `dnf`, or `pacman`).
|
|
214
|
+
(install them with your distro's `apt`, `dnf`, or `pacman`). The host kernel
|
|
215
|
+
and security policy must also permit unprivileged user namespaces; KodaX
|
|
216
|
+
reports a failed backend launch and does not change system policy itself.
|
|
214
217
|
|
|
215
218
|
KodaX never runs `sudo` or a package manager automatically. If the sandbox is
|
|
216
219
|
not active, deterministic safe operations and Auto[LLM] decisions keep the
|
|
@@ -341,34 +344,28 @@ Sidecar verifier judge calls use provider-level forced tool choice when supporte
|
|
|
341
344
|
|
|
342
345
|
#### Opting a custom provider into image / vision input (FEATURE_134 v0.7.40)
|
|
343
346
|
|
|
344
|
-
If your custom provider's underlying model supports image input (vision),
|
|
347
|
+
If your custom provider's underlying model supports image input (vision), set `"imageInput": true` so KodaX's image routing and the provider-policy gate both let image artifacts through. This is the typical shape for self-hosted multimodal models served by vLLM or SGLang behind an OpenAI-compatible endpoint (Qwen-VL-style models):
|
|
345
348
|
|
|
346
349
|
```json
|
|
347
350
|
{
|
|
348
351
|
"customProviders": [
|
|
349
352
|
{
|
|
350
|
-
"name": "my-
|
|
353
|
+
"name": "my-vllm",
|
|
351
354
|
"protocol": "openai",
|
|
352
|
-
"baseUrl": "
|
|
353
|
-
"apiKeyEnv": "
|
|
354
|
-
"model": "
|
|
355
|
-
"
|
|
356
|
-
"transport": "native-api",
|
|
357
|
-
"conversationSemantics": "full-history",
|
|
358
|
-
"mcpSupport": "none",
|
|
359
|
-
"contextFidelity": "full",
|
|
360
|
-
"toolCallingFidelity": "full",
|
|
361
|
-
"sessionSupport": "full",
|
|
362
|
-
"longRunningSupport": "full",
|
|
363
|
-
"multimodalSupport": "image-input",
|
|
364
|
-
"evidenceSupport": "full"
|
|
365
|
-
}
|
|
355
|
+
"baseUrl": "http://localhost:8000/v1",
|
|
356
|
+
"apiKeyEnv": "MY_VLLM_API_KEY",
|
|
357
|
+
"model": "Qwen/Qwen3.8-27B-Instruct",
|
|
358
|
+
"imageInput": true
|
|
366
359
|
}
|
|
367
360
|
]
|
|
368
361
|
}
|
|
369
362
|
```
|
|
370
363
|
|
|
371
|
-
|
|
364
|
+
`imageInput: true` forces `capabilityProfile.multimodalSupport: "image-input"` on every KodaX surface (provider instance, capability queries, policy gates), overriding an explicit `"none"`. The advanced alternative — a hand-written `capabilityProfile` block with `"multimodalSupport": "image-input"` — works too; see [Custom Providers](public_docs/configuration/custom-providers.md). Leave it unset for text-only models and image artifacts are rejected with `MODEL_INPUT_UNSUPPORTED` before the request is sent.
|
|
365
|
+
|
|
366
|
+
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 image input enabled. DeepSeek V4's default models (`deepseek-v4-flash` / `deepseek-v4-pro`) and Codex-CLI are text-only — on the built-in `deepseek` alias only `deepseek-v4-flash-vision-exp` takes images; custom providers need to opt in when their underlying model supports image input.
|
|
367
|
+
|
|
368
|
+
The serializer layer (`packages/llm/src/providers/anthropic.ts:1431` for Anthropic-compat, `openai.ts:1496` for OpenAI-compat) forwards image blocks automatically through base-class inheritance — OpenAI-compatible endpoints receive standard `image_url` blocks. The flag only gates whether KodaX's policy layer pre-rejects multimodal requests — the model-level vision contract remains your upstream provider's responsibility. If the model is actually text-only, you'll see the real upstream API error instead of a KodaX-side rejection.
|
|
372
369
|
|
|
373
370
|
### 3. Start in REPL or run a one-shot task
|
|
374
371
|
|
|
@@ -436,6 +433,37 @@ const isolated = await createKodaXRuntime({
|
|
|
436
433
|
});
|
|
437
434
|
```
|
|
438
435
|
|
|
436
|
+
### Structured Runtime failures
|
|
437
|
+
|
|
438
|
+
Since v0.7.96, when Runtime has a structured failure fact, failed/cancelled runs
|
|
439
|
+
and unknown settlement states project the same credential-safe `failureDetail`
|
|
440
|
+
through failure or settlement events, `handle.result` / `runs.await()`,
|
|
441
|
+
`runs.get()` / `runs.list()`, and `sessions.diagnostics()`. Branch on the stable
|
|
442
|
+
KodaX `providerErrorCode`; use `safeMessage` for display, and treat
|
|
443
|
+
`upstreamErrorCode`, `requestId`, `httpStatus`, and `retryAfterMs` as optional
|
|
444
|
+
support metadata.
|
|
445
|
+
|
|
446
|
+
```ts
|
|
447
|
+
const session = await isolated.sessions.create({ title: 'Repository summary' });
|
|
448
|
+
const handle = await isolated.runs.start({
|
|
449
|
+
sessionId: session.id,
|
|
450
|
+
input: { type: 'text', text: 'Summarize this repo.' },
|
|
451
|
+
});
|
|
452
|
+
const result = await handle.result;
|
|
453
|
+
|
|
454
|
+
if (result.failureDetail) {
|
|
455
|
+
const { providerErrorCode, safeMessage, requestId } = result.failureDetail;
|
|
456
|
+
showFailure(safeMessage, { providerErrorCode, requestId });
|
|
457
|
+
}
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
`safeMessage` is a bounded KodaX-owned template, not copied upstream text. The
|
|
461
|
+
Runtime never copies credentials, prompts, request/response bodies, raw header
|
|
462
|
+
collections, URLs, full local paths, stacks, or raw `Error` objects into
|
|
463
|
+
`failureDetail`; only the documented allowlisted metadata may be extracted.
|
|
464
|
+
See [Structured Runtime failures](public_docs/sdk/embedder-guide.md#structured-credential-safe-runtime-failures)
|
|
465
|
+
for the field contract, taxonomy, migration guidance, and security boundary.
|
|
466
|
+
|
|
439
467
|
Inline is private and lowest-overhead; Worker is private and hard-disposable;
|
|
440
468
|
daemon is process-isolated and shared. `runtime.close()` closes private
|
|
441
469
|
inline/Worker ownership, but only detaches one daemon client. Contradictory
|
|
@@ -484,7 +512,8 @@ bootstrap-only child exec boundary and removed before daemon or ordinary user
|
|
|
484
512
|
child code loads. The default-enabled Electron `RunAsNode` fuse is required;
|
|
485
513
|
hosts that disable it must start the daemon through ordinary Node/KodaX CLI and
|
|
486
514
|
connect in attach-only mode. For SDK calls, `homeDir` is the CLI-style base
|
|
487
|
-
directory that owns `.kodax`, not the `.kodax` path itself.
|
|
515
|
+
directory that owns `.kodax`, not the `.kodax` path itself. Electron embedders
|
|
516
|
+
must also follow the [native artifact unpacking contract](public_docs/sdk/embedder-guide.md#packaged-electron-native-artifact-layout).
|
|
488
517
|
|
|
489
518
|
**v0.7.75 Windows GUI stabilization candidate:** Runtime Worker-reachable
|
|
490
519
|
non-interactive subprocesses request hidden Windows consoles across memory/Git,
|
|
@@ -726,6 +755,102 @@ permission UI, and recovers stale prepared Session tails through an
|
|
|
726
755
|
authoritative merge. Background persistence failures are surfaced as
|
|
727
756
|
diagnostics rather than hidden.
|
|
728
757
|
|
|
758
|
+
**v0.7.96-alpha.2 release (Windows hotfix):** restored the Windows
|
|
759
|
+
boot-identity PowerShell resolution helper that the FEATURE_295 cleanup
|
|
760
|
+
deleted while its last caller stayed. On v0.7.96-alpha.1 every Windows exit
|
|
761
|
+
settlement crashed with `windowsAclPowerShellExecutable is not defined` and
|
|
762
|
+
left sandbox cleanup `unverified`; the restored helper plus a win32 regression
|
|
763
|
+
test close Issue 325. v0.7.96-alpha.1 is broken on Windows — upgrade to
|
|
764
|
+
v0.7.96-alpha.2. See the
|
|
765
|
+
[v0.7.96-alpha.2 release checklist](docs/release.md#v0796-alpha2-release-preparation).
|
|
766
|
+
|
|
767
|
+
**v0.7.96-alpha.1 release:** controlled
|
|
768
|
+
text tools and shell containment are separate authorities on every desktop
|
|
769
|
+
platform. `write`, `edit`, `multi_edit`,
|
|
770
|
+
`insert_after_anchor`, and `undo` run in the trusted KodaX Runtime with final
|
|
771
|
+
path/identity policy checks, a cross-Runtime per-file kernel lock, revision
|
|
772
|
+
CAS, metadata-preserving flushed atomic replacement, and a protected native
|
|
773
|
+
state root. They do not enter ASRT, a workspace
|
|
774
|
+
session, shell runner, setup, cleanup, owner, reset, or poison state, and are
|
|
775
|
+
not described as OS-token-sandboxed. The root and `/coding` direct SDK entries
|
|
776
|
+
(`runKodaX`, `startKodaX`, `runManagedTask`, `createKodaXTaskRunner`, `createDefaultCodingAgent`,
|
|
777
|
+
`KodaXClient`, and its `Client` alias) bind the same native text
|
|
778
|
+
authority by default and read newly registered linked-worktree roots at
|
|
779
|
+
transaction time. Windows shell commands keep ASRT only for network/account
|
|
780
|
+
services and use the KodaX native restricted-token runner with
|
|
781
|
+
a nonce-bound per-policy private desktop, creation-time Job containment, and framed stdio. Native shell commands from
|
|
782
|
+
different policies, Sessions, and Runtime processes do not share a
|
|
783
|
+
command-lifetime filesystem-effect lease. Commands in one Runtime with the
|
|
784
|
+
same network policy and sandbox-account generation share one ASRT network
|
|
785
|
+
broker while retaining independent policy tokens and Jobs. Unlike policies do
|
|
786
|
+
not share authority; Issue 308 tracks ASRT 0.0.65's remaining fixed-port
|
|
787
|
+
capacity limit across distinct policies and Runtime processes. Arbitrary shell writes remain normal
|
|
788
|
+
OS races; only controlled text tools participate in KodaX CAS. Target stdin EOF
|
|
789
|
+
does not close the native control stream. Authenticated directional pipes keep
|
|
790
|
+
control and events independent; timeout/cancel validates a nonce-bound runner
|
|
791
|
+
Job-drain record before returning the original stop reason.
|
|
792
|
+
Windows trusted replacement automatically converts an obsolete sandbox-owned
|
|
793
|
+
file to trusted-host ownership and preserves the ordered effective ACE policy.
|
|
794
|
+
The filesystem may canonicalize DACL protection/inheritance control at the
|
|
795
|
+
atomic namespace commit; stale inherited authority is not copied from an old
|
|
796
|
+
parent. The
|
|
797
|
+
shell cannot read or write workspace-local `.kodax/runtime` control state even
|
|
798
|
+
when the surrounding workspace is writable.
|
|
799
|
+
Each shared broker owns a verified native liveness controller whose named pipe
|
|
800
|
+
is created with a protected Host/SYSTEM-only DACL and multiple pending
|
|
801
|
+
instances. Restricted targets cannot connect or exhaust it; controller or
|
|
802
|
+
broker loss closes the channel and drains every attached command Job.
|
|
803
|
+
Native request/terminal state is kept in a no-reparse, host/SYSTEM-only control
|
|
804
|
+
directory; both SDK policy validation and the native host reject overlapping
|
|
805
|
+
allow roots and deny roots at/below it before target launch. Doctor only
|
|
806
|
+
verifies. After proving the sandbox account idle, explicit setup can retire an
|
|
807
|
+
expired dead-PID request or a dead-owner terminal record that already proves
|
|
808
|
+
Job drainage before repairing host-owned state. Live, unexpired, malformed,
|
|
809
|
+
unknown, and deny-recovery records remain fail-closed.
|
|
810
|
+
If Unix cannot prove directory durability after the atomic commit, the tool
|
|
811
|
+
returns `text_mutation_commit_uncertain` with the complete pre/post receipt and
|
|
812
|
+
requires a reread instead of a blind retry. Existing-file edits retain their
|
|
813
|
+
Undo backup; a commit-uncertain Undo is rebound to the observed post-commit
|
|
814
|
+
revision so a later CAS-checked Undo can resolve it. See
|
|
815
|
+
[ADR-066](docs/ADR.md#adr-066-trusted-text-transactions-and-a-native-windows-shell-sandbox-are-separate-authorities).
|
|
816
|
+
This incompatible authority split is fenced by `sandboxRuntime:6`, so a new
|
|
817
|
+
client never silently reuses a daemon that still implements the v0.7.95 graph.
|
|
818
|
+
Existing Windows installations run `kodax sandbox setup` once: the cutover
|
|
819
|
+
waits for old sandbox processes to exit, recreates the dedicated account with
|
|
820
|
+
a new SID, and records the native protocol/SID generation. Missing migration
|
|
821
|
+
state blocks native shell admission, not trusted text tools.
|
|
822
|
+
On Windows, the embedded release manifest pins text/shell protocols and hashes
|
|
823
|
+
plus the ASRT release version and hash. Verified executables are staged in a
|
|
824
|
+
content-addressed protected LocalAppData store independent of `KODAX_HOME`;
|
|
825
|
+
ASRT is checked before materialization and again before broker startup. Text
|
|
826
|
+
remains Host/SYSTEM-only, the dedicated sandbox group SID receives read/execute
|
|
827
|
+
on the shell artifact, and local Users receive read/execute on ASRT; neither
|
|
828
|
+
sandbox trustee nor local Users receives write/delete authority.
|
|
829
|
+
A package-store hardlink is accepted only in bundled builds, through a
|
|
830
|
+
handle-bound bounded read whose complete bytes match the embedded release
|
|
831
|
+
digest; development manifests and sources remain single-link. The executable
|
|
832
|
+
used by the broker is still a separate, protected single-link file. Allow-root
|
|
833
|
+
authorization changes only exact canonical roots and never rewrites their
|
|
834
|
+
private ancestor DACLs.
|
|
835
|
+
Linux and macOS use the same trusted-text authority with native no-follow/
|
|
836
|
+
`flock`/CAS/atomic commit, while shell commands remain per-command ASRT
|
|
837
|
+
bubblewrap/Seatbelt invocations with no KodaX workspace-session owner.
|
|
838
|
+
Issue 307 tracks the narrower ASRT-owned runner pre-main creation window that
|
|
839
|
+
also remains in current Codex; final command targets are still placed in their
|
|
840
|
+
Job at process creation, and trusted text tools never enter that boundary.
|
|
841
|
+
Issue 309 records the other Codex-compatible Windows residual: stable root
|
|
842
|
+
capabilities do not override an explicit ambient loader-compatibility ACE,
|
|
843
|
+
whether left by an earlier sandbox command or already present on an external or
|
|
844
|
+
host-owned descendant. This release also replaces the local tool-result
|
|
845
|
+
capacity hard gate with capacity-debt admission and a bounded recovery
|
|
846
|
+
ladder (ADR-067), classifies local capacity terminals as
|
|
847
|
+
`failureKind: "context_capacity"` with structured `contextTokens`, and
|
|
848
|
+
exposes one credential-safe `failureDetail` across failure events, Run
|
|
849
|
+
result/status, and Session diagnostics. It advertises Windows
|
|
850
|
+
`sandboxRuntime:6`; `runtimeExitSettlement:2` and `crashOutcomeModel:2` are
|
|
851
|
+
unchanged. See the
|
|
852
|
+
[v0.7.96-alpha.1 release checklist](docs/release.md#v0796-alpha1-release-preparation).
|
|
853
|
+
|
|
729
854
|
**v0.7.95 release:** stale learning locks with zero-byte,
|
|
730
855
|
malformed, or truncated owner records self-recover after an unchanged
|
|
731
856
|
bytes/stat check. Same-boot Windows `unconfirmed-owner` cleanup retries until
|
|
@@ -943,7 +1068,7 @@ KodaX/
|
|
|
943
1068
|
│ ├── kodax_cli.ts # Main CLI entry point (bin: `kodax`)
|
|
944
1069
|
│ └── sdk-*.ts # SDK subpath re-exports → @kodax-ai/kodax/{agent,llm,coding,media,repl,skills,mcp,session,runtime,sandbox,a2a,experimental-memory}
|
|
945
1070
|
│
|
|
946
|
-
└── package.json # Publish-shaped exports; release.mjs only
|
|
1071
|
+
└── package.json # Publish-shaped exports; publish ships the CI-built tarball (release.mjs), local --pack-only keeps private:true
|
|
947
1072
|
```
|
|
948
1073
|
|
|
949
1074
|
### Package Dependencies
|
|
@@ -1147,7 +1272,7 @@ changes require an explicit server restart. Managed
|
|
|
1147
1272
|
A2A contexts default to `~/kodax_a2a_server_workspace/<runtime-profile>/contexts/`.
|
|
1148
1273
|
Exact Skill scripts require the opt-in isolated policy and a passing
|
|
1149
1274
|
`kodax sandbox doctor` (`kodax sandbox setup` performs the explicit Windows
|
|
1150
|
-
|
|
1275
|
+
provisioning or v2 account-SID cutover).
|
|
1151
1276
|
|
|
1152
1277
|
---
|
|
1153
1278
|
|
|
@@ -1796,7 +1921,7 @@ await runInkInteractiveMode({ provider: 'zhipu-coding', effort: 'auto' });
|
|
|
1796
1921
|
| mimo | `MIMO_API_KEY` | Native | mimo-v2.5-pro (Xiaomi MiMo pay-per-token, Anthropic-compat) |
|
|
1797
1922
|
| mimo-coding | `MIMO_CODING_API_KEY` | Native | mimo-v2.5-pro (Xiaomi Token Plan, Anthropic-compat) |
|
|
1798
1923
|
| ark-coding | `ARK_CODING_API_KEY` | Native | glm-5.3 (Volcengine Ark Coding Plan — GLM-5.3 (1M ctx, 128K out) · 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) |
|
|
1799
|
-
| deepseek | `DEEPSEEK_API_KEY` | Native | deepseek-v4-flash (`deepseek-v4-pro` via `/model`) |
|
|
1924
|
+
| deepseek | `DEEPSEEK_API_KEY` | Native | deepseek-v4-flash (`deepseek-v4-pro` plus vision model `deepseek-v4-flash-vision-exp` with image input, via `/model`) |
|
|
1800
1925
|
| gemini-cli | Provider CLI authentication (no KodaX API-key variable) | Prompt-only / CLI bridge | (via gemini CLI) |
|
|
1801
1926
|
| codex-cli | Provider CLI authentication (no KodaX API-key variable) | Prompt-only / CLI bridge | (via codex CLI) |
|
|
1802
1927
|
|
package/README_CN.md
CHANGED
|
@@ -58,7 +58,8 @@ kodax
|
|
|
58
58
|
provider/model 元数据设置。使用 `kodax setup` 重新运行设置,
|
|
59
59
|
使用 `kodax setup --custom` 配置自定义 provider;使用 `kodax setup --help` 或
|
|
60
60
|
REPL `/setup --help` 查看完整路径、环境变量、命令和快捷键。交互式 setup 还会检查
|
|
61
|
-
一次可选 ASRT sandbox:Windows
|
|
61
|
+
一次可选 ASRT sandbox:Windows 激活时会请求 UAC(已有安装进行 v2 账户 SID
|
|
62
|
+
轮换时可能需要第二次确认);
|
|
62
63
|
macOS/Linux 会报告 Seatbelt/bubblewrap 所需依赖。拒绝 UAC 或缺少依赖不会破坏普通
|
|
63
64
|
权限管理,日常启动也不会反复提醒。
|
|
64
65
|
|
|
@@ -92,12 +93,39 @@ data/session root 下的 inline Runtime,不参与 Coder owner fence。capabili
|
|
|
92
93
|
fail closed,不能静默退回 inline Coder。完整接入说明见
|
|
93
94
|
[SDK Embedder Guide §23](public_docs/sdk/embedder-guide.md#23-shared-coder-daemon-for-space-and-ide-hosts-feature_269-v0769)。
|
|
94
95
|
|
|
96
|
+
### 结构化且凭据安全的 Runtime 错误
|
|
97
|
+
|
|
98
|
+
自 v0.7.96 起,当 Runtime 已生成结构化失败事实时,失败和取消 Run
|
|
99
|
+
会在终端事件、
|
|
100
|
+
`handle.result` / `runs.await()`、
|
|
101
|
+
`runs.get()` / `runs.list()` 以及 `sessions.diagnostics()` 中提供一致的
|
|
102
|
+
`failureDetail`;Runtime 收尾失败形成 `unknown` 状态时通过 `run.updated` 透出。
|
|
103
|
+
上述字段是可选的,只在 Runtime 已生成结构化失败事实时出现。宿主应按稳定的
|
|
104
|
+
KodaX `providerErrorCode` 处理错误,向用户展示
|
|
105
|
+
`safeMessage`;`upstreamErrorCode`、`requestId`、`httpStatus` 和
|
|
106
|
+
`retryAfterMs` 仅作为可能缺失的支持信息。
|
|
107
|
+
|
|
108
|
+
```ts
|
|
109
|
+
const result = await handle.result;
|
|
110
|
+
if (result.failureDetail) {
|
|
111
|
+
const { providerErrorCode, safeMessage, requestId } = result.failureDetail;
|
|
112
|
+
showFailure(safeMessage, { providerErrorCode, requestId });
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
`safeMessage` 是长度受限的 KodaX 固定文案,不复制上游错误正文;Runtime 不会把
|
|
117
|
+
凭据、prompt、请求/响应正文、原始 headers 集合、URL、完整本地路径、stack 或原始
|
|
118
|
+
`Error` 复制进 `failureDetail`,仅提取文档明确列出的 allowlist 元数据。字段定义、
|
|
119
|
+
分类表、迁移方法和安全边界详见
|
|
120
|
+
[Structured Runtime failures](public_docs/sdk/embedder-guide.md#structured-credential-safe-runtime-failures)。
|
|
121
|
+
|
|
95
122
|
**v0.7.71 Electron 打包修复**:packaged/asar Electron 宿主可以直接自动启动
|
|
96
123
|
daemon,不会再次打开 GUI。`ELECTRON_RUN_AS_NODE` 只存在于子进程启动边界,
|
|
97
124
|
在 daemon 与普通用户子进程代码加载前即被移除。该路径要求 Electron 默认开启的
|
|
98
125
|
`RunAsNode` fuse;主动关闭该 fuse 的宿主必须通过普通 Node/KodaX CLI 启动 daemon,
|
|
99
126
|
再使用 attach-only 模式连接。SDK 的 `homeDir` 是拥有 `.kodax` 的 CLI 风格基础目录,
|
|
100
|
-
不是 `.kodax` 目录本身。
|
|
127
|
+
不是 `.kodax` 目录本身。Electron 宿主还必须遵循
|
|
128
|
+
[native artifact 解包契约](public_docs/sdk/embedder-guide.md#packaged-electron-native-artifact-layout)。
|
|
101
129
|
|
|
102
130
|
**v0.7.75 Windows GUI 稳定性候选版**:Runtime Worker 可达的非交互后台子进程
|
|
103
131
|
在 Windows 上统一请求隐藏控制台,覆盖 memory/Git、provider CLI/ACP、LSP、
|
|
@@ -266,6 +294,76 @@ SDK 系统代码契约更新,但没有放宽 shell/sandbox 的 fail-closed 边
|
|
|
266
294
|
`handleRuntimePermissionRequest()` 管理 SDK 权限 UI,并在 prepared Session 尾部遇到
|
|
267
295
|
`data_changed` 时通过权威 delta 合并恢复;后台持久化失败会显示为诊断,不再静默丢失。
|
|
268
296
|
|
|
297
|
+
**v0.7.96-alpha.2 发布(Windows 修复)**:恢复被 FEATURE_295 清理误删的
|
|
298
|
+
Windows boot-identity PowerShell 解析函数(其唯一调用方仍保留)。在
|
|
299
|
+
v0.7.96-alpha.1 上,每次 Windows exit settlement 都会以
|
|
300
|
+
`windowsAclPowerShellExecutable is not defined` 崩溃,sandbox cleanup 只能标记为
|
|
301
|
+
`unverified`;恢复后的实现附带 win32 回归测试,关闭 Issue 325。Windows 用户请
|
|
302
|
+
从 v0.7.96-alpha.1 升级到 v0.7.96-alpha.2。详见
|
|
303
|
+
[v0.7.96-alpha.2 发布清单](docs/release.md#v0796-alpha2-release-preparation)。
|
|
304
|
+
|
|
305
|
+
**v0.7.96-alpha.1 发布**:所有桌面平台的受控
|
|
306
|
+
文本工具与 shell containment 拆分为两个独立权威。`write`、`edit`、`multi_edit`、`insert_after_anchor`、
|
|
307
|
+
`undo` 在可信 KodaX Runtime 中完成最终路径/identity 策略校验、跨 Runtime
|
|
308
|
+
逐文件内核锁、revision CAS、元数据保留的 flush 后原子替换与受保护 native 状态根;它们不进入 ASRT、workspace
|
|
309
|
+
session、shell runner、setup、cleanup、owner、reset 或 poison 状态,也不宣称受到
|
|
310
|
+
OS token sandbox enforcement。根入口和 `/coding` 的 `runKodaX`、`startKodaX`、
|
|
311
|
+
`runManagedTask`、`createKodaXTaskRunner`、`createDefaultCodingAgent`、`KodaXClient` 及其 `Client` 别名默认绑定同一 native 文本权威,并在每次事务读取新注册的 linked-
|
|
312
|
+
worktree 根。Windows shell 仅由 ASRT 提供网络/专用账户服务,
|
|
313
|
+
KodaX native runner 负责 restricted token、nonce 绑定且按 policy 隔离的私有 desktop、创建时 Job containment 和 framed stdio;
|
|
314
|
+
不同 policy、Session、Runtime 的 native shell 不共享覆盖命令生命周期的 filesystem-
|
|
315
|
+
effect lease。同一 Runtime 中具有完全相同网络策略和 sandbox 账户代际的命令共享
|
|
316
|
+
一个 ASRT 网络 broker,但仍各自拥有 policy token 与 Job;不同策略绝不共享权威。
|
|
317
|
+
Issue 308 记录 ASRT 0.0.65 对不同策略/Runtime 仍存在的固定端口容量限制。任意 shell 写文件仍是正常 OS 数据竞争,KodaX CAS 只约束受控文本
|
|
318
|
+
工具。目标 stdin EOF 不会关闭 native 控制流;控制与事件使用相互独立且认证过的
|
|
319
|
+
单向管道。timeout/cancel 只有在校验 nonce 绑定的 runner 终态记录、确认整个 Job
|
|
320
|
+
已排空后才返回原始停止原因。每个共享 broker 还拥有一个经校验的 native 存活
|
|
321
|
+
controller。Windows 可信替换会把旧 sandbox owner 的文件自动归一为可信 host
|
|
322
|
+
owner,并保留有序的最终有效 ACE 策略;文件系统可在原子命名空间提交时规范化
|
|
323
|
+
DACL protection/inheritance 控制位,旧父目录的继承权限不会被原样冻结。
|
|
324
|
+
即使工作区整体可写,shell 也不能读写工作区内的 `.kodax/runtime` 控制状态。
|
|
325
|
+
其 named pipe 创建时即应用仅 Host/SYSTEM 的 protected DACL,并保留
|
|
326
|
+
多个 pending instance。受限目标无法连接或耗尽它;controller/broker 丢失会关闭
|
|
327
|
+
通道并排空所有关联命令的 Job。native 请求与终态记录位于无 reparse、仅 host/SYSTEM
|
|
328
|
+
可访问的控制目录;SDK policy 校验和 native host 都会在目标启动前拒绝与该目录
|
|
329
|
+
祖先或子孙重叠的 allow root,以及指向该目录或其子项的 deny root。doctor 只验证;
|
|
330
|
+
显式 setup 会先证明 sandbox 账户已空闲,只回收已过 deadline 且 owner PID 已死的
|
|
331
|
+
请求,或已证明 Job 排空的死 owner 终态记录,再修复 host-owned 状态;live、未过期、
|
|
332
|
+
损坏、未知及 deny-recovery 记录继续 fail-closed。Unix 在原子提交后若无法证明目录 durability,会携带
|
|
333
|
+
完整的提交前/后 receipt 返回 `text_mutation_commit_uncertain`,要求先重读,禁止盲目重试。已有文件的修改会
|
|
334
|
+
保留 Undo backup;若 Undo 本身处于提交不确定状态,其 receipt 会重绑定到观测到的
|
|
335
|
+
提交后 revision,之后只能通过 CAS 校验的 Undo 继续收敛。详见
|
|
336
|
+
[ADR-066](docs/ADR.md#adr-066-trusted-text-transactions-and-a-native-windows-shell-sandbox-are-separate-authorities)。
|
|
337
|
+
这次不兼容的权威拆分由 `sandboxRuntime:6` 门禁;新客户端不会静默复用仍执行
|
|
338
|
+
v0.7.95 旧调用图的 daemon。
|
|
339
|
+
现有 Windows 安装需要运行一次 `kodax sandbox setup`:切换流程会等待旧沙箱进程
|
|
340
|
+
退出,使用新 SID 重建专用账户,并记录 native protocol/SID 代际。迁移状态缺失时
|
|
341
|
+
只阻止 native shell 准入,不会阻止可信文本工具。
|
|
342
|
+
Windows 的嵌入发布 manifest 会钉住 text/shell 的 protocol 与 hash,以及 ASRT
|
|
343
|
+
release version 与 hash。已校验的可执行文件进入独立于 `KODAX_HOME` 的 LocalAppData
|
|
344
|
+
content-addressed 受保护存储;ASRT 在落库前与 broker 启动前都会重验。text 仅
|
|
345
|
+
Host/SYSTEM 可访问,专用 sandbox group SID 对 shell artifact 只有 read/execute,
|
|
346
|
+
local Users 对 ASRT 只有 read/execute;sandbox trustee 与 local Users 均无
|
|
347
|
+
write/delete 权限。
|
|
348
|
+
包存储中的 hardlink 仅在 bundled 构建中可作为 ASRT 来源,并通过同一文件句柄的
|
|
349
|
+
有界读取核对完整字节与内嵌发布 digest;开发态 manifest 与来源仍须单链接。broker
|
|
350
|
+
实际执行的仍是独立、受保护、单链接文件。allow-root 授权只修改精确 canonical
|
|
351
|
+
root,不再改写其私有祖先目录的 DACL。
|
|
352
|
+
Linux/macOS 使用同一可信文本权威及 native no-follow/`flock`/CAS/原子提交;
|
|
353
|
+
shell 仍是逐命令 ASRT bubblewrap/Seatbelt 执行,不保留 KodaX workspace-session owner。
|
|
354
|
+
Issue 307 记录 ASRT 所有的 runner 在 KodaX 代码运行前启动这一更窄的 pre-main
|
|
355
|
+
窗口;当前 Codex 也保留相同边界。最终命令仍在创建时加入 Job,可信文本工具完全
|
|
356
|
+
不经过该边界。Issue 309 记录另一个与 Codex 相同的 Windows 残余:稳定 root
|
|
357
|
+
capability 无法覆盖显式 ambient loader-compatibility ACE;该 ACE 既可能由此前
|
|
358
|
+
sandbox 命令留下,也可能原本就存在于 external 或 host-owned descendant 上。
|
|
359
|
+
本版本同时以容量债务准入(capacity-debt admission)和有界恢复阶梯取代本地
|
|
360
|
+
tool-result 容量硬门禁(ADR-067),本地容量终态归类为
|
|
361
|
+
`failureKind: "context_capacity"` 并附带结构化 `contextTokens`,失败事件、Run
|
|
362
|
+
结果/状态与 Session 诊断提供同一份凭据安全的 `failureDetail`。本版本广告
|
|
363
|
+
Windows `sandboxRuntime:6`;`runtimeExitSettlement:2` 与 `crashOutcomeModel:2`
|
|
364
|
+
不变。详见
|
|
365
|
+
[v0.7.96-alpha.1 发布清单](docs/release.md#v0796-alpha1-release-preparation)。
|
|
366
|
+
|
|
269
367
|
**v0.7.95 发布**:零字节、畸形或截断 owner 的过期 learning lock
|
|
270
368
|
会在字节与 stat 二次确认未变后自动恢复。同一次 Windows 启动内的
|
|
271
369
|
`unconfirmed-owner` 会持续自动重试,只有精确 sandbox-user SID 探针证明空闲后
|
|
@@ -518,12 +616,13 @@ kodax sandbox doctor
|
|
|
518
616
|
kodax sandbox setup
|
|
519
617
|
```
|
|
520
618
|
|
|
521
|
-
- Windows 使用受限 sandbox 账户和网络策略。普通 Terminal
|
|
522
|
-
UAC
|
|
619
|
+
- Windows 使用受限 sandbox 账户和网络策略。普通 Terminal 即可,按提示同意激活
|
|
620
|
+
所需的 UAC 确认;不必先以管理员身份启动 Terminal。
|
|
523
621
|
- macOS 使用 Seatbelt/`sandbox-exec`,需要 ripgrep:
|
|
524
622
|
`brew install ripgrep`。
|
|
525
623
|
- Linux 使用 bubblewrap,需要 `bubblewrap`、`socat` 和 `ripgrep`,请根据发行版用
|
|
526
|
-
`apt`、`dnf` 或 `pacman`
|
|
624
|
+
`apt`、`dnf` 或 `pacman` 安装。宿主内核与安全策略还必须允许非特权 user
|
|
625
|
+
namespace;若 backend 无法启动,KodaX 会明确报告,且不会自行修改系统策略。
|
|
527
626
|
|
|
528
627
|
KodaX 不会自动运行 `sudo` 或系统包管理器。sandbox 未激活时,确定性安全操作与
|
|
529
628
|
Auto[LLM] 的权限体验保持一致,只缺少 OS 级 containment;普通运行不会反复打扰。
|
|
@@ -723,34 +822,28 @@ Verifier 的 `revise` / `blocked` 可执行消息;JSONL 输出使用同形
|
|
|
723
822
|
|
|
724
823
|
#### 给自定义 provider 开图片 / vision 输入(FEATURE_134 v0.7.40)
|
|
725
824
|
|
|
726
|
-
如果你的自定义 provider 后面的模型支持 vision
|
|
825
|
+
如果你的自定义 provider 后面的模型支持 vision,设置 `"imageInput": true` 即可,KodaX 的图片路由和 provider policy gate 都会放行图片输入。这是自托管多模态模型(vLLM / SGLang 部署 Qwen-VL 类模型、OpenAI-compatible 端点)的典型用法:
|
|
727
826
|
|
|
728
827
|
```json
|
|
729
828
|
{
|
|
730
829
|
"customProviders": [
|
|
731
830
|
{
|
|
732
|
-
"name": "my-
|
|
831
|
+
"name": "my-vllm",
|
|
733
832
|
"protocol": "openai",
|
|
734
|
-
"baseUrl": "
|
|
735
|
-
"apiKeyEnv": "
|
|
736
|
-
"model": "
|
|
737
|
-
"
|
|
738
|
-
"transport": "native-api",
|
|
739
|
-
"conversationSemantics": "full-history",
|
|
740
|
-
"mcpSupport": "none",
|
|
741
|
-
"contextFidelity": "full",
|
|
742
|
-
"toolCallingFidelity": "full",
|
|
743
|
-
"sessionSupport": "full",
|
|
744
|
-
"longRunningSupport": "full",
|
|
745
|
-
"multimodalSupport": "image-input",
|
|
746
|
-
"evidenceSupport": "full"
|
|
747
|
-
}
|
|
833
|
+
"baseUrl": "http://localhost:8000/v1",
|
|
834
|
+
"apiKeyEnv": "MY_VLLM_API_KEY",
|
|
835
|
+
"model": "Qwen/Qwen3.8-27B-Instruct",
|
|
836
|
+
"imageInput": true
|
|
748
837
|
}
|
|
749
838
|
]
|
|
750
839
|
}
|
|
751
840
|
```
|
|
752
841
|
|
|
753
|
-
|
|
842
|
+
`imageInput: true` 会在 KodaX 所有层面(provider 实例、能力查询、policy gate)强制 `capabilityProfile.multimodalSupport: "image-input"`,显式写了 `"none"` 也会被覆盖。进阶写法 —— 手写 `capabilityProfile` 块并设 `"multimodalSupport": "image-input"` —— 同样有效,详见 [Custom Providers](public_docs/configuration/custom-providers.md)。纯文本模型保持不设即可,图片 artifact 会在请求发出前被 `MODEL_INPUT_UNSUPPORTED` 拒绝。
|
|
843
|
+
|
|
844
|
+
内置 vision-capable alias(Anthropic、OpenAI、Kimi、Qwen、Zhipu、MiniMax、MiMo、Ark,以及通过 CLI `@<path>` file-include 语法传图的 Gemini-CLI)已经默认开了图片输入。DeepSeek V4 默认模型(`deepseek-v4-flash` / `deepseek-v4-pro`)和 Codex-CLI 是纯文本 —— 内置 `deepseek` 只有 `deepseek-v4-flash-vision-exp` 这一个路由收图;自定义 provider 在底层模型支持图片输入时需要手动 opt-in。
|
|
845
|
+
|
|
846
|
+
序列化层(Anthropic-compat 走 `packages/llm/src/providers/anthropic.ts:1431`,OpenAI-compat 走 `openai.ts:1496`)通过基类继承自动转发 image block —— OpenAI-compatible 端点收到的是标准 `image_url` 块。这个 flag 只控制 KodaX 自身是否预先拒绝多模态请求 —— 上游模型到底支不支持 vision 由 provider 自己决定。如果模型实际是 text-only,你会看到真实的上游 API 错误,而不是 KodaX 一侧的 `[Provider Policy] multimodal requests are unsupported` 预拦截。
|
|
754
847
|
|
|
755
848
|
库模式下用 `registerCustomProviders()` 显式注册:
|
|
756
849
|
|
|
@@ -873,7 +966,7 @@ dist/binary/linux-x64/
|
|
|
873
966
|
| mimo | `MIMO_API_KEY` | Native | mimo-v2.5-pro(小米 MiMo 按量计费,Anthropic 协议) |
|
|
874
967
|
| mimo-coding | `MIMO_CODING_API_KEY` | Native | mimo-v2.5-pro(小米 MiMo Token Plan,Anthropic 协议) |
|
|
875
968
|
| ark-coding | `ARK_CODING_API_KEY` | Native | glm-5.3(火山方舟 Coding Plan — GLM-5.3(1M ctx、128K out) · 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) |
|
|
876
|
-
| deepseek | `DEEPSEEK_API_KEY` | Native | deepseek-v4-flash(可 `/model` 切换 `deepseek-v4-pro
|
|
969
|
+
| deepseek | `DEEPSEEK_API_KEY` | Native | deepseek-v4-flash(可 `/model` 切换 `deepseek-v4-pro` 及视觉模型 `deepseek-v4-flash-vision-exp`,后者支持图片输入) |
|
|
877
970
|
| gemini-cli | 由 Provider CLI 完成认证(无 KodaX API-key 环境变量) | Prompt-only / CLI bridge | (通过 gemini CLI) |
|
|
878
971
|
| codex-cli | 由 Provider CLI 完成认证(无 KodaX API-key 环境变量) | Prompt-only / CLI bridge | (通过 codex CLI) |
|
|
879
972
|
|
|
@@ -1145,7 +1238,7 @@ KodaX/ # 4 workspace packages(FEATURE_194 v0.7.43)
|
|
|
1145
1238
|
├── scripts/
|
|
1146
1239
|
│ ├── build-bundle.mjs # esbuild 单 bundle 多 entry 打包(CLI + root + 12 SDK subpath + chunks)
|
|
1147
1240
|
│ ├── build-binary.mjs # Bun --compile 单文件二进制打包
|
|
1148
|
-
│ └── release.mjs #
|
|
1241
|
+
│ └── release.mjs # 发布 CI 构建的通用 tarball;本地 --pack-only 保持 private:true
|
|
1149
1242
|
└── .github/workflows/
|
|
1150
1243
|
└── release.yml # 推 v* tag 自动发布 GitHub Release
|
|
1151
1244
|
```
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
// "model": "deepseek-v4-flash",
|
|
11
11
|
// Add or reorder model ids shown by `/model` for a provider.
|
|
12
12
|
// "providerModels": {
|
|
13
|
-
// "deepseek": ["deepseek-v4-flash", "deepseek-v4-pro"]
|
|
13
|
+
// "deepseek": ["deepseek-v4-flash", "deepseek-v4-pro", "deepseek-v4-flash-vision-exp"]
|
|
14
14
|
// },
|
|
15
15
|
|
|
16
16
|
// Interactive Runtime hosting: "embedded" (this process) or "daemon".
|
|
@@ -81,6 +81,7 @@
|
|
|
81
81
|
// "maxOutputTokens": 8192,
|
|
82
82
|
// "maxOutputTokensField": "max_completion_tokens",
|
|
83
83
|
// "thinkingBudgetCap": 32000,
|
|
84
|
+
// "imageInput": true,
|
|
84
85
|
// "promptCacheAffinity": false,
|
|
85
86
|
// "replayReasoningContent": false,
|
|
86
87
|
// "strictThinkingSignature": false,
|