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

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