@kodax-ai/kodax 0.7.96-rc.9 → 0.7.97-alpha.1

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 (126) hide show
  1. package/CHANGELOG.md +273 -0
  2. package/README.md +139 -62
  3. package/README_CN.md +95 -67
  4. package/config-templates/config.example.jsonc +0 -14
  5. package/dist/chunks/{agent-6EVY7G4I.js → agent-KDEZEKHT.js} +1 -1
  6. package/dist/chunks/argument-completer-S6XK5OQA.js +2 -0
  7. package/dist/chunks/{chunk-5BUZ47TS.js → chunk-27NV62CK.js} +1 -1
  8. package/dist/chunks/{chunk-Q5R2MBGE.js → chunk-2OL4I5TF.js} +1 -1
  9. package/dist/chunks/chunk-3IXRUVY7.js +5 -0
  10. package/dist/chunks/chunk-3M5335DB.js +22 -0
  11. package/dist/chunks/{chunk-W5XGIRQQ.js → chunk-75IELO25.js} +13 -13
  12. package/dist/chunks/chunk-7TYV3YFX.js +261 -0
  13. package/dist/chunks/{chunk-756FJMN2.js → chunk-A26WXO3D.js} +1 -1
  14. package/dist/chunks/chunk-AWHU6MSJ.js +1478 -0
  15. package/dist/chunks/chunk-EIWAATQU.js +355 -0
  16. package/dist/chunks/chunk-H2KGA4NZ.js +641 -0
  17. package/dist/chunks/{chunk-KN6JZLSR.js → chunk-JLZUOLEL.js} +4 -4
  18. package/dist/chunks/{chunk-6DLQC3XX.js → chunk-K4Z7DWSV.js} +1 -1
  19. package/dist/chunks/{chunk-ZFTTLJHQ.js → chunk-KKTVO3ZN.js} +11 -11
  20. package/dist/chunks/chunk-LDCEV5QA.js +2 -0
  21. package/dist/chunks/{chunk-232SV7X6.js → chunk-LGX7WSRT.js} +1 -1
  22. package/dist/chunks/{chunk-MXU77SMG.js → chunk-LIWLDMWE.js} +1 -1
  23. package/dist/chunks/chunk-NNB6AZSC.js +372 -0
  24. package/dist/chunks/chunk-NZYG3D5W.js +21 -0
  25. package/dist/chunks/chunk-O7VU62ZF.js +2 -0
  26. package/dist/chunks/{chunk-FOC6MUV5.js → chunk-OIJYHVTO.js} +1 -1
  27. package/dist/chunks/chunk-SKSS6TDQ.js +498 -0
  28. package/dist/chunks/{chunk-XSCBV3HD.js → chunk-W7W2XKJC.js} +212 -211
  29. package/dist/chunks/chunk-YOKMTTLR.js +473 -0
  30. package/dist/chunks/chunk-ZQYWDI4O.js +1 -0
  31. package/dist/chunks/{client-INQHC2NA.js → client-2UJ3ESQU.js} +1 -1
  32. package/dist/chunks/{compaction-config-3JFJE3FY.js → compaction-config-WQ7SKQYF.js} +1 -1
  33. package/dist/chunks/{construction-bootstrap-LMJUNZUQ.js → construction-bootstrap-IOWLYAWA.js} +1 -1
  34. package/dist/chunks/{dist-222EMRS3.js → dist-5Z6YN7Z6.js} +1 -1
  35. package/dist/chunks/dist-YWAVSU65.js +2 -0
  36. package/dist/chunks/host-ELUUZWI4.js +2 -0
  37. package/dist/chunks/readline-helpers-ONOPF5J5.js +2 -0
  38. package/dist/chunks/run-manager-7INNATMJ.js +2 -0
  39. package/dist/chunks/utils-HFKMRP34.js +2 -0
  40. package/dist/index.d.ts +60 -29
  41. package/dist/index.js +10 -6
  42. package/dist/kodax_bootstrap.js +1 -1
  43. package/dist/kodax_cli.js +1759 -1735
  44. package/dist/kodax_resume.js +32 -35
  45. package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
  46. package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
  47. package/dist/native/win32-x64/manifest.json +2 -2
  48. package/dist/sandbox-network-broker.js +70 -70
  49. package/dist/sdk-a2a.d.ts +31 -18
  50. package/dist/sdk-a2a.js +8 -9
  51. package/dist/sdk-agent.d.ts +91 -27
  52. package/dist/sdk-agent.js +1 -1
  53. package/dist/sdk-client.d.ts +29 -0
  54. package/dist/sdk-client.js +2 -0
  55. package/dist/sdk-coding.d.ts +86 -498
  56. package/dist/sdk-coding.js +1 -1
  57. package/dist/sdk-experimental-memory.d.ts +5 -6
  58. package/dist/sdk-experimental-memory.js +1 -1
  59. package/dist/sdk-llm.d.ts +8 -8
  60. package/dist/sdk-llm.js +1 -1
  61. package/dist/sdk-mcp.d.ts +3 -3
  62. package/dist/sdk-mcp.js +1 -1
  63. package/dist/sdk-media.d.ts +3 -1
  64. package/dist/sdk-media.js +1 -1
  65. package/dist/sdk-repl.d.ts +315 -70
  66. package/dist/sdk-repl.js +2 -2
  67. package/dist/sdk-runtime.d.ts +540 -343
  68. package/dist/sdk-runtime.js +1 -1
  69. package/dist/sdk-sandbox.js +1 -1
  70. package/dist/sdk-session.d.ts +11 -9
  71. package/dist/sdk-session.js +1 -1
  72. package/dist/sdk-skills.js +1 -1
  73. package/dist/semantic-worker.js +53 -53
  74. package/dist/types-chunks/{base.d-Bt9lhwSV.d.ts → base.d-Dz_g7CUo.d.ts} +1 -1
  75. package/dist/types-chunks/{bash-prefix-extractor.d-C94-n4cl.d.ts → bash-prefix-extractor.d-BhFz5sIp.d.ts} +149 -56
  76. package/dist/types-chunks/{capability-learning.d-gRtO03f6.d.ts → capability-learning.d-B4pxKwP4.d.ts} +1 -1
  77. package/dist/types-chunks/{capability.d-Ch5Vos33.d.ts → capability.d-DOF3r0fJ.d.ts} +1 -1
  78. package/dist/types-chunks/{capsule.d-pCKlk4oY.d.ts → capsule.d-DhXy_i0g.d.ts} +19 -27
  79. package/dist/types-chunks/client-contract-DYkkBxuz.d.ts +1777 -0
  80. package/dist/types-chunks/{controller.d-CpCtr_Ew.d.ts → controller.d-BkUJ_3sl.d.ts} +2 -2
  81. package/dist/types-chunks/{controller.d-BOR06_Tm.d.ts → controller.d-CA7iiSfI.d.ts} +141 -1381
  82. package/dist/types-chunks/{history-retrieval.d-Ckz3qqag.d.ts → history-retrieval.d-JdFfkeF3.d.ts} +2 -2
  83. package/dist/types-chunks/{manager.d-rtmywU9M.d.ts → manager.d-C_20XqCV.d.ts} +8 -1
  84. package/dist/types-chunks/manifest.d-Bw2i-zQi.d.ts +18 -0
  85. package/dist/types-chunks/{public-api.d-CnFEp3cI.d.ts → public-api.d-CofjXB_K.d.ts} +51 -14
  86. package/dist/types-chunks/{resolver.d-BrwLoWNr.d.ts → resolver.d-BMoO2VPt.d.ts} +2 -2
  87. package/dist/types-chunks/{types.d-BKZnSdRC.d.ts → review-inbox.d-BeaLRNHx.d.ts} +269 -5
  88. package/dist/types-chunks/{shell-command-sets.d-C-zD-4yF.d.ts → review-packet.d-BskpQxDZ.d.ts} +46 -3
  89. package/dist/types-chunks/{exec-policy.d-DiMx1srL.d.ts → run-manager.d-BrVCxHum.d.ts} +384 -61
  90. package/dist/types-chunks/runtime-client-info-DE3G2vWa.d.ts +15 -0
  91. package/dist/types-chunks/{sdk-session-DaDBjpdX.d.ts → sdk-session-BjZqSlA-.d.ts} +12 -4
  92. package/dist/types-chunks/{side-query.d-DHWG1JZg.d.ts → side-query.d-DmOU7byC.d.ts} +2 -2
  93. package/dist/types-chunks/trusted-repl-entry-C7tjze05.d.ts +445 -0
  94. package/dist/types-chunks/{types-PHjfwebT.d.ts → types-DDJu9iWX.d.ts} +1 -1
  95. package/dist/types-chunks/{types.d-BrQMB-hy.d.ts → types.d-BjOq57-z.d.ts} +6 -0
  96. package/dist/types-chunks/{types.d-Dt_rSXaY.d.ts → types.d-mlrvOZT1.d.ts} +5 -5
  97. package/dist/types-chunks/types.d-o7t9dds4.d.ts +1484 -0
  98. package/dist/types-chunks/{utils.d-BvgUCbA7.d.ts → utils.d-Bi-i7O5D.d.ts} +202 -36
  99. package/docs/CLIENT_CONTRACT.md +437 -0
  100. package/docs/SDK_MIGRATION.md +121 -0
  101. package/package.json +14 -8
  102. package/public_docs/README.md +12 -133
  103. package/public_docs/configuration/config-files.md +8 -14
  104. package/public_docs/configuration/providers.md +6 -0
  105. package/public_docs/configuration/sandbox.md +14 -5
  106. package/public_docs/sdk/embedder-guide.md +539 -386
  107. package/dist/chunks/argument-completer-BNQYBL4T.js +0 -2
  108. package/dist/chunks/chunk-2Y5LQMLN.js +0 -1477
  109. package/dist/chunks/chunk-47SKBACW.js +0 -486
  110. package/dist/chunks/chunk-4X3DSAWJ.js +0 -275
  111. package/dist/chunks/chunk-CSI32XDU.js +0 -471
  112. package/dist/chunks/chunk-H5OL3Y6W.js +0 -675
  113. package/dist/chunks/chunk-I2TJALBT.js +0 -22
  114. package/dist/chunks/chunk-NYCQI6QP.js +0 -2
  115. package/dist/chunks/chunk-SCP7FZLG.js +0 -363
  116. package/dist/chunks/chunk-WHQCTZKI.js +0 -5
  117. package/dist/chunks/chunk-ZKLRAYLT.js +0 -324
  118. package/dist/chunks/dist-3RTEFTGF.js +0 -2
  119. package/dist/chunks/host-5XO2DM2M.js +0 -2
  120. package/dist/chunks/run-manager-JM5GVG3E.js +0 -2
  121. package/dist/chunks/utils-PJMIIKRJ.js +0 -2
  122. package/dist/runtime-worker.js +0 -5368
  123. package/dist/types-chunks/review-inbox.d-9yOBc4--.d.ts +0 -221
  124. package/dist/types-chunks/run-manager.d-9IQPAUM-.d.ts +0 -94
  125. package/dist/types-chunks/trusted-repl-entry-DOsmYa7z.d.ts +0 -323
  126. package/dist/types-chunks/types.d-C0ywMnBV.d.ts +0 -146
