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