@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.
Files changed (163) hide show
  1. package/CHANGELOG.md +178 -1
  2. package/LICENSE +158 -158
  3. package/README.md +149 -24
  4. package/README_CN.md +117 -24
  5. package/config-templates/config.example.jsonc +2 -1
  6. package/config-templates/integrations/a2a.example.jsonc +91 -91
  7. package/config-templates/integrations/extensions.example.jsonc +7 -7
  8. package/config-templates/integrations/mcp.example.jsonc +16 -16
  9. package/dist/builtin/code-review/SKILL.md +82 -82
  10. package/dist/builtin/git-workflow/SKILL.md +84 -84
  11. package/dist/builtin/skill-creator/SKILL.md +127 -127
  12. package/dist/builtin/skill-creator/agents/analyzer.md +12 -12
  13. package/dist/builtin/skill-creator/agents/comparator.md +13 -13
  14. package/dist/builtin/skill-creator/agents/grader.md +13 -13
  15. package/dist/builtin/skill-creator/references/schemas.md +227 -227
  16. package/dist/builtin/skill-creator/scripts/aggregate-benchmark.d.ts +46 -46
  17. package/dist/builtin/skill-creator/scripts/aggregate-benchmark.js +208 -208
  18. package/dist/builtin/skill-creator/scripts/analyze-benchmark.d.ts +46 -46
  19. package/dist/builtin/skill-creator/scripts/analyze-benchmark.js +286 -286
  20. package/dist/builtin/skill-creator/scripts/compare-runs.d.ts +62 -62
  21. package/dist/builtin/skill-creator/scripts/compare-runs.js +330 -330
  22. package/dist/builtin/skill-creator/scripts/generate-review.d.ts +33 -33
  23. package/dist/builtin/skill-creator/scripts/generate-review.js +414 -414
  24. package/dist/builtin/skill-creator/scripts/grade-evals.d.ts +73 -73
  25. package/dist/builtin/skill-creator/scripts/grade-evals.js +402 -402
  26. package/dist/builtin/skill-creator/scripts/improve-description.d.ts +23 -23
  27. package/dist/builtin/skill-creator/scripts/improve-description.js +160 -160
  28. package/dist/builtin/skill-creator/scripts/init-skill.d.ts +14 -14
  29. package/dist/builtin/skill-creator/scripts/init-skill.js +155 -155
  30. package/dist/builtin/skill-creator/scripts/install-skill.d.ts +29 -29
  31. package/dist/builtin/skill-creator/scripts/install-skill.js +173 -173
  32. package/dist/builtin/skill-creator/scripts/package-skill.d.ts +38 -38
  33. package/dist/builtin/skill-creator/scripts/package-skill.js +121 -121
  34. package/dist/builtin/skill-creator/scripts/quick-validate.d.ts +8 -8
  35. package/dist/builtin/skill-creator/scripts/quick-validate.js +163 -163
  36. package/dist/builtin/skill-creator/scripts/run-eval.d.ts +66 -66
  37. package/dist/builtin/skill-creator/scripts/run-eval.js +353 -353
  38. package/dist/builtin/skill-creator/scripts/run-loop.d.ts +49 -49
  39. package/dist/builtin/skill-creator/scripts/run-loop.js +242 -242
  40. package/dist/builtin/skill-creator/scripts/run-trigger-eval.d.ts +58 -58
  41. package/dist/builtin/skill-creator/scripts/run-trigger-eval.js +224 -224
  42. package/dist/builtin/tdd/SKILL.md +56 -56
  43. package/dist/chunks/agent-4FABF6WK.js +2 -0
  44. package/dist/chunks/argument-completer-72VHB2VL.js +2 -0
  45. package/dist/chunks/{chunk-7JXA3533.js → chunk-4OIQZWA5.js} +223 -226
  46. package/dist/chunks/{chunk-BNVSKIAB.js → chunk-6BVF3HZ7.js} +136 -136
  47. package/dist/chunks/chunk-7JZZIFZH.js +501 -0
  48. package/dist/chunks/chunk-AC7Z2OIY.js +2 -0
  49. package/dist/chunks/{chunk-JS452J2F.js → chunk-C4KYZAFU.js} +2 -2
  50. package/dist/chunks/chunk-CHUPIWIF.js +251 -0
  51. package/dist/chunks/{chunk-C4DTUKTR.js → chunk-GYUU7XLH.js} +5 -4
  52. package/dist/chunks/{chunk-OK4AXDC5.js → chunk-HAX55GOQ.js} +1 -1
  53. package/dist/chunks/chunk-JKTJCGO2.js +418 -0
  54. package/dist/chunks/{chunk-O743AJ5V.js → chunk-LQYETRFK.js} +171 -175
  55. package/dist/chunks/{chunk-2PEDBGKN.js → chunk-LTUZTQ6W.js} +1 -1
  56. package/dist/chunks/chunk-LYWDUSKO.js +2 -0
  57. package/dist/chunks/chunk-NGH6T4FD.js +92 -0
  58. package/dist/chunks/{chunk-SRIJX5ZP.js → chunk-NVRWCSA5.js} +1 -1
  59. package/dist/chunks/chunk-O4DS7RIQ.js +384 -0
  60. package/dist/chunks/chunk-ORXU6OWZ.js +2 -0
  61. package/dist/chunks/chunk-POTW3O65.js +124 -0
  62. package/dist/chunks/{chunk-2TM3W3GK.js → chunk-RIQSS56Y.js} +1 -1
  63. package/dist/chunks/chunk-U27XKEN5.js +407 -0
  64. package/dist/chunks/{chunk-6ABQJUK6.js → chunk-XUX6OUCA.js} +2 -2
  65. package/dist/chunks/{client-JDOS3YJR.js → client-4C456K4O.js} +1 -1
  66. package/dist/chunks/compaction-config-3VQRDFF4.js +2 -0
  67. package/dist/chunks/{construction-bootstrap-YCWHHUYO.js → construction-bootstrap-AHN7EDGG.js} +1 -1
  68. package/dist/chunks/dist-BCBQXAGI.js +2 -0
  69. package/dist/chunks/dist-QK2YDWU6.js +2 -0
  70. package/dist/chunks/host-VIHV7ADG.js +2 -0
  71. package/dist/chunks/run-manager-NBVMU3KV.js +2 -0
  72. package/dist/chunks/utils-MEJZ2IGI.js +2 -0
  73. package/dist/index.d.ts +22 -21
  74. package/dist/index.js +7 -7
  75. package/dist/kodax_bootstrap.js +26 -26
  76. package/dist/kodax_cli.js +1905 -1882
  77. package/dist/native/darwin-arm64/LICENSE-APACHE.txt +13 -0
  78. package/dist/native/darwin-arm64/kodax-text-transaction.node +0 -0
  79. package/dist/native/darwin-arm64/manifest.json +16 -0
  80. package/dist/native/darwin-x64/LICENSE-APACHE.txt +13 -0
  81. package/dist/native/darwin-x64/kodax-text-transaction.node +0 -0
  82. package/dist/native/darwin-x64/manifest.json +16 -0
  83. package/dist/native/linux-arm64/LICENSE-APACHE.txt +13 -0
  84. package/dist/native/linux-arm64/kodax-text-transaction.node +0 -0
  85. package/dist/native/linux-arm64/manifest.json +16 -0
  86. package/dist/native/linux-x64/LICENSE-APACHE.txt +13 -0
  87. package/dist/native/linux-x64/kodax-text-transaction.node +0 -0
  88. package/dist/native/linux-x64/manifest.json +16 -0
  89. package/dist/native/win32-x64/LICENSE-APACHE.txt +13 -0
  90. package/dist/native/win32-x64/NOTICE-windows-sandbox.txt +8 -0
  91. package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
  92. package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
  93. package/dist/native/win32-x64/manifest.json +30 -0
  94. package/dist/provider-capabilities.json +108 -2
  95. package/dist/runtime-worker.js +1745 -1727
  96. package/dist/sandbox-network-broker.js +1715 -0
  97. package/dist/sdk-a2a.d.ts +13 -12
  98. package/dist/sdk-a2a.js +1 -1
  99. package/dist/sdk-agent.d.ts +27 -18
  100. package/dist/sdk-agent.js +1 -1
  101. package/dist/sdk-coding.d.ts +107 -58
  102. package/dist/sdk-coding.js +1 -1
  103. package/dist/sdk-experimental-memory.d.ts +4 -4
  104. package/dist/sdk-experimental-memory.js +1 -1
  105. package/dist/sdk-llm.d.ts +9 -10
  106. package/dist/sdk-llm.js +1 -1
  107. package/dist/sdk-mcp.js +1 -1
  108. package/dist/sdk-media.d.ts +1 -1
  109. package/dist/sdk-media.js +1 -1
  110. package/dist/sdk-repl.d.ts +25 -17
  111. package/dist/sdk-repl.js +1 -1
  112. package/dist/sdk-runtime.d.ts +41 -17
  113. package/dist/sdk-runtime.js +1 -1
  114. package/dist/sdk-sandbox.d.ts +17 -3
  115. package/dist/sdk-sandbox.js +1 -1
  116. package/dist/sdk-session.d.ts +8 -7
  117. package/dist/sdk-session.js +1 -1
  118. package/dist/sdk-skills.js +1 -1
  119. package/dist/semantic-worker.js +61 -61
  120. package/dist/types-chunks/{base.d-vopO1rml.d.ts → base.d-COo8E2dk.d.ts} +18 -27
  121. package/dist/types-chunks/{bash-prefix-extractor.d-B2rxNI4L.d.ts → bash-prefix-extractor.d-DQOlA8cy.d.ts} +72 -52
  122. package/dist/types-chunks/{capability-learning.d-CE1tm29C.d.ts → capability-learning.d-lRPgA3Or.d.ts} +1 -1
  123. package/dist/types-chunks/{capsule.d-Y7QRS4J2.d.ts → capsule.d-0zxsgXg_.d.ts} +3 -3
  124. package/dist/types-chunks/{controller.d-BR-UVeUR.d.ts → controller.d-BTtyIIC1.d.ts} +1 -1
  125. package/dist/types-chunks/{controller.d-C5noq5-w.d.ts → controller.d-C7tXUcXo.d.ts} +2 -2
  126. package/dist/types-chunks/{guardrail.d-DqHD-61O.d.ts → guardrail.d-DKTyEHJa.d.ts} +5 -5
  127. package/dist/types-chunks/{history-retrieval.d-CKU8zmt_.d.ts → history-retrieval.d-CHnL99S7.d.ts} +2 -2
  128. package/dist/types-chunks/{public-api.d-D7fXaWW8.d.ts → public-api.d-Dx3L3W4Z.d.ts} +7 -4
  129. package/dist/types-chunks/{repl.d-BYDb14s6.d.ts → repl.d-mO01olIa.d.ts} +5 -5
  130. package/dist/types-chunks/{resolver.d-CwHUwbdE.d.ts → resolver.d-DlXPjeyx.d.ts} +38 -6
  131. package/dist/types-chunks/{review-inbox.d-BSgFewyj.d.ts → review-inbox.d-WDSe1nze.d.ts} +1 -1
  132. package/dist/types-chunks/{run-manager.d-BVJSntpS.d.ts → run-manager.d-DENbbzgR.d.ts} +1 -1
  133. package/dist/types-chunks/{sdk-session-CqEG84oP.d.ts → sdk-session-DYHGXXH4.d.ts} +3 -3
  134. package/dist/types-chunks/{shell-command-sets.d-DqaaBwhU.d.ts → shell-command-sets.d-CjFqS4dp.d.ts} +1 -1
  135. package/dist/types-chunks/{side-query.d-iH0P9ASy.d.ts → side-query.d-j8A3sFv_.d.ts} +2 -2
  136. package/dist/types-chunks/{types.d-rUOjXych.d.ts → types.d-BbZjR0Wr.d.ts} +1 -1
  137. package/dist/types-chunks/{types.d-CaTXAW_Q.d.ts → types.d-BkTIKdH6.d.ts} +2 -2
  138. package/dist/types-chunks/{types.d-C5xQEFcj.d.ts → types.d-DncLrpu_.d.ts} +4 -4
  139. package/dist/types-chunks/{types.d-CK9A9rpP.d.ts → types.d-Xy0f3x4i.d.ts} +9 -0
  140. package/dist/types-chunks/{utils.d-CWUyLiXo.d.ts → utils.d-CnxefMos.d.ts} +6 -6
  141. package/package.json +10 -3
  142. package/public_docs/README.md +130 -0
  143. package/public_docs/configuration/sandbox.md +289 -0
  144. package/public_docs/sdk/embedder-guide.md +6674 -0
  145. package/scripts/kodax-bin.cjs +28 -28
  146. package/scripts/production-env.cjs +25 -25
  147. package/dist/chunks/agent-XXZMXKKA.js +0 -2
  148. package/dist/chunks/argument-completer-KCYDGTQW.js +0 -2
  149. package/dist/chunks/chunk-77PNP27P.js +0 -92
  150. package/dist/chunks/chunk-7QBWHCIZ.js +0 -2
  151. package/dist/chunks/chunk-BHE66SP3.js +0 -123
  152. package/dist/chunks/chunk-BR2OSB2I.js +0 -722
  153. package/dist/chunks/chunk-DSMONSVB.js +0 -407
  154. package/dist/chunks/chunk-Q5VRWSKG.js +0 -418
  155. package/dist/chunks/chunk-XWRPOGJN.js +0 -4
  156. package/dist/chunks/chunk-Y5VIQBT6.js +0 -383
  157. package/dist/chunks/compaction-config-EGS4577X.js +0 -2
  158. package/dist/chunks/dist-ITTXQHRJ.js +0 -2
  159. package/dist/chunks/dist-KFYN3OKD.js +0 -2
  160. package/dist/chunks/host-VAYADIPW.js +0 -2
  161. package/dist/chunks/run-manager-52IJZMZJ.js +0 -2
  162. package/dist/chunks/utils-P7PBSL3R.js +0 -2
  163. package/dist/sandbox-workspace-session.js +0 -1705
