@kodax-ai/kodax 0.7.96-alpha.3 → 0.7.96-alpha.7

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 (91) hide show
  1. package/CHANGELOG.md +348 -0
  2. package/README.md +139 -84
  3. package/README_CN.md +91 -62
  4. package/config-templates/config.example.jsonc +9 -16
  5. package/config-templates/integrations/a2a.example.jsonc +2 -0
  6. package/dist/chunks/{agent-5ZEPHAVF.js → agent-SV3OH5VR.js} +1 -1
  7. package/dist/chunks/argument-completer-TTUEXPZ4.js +2 -0
  8. package/dist/chunks/chunk-2O2HZCBH.js +298 -0
  9. package/dist/chunks/chunk-4IH2OTLC.js +471 -0
  10. package/dist/chunks/{chunk-2AQU5SIH.js → chunk-52FEJJMH.js} +15 -20
  11. package/dist/chunks/chunk-5XD3D47Z.js +429 -0
  12. package/dist/chunks/{chunk-M2KUA6A7.js → chunk-BRZO5ZGS.js} +1 -1
  13. package/dist/chunks/{chunk-NEJ7DGCG.js → chunk-IDEPSEPH.js} +2 -2
  14. package/dist/chunks/{chunk-ZBCKH4V5.js → chunk-N5VUIPXE.js} +265 -271
  15. package/dist/chunks/chunk-RNJPYIXJ.js +319 -0
  16. package/dist/chunks/chunk-UQJOGEDC.js +2 -0
  17. package/dist/chunks/chunk-UTUAC7YQ.js +351 -0
  18. package/dist/chunks/chunk-W4QOFCVD.js +2 -0
  19. package/dist/chunks/{chunk-Q5WV7TGR.js → chunk-YYPZCZ6O.js} +1 -1
  20. package/dist/chunks/chunk-Z64NI33Q.js +384 -0
  21. package/dist/chunks/{chunk-J5LGM6Y5.js → chunk-ZXNXMFXJ.js} +231 -230
  22. package/dist/chunks/client-452BLUKG.js +2 -0
  23. package/dist/chunks/{construction-bootstrap-XH4OQNMS.js → construction-bootstrap-3ITEEWHD.js} +1 -1
  24. package/dist/chunks/dist-QSSK3PCI.js +2 -0
  25. package/dist/chunks/{host-HFBR7PBR.js → host-4QGM5DQ7.js} +1 -1
  26. package/dist/chunks/{run-manager-R6KEKTL5.js → run-manager-CVR6JPLK.js} +1 -1
  27. package/dist/chunks/{utils-MYA6ONBB.js → utils-GYD2CE2X.js} +1 -1
  28. package/dist/index.d.ts +43 -56
  29. package/dist/index.js +6 -6
  30. package/dist/kodax_bootstrap.js +1 -1
  31. package/dist/kodax_cli.js +1725 -1755
  32. package/dist/kodax_resume.js +34 -34
  33. package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
  34. package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
  35. package/dist/native/win32-x64/manifest.json +3 -3
  36. package/dist/runtime-worker.js +1571 -1609
  37. package/dist/sandbox-network-broker.js +137 -162
  38. package/dist/sdk-a2a.d.ts +9 -9
  39. package/dist/sdk-a2a.js +1 -1
  40. package/dist/sdk-agent.d.ts +12 -12
  41. package/dist/sdk-coding.d.ts +40 -113
  42. package/dist/sdk-coding.js +1 -1
  43. package/dist/sdk-experimental-memory.d.ts +3 -3
  44. package/dist/sdk-llm.d.ts +1 -1
  45. package/dist/sdk-repl.d.ts +33 -55
  46. package/dist/sdk-repl.js +2 -2
  47. package/dist/sdk-runtime.d.ts +39 -20
  48. package/dist/sdk-runtime.js +1 -1
  49. package/dist/sdk-sandbox.d.ts +15 -9
  50. package/dist/sdk-sandbox.js +1 -1
  51. package/dist/sdk-session.d.ts +5 -5
  52. package/dist/sdk-session.js +1 -1
  53. package/dist/semantic-worker.js +74 -82
  54. package/dist/types-chunks/{bash-prefix-extractor.d-Dw5B6gAT.d.ts → bash-prefix-extractor.d-C_D7FK95.d.ts} +65 -26
  55. package/dist/types-chunks/{capsule.d-DndFb-BH.d.ts → capsule.d-DxNgcs9n.d.ts} +2 -2
  56. package/dist/types-chunks/{controller.d-CrN5_ZYb.d.ts → controller.d-BGNtJc05.d.ts} +1 -1
  57. package/dist/types-chunks/{controller.d-BTtyIIC1.d.ts → controller.d-ClFvfenm.d.ts} +1 -1
  58. package/dist/types-chunks/{guardrail.d-DMcQr2bP.d.ts → exec-policy.d-D5a3OUjN.d.ts} +223 -265
  59. package/dist/types-chunks/{history-retrieval.d-CHnL99S7.d.ts → history-retrieval.d-hJix1cJV.d.ts} +1 -1
  60. package/dist/types-chunks/{public-api.d-BzBt6b7A.d.ts → public-api.d-WT1wNQz9.d.ts} +29 -26
  61. package/dist/types-chunks/{resolver.d-DlXPjeyx.d.ts → resolver.d-BAHV5zRk.d.ts} +1 -1
  62. package/dist/types-chunks/{review-inbox.d-WDSe1nze.d.ts → review-inbox.d-DZavlaKF.d.ts} +1 -1
  63. package/dist/types-chunks/{run-manager.d-CfFQsHnW.d.ts → run-manager.d-T6uxxiWl.d.ts} +1 -1
  64. package/dist/types-chunks/{sdk-session-gBlp3OLT.d.ts → sdk-session-D5fn3-IW.d.ts} +2 -2
  65. package/dist/types-chunks/{shell-command-sets.d-DapzsTB5.d.ts → shell-command-sets.d-PnzbcF4X.d.ts} +8 -8
  66. package/dist/types-chunks/{repl.d-BC8nBhBW.d.ts → trusted-repl-entry-BLTJoxdD.d.ts} +20 -16
  67. package/dist/types-chunks/{types.d-BbZjR0Wr.d.ts → types.d-D1wEkn4h.d.ts} +2 -0
  68. package/dist/types-chunks/{types.d-DBTr8zrq.d.ts → types.d-DXS_I8Yw.d.ts} +1 -1
  69. package/dist/types-chunks/{types.d-DxYleXfT.d.ts → types.d-Duj2w9bT.d.ts} +2 -2
  70. package/dist/types-chunks/{utils.d-C4JLl8Ux.d.ts → utils.d-thZMKPNO.d.ts} +17 -46
  71. package/package.json +6 -2
  72. package/public_docs/README.md +11 -5
  73. package/public_docs/configuration/config-files.md +127 -0
  74. package/public_docs/configuration/custom-providers.md +161 -0
  75. package/public_docs/configuration/permissions.md +77 -0
  76. package/public_docs/configuration/providers.md +117 -0
  77. package/public_docs/configuration/sandbox.md +139 -80
  78. package/public_docs/getting-started/installation.md +65 -0
  79. package/public_docs/getting-started/overview.md +69 -0
  80. package/public_docs/getting-started/quickstart.md +57 -0
  81. package/public_docs/sdk/embedder-guide.md +342 -365
  82. package/dist/chunks/argument-completer-FV4X7SUI.js +0 -2
  83. package/dist/chunks/chunk-3525WMQA.js +0 -319
  84. package/dist/chunks/chunk-AFF2XNU4.js +0 -407
  85. package/dist/chunks/chunk-DJWOZYVF.js +0 -251
  86. package/dist/chunks/chunk-MEEXYL4N.js +0 -501
  87. package/dist/chunks/chunk-T4E45MXM.js +0 -2
  88. package/dist/chunks/chunk-TWPGKDW6.js +0 -384
  89. package/dist/chunks/chunk-YULEX54I.js +0 -418
  90. package/dist/chunks/client-U3CCJUKS.js +0 -2
  91. package/dist/chunks/dist-DYKUO5JZ.js +0 -2