package/CHANGELOG.md CHANGED
@@ -8,6 +8,279 @@ All notable changes to this project will be documented in this file.
8
8
 
9
9
  ---
10
10
 
11
+ ## [0.7.97-alpha.1] - 2026-10-08
12
+
13
+ First alpha of the v0.7.97 line: FEATURE_298's unified product Host and
14
+ client contract. The interactive product pins to the independent Host, one
15
+ shared session contract carries data, control, and information semantics to
16
+ every consumer, and execution funnels through one prepared action. Every
17
+ v0.7.96 stable contract is retained. npm publication remains a manual
18
+ maintainer action.
19
+
20
+ ### Added
21
+
22
+ - Shared product session contract and SDK entry: `KodaXProductClient`
23
+ through `/client` exposes sessions, goals, notices, paged history reads,
24
+ and Host-estimated token accounting to product consumers (T01, T09, T32).
25
+ - The interactive REPL pins to the independent Host: session-command
26
+ mutations, `/compact`, `/goal`, full-text queue retention with atomic
27
+ pull-back, prompt input artifacts, and canonical session writes route
28
+ through the Host plane (T27, T34).
29
+ - Host-owned planes replace client-side reimplementations: queued inputs
30
+ with batching and withdrawal (T06), steer/redirect/explicit-stop delivery
31
+ with required target runs (T07), one permission authority (T14), skills
32
+ preparation expanded at consumption (T37), declarative workflow start and
33
+ control operations (T22), memory management (T36), per-session MCP
34
+ persistence with typed catalogs (T12), A2A serving from bootstrap listen
35
+ config (T21), agent registry and Actor collaboration (T30), invocations
36
+ preparation over RPC for all interactive faces (T37), session derivation
37
+ by fork or deterministic recovery seed (T10), lineage selection/labels/
38
+ rewind (T11), and conservative legacy-run reads with event repair (T33).
39
+
40
+ ### Fixed
41
+
42
+ - Preserve canonical history and ordinary browsing: complete canonical items
43
+ restore before identity assignment, reverse wheel input routes from frozen
44
+ windows, browse waiting is bounded and cancellable, partial pages keep the
45
+ final answer after older tools, and quoted managed protocol markers no
46
+ longer truncate ordinary assistant answers (Issues 344-349).
47
+ - Host command failures stay visible with their feedback, late observation
48
+ cleanup keeps its diagnostics, and Host message counts drive `/new`.
49
+ - Frontmatter hooks execute on Linux: the default hook contract no longer
50
+ pairs the bash contract with `/bin/sh`, which is dash on Debian/Ubuntu and
51
+ rejected every hook at shell environment resolution (Issue 354).
52
+ - Crash recovery proceeds after a `SIGKILL`ed daemon on Linux: a zombie pid
53
+ waiting for its parent to reap it is no longer classified as a live
54
+ competing owner (Issue 355).
55
+ - Release validation hardened the interactive fixtures (CI static-output
56
+ detection, learning-review request classification), raised the
57
+ machine-relative long-line layout budget on CI evidence (Issues 356-358;
58
+ 358 remains open for profiling), and aligned the release binary provider
59
+ smoke with Host-owned execution by seeding every provider's key env per
60
+ probe.
61
+
62
+ ---
63
+
64
+ ## [0.7.96] - 2026-10-01
65
+
66
+ Stable release of the v0.7.96 line, finalizing the fourteen release
67
+ candidates: trusted text transactions and platform shell containment across
68
+ Windows, Linux, and macOS; Windows daemon lifecycle arbitration with
69
+ nonblocking uncertain Shell cleanup; turn-matched interrupted-Run recovery
70
+ across Runs; provable tool-history pairing and compaction-copy tracing;
71
+ macOS system Git preflight; provider authentication isolation; single-writer
72
+ Runtime transcript ownership in Ink sessions; and Windows NUL-ACE startup
73
+ recovery. CI runs inside the tag-triggered Release workflow. Every rc.14
74
+ contract is retained; open items remain tracked in `docs/KNOWN_ISSUES.md`.
75
+ npm publication remains a manual maintainer action.
76
+
77
+ ---
78
+
79
+ ## [0.7.96-rc.14] - 2026-10-01
80
+
81
+ Fourteenth release candidate of the v0.7.96 line: interrupted-Run recovery
82
+ reaches coding Runs and managed execution with budgeted turn-matched
83
+ records, tool-history pairing and compaction-copy tracing become provable,
84
+ Anthropic-compatible providers ignore inherited `ANTHROPIC_AUTH_TOKEN`, the
85
+ Ink host defers to the Runtime as the single transcript writer, and Windows
86
+ interactive startup re-verifies the NUL account ACE behind a current setup
87
+ marker after a reboot. CI now runs inside the tag-triggered Release
88
+ workflow instead of on branch pushes. Every rc.13 contract is retained. npm
89
+ publication remains a manual maintainer action.
90
+
91
+ ### Fixed
92
+
93
+ - Interactive Windows startup verifies the live NUL sandbox-account grant
94
+ before trusting the durable setup marker. Missing access enters the existing
95
+ setup recovery boundary; installation omits historical read roots whose
96
+ files disappeared. SDK/daemon startup and ordinary admission remain
97
+ read-only and do not activate setup automatically (Issue 341).
98
+ - Windows sandbox unit tests provision mock-SID artifacts and remove recovery
99
+ fixtures in a private temporary native cache, so they no longer interfere
100
+ with live sandbox commands using the host's shared cache. The native
101
+ provisioning suite still requires an ordinary host token (Issue 343).
102
+ - Tool-history validation pairs calls with results across the whole assistant
103
+ scope, so an internal managed-run context message between them no longer
104
+ strips both halves of the pair (Issue 340).
105
+ - Failed managed provider calls hand back the Runner transcript they received,
106
+ not provider-normalized request copies, so compatibility cleanup never becomes
107
+ persisted history.
108
+ - Conversation resolution restores active-path entries damaged by the old
109
+ adjacent-only cleanup when a retained sibling chain reproduces the damage
110
+ exactly; unproven cases stay ambiguous. The page cache version is bumped so
111
+ existing v6 caches rebuild once.
112
+ - The next managed or coding Run of a Session receives a labelled, bounded,
113
+ transient record of journaled progress from an earlier unfinished Run on the
114
+ active branch: confirmed results, operations whose result is unknown, and
115
+ unconfirmed excerpts of assistant text the Run streamed but never saved. The
116
+ record is never saved and each part disappears once history contains it.
117
+ Operations from every included Run take the size bound before any excerpt.
118
+ Operations match history per turn, so a provider reusing a tool call id in a
119
+ later turn no longer hides an earlier unfinished operation, and the source
120
+ tracing also covers histories compacted again before this fix.
121
+ - Conversation resolution traces a compaction copy of a copy back to its first
122
+ retained predecessor, so re-compacted history no longer shows the same
123
+ message twice. When an older compaction boundary cannot be proven, history
124
+ is truncated at that boundary and reported as `partial` with
125
+ `compaction_history_truncated`, instead of flattening unproven regions into
126
+ one conversation. The page cache version is bumped to 9.
127
+ - Anthropic-compatible providers no longer pick up an inherited
128
+ `ANTHROPIC_AUTH_TOKEN`. The SDK sent it as a Bearer header next to the
129
+ provider key, so gateways such as zhipu-coding and deepseek returned 401 and
130
+ the Anthropic token reached a third-party endpoint. The native Anthropic
131
+ provider is unchanged.
132
+ - Compare PowerShell-emitted native artifact and control-directory paths
133
+ through long-form realpaths when the literal comparison disagrees.
134
+ PowerShell's `GetFullPath` expands 8.3 path components, so a runner whose
135
+ `TEMP` root uses a short name (`C:\Users\RUNNER~1\...`) made the private
136
+ test native-artifact cache provisioning fail with an unexpected-path error
137
+ even though the provisioner returned the canonical destination.
138
+ - The interactive REPL no longer forks a duplicate branch every round when a
139
+ Runtime owns the Session. The host stops writing its own lineage. Storage
140
+ reconciles host saves against the Runtime's durable lineage, and the host
141
+ continues from the Runtime's entry ids. That fixes three problems:
142
+ - The next host save no longer replaces the Runtime's branch.
143
+ - A crash between the two writes no longer leaves a permanent fork.
144
+ - A Run cancelled before it produced a result no longer clears the host's
145
+ transcript copy.
146
+
147
+ ### Changed
148
+
149
+ - CI runs through `workflow_call` or manual dispatch instead of branch pushes
150
+ and pull requests. Tag and manually dispatched release builds run the full
151
+ reusable CI workflow before their build matrix.
152
+
153
+ ### Documentation
154
+
155
+ - Align the public SDK guide with read-only legacy history repair, partial
156
+ compaction truncation, transient interrupted-Run recovery, and Runtime-owned
157
+ transcript persistence. Document the CLI-only NUL recovery boundary and
158
+ provider authentication isolation.
159
+ - Track unexpected interactive REPL exit as unresolved (Issue 342). Successful
160
+ SDK concurrency and full-TTY trace replay do not resolve that failure.
161
+
162
+ ---
163
+
164
+ ## [0.7.96-rc.13] - 2026-09-29
165
+
166
+ Thirteenth release candidate of the v0.7.96 line: Runtime-owned managed
167
+ runs persist generated output at Runner commit boundaries so an interrupted
168
+ run keeps its transcript instead of losing it with a hung request. Every
169
+ rc.12 contract is retained. npm publication remains a manual maintainer
170
+ action.
171
+
172
+ ### Fixed
173
+
174
+ - Runtime-owned managed runs persist generated assistant messages and tool results
175
+ at Runner commit boundaries, before tools or subsequent provider calls can hang.
176
+ Persist the current compacted transcript and queued-input identities; do not
177
+ repeatedly save old input messages or change host-owned persistence timing.
178
+
179
+ ---
180
+
181
+ ## [0.7.96-rc.12] - 2026-09-28
182
+
183
+ Twelfth release candidate of the v0.7.96 line: uncertain Shell cleanup no
184
+ longer blocks conversations, Runner iteration progress becomes observable,
185
+ exhausted Actor children settle with honest structured results, and the test
186
+ toolchain upgrades to Vitest 4. Every rc.11 contract is retained. npm
187
+ publication remains a manual maintainer action.
188
+
189
+ ### Fixed
190
+
191
+ - Return exhausted Shell cleanup diagnostics and partial output to the model
192
+ without cancelling its Run. Keep unresolved process identities as deferred
193
+ cleanup, allow successors and close, and accept queued input during Stop.
194
+ - Expose Root Runner iteration progress in Runtime live snapshots and structured
195
+ Actor iteration progress in durable turn summaries/output. Values come from
196
+ the executing Runner; the default managed Root (500) and native Actor child
197
+ (200) thresholds are unchanged.
198
+ - Settle exhausted native Actor children as failed with terminationReason
199
+ iteration_limit, preserving partial output, artifacts and structured results.
200
+ Parent completion notifications include the reason. Exhaustion no longer runs
201
+ a structured-output repair or workflow digest, and follow-up starts a fresh
202
+ iteration count. Completion on the final permitted iteration remains successful.
203
+
204
+ ### Changed
205
+
206
+ - Upgrade the test toolchain to Vitest 4.1.11 (with `@vitest/coverage-v8`
207
+ 4.1.11 and pinned vite 7.3.3/vite-node) and fflate ^0.8.3, which fixes a
208
+ ZIP64 directory scan that never terminated when a compressed-size sentinel
209
+ was present without the required `0x0001` extra field; skill archive
210
+ regression coverage locks the fix in.
211
+
212
+ ### Documentation
213
+
214
+ - Document the embedder-owned Electron `safeStorage` credential storage
215
+ lifecycle: on Windows, the `Local State` encryption state must be preserved
216
+ together with the ciphertext across cleanup, uninstall, reinstall, and
217
+ profile migration, and an undecryptable existing client secret surfaces a
218
+ terminal credential recovery error instead of a silent replacement.
219
+
220
+ ---
221
+
222
+ ## [0.7.96-rc.11] - 2026-09-23
223
+
224
+ Eleventh release candidate of the v0.7.96 line: SDK-owned background Git
225
+ calls on macOS preflight the system Git shim so a machine without usable
226
+ command-line developer tools no longer receives repeated Apple installation
227
+ prompts. Every rc.10 contract is retained. npm publication remains a manual
228
+ maintainer action.
229
+
230
+ ### Fixed
231
+
232
+ - Preflight the macOS system Git shim before SDK-owned Git calls
233
+ (`@kodax-ai/agent/runtime/macos-git`): the shared platform guard detects
234
+ the known developer-tools-missing condition only (exit code 2,
235
+ `DEVELOPER_DIR`-aware), caches probes with a bounded TTL, shares one probe
236
+ across concurrent callers, and recovers after installation with no
237
+ permanent disable state. Repo-intelligence, worktree, changed-diff,
238
+ managed-task checkpoint, agent-adapter, worktree-sweep, session-snapshot,
239
+ REPL helpers, and synchronous memory paths apply the guard while ordinary
240
+ Git on `PATH`, independent Git installations, and arbitrary Bash/PTY
241
+ commands remain unchanged (Issue 339). Worktree operations keep actionable
242
+ errors; synchronous memory identity keeps its remote-based identity and
243
+ local-path fallback rules. Native macOS on-device UI verification remains
244
+ recommended on real hardware.
245
+
246
+ ---
247
+
248
+ ## [0.7.96-rc.10] - 2026-09-22
249
+
250
+ Tenth release candidate of the v0.7.96 line: Runtime shutdown now owns and
251
+ drains the background work it starts, Edits-mode text tools no longer reject
252
+ ordinary project files when a workspace root contains protected native state,
253
+ and the MCP image-validation cancellation fixture is stabilized. Every rc.9
254
+ contract is retained. npm publication remains a manual maintainer action.
255
+
256
+ ### Fixed
257
+
258
+ - Drain owned managed terminal maintenance on Runtime close: the optional
259
+ repo-intelligence/artifact maintenance factory is registered with its own
260
+ Runtime before it can start, close stops accepting new optional maintenance
261
+ and waits for existing owned work before releasing Actor, executor, and
262
+ owner-liveness resources, so test workspaces are no longer held after
263
+ `Runtime.close()` returns. Run completion, successor admission, and Stop
264
+ stay independent of maintenance; shared repo caches are not cancelled.
265
+ - Own and settle memory work on shutdown: Runtime registers its memory
266
+ setup/finalization IO and background review drains before execution; close
267
+ refuses new work, cancels pending review requests, and awaits
268
+ already-started work before releasing the owner. Managed execution finishes
269
+ its required durable memory finalization before publishing completion, the
270
+ classic finalizer owns learned-Skill outcome and binding-release IO, and
271
+ branch-authority setup checks cancellation before prompt/Git work. A caller
272
+ signal already aborted at entry settles as an interrupt terminal (defined
273
+ `KodaXResult`, terminal `onComplete`) instead of a raw rejection, keeping
274
+ the CAP-005-001b and CAP-086-003 contracts.
275
+ - Scope trusted text transaction cache protection to the authorized canonical
276
+ target: Edits-mode `edit`/`write` no longer fail with `Runtime write policy
277
+ targets protected native text state` for ordinary project files when a
278
+ workspace root contains the protected native cache (for example a home
279
+ root). Development artifact trust still checks every authorized write root,
280
+ so a writable manifest cannot redefine trusted native bytes.
281
+
282
+ ---
283
+
11
284
  ## [0.7.96-rc.9] - 2026-09-21