@@ -1,10 +1,10 @@
1
- import { k as KodaXMessage, G as KodaXReasoningMode, d as KodaXCustomProviderConfig, q as KodaXProviderCapabilityProfile } from './types.d-CK9A9rpP.js';
2
- import { df as WorkflowProcessSource } from './controller.d-C5noq5-w.js';
3
- import { Q as KodaXContextTokenSnapshot, aD as KodaXSkillDynamicContextPolicy, t as KodaXAgentMode, ai as KodaXRepoIntelligenceMode, a4 as KodaXOptions, aE as KodaXSkillInvocationContext } from './bash-prefix-extractor.d-B2rxNI4L.js';
4
- import { e as AgentsFile, t as AutoModeStats, T as KodaXMcpServersConfig } from './guardrail.d-DqHD-61O.js';
1
+ import { k as KodaXMessage, G as KodaXReasoningMode, d as KodaXCustomProviderConfig, q as KodaXProviderCapabilityProfile } from './types.d-Xy0f3x4i.js';
2
+ import { df as WorkflowProcessSource } from './controller.d-C7tXUcXo.js';
3
+ import { Q as KodaXContextTokenSnapshot, aD as KodaXSkillDynamicContextPolicy, t as KodaXAgentMode, ah as KodaXRepoIntelligenceMode, a3 as KodaXOptions, aE as KodaXSkillInvocationContext } from './bash-prefix-extractor.d-DQOlA8cy.js';
4
+ import { e as AgentsFile, t as AutoModeStats, T as KodaXMcpServersConfig } from './guardrail.d-DKTyEHJa.js';
5
5
  import * as readline from 'readline';