package/CHANGELOG.md CHANGED
@@ -4,6 +4,354 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  > Full history for versions prior to v0.7.0: [CHANGELOG_ARCHIVE.md](docs/CHANGELOG_ARCHIVE.md)
6
6
 
7
+ ## [Unreleased]
8
+
9
+ ## [0.7.96-alpha.7] - 2026-09-03
10
+
11
+ ### Fixed
12
+
13
+ - Clarified the sandbox diagnostic boundary across the CLI, setup guide,
14
+ `kodax_manual`, and public documentation: run `kodax sandbox doctor` directly
15
+ in a host terminal or use `/sandbox` inside the REPL, rather than invoking the
16
+ host control-plane doctor through the sandbox-first Bash tool. This prevents a
17
+ healthy Windows sandbox from being misreported when its restricted account is
18
+ correctly denied access to host-owned ASRT state; shell routing and sandbox
19
+ permissions are unchanged.
20
+ - Added cold-start self-healing for stale Windows sandbox setup generations.
21
+ A bare interactive CLI startup, including `kodax -r`, now checks the
22
+ installed generation before creating the REPL Runtime and reuses the existing
23
+ setup-only UAC boundary when migration is required. Concurrent startups
24
+ converge on one setup operation; followers recheck the completed generation
25
+ instead of installing again. Current state stays silent, and print-mode,
26
+ daemon, SDK, and ordinary tool execution never elevate automatically or wait
27
+ on the setup lock. A current marker now takes the same coarse fast path as
28
+ Codex; when recovery is actually required, the unchanged setup operation runs
29
+ in a child process while `kodax -r` and new-session startup display a live
30
+ elapsed-time indicator instead of freezing the last picker frame.
31
+ - Require the setup/onboarding boundary to complete one no-side-effect native
32
+ target-start/exit probe before reporting Windows sandbox recovery as ready.
33
+ The released setup-generation-9 marker migrates in place to generation 10,
34
+ retaining a healthy account SID and filesystem capability nonce. This closes
35
+ the state where verify-only metadata looked ready while real Bash still fell
36
+ back to host execution, without adding a command-path lock, queue, or retry.
37
+
38
+ ## [0.7.96-alpha.6] - 2026-09-02
39
+
40
+ ### Fixed
41
+
42
+ - Aligned the universal npm release audit with Windows native shell protocol
43
+ 10. The release workflow now validates the same manifest contract emitted by
44
+ `build:native`, so a valid protocol-10 Windows artifact is not rejected as an
45
+ incompatible protocol-9 package during GitHub pre-release assembly.
46
+ - Current native protocol 10 keeps isolated Skill Script execution POSIX-only
47
+ on Windows because per-command denyRead remains unsupported.
48
+ - Moved broad Windows profile-root ACL convergence fully into versioned setup.
49
+ Protocol/setup generation 10 marks those roots as setup-owned; ordinary
50
+ admission only verifies their stable capability ACEs and returns a typed
51
+ setup-required error when one is missing. Command-specific small roots retain
52
+ additive convergence. This removes recursive `AppData` DACL propagation from
53
+ target start without adding a lock, queue, per-root timeout, or command retry.
54
+ - Expanded the existing ASRT Windows proxy range to 64 ports and removed KodaX's
55
+ process-local broker-capacity/idle-eviction gate. Up to 32 exact network
56
+ authorities now rely on OS bind arbitration across Runtime processes; broker
57
+ pooling, reference ownership, and bounded idle cleanup remain unchanged.
58
+ - Made explicit CLI and public SDK sandbox doctor execute one no-side-effect
59
+ identity probe with host fallback disabled. `ready: true` now proves a real
60
+ target start and successful exit, while internal startup/admission readiness
61
+ remains verify-only. The explicit probe can republish a missing exact-hash
62
+ native cache object from its pinned packaged bytes, but never runs setup or
63
+ repairs ACL policy. Native request diagnostics retain protocol, setup/broker
64
+ generation, artifact hashes, failure phase, and final sandbox failure evidence.
65
+ - Kept unlowerable nested shell commands opaque, matching Codex's host-policy
66
+ boundary. Recognized `cmd` and PowerShell forms are still recursively checked,
67
+ explicit outer/interpreter rules still apply, and concrete critical effects
68
+ remain fail-closed. Command complexity never changes sandbox selection: these
69
+ calls remain sandbox-first, and parser uncertainty is considered by Edits or
70
+ Auto[LLM] only after a genuine sandbox pre-start failure reaches the host
71
+ boundary instead of becoming a synthetic non-overridable forbid.
72
+ - Pinned every loaded embedded Windows native manifest to its exact immutable
73
+ protected-cache generation. A long-lived npm-linked CLI or SDK process now
74
+ reuses the already verified executable for its embedded hash before consulting
75
+ a mutable rebuilt `dist/native` source, so overlapping builds cannot mix a
76
+ TypeScript host with another native evidence generation. A genuinely new hash
77
+ is still published atomically, without a command lock, queue, or retry loop.
78
+ - Stopped per-command Windows cleanup from deleting the shared private-Temp
79
+ parent. The native command's lifecycle/Job-drain result is now authoritative
80
+ before its unique Temp leaf is removed; a bounded leaf cleanup failure emits
81
+ a diagnostic instead of turning an already proven exit into a Tool Error.
82
+ This fixes the intermittent `rmdir ...\\kodax-sandbox\\<root>: EPERM` seen
83
+ under concurrent packaged Electron smoke without adding a lock, queue, or
84
+ command replay.
85
+ - Removed the two remaining Codex-alignment gaps that could make Bash unusable.
86
+ Windows roots use stable read/write/deny capability ACEs, while each command
87
+ token activates only its authorized capabilities. Setup owns broad profile
88
+ grants; admission accepts already-effective setup grants read-only and never
89
+ downgrades or clears a capability installed for another command. Windows
90
+ shell `%TEMP%`/`%TMP%`/`%TMPDIR%` now point to one empty private directory per
91
+ command under the system temporary directory, so ordinary admission never
92
+ recursively rewrites the shared system Temp/AppData tree. No lock, queue, or
93
+ command retry was added.
94
+ - Restored SDK/daemon host-boundary fallback by forwarding
95
+ `authorizeShellHostExecution` through the Coding tool-execution context. A
96
+ cleanup-proven pre-start sandbox failure can therefore reach the existing
97
+ Auto[LLM]/Exec Policy decision instead of stopping at the misleading
98
+ "requires a new permission decision" message.
99
+ - Advanced the Windows SDK/daemon sandbox contract to `sandboxRuntime:11`.
100
+ An idle same-version daemon from an earlier npm-link build is now replaced
101
+ through the existing authenticated upgrade path instead of silently reusing
102
+ its older admission behavior; busy daemons remain fail-closed and untouched.
103
+ - Retire a shared Windows network-broker generation when a started native host
104
+ proves runner/controller-path loss. Existing holders remain untouched, while
105
+ the next command creates a fresh generation instead of reusing a controller
106
+ that is already exiting and waiting for target-start attestation to time out.
107
+ - Preserved terminal input across bare `kodax -r` session selection in the
108
+ compiled Bun/Windows release. A successful picker hands raw-mode ownership to
109
+ the next owned renderer; cancellation, preparation failure, classic REPL, and
110
+ final terminal cleanup retain their existing behavior.
111
+ - Closed two portable Bash lifecycle gaps without adding a command lock or
112
+ retry loop. Broker-control close/error/overflow now still runs the prepared
113
+ request cleanup before reporting failure, and background execution is not
114
+ reported as started until the wrapper has an OS PID; asynchronous spawn
115
+ rejection therefore cannot return `PID: undefined` or leak prepared state.
116
+ Process settlement and output capture are attached immediately after spawn,
117
+ so a fast target that exits during start attestation cannot lose its output,
118
+ completion footer, or request cleanup.
119
+
120
+ ## [0.7.96-alpha.5] - 2026-09-01
121
+
122
+ ### Fixed
123
+
124
+ - Completed the Windows sandbox concurrency correction without adding a
125
+ machine-global command lock or queue. Every command owns its runner pipes,
126
+ exact process handle, creation-time kill-on-close Job, cancellation state,
127
+ and terminal evidence; cancellation is observed before synchronous launch
128
+ preparation and all abort paths finish Job drainage before host exit.
129
+ - Removed the remaining startup/termination race: a command that has not
130
+ published a nonce-bound Resume record may use the one-second pre-start
131
+ cleanup path, while a Resume discovered during that window extends the wait
132
+ to the normal terminal-attestation budget instead of being killed early.
133
+ - Restored fail-closed admission ordering in the Windows native host: policy
134
+ boundary validation (protected control-state overlap, restricted-account,
135
+ and terminal-record checks) runs before the host consumes controller
136
+ bootstrap input, so a forged or policy-opaque request is rejected with its
137
+ structured error instead of stalling until the operation deadline. Valid
138
+ commands still observe termination control before setup and launch.
139
+ - Treated the Runtime daemon `0.0.0` development sentinel as having no
140
+ provable SemVer ordering. Such an owner attaches in place instead of being
141
+ classified as an older daemon for the version boundary, so SDK test and
142
+ development harnesses reconnect without a forced replacement, while every
143
+ documented versioned-capability boundary, the never-downgrade guard, and
144
+ the non-SemVer fail-closed path are unchanged.
145
+ - Restored the portable shell adapter's protected-read gate that the
146
+ sandbox-first routing restructure dropped: on POSIX, a model Bash read
147
+ carve-back that targets the trusted text native state roots fails
148
+ preparation with the structured protected-state error before any broker
149
+ spawn, matching the SDK executor and Windows control-state gates.
150
+ - Made content-addressed Windows native artifacts self-healing on execution.
151
+ A missing new-version artifact is published atomically, concurrent publishers
152
+ converge without a global mutex, and ordinary commands verify stable file
153
+ identity, physical cache containment, and content hash without launching a
154
+ PowerShell verifier. Owner/DACL construction remains part of atomic
155
+ publication; `sandbox doctor` remains verify-only.
156
+ - Made Runtime daemon upgrades version-safe. An alpha.5 execution client
157
+ replaces an idle older daemon on first connection, leaves a busy older daemon
158
+ running with a recoverable error, never downgrades a newer daemon, and never
159
+ mutates an owner whose version is not comparable SemVer.
160
+ - Completed sandbox self-healing at the process facts that own it. Failed
161
+ target-start/controller generations roll out of reuse without stopping live
162
+ holders; an unconfirmed process remains in fixed-port capacity accounting
163
+ until `close`, while spawn failure without an OS process cannot leak capacity.
164
+ Native-host bootstrap delivery failure does not blame or retire a healthy
165
+ shared broker. No command lock, queue, or new permission restriction was
166
+ introduced.
167
+ - Made simultaneous and staggered npm-linked/`kodax -r` upgrade clients
168
+ converge on one idle incompatible-daemon replacement, including a peer that
169
+ attaches between preflight and settlement or after the durable prepared
170
+ ticket but before its revision CAS. One authenticated follower resumes that
171
+ exact durable ticket after detaching while the first client and any other
172
+ followers only observe the owner change; active or untrusted work remains untouched.
173
+ ## [0.7.96-alpha.4] - 2026-08-30
174
+
175
+ ### Changed
176
+
177
+ - Replaced the legacy Plan/Edits/Auto[RULES]/Auto[LLM] permission shape with
178
+ four canonical profiles: Plan, Edits, Auto[LLM], and Full Access. Legacy
179
+ `auto-in-project` and Rules selections migrate to Auto[LLM]; `/auto-engine`
180
+ and auto-rules loading are removed.
181
+ - Made shell containment sandbox-first. Successful sandbox execution is silent;
182
+ only a proven pre-start denial or unavailable backend reaches Exec Policy and
183
+ the Edits user boundary or Auto reviewer. Started or uncertain commands are
184
+ never replayed, and an approved boundary has at most one host attempt.
185
+ - Added JSONC Exec Policy (`~/.kodax/exec-policy.jsonc`, plus explicitly trusted
186
+ repository policy) with deterministic `allow`/`prompt`/`forbidden` prefix
187
+ rules, strictest-match evaluation, administrator forbids, narrow critical
188
+ fallbacks, and the non-executing `kodax execpolicy check` command.
189
+ - Auto review now runs only at an exact host boundary, uses fixed 90-second and
190
+ one 180-second retry deadlines, fails closed on reviewer infrastructure
191
+ errors, stops a turn after the bounded denial thresholds, and never opens an
192
+ automatic approval prompt. A later informed natural-language instruction is
193
+ reviewed again.
194
+ - Aligned the workspace sandbox with normal development use: inherit the host
195
+ environment except fixed KodaX/Electron execution controls, allow external
196
+ network and system temporary writes, permit broad reads including Agent Home,
197
+ credentials, and global Git configuration, and stop disabling global Git.
198
+ The obsolete `sandbox.envPass` input is inert.
199
+ - Advanced the public Runtime contract to `runtimeAutoModeGuardrail:5` and
200
+ `sharedSessionSettings:2`, with exact canonical/input permission types,
201
+ host-owned Exec Policy/Auto-review options, ACP mode exports, and safe daemon
202
+ replacement so an alpha.4 client cannot silently attach to alpha.3 routing.
203
+ An idle older daemon is replaced automatically; a busy older daemon is left
204
+ intact and reported as a recoverable upgrade boundary, while a newer daemon
205
+ is never downgraded by an older client. A non-SemVer/unknown daemon version is
206
+ likewise left untouched because its ordering cannot be proven.
207
+ - Synchronized README, PRD/HLD/DD/ADR, feature and release records, public
208
+ configuration/SDK guides, config templates, package contents, test guide,
209
+ and `kodax_manual` with the same sandbox-first contract.
210
+
211
+ ### Fixed
212
+
213
+ - Removed the shell-tool fallback that could execute unsandboxed after native
214
+ sandbox bootstrap and termination both failed. The boundary is now explicit,
215
+ policy-reviewed, and single-attempt.
216
+ - Closed administrator Exec Policy bypasses through recognized nested Windows shells.
217
+ `cmd /C` and `/K`, PowerShell command selectors/abbreviations, and strict
218
+ UTF-16LE `EncodedCommand` payloads are recursively evaluated. Unlowerable
219
+ bodies remain opaque full-argv operations for exact outer policy and the
220
+ normal Edits/Auto[LLM] boundary; only explicit matched forbids and concrete
221
+ critical effects are non-bypassable.
222
+ - Corrected the Windows shell concurrency regression at its setup/admission
223
+ boundary. Protocol 9/setup generation 9 removes every machine-global ACL
224
+ mutex from ordinary admission. Each canonical root receives one
225
+ policy-independent stable ACE set for `AllowRead`, `AllowWrite`, and
226
+ `DenyWrite`; the command token activates only its exact capabilities. Missing
227
+ ACEs converge additively with `SET_ACCESS` plus DACL readback, without
228
+ revocation, a cross-process target mutex, or a serialized command lifetime.
229
+ This removes both the observed 240-second global-mutex stall and the
230
+ deterministic 75-second failure caused by applying a separate five-second
231
+ mutex wait to each of 15 roots. Generation 8 remains the proof boundary for
232
+ the one-time legacy ACL removal; generation 9 upgrades a healthy account in
233
+ place, preserving its SID/group and filesystem nonce without replaying that
234
+ cleanup. Setup first publishes a protected non-ready `installing` marker; the
235
+ elevated parent validates that exact digest-bound marker and synchronously
236
+ converges NUL compatibility plus profile read capabilities. The caller
237
+ publishes the ready marker only after the parent succeeds. No helper or
238
+ migration overlaps ordinary admission, system TMP is not prewarmed, and
239
+ native protocol/setup advance to `9`, while the published Runtime capability
240
+ is `sandboxRuntime:10`;
241
+ so a newly linked CLI replaces an idle daemon that still carries the setup-8
242
+ ACL behavior and refuses a busy one instead of mixing generations.
243
+ - Fixed first-launch policy construction when a custom `KODAX_HOME` is below the
244
+ system temporary write root. KodaX now creates only its fixed protected
245
+ `sandbox-runtime`, `native-text-state-v1`, `runtime`, `processes`, and `learned`
246
+ directories before passing them as Windows deny-write roots, so native
247
+ validation never rejects a missing host-owned root. This adds no lock, queue,
248
+ ACL mutation, or command-lifetime coordination.
249
+ - Preserved failed managed-turn history across `kodax -r`. The run-end failure
250
+ path now commits the already-rendered Assistant summary, Sidecar Verifier
251
+ verdict, and terminal error in their original order. The JSON load guard also
252
+ accepts the typed `sidecar` item, including a save/load/save/load round trip;
253
+ a first failed turn containing only this presentation history remains
254
+ resumable and visible in the session index. If its first durable write fails,
255
+ the retry reuses the already-staged snapshot instead of appending the
256
+ Assistant/Sidecar/error batch a second time.
257
+ Sessions already overwritten by an older build cannot reconstruct text that
258
+ was never committed to their session file.
259
+ - Moved control-directory provisioning and legacy ACL recovery out of the
260
+ command hot path. Setup owns those machine changes. Native executable images
261
+ use a content-addressed self-healing boundary instead: ordinary admission
262
+ verifies stable file identity, physical cache containment, and the protected
263
+ hash locally, without a PowerShell subprocess. A newly installed or
264
+ `npm link`ed hash is atomically published once if and only if its destination
265
+ is missing; publication constructs and verifies owner/DACL state. Concurrent
266
+ publishers share the immutable winner without a global mutex, and corrupted
267
+ content remains fail-closed rather than being silently repaired. Protocol 9
268
+ requires a hash-bound protected
269
+ setup marker, and the native host holds its non-delete-sharing handle until
270
+ the target's `Started` record is durable. Setup therefore cannot rotate a
271
+ generation across an admitted target-start window. Protocol-8 and older marker
272
+ retirement is setup-only and does not impose the former 301-second admission
273
+ drain; a healthy fixed account is reused so existing sessions keep their
274
+ identity while the new protected marker is published.
275
+ - Closed the remaining native-host termination gaps. The host consumes its
276
+ bootstrap and begins cancellation observation before synchronous ACL/desktop
277
+ preparation, binds the runner process handle before protocol decoding, and
278
+ waits for the winning abort path to durably publish Job-drain evidence before
279
+ exiting. Before the nonce-bound Resume record exists, confirmed host-tree
280
+ termination proves that no target ran and avoids an extra 12-second terminal
281
+ attestation wait.
282
+ - Removed the cross-process command-lifetime filesystem-effect coordinator from
283
+ Bash, trusted text tools, and worktree lifecycle. Same-file text mutations
284
+ retain their narrow kernel/CAS ordering; same-path worktree calls retain a
285
+ process-local queue, while different worktrees and Runtime processes use
286
+ Git's own locks. Deprecated lease exports remain inert for source/ABI
287
+ migration and old coordinator files are ignored, so stale alpha state cannot
288
+ block a new KodaX process.
289
+ - Made each native shell independently own its request, pipes, restricted
290
+ token, Job, resume/started records, and terminal proof. Windows per-command
291
+ `denyRead` now fails closed as structured `unsupported_policy` before doctor,
292
+ setup, DACL mutation, or target start: `WRITE_RESTRICTED` does not enforce a
293
+ restricting capability SID for reads, so claiming containment was incorrect.
294
+ Consequently, isolated Skill Script execution on current native protocol 9
295
+ is POSIX-only; `createAsrtSkillScriptRunner` rejects Windows as unavailable
296
+ instead of weakening its required per-command `denyRead` policy.
297
+ The field remains wire/API compatible, and setup alone can retire legacy
298
+ execution receipts and ACEs.
299
+ Terminal/termination proof failures now propagate through cleanup instead of
300
+ being reported as a successful command. Crash-left atomic-publication staging
301
+ files are removed only after an exact dead-PID and age proof. Network brokers
302
+ are reused by exact authority, retire failed readiness attempts, and use the
303
+ bounded five-broker pool without a one-second idle teardown race. A broker
304
+ remains referenced while starting or leased and detaches from the Node event
305
+ loop only when idle, preventing independent Runtime processes from exiting
306
+ with an unsettled top-level command.
307
+ - Closed the controller-loss reuse race without waiting for unrelated commands.
308
+ Any broker generation implicated by target-start or terminal-proof failure is
309
+ removed from the reusable map immediately; existing leases finish on that old
310
+ generation, while the next same-authority command creates a fresh generation.
311
+ Detached generations remain in live-capacity accounting until their process
312
+ exits, so rolling replacement cannot overrun ASRT's fixed proxy ports. No
313
+ holder is stopped and no lock or queue is added. A caller-local timeout or
314
+ abort still leaves a healthy shared startup intact.
315
+ - Capped each Windows native startup/control phase at 15 seconds without
316
+ replacing the caller's command deadline, matching Codex's phase-local runner
317
+ startup bound. If termination then proves that the nonce-bound Resume record never
318
+ existed, Bash reports pre-start unavailability through the existing permission
319
+ boundary; started or uncertain commands remain non-replayable.
320
+ - Made simultaneous npm-linked clients self-heal one idle incompatible daemon.
321
+ Token-authenticated temporary upgrade identities elect one inventory leader;
322
+ followers detach and reconnect after the existing fenced replacement. This
323
+ adds no ordinary command lock, queue, permission restriction, or daemon kill
324
+ of active work.
325
+ - Closed prepared-invocation leaks in foreground Bash and the public sandbox
326
+ SDK. Generation validation now runs immediately before native host spawn;
327
+ synchronous spawn failure and other proven pre-start exits remove the native
328
+ request and release the broker lease exactly once. Git Job-binding failure
329
+ keeps durable child tracking until process-tree drain is proved by background
330
+ recovery instead of unregistering an unknown tree.
331
+ - Preserved an already wrapped Windows `cmd /S /C` command tail across the
332
+ native runner boundary. The runner no longer adds a third quote layer that
333
+ made a successfully attested background shell immediately exit with “path
334
+ not found” before running its requested program, including when a quoted
335
+ executable is followed by an unquoted final argument.
336
+ - Legacy execution-scoped denyRead receipts are read only by explicit setup for
337
+ one-time migration. Ordinary admission never scans or repairs them.
338
+ - Native requests also stop adding the protected artifact cache as a redundant
339
+ `denyWrite` root; setup generation 8 removes only provable obsolete
340
+ sandbox-account guards and preserves ambiguous administrator ACLs. Real
341
+ Windows coverage holds one command active for up to 120 seconds while a
342
+ second Runtime must start and complete in under 15 seconds, and exercises
343
+ stale control staging, broker pressure, timeout/Job drain, and parallel
344
+ workspace writes.
345
+
346
+ ### Removed
347
+
348
+ - Removed the public `/repl` export `allowsAcceptEditsClassifierFallback` with
349
+ no replacement. The Runtime now owns the only shell-boundary route;
350
+ embedders must not install a second Accept Edits classifier fallback.
351
+ - Removed the stale public `createAgentHomeShellBoundaryGuardrail` helper and
352
+ its options type. It imposed a second Agent Home/opaque-shell block outside
353
+ the Runtime-owned sandbox-first route and has no replacement.
354
+
7
355
  ## [0.7.96-alpha.3] - 2026-08-29
8
356
 
9
357
  ### Added