@kodax-ai/kodax 0.7.72-hotfix.0 → 0.7.73

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 (101) hide show
  1. package/CHANGELOG.md +687 -492
  2. package/README.md +91 -38
  3. package/README_CN.md +60 -20
  4. package/dist/chunks/agent-T6PGT6AU.js +2 -0
  5. package/dist/chunks/argument-completer-QGMWA2C3.js +2 -0
  6. package/dist/chunks/{chunk-64NQBOSN.js → chunk-64M5HOCA.js} +1 -1
  7. package/dist/chunks/chunk-6JTWXGVU.js +622 -0
  8. package/dist/chunks/{chunk-SLHL766K.js → chunk-6RI2RBTF.js} +1 -1
  9. package/dist/chunks/chunk-AGDDM5AW.js +329 -0
  10. package/dist/chunks/chunk-BUPJGG3C.js +5 -0
  11. package/dist/chunks/chunk-EAD4SF3Z.js +413 -0
  12. package/dist/chunks/chunk-F7AIEHSS.js +46 -0
  13. package/dist/chunks/chunk-GAFFYJU3.js +37 -0
  14. package/dist/chunks/chunk-HVCNAZ52.js +365 -0
  15. package/dist/chunks/chunk-M7FXNPWV.js +22 -0
  16. package/dist/chunks/{chunk-44QXPEEE.js → chunk-MBAPT2R5.js} +1 -1
  17. package/dist/chunks/chunk-MLEAQTCD.js +151 -0
  18. package/dist/chunks/chunk-OG6DRNKV.js +755 -0
  19. package/dist/chunks/{chunk-SX2WFHIS.js → chunk-PFH53O4M.js} +1 -1
  20. package/dist/chunks/chunk-V4F6IYNK.js +73 -0
  21. package/dist/chunks/chunk-WQ6PWGK5.js +320 -0
  22. package/dist/chunks/chunk-XXQLPTAN.js +78 -0
  23. package/dist/chunks/compaction-config-IHJBP4GO.js +2 -0
  24. package/dist/chunks/{construction-bootstrap-LI2FP7KZ.js → construction-bootstrap-EGRUHKLP.js} +1 -1
  25. package/dist/chunks/dist-5N3I2RTW.js +2 -0
  26. package/dist/chunks/{dist-GOUP4YVE.js → dist-EVEJAII2.js} +1 -1
  27. package/dist/chunks/host-MECITNE3.js +2 -0
  28. package/dist/chunks/run-manager-AY7RQOWM.js +2 -0
  29. package/dist/chunks/{utils-O4PT6SHQ.js → utils-2GAE4XIM.js} +1 -1
  30. package/dist/index.d.ts +18 -18
  31. package/dist/index.js +5 -5
  32. package/dist/kodax_bootstrap.js +28 -0
  33. package/dist/kodax_cli.js +1476 -1463
  34. package/dist/kodax_resume.js +44 -0
  35. package/dist/provider-capabilities.json +234 -53
  36. package/dist/runtime-worker.js +1347 -1344
  37. package/dist/sdk-a2a.d.ts +12 -11
  38. package/dist/sdk-a2a.js +1 -1
  39. package/dist/sdk-agent.d.ts +385 -209
  40. package/dist/sdk-agent.js +1 -1
  41. package/dist/sdk-coding.d.ts +162 -144
  42. package/dist/sdk-coding.js +1 -1
  43. package/dist/sdk-experimental-memory.d.ts +1 -1
  44. package/dist/sdk-experimental-memory.js +1 -1
  45. package/dist/sdk-llm.d.ts +8 -49
  46. package/dist/sdk-llm.js +1 -1
  47. package/dist/sdk-mcp.js +1 -1
  48. package/dist/sdk-media.d.ts +4 -1
  49. package/dist/sdk-media.js +1 -1
  50. package/dist/sdk-repl.d.ts +197 -27
  51. package/dist/sdk-repl.js +2 -2
  52. package/dist/sdk-runtime.d.ts +230 -36
  53. package/dist/sdk-runtime.js +1 -1
  54. package/dist/sdk-session.d.ts +8 -7
  55. package/dist/sdk-session.js +1 -1
  56. package/dist/sdk-skills.d.ts +5 -5
  57. package/dist/sdk-skills.js +1 -1
  58. package/dist/semantic-worker.js +14 -14
  59. package/dist/types-chunks/{base.d-Cz_rwpOi.d.ts → base.d-ChvpaKjZ.d.ts} +1 -1
  60. package/dist/types-chunks/{bash-prefix-extractor.d-YoiZl5yt.d.ts → bash-prefix-extractor.d-bApf5nGw.d.ts} +109 -250
  61. package/dist/types-chunks/{capability-learning.d-_lR0J4iR.d.ts → capability-learning.d-DPrYxRjF.d.ts} +1 -1
  62. package/dist/types-chunks/{capsule.d-CK5Pfz1k.d.ts → capsule.d-CGWltwno.d.ts} +25 -96
  63. package/dist/types-chunks/center-types.d-BBT122uJ.d.ts +91 -0
  64. package/dist/types-chunks/{commands.d-D6g2jq8V.d.ts → commands.d-CEHGwRok.d.ts} +64 -6
  65. package/dist/types-chunks/{guardrail.d-DilYC1dh.d.ts → guardrail.d-CC4vAQl7.d.ts} +2 -1
  66. package/dist/types-chunks/{guardrail.d-DdeDWnVu.d.ts → guardrail.d-CXIPlWP3.d.ts} +91 -18
  67. package/dist/types-chunks/public-api.d-FBmX0kxo.d.ts +1343 -0
  68. package/dist/types-chunks/{run-manager.d-DxU3SSGR.d.ts → run-manager.d-DUNnJcpE.d.ts} +1 -1
  69. package/dist/types-chunks/sdk-session-XqacVOs8.d.ts +82 -0
  70. package/dist/types-chunks/{resolver.d-ssgNSlrh.d.ts → side-query.d-DWTMsndP.d.ts} +68 -5
  71. package/dist/types-chunks/{types.d-CRCaLt_s.d.ts → types.d-BnPhGmar.d.ts} +287 -165
  72. package/dist/types-chunks/{types.d-Cqaw71Ax.d.ts → types.d-CSmF0t0n.d.ts} +6 -5
  73. package/dist/types-chunks/{types.d-vJExiRje.d.ts → types.d-DCQVBqVn.d.ts} +10 -5
  74. package/dist/types-chunks/{types.d-CzsLFqmf.d.ts → types.d-DKr6TCXL.d.ts} +23 -17
  75. package/dist/types-chunks/{types.d-CEZZSY9s.d.ts → types.d-DgciGHoG.d.ts} +3 -3
  76. package/dist/types-chunks/{utils.d-Cb6vdvFM.d.ts → utils.d-BPYX7-KN.d.ts} +99 -18
  77. package/docs/SDK_EMBEDDER_GUIDE.md +287 -35
  78. package/package.json +5 -5
  79. package/scripts/kodax-bin.cjs +4 -2
  80. package/scripts/production-env.cjs +9 -0
  81. package/dist/chunks/agent-A3N27WVN.js +0 -2
  82. package/dist/chunks/argument-completer-BWTLOPZG.js +0 -2
  83. package/dist/chunks/chunk-23X6REO4.js +0 -46
  84. package/dist/chunks/chunk-52JSZ77P.js +0 -37
  85. package/dist/chunks/chunk-5R2SJ2EU.js +0 -306
  86. package/dist/chunks/chunk-64ATCY3Q.js +0 -22
  87. package/dist/chunks/chunk-BRQWYBEY.js +0 -70
  88. package/dist/chunks/chunk-OUMXYT55.js +0 -624
  89. package/dist/chunks/chunk-QDZUOLSM.js +0 -7
  90. package/dist/chunks/chunk-QTXG7B2J.js +0 -366
  91. package/dist/chunks/chunk-RKYTSURE.js +0 -422
  92. package/dist/chunks/chunk-VDJZWXSW.js +0 -329
  93. package/dist/chunks/chunk-X5PDRSXM.js +0 -151
  94. package/dist/chunks/chunk-Y5XKAN7C.js +0 -755
  95. package/dist/chunks/chunk-ZJIMT5I3.js +0 -78
  96. package/dist/chunks/compaction-config-OCZPAJQO.js +0 -2
  97. package/dist/chunks/dist-Y2HGGI7W.js +0 -2
  98. package/dist/chunks/host-ADFTZO6T.js +0 -2
  99. package/dist/chunks/run-manager-QU6EBSHJ.js +0 -2
  100. package/dist/types-chunks/public-api.d-BvCp5VkW.d.ts +0 -601
  101. package/dist/types-chunks/sdk-session-wGpa7X_U.d.ts +0 -796