6
- import { aq as KodaXSessionUiHistoryItem, af as KodaXSessionLineage, a6 as KodaXSessionArtifactLedgerEntry, V as KodaXExtensionSessionState, U as KodaXExtensionSessionRecord, am as KodaXSessionRuntimeInfo } from './types.d-rUOjXych.js';
7
- import { S as PermissionMode, L as LearningBinding, G as LearningSurfaceSnapshot } from './public-api.d-D7fXaWW8.js';
6
+ import { aq as KodaXSessionUiHistoryItem, af as KodaXSessionLineage, a6 as KodaXSessionArtifactLedgerEntry, V as KodaXExtensionSessionState, U as KodaXExtensionSessionRecord, am as KodaXSessionRuntimeInfo } from './types.d-BbZjR0Wr.js';
7
+ import { S as PermissionMode, L as LearningBinding, G as LearningSurfaceSnapshot } from './public-api.d-Dx3L3W4Z.js';
8
8
  import { SpawnSyncReturns } from 'child_process';
9
9
 
10
10
  /**
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@kodax-ai/kodax",
3
- "version": "0.7.95",
3
+ "version": "0.7.96-alpha.2",
4
4
  "description": "KodaX lightweight coding agent - TypeScript implementation with 16 built-in LLM provider aliases, published as a Node-free single-file CLI and SDK",
5
5
  "type": "module",
6
6
  "private": false,
7
+ "packageManager": "npm@10.9.8",
7
8
  "publishConfig": {
8
9
  "access": "public"
9
10
  },
@@ -81,12 +82,13 @@
81
82
  "./package.json": "./package.json"
82
83
  },
83
84
  "scripts": {
84
- "build": "npm run config:templates:check && npm run build:packages && npm run build:bundle && npm run build:dts",
85
+ "build": "npm run config:templates:check && npm run build:packages && npm run build:native && npm run build:bundle && npm run build:dts",
85
86
  "config:templates:sync": "node scripts/sync-config-templates.mjs",
86
87
  "config:templates:check": "node scripts/sync-config-templates.mjs --check",
87
88
  "build:dts": "node scripts/build-dts.mjs",
88
89
  "build:packages": "tsc -b tsconfig.build.json && npm run copy:builtin -w @kodax-ai/agent && npm run copy:provider-caps -w @kodax-ai/llm",
89
90
  "build:bundle": "node scripts/build-bundle.mjs",
91
+ "build:native": "node scripts/build-native.mjs",
90
92
  "dev": "node --max-old-space-size=4096 --require ./scripts/production-env.cjs --import tsx src/kodax_bootstrap.ts",
91
93
  "dev:cli": "node --max-old-space-size=4096 --require ./scripts/production-env.cjs --import tsx src/kodax_bootstrap.ts",
92
94
  "dev:mem-diag": "node scripts/mem-diag-launch.cjs",
@@ -98,6 +100,8 @@
98
100
  "build:binary": "node scripts/build-binary.mjs",
99
101
  "build:binary:all": "node scripts/build-binary.mjs --all",
100
102
  "test": "vitest run",
103
+ "test:native": "node scripts/test-native.mjs",
104
+ "test:packed-native": "node scripts/test-packed-native.mjs",
101
105
  "test:fast": "vitest run -c vitest.fast.config.ts",
102
106
  "test:changed": "vitest run --changed",
103
107
  "test:unit": "vitest run -c vitest.unit.config.ts",
@@ -183,6 +187,7 @@
183
187
  "ink-testing-library": "^4.0.0",
184
188
  "rollup": "^4.60.4",
185
189
  "rollup-plugin-dts": "^6.4.1",
190
+ "undici": "^6.28.0",
186
191
  "vitest": "^3.2.4"
187
192
  },
188
193
  "engines": {
@@ -202,12 +207,14 @@
202
207
  "dist/runtime-worker.js",
203
208
  "dist/constructed-handler-worker.js",
204
209
  "dist/types-chunks",
210
+ "dist/native",
205
211
  "config-templates",
206
212
  "scripts/kodax-bin.cjs",
207
213
  "scripts/production-env.cjs",
208
214
  "README.md",
209
215
  "README_CN.md",
210
- "docs/SDK_EMBEDDER_GUIDE.md",
216
+ "public_docs/sdk/embedder-guide.md",
217
+ "public_docs/configuration/sandbox.md",
211
218
  "LICENSE",
212
219
  "CHANGELOG.md"
213
220
  ]
@@ -0,0 +1,130 @@
1
+ # KodaX Documentation
2
+
3
+ Public documentation for KodaX users and SDK integrators.
4
+
5
+ The current release is `v0.7.96-alpha.2` (GitHub pre-release; npm publication
6
+ remains manual). It separates trusted text transactions from platform shell
7
+ containment on Windows, Linux, and macOS: controlled text tools commit in the
8
+ trusted KodaX Runtime with per-file kernel locking, revision CAS, and flushed
9
+ atomic replacement, while Windows shell commands run through the native
10
+ restricted-token runner (native shell protocol version 7, Windows
11
+ `sandboxRuntime:6`, one-time `kodax sandbox setup` cutover). It replaces the
12
+ local tool-result capacity hard gate with capacity-debt admission and a
13
+ bounded recovery ladder (`capacityDebt` metadata, floor-bounded output
14
+ reserve, `failureKind: "context_capacity"` with structured `contextTokens`),
15
+ exposes one credential-safe `failureDetail` across failure events, Run
16
+ result/status, and Session diagnostics, and registers the
17
+ `deepseek-v4-flash-vision-exp` and `glm-5.3-flash` models plus the custom
18
+ provider `imageInput` flag. On top of v0.7.95: self-healing
19
+ Windows sandbox cleanup (Windows `sandboxRuntime:5`,
20
+ `runtimeExitSettlement:2`),
21
+ Issue 301 learning-lock / fullscreen-terminal / Explicit-Skill recovery, and
22
+ Issue 302 coding-result finalization before the public completion signal, on
23
+ top of the v0.7.94 concurrent
24
+ sandboxed text mutations, Issue 300 authorized-root git trust, scheduled
25
+ shutdown failure reporting, missing-workspace Run start, and
26
+ `conversationHistory:2`, the
27
+ v0.7.93 failed-exit fast settlement, previous-boot ACL recovery, and isolated
28
+ provider abort classification, plus the v0.7.92 filesystem-effect
29
+ operation-token coordinator, recorded-release owners, managed Session-before-
30
+ completion ordering, canonical-first resume reconstruction, `sandboxRuntime:4`,
31
+ and `crashOutcomeModel:2`. Issue 256's
32
+ lost-ancestor descendant-closure boundary remains open. The same guidance still
33
+ covers the v0.7.89 Issue 293
34
+ topology-transparent conversation projection, FEATURE_293 zero-service web
35
+ search fallback, and FEATURE_294 run-scoped Host Tools. The host-tool surface is
36
+ leased to one Run, registry-first, revocation-safe, and absent from unrelated
37
+ CLI runs. Its custom web-search endpoint remains isolated. The v0.7.88 SDK
38
+ guidance adds the GLM-5.3 Coding Plan
39
+ routes with verbatim model IDs, keeps GLM-5.2 selectable, defaults
40
+ `zhipu-coding`, `zai-coding`, and `ark-coding` to 5.3, and documents the GLM-5.3
41
+ always-thinking effort mapping. It also covers atomic Runtime owner
42
+ recovery, process-start identity locks, Windows sandbox termination attestation,
43
+ durable ACL owner markers, and Windows workspace Shell PATH/executable scoping
44
+ with quoted `cmd.exe` argument preservation. POSIX workspace sessions initialize
45
+ fresh-home policy roots, settle workspace-local warm-up within the Shell
46
+ abort/deadline, retire invalid sessions after lease-cleanup failure, and fail closed when process-tree cleanup is unconfirmed,
47
+ in addition to the v0.7.85 Session-scoped
48
+ Runtime Event Journals, the `sessionEventJournal:1` daemon contract,
49
+ conversation-first Memory management, the additive experimental Memory
50
+ management facade, and the startup/Worker lifecycle boundaries. Issue 256's
51
+ remaining Worker owner-lease boundary remains open after v0.7.89; this release
52
+ assigns no replacement target.
53
+
54
+ The current source additionally documents structured, credential-safe Runtime
55
+ `failureDetail`. Stable KodaX classification stays separate from optional
56
+ bounded upstream identifiers, and failure/settlement events, Run result/status,
57
+ and Session diagnostics project the same fact when it exists. This additive
58
+ contract ships in `v0.7.96-alpha.2`; consumers of older published packages must
59
+ tolerate an absent field.
60
+
61
+ The v0.7.90 SDK guidance also documents orderly retirement for timed-out
62
+ workspace sessions, actionable daemon Error/aggregate/cause diagnostics, direct
63
+ clone-predecessor lineage and topology-correct archive markers, and provider-
64
+ valid object schemas for run-scoped tools. npm publication remains a manual
65
+ operator step.
66
+
67
+ The v0.7.91 SDK guidance adds the crash-resumable
68
+ `settleKodaXRuntimeExit()` transaction and `runtimeExitSettlement:1` capability,
69
+ effective live output segments (`responseId` + `providerRequestId`), and
70
+ standalone lazy provider dependency bundling. It also documents bounded
71
+ AskUser/permission deadlines, owner AbortSignal propagation,
72
+ `handleRuntimePermissionRequest()`, validated default answers, and stale
73
+ prepared-Session-tail recovery after a `data_changed` race.
74
+
75
+ The v0.7.94 SDK guidance documents concurrent sandboxed text mutations,
76
+ authorized-root git trust (`gitSafeDirectory: authorized-repo-roots`),
77
+ byte-bounded linked-worktree and submodule relationship reads, observed
78
+ text-helper stdin failures, scheduled shutdown failure reporting, omitting
79
+ the text sandbox when the workspace directory does not exist,
80
+ `conversationHistory:2`, independent explicit Skill invocation, diagnosed
81
+ invalid `allowed-tools` / malformed hook JSON, `PostToolUse` after an
82
+ embedder observer throw, fail-closed Run terminal settlement, observed
83
+ sandbox/managed-child cleanup rejection, typed daemon disconnect facts,
84
+ bounded credential-safe `failureKind`, and exact-`runId` result recovery. An
85
+ admitted Run is queried and awaited after reconnect; it is never started
86
+ again. `sandboxRuntime:4` and `crashOutcomeModel:2` are unchanged.
87
+
88
+ The v0.7.93 SDK guidance documents that a durable Windows `failed` shutdown
89
+ outcome ends the orderly exit wait, previous-boot shared ACL markers may be
90
+ recovered after a verified boot change, and Anthropic/OpenAI abort wrappers
91
+ are classified by isolated SDK class identity. Capability versions are
92
+ unchanged.
93
+
94
+ The v0.7.92 SDK guidance adds `sandboxRuntime:4` and `crashOutcomeModel:2` as
95
+ pre-start facts. Auto-start replaces an idle older daemon and fails closed
96
+ while it is busy. Managed `onComplete` is not terminal authority. Hosts must
97
+ not delete ProgramData lock files to recover a stuck coordinator. Resume
98
+ reconstruction uses canonical Session `messages` as the transcript; `uiHistory`
99
+ may overlay tool cards and display-only entries but cannot hide ordinary
100
+ conversation. Presentation-only `agent-completed` / `task-completed` events
101
+ stay host-owned when a non-empty CLI `uiHistory` exists.
102
+
103
+ ## Getting Started
104
+
105
+ - [Overview](./getting-started/overview.md) — What KodaX is and how it compares
106
+ - [Installation](./getting-started/installation.md) — npm, single binary, build from source
107
+ - [Quickstart](./getting-started/quickstart.md) — Your first session
108
+
109
+ ## Configuration
110
+
111
+ - [Providers & API Keys](./configuration/providers.md) — 16 built-in provider aliases
112
+ - [Custom Providers](./configuration/custom-providers.md) — OpenAI/Anthropic-compatible endpoints
113
+ - [Configuration Files](./configuration/config-files.md) — config.json, split files, env vars
114
+ - [Permission Modes](./configuration/permissions.md) — Plan / Edits / Auto + Shell Execution Contract
115
+ - [Sandbox](./configuration/sandbox.md) — Optional OS-level containment (ASRT)
116
+
117
+ ## SDK
118
+
119
+ - [Embedder Guide](./sdk/embedder-guide.md) — Full SDK integration guide for
120
+ host applications, including
121
+ [structured credential-safe Runtime failures](./sdk/embedder-guide.md#structured-credential-safe-runtime-failures),
122
+ explicit-vs-model Skill invocation, and dynamic-context policy
123
+
124
+ ## Guides
125
+
126
+ *(More standalone guides coming soon: CLI reference, REPL commands, sessions, multi-agent, skills, extensions, MCP, A2A, repo intelligence, memory, workflows, compaction, doctor, tools reference. Current Skill SDK semantics are documented in the Embedder Guide.)*
127
+
128
+ ## Reference
129
+
130
+ *(Coming soon: troubleshooting, FAQ, comparison, license.)*
@@ -0,0 +1,289 @@
1
+ # Sandbox
2
+
3
+ KodaX supports an optional OS-level sandbox for model-issued shell commands.
4
+ On Windows, ASRT owns network/account setup while the KodaX native runner owns
5
+ the restricted token and process Job; macOS and Linux use ASRT's platform
6
+ backends directly.
7
+
8
+ ## Activate the sandbox
9
+
10
+ ```bash
11
+ kodax sandbox doctor # Check readiness
12
+ kodax sandbox setup # Activate
13
+ ```
14
+
15
+ `kodax setup` and first-run setup also check sandbox readiness once.
16
+
17
+ Trusted text tools have a separate native diagnostic because they do not use
18
+ the shell sandbox. Run `kodax doctor --native-text` to explicitly load and
19
+ verify the packaged trusted-text addon. This check does not require
20
+ `kodax sandbox setup` and does not change shell sandbox state.
21
+
22
+ ## Platform backends
23
+
24
+ | Platform | Backend | Dependencies |
25
+ |---|---|---|
26
+ | **Windows** | Restricted sandbox account + network policy | None (UAC during activation; an upgrade SID rotation may require a second confirmation) |
27
+ | **macOS** | Seatbelt (`sandbox-exec`) | ripgrep (`brew install ripgrep`) |
28
+ | **Linux** | bubblewrap | `bubblewrap`, `socat`, `ripgrep` |
29
+
30
+ KodaX never runs `sudo` or a package manager automatically. If the sandbox is
31
+ not active, deterministic safe operations and Auto[LLM] decisions keep the same
32
+ permission behavior; only OS-level containment is absent. Ordinary runs do not
33
+ repeatedly prompt for setup.
34
+
35
+ On Linux, the kernel and host security policy must also permit unprivileged
36
+ user namespaces. Some hardened distributions disable them even when
37
+ `bubblewrap` is installed. KodaX does not change sysctls or AppArmor policy;
38
+ if the broker proves the wrapper could not spawn the target, the standalone SDK reports
39
+ `reason: 'backend_launch_failed'` with a bounded diagnostic instead of claiming
40
+ that the command completed inside the sandbox. A spawned wrapper that exits
41
+ without target-start authority, or any missing or invalid broker-only control
42
+ frame, returns `execution_uncertain`; the command may have started and must not
43
+ be retried blindly.
44
+
45
+ ## REPL diagnostics
46
+
47
+ In the REPL, `/sandbox` refreshes readiness and diagnostics without activating
48
+ the backend or requesting elevation. Per-command sandbox routing remains
49
+ internal and is not shown in normal command history.
50
+
51
+ ## Environment variable passthrough
52
+
53
+ Credential-shaped environment variables are filtered from model-issued shell
54
+ commands by default. To expose specific host variables to those command targets:
55
+
56
+ ```json
57
+ {
58
+ "sandbox": {
59
+ "envPass": ["GH_TOKEN", "GITHUB_TOKEN", "OPENAI_API_KEY"]
60
+ }
61
+ }
62
+ ```
63
+
64
+ The default list is empty. Values remain in the host environment and are never
65
+ stored in `config.json`; project configuration cannot extend the list. Matching
66
+ is exact (case-insensitive on Windows), and execution-control variables such as
67
+ `NODE_OPTION` and `BASH_ENV` remain blocked.
68
+
69
+ Restart KodaX after changing the host variables or this setting; stop/restart a
70
+ persistent KodaX daemon so it receives the new environment and configuration.
71
+
72
+ ## Historical Windows workspace Shell behavior (v0.7.86-v0.7.95)
73
+
74
+ Windows workspace Shell calls preserve the case-insensitive `PATH`/`Path` and
75
+ `PATHEXT` environment contract across the Runtime and sandbox brokers. KodaX
76
+ derives read grants from the final resolved PATH and shell executable, including
77
+ the bounded traversal needed by profile-manager junctions, rather than granting
78
+ the whole user application tree. `cmd.exe` command arguments retain their
79
+ verbatim-argument contract, so quoted paths and profile-managed executables are
80
+ not re-parsed by an intermediate broker.
81
+
82
+ The packaged Electron and Runtime smoke paths exercise this behavior. A missing
83
+ or unprovable sandbox lifecycle attestation after target start remains
84
+ fail-closed; KodaX does not retry a command that may already have started.
85
+ Commands with the same canonical workspace, Agent Home, additional filesystem,
86
+ toolchain, and network policy can share one Windows policy group across KodaX
87
+ processes. An incompatible policy or sandbox infrastructure failure before
88
+ target start returns the already-authorized command to normal permission
89
+ execution. Runtime sandbox capability v3 first fenced older daemon policy
90
+ revisions in v0.7.86. The v0.7.95 contract was `sandboxRuntime:5`: auto-start
91
+ replaces an idle v4-or-older Windows daemon and fails closed while it is busy.
92
+ The v5 advance marks self-healing Windows cleanup
93
+ (`delayedEffectDrainRecovery: 'automatic'`,
94
+ `sameBootAclRecovery: 'sandbox-user-process-probe'`): the machine-global
95
+ cleanup Job is recoverable across reboots, recovery tickets repair without
96
+ operator input, and background retries observe the exact daemon and supervisor
97
+ process generations. Do not
98
+ delete `model-filesystem-effects.lock` by hand; on Windows the coordinator
99
+ state lives under `C:\ProgramData\KodaX\sandbox-runtime\runtime\`.
100
+
101
+ ## Trusted text tools (v0.7.96)
102
+
103
+ On Windows, Linux, and macOS, Runtime `write`, `edit`, `multi_edit`,
104
+ `insert_after_anchor`, and `undo` are trusted KodaX host operations. They do not enter ASRT, a
105
+ workspace session, the native shell runner, or a sandbox helper. The host
106
+ authorizes the final canonical local path and uses a short cross-Runtime
107
+ per-file kernel lock, locked reread, revision/content CAS, a flushed
108
+ same-directory temporary file, and atomic replacement. Symlink/reparse and
109
+ multi-link targets, remote filesystems, and sensitive KodaX/Git control
110
+ locations fail closed; Windows additionally rejects UNC/device/ADS and other
111
+ alias namespaces. These tools are host-policy
112
+ constrained; they are not advertised as OS-token-sandboxed writes.
113
+
114
+ Atomic replacement is the commit point. If a Unix parent-directory flush or
115
+ escape rollback cannot be proven after that point, the tool returns
116
+ `text_mutation_commit_uncertain` with the complete pre/post receipt and tells
117
+ the caller to reread; do not retry the same edit blindly. Existing-file edits
118
+ retain their Undo backup. An uncertain Undo rebinds that backup to the observed
119
+ post-commit revision for a later CAS-checked resolution. A newly created file
120
+ still reports `before.state: missing` in the error receipt, but this does not
121
+ create a legacy Undo entry that deletes the file. Linux ZFS and casefold directories
122
+ are currently rejected because their namespace case/normalization semantics are
123
+ not yet proven by the native descriptor path.
124
+
125
+ Arbitrary shell programs do not participate in the text-tool lock. If the
126
+ locked final reread observes a shell change, the text operation returns a
127
+ structured stale conflict and does not overwrite the newer bytes; an
128
+ incompatible writer handle at that reread returns contention. On Windows a
129
+ delete/write reservation excludes a new writer between final CAS and the
130
+ POSIX-semantics atomic replace while compatible readers keep complete old/new
131
+ handles. On Unix, an uncooperative write, replace, or rename after final reread
132
+ remains an ordinary operating-system race.
133
+ Different canonical files do not share a transaction lock.
134
+
135
+ On Windows the kernel lock lives in a private namespace bound to the trusted
136
+ host user, so the restricted shell account cannot precreate its name. On Unix,
137
+ a fixed per-UID system coordination root is host-owned with mode `0700` and is
138
+ shared across Runtime config homes; its per-resource inode carries kernel
139
+ `flock`. The native binding is stored separately below
140
+ `KODAX_HOME/native-text-state-v1` and loaded through a no-follow descriptor
141
+ whose digest matches its content-addressed directory. Sandboxed shell policy
142
+ cannot read or write either root, and symlinked Agent Home state fails closed. File presence
143
+ does not mean the lock is held. Process death releases either lock
144
+ automatically and no PID/ticket recovery protocol is required. Unix atomic
145
+ replacement preserves ownership, mode, extended attributes, Linux
146
+ user-modifiable inode flags, and macOS extended ACL/file flags or fails closed.
147
+ On Windows, replacing a file left by an older sandbox identity makes the new
148
+ file trusted-host-owned while retaining its ordered effective ACE policy. The
149
+ filesystem may canonicalize DACL protection/inheritance control at the atomic
150
+ namespace commit; stale inherited authority is not copied from a former parent.
151
+ A low-integrity sandbox label normalizes to ordinary
152
+ host integrity instead of being reapplied. Thus an obsolete sandbox owner cannot permanently
153
+ block Write/Edit and does not require manual ACL repair.
154
+
155
+ ## Background commands and session reuse (v0.7.96)
156
+
157
+ Windows v2 shell commands use a separate native host/runner protocol. ASRT
158
+ supplies the network proxy, WFP/CA integration, and the dedicated account;
159
+ KodaX supplies a restricted policy token, framed stdin/stdout/stderr, and a
160
+ no-breakaway, kill-on-close Job. The target is created suspended and assigned
161
+ to that Job before it may run, and a nonce-bound private desktop whose access
162
+ requires the exact policy capability avoids both
163
+ the known null-desktop loader failure and exposure to the interactive desktop. No filesystem-effect fence, workspace-session
164
+ owner, reset, cleanup, or poison gate spans the command lifetime, so shell
165
+ commands from different policies, Sessions, and Runtime processes may overlap.
166
+ A long-running shell therefore cannot make a trusted text tool unavailable.
167
+ Workspace-local `.kodax/runtime` state is excluded from shell read and write
168
+ authority even though the surrounding workspace is writable; Session journals,
169
+ cursor files, daemon records, and grants remain host-owned control state.
170
+ The private desktop uses an ephemeral full-policy capability. Filesystem write
171
+ authority instead uses stable capabilities derived from the sandbox-account
172
+ generation, final canonical root, and `allowRead`/`allowWrite`/`denyWrite`
173
+ clause. Every read root has an exact allow-read capability and a read-only root
174
+ implicitly carries its deny-write capability. The dedicated account,
175
+ per-launch logon, and Everyone SIDs remain in the restricting set because real
176
+ subprocess creation requires them, matching current Codex; Issue 309 documents
177
+ the remaining ambient-trustee child-DACL boundary. The shared sandbox group
178
+ supplies the normal access-check pass. The target's enabled Windows traverse
179
+ privilege reaches an exact allowed root without persistent ACEs on its private
180
+ ancestors; KodaX never rewrites a profile/container DACL merely to make a child
181
+ root reachable. Every target is preflighted before one atomic ACL transaction. Windows
182
+ `WRITE_RESTRICTED` does not enforce restricting SIDs for reads, so `denyRead`
183
+ uses an execution-logon deny under a short ACL mutex. A durable receipt records
184
+ the no-follow volume/file identity before mutation; exact cleanup follows Job
185
+ drain. A later shell host recovers a crashed owner only when PID creation time
186
+ and target identity prove the receipt stale. A missing or replaced target keeps
187
+ the receipt and blocks shell admission until repair, but cannot block trusted
188
+ text tools.
189
+ Within one Runtime, commands whose canonical network policy and sandbox-account
190
+ generation match share one process-level ASRT network broker; their native
191
+ requests, restricted policy tokens, controller connections, and Jobs remain
192
+ independent. Different network policies never share that authority. ASRT
193
+ 0.0.65 still consumes two fixed-range ports for each distinct broker and has no
194
+ authenticated connection identity for routing unlike policies through one
195
+ ingress. Issue 308 tracks this capacity difference from Codex; KodaX does not
196
+ widen a policy or serialize shell lifetimes to conceal it.
197
+ The broker also owns a verified native liveness controller. Its named pipe is
198
+ created with a protected Host/SYSTEM-only DACL, rejects remote clients, and
199
+ keeps multiple pending instances for concurrent host launches. Restricted
200
+ targets cannot connect to or exhaust this control path. Broker/controller loss
201
+ closes every controller handle, drains active Jobs, and lets a later command
202
+ create a fresh broker.
203
+ This authority split is advertised as `sandboxRuntime:6`; auto-started clients
204
+ replace an idle older daemon and fail closed instead of joining a busy one.
205
+ Upgrading an existing Windows installation requires one `kodax sandbox setup`
206
+ cutover. Setup waits for old sandbox processes to exit, recovers recorded ACL
207
+ work, recreates the dedicated account with a new SID, and records that SID and
208
+ the native protocol in machine state. Doctor and native shell admission remain
209
+ fail-closed if that state is missing or mismatched; trusted text tools remain
210
+ available throughout. The embedded release manifest pins each native sidecar
211
+ protocol/SHA-256 plus the ASRT release version/SHA-256. Verified bytes are
212
+ staged in a protected content-addressed LocalAppData store independent of
213
+ `KODAX_HOME`; ASRT is checked before materialization and again before broker
214
+ startup. Windows text bytes remain Host/SYSTEM-only; the dedicated sandbox
215
+ group SID receives read/execute, but not write/delete, on the shell artifact;
216
+ and local Users receive only read/execute on the pinned ASRT executable. Fixed
217
+ Agent Home and credential read denies are installed once on exact roots through
218
+ native no-follow handles; cold admission idempotently guards an exact sensitive
219
+ directory created after setup. They are not rebuilt for each shell command. The
220
+ ASRT directory is not passed as a final-target policy root. A fixed System32
221
+ provisioner may run during this artifact bootstrap; text content and shell
222
+ stdin never enter it.
223
+
224
+ In a bundled build, the package-source ASRT executable may be a package-store
225
+ hardlink. KodaX does not trust that link relationship: it performs a
226
+ handle-bound bounded read and requires the complete bytes to match the embedded
227
+ release SHA-256 before copying them into the protected cache. Filesystem
228
+ development manifests and sources remain single-link. The executable used by
229
+ the broker still has one link and must pass the protected ACL and digest checks.
230
+ This prevents a valid installation layout from being mistaken for sandbox failure.
231
+
232
+ If a prior host died before a native request was consumed, explicit setup can
233
+ self-heal the protected control directory after proving the sandbox SID idle.
234
+ It retires only an expired request whose creator PID is dead, an aged
235
+ unconsumed network request from a dead PID, or a dead-owner terminal record
236
+ that already says `jobDrained: true`. Doctor never performs this cleanup.
237
+ Live, unexpired, malformed, unknown, and `windows-deny` recovery records remain
238
+ fail-closed instead of being treated as disposable files.
239
+
240
+ The final target is in its Job at process creation. ASRT still creates the
241
+ shared-account runner before KodaX code can apply runner-process hardening;
242
+ Issue 307 tracks that narrow upstream pre-main window, which current Codex also
243
+ retains. The KodaX host requests inherited error-mode suppression before ASRT
244
+ launch and runner code repeats it after entry, but the ASRT-owned cross-account
245
+ creation contract still controls loader faults before runner `main`; final target
246
+ faults are suppressed. It does not affect trusted text tools. Closing it requires an ASRT
247
+ creation-time process/thread security contract or privileged spawn service,
248
+ not another post-spawn patch.
249
+
250
+ Issue 309 documents the remaining Windows compatibility limitation: an explicit
251
+ ACE for a retained compatibility trustee can bypass a later root capability.
252
+ The ACE may be left by a sandbox command or already exist on an external or
253
+ host-owned descendant. KodaX requires exact read/write capabilities for normal
254
+ declared roots, but the primary account, logon, and Everyone SIDs must remain
255
+ for working subprocesses; closing explicit child-DACL reuse needs a different
256
+ loader/token architecture.
257
+
258
+ Linux and macOS shell calls remain ASRT-contained per command through
259
+ bubblewrap or Seatbelt/`sandbox-exec`. They do not keep a KodaX workspace-
260
+ session owner, reset/poison state, or filesystem-effect lease across the shell
261
+ lifetime. On every platform, an arbitrary shell writer is an ordinary OS race
262
+ and does not join trusted-text CAS.
263
+
264
+ ## SDK sandbox
265
+
266
+ SDK callers pass the same shape per Run as `KodaXOptions.sandbox`, so concurrent
267
+ Runs can use different lists without mutating process-global configuration.
268
+
269
+ ```ts
270
+ await runKodaX({
271
+ provider: 'openai',
272
+ sandbox: { envPass: ['GH_TOKEN'] },
273
+ }, 'Inspect the authenticated repository.');
274
+ ```
275
+
276
+ SDK embedders can also use the standalone shell sandbox capability
277
+ independently through `@kodax-ai/kodax/sandbox`. Its readiness and setup state
278
+ apply to shell/process containment only. A failed or unavailable shell runner
279
+ does not change the trusted text-tool path. An unavailable result may include
280
+ `reason: 'doctor_not_ready' | 'backend_launch_failed'`; the latter also includes
281
+ a bounded `diagnostic` and is never reported as a sandboxed completion. A
282
+ separate `execution_uncertain` result means target-start authority could not be
283
+ recovered and callers must reread external state before deciding what to do.
284
+
285
+ ## See also
286
+
287
+ - [Permissions](./permissions.md) — Permission modes and Auto Mode
288
+ - [Configuration files](./config-files.md) — Config.json reference
289
+ - [SDK overview](../sdk/overview.md) — SDK sandbox subpath