12
285
 
13
286
  Ninth release candidate of the v0.7.96 line: Windows daemon startup trees
package/README.md CHANGED
@@ -424,21 +424,30 @@ const result = await runKodaX(
424
424
 
425
425
  ## Runtime SDK and daemon
426
426
 
427
- SDK hosts can use `@kodax-ai/kodax/runtime` in three forms: inline embedded for
428
- lowest latency, Worker-hosted embedded for private state plus hard V8 disposal,
429
- or a local daemon shared by REPL, Space, IDE adapters, and custom SDK clients.
430
- All three expose the same `KodaXRuntime` services.
427
+ For shared Sessions, use `KodaXProductClient` from `@kodax-ai/kodax/client`.
428
+ The Host owns execution, settings and persistence; the UI submits inputs,
429
+ answers Host interactions and replaces its display from `sessions.observe`.
430
+ See the [Client contract](docs/CLIENT_CONTRACT.md), [SDK migration guide](docs/SDK_MIGRATION.md),
431
+ and [integration example](public_docs/sdk/embedder-guide.md#product-client-integration).
431
432
 
432
433
  ```ts
433
- import { createKodaXRuntime } from '@kodax-ai/kodax/runtime';
434
-
435
- const isolated = await createKodaXRuntime({
436
- mode: 'embedded',
437
- isolation: 'worker',
438
- requirements: { hardDispose: true },
439
- });
434
+ import { ensureKodaXClient } from '@kodax-ai/kodax/client';
435
+
436
+ const client = await ensureKodaXClient();
437
+ try {
438
+ const sessions = await client.sessions.list();
439
+ process.stdout.write(`Sessions: ${sessions.length}\n`);
440
+ } finally {
441
+ await client.disconnect(); // Shared Host and Runs remain alive.
442
+ }
440
443
  ```
441
444
 
445
+ `connectKodaXClient` attaches without starting or replacing a Host. The Node
446
+ connector does not provide browser HTTP/WebSocket transport. The retained
447
+ `/runtime` inline/daemon APIs are for explicit low-level Host integration;
448
+ Worker-hosted embedded Runtime is removed. The following structured-failure
449
+ reference is scoped to that low-level API, not fields promised by Product Client.
450
+
442
451
  ### Structured Runtime failures
443
452
 
444
453
  Since v0.7.96, when Runtime has a structured failure fact, failed/cancelled runs
@@ -470,47 +479,21 @@ collections, URLs, full local paths, stacks, or raw `Error` objects into
470
479
  See [Structured Runtime failures](public_docs/sdk/embedder-guide.md#structured-credential-safe-runtime-failures)
471
480
  for the field contract, taxonomy, migration guidance, and security boundary.
472
481
 
473
- Inline is private and lowest-overhead; Worker is private and hard-disposable;
474
- daemon is process-isolated and shared. `runtime.close()` closes private
475
- inline/Worker ownership, but only detaches one daemon client. Contradictory
476
- isolation options fail instead of silently selecting a weaker mode. Worker
477
- isolation is a V8 fault boundary, not a security sandbox.
478
-
479
- Because a daemon is intentionally persistent, tests that auto-start one must
480
- also run `kodax daemon stop --home <dir> --profile <name>` (or send authenticated
481
- `runtime.shutdown`) before deleting their temporary home. A remaining Node
482
- process is not safe to kill by name alone; verify its command line and owner.
482
+ The product CLI uses the shared Host; `--runtime-mode`, `KODAX_RUNTIME_MODE`
483
+ and the `runtimeMode` config key are removed. Explicit low-level inline
484
+ embedding retains private ownership, while daemon clients detach independently.
485
+ Worker-hosted embedded Runtime is no longer an option.
483
486
 
484
487
  ```bash
485
488
  kodax daemon start
489
+ kodax -p "Review this repository"
486
490
  kodax daemon stop --profile default
487
- kodax --runtime-mode daemon
488
- kodax -p "Review this repository" --runtime-mode daemon
489
491
  ```
490
492
 
491
- All CLI task forms now use the same Runtime path: interactive REPL, positional
492
- prompts, slash-command prompts, and `kodax -p`. Select the persistent default in
493
- `~/.kodax/config.json`:
494
-
495
- ```json
496
- {
497
- "runtimeMode": "daemon"
498
- }
499
- ```
500
-
501
- Resolution order is explicit CLI/SDK option > environment variable >
502
- `config.json` > built-in default (`embedded`). `KODAX_RUNTIME_MODE=daemon` is a
503
- temporary environment override. The same rule applies to other paired settings,
504
- for example `provider` ↔ `KODAX_PROVIDER` and `effort` ↔ `KODAX_EFFORT`.
505
- JSON names stay camelCase while environment names use `KODAX_UPPER_SNAKE_CASE`.
506
-
507
- By default, daemon state, config, and runtime session storage use the exact
508
- resolved `KODAX_HOME` (normally `<OS user home>/.kodax`), so CLI and SDK clients
509
- converge on the same local daemon even when `KODAX_HOME` is an arbitrary custom
510
- directory. The high-level `createKodaXRuntime({ mode: 'daemon' })` API starts or
511
- reuses that daemon unless you pass an explicit endpoint/transport or
512
- `autoStartDaemon: false`. An explicit `--home <dir>` or `homeDir` selects the
513
- isolated `<dir>/.kodax` namespace for tests, CI, or project-local experiments.
493
+ Tests that start an isolated Host must close that exact Host after its work has
494
+ settled, before removing its temporary home. Never stop arbitrary Node processes.
495
+ With no explicit home, CLI and SDK use the resolved `KODAX_HOME`; explicit
496
+ `homeDir` / `--home` selects a base directory containing `.kodax`.
514
497
 
515
498
  **v0.7.71 packaged Electron patch:** packaged/asar Electron hosts can use daemon
516
499
  auto-start without relaunching the GUI. `ELECTRON_RUN_AS_NODE` is limited to a
@@ -616,7 +599,7 @@ FEATURE_280 was explicitly rescheduled to v0.7.81 (then to v0.7.86 on
616
599
  Issue 256 was explicitly rescheduled to v0.7.84 and is likewise not represented
617
600
  as shipped by this release.
618
601
 
619
- **v0.7.80 hardening release:** The CLI honors `worker.configuredA2A` in
602
+ **v0.7.80 hardening release:** The CLI honored `worker.configuredA2A` in
620
603
  `~/.kodax/config.json`: the embedded Runtime becomes Worker-hosted and loads
621
604
  the configured A2A plane inside the Worker owner, so configured outbound
622
605
  Agents appear as `external:<name>` in `list_dispatchable_agents` and can be
@@ -786,6 +769,84 @@ provider's model, REPL `/compact` clears the UI only after a durable save, and
786
769
  successful reports carry bounded `summaryRequests` plus `commitMs` per
787
770
  physical summary call.
788
771
 
772
+ **v0.7.97-alpha.1 release:** First alpha of the v0.7.97 line — FEATURE_298's
773
+ unified product Host and client contract. The interactive REPL pins to the
774
+ independent Host; the shared product session contract (`KodaXProductClient`
775
+ through `/client`) carries sessions, goals, notices, paged history, queued
776
+ inputs with batching and withdrawal, and the steer/redirect/stop delivery
777
+ distinction; one permission authority, skills, workflows, memory, per-session
778
+ MCP persistence, and A2A serving become Host-owned; sessions derive by fork
779
+ or deterministic recovery seed; and runtime read/write gaps close (Issues
780
+ 344-349). Every v0.7.96 stable contract is retained; cross-platform manual
781
+ acceptance remains open.
782
+
783
+ **v0.7.96 stable release:** The stable release of the v0.7.96 line,
784
+ finalizing the fourteen release candidates: trusted text transactions and
785
+ platform shell containment across Windows, Linux, and macOS; Windows daemon
786
+ lifecycle arbitration with nonblocking uncertain Shell cleanup; turn-matched
787
+ interrupted-Run recovery across Runs; provable tool-history pairing and
788
+ compaction-copy tracing; macOS system Git preflight; provider authentication
789
+ isolation; single-writer Runtime transcript ownership in Ink sessions; and
790
+ Windows NUL-ACE startup recovery. CI runs inside the tag-triggered Release
791
+ workflow. Every rc.14 contract is retained; open items remain tracked in
792
+ `docs/KNOWN_ISSUES.md`.
793
+
794
+ **v0.7.96-rc.14 release:** Fourteenth release candidate of the v0.7.96
795
+ line. Interrupted-Run recovery reaches coding Runs and managed execution
796
+ with a labelled, bounded, transient record of journaled progress matched
797
+ per turn; tool-history pairing spans the whole assistant scope;
798
+ conversation resolution traces compaction copies to a provable root and
799
+ truncates unproven boundaries as `partial`; Anthropic-compatible providers
800
+ ignore an inherited `ANTHROPIC_AUTH_TOKEN`; the Ink host defers to the
801
+ Runtime as the single transcript writer; and Windows interactive startup
802
+ re-verifies the NUL account ACE behind a current setup marker after a
803
+ reboot (Issues 340-341). CI now runs inside the tag-triggered Release
804
+ workflow instead of on branch pushes. Every rc.13 contract is retained.
805
+
806
+ **v0.7.96-rc.13 release:** Thirteenth release candidate of the v0.7.96
807
+ line. Runtime-owned managed runs persist generated assistant messages and
808
+ tool results at Runner commit boundaries, before tools or subsequent
809
+ provider calls can hang: the current compacted transcript and queued-input
810
+ identities survive an interrupted run, initial input replay is skipped
811
+ rather than re-saving all history, and host-owned persistence timing is
812
+ unchanged. Every rc.12 contract is retained.
813
+
814
+ **v0.7.96-rc.12 release:** Twelfth release candidate of the v0.7.96 line.
815
+ Uncertain Shell cleanup no longer blocks conversations: exhausted cleanup
816
+ retries return diagnostics and partial output to the model, unresolved
817
+ process identities become deferred cleanup records, successors and close
818
+ proceed, and an exhausted terminal Run settles honestly with
819
+ `effectOutcome: unknown` instead of claiming verified termination. Root
820
+ Runner iteration progress is exposed in Runtime live snapshots and durable
821
+ Actor turns, and exhausted native Actor children settle as failed with
822
+ `terminationReason: iteration_limit` while preserving partial output,
823
+ artifacts, and structured results. The test toolchain upgrades to Vitest
824
+ 4.1.11 with fflate 0.8.3 (ZIP64 scan fix). Every rc.11 contract is retained.
825
+
826
+ **v0.7.96-rc.11 release:** Eleventh release candidate of the v0.7.96 line.
827
+ SDK-owned background Git calls on macOS preflight the system Git shim: a
828
+ shared `DEVELOPER_DIR`-aware platform guard (`@kodax-ai/agent/runtime/macos-git`)
829
+ detects the known developer-tools-missing condition (exit code 2 only,
830
+ TTL-cached probes shared across concurrent callers, recoverable after
831
+ installation, no permanent disable state) so repo-intelligence, worktree,
832
+ changed-diff, managed-task checkpoint, agent-adapter, worktree-sweep,
833
+ session-snapshot, REPL helpers, and synchronous memory paths no longer
834
+ repeat Apple's developer-tools installation prompt. Ordinary Git on `PATH`,
835
+ independent Git, and arbitrary Bash/PTY commands are unchanged (Issue 339).
836
+ Every rc.10 contract is retained.
837
+
838
+ **v0.7.96-rc.10 release:** Tenth release candidate of the v0.7.96 line.
839
+ Runtime shutdown owns and drains the background work it starts: managed
840
+ terminal maintenance and memory setup/finalization IO plus background review
841
+ drains are registered with the owning Runtime, close refuses new work and
842
+ awaits already-started work before releasing resources, and managed execution
843
+ finishes its durable memory finalization before publishing completion.
844
+ Edits-mode `edit`/`write` no longer reject ordinary project files when a
845
+ workspace root contains protected native state: trusted text transaction
846
+ cache protection targets only the authorized canonical file while
847
+ development artifact trust still checks every authorized write root. Every
848
+ rc.9 contract is retained.
849
+
789
850
  **v0.7.96-rc.9 release:** Ninth release candidate of the v0.7.96 line.
790
851
  Arbitrates daemon publication against launcher loss with a one-shot startup
791
852
  handoff: unpublished Windows daemon startup trees and their Job descendants
@@ -1218,10 +1279,10 @@ effective draft after streaming and reconnect while raw journals retain the
1218
1279
  complete audit trail. They must not replay provider recovery checkpoints or
1219
1280
  deduplicate text heuristically.
1220
1281
 
1221
- For the full host-integration contract, including inline/Worker/daemon selection,
1282
+ For the full host-integration contract, including Product Client and explicit inline/daemon ownership,
1222
1283
  multi-client permission handling, config/catalog/MCP admin APIs, artifacts,
1223
1284
  context diagnostics, and daemon protocol schemas, see
1224
- [public_docs/sdk/embedder-guide.md §17](public_docs/sdk/embedder-guide.md#17-runtime-sdk-worker-isolation-and-local-daemon-feature_253-feature_257).
1285
+ [public_docs/sdk/embedder-guide.md §17](public_docs/sdk/embedder-guide.md#17-runtime-sdk-and-local-daemon-feature_253-feature_257).
1225
1286
 
1226
1287
  The Space/IDE shared-daemon contract is documented in
1227
1288
  [SDK Embedder Guide section 23](public_docs/sdk/embedder-guide.md#23-shared-coder-daemon-for-space-and-ide-hosts-feature_269-v0769).
@@ -1252,7 +1313,7 @@ kodax --repo-intelligence full --repo-intelligence-trace
1252
1313
 
1253
1314
  ## Architecture
1254
1315
 
1255
- 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):
1316
+ KodaX uses a **monorepo architecture** with npm workspaces. Source layout currently has 4 workspace packages; the current source packages them as a single bundled npm package `@kodax-ai/kodax` with 13 SDK subpath exports (`/agent`, `/llm`, `/coding`, `/media`, `/repl`, `/skills`, `/mcp`, `/session`, `/client`, `/runtime`, `/sandbox`, `/a2a`, `/experimental-memory`; ADR-024 + ADR-032 + ADR-038, with ADR-036 consolidation):
1256
1317
 
1257
1318
  ```
1258
1319
  KodaX/
@@ -1327,9 +1388,9 @@ Source-side workspace package names (`@kodax-ai/*`). npm consumers install the s
1327
1388
  KodaX has two layers that consumers should understand separately:
1328
1389
 
1329
1390
  - **Source-side**: 4 workspace packages above (what developers see when reading the repo).
1330
- - **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:
1391
+ - **Current packaged exports** (not a claim of npm availability): a single bundled package `@kodax-ai/kodax` with 13 SDK subpaths (what SDK consumers `import` from). The subpaths are split into two roles:
1331
1392
  - **Full-package subpaths** (`/agent`, `/llm`, `/coding`, `/repl`) — each one maps 1:1 to a source workspace and exposes its complete public API.
1332
- - **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`.
1393
+ - **Integration and narrow subpaths** (`/media`, `/skills`, `/mcp`, `/session`, `/client`, `/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`.
1333
1394
 
1334
1395
  | Source package | npm subpath | Type | What you get | Example consumer |
1335
1396
  |---|---|---|---|---|
@@ -1342,7 +1403,8 @@ KodaX has two layers that consumers should understand separately:
1342
1403
  | `packages/coding` | `@kodax-ai/kodax/coding` | Full package | Coding agent + 50+ tools + repo-intelligence (505 exports) | Build a Claude Code-shape product |
1343
1404
  | `packages/repl` | `@kodax-ai/kodax/repl` | Full package | Ink TUI + permission modes + commands (217 exports) | Terminal-UI consumers |
1344
1405
  | `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 |
1345
- | `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 |
1406
+ | `src` | `@kodax-ai/kodax/client` | Product API | Shared Host connection and `KodaXProductClient` contract | TUI, desktop/IDE and automation applications |
1407
+ | `src` | `@kodax-ai/kodax/runtime` | Host API | Explicit inline/daemon runtime facade, sessions/runs/events/permissions/catalog/MCP/artifacts/diagnostics/external agents, daemon protocol schema (10 exports) | Trusted Host integration |
1346
1408
  | `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 |
1347
1409
  | `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 |
1348
1410
 
@@ -1465,10 +1527,11 @@ later re-enable. Private-address access and non-loopback plaintext HTTP are
1465
1527
  independent, persisted, default-deny permissions (`--allow-private` and
1466
1528
  `--allow-insecure-http`); exact loopback HTTP remains available without either.
1467
1529
  OAuth token endpoints retain their stricter HTTPS-or-exact-loopback rule.
1468
- Worker-hosted SDK Runtimes can load this same configured plane inside the Worker
1469
- owner with `worker: { configuredA2A: true }`. The CLI honors the same opt-in
1470
- from `~/.kodax/config.json` (`"worker": { "configuredA2A": true }`) by creating
1471
- a Worker-hosted embedded Runtime that loads the configured A2A plane. `a2a serve` loads
1530
+ SDK hosts load this same configured plane by wiring
1531
+ `createConfiguredA2ARuntimeIntegration({ configHome })` and passing its
1532
+ `runtimeOptions` as `externalAgents` — the CLI does this for its embedded
1533
+ sessions and the daemon Host it launches, and the `worker.configuredA2A` opt-in
1534
+ was removed with the Worker facade in v0.7.97. `a2a serve` loads
1472
1535
  its configured MCP/Extension capability surface before listening and pins that
1473
1536
  execution authority; it hot-reloads publication, authentication, and limits.
1474
1537
 
@@ -1556,7 +1619,6 @@ dist/binary/linux-x64/
1556
1619
  ├── builtin/ # Sidecar built-in skills
1557
1620
  ├── provider-capabilities.json
1558
1621
  ├── semantic-worker.js # Repo-intelligence Worker
1559
- ├── runtime-worker.js # SDK Runtime Worker
1560
1622
  └── constructed-handler-worker.js # Constructed-tool Worker
1561
1623
  ```
1562
1624
 
@@ -1568,6 +1630,10 @@ See [docs/release.md](docs/release.md) for full details on build flags, archive
1568
1630
 
1569
1631
  ### As Library
1570
1632
 
1633
+ For shared-Session applications, use the [Product Client integration](public_docs/sdk/embedder-guide.md#product-client-integration)
1634
+ and [migration guide](docs/SDK_MIGRATION.md). The example below is independent
1635
+ in-process coding library usage; it is not the product UI contract.
1636
+
1571
1637
  ```bash
1572
1638
  npm install @kodax-ai/kodax
1573
1639
  ```
@@ -1595,6 +1661,7 @@ For smaller surface and tree-shake-friendly imports, the SDK is also exposed via
1595
1661
 
1596
1662
  ```typescript
1597
1663
  import { Runner } from '@kodax-ai/kodax/agent'; // agent runtime
1664
+ import { ensureKodaXClient } from '@kodax-ai/kodax/client'; // shared product Client
1598
1665
  import { getProvider } from '@kodax-ai/kodax/llm'; // LLM abstraction (16 aliases)
1599
1666
  import { runKodaX } from '@kodax-ai/kodax/coding'; // coding tools + prompts
1600
1667
  import { createImageArtifactFromPath } from '@kodax-ai/kodax/media'; // input artifacts
@@ -1608,9 +1675,9 @@ import { createKodaXA2AServer } from '@kodax-ai/kodax/a2a'; // A2A 1.0 client
1608
1675
  import { createMemoryAgent } from '@kodax-ai/kodax/experimental-memory'; // opt-in memory SDK
1609
1676
  ```
1610
1677
 
1611
- 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.
1678
+ All 14 SDK entries (root + 13 subpaths, including `/client`) share internal code via ESM chunk splitting — importing from `/agent` does not pull in `/repl`'s Ink + React surface.
1612
1679
 
1613
- For the complete host-facing contract — including embedded/Worker/daemon ownership,
1680
+ For the product contract and separate low-level inline/daemon ownership,
1614
1681
  external-agent registration and task control, session cursor pagination, workflow
1615
1682
  model-tier routing, and efficiency telemetry — see the
1616
1683
  [SDK Embedder Integration Guide](public_docs/sdk/embedder-guide.md).
@@ -1859,6 +1926,10 @@ stays silent.
1859
1926
 
1860
1927
  ## Advanced Library Usage
1861
1928
 
1929
+ These examples describe independent coding-library ownership. Shared product
1930
+ clients use `/client`; see the [migration guide](docs/SDK_MIGRATION.md) before
1931
+ adapting these callbacks or storage examples into a UI.
1932
+
1862
1933
  #### Simple Mode (runKodaX)
1863
1934
 
1864
1935
  ```typescript
@@ -1942,7 +2013,11 @@ await runKodaX({
1942
2013
 
1943
2014
  ## SDK Usage
1944
2015
 
1945
- 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:
2016
+ This development tree exposes 13 SDK subpaths plus the root. Shared product
2017
+ applications use `@kodax-ai/kodax/client`; independent libraries and trusted Host
2018
+ APIs remain available through the other subpaths. See the [Client contract](docs/CLIENT_CONTRACT.md)
2019
+ and [SDK migration guide](docs/SDK_MIGRATION.md). The package version is still
2020
+ `0.7.96-rc.11`; npm publication is separate from the `v0.7.97` design target.
1946
2021
 
1947
2022
  ```bash
1948
2023
  npm install @kodax-ai/kodax
@@ -1950,6 +2025,7 @@ npm install @kodax-ai/kodax
1950
2025
 
1951
2026
  ```typescript
1952
2027
  import { runKodaX } from '@kodax-ai/kodax'; // root: CLI helpers + runKodaX
2028
+ import { ensureKodaXClient, connectKodaXClient } from '@kodax-ai/kodax/client'; // shared product contract
1953
2029
  import { Runner, runFanOut } from '@kodax-ai/kodax/agent'; // generic Agent framework
1954
2030
  import { getProvider } from '@kodax-ai/kodax/llm'; // 16-alias LLM abstraction
1955
2031
  import { KODAX_TOOLS } from '@kodax-ai/kodax/coding'; // tools + prompts + agent loop
@@ -2119,7 +2195,8 @@ await runInkInteractiveMode({ provider: 'zhipu-coding', effort: 'auto' });
2119
2195
  | Building custom agent | `@kodax-ai/kodax/agent` | Runner + fan-out + idle-yield + session-lineage + capabilities |
2120
2196
  | Coding tasks | `@kodax-ai/kodax/coding` | Complete coding agent + tools |
2121
2197
  | Terminal app | `@kodax-ai/kodax/repl` | Full interactive experience |
2122
- | Runtime host / daemon client | `@kodax-ai/kodax/runtime` | Sessions, runs, events, permissions, catalog, MCP, artifacts, diagnostics |
2198
+ | Shared Session application | `@kodax-ai/kodax/client` | Unified product intent, observation, interactions and history |
2199
+ | Trusted Runtime host | `@kodax-ai/kodax/runtime` | Explicit embedding, credentials/Host Tools and diagnostics |
2123
2200
  | Experimental governed memory | `@kodax-ai/kodax/experimental-memory` | Governed `MemoryAgent` list/remember/forget and scoped `MemorySession` recall/outcome contracts |
2124
2201
 
2125
2202
  ---