package/CHANGELOG.md CHANGED
@@ -6,512 +6,707 @@ All notable changes to this project will be documented in this file.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
- ## [0.7.72-hotfix.0] - 2026-07-17
10
-
11
- ### Fixed
12
-
13
- - **Ark Coding image input routing.** The SDK now recognizes the five verified
14
- Ark Coding routes (`doubao-seed-2.0-code`, `doubao-seed-2.0-pro`,
15
- `kimi-k2.7-code`, `kimi-k2.6`, and `MiniMax-M3`) as image-capable instead of
16
- raising `MODEL_INPUT_UNSUPPORTED` before provider dispatch. The change is
17
- scoped to those exact provider/model pairs; other Ark models and all Ark
18
- video input remain fail-closed. Capability, validation, final Anthropic
19
- base64 serialization, and opt-in real-gateway regressions cover all five.
20
-
21
- ## [0.7.71] - 2026-07-17
22
-
23
- ### Added
24
-
25
- - **Kimi Code K3 support.** The `kimi-code` subscription provider now exposes
26
- `k3-256k` (Moderato) and `k3` (1,048,576 context tokens, Allegretto+) as
27
- explicit catalog choices, alongside `kimi-for-coding-highspeed` and the
28
- stable `kimi-for-coding` default. Both K3 choices send the upstream model id
29
- `k3`, so users do not need to override compaction settings for their plan.
30
- K3 sends its effort inside `thinking.effort` on both Anthropic- and
31
- OpenAI-compatible transports, defaults omitted reasoning to `max`, and
32
- preserves both legacy `reasoning=false` and explicit `effort=none` as disabled
33
- thinking. Static capability, reasoning, media, cost-tracking, and opt-in
34
- real-wire regressions cover the subscription routes and local context-tier
35
- mapping.
36
- - **Standards-based A2A authentication and Agent activation (FEATURE_267/268
37
- closure).** Outbound A2A entries can use OAuth 2.0 Client Credentials with an
38
- external Authorization Server, while inbound KodaX Agents can validate RFC
39
- 9068 JWT access tokens against an external issuer/JWKS as an OAuth Resource
40
- Server. The fixed environment Bearer profile remains available for
41
- compatibility. A hot `agents.<name>.enabled` switch plus `kodax a2a
42
- enable|disable` lets operators keep many configured third-party Agents while
43
- controlling which ones admit new orchestration; in-flight tasks are not
44
- cancelled.
45
-
46
- ### Changed
47
-
48
- - **External Agent SDK migration notes.** `AgentRegistrationService` now
49
- requires `setEnabled`; custom implementations must add the same
50
- revision/owner-conditional enablement operation. `executorConfig` and
51
- executor-reference `metadata` are `AgentJsonObject` values and reject class
52
- instances, accessors, circular references, and other non-JSON-safe data at
53
- runtime. SDK daemon auto-start without an explicit `homeDir` now follows the
54
- resolved `KODAX_HOME`; embedders that intentionally need the OS-home endpoint
55
- must pass `homeDir`, while custom endpoints remain attach-only.
56
-
57
- ### Fixed
58
-
59
- - **A2A durable-owner upgrade and admission concurrency.** New inbound tasks
60
- persist a non-secret principal-key scheme marker. Pre-realm tasks remain
61
- inaccessible during normal serving, but stopped operators can use
62
- `kodax a2a migrate-tasks` to dry-run and explicitly apply the configured
63
- owner mapping; custom hosts can use the public
64
- `migrateA2ALegacyTaskOwners()` SDK with exact mappings. Ambiguous or live-
65
- store migration fails closed. Global task capacity now uses a synchronous
66
- pending reservation, keeping slow workspace/session/run preparation outside
67
- any global lock while preserving exact limits and per-principal ordering.
68
- - **Bounded External Agent and daemon shutdown/startup.** Executor-plane close
69
- now has a 30-second default upper bound (overrideable with `closeTimeoutMs`),
70
- obsolete-executor cleanup runs outside the serialized registration mutation
71
- lane, and revision tombstones are SHA-256 fingerprints capped at 4,096
72
- entries. Current registrations and task snapshots continue to enforce exact
73
- revision immutability after older, unreferenced tombstones age out. Daemon
74
- auto-start now races health checks against the spawned child's exit, keeps
75
- the child referenced until readiness, and terminates it on early exit,
76
- timeout, identity mismatch, or when another daemon wins ownership. A startup
77
- candidate that exits after losing the owner race now lets its SDK caller wait
78
- for and attach to the competing owner instead of failing that caller.
79
- - **Faster packaged-Electron gates.** Release jobs build once and reuse that
80
- output for both the Windows Electron smoke and binary packaging. CI and
81
- release jobs cache the version-pinned Electron smoke toolchain, whose local
82
- directory is now explicitly ignored. Both paths explicitly materialize the
83
- Electron binary after cache restore or dependency installation, preventing a
84
- successful npm package install with a missing `electron/dist` from bypassing
85
- the real packaged-daemon gate.
86
- - **A2A authentication and reconciliation hardening.** Card-level and
87
- Skill-level security requirements now fail closed unless one complete
88
- alternative is satisfiable. Card, RPC, and token origins remain separate;
89
- exact credentials used by active RPC/SSE requests remain retained through
90
- response parsing and are redacted from errors and successful results;
91
- concurrent rejected-token invalidation cannot discard a newer token and each
92
- RPC retries at most once. Direct SDK and file configuration now share strict
93
- issuer, endpoint, resource, and RFC 6749 scope validation. Task ownership
94
- also requires a stable `securityRealm` and hashes the
95
- `(realm, subject, tenant)` tuple: built-in Bearer/OAuth derive realms from the
96
- token-env name/exact issuer, custom authentication must provide one, authority
97
- switches and legacy pre-realm tasks fail closed, and same-realm restart
98
- preserves new-format tasks. Authentication/effect changes participate in
99
- executor revisions; registration persistence
100
- precedes catalog mutation; first-class management ownership plus revision-
101
- conditional mutations protects unrelated or concurrently replaced SDK
102
- registrations, including same-revision owner takeovers; changed authority is
103
- fenced before parallel discovery; live drift is repaired; and a final
104
- post-preflight admission check closes disable/removal races without
105
- rediscovering unchanged peers. Internal immutable route snapshots preserve
106
- admitted task input/cancel/reconcile routing across registration update or
107
- removal and Runtime restart without exposing secret material or expanding the
108
- public task DTO. Admission now rechecks globally unique task IDs, task writes
109
- publish to memory only after durable persistence, and terminal event-write
110
- failures cannot strand waiters or route snapshots. Returned registration
111
- summaries are detached, executor cache keys are unambiguous tuples, and one
112
- ownership conflict or observer failure cannot abort unrelated Agent
113
- reconciliation or leave unawaited activation work. Daemon A2A ownership is
114
- now bound to the exact resolved config home—`<homeDir>/.kodax` when explicitly
115
- selected, otherwise the possibly arbitrary `KODAX_HOME`—recorded in daemon
116
- state, and checked across every local profile before mutation. Legacy
117
- non-empty version-1 A2A files require an explicit stopped-owner migration,
118
- while version-2 migration is a read-only idempotent no-op. Failed initial A2A
119
- reconciliation also closes the newly created Runtime before releasing daemon
120
- ownership.
121
- - **A2A post-closure lifecycle and resource correctness.** Executor operations
122
- and close now drain without disposal races; configured artifact references
123
- and direct `a2a call` use a bounded reference-only/no-fetch policy. CLI task
124
- RPC/SSE permits 32 MiB while Card/interface/OAuth/security metadata remains
125
- capped at 2 MiB, and unsupported required Card extensions fail discovery.
126
- Daemon mutation now requires independently owner-derived
127
- `externalAgentAdmin: 1` and `a2aConfigReconciler: 1`; capability overrides
128
- cannot forge them. Public `/a2a` config exports are read-only, with raw writers
129
- retained inside the fenced CLI owner. Inbound serving now has a global
130
- admission reservation, subscribe-first replay, authentication-before-body,
131
- exact JSON/SSE media matching, an admitted-handler close barrier, and fixed
132
- four-per-task/eight-per-server/24 MiB-per-stream SSE ceilings without
133
- terminating the underlying task for one slow subscriber.
134
- - **Public Kimi Open Platform parity and live coverage.** `kimi` now defaults to
135
- `kimi-k2.7-code`, exposes the HighSpeed route and wire-legal K2.5 id, uses the
136
- exact 262,144-token limits and current prices, and has gated real-key coverage
137
- for credential verification, K2.7 thinking, forced-tool fallback, and K2.6
138
- thinking disablement. K2.7 disable requests now fail locally instead of being
139
- silently ignored, while K2.6 disable requests emit the required wire toggle.
140
-
141
- - **Packaged Electron shared-daemon auto-start.** Runtime SDK embedders running
142
- from packaged/asar Electron applications now launch the detached daemon child
143
- through a bootstrap-only Node execution boundary without changing the host or
144
- long-lived daemon environment, leaking `ELECTRON_RUN_AS_NODE` to user child
145
- processes, or opening a second GUI instance. Trusted internal JavaScript
146
- children retain a bounded Electron-to-Node launch path. Missing packaged CLI
147
- sidecars fail immediately, disabled `RunAsNode` fuses receive an actionable
148
- timeout diagnostic, and a real Windows Electron 42.5.0 + asar smoke now gates
149
- CI and releases. Public docs also distinguish CLI-style `homeDir` from the
150
- lower-level `.kodax` path used by `KODAX_HOME`.
151
- - **Cross-platform release template checks.** Generated configuration templates
152
- now compare normalized line endings, so Windows CRLF checkouts no longer report
153
- false drift during binary builds.
154
-
155
- ## [0.7.70] - 2026-07-15
156
-
157
- ### Added
158
-
159
- - **Typed shared-daemon rollback management (FEATURE_269 patch).** Daemon
160
- facades now expose revisioned management inspection and atomic
161
- `stopForInline()`, plus public owner-fence queries and revision-free daemon
162
- re-enable helpers for safe embedder rollback workflows.
163
-
164
- ### Changed
165
-
166
- - **KAI-FCL licensing from v0.7.70.** Official KodaX source, binaries, and npm
167
- packages now use the KodaX-AI Fair Core License 1.0: community use remains
168
- available, while commercial or managed use requires KodaX-AI authorization.
169
- Previously released Apache-2.0 copies retain their original grants.
170
-
171
- ### Fixed
172
-
173
- - **A2A interoperability and execution boundaries.** Selected Card interfaces
174
- remain bound to their trusted discovery origin and advertised Bearer scheme;
175
- concrete recursive reads and child runs retain the parent policy ceiling;
176
- pending input resumes the original Runtime run; task retention, history,
177
- cleanup, stable cursor pagination, protocol correlation/version, authenticated
178
- SSE, appended artifact chunks, and early-stream-EOF semantics are bounded;
179
- and direct, staged, or successfully promoted admitted Skill outputs are
180
- returned as negotiated artifacts without exposing ordinary workspace writes.
181
- - **MCP multilingual zero-match efficiency.** Compact CJK queries now segment
182
- into words, while cross-language lexical zero matches can return a lossless
183
- shared-prefix exact-id inventory only when it is no more expensive than a
184
- normal default search page and fits the real result capacity. Oversized
185
- recovery emits one concise catalog-language retry with no biased partial list.
186
- Fully unavailable catalogs no longer trigger a duplicate inventory attempt;
187
- concurrent discovery is coalesced, in-flight invalidation cannot be overwritten,
188
- and filtered cursor revisions ignore unrelated capability families.
189
- - **Logical daemon client accounting.** Stop preflight now counts only live,
190
- initialized SDK clients. Daemon self-connections and read-only health probes
191
- are excluded, and awaited client close converges the count across processes.
192
- Health probes also tolerate the daemon token disappearing during a concurrent
193
- shutdown or owner transition instead of leaking an `ENOENT` race to clients.
194
- - **Preflight/stop race.** Rollback commit gates new clients and mutations,
195
- validates the same Runtime, management revision, owner-policy revision, and
196
- blockers, and changes sticky inline policy while the verified daemon still
197
- owns the profile fence. Stale commits fail with structured `conflict` and do
198
- not stop or change policy.
199
- - **Complete rollback draining and background-work blockers.** Credential and
200
- Host Tool bridge state can no longer change after draining starts, while
201
- running/paused Workflows and non-terminal or unknown External Agent tasks now
202
- block stop and participate in the management revision. Reverse-result frames
203
- remain outside the durable journal so credentials and Host Tool results are
204
- not persisted. In-flight stop conflicts identify the active mutation methods
205
- and counts so lifecycle stalls can be diagnosed without reproducing them.
206
-
207
- ## [0.7.69] - 2026-07-15
208
-
209
- > Scope note: this release delivers **FEATURE_267**, **FEATURE_268**, and
210
- > **FEATURE_269** as one bounded interoperability/runtime release: bidirectional
211
- > A2A 1.0, split hot-reloadable integration configuration, and one authoritative
212
- > shared Coder daemon with secure host bridges. It does not expose the daemon
213
- > remotely, migrate Partner from its private embedded Runtime, or publish
214
- > credentials/Host Tools outside their bound run.
9
+ ## [0.7.73] - 2026-07-20
215
10
 
216
11
  ### Added
217
12
 
218
- - **Bidirectional A2A 1.0 interoperability (FEATURE_267).** Added the
219
- `@kodax-ai/kodax/a2a` integration edge: allowlisted Agent Card discovery and
220
- a JSON-RPC/SSE executor over the existing F258 plane, plus an authenticated,
221
- caller-scoped, durable Runtime-backed KodaX Agent server with continuation,
222
- cancellation, ordered replay/subscription, and restart reattachment.
223
- - **No-code A2A product path and Runtime binding.** Added declarative
224
- `a2a add/list/test/call/remove`, automatic `external:<name>` registration for
225
- built-in Runtime owners, and explicit `a2a expose` / loopback-only `a2a
226
- serve`. The inbound server can publish the Runtime default or one validated
227
- user Markdown Agent with pinned Agent/Skill/tool/workspace revisions,
228
- structured `toolPolicy`, `~/.agents/skills` discovery, and exact Skill-script
229
- execution through the fail-closed ASRT adapter.
230
- - **Split integration configuration and hot reload (FEATURE_268).** MCP, A2A,
231
- and Extensions now use one user-level versioned file per domain, backed by
232
- four canonical templates, explicit lossless migration, locked atomic writes,
233
- last-known-good watchers with metadata fallback, whole-provider MCP draining,
234
- entry-transactional Extension/outbound-A2A reconciliation, and explicit
235
- restart-required handling for inbound execution/store authority changes.
236
- - **A2A network and publication boundaries.** Outbound fetches enforce origin,
237
- DNS/private-address, TLS, redirect, credential, timeout, content-type, and
238
- size policy. The built-in server listener is loopback-only; public hosts use
239
- `handle()` behind TLS. A2A 0.3, gRPC, HTTP+JSON, push notifications, automatic
240
- public Agent exposure, and remote Runtime configuration are not advertised.
241
- - **Authoritative shared Coder daemon (FEATURE_269).** Added atomic
242
- `sessions.observe()` join/resync, durable operation identities and receipts,
243
- stable same-session ordering, settings/grant CAS, transport-safe AskUser and
244
- permission resolution, live run projection, structured restart outcomes, and
245
- a truthful per-capability Coder compatibility matrix for CLI, Space, IDE, and
246
- SDK clients.
247
- - **Shared-daemon SDK completion.** Server-side Coder/Partner admission now
248
- covers every session and run path; late-join snapshots include transcript
249
- revision, managed tasks, queued continuation metadata, and reverse
250
- requirements. The SDK adds prompt connection lifecycle signals, typed event
251
- parsing with per-event degradation, daemon-safe run DTOs,
252
- `agentMode`/`autoModeEngine` settings CAS, durable operation/Host Tool outcome
253
- queries, and daemon stop/rollback preflight.
254
- - **Secure host bridges and owner fencing.** Provider credentials are supplied
255
- just in time through stable-client/run/provider-bound leases and never
256
- persisted. A keychain-held stable client secret can reattach credential and
257
- Host Tool handlers after Space reconnects; Host Tools remain immutable and
258
- run-bound, with fsynced dispatch truth and explicit unknown outcomes rather
259
- than blind replay. Daemon and inline Coder ownership share one revisioned
260
- fence with sticky rollback, while Partner remains isolated.
261
-
262
- ### Changed
263
-
264
- - **Tool-result delivery now optimizes end-to-end context use.** Tool handlers
265
- collect complete results and one aggregate next-request capacity owner keeps
266
- every result inline when the batch fits. Default Bash processing no longer
267
- applies command-specific lossy filters; its former 512 KiB capture limit is
268
- now only a memory-to-disk spool threshold. Capacity is solved against the
269
- final input (`Pmax`), so the 3% uncertainty margin grows with the admitted
270
- batch instead of being frozen at the smaller pre-batch request.
271
- - **History compaction is physical-capacity driven.** Default automatic
272
- compaction waits until the final provider envelope (system prompt, actual
273
- tools, messages/framing, output reserve, and safety margin) cannot fit.
274
- Default microcompaction and destructive pre-summary/fallback pruning are off;
275
- pressure uses semantic summary first and stops as soon as the next request
276
- fits. Static early percentages remain explicit opt-ins, and manual
277
- `/compact` remains an explicit force operation.
278
- - **Self-knowledge follows the v0.7.69 capability surface.** `kodax_manual`
279
- now documents the three split integration files and migration/hot-reload
280
- behavior, the `/a2a` SDK subpath, atomic shared-daemon observation, durable
281
- controls, run-scoped credentials/Host Tools, and daemon/inline ownership.
13
+ - **Qwen Token Plan provider.** The new `qwen-token-plan` alias uses the
14
+ Anthropic-compatible Alibaba Cloud Token Plan endpoint and
15
+ `QWEN_TOKEN_API_KEY`. It defaults to `qwen3.8-max-preview`, exposes the
16
+ supported Qwen 3.7/3.6, GLM-5.2, and DeepSeek V4 Pro routes with one-million-
17
+ token context metadata, and declares verified reasoning, image-input, and
18
+ nominal subscription-cost capabilities without changing the existing `qwen`
19
+ provider.
20
+ - **First-run provider setup (FEATURE_271).** A bare interactive `kodax`
21
+ launch with no selected provider and no supported local credential now opens
22
+ a focused provider/model setup flow before Runtime, daemon, session, or REPL
23
+ startup. `kodax setup` reruns the same flow explicitly. It stores only
24
+ non-secret metadata, preserves unrelated config through a revision-checked
25
+ atomic write, refuses malformed existing custom providers and credential-
26
+ bearing endpoint URLs, and then names the required environment variable and
27
+ terminal restart steps.
28
+ - **Typed Auto Mode SDK contract (FEATURE_271).** The root and REPL SDK
29
+ entries now export one pure `resolveAutoModeSettings()` plus the authoritative
30
+ loader and related types; `loadConfig().autoMode` is declared, Runtime Session
31
+ settings persist `autoModeSpeculativeWindowMs` (including `0`), and side
32
+ queries return prompt-free provider/model/timing/retry/phase diagnostics.
33
+ - **Runtime-owned concrete permission grants.** Embedded and daemon SDK clients
34
+ can submit concrete `toolInput` and `executionCwd`, receive only opaque
35
+ Runtime-issued Session/persistent grant suggestions, and select a suggestion
36
+ without constructing or widening its hidden matcher. Exact command, known
37
+ file-tool path, and generic exact-call matchers remain revisioned and audited;
38
+ dynamic or dangerous shell calls never receive a persistent suggestion.
282
39
 
283
40
  ### Fixed
284
41
 
285
- - **Recoverable overflow and hidden output caps.** Overflow of the final
286
- operational request budget saves the complete result and emits one explicit
287
- incomplete marker. Long lines have exact continuation offsets, completed task
288
- output is complete, and hidden caps were removed from grep, glob, code search,
289
- and retrieval rendering.
290
- - **Cache token accounting and history preservation.** Cache tokens are charged
291
- once. Empty, failed, or insufficient summaries now surface a typed capacity
292
- error while retaining the canonical transcript and immutable Worker prompt.
293
- - **Tool-result completeness and retention edge cases.** No-usage accounting
294
- includes the final system prompt, active schemas, and same-request recovery;
295
- explicit limits use one-extra-item probes; delayed Bash drain remains
296
- recoverable. Referenced result/image artifacts and fresh checkpoints are no
297
- longer removed by age-only cleanup.
298
- - **Post-review capacity correctness.** Trusted artifact metadata cannot be
299
- forged by raw tool text; failures carry the last legal transcript; observers
300
- see admitted content; child evidence uses the routed model's physical budget;
301
- bounded acquisition exposes continuation instead of silent loss; direct Bash
302
- artifacts remain canonical without nested spill markers.
303
- - **Windows process-tree fallback.** A failed or timed-out `taskkill /t` now
304
- triggers a native Toolhelp parent snapshot before direct escalation, with
305
- CIM/WMIC retained only as fallback. Agent and LLM cleanup stay aligned and a
306
- real nested-process regression proves descendants exit.
307
- - **Windows lock deletion races.** Proposal and lifecycle lock probes treat
308
- transient `EPERM`/`EACCES`/`EBUSY` as non-stale and retry, preserving the
309
- fail-closed owner-token contract during concurrent removal.
310
- - **Frozen FEATURE_259 eval inputs.** The pre-iteration dispatch schema is
311
- reconstructed from its historical bytes, so later production tool-schema
312
- improvements cannot mutate the baseline or invite a hash-only CI workaround.
313
- - **Governed-memory Bash guard bypasses.** Commands that directly address
314
- recognized scoped or legacy memory roots now permit only one simple read-only
315
- inspection; command chaining, pipelines, redirects, home-relative paths, and
316
- interpreter writes fail closed at the Bash tool boundary.
317
- - **Memory proposal and review persistence integrity.** Invalid approval
318
- metadata now produces a store warning and blocks rewrites; project-less review
319
- drains no longer claim project-owned work; persisted outcome evidence receives
320
- full shape validation; atomic writes clean temporary files on failure.
321
- - **Memory store lock ownership.** Proposal and lifecycle locks now carry a PID
322
- plus random owner token, avoid reclaiming stale locks held by a live process,
323
- and remove a lock only when the releasing owner token still matches. Lifecycle
324
- state writes now use temporary-file rename instead of direct truncating writes.
325
- - **Interactive resume handoff and large-store startup.** Bare `kodax -r` now
326
- keeps the selected session through the picker-to-TUI handoff instead of
327
- exiting, and the picker uses bounded metadata paging instead of repeatedly
328
- full-reading every matching session before it opens.
329
- - **A2A/configuration release hardening.** Review gaps in remote execution,
330
- Skill-script admission/isolation, hot reload, listener preparation, binding
331
- pinning, last-known-good reconciliation, and redacted diagnostics now fail
332
- closed or retain the prior healthy revision as specified. The public A2A
333
- server type now exposes its existing readiness wait, validated DNS results
334
- narrow explicitly to IPv4/IPv6, and safe request-body typing no longer
335
- depends on an undeclared DOM global, keeping root TypeScript validation green.
42
+ - **Reasoning, Auto Mode, and confirmation regressions.** Native
43
+ disabled-thinking requests now send the provider's explicit disabled form
44
+ only for models that declare support (including verified Qwen Token Plan 3.7
45
+ routes); always-thinking variants retain their declared behavior. Sidecar
46
+ queries preserve a supported `none` effort, persisted Runtime Auto engines
47
+ are not overwritten by a fresh REPL, `/mode` synchronizes before reporting
48
+ success, and concurrent confirmation prompts are serialized instead of
49
+ replacing one another.
50
+ - **Legacy permission-grant upgrade safety.** Matcherless grants persisted by
51
+ older releases remain visible and revocable but can no longer authorize a
52
+ concrete tool call. The next invocation requires a fresh Runtime-issued
53
+ matcher, so old coarse Bash grants cannot bypass exact-command, dynamic-shell,
54
+ or absolute-deny protections.
55
+ - **Classifier credential boundary.** Auto[LLM] now redacts explicitly named
56
+ credential values inside shell-escaped JSON before sending an action to its
57
+ side provider, while retaining adjacent operational fields. Redaction is
58
+ documented as defense in depth; arbitrary Base64/hex values are not treated
59
+ as secrets without a credential signal.
60
+ - **Todo/Actor semantic progress checkpoint (FEATURE_270 follow-up).** Worker
61
+ guidance now treats Todo rows as user-visible milestones rather than Actor
62
+ instances and requires timely updates at milestone boundaries. Structured
63
+ terminal child results arm one deduplicated, warn-only reconciliation
64
+ reminder; transcript scans are append-incremental with safe compaction
65
+ fallback, and Sidecar accept-time residual reconciliation emits a diagnostic
66
+ without changing its existing bridge contract.
67
+ - **Auto LLM classifier timeout and missing-model escalation.** Runtime now
68
+ treats omitted Auto engine as the documented LLM default and still owns the
69
+ guardrail, while a missing/blank/malformed effective classifier model fails
70
+ as a typed recoverable Runtime error or a local block in the shared
71
+ `createAutoModeToolGuardrail` boundary. The final guardrail check runs before
72
+ provider lookup and cannot invoke `askUser`, record a circuit-breaker error,
73
+ or downgrade to rules. Classifier requests strip assistant prose/thinking,
74
+ cap normalized transcript/tool-result/action/prompt bytes, remove image
75
+ paths, and cap the structured response at 256 tokens. The 20-second deadline remains bounded:
76
+ a four-call `zai-coding/glm-5.2` probe completed representative Windows
77
+ permission verdicts in 1.9–2.8 seconds, while the matching production session
78
+ revealed a 1.625 MB tool result that had bypassed the existing sanitizer.
79
+ - **Auto guardrail daemon and tracing semantics.** Auto-started Runtime clients
80
+ now require `runtimeAutoModeGuardrail:3`. It retains v2's effective
81
+ timeout/window defaults, bounded classifier input, and diagnostics metadata,
82
+ and adds opaque concrete-grant semantics. Capability negotiation is monotonic
83
+ (v3 satisfies v2/v1); idle older daemons use the existing fenced upgrade path,
84
+ while busy daemons are left untouched with a recoverable error. Guardrail
85
+ spans now cover the awaited callback instead of timing only final verdict
86
+ emission.
87
+ - **Concurrent daemon startup publication race.** A cleanly exiting loser now
88
+ gives the elected owner a bounded publication grace period, preventing an
89
+ SDK starter from reporting failure during the short lock/state handoff gap.
90
+ - **Guardrail/permission execution parity.** Both Runner paths now commit each
91
+ guardrail rewrite before permission policy and execution, reject correlation-
92
+ id rewrites, propagate blocks as visible audited tool results, and preserve
93
+ embedded host policy hooks while rejecting non-transportable daemon hooks.
94
+ Calls rewritten into Bash retain serialized shell ordering.
95
+ - **Managed-run capacity and tool-dispatch accounting.** A complete system
96
+ prompt override no longer double-counts Skills, missing provider usage rebases
97
+ from the final request envelope, and authoritative provider usage remains
98
+ intact. Non-Bash tool calls keep parallel dispatch, Bash remains sequential,
99
+ and aggregate tool-result spill decisions use the complete batch budget.
336
100
 
337
- ## [0.7.68] - 2026-07-12
338
-
339
- > Scope note: this release delivers **FEATURE_260**, the KodaX Memory Agent,
340
- > as a thin experimental SDK and governed runtime extension over the existing
341
- > F228 Memory Control Plane. It does not add a second memory database, a
342
- > resident specialist agent, filesystem memory actions, or online self-modification.
101
+ ## [0.7.72] - 2026-07-19
343
102
 
344
103
  ### Added
345
104
 
346
- - **Thin experimental Memory Agent SDK.** Added
347
- `@kodax-ai/agent/experimental-memory` and the root `/experimental-memory`
348
- entry with scoped `MemorySession` lifecycle, zero-wait passive recall,
349
- read-only deliberate `query()`, bounded observations, and episode outcomes.
350
- - **Deliberate governed recall for the Action LLM.** A session-bound
351
- `memory_recall` tool exposes only one `need` field, returns prompt-safe
352
- low-authority evidence from the same F228 plane, and keeps identity, scope,
353
- revision, and sequence outside model input.
354
- - **Auditable memory decisions and outcomes.** Trace-only
355
- `MemoryDecisionReceipt` records candidate/selected/injected refs and policy
356
- version; accepted Outcome Digests can conservatively link influence without
357
- storing hidden reasoning or creating a second event store.
358
- - **Bounded episode review and promotion.** Timed-out review work persists in a
359
- scoped inbox for bounded next-session drain and revalidation. Promotion now
360
- consults compatible claims before choosing create, evidence update,
361
- condition refinement, conflict, no-action, reject, or quarantine.
105
+ - **Learning Center and learned-capability Runtime control plane
106
+ (FEATURE_266).** KodaX now owns learned capability lifecycle, notification
107
+ cursors, lower-precedence learned Skill discovery, F224 proposal projection,
108
+ promotion/rollback actions, and inline/Worker/daemon SDK parity through one
109
+ agent-layer service. `/learn`, status summaries, and the Ink learning segment
110
+ expose the same durable state without creating a second runtime engine.
111
+ - **Unified adaptive Actor/Turn control plane (FEATURE_270).** AMA collaboration
112
+ now uses one Runtime-owned actor tree and scheduler across native, recursive,
113
+ Workflow-owned, constructed, and external Agent work. The canonical
114
+ `spawn_agent`, `send_message`, `followup_task`, `wait_agent`,
115
+ `interrupt_agent`, `list_agents`, and `agent_output` surface supports reusable
116
+ Actor identities, durable Turn history, direct-parent completion, recursive
117
+ delegation, shared capacity, and SDK/daemon recovery. A manifest-first,
118
+ fail-closed behavioral eval driver freezes the released/current production
119
+ prompt and tool bytes, call graphs, budgets, raw evidence, and blind review
120
+ mapping before any separately authorized provider call.
362
121
 
363
122
  ### Changed
364
123
 
365
- - **Memory applicability is exact and fail-closed.** Tenant, user, agent,
366
- workspace, project, and branch identity participate in deterministic scope
367
- checks; sibling/cross-user/cross-tenant fallback is prohibited.
368
- - **Memory policy is source-versioned and cache-safe.** `f260-v0.7.68.2`
369
- binds production reminder rules, evidence rendering, and deliberate-recall
370
- tool bytes. Passive reminders only affect the dynamic suffix; deliberate
371
- queries add a normal tool-call/result tail while preserving earlier provider
372
- cache bytes.
373
- - **Safety-critical boundaries remain deterministic.** Secret filtering,
374
- memory-file mutation guards, poisoning/source-evidence checks, and governed
375
- proposal/preview/fingerprint/apply remain zero-violation code gates rather
376
- than probabilistic LLM recall thresholds.
377
- - **Self-knowledge follows the v0.7.68 capability surface.** `kodax_manual`
378
- now has a dedicated governed-memory topic, names all 43 built-in slash
379
- commands under a two-way drift guard, and documents the current 10 SDK
380
- subpaths plus Runtime and `/experimental-memory` ownership boundaries.
124
+ - **Current coding-eval aliases and MiniMax default model.** Newly authored or
125
+ revised evals now route Zhipu through `zhipu/glm52` (`glm-5.2`) and MiniMax
126
+ through `mmx/m3` (`MiniMax-M3`). `minimax-coding` now defaults to M3 while
127
+ the old `zhipu/glm51` and `mmx/m27` aliases remain explicitly selectable for
128
+ historical replay; existing raw evidence and reports keep their original
129
+ route labels.
130
+ - **AMA and Workflow orchestration cutover.** AMAW and the old model-visible
131
+ child-task vocabulary are retired. Persisted `amaw`/`ama-workflow` settings
132
+ migrate once to AMA, while new inputs fail with a migration hint. Workflow
133
+ remains available for explicit natural-language, command, named-pattern, and
134
+ SDK requests, but its child Agents now use the unified Actor scheduler and
135
+ task complexity alone no longer activates Workflow.
381
136
 
382
137
  ### Fixed
383
138
 
384
- - **Post-review Memory Agent release hardening.** Repository identity now strips
385
- Git remote userinfo/query credentials before scoped or legacy persistence;
386
- managed-path guards are Windows-case-safe, protect governance sidecars, and
387
- fail closed for non-read-only shell access to addressed memory roots. Episode
388
- reviews use atomic processing claims with stale recovery, while proposal and
389
- lifecycle stores serialize concurrent read-modify-write updates. Eval manifest
390
- schema v2 binds untracked file bytes in addition to the tracked patch, corrupt
391
- raw JSON fails loudly, and summary review state points to the separate
392
- main-session review artifact instead of remaining permanently pending.
393
- - **Runtime daemon state replacement is atomic.** Daemon lifecycle updates now
394
- stage and rename `daemon.json` instead of truncating it in place, preventing
395
- shutdown polling from mistaking a partial write for completed cleanup and
396
- leaving an orphaned `stopping` process under full-suite load.
397
-
398
- ### Performance
399
-
400
- - **The preregistered v2 memory-routing panel passes all release gates.** On
401
- `ark/v4flash`, general immediate recall passed 59/60 (98.3%), high-value
402
- recall 40/40, must-silent 200/200 (Wilson lower 98.1%), paired routing lift
403
- was +73.3 percentage points with zero control regression, and bounded
404
- two-decision recovery passed 20/20. The 520-cell panel represented 782,721
405
- tokens and an estimated $0.004447 against the $0.02 cap. Main-session blinded
406
- review recommends ship for routing value while documenting that the panel is
407
- not an end-to-end task-completion claim.
408
-
409
- ## [0.7.67] - 2026-07-11
410
-
411
- > Scope note: a stabilization and agent-efficiency release. **FEATURE_258**
412
- > adds the protocol-neutral external-agent executor plane, **FEATURE_259**
413
- > makes workflow/review orchestration more focused and cost-disciplined, and
414
- > the bounded corrective **FEATURE_261** delivers searchable session resume
415
- > plus safe ACP-session cleanup. GitHub source/binary release work is included;
416
- > npm publication remains a separate operator step.
417
-
418
- ### Added
419
-
420
- - **External Agent Executor Plane and dispatchable catalog.** Host-injected
421
- executors now share a protocol-neutral registration/catalog/task contract,
422
- redacted policy-filtered discovery, durable task ledger, recovery, and a
423
- reference executor. Worker tools, Workflow, Embedded Runtime, and daemon
424
- clients discover and dispatch the same canonical agent IDs.
425
- - **External-agent SDK and daemon surfaces.** Runtime sessions expose catalog,
426
- start/continue/cancel/reconcile, event, and task-result operations with
427
- versioned schemas, configuration revisions, credential-presence checks, and
428
- public in-process daemon-factory bootstrap support.
429
- - **Focused scoped-review workflow.** `/review --workflow` now uses immutable
430
- review packets, one primary per scope, an additional authoritative primary
431
- only for risk-flagged packets, batched fresh verification for candidate
432
- findings, stable finding IDs, capable synthesis, and an audit artifact.
433
- - **Explicit model-tier intent and route telemetry.** Workflow and substantive
434
- child briefs carry focused scope/constraints/evidence/output fields plus
435
- explicit `fast` / `balanced` / `deep` intent. Runtime reports the resolved
436
- source, fallback, effort, usage, duration, packet-read topology, and token
437
- coverage without fabricating missing external usage.
438
- - **Searchable session resume picker.** Running `kodax -r` without an ID now
439
- opens an interactive TUI with incremental search, keyboard selection, title
440
- completion, pagination, and the full selected session ID. An explicit value
441
- resolves a complete ID first, then a unique exact title; duplicate titles
442
- open a narrowed picker rather than silently selecting one.
443
- - **Session listing filters and cursors.** SessionManager, Runtime SDK, and
444
- daemon protocol listings now accept an exact `surface` filter and an opaque
445
- continuation `cursor`, applied before the requested page limit.
446
-
447
- ### Changed
448
-
449
- - **Resident workflow context is smaller and discoverable.** The turn-resident
450
- `run_workflow` hint stays below the deferred-tool budget while the full
451
- authoring contract remains available through `tool_search`. Recorded
452
- workflow-shaped plans start directly instead of being expanded into duplicate
453
- todo/dispatch scaffolding.
454
- - **Review handoffs are structured and conservative.** Positive observations
455
- are not findings; missing evidence remains `not-verifiable` rather than being
456
- promoted into a defect; unreasoned severity overrides retain the original
457
- severity instead of failing the review.
458
- - **Eval execution is value-driven and bounded.** Main-session evidence review
459
- determines whether a candidate has material value over baseline; executor
460
- aliases are not reused as judge models. Raw reuse, per-call/round/token/cost
461
- caps, one bounded structured repair, and provider/model concurrency lanes
462
- prevent runaway panels.
463
- - **SDK embedder documentation matches the v0.7.67 public surface.** The guide
464
- now covers external-agent owner/consumer setup and safety boundaries, Runtime
465
- registration/catalog/task services, exact-surface session pagination,
466
- run-scoped workflow tiers, live route facts, and durable efficiency reports;
467
- the English/Chinese subpath tables reflect all 10 published SDK entries.
139
+ - **Remote Runtime subscription readiness.** Daemon event/workflow
140
+ subscriptions now expose an awaitable `RuntimeSubscription.ready` handshake,
141
+ so hosts can establish cross-client ordering before starting work whose first
142
+ event must not be missed. Handshake failures remain observable to new callers
143
+ without creating unhandled rejections in legacy callers that ignore `ready`.
468
144
 
469
- ### Fixed
145
+ - **Detached daemon lifecycle cleanup.** CLI and SDK startup now retain the
146
+ exact candidate process until its PID is healthy and reclaim only that process
147
+ tree on early exit, timeout, identity mismatch, owner-race loss, or startup
148
+ cancellation. Vitest-owned daemons also shut down when a forcibly terminated
149
+ worker cannot run normal teardown; production daemons remain persistent after
150
+ ordinary client detach and have no idle reaper. A source daemon child now
151
+ carries only KodaX's production preload, explicit `tsx` support, and safe
152
+ Node engine flags instead of inheriting arbitrary parent loaders, preventing
153
+ test-runner hooks from parsing daemon CLI arguments.
470
154
 
471
- - **Restricted Workflow scripts preserve the public Agent routing contract.**
472
- `phase` and FEATURE_258 `target` values now cross the script host boundary
473
- with fail-loud validation, so generated/saved workflows can route the same
474
- canonical external Agent IDs as direct Workflow and Worker dispatch.
475
- - **Executor-plane shutdown is terminal and waiter-safe.** Closing the plane is
476
- idempotent, rejects pending task waits, and prevents later registration,
477
- catalog, or task operations from recreating executors after owner shutdown.
478
- - **Review/eval trust boundaries fail loudly without replacing real results.**
479
- Built-in scoped-review outputs are validated against their declared schemas;
480
- local ledger mirror failures retain the authoritative child result/error;
481
- Feature 259 baseline reconstruction now requires every exact rewrite and no
482
- longer leaks candidate-only briefing fields into the baseline.
483
- - **Runtime tests no longer leave detached Node processes behind.** The config
484
- suite explicitly shuts down its auto-started daemon owner before deleting
485
- temporary state, and long-running process fixtures self-exit if an abnormal
486
- test-runner termination prevents normal managed cleanup.
487
- - **External tasks keep identity and terminal state across failures.** A remote
488
- start followed by ledger failure preserves its executor reference as
489
- `unknown`; in-flight tasks retain immutable executor bindings across catalog
490
- updates; task-level mutation queues prevent late callbacks from overwriting a
491
- terminal snapshot; Workflow external waits honor `timeoutMs`.
492
- - **External task safety and policy boundaries fail closed.** Executor
493
- availability, health, capability, concurrency, credential presence,
494
- configuration revision, target side effects, and read-only intent are checked
495
- before start without exposing secret values.
496
- - **ACP tests no longer pollute real user sessions.** ACP harnesses now use an
497
- isolated temporary runtime home and session store, with a guard that rejects
498
- paths under the real user home. ACP sessions remain provisional until the
499
- first valid prompt instead of persisting an empty `ACP Session` during
500
- protocol setup.
501
- - **Empty ACP pollution can be audited and recovered safely.**
502
- `kodax -s cleanup-acp` previews only strict empty ACP matches; explicit
503
- `--apply-session-cleanup` archives them reversibly instead of deleting data.
155
+ - **Windows memory lifecycle lock contention.** Concurrent forget/archive
156
+ operations now retry short-lived Windows sharing denials within the existing
157
+ bounded lock deadline instead of failing immediately with `EPERM`; unrelated
158
+ filesystem errors remain fail-fast.
504
159
 
505
- ### Performance
160
+ - **MiniMax M3 default media regression.** The media capability suite now
161
+ expects the current `minimax-coding` default, MiniMax M3, to support image
162
+ input while retaining fail-closed checks for unverified nearby routes.
506
163
 
507
- - **Feature 259 controlled comparison validates the review optimization.** The
508
- proposed topology passed 8/8 Layer-3 oracle cells versus 6/8 baseline, reduced
509
- total model tokens 16.9% and output tokens 49.1%, and on standard reviews
510
- reduced median tokens 57.2%, primary starts 75%, and duplicate packet reads
511
- 83.3%. High-risk multi-area reviews intentionally spend more calls for fresh
512
- verification and explicit packet coverage.
164
+ - **Bare resume cancellation terminal release.** Pressing Esc in `kodax -r`
165
+ now pauses and unreferences the picker-owned stdin path before the bootstrap
166
+ exits, so Windows PowerShell regains its prompt immediately without requiring
167
+ an extra keypress. The full CLI remains unloaded while listing sessions,
168
+ successful selection hands input to the REPL, and replay retains each
169
+ persisted event timestamp.
170
+ - **Auto[LLM] approval reliability.** The default classifier budget is now 20
171
+ seconds, pure readonly invocations bypass classification by invariant, and
172
+ SDK/daemon session settings can select the classifier model and timeout without
173
+ stale guardrail-cache reuse. Runtime advertises and requires
174
+ `runtimeAutoModeGuardrail:1` for auto-started daemon clients, owns the Session
175
+ guardrail ahead of the generic permission hook, persists LLM-to-rules
176
+ fallback, and creates a shared pending request only for an explicit
177
+ escalation. An older daemon is replaced only after a revision/owner-policy
178
+ fenced preflight proves that active/queued work and pending interactions are
179
+ absent; busy or unfenceable daemons return a typed recoverable error. The one
180
+ conditional readonly exception, `semantic_lookup(refresh:true)`, remains
181
+ classified because it rebuilds the on-disk derived index.
182
+ - **Runtime permission boundary correctness.** Relative operands resolve from
183
+ the validated execution directory while `gitRoot` remains a safety boundary;
184
+ Windows containment is case-insensitive, deterministic direct/nested-shell
185
+ writes to the user `.kodax` credential zone are Tier-0 denied, and quoted
186
+ Python/regexp source is not treated as a path. Permission previews use a
187
+ scan-bounded field whitelist, omit write/edit bodies, redact JSON/YAML/PEM
188
+ and command-line credentials, and remain valid size-limited JSON with that
189
+ directory. `exit_plan_mode` is absent without a real host approval bridge.
190
+ - **0.7.x SDK source compatibility.** Deprecated `amaw` input is accepted and
191
+ normalized to AMA without restoring retired behavior; formal `SkillSource`
192
+ remains exhaustive while `ResolvedSkillSource` adds `learned`; daemon
193
+ preflight normalizes canonical `activeAgentTurns` and deprecated
194
+ `activeAgentTasks` to the same required array across old and current wire
195
+ shapes.
196
+ - **Queued follow-up responsiveness.** REPL, AMA, and SA now share the same
197
+ Actor queue routing contract while SA retains its legacy unscoped queue. User
198
+ input wakes `wait_agent` and idle-yield through lossless subscriptions and
199
+ resumes at a safe turn boundary without canceling unrelated parallel tools.
200
+ SDK media follow-ups accept an explicit `sessionId`, preserve old single-Actor
201
+ calls through lifecycle-bound auto-routing, and reject ambiguous concurrent
202
+ calls instead of crossing sessions.
513
203
 
514
- ## [0.7.66] - 2026-07-10
204
+ ## [0.7.72-hotfix.0] - 2026-07-17
205
+
206
+ ### Fixed
207
+
208
+ - **Ark Coding image input routing.** The SDK now recognizes the five verified
209
+ Ark Coding routes (`doubao-seed-2.0-code`, `doubao-seed-2.0-pro`,
210
+ `kimi-k2.7-code`, `kimi-k2.6`, and `MiniMax-M3`) as image-capable instead of
211
+ raising `MODEL_INPUT_UNSUPPORTED` before provider dispatch. The change is
212
+ scoped to those exact provider/model pairs; other Ark models and all Ark
213
+ video input remain fail-closed. Capability, validation, final Anthropic
214
+ base64 serialization, and opt-in real-gateway regressions cover all five.
215
+
216
+ ## [0.7.71] - 2026-07-17
217
+
218
+ ### Added
219
+
220
+ - **Kimi Code K3 support.** The `kimi-code` subscription provider now exposes
221
+ `k3-256k` (Moderato) and `k3` (1,048,576 context tokens, Allegretto+) as
222
+ explicit catalog choices, alongside `kimi-for-coding-highspeed` and the
223
+ stable `kimi-for-coding` default. Both K3 choices send the upstream model id
224
+ `k3`, so users do not need to override compaction settings for their plan.
225
+ K3 sends its effort inside `thinking.effort` on both Anthropic- and
226
+ OpenAI-compatible transports, defaults omitted reasoning to `max`, and
227
+ preserves both legacy `reasoning=false` and explicit `effort=none` as disabled
228
+ thinking. Static capability, reasoning, media, cost-tracking, and opt-in
229
+ real-wire regressions cover the subscription routes and local context-tier
230
+ mapping.
231
+ - **Standards-based A2A authentication and Agent activation (FEATURE_267/268
232
+ closure).** Outbound A2A entries can use OAuth 2.0 Client Credentials with an
233
+ external Authorization Server, while inbound KodaX Agents can validate RFC
234
+ 9068 JWT access tokens against an external issuer/JWKS as an OAuth Resource
235
+ Server. The fixed environment Bearer profile remains available for
236
+ compatibility. A hot `agents.<name>.enabled` switch plus `kodax a2a
237
+ enable|disable` lets operators keep many configured third-party Agents while
238
+ controlling which ones admit new orchestration; in-flight tasks are not
239
+ cancelled.
240
+
241
+ ### Changed
242
+
243
+ - **External Agent SDK migration notes.** `AgentRegistrationService` now
244
+ requires `setEnabled`; custom implementations must add the same
245
+ revision/owner-conditional enablement operation. `executorConfig` and
246
+ executor-reference `metadata` are `AgentJsonObject` values and reject class
247
+ instances, accessors, circular references, and other non-JSON-safe data at
248
+ runtime. SDK daemon auto-start without an explicit `homeDir` now follows the
249
+ resolved `KODAX_HOME`; embedders that intentionally need the OS-home endpoint
250
+ must pass `homeDir`, while custom endpoints remain attach-only.
251
+
252
+ ### Fixed
253
+
254
+ - **A2A durable-owner upgrade and admission concurrency.** New inbound tasks
255
+ persist a non-secret principal-key scheme marker. Pre-realm tasks remain
256
+ inaccessible during normal serving, but stopped operators can use
257
+ `kodax a2a migrate-tasks` to dry-run and explicitly apply the configured
258
+ owner mapping; custom hosts can use the public
259
+ `migrateA2ALegacyTaskOwners()` SDK with exact mappings. Ambiguous or live-
260
+ store migration fails closed. Global task capacity now uses a synchronous
261
+ pending reservation, keeping slow workspace/session/run preparation outside
262
+ any global lock while preserving exact limits and per-principal ordering.
263
+ - **Bounded External Agent and daemon shutdown/startup.** Executor-plane close
264
+ now has a 30-second default upper bound (overrideable with `closeTimeoutMs`),
265
+ obsolete-executor cleanup runs outside the serialized registration mutation
266
+ lane, and revision tombstones are SHA-256 fingerprints capped at 4,096
267
+ entries. Current registrations and task snapshots continue to enforce exact
268
+ revision immutability after older, unreferenced tombstones age out. Daemon
269
+ auto-start now races health checks against the spawned child's exit, keeps
270
+ the child referenced until readiness, and terminates it on early exit,
271
+ timeout, identity mismatch, or when another daemon wins ownership. A startup
272
+ candidate that exits after losing the owner race now lets its SDK caller wait
273
+ for and attach to the competing owner instead of failing that caller.
274
+ - **Faster packaged-Electron gates.** Release jobs build once and reuse that
275
+ output for both the Windows Electron smoke and binary packaging. CI and
276
+ release jobs cache the version-pinned Electron smoke toolchain, whose local
277
+ directory is now explicitly ignored. Both paths explicitly materialize the
278
+ Electron binary after cache restore or dependency installation, preventing a
279
+ successful npm package install with a missing `electron/dist` from bypassing
280
+ the real packaged-daemon gate.
281
+ - **A2A authentication and reconciliation hardening.** Card-level and
282
+ Skill-level security requirements now fail closed unless one complete
283
+ alternative is satisfiable. Card, RPC, and token origins remain separate;
284
+ exact credentials used by active RPC/SSE requests remain retained through
285
+ response parsing and are redacted from errors and successful results;
286
+ concurrent rejected-token invalidation cannot discard a newer token and each
287
+ RPC retries at most once. Direct SDK and file configuration now share strict
288
+ issuer, endpoint, resource, and RFC 6749 scope validation. Task ownership
289
+ also requires a stable `securityRealm` and hashes the
290
+ `(realm, subject, tenant)` tuple: built-in Bearer/OAuth derive realms from the
291
+ token-env name/exact issuer, custom authentication must provide one, authority
292
+ switches and legacy pre-realm tasks fail closed, and same-realm restart
293
+ preserves new-format tasks. Authentication/effect changes participate in
294
+ executor revisions; registration persistence
295
+ precedes catalog mutation; first-class management ownership plus revision-
296
+ conditional mutations protects unrelated or concurrently replaced SDK
297
+ registrations, including same-revision owner takeovers; changed authority is
298
+ fenced before parallel discovery; live drift is repaired; and a final
299
+ post-preflight admission check closes disable/removal races without
300
+ rediscovering unchanged peers. Internal immutable route snapshots preserve
301
+ admitted task input/cancel/reconcile routing across registration update or
302
+ removal and Runtime restart without exposing secret material or expanding the
303
+ public task DTO. Admission now rechecks globally unique task IDs, task writes
304
+ publish to memory only after durable persistence, and terminal event-write
305
+ failures cannot strand waiters or route snapshots. Returned registration
306
+ summaries are detached, executor cache keys are unambiguous tuples, and one
307
+ ownership conflict or observer failure cannot abort unrelated Agent
308
+ reconciliation or leave unawaited activation work. Daemon A2A ownership is
309
+ now bound to the exact resolved config home—`<homeDir>/.kodax` when explicitly
310
+ selected, otherwise the possibly arbitrary `KODAX_HOME`—recorded in daemon
311
+ state, and checked across every local profile before mutation. Legacy
312
+ non-empty version-1 A2A files require an explicit stopped-owner migration,
313
+ while version-2 migration is a read-only idempotent no-op. Failed initial A2A
314
+ reconciliation also closes the newly created Runtime before releasing daemon
315
+ ownership.
316
+ - **A2A post-closure lifecycle and resource correctness.** Executor operations
317
+ and close now drain without disposal races; configured artifact references
318
+ and direct `a2a call` use a bounded reference-only/no-fetch policy. CLI task
319
+ RPC/SSE permits 32 MiB while Card/interface/OAuth/security metadata remains
320
+ capped at 2 MiB, and unsupported required Card extensions fail discovery.
321
+ Daemon mutation now requires independently owner-derived
322
+ `externalAgentAdmin: 1` and `a2aConfigReconciler: 1`; capability overrides
323
+ cannot forge them. Public `/a2a` config exports are read-only, with raw writers
324
+ retained inside the fenced CLI owner. Inbound serving now has a global
325
+ admission reservation, subscribe-first replay, authentication-before-body,
326
+ exact JSON/SSE media matching, an admitted-handler close barrier, and fixed
327
+ four-per-task/eight-per-server/24 MiB-per-stream SSE ceilings without
328
+ terminating the underlying task for one slow subscriber.
329
+ - **Public Kimi Open Platform parity and live coverage.** `kimi` now defaults to
330
+ `kimi-k2.7-code`, exposes the HighSpeed route and wire-legal K2.5 id, uses the
331
+ exact 262,144-token limits and current prices, and has gated real-key coverage
332
+ for credential verification, K2.7 thinking, forced-tool fallback, and K2.6
333
+ thinking disablement. K2.7 disable requests now fail locally instead of being
334
+ silently ignored, while K2.6 disable requests emit the required wire toggle.
335
+
336
+ - **Packaged Electron shared-daemon auto-start.** Runtime SDK embedders running
337
+ from packaged/asar Electron applications now launch the detached daemon child
338
+ through a bootstrap-only Node execution boundary without changing the host or
339
+ long-lived daemon environment, leaking `ELECTRON_RUN_AS_NODE` to user child
340
+ processes, or opening a second GUI instance. Trusted internal JavaScript
341
+ children retain a bounded Electron-to-Node launch path. Missing packaged CLI
342
+ sidecars fail immediately, disabled `RunAsNode` fuses receive an actionable
343
+ timeout diagnostic, and a real Windows Electron 42.5.0 + asar smoke now gates
344
+ CI and releases. Public docs also distinguish CLI-style `homeDir` from the
345
+ lower-level `.kodax` path used by `KODAX_HOME`.
346
+ - **Cross-platform release template checks.** Generated configuration templates
347
+ now compare normalized line endings, so Windows CRLF checkouts no longer report
348
+ false drift during binary builds.
349
+
350
+ ## [0.7.70] - 2026-07-15
351
+
352
+ ### Added
353
+
354
+ - **Typed shared-daemon rollback management (FEATURE_269 patch).** Daemon
355
+ facades now expose revisioned management inspection and atomic
356
+ `stopForInline()`, plus public owner-fence queries and revision-free daemon
357
+ re-enable helpers for safe embedder rollback workflows.
358
+
359
+ ### Changed
360
+
361
+ - **KAI-FCL licensing from v0.7.70.** Official KodaX source, binaries, and npm
362
+ packages now use the KodaX-AI Fair Core License 1.0: community use remains
363
+ available, while commercial or managed use requires KodaX-AI authorization.
364
+ Previously released Apache-2.0 copies retain their original grants.
365
+
366
+ ### Fixed
367
+
368
+ - **A2A interoperability and execution boundaries.** Selected Card interfaces
369
+ remain bound to their trusted discovery origin and advertised Bearer scheme;
370
+ concrete recursive reads and child runs retain the parent policy ceiling;
371
+ pending input resumes the original Runtime run; task retention, history,
372
+ cleanup, stable cursor pagination, protocol correlation/version, authenticated
373
+ SSE, appended artifact chunks, and early-stream-EOF semantics are bounded;
374
+ and direct, staged, or successfully promoted admitted Skill outputs are
375
+ returned as negotiated artifacts without exposing ordinary workspace writes.
376
+ - **MCP multilingual zero-match efficiency.** Compact CJK queries now segment
377
+ into words, while cross-language lexical zero matches can return a lossless
378
+ shared-prefix exact-id inventory only when it is no more expensive than a
379
+ normal default search page and fits the real result capacity. Oversized
380
+ recovery emits one concise catalog-language retry with no biased partial list.
381
+ Fully unavailable catalogs no longer trigger a duplicate inventory attempt;
382
+ concurrent discovery is coalesced, in-flight invalidation cannot be overwritten,
383
+ and filtered cursor revisions ignore unrelated capability families.
384
+ - **Logical daemon client accounting.** Stop preflight now counts only live,
385
+ initialized SDK clients. Daemon self-connections and read-only health probes
386
+ are excluded, and awaited client close converges the count across processes.
387
+ Health probes also tolerate the daemon token disappearing during a concurrent
388
+ shutdown or owner transition instead of leaking an `ENOENT` race to clients.
389
+ - **Preflight/stop race.** Rollback commit gates new clients and mutations,
390
+ validates the same Runtime, management revision, owner-policy revision, and
391
+ blockers, and changes sticky inline policy while the verified daemon still
392
+ owns the profile fence. Stale commits fail with structured `conflict` and do
393
+ not stop or change policy.
394
+ - **Complete rollback draining and background-work blockers.** Credential and
395
+ Host Tool bridge state can no longer change after draining starts, while
396
+ running/paused Workflows and non-terminal or unknown External Agent tasks now
397
+ block stop and participate in the management revision. Reverse-result frames
398
+ remain outside the durable journal so credentials and Host Tool results are
399
+ not persisted. In-flight stop conflicts identify the active mutation methods
400
+ and counts so lifecycle stalls can be diagnosed without reproducing them.
401
+
402
+ ## [0.7.69] - 2026-07-15
403
+
404
+ > Scope note: this release delivers **FEATURE_267**, **FEATURE_268**, and
405
+ > **FEATURE_269** as one bounded interoperability/runtime release: bidirectional
406
+ > A2A 1.0, split hot-reloadable integration configuration, and one authoritative
407
+ > shared Coder daemon with secure host bridges. It does not expose the daemon
408
+ > remotely, migrate Partner from its private embedded Runtime, or publish
409
+ > credentials/Host Tools outside their bound run.
410
+
411
+ ### Added
412
+
413
+ - **Bidirectional A2A 1.0 interoperability (FEATURE_267).** Added the
414
+ `@kodax-ai/kodax/a2a` integration edge: allowlisted Agent Card discovery and
415
+ a JSON-RPC/SSE executor over the existing F258 plane, plus an authenticated,
416
+ caller-scoped, durable Runtime-backed KodaX Agent server with continuation,
417
+ cancellation, ordered replay/subscription, and restart reattachment.
418
+ - **No-code A2A product path and Runtime binding.** Added declarative
419
+ `a2a add/list/test/call/remove`, automatic `external:<name>` registration for
420
+ built-in Runtime owners, and explicit `a2a expose` / loopback-only `a2a
421
+ serve`. The inbound server can publish the Runtime default or one validated
422
+ user Markdown Agent with pinned Agent/Skill/tool/workspace revisions,
423
+ structured `toolPolicy`, `~/.agents/skills` discovery, and exact Skill-script
424
+ execution through the fail-closed ASRT adapter.
425
+ - **Split integration configuration and hot reload (FEATURE_268).** MCP, A2A,
426
+ and Extensions now use one user-level versioned file per domain, backed by
427
+ four canonical templates, explicit lossless migration, locked atomic writes,
428
+ last-known-good watchers with metadata fallback, whole-provider MCP draining,
429
+ entry-transactional Extension/outbound-A2A reconciliation, and explicit
430
+ restart-required handling for inbound execution/store authority changes.
431
+ - **A2A network and publication boundaries.** Outbound fetches enforce origin,
432
+ DNS/private-address, TLS, redirect, credential, timeout, content-type, and
433
+ size policy. The built-in server listener is loopback-only; public hosts use
434
+ `handle()` behind TLS. A2A 0.3, gRPC, HTTP+JSON, push notifications, automatic
435
+ public Agent exposure, and remote Runtime configuration are not advertised.
436
+ - **Authoritative shared Coder daemon (FEATURE_269).** Added atomic
437
+ `sessions.observe()` join/resync, durable operation identities and receipts,
438
+ stable same-session ordering, settings/grant CAS, transport-safe AskUser and
439
+ permission resolution, live run projection, structured restart outcomes, and
440
+ a truthful per-capability Coder compatibility matrix for CLI, Space, IDE, and
441
+ SDK clients.
442
+ - **Shared-daemon SDK completion.** Server-side Coder/Partner admission now
443
+ covers every session and run path; late-join snapshots include transcript
444
+ revision, managed tasks, queued continuation metadata, and reverse
445
+ requirements. The SDK adds prompt connection lifecycle signals, typed event
446
+ parsing with per-event degradation, daemon-safe run DTOs,
447
+ `agentMode`/`autoModeEngine` settings CAS, durable operation/Host Tool outcome
448
+ queries, and daemon stop/rollback preflight.
449
+ - **Secure host bridges and owner fencing.** Provider credentials are supplied
450
+ just in time through stable-client/run/provider-bound leases and never
451
+ persisted. A keychain-held stable client secret can reattach credential and
452
+ Host Tool handlers after Space reconnects; Host Tools remain immutable and
453
+ run-bound, with fsynced dispatch truth and explicit unknown outcomes rather
454
+ than blind replay. Daemon and inline Coder ownership share one revisioned
455
+ fence with sticky rollback, while Partner remains isolated.
456
+
457
+ ### Changed
458
+
459
+ - **Tool-result delivery now optimizes end-to-end context use.** Tool handlers
460
+ collect complete results and one aggregate next-request capacity owner keeps
461
+ every result inline when the batch fits. Default Bash processing no longer
462
+ applies command-specific lossy filters; its former 512 KiB capture limit is
463
+ now only a memory-to-disk spool threshold. Capacity is solved against the
464
+ final input (`Pmax`), so the 3% uncertainty margin grows with the admitted
465
+ batch instead of being frozen at the smaller pre-batch request.
466
+ - **History compaction is physical-capacity driven.** Default automatic
467
+ compaction waits until the final provider envelope (system prompt, actual
468
+ tools, messages/framing, output reserve, and safety margin) cannot fit.
469
+ Default microcompaction and destructive pre-summary/fallback pruning are off;
470
+ pressure uses semantic summary first and stops as soon as the next request
471
+ fits. Static early percentages remain explicit opt-ins, and manual
472
+ `/compact` remains an explicit force operation.
473
+ - **Self-knowledge follows the v0.7.69 capability surface.** `kodax_manual`
474
+ now documents the three split integration files and migration/hot-reload
475
+ behavior, the `/a2a` SDK subpath, atomic shared-daemon observation, durable
476
+ controls, run-scoped credentials/Host Tools, and daemon/inline ownership.
477
+
478
+ ### Fixed
479
+
480
+ - **Recoverable overflow and hidden output caps.** Overflow of the final
481
+ operational request budget saves the complete result and emits one explicit
482
+ incomplete marker. Long lines have exact continuation offsets, completed task
483
+ output is complete, and hidden caps were removed from grep, glob, code search,
484
+ and retrieval rendering.
485
+ - **Cache token accounting and history preservation.** Cache tokens are charged
486
+ once. Empty, failed, or insufficient summaries now surface a typed capacity
487
+ error while retaining the canonical transcript and immutable Worker prompt.
488
+ - **Tool-result completeness and retention edge cases.** No-usage accounting
489
+ includes the final system prompt, active schemas, and same-request recovery;
490
+ explicit limits use one-extra-item probes; delayed Bash drain remains
491
+ recoverable. Referenced result/image artifacts and fresh checkpoints are no
492
+ longer removed by age-only cleanup.
493
+ - **Post-review capacity correctness.** Trusted artifact metadata cannot be
494
+ forged by raw tool text; failures carry the last legal transcript; observers
495
+ see admitted content; child evidence uses the routed model's physical budget;
496
+ bounded acquisition exposes continuation instead of silent loss; direct Bash
497
+ artifacts remain canonical without nested spill markers.
498
+ - **Windows process-tree fallback.** A failed or timed-out `taskkill /t` now
499
+ triggers a native Toolhelp parent snapshot before direct escalation, with
500
+ CIM/WMIC retained only as fallback. Agent and LLM cleanup stay aligned and a
501
+ real nested-process regression proves descendants exit.
502
+ - **Windows lock deletion races.** Proposal and lifecycle lock probes treat
503
+ transient `EPERM`/`EACCES`/`EBUSY` as non-stale and retry, preserving the
504
+ fail-closed owner-token contract during concurrent removal.
505
+ - **Frozen FEATURE_259 eval inputs.** The pre-iteration dispatch schema is
506
+ reconstructed from its historical bytes, so later production tool-schema
507
+ improvements cannot mutate the baseline or invite a hash-only CI workaround.
508
+ - **Governed-memory Bash guard bypasses.** Commands that directly address
509
+ recognized scoped or legacy memory roots now permit only one simple read-only
510
+ inspection; command chaining, pipelines, redirects, home-relative paths, and
511
+ interpreter writes fail closed at the Bash tool boundary.
512
+ - **Memory proposal and review persistence integrity.** Invalid approval
513
+ metadata now produces a store warning and blocks rewrites; project-less review
514
+ drains no longer claim project-owned work; persisted outcome evidence receives
515
+ full shape validation; atomic writes clean temporary files on failure.
516
+ - **Memory store lock ownership.** Proposal and lifecycle locks now carry a PID
517
+ plus random owner token, avoid reclaiming stale locks held by a live process,
518
+ and remove a lock only when the releasing owner token still matches. Lifecycle
519
+ state writes now use temporary-file rename instead of direct truncating writes.
520
+ - **Interactive resume handoff and large-store startup.** Bare `kodax -r` now
521
+ keeps the selected session through the picker-to-TUI handoff instead of
522
+ exiting, and the picker uses bounded metadata paging instead of repeatedly
523
+ full-reading every matching session before it opens.
524
+ - **A2A/configuration release hardening.** Review gaps in remote execution,
525
+ Skill-script admission/isolation, hot reload, listener preparation, binding
526
+ pinning, last-known-good reconciliation, and redacted diagnostics now fail
527
+ closed or retain the prior healthy revision as specified. The public A2A
528
+ server type now exposes its existing readiness wait, validated DNS results
529
+ narrow explicitly to IPv4/IPv6, and safe request-body typing no longer
530
+ depends on an undeclared DOM global, keeping root TypeScript validation green.
531
+
532
+ ## [0.7.68] - 2026-07-12
533
+
534
+ > Scope note: this release delivers **FEATURE_260**, the KodaX Memory Agent,
535
+ > as a thin experimental SDK and governed runtime extension over the existing
536
+ > F228 Memory Control Plane. It does not add a second memory database, a
537
+ > resident specialist agent, filesystem memory actions, or online self-modification.
538
+
539
+ ### Added
540
+
541
+ - **Thin experimental Memory Agent SDK.** Added
542
+ `@kodax-ai/agent/experimental-memory` and the root `/experimental-memory`
543
+ entry with scoped `MemorySession` lifecycle, zero-wait passive recall,
544
+ read-only deliberate `query()`, bounded observations, and episode outcomes.
545
+ - **Deliberate governed recall for the Action LLM.** A session-bound
546
+ `memory_recall` tool exposes only one `need` field, returns prompt-safe
547
+ low-authority evidence from the same F228 plane, and keeps identity, scope,
548
+ revision, and sequence outside model input.
549
+ - **Auditable memory decisions and outcomes.** Trace-only
550
+ `MemoryDecisionReceipt` records candidate/selected/injected refs and policy
551
+ version; accepted Outcome Digests can conservatively link influence without
552
+ storing hidden reasoning or creating a second event store.
553
+ - **Bounded episode review and promotion.** Timed-out review work persists in a
554
+ scoped inbox for bounded next-session drain and revalidation. Promotion now
555
+ consults compatible claims before choosing create, evidence update,
556
+ condition refinement, conflict, no-action, reject, or quarantine.
557
+
558
+ ### Changed
559
+
560
+ - **Memory applicability is exact and fail-closed.** Tenant, user, agent,
561
+ workspace, project, and branch identity participate in deterministic scope
562
+ checks; sibling/cross-user/cross-tenant fallback is prohibited.
563
+ - **Memory policy is source-versioned and cache-safe.** `f260-v0.7.68.2`
564
+ binds production reminder rules, evidence rendering, and deliberate-recall
565
+ tool bytes. Passive reminders only affect the dynamic suffix; deliberate
566
+ queries add a normal tool-call/result tail while preserving earlier provider
567
+ cache bytes.
568
+ - **Safety-critical boundaries remain deterministic.** Secret filtering,
569
+ memory-file mutation guards, poisoning/source-evidence checks, and governed
570
+ proposal/preview/fingerprint/apply remain zero-violation code gates rather
571
+ than probabilistic LLM recall thresholds.
572
+ - **Self-knowledge follows the v0.7.68 capability surface.** `kodax_manual`
573
+ now has a dedicated governed-memory topic, names all 43 built-in slash
574
+ commands under a two-way drift guard, and documents the current 10 SDK
575
+ subpaths plus Runtime and `/experimental-memory` ownership boundaries.
576
+
577
+ ### Fixed
578
+
579
+ - **Post-review Memory Agent release hardening.** Repository identity now strips
580
+ Git remote userinfo/query credentials before scoped or legacy persistence;
581
+ managed-path guards are Windows-case-safe, protect governance sidecars, and
582
+ fail closed for non-read-only shell access to addressed memory roots. Episode
583
+ reviews use atomic processing claims with stale recovery, while proposal and
584
+ lifecycle stores serialize concurrent read-modify-write updates. Eval manifest
585
+ schema v2 binds untracked file bytes in addition to the tracked patch, corrupt
586
+ raw JSON fails loudly, and summary review state points to the separate
587
+ main-session review artifact instead of remaining permanently pending.
588
+ - **Runtime daemon state replacement is atomic.** Daemon lifecycle updates now
589
+ stage and rename `daemon.json` instead of truncating it in place, preventing
590
+ shutdown polling from mistaking a partial write for completed cleanup and
591
+ leaving an orphaned `stopping` process under full-suite load.
592
+
593
+ ### Performance
594
+
595
+ - **The preregistered v2 memory-routing panel passes all release gates.** On
596
+ `ark/v4flash`, general immediate recall passed 59/60 (98.3%), high-value
597
+ recall 40/40, must-silent 200/200 (Wilson lower 98.1%), paired routing lift
598
+ was +73.3 percentage points with zero control regression, and bounded
599
+ two-decision recovery passed 20/20. The 520-cell panel represented 782,721
600
+ tokens and an estimated $0.004447 against the $0.02 cap. Main-session blinded
601
+ review recommends ship for routing value while documenting that the panel is
602
+ not an end-to-end task-completion claim.
603
+
604
+ ## [0.7.67] - 2026-07-11
605
+
606
+ > Scope note: a stabilization and agent-efficiency release. **FEATURE_258**
607
+ > adds the protocol-neutral external-agent executor plane, **FEATURE_259**
608
+ > makes workflow/review orchestration more focused and cost-disciplined, and
609
+ > the bounded corrective **FEATURE_261** delivers searchable session resume
610
+ > plus safe ACP-session cleanup. GitHub source/binary release work is included;
611
+ > npm publication remains a separate operator step.
612
+
613
+ ### Added
614
+
615
+ - **External Agent Executor Plane and dispatchable catalog.** Host-injected
616
+ executors now share a protocol-neutral registration/catalog/task contract,
617
+ redacted policy-filtered discovery, durable task ledger, recovery, and a
618
+ reference executor. Worker tools, Workflow, Embedded Runtime, and daemon
619
+ clients discover and dispatch the same canonical agent IDs.
620
+ - **External-agent SDK and daemon surfaces.** Runtime sessions expose catalog,
621
+ start/continue/cancel/reconcile, event, and task-result operations with
622
+ versioned schemas, configuration revisions, credential-presence checks, and
623
+ public in-process daemon-factory bootstrap support.
624
+ - **Focused scoped-review workflow.** `/review --workflow` now uses immutable
625
+ review packets, one primary per scope, an additional authoritative primary
626
+ only for risk-flagged packets, batched fresh verification for candidate
627
+ findings, stable finding IDs, capable synthesis, and an audit artifact.
628
+ - **Explicit model-tier intent and route telemetry.** Workflow and substantive
629
+ child briefs carry focused scope/constraints/evidence/output fields plus
630
+ explicit `fast` / `balanced` / `deep` intent. Runtime reports the resolved
631
+ source, fallback, effort, usage, duration, packet-read topology, and token
632
+ coverage without fabricating missing external usage.
633
+ - **Searchable session resume picker.** Running `kodax -r` without an ID now
634
+ opens an interactive TUI with incremental search, keyboard selection, title
635
+ completion, pagination, and the full selected session ID. An explicit value
636
+ resolves a complete ID first, then a unique exact title; duplicate titles
637
+ open a narrowed picker rather than silently selecting one.
638
+ - **Session listing filters and cursors.** SessionManager, Runtime SDK, and
639
+ daemon protocol listings now accept an exact `surface` filter and an opaque
640
+ continuation `cursor`, applied before the requested page limit.
641
+
642
+ ### Changed
643
+
644
+ - **Resident workflow context is smaller and discoverable.** The turn-resident
645
+ `run_workflow` hint stays below the deferred-tool budget while the full
646
+ authoring contract remains available through `tool_search`. Recorded
647
+ workflow-shaped plans start directly instead of being expanded into duplicate
648
+ todo/dispatch scaffolding.
649
+ - **Review handoffs are structured and conservative.** Positive observations
650
+ are not findings; missing evidence remains `not-verifiable` rather than being
651
+ promoted into a defect; unreasoned severity overrides retain the original
652
+ severity instead of failing the review.
653
+ - **Eval execution is value-driven and bounded.** Main-session evidence review
654
+ determines whether a candidate has material value over baseline; executor
655
+ aliases are not reused as judge models. Raw reuse, per-call/round/token/cost
656
+ caps, one bounded structured repair, and provider/model concurrency lanes
657
+ prevent runaway panels.
658
+ - **SDK embedder documentation matches the v0.7.67 public surface.** The guide
659
+ now covers external-agent owner/consumer setup and safety boundaries, Runtime
660
+ registration/catalog/task services, exact-surface session pagination,
661
+ run-scoped workflow tiers, live route facts, and durable efficiency reports;
662
+ the English/Chinese subpath tables reflect all 10 published SDK entries.
663
+
664
+ ### Fixed
665
+
666
+ - **Restricted Workflow scripts preserve the public Agent routing contract.**
667
+ `phase` and FEATURE_258 `target` values now cross the script host boundary
668
+ with fail-loud validation, so generated/saved workflows can route the same
669
+ canonical external Agent IDs as direct Workflow and Worker dispatch.
670
+ - **Executor-plane shutdown is terminal and waiter-safe.** Closing the plane is
671
+ idempotent, rejects pending task waits, and prevents later registration,
672
+ catalog, or task operations from recreating executors after owner shutdown.
673
+ - **Review/eval trust boundaries fail loudly without replacing real results.**
674
+ Built-in scoped-review outputs are validated against their declared schemas;
675
+ local ledger mirror failures retain the authoritative child result/error;
676
+ Feature 259 baseline reconstruction now requires every exact rewrite and no
677
+ longer leaks candidate-only briefing fields into the baseline.
678
+ - **Runtime tests no longer leave detached Node processes behind.** The config
679
+ suite explicitly shuts down its auto-started daemon owner before deleting
680
+ temporary state, and long-running process fixtures self-exit if an abnormal
681
+ test-runner termination prevents normal managed cleanup.
682
+ - **External tasks keep identity and terminal state across failures.** A remote
683
+ start followed by ledger failure preserves its executor reference as
684
+ `unknown`; in-flight tasks retain immutable executor bindings across catalog
685
+ updates; task-level mutation queues prevent late callbacks from overwriting a
686
+ terminal snapshot; Workflow external waits honor `timeoutMs`.
687
+ - **External task safety and policy boundaries fail closed.** Executor
688
+ availability, health, capability, concurrency, credential presence,
689
+ configuration revision, target side effects, and read-only intent are checked
690
+ before start without exposing secret values.
691
+ - **ACP tests no longer pollute real user sessions.** ACP harnesses now use an
692
+ isolated temporary runtime home and session store, with a guard that rejects
693
+ paths under the real user home. ACP sessions remain provisional until the
694
+ first valid prompt instead of persisting an empty `ACP Session` during
695
+ protocol setup.
696
+ - **Empty ACP pollution can be audited and recovered safely.**
697
+ `kodax -s cleanup-acp` previews only strict empty ACP matches; explicit
698
+ `--apply-session-cleanup` archives them reversibly instead of deleting data.
699
+
700
+ ### Performance
701
+
702
+ - **Feature 259 controlled comparison validates the review optimization.** The
703
+ proposed topology passed 8/8 Layer-3 oracle cells versus 6/8 baseline, reduced
704
+ total model tokens 16.9% and output tokens 49.1%, and on standard reviews
705
+ reduced median tokens 57.2%, primary starts 75%, and duplicate packet reads
706
+ 83.3%. High-risk multi-area reviews intentionally spend more calls for fresh
707
+ verification and explicit packet coverage.
708
+
709
+ ## [0.7.66] - 2026-07-10
515
710
 
516
711
  > Scope note: the runtime migration was developed across the v0.7.64-v0.7.66
517
712
  > planning slots and is released as one v0.7.66 cut; v0.7.64 and v0.7.65 were
@@ -721,11 +916,11 @@ All notable changes to this project will be documented in this file.
721
916
  stale wide-char or skipped-cell residue cannot remain after user-driven
722
917
  transcript scrolling.
723
918
 
724
- ## [0.7.61] - 2026-07-06
725
-
726
- > Historical release record: the command-aware lossy-filter behavior below is
727
- > what v0.7.61 shipped, not the current default. The 2026-07-14 correction is
728
- > recorded under Unreleased, ADR-050, and the FEATURE_251 design/test guide.
919
+ ## [0.7.61] - 2026-07-06
920
+
921
+ > Historical release record: the command-aware lossy-filter behavior below is
922
+ > what v0.7.61 shipped, not the current default. The 2026-07-14 correction is
923
+ > recorded under Unreleased, ADR-050, and the FEATURE_251 design/test guide.
729
924
 
730
925
  > Scope note: a token-efficiency + workflow-reliability release. **FEATURE_251** adds command-aware
731
926
  > in-tool output compression (an rtk-style Token Killer port) inside KodaX's own `bash` tool layer,
@@ -739,7 +934,7 @@ All notable changes to this project will be documented in this file.
739
934
 
740
935
  ### Added
741
936
 
742
- - **Historical implementation — tool-output semantic compression / command-aware in-tool Token Killer (FEATURE_251, ADR-050).** A new `packages/coding/src/tools/output-filters/` module compressed bash `stdout`/`stderr` **body** after decode, before the `Command:` / `Exit:` header was assembled, at the single `bash.ts` close-handler integration point (so both the SA and AMA dispatch paths were covered by one change). It shipped a lossless generic layer (ANSI strip), compiled stateful filters (`git-diff`, `git-log`, `git-status`, `test-runner` failure-focus, `lint` diagnostic grouping, `json-output` / NDJSON structural summary), and a built-in declarative long-tail table (package-manager / docker / infra CLI progress). Hard constraints at release time: the `Command:` / `Exit:` header was preserved verbatim (FEATURE_185 hits-ledger depends on it); the generic layer was lossless-by-construction with `never_worse` as a size-only backstop; and every lossy filter persisted raw decoded body before appending a recovery hint. Isolated Layer-1 fixtures measured shorter bodies, but did not measure recovery reads, extra inference rounds, or task-level evidence quality; they are historical measurements, not current release gates or end-to-end benefit claims. Current default behavior is the correction described above. Human test guide: `docs/test-guides/FEATURE_251_v0.7.61_TEST_GUIDE.md`.
937
+ - **Historical implementation — tool-output semantic compression / command-aware in-tool Token Killer (FEATURE_251, ADR-050).** A new `packages/coding/src/tools/output-filters/` module compressed bash `stdout`/`stderr` **body** after decode, before the `Command:` / `Exit:` header was assembled, at the single `bash.ts` close-handler integration point (so both the SA and AMA dispatch paths were covered by one change). It shipped a lossless generic layer (ANSI strip), compiled stateful filters (`git-diff`, `git-log`, `git-status`, `test-runner` failure-focus, `lint` diagnostic grouping, `json-output` / NDJSON structural summary), and a built-in declarative long-tail table (package-manager / docker / infra CLI progress). Hard constraints at release time: the `Command:` / `Exit:` header was preserved verbatim (FEATURE_185 hits-ledger depends on it); the generic layer was lossless-by-construction with `never_worse` as a size-only backstop; and every lossy filter persisted raw decoded body before appending a recovery hint. Isolated Layer-1 fixtures measured shorter bodies, but did not measure recovery reads, extra inference rounds, or task-level evidence quality; they are historical measurements, not current release gates or end-to-end benefit claims. Current default behavior is the correction described above. Human test guide: `docs/test-guides/FEATURE_251_v0.7.61_TEST_GUIDE.md`.
743
938
  - **Deterministic workflow-quality preflight lint (FEATURE_252).** A new `packages/agent/src/workflow/quality-lint.ts` (`lintRestrictedWorkflowSource` / `assertRestrictedWorkflowQuality`, exported from the workflow package) runs inside restricted workflow module materialization (`script-runner.ts` `createRestrictedWorkflowModule`) and in the coding workflow host with host-policy `maxAgents`, so structural contract violations fail before a run can start — matching the existing inline-smoke hard-fail feedback loop. It hard-fails three deterministic contract classes only: (1) an unawaited workflow-command variable (`wf.runAgent` / `wf.spawnAgent` / `wf.wait` / `wf.synthesize` / `wf.workflow` / `wf.artifact`) used in a boolean position (`if (x)`, `!x`, ternary test, `x && …`, `x || …`, loop test) — a case a runtime Proxy cannot catch because object truthiness has no Proxy trap; (2) top-level structured-output field access (`result.findings`, `result.summary`, …) when the fields belong under `result.structured`; and (3) a literal `[...]`/`[...].map(...)` agent fanout whose static upper bound exceeds `manifest.maxAgents` or a known host cap. Review/verifier/generic quality heuristics are intentionally **not** emitted as model-visible warnings (a lightweight AST pass cannot distinguish a weak workflow from a valid optimized one, and surfacing them causes needless rewrite churn). Human test guide: `docs/test-guides/FEATURE_252_v0.7.61_TEST_GUIDE.md`.
744
939
 
745
940
  ### Changed
@@ -2626,7 +2821,7 @@ repl → coding, skills
2626
2821
  ### Tests
2627
2822
  - Added / expanded tests for `task-engine`, `reasoning`, `tool-display`, `live-streaming`, `StatusBar`, `invocation-runtime`, `types-legacy`, and `InkREPL.interrupted`
2628
2823
 
2629
- <!-- last-sync: a8c9c283 -->
2824
+ <!-- last-sync: a8c9c283 -->
2630
2825
 
2631
2826
  ### Added
2632
2827
  - **Repository intelligence substrate (FEATURE_018)**: Task-aware repository intelligence layer under `.agent/repo-intelligence/` with durable artifacts — `repo-overview.json`, `changed-scope.json`, `module-index.json`, `symbol-index.json`, `process-index.json`, `repo-intelligence-manifest.json` — supporting incremental refresh, freshness metadata, and language-tiered extraction (TS/JS via AST, Python, Go, Rust, Java, C++)