@namzu/sdk 49.0.0 → 50.1.0

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 (742) hide show
  1. package/CHANGELOG.md +541 -0
  2. package/README.md +137 -125
  3. package/dist/agents/QueryAgent.d.ts.map +1 -1
  4. package/dist/agents/QueryAgent.js +1 -0
  5. package/dist/agents/QueryAgent.js.map +1 -1
  6. package/dist/agents/examples/SupervisorAgent.d.ts.map +1 -1
  7. package/dist/agents/examples/SupervisorAgent.js +1 -0
  8. package/dist/agents/examples/SupervisorAgent.js.map +1 -1
  9. package/dist/agents/runAgent.d.ts +2 -0
  10. package/dist/agents/runAgent.d.ts.map +1 -1
  11. package/dist/agents/runAgent.js +1 -0
  12. package/dist/agents/runAgent.js.map +1 -1
  13. package/dist/authorization/shell-lexer.d.ts.map +1 -1
  14. package/dist/authorization/shell-lexer.js +16 -1
  15. package/dist/authorization/shell-lexer.js.map +1 -1
  16. package/dist/bridge/acp/permission.d.ts +8 -2
  17. package/dist/bridge/acp/permission.d.ts.map +1 -1
  18. package/dist/bridge/acp/permission.js +1 -0
  19. package/dist/bridge/acp/permission.js.map +1 -1
  20. package/dist/bridge/acp/server.d.ts +25 -1
  21. package/dist/bridge/acp/server.d.ts.map +1 -1
  22. package/dist/bridge/acp/server.js +205 -21
  23. package/dist/bridge/acp/server.js.map +1 -1
  24. package/dist/bridge/acp/tasks.d.ts +5 -0
  25. package/dist/bridge/acp/tasks.d.ts.map +1 -0
  26. package/dist/bridge/acp/tasks.js +19 -0
  27. package/dist/bridge/acp/tasks.js.map +1 -0
  28. package/dist/bridge/acp/update.d.ts.map +1 -1
  29. package/dist/bridge/acp/update.js +148 -13
  30. package/dist/bridge/acp/update.js.map +1 -1
  31. package/dist/config/runtime.d.ts +31 -31
  32. package/dist/connector/mcp/adapter.d.ts.map +1 -1
  33. package/dist/connector/mcp/adapter.js +11 -4
  34. package/dist/connector/mcp/adapter.js.map +1 -1
  35. package/dist/connector/mcp/client.d.ts.map +1 -1
  36. package/dist/connector/mcp/client.js +6 -3
  37. package/dist/connector/mcp/client.js.map +1 -1
  38. package/dist/constants/acp/index.d.ts +3 -0
  39. package/dist/constants/acp/index.d.ts.map +1 -1
  40. package/dist/constants/acp/index.js +3 -0
  41. package/dist/constants/acp/index.js.map +1 -1
  42. package/dist/contracts/a2a.d.ts +80 -80
  43. package/dist/contracts/schemas.d.ts +2 -2
  44. package/dist/contracts/session/schemas.d.ts +10 -10
  45. package/dist/manager/agent/lifecycle.d.ts +11 -0
  46. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  47. package/dist/manager/agent/lifecycle.js +178 -3
  48. package/dist/manager/agent/lifecycle.js.map +1 -1
  49. package/dist/manager/plan/lifecycle.d.ts +7 -8
  50. package/dist/manager/plan/lifecycle.d.ts.map +1 -1
  51. package/dist/manager/plan/lifecycle.js +7 -8
  52. package/dist/manager/plan/lifecycle.js.map +1 -1
  53. package/dist/manager/resident/consumption.d.ts +8 -8
  54. package/dist/manager/resident/learning-cycle.d.ts +2 -2
  55. package/dist/manager/resident/learning-observation.d.ts +12 -12
  56. package/dist/manager/resident/learning.d.ts +82 -82
  57. package/dist/manager/resident/outbox.d.ts +8 -8
  58. package/dist/manager/resident/proposal.d.ts +2 -2
  59. package/dist/manager/resident/store.d.ts +10 -10
  60. package/dist/manager/session/attribution.d.ts +1 -0
  61. package/dist/manager/session/attribution.d.ts.map +1 -1
  62. package/dist/manager/session/attribution.js +9 -1
  63. package/dist/manager/session/attribution.js.map +1 -1
  64. package/dist/manager/session/streamed-message-identity.d.ts +6 -0
  65. package/dist/manager/session/streamed-message-identity.d.ts.map +1 -0
  66. package/dist/manager/session/streamed-message-identity.js +14 -0
  67. package/dist/manager/session/streamed-message-identity.js.map +1 -0
  68. package/dist/manager/session/turn-recorder.d.ts.map +1 -1
  69. package/dist/manager/session/turn-recorder.js +4 -3
  70. package/dist/manager/session/turn-recorder.js.map +1 -1
  71. package/dist/pals/activity/causality.d.ts +23 -0
  72. package/dist/pals/activity/causality.d.ts.map +1 -0
  73. package/dist/pals/activity/causality.js +205 -0
  74. package/dist/pals/activity/causality.js.map +1 -0
  75. package/dist/pals/activity/projection.d.ts +5 -0
  76. package/dist/pals/activity/projection.d.ts.map +1 -0
  77. package/dist/pals/activity/projection.js +79 -0
  78. package/dist/pals/activity/projection.js.map +1 -0
  79. package/dist/pals/activity/source.d.ts +16 -0
  80. package/dist/pals/activity/source.d.ts.map +1 -0
  81. package/dist/pals/activity/source.js +235 -0
  82. package/dist/pals/activity/source.js.map +1 -0
  83. package/dist/pals/activity/subscription-policy.d.ts +38 -0
  84. package/dist/pals/activity/subscription-policy.d.ts.map +1 -0
  85. package/dist/pals/activity/subscription-policy.js +183 -0
  86. package/dist/pals/activity/subscription-policy.js.map +1 -0
  87. package/dist/pals/activity/subscription-schema.d.ts +353 -0
  88. package/dist/pals/activity/subscription-schema.d.ts.map +1 -0
  89. package/dist/pals/activity/subscription-schema.js +24 -0
  90. package/dist/pals/activity/subscription-schema.js.map +1 -0
  91. package/dist/pals/activity/subscription-store.d.ts +25 -0
  92. package/dist/pals/activity/subscription-store.d.ts.map +1 -0
  93. package/dist/pals/activity/subscription-store.js +152 -0
  94. package/dist/pals/activity/subscription-store.js.map +1 -0
  95. package/dist/pals/activity/subscription-types.d.ts +42 -0
  96. package/dist/pals/activity/subscription-types.d.ts.map +1 -0
  97. package/dist/pals/activity/subscription-types.js +2 -0
  98. package/dist/pals/activity/subscription-types.js.map +1 -0
  99. package/dist/pals/activity/subscriptions.d.ts +32 -0
  100. package/dist/pals/activity/subscriptions.d.ts.map +1 -0
  101. package/dist/pals/activity/subscriptions.js +151 -0
  102. package/dist/pals/activity/subscriptions.js.map +1 -0
  103. package/dist/pals/activity/types.d.ts +77 -0
  104. package/dist/pals/activity/types.d.ts.map +1 -0
  105. package/dist/pals/activity/types.js +2 -0
  106. package/dist/pals/activity/types.js.map +1 -0
  107. package/dist/pals/channels/ingress.d.ts +9 -0
  108. package/dist/pals/channels/ingress.d.ts.map +1 -0
  109. package/dist/pals/channels/ingress.js +131 -0
  110. package/dist/pals/channels/ingress.js.map +1 -0
  111. package/dist/pals/channels/routes.d.ts +20 -0
  112. package/dist/pals/channels/routes.d.ts.map +1 -0
  113. package/dist/pals/channels/routes.js +111 -0
  114. package/dist/pals/channels/routes.js.map +1 -0
  115. package/dist/pals/channels/routing.d.ts +37 -0
  116. package/dist/pals/channels/routing.d.ts.map +1 -0
  117. package/dist/pals/channels/routing.js +150 -0
  118. package/dist/pals/channels/routing.js.map +1 -0
  119. package/dist/pals/channels/schema.d.ts +234 -0
  120. package/dist/pals/channels/schema.d.ts.map +1 -0
  121. package/dist/pals/channels/schema.js +94 -0
  122. package/dist/pals/channels/schema.js.map +1 -0
  123. package/dist/pals/channels/types.d.ts +115 -0
  124. package/dist/pals/channels/types.d.ts.map +1 -0
  125. package/dist/pals/channels/types.js +2 -0
  126. package/dist/pals/channels/types.js.map +1 -0
  127. package/dist/pals/communication/broker.d.ts +8 -0
  128. package/dist/pals/communication/broker.d.ts.map +1 -0
  129. package/dist/pals/communication/broker.js +121 -0
  130. package/dist/pals/communication/broker.js.map +1 -0
  131. package/dist/pals/communication/dispatch.d.ts +4 -0
  132. package/dist/pals/communication/dispatch.d.ts.map +1 -0
  133. package/dist/pals/communication/dispatch.js +57 -0
  134. package/dist/pals/communication/dispatch.js.map +1 -0
  135. package/dist/pals/communication/inbound.d.ts +9 -0
  136. package/dist/pals/communication/inbound.d.ts.map +1 -0
  137. package/dist/pals/communication/inbound.js +155 -0
  138. package/dist/pals/communication/inbound.js.map +1 -0
  139. package/dist/pals/communication/ingress-dispatch.d.ts +5 -0
  140. package/dist/pals/communication/ingress-dispatch.d.ts.map +1 -0
  141. package/dist/pals/communication/ingress-dispatch.js +51 -0
  142. package/dist/pals/communication/ingress-dispatch.js.map +1 -0
  143. package/dist/pals/communication/ingress-inbound.d.ts +9 -0
  144. package/dist/pals/communication/ingress-inbound.d.ts.map +1 -0
  145. package/dist/pals/communication/ingress-inbound.js +222 -0
  146. package/dist/pals/communication/ingress-inbound.js.map +1 -0
  147. package/dist/pals/communication/ingress-schema.d.ts +7829 -0
  148. package/dist/pals/communication/ingress-schema.d.ts.map +1 -0
  149. package/dist/pals/communication/ingress-schema.js +479 -0
  150. package/dist/pals/communication/ingress-schema.js.map +1 -0
  151. package/dist/pals/communication/ingress-types.d.ts +187 -0
  152. package/dist/pals/communication/ingress-types.d.ts.map +1 -0
  153. package/dist/pals/communication/ingress-types.js +73 -0
  154. package/dist/pals/communication/ingress-types.js.map +1 -0
  155. package/dist/pals/communication/operator.d.ts +75 -0
  156. package/dist/pals/communication/operator.d.ts.map +1 -0
  157. package/dist/pals/communication/operator.js +217 -0
  158. package/dist/pals/communication/operator.js.map +1 -0
  159. package/dist/pals/communication/policy.d.ts +41 -0
  160. package/dist/pals/communication/policy.d.ts.map +1 -0
  161. package/dist/pals/communication/policy.js +138 -0
  162. package/dist/pals/communication/policy.js.map +1 -0
  163. package/dist/pals/communication/schema.d.ts +2000 -0
  164. package/dist/pals/communication/schema.d.ts.map +1 -0
  165. package/dist/pals/communication/schema.js +170 -0
  166. package/dist/pals/communication/schema.js.map +1 -0
  167. package/dist/pals/communication/store.d.ts +61 -0
  168. package/dist/pals/communication/store.d.ts.map +1 -0
  169. package/dist/pals/communication/store.js +450 -0
  170. package/dist/pals/communication/store.js.map +1 -0
  171. package/dist/pals/communication/tools.d.ts +23 -0
  172. package/dist/pals/communication/tools.d.ts.map +1 -0
  173. package/dist/pals/communication/tools.js +107 -0
  174. package/dist/pals/communication/tools.js.map +1 -0
  175. package/dist/pals/communication/types.d.ts +168 -0
  176. package/dist/pals/communication/types.d.ts.map +1 -0
  177. package/dist/pals/communication/types.js +24 -0
  178. package/dist/pals/communication/types.js.map +1 -0
  179. package/dist/pals/communication/verify.d.ts +22 -0
  180. package/dist/pals/communication/verify.d.ts.map +1 -0
  181. package/dist/pals/communication/verify.js +142 -0
  182. package/dist/pals/communication/verify.js.map +1 -0
  183. package/dist/pals/lifecycle.d.ts +37 -0
  184. package/dist/pals/lifecycle.d.ts.map +1 -0
  185. package/dist/pals/lifecycle.js +22 -0
  186. package/dist/pals/lifecycle.js.map +1 -0
  187. package/dist/pals/prompt.d.ts +30 -0
  188. package/dist/pals/prompt.d.ts.map +1 -0
  189. package/dist/pals/prompt.js +65 -0
  190. package/dist/pals/prompt.js.map +1 -0
  191. package/dist/pals/reference-images.d.ts +44 -0
  192. package/dist/pals/reference-images.d.ts.map +1 -0
  193. package/dist/pals/reference-images.js +248 -0
  194. package/dist/pals/reference-images.js.map +1 -0
  195. package/dist/pals/runtime.d.ts +46 -0
  196. package/dist/pals/runtime.d.ts.map +1 -0
  197. package/dist/pals/runtime.js +624 -0
  198. package/dist/pals/runtime.js.map +1 -0
  199. package/dist/pals/store.d.ts +26 -0
  200. package/dist/pals/store.d.ts.map +1 -0
  201. package/dist/pals/store.js +334 -0
  202. package/dist/pals/store.js.map +1 -0
  203. package/dist/pals/types.d.ts +145 -0
  204. package/dist/pals/types.d.ts.map +1 -0
  205. package/dist/pals/types.js +2 -0
  206. package/dist/pals/types.js.map +1 -0
  207. package/dist/peers/envelope.js +1 -1
  208. package/dist/peers/envelope.js.map +1 -1
  209. package/dist/peers/protocol.d.ts +83 -83
  210. package/dist/peers/record.d.ts +10 -10
  211. package/dist/plugin/shell-hook.d.ts.map +1 -1
  212. package/dist/plugin/shell-hook.js +7 -2
  213. package/dist/plugin/shell-hook.js.map +1 -1
  214. package/dist/process/kill-tree.d.ts.map +1 -1
  215. package/dist/process/kill-tree.js +9 -1
  216. package/dist/process/kill-tree.js.map +1 -1
  217. package/dist/provider/errors.d.ts +19 -0
  218. package/dist/provider/errors.d.ts.map +1 -1
  219. package/dist/provider/errors.js +123 -2
  220. package/dist/provider/errors.js.map +1 -1
  221. package/dist/provider/strict-schema.d.ts +28 -0
  222. package/dist/provider/strict-schema.d.ts.map +1 -1
  223. package/dist/provider/strict-schema.js +86 -0
  224. package/dist/provider/strict-schema.js.map +1 -1
  225. package/dist/public-runtime.d.ts +42 -14
  226. package/dist/public-runtime.d.ts.map +1 -1
  227. package/dist/public-runtime.js +36 -8
  228. package/dist/public-runtime.js.map +1 -1
  229. package/dist/public-tools.d.ts +8 -3
  230. package/dist/public-tools.d.ts.map +1 -1
  231. package/dist/public-tools.js +8 -3
  232. package/dist/public-tools.js.map +1 -1
  233. package/dist/public-types.d.ts +27 -7
  234. package/dist/public-types.d.ts.map +1 -1
  235. package/dist/registry/tool/presentation.d.ts +1 -0
  236. package/dist/registry/tool/presentation.d.ts.map +1 -1
  237. package/dist/registry/tool/presentation.js +9 -7
  238. package/dist/registry/tool/presentation.js.map +1 -1
  239. package/dist/runtime/harness-session/index.d.ts +5 -0
  240. package/dist/runtime/harness-session/index.d.ts.map +1 -0
  241. package/dist/runtime/harness-session/index.js +928 -0
  242. package/dist/runtime/harness-session/index.js.map +1 -0
  243. package/dist/runtime/harness-session/journal.d.ts +37 -0
  244. package/dist/runtime/harness-session/journal.d.ts.map +1 -0
  245. package/dist/runtime/harness-session/journal.js +177 -0
  246. package/dist/runtime/harness-session/journal.js.map +1 -0
  247. package/dist/runtime/harness-session/saved-view.d.ts +8 -0
  248. package/dist/runtime/harness-session/saved-view.d.ts.map +1 -0
  249. package/dist/runtime/harness-session/saved-view.js +112 -0
  250. package/dist/runtime/harness-session/saved-view.js.map +1 -0
  251. package/dist/runtime/jobs/awaited-jobs.d.ts +2 -1
  252. package/dist/runtime/jobs/awaited-jobs.d.ts.map +1 -1
  253. package/dist/runtime/jobs/awaited-jobs.js +2 -1
  254. package/dist/runtime/jobs/awaited-jobs.js.map +1 -1
  255. package/dist/runtime/jobs/registry.d.ts +56 -1
  256. package/dist/runtime/jobs/registry.d.ts.map +1 -1
  257. package/dist/runtime/jobs/registry.js +351 -34
  258. package/dist/runtime/jobs/registry.js.map +1 -1
  259. package/dist/runtime/query/abandon-turn.d.ts +12 -1
  260. package/dist/runtime/query/abandon-turn.d.ts.map +1 -1
  261. package/dist/runtime/query/abandon-turn.js +3 -1
  262. package/dist/runtime/query/abandon-turn.js.map +1 -1
  263. package/dist/runtime/query/checkpoint.d.ts +4 -0
  264. package/dist/runtime/query/checkpoint.d.ts.map +1 -1
  265. package/dist/runtime/query/checkpoint.js +10 -0
  266. package/dist/runtime/query/checkpoint.js.map +1 -1
  267. package/dist/runtime/query/durable-inbound.d.ts +5 -0
  268. package/dist/runtime/query/durable-inbound.d.ts.map +1 -0
  269. package/dist/runtime/query/durable-inbound.js +89 -0
  270. package/dist/runtime/query/durable-inbound.js.map +1 -0
  271. package/dist/runtime/query/events.d.ts +4 -0
  272. package/dist/runtime/query/events.d.ts.map +1 -1
  273. package/dist/runtime/query/events.js +22 -5
  274. package/dist/runtime/query/events.js.map +1 -1
  275. package/dist/runtime/query/executor/tool-call-admission.d.ts +5 -1
  276. package/dist/runtime/query/executor/tool-call-admission.d.ts.map +1 -1
  277. package/dist/runtime/query/executor/tool-call-admission.js +85 -13
  278. package/dist/runtime/query/executor/tool-call-admission.js.map +1 -1
  279. package/dist/runtime/query/executor.d.ts +41 -18
  280. package/dist/runtime/query/executor.d.ts.map +1 -1
  281. package/dist/runtime/query/executor.js +227 -114
  282. package/dist/runtime/query/executor.js.map +1 -1
  283. package/dist/runtime/query/index.d.ts +3 -0
  284. package/dist/runtime/query/index.d.ts.map +1 -1
  285. package/dist/runtime/query/index.js +21 -4
  286. package/dist/runtime/query/index.js.map +1 -1
  287. package/dist/runtime/query/iteration/index.d.ts +18 -6
  288. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  289. package/dist/runtime/query/iteration/index.js +144 -67
  290. package/dist/runtime/query/iteration/index.js.map +1 -1
  291. package/dist/runtime/query/iteration/outstanding-work.d.ts +9 -5
  292. package/dist/runtime/query/iteration/outstanding-work.d.ts.map +1 -1
  293. package/dist/runtime/query/iteration/outstanding-work.js +61 -6
  294. package/dist/runtime/query/iteration/outstanding-work.js.map +1 -1
  295. package/dist/runtime/query/iteration/phases/context.d.ts +4 -0
  296. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  297. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  298. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  299. package/dist/runtime/query/iteration/phases/tool-review.js +99 -16
  300. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  301. package/dist/runtime/query/observation-context.d.ts +2 -2
  302. package/dist/runtime/query/observation-context.d.ts.map +1 -1
  303. package/dist/runtime/query/observation-context.js +20 -13
  304. package/dist/runtime/query/observation-context.js.map +1 -1
  305. package/dist/runtime/query/prepare-turn.js +2 -2
  306. package/dist/runtime/query/prepare-turn.js.map +1 -1
  307. package/dist/runtime/query/prompt-cache.d.ts +1 -0
  308. package/dist/runtime/query/prompt-cache.d.ts.map +1 -1
  309. package/dist/runtime/query/prompt-cache.js +2 -0
  310. package/dist/runtime/query/prompt-cache.js.map +1 -1
  311. package/dist/runtime/query/prompt.d.ts +2 -0
  312. package/dist/runtime/query/prompt.d.ts.map +1 -1
  313. package/dist/runtime/query/prompt.js +23 -1
  314. package/dist/runtime/query/prompt.js.map +1 -1
  315. package/dist/runtime/query/repeat-call.d.ts +12 -3
  316. package/dist/runtime/query/repeat-call.d.ts.map +1 -1
  317. package/dist/runtime/query/repeat-call.js +33 -10
  318. package/dist/runtime/query/repeat-call.js.map +1 -1
  319. package/dist/runtime/query/resume-pending.d.ts +5 -6
  320. package/dist/runtime/query/resume-pending.d.ts.map +1 -1
  321. package/dist/runtime/query/resume-pending.js +30 -3
  322. package/dist/runtime/query/resume-pending.js.map +1 -1
  323. package/dist/runtime/query/resume-session.js +1 -1
  324. package/dist/runtime/query/resume-session.js.map +1 -1
  325. package/dist/runtime/query/review-policy.d.ts +8 -1
  326. package/dist/runtime/query/review-policy.d.ts.map +1 -1
  327. package/dist/runtime/query/review-policy.js +6 -0
  328. package/dist/runtime/query/review-policy.js.map +1 -1
  329. package/dist/runtime/query/saved-presentation.d.ts +13 -0
  330. package/dist/runtime/query/saved-presentation.d.ts.map +1 -0
  331. package/dist/runtime/query/saved-presentation.js +63 -0
  332. package/dist/runtime/query/saved-presentation.js.map +1 -0
  333. package/dist/runtime/query/steering.d.ts +6 -9
  334. package/dist/runtime/query/steering.d.ts.map +1 -1
  335. package/dist/runtime/query/steering.js.map +1 -1
  336. package/dist/runtime/query/tool-executions.d.ts +7 -3
  337. package/dist/runtime/query/tool-executions.d.ts.map +1 -1
  338. package/dist/runtime/query/tool-executions.js +89 -9
  339. package/dist/runtime/query/tool-executions.js.map +1 -1
  340. package/dist/runtime/query/tooling.d.ts +3 -1
  341. package/dist/runtime/query/tooling.d.ts.map +1 -1
  342. package/dist/runtime/query/tooling.js +3 -0
  343. package/dist/runtime/query/tooling.js.map +1 -1
  344. package/dist/scheduler/completion-inbox.d.ts +25 -1
  345. package/dist/scheduler/completion-inbox.d.ts.map +1 -1
  346. package/dist/scheduler/completion-inbox.js +102 -8
  347. package/dist/scheduler/completion-inbox.js.map +1 -1
  348. package/dist/scheduler/delegating.d.ts.map +1 -1
  349. package/dist/scheduler/delegating.js +5 -0
  350. package/dist/scheduler/delegating.js.map +1 -1
  351. package/dist/scheduler/local.d.ts.map +1 -1
  352. package/dist/scheduler/local.js +2 -0
  353. package/dist/scheduler/local.js.map +1 -1
  354. package/dist/session/summary/materialize.d.ts +10 -6
  355. package/dist/session/summary/materialize.d.ts.map +1 -1
  356. package/dist/session/summary/materialize.js +41 -8
  357. package/dist/session/summary/materialize.js.map +1 -1
  358. package/dist/store/budget/ledger.d.ts +9 -0
  359. package/dist/store/budget/ledger.d.ts.map +1 -1
  360. package/dist/store/budget/ledger.js +58 -6
  361. package/dist/store/budget/ledger.js.map +1 -1
  362. package/dist/store/evidence/index-page.d.ts +12 -12
  363. package/dist/store/evidence/source-text.d.ts +4 -4
  364. package/dist/store/session/disk.d.ts +9 -4
  365. package/dist/store/session/disk.d.ts.map +1 -1
  366. package/dist/store/session/disk.js +57 -11
  367. package/dist/store/session/disk.js.map +1 -1
  368. package/dist/store/session/memory.d.ts +5 -3
  369. package/dist/store/session/memory.d.ts.map +1 -1
  370. package/dist/store/session/memory.js +24 -7
  371. package/dist/store/session/memory.js.map +1 -1
  372. package/dist/store/session-log/core.d.ts +26 -6
  373. package/dist/store/session-log/core.d.ts.map +1 -1
  374. package/dist/store/session-log/core.js +61 -8
  375. package/dist/store/session-log/core.js.map +1 -1
  376. package/dist/store/session-log/disk.d.ts +2 -2
  377. package/dist/store/session-log/disk.d.ts.map +1 -1
  378. package/dist/store/session-log/disk.js +1 -0
  379. package/dist/store/session-log/disk.js.map +1 -1
  380. package/dist/store/session-log/fold.d.ts +7 -0
  381. package/dist/store/session-log/fold.d.ts.map +1 -1
  382. package/dist/store/session-log/fold.js +21 -0
  383. package/dist/store/session-log/fold.js.map +1 -1
  384. package/dist/store/session-log/index.d.ts +5 -3
  385. package/dist/store/session-log/index.d.ts.map +1 -1
  386. package/dist/store/session-log/index.js +3 -1
  387. package/dist/store/session-log/index.js.map +1 -1
  388. package/dist/store/session-log/memory.d.ts +1 -1
  389. package/dist/store/session-log/memory.d.ts.map +1 -1
  390. package/dist/store/session-log/memory.js +1 -0
  391. package/dist/store/session-log/memory.js.map +1 -1
  392. package/dist/store/session-log/spill.d.ts +10 -3
  393. package/dist/store/session-log/spill.d.ts.map +1 -1
  394. package/dist/store/session-log/spill.js +70 -5
  395. package/dist/store/session-log/spill.js.map +1 -1
  396. package/dist/store/session-log/structured-result.d.ts +21 -0
  397. package/dist/store/session-log/structured-result.d.ts.map +1 -0
  398. package/dist/store/session-log/structured-result.js +67 -0
  399. package/dist/store/session-log/structured-result.js.map +1 -0
  400. package/dist/store/task/disk.d.ts +11 -0
  401. package/dist/store/task/disk.d.ts.map +1 -1
  402. package/dist/store/task/disk.js +41 -2
  403. package/dist/store/task/disk.js.map +1 -1
  404. package/dist/store/task/memory.d.ts.map +1 -1
  405. package/dist/store/task/memory.js +15 -3
  406. package/dist/store/task/memory.js.map +1 -1
  407. package/dist/tools/admit-facts.d.ts +13 -0
  408. package/dist/tools/admit-facts.d.ts.map +1 -0
  409. package/dist/tools/admit-facts.js +142 -0
  410. package/dist/tools/admit-facts.js.map +1 -0
  411. package/dist/tools/builtins/bash.d.ts +4 -1
  412. package/dist/tools/builtins/bash.d.ts.map +1 -1
  413. package/dist/tools/builtins/bash.js +108 -22
  414. package/dist/tools/builtins/bash.js.map +1 -1
  415. package/dist/tools/builtins/browser.d.ts +10 -10
  416. package/dist/tools/builtins/computer-use.d.ts +90 -90
  417. package/dist/tools/builtins/edit.d.ts +17 -0
  418. package/dist/tools/builtins/edit.d.ts.map +1 -1
  419. package/dist/tools/builtins/edit.js +46 -1
  420. package/dist/tools/builtins/edit.js.map +1 -1
  421. package/dist/tools/builtins/file-write-result.d.ts.map +1 -1
  422. package/dist/tools/builtins/file-write-result.js +13 -0
  423. package/dist/tools/builtins/file-write-result.js.map +1 -1
  424. package/dist/tools/builtins/glob.d.ts.map +1 -1
  425. package/dist/tools/builtins/glob.js +12 -0
  426. package/dist/tools/builtins/glob.js.map +1 -1
  427. package/dist/tools/builtins/grep.d.ts.map +1 -1
  428. package/dist/tools/builtins/grep.js +14 -0
  429. package/dist/tools/builtins/grep.js.map +1 -1
  430. package/dist/tools/builtins/index.d.ts +2 -0
  431. package/dist/tools/builtins/index.d.ts.map +1 -1
  432. package/dist/tools/builtins/index.js +1 -0
  433. package/dist/tools/builtins/index.js.map +1 -1
  434. package/dist/tools/builtins/job.d.ts.map +1 -1
  435. package/dist/tools/builtins/job.js +4 -1
  436. package/dist/tools/builtins/job.js.map +1 -1
  437. package/dist/tools/builtins/lsp.d.ts +2 -2
  438. package/dist/tools/builtins/read-file.d.ts.map +1 -1
  439. package/dist/tools/builtins/read-file.js +49 -0
  440. package/dist/tools/builtins/read-file.js.map +1 -1
  441. package/dist/tools/builtins/view-image.d.ts +24 -0
  442. package/dist/tools/builtins/view-image.d.ts.map +1 -0
  443. package/dist/tools/builtins/view-image.js +385 -0
  444. package/dist/tools/builtins/view-image.js.map +1 -0
  445. package/dist/tools/builtins/wait-for-job-bounds.d.ts +2 -0
  446. package/dist/tools/builtins/wait-for-job-bounds.d.ts.map +1 -1
  447. package/dist/tools/builtins/wait-for-job-bounds.js +1 -0
  448. package/dist/tools/builtins/wait-for-job-bounds.js.map +1 -1
  449. package/dist/tools/builtins/wait-for-job.d.ts +2 -0
  450. package/dist/tools/builtins/wait-for-job.d.ts.map +1 -1
  451. package/dist/tools/builtins/wait-for-job.js +104 -6
  452. package/dist/tools/builtins/wait-for-job.js.map +1 -1
  453. package/dist/tools/builtins/write-file.d.ts.map +1 -1
  454. package/dist/tools/builtins/write-file.js +1 -0
  455. package/dist/tools/builtins/write-file.js.map +1 -1
  456. package/dist/tools/command-shell.d.ts +37 -2
  457. package/dist/tools/command-shell.d.ts.map +1 -1
  458. package/dist/tools/command-shell.js +100 -3
  459. package/dist/tools/command-shell.js.map +1 -1
  460. package/dist/tools/coordinator/agent.d.ts +9 -19
  461. package/dist/tools/coordinator/agent.d.ts.map +1 -1
  462. package/dist/tools/coordinator/agent.js.map +1 -1
  463. package/dist/tools/coordinator/index.d.ts.map +1 -1
  464. package/dist/tools/coordinator/index.js +127 -67
  465. package/dist/tools/coordinator/index.js.map +1 -1
  466. package/dist/tools/coordinator/wait-with-idle-bound.d.ts +2 -0
  467. package/dist/tools/coordinator/wait-with-idle-bound.d.ts.map +1 -1
  468. package/dist/tools/coordinator/wait-with-idle-bound.js +1 -1
  469. package/dist/tools/coordinator/wait-with-idle-bound.js.map +1 -1
  470. package/dist/tools/defineTool.d.ts.map +1 -1
  471. package/dist/tools/defineTool.js +4 -0
  472. package/dist/tools/defineTool.js.map +1 -1
  473. package/dist/tools/failure-facts.d.ts +8 -0
  474. package/dist/tools/failure-facts.d.ts.map +1 -0
  475. package/dist/tools/failure-facts.js +24 -0
  476. package/dist/tools/failure-facts.js.map +1 -0
  477. package/dist/tools/host-output.d.ts +24 -0
  478. package/dist/tools/host-output.d.ts.map +1 -0
  479. package/dist/tools/host-output.js +117 -0
  480. package/dist/tools/host-output.js.map +1 -0
  481. package/dist/tools/oem-code-pages.d.ts +8 -0
  482. package/dist/tools/oem-code-pages.d.ts.map +1 -0
  483. package/dist/tools/oem-code-pages.js +23 -0
  484. package/dist/tools/oem-code-pages.js.map +1 -0
  485. package/dist/tools/schedules/schedule-tool.d.ts.map +1 -1
  486. package/dist/tools/schedules/schedule-tool.js +35 -6
  487. package/dist/tools/schedules/schedule-tool.js.map +1 -1
  488. package/dist/tools/schedules/types.d.ts +23 -3
  489. package/dist/tools/schedules/types.d.ts.map +1 -1
  490. package/dist/tools/task/list.d.ts.map +1 -1
  491. package/dist/tools/task/list.js +14 -6
  492. package/dist/tools/task/list.js.map +1 -1
  493. package/dist/tools/task/present.d.ts.map +1 -1
  494. package/dist/tools/task/present.js +26 -6
  495. package/dist/tools/task/present.js.map +1 -1
  496. package/dist/tools/task/update.d.ts.map +1 -1
  497. package/dist/tools/task/update.js +12 -5
  498. package/dist/tools/task/update.js.map +1 -1
  499. package/dist/tools/text-window.d.ts +19 -0
  500. package/dist/tools/text-window.d.ts.map +1 -0
  501. package/dist/tools/text-window.js +83 -0
  502. package/dist/tools/text-window.js.map +1 -0
  503. package/dist/toolsets/manager.d.ts +11 -0
  504. package/dist/toolsets/manager.d.ts.map +1 -1
  505. package/dist/toolsets/manager.js +45 -1
  506. package/dist/toolsets/manager.js.map +1 -1
  507. package/dist/types/acp/index.d.ts +137 -1
  508. package/dist/types/acp/index.d.ts.map +1 -1
  509. package/dist/types/agent/base.d.ts +3 -0
  510. package/dist/types/agent/base.d.ts.map +1 -1
  511. package/dist/types/agent/manager.d.ts +8 -23
  512. package/dist/types/agent/manager.d.ts.map +1 -1
  513. package/dist/types/agent/scheduler.d.ts +10 -1
  514. package/dist/types/agent/scheduler.d.ts.map +1 -1
  515. package/dist/types/agent/task.d.ts +4 -0
  516. package/dist/types/agent/task.d.ts.map +1 -1
  517. package/dist/types/authorization/index.d.ts +30 -30
  518. package/dist/types/connector/mcp.d.ts +7 -0
  519. package/dist/types/connector/mcp.d.ts.map +1 -1
  520. package/dist/types/errors/catalog.d.ts.map +1 -1
  521. package/dist/types/errors/catalog.js +4 -2
  522. package/dist/types/errors/catalog.js.map +1 -1
  523. package/dist/types/harness/schema.d.ts +354 -0
  524. package/dist/types/harness/schema.d.ts.map +1 -0
  525. package/dist/types/harness/schema.js +203 -0
  526. package/dist/types/harness/schema.js.map +1 -0
  527. package/dist/types/harness/session.d.ts +278 -0
  528. package/dist/types/harness/session.d.ts.map +1 -0
  529. package/dist/types/harness/session.js +2 -0
  530. package/dist/types/harness/session.js.map +1 -0
  531. package/dist/types/hitl/index.d.ts +12 -0
  532. package/dist/types/hitl/index.d.ts.map +1 -1
  533. package/dist/types/hitl/index.js.map +1 -1
  534. package/dist/types/job/index.d.ts +47 -0
  535. package/dist/types/job/index.d.ts.map +1 -0
  536. package/dist/types/job/index.js +2 -0
  537. package/dist/types/job/index.js.map +1 -0
  538. package/dist/types/message/inbound-delivery.d.ts +44 -0
  539. package/dist/types/message/inbound-delivery.d.ts.map +1 -0
  540. package/dist/types/message/inbound-delivery.js +14 -0
  541. package/dist/types/message/inbound-delivery.js.map +1 -0
  542. package/dist/types/message/index.d.ts +4 -1
  543. package/dist/types/message/index.d.ts.map +1 -1
  544. package/dist/types/message/index.js +5 -1
  545. package/dist/types/message/index.js.map +1 -1
  546. package/dist/types/plugin/index.d.ts +6 -6
  547. package/dist/types/sandbox/index.d.ts +39 -2
  548. package/dist/types/sandbox/index.d.ts.map +1 -1
  549. package/dist/types/sandbox/index.js.map +1 -1
  550. package/dist/types/session/checkpoint.d.ts +24 -17
  551. package/dist/types/session/checkpoint.d.ts.map +1 -1
  552. package/dist/types/session/checkpoint.js +1 -0
  553. package/dist/types/session/checkpoint.js.map +1 -1
  554. package/dist/types/session/events.d.ts +23 -1
  555. package/dist/types/session/events.d.ts.map +1 -1
  556. package/dist/types/session/events.js.map +1 -1
  557. package/dist/types/session/records.d.ts +1514 -565
  558. package/dist/types/session/records.d.ts.map +1 -1
  559. package/dist/types/session/records.js +89 -1
  560. package/dist/types/session/records.js.map +1 -1
  561. package/dist/types/session/step.d.ts +2 -0
  562. package/dist/types/session/step.d.ts.map +1 -1
  563. package/dist/types/session/step.js.map +1 -1
  564. package/dist/types/session/store.d.ts +19 -10
  565. package/dist/types/session/store.d.ts.map +1 -1
  566. package/dist/types/session/tool-execution.d.ts +6 -0
  567. package/dist/types/session/tool-execution.d.ts.map +1 -1
  568. package/dist/types/structured-output/index.d.ts +12 -2
  569. package/dist/types/structured-output/index.d.ts.map +1 -1
  570. package/dist/types/summary/ref.d.ts +3 -1
  571. package/dist/types/summary/ref.d.ts.map +1 -1
  572. package/dist/types/tool/index.d.ts +32 -4
  573. package/dist/types/tool/index.d.ts.map +1 -1
  574. package/dist/types/tool/index.js.map +1 -1
  575. package/dist/types/tool/presentation.d.ts +106 -0
  576. package/dist/types/tool/presentation.d.ts.map +1 -1
  577. package/dist/utils/json-snapshot.d.ts +6 -2
  578. package/dist/utils/json-snapshot.d.ts.map +1 -1
  579. package/dist/utils/json-snapshot.js +19 -9
  580. package/dist/utils/json-snapshot.js.map +1 -1
  581. package/dist/utils/structured-result-json.d.ts +5 -0
  582. package/dist/utils/structured-result-json.d.ts.map +1 -0
  583. package/dist/utils/structured-result-json.js +10 -0
  584. package/dist/utils/structured-result-json.js.map +1 -0
  585. package/package.json +1 -1
  586. package/src/agents/QueryAgent.ts +1 -0
  587. package/src/agents/examples/SupervisorAgent.ts +1 -0
  588. package/src/agents/runAgent.ts +3 -0
  589. package/src/authorization/shell-lexer.ts +16 -1
  590. package/src/bridge/acp/permission.ts +17 -3
  591. package/src/bridge/acp/server.ts +271 -25
  592. package/src/bridge/acp/tasks.ts +23 -0
  593. package/src/bridge/acp/update.ts +167 -13
  594. package/src/connector/mcp/adapter.ts +16 -4
  595. package/src/connector/mcp/client.ts +6 -2
  596. package/src/constants/acp/index.ts +4 -0
  597. package/src/manager/agent/lifecycle.ts +230 -3
  598. package/src/manager/plan/lifecycle.ts +11 -9
  599. package/src/manager/session/attribution.ts +12 -2
  600. package/src/manager/session/streamed-message-identity.ts +21 -0
  601. package/src/manager/session/turn-recorder.ts +4 -3
  602. package/src/pals/activity/causality.ts +261 -0
  603. package/src/pals/activity/projection.ts +89 -0
  604. package/src/pals/activity/source.ts +240 -0
  605. package/src/pals/activity/subscription-policy.ts +230 -0
  606. package/src/pals/activity/subscription-schema.ts +27 -0
  607. package/src/pals/activity/subscription-store.ts +172 -0
  608. package/src/pals/activity/subscription-types.ts +48 -0
  609. package/src/pals/activity/subscriptions.ts +209 -0
  610. package/src/pals/activity/types.ts +108 -0
  611. package/src/pals/channels/ingress.ts +153 -0
  612. package/src/pals/channels/routes.ts +118 -0
  613. package/src/pals/channels/routing.ts +197 -0
  614. package/src/pals/channels/schema.ts +108 -0
  615. package/src/pals/channels/types.ts +156 -0
  616. package/src/pals/communication/broker.ts +131 -0
  617. package/src/pals/communication/dispatch.ts +66 -0
  618. package/src/pals/communication/inbound.ts +193 -0
  619. package/src/pals/communication/ingress-dispatch.ts +63 -0
  620. package/src/pals/communication/ingress-inbound.ts +269 -0
  621. package/src/pals/communication/ingress-schema.ts +526 -0
  622. package/src/pals/communication/ingress-types.ts +336 -0
  623. package/src/pals/communication/operator.ts +315 -0
  624. package/src/pals/communication/policy.ts +174 -0
  625. package/src/pals/communication/schema.ts +173 -0
  626. package/src/pals/communication/store.ts +577 -0
  627. package/src/pals/communication/tools.ts +139 -0
  628. package/src/pals/communication/types.ts +227 -0
  629. package/src/pals/communication/verify.ts +220 -0
  630. package/src/pals/lifecycle.ts +54 -0
  631. package/src/pals/prompt.ts +101 -0
  632. package/src/pals/reference-images.ts +322 -0
  633. package/src/pals/runtime.ts +670 -0
  634. package/src/pals/store.ts +369 -0
  635. package/src/pals/types.ts +157 -0
  636. package/src/peers/envelope.ts +1 -1
  637. package/src/plugin/shell-hook.ts +8 -2
  638. package/src/process/kill-tree.ts +10 -1
  639. package/src/provider/errors.ts +135 -2
  640. package/src/provider/strict-schema.ts +90 -0
  641. package/src/public-runtime.ts +118 -12
  642. package/src/public-tools.ts +13 -1
  643. package/src/public-types.ts +69 -7
  644. package/src/registry/tool/presentation.ts +9 -4
  645. package/src/runtime/harness-session/index.ts +1125 -0
  646. package/src/runtime/harness-session/journal.ts +209 -0
  647. package/src/runtime/harness-session/saved-view.ts +122 -0
  648. package/src/runtime/jobs/awaited-jobs.ts +2 -1
  649. package/src/runtime/jobs/registry.ts +397 -41
  650. package/src/runtime/query/abandon-turn.ts +18 -2
  651. package/src/runtime/query/checkpoint.ts +11 -0
  652. package/src/runtime/query/durable-inbound.ts +101 -0
  653. package/src/runtime/query/events.ts +22 -5
  654. package/src/runtime/query/executor/tool-call-admission.ts +125 -32
  655. package/src/runtime/query/executor.ts +316 -130
  656. package/src/runtime/query/index.ts +24 -4
  657. package/src/runtime/query/iteration/index.ts +218 -104
  658. package/src/runtime/query/iteration/outstanding-work.ts +55 -7
  659. package/src/runtime/query/iteration/phases/context.ts +4 -0
  660. package/src/runtime/query/iteration/phases/tool-review.ts +118 -21
  661. package/src/runtime/query/observation-context.ts +22 -16
  662. package/src/runtime/query/prepare-turn.ts +2 -2
  663. package/src/runtime/query/prompt-cache.ts +3 -0
  664. package/src/runtime/query/prompt.ts +32 -1
  665. package/src/runtime/query/repeat-call.ts +40 -10
  666. package/src/runtime/query/resume-pending.ts +60 -7
  667. package/src/runtime/query/resume-session.ts +1 -1
  668. package/src/runtime/query/review-policy.ts +23 -2
  669. package/src/runtime/query/saved-presentation.ts +70 -0
  670. package/src/runtime/query/steering.ts +6 -9
  671. package/src/runtime/query/tool-executions.ts +108 -9
  672. package/src/runtime/query/tooling.ts +6 -1
  673. package/src/scheduler/completion-inbox.ts +108 -7
  674. package/src/scheduler/delegating.ts +5 -0
  675. package/src/scheduler/local.ts +2 -0
  676. package/src/session/summary/materialize.ts +51 -9
  677. package/src/store/budget/ledger.ts +60 -5
  678. package/src/store/session/disk.ts +77 -10
  679. package/src/store/session/memory.ts +32 -7
  680. package/src/store/session-log/core.ts +118 -11
  681. package/src/store/session-log/disk.ts +9 -2
  682. package/src/store/session-log/fold.ts +22 -0
  683. package/src/store/session-log/index.ts +5 -0
  684. package/src/store/session-log/memory.ts +2 -1
  685. package/src/store/session-log/spill.ts +89 -6
  686. package/src/store/session-log/structured-result.ts +96 -0
  687. package/src/store/task/disk.ts +46 -2
  688. package/src/store/task/memory.ts +13 -3
  689. package/src/tools/admit-facts.ts +145 -0
  690. package/src/tools/builtins/bash.ts +132 -24
  691. package/src/tools/builtins/edit.ts +54 -1
  692. package/src/tools/builtins/file-write-result.ts +14 -0
  693. package/src/tools/builtins/glob.ts +12 -0
  694. package/src/tools/builtins/grep.ts +14 -0
  695. package/src/tools/builtins/index.ts +2 -0
  696. package/src/tools/builtins/job.ts +4 -1
  697. package/src/tools/builtins/read-file.ts +57 -0
  698. package/src/tools/builtins/view-image.ts +409 -0
  699. package/src/tools/builtins/wait-for-job-bounds.ts +3 -0
  700. package/src/tools/builtins/wait-for-job.ts +141 -32
  701. package/src/tools/builtins/write-file.ts +4 -2
  702. package/src/tools/command-shell.ts +132 -5
  703. package/src/tools/coordinator/agent.ts +9 -19
  704. package/src/tools/coordinator/index.ts +150 -75
  705. package/src/tools/coordinator/wait-with-idle-bound.ts +3 -1
  706. package/src/tools/defineTool.ts +4 -0
  707. package/src/tools/failure-facts.ts +24 -0
  708. package/src/tools/host-output.ts +136 -0
  709. package/src/tools/oem-code-pages.ts +22 -0
  710. package/src/tools/schedules/schedule-tool.ts +38 -5
  711. package/src/tools/schedules/types.ts +23 -3
  712. package/src/tools/task/list.ts +15 -7
  713. package/src/tools/task/present.ts +37 -7
  714. package/src/tools/task/update.ts +12 -5
  715. package/src/tools/text-window.ts +87 -0
  716. package/src/toolsets/manager.ts +58 -1
  717. package/src/types/acp/index.ts +150 -4
  718. package/src/types/agent/base.ts +3 -0
  719. package/src/types/agent/manager.ts +8 -23
  720. package/src/types/agent/scheduler.ts +10 -1
  721. package/src/types/agent/task.ts +4 -0
  722. package/src/types/connector/mcp.ts +7 -0
  723. package/src/types/errors/catalog.ts +4 -2
  724. package/src/types/harness/schema.ts +203 -0
  725. package/src/types/harness/session.ts +306 -0
  726. package/src/types/hitl/index.ts +17 -1
  727. package/src/types/job/index.ts +42 -0
  728. package/src/types/message/inbound-delivery.ts +63 -0
  729. package/src/types/message/index.ts +8 -1
  730. package/src/types/sandbox/index.ts +46 -0
  731. package/src/types/session/checkpoint.ts +4 -1
  732. package/src/types/session/events.ts +23 -1
  733. package/src/types/session/records.ts +114 -2
  734. package/src/types/session/step.ts +2 -0
  735. package/src/types/session/store.ts +23 -9
  736. package/src/types/session/tool-execution.ts +6 -0
  737. package/src/types/structured-output/index.ts +13 -2
  738. package/src/types/summary/ref.ts +3 -1
  739. package/src/types/tool/index.ts +39 -5
  740. package/src/types/tool/presentation.ts +121 -0
  741. package/src/utils/json-snapshot.ts +26 -9
  742. package/src/utils/structured-result-json.ts +10 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,546 @@
1
1
  # Changelog
2
2
 
3
+ ## 50.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 4a6ec17: Refuse to claim strict tool input generation where the wire would refuse the request.
8
+
9
+ `edit` and `write` set `enforceModelInput`, and the Zen driver answered that with
10
+ `strict: true` for both on the chat-class wires. The Zen free-tier gateway
11
+ enforces the strict subset's structural rule itself — every object that declares
12
+ `properties` must list all of them in `required` — and refuses the WHOLE request
13
+ when one tool fails, so `edit`'s optional fields (a find-and-replace OR an
14
+ insertion) took every other tool in the call down with it. `cat-jam-free` is the
15
+ model that enforces; the symptom was `Invalid schema for function 'edit'`.
16
+
17
+ - `@namzu/sdk` gains `acceptsStrictSchema(schema)`, the wider question a driver
18
+ asks before claiming `strict: true` on one request: the keyword deny-list that
19
+ `findStrictSchemaViolations` already runs, plus the structural rules, plus a
20
+ guard for a tool that declared no schema at all (the deny-list walks nothing in
21
+ `undefined` and finds nothing). It is additive; `findStrictSchemaViolations`
22
+ and `assertStrictSchema` keep the registration-time job they had.
23
+ - `@namzu/zen` now sends `strict: acceptsStrictSchema(...)` for a tool named in
24
+ `enforceToolInputSchema`, so `write` keeps the guarantee and `edit` sends
25
+ `strict: false`. Responses still sends `strict: false` for every tool, as it
26
+ did. Nothing about a schema changes, and Namzu validates tool inputs before
27
+ execution either way.
28
+ - `edit`'s `insertLine` union branch `{ const: 'end' }` states no `type`, which
29
+ the strict dialect has no spelling for; it is now `{ type: 'string', const:
30
+ 'end' }`. The validator reports any union branch that never states a type.
31
+
32
+ **What breaks.** A caller that relied on Zen sending `strict: true` for `edit`
33
+ loses constrained decoding for that one tool on the chat-class wires. To keep it,
34
+ the schema would have to require every field and make the optional ones nullable,
35
+ which changes what `edit` accepts on every provider.
36
+
37
+ ## 50.0.0
38
+
39
+ ### Major Changes
40
+
41
+ - efb7b06: Extend the closed `AcpSessionUpdate` output union with `agent_thought` reasoning boundaries and `agent_message` completed messages. Exhaustive consumers must add handlers for both kinds before upgrading. Existing variants and required fields remain available. Reasoning boundaries contain no private replay payload; readable reasoning still arrives through `agent_thought_chunk`.
42
+
43
+ Message chunks carry optional actual message/turn identity and public commentary/final-answer metadata. Completed messages provide selected settled content and ordered public text parts. `turn_ended` can provide the authoritative result and its actual answer-message identity; consumers must replace the preview when a result is present, including an empty result that clears blocked output.
44
+
45
+ Keep the coarse `AcpStopReason` union and add optional exact `reason` to terminal updates and prompt responses. Current runtime guardrails/refusals map to `refused`, resource limits to `max_turns`, and parked segments retain `reason: 'paused'` under the older coarse cancellation label. Legacy aliases remain accepted. Prompt preparation cancellation returns an explicit cancellation reason even if no runtime event was produced. Streamed updates are sent in admission order and finish before the prompt response. Tool completion retains optional runtime-measured duration.
46
+
47
+ Permission questions wait for already-admitted updates and fail closed when that context was not delivered. Update errors are caught immediately, retain the first failure and release the prompt slot after flushing; failed question sends settle their pending wait. Delivery failure does not undo runtime work already recorded.
48
+
49
+ Update the CLI session-isolation regression expectations to include the exact cancellation and completion reasons; the CLI runtime is unchanged.
50
+
51
+ - 0f5aa96: Ready-computer Pal prompts now default to general application work guidance:
52
+ understand references and acceptance criteria, make reversible changes,
53
+ observe and correct the actual result, and validate saved files and requested
54
+ exports before delivery. SDK hosts that need the previous prompt behavior can
55
+ pass `workGuidance: 'basic'` to `buildPalSystemPrompt`. This guidance shapes
56
+ model behavior; it does not certify semantic correctness.
57
+
58
+ The SDK `read` tool now refuses real PNG, JPEG and WebP bytes as text. Mount
59
+ the optional `view_image` / `createViewImageTool` for saved-image inspection,
60
+ or use a format-aware binary reader when pixels are not the desired result.
61
+ `getBuiltinTools()` retains its previous tool roster. Saved artifact images
62
+ provide no GUI screenshot authority.
63
+
64
+ The CLI and desktop Pal runtime now explicitly mount `view_image` and
65
+ `import_reference_images`. Image import is a reviewed file-write operation
66
+ using only the current operator input and admitted guest. Original image
67
+ bytes and manifests survive durable review; current plan, pause and control
68
+ guards remain in force. Ordinary chat and unavailable-computer sessions do
69
+ not acquire guest tool access.
70
+
71
+ The local Pal sandbox adds authenticated, acknowledged bounded byte reads.
72
+ Rebuild the local Pal image from this release to inspect saved images; an
73
+ older worker fails explicitly before file contents are requested. Existing
74
+ whole-file requests and generic worker defaults are unchanged.
75
+
76
+ The Pal image also includes the standard `file` utility for format checks.
77
+ This reports file type; it does not establish application or visual quality.
78
+
79
+ - 6ff961f: Add an owner-conversation source to the shared Pal input ledger, so an ordinary conversation (not a Pal) can leave a message in a Pal's durable inbox. `PalOperatorMessageBroker` and `createPalOperatorMessagingTools` (`list_pals` and an always-approved `send_pal_message` that takes only `palId` and `body`) are new; the host fixes the tenant and the executing call supplies the conversation, so the model cannot choose or forge the sender, and the source carries no Pal address. Acceptance is a receipt, never delivery or an answer, and the existing Pal-to-Pal rows, route hashes, IDs and receipt namespaces are unchanged.
80
+
81
+ Why this is a major release: the exported unions `PalIngressIntent`, `PalIngressInboxMessage`, `PalIngressRouteKey`, `PalIngressAuthorizationRequest` and the `acceptIngress`/`readIngress` results gain an `operator` member (`kind: 'operator'`, source `operator-conversation`), and `ingressMessageRef` can return the new `namzu-pal-operator/1` namespace. TypeScript code that narrows these unions with `kind === 'observation' ? … : <channel fields>` no longer compiles; handle `kind === 'operator'` (its source is `{ kind: 'operator-conversation', tenantId, sessionId }`) before reading channel fields. A custom `authorize` callback must also return a decision for an `operator` request: allow `accept` and `deliver` only for a host that has already shown the owner a review, and refuse `wake` unless the owner started the Pal. The public `RuntimeContextMessageKind` union is not widened: a delivery is recorded as `peer-message`, and its rendered envelope names the owner's conversation and says it is untrusted context, not an approval.
82
+
83
+ An older SDK process sharing a communication store that holds an owner-conversation message fails to read that recipient's record rather than overwriting it; stop older processes before sharing the path.
84
+
85
+ - 53aed2a: Add a shared durable Pal input ledger for existing Pal messages, closed host activity facts and authenticated channel messages. Generic intake and finite dispatch retain exact original-log receipts, current authorization and one unresolved recipient claim across all sources. Existing Pal-only APIs, row shapes and message IDs remain supported; their writes preserve the new input families.
86
+
87
+ The public RuntimeContextMessageKind output union and RUNTIME_CONTEXT_MESSAGE_KINDS catalogue now include host-observation and channel-message. Consumers that exhaustively handle runtime context must add those cases when upgrading. Treat both as untrusted context; neither grants approval or operator authority. This output-type expansion requires a major SDK release even though the new intake APIs are additive.
88
+
89
+ Persisted communication and operation records upgrade to schema version 2. Stop older SDK processes before sharing these store paths; older binaries refuse the new records instead of overwriting mixed input state. Observation and channel messages remain untrusted runtime context, never operator approval or permission grants.
90
+
91
+ - f7f48f9: Add the explicit `cmd` ShellDialect and change the native Windows host-shell metadata default from `sh` to `cmd`. The physical command shell remains Node's platform shell (normally CMD); no PowerShell or WSL switch occurs. Update exhaustive dialect handling to include `cmd` and pass the actual value to authorization helpers.
92
+
93
+ CMD lines are conservatively opaque until a matching parser exists. Command-specific allow rules and skill patterns no longer pre-approve native CMD commands. The existing unknown-program escalation still requires exact-call review, even when the gate has a whole-tool allowance. Use that review or explicitly select a POSIX interpreter rather than incorrectly labelling CMD as `sh`. Sandboxed Linux guests retain `sh`.
94
+
95
+ SDK query prompts disclose the active command tools' host or guest execution dialect, including minimal and cached prompts. Explicit Windows `bash.exe` and `sh.exe` overrides retain their matching POSIX dialects.
96
+
97
+ Native Windows CLI model shell calls inherit the exact-call review requirement. The scheduled-run floor refuses CMD commands rather than checking them with POSIX quoting; confirmed script jobs still accept only explicit bash/sh interpreters. Use an installed POSIX interpreter where appropriate or run reviewed interactive CMD calls.
98
+
99
+ ### Minor Changes
100
+
101
+ - dd7ee4b: A failed model request on a turn that has no token limit anywhere above it no longer blocks that turn's next request. Before, an unanswered request (a 502, a dropped stream) left the account "in flight" and unresolved, so the same turn could never ask again and a host could only abandon it. The request still stays recorded as unknown spend, never as zero, and a late usage frame for it is still added.
102
+
103
+ A turn with any finite limit (its own, or on an account above it) behaves exactly as before: unknown spend still refuses the next request, because the unknown amount may already exceed the limit. `SessionTokenBudget.bounded` reports which of the two an account is. If you depend on the old refusal for an unlimited turn, check `summary().unresolvedRequests` yourself; nothing else changes for limited turns.
104
+
105
+ - 4314f90: A tool call a person declined at review is now recorded as declined by them, with what they said, so a host that reopens the conversation can show it. Nothing you already send or receive changes shape, and no code needs to change to upgrade.
106
+
107
+ New and optional: `ToolReviewAnswer`'s `reject`, `AcpPermissionOutcome`'s `reject` and the `reject_tools` decision take `declined?: { note?: string }`; an ACP client's `reject` answer takes the same field; and a generic `ToolCallView` result carries `declined?: { note?: string }`. A host that sets `declined` on its reject gets, on that call's `tool_completed`, a view whose `label` is the call's target (path or command) and whose `note` is the person's words, cut at 4,000 characters. A host that does not set it, a call the authorization gate refused even when the person rejects the rest of its batch, and every other refusal by policy (strict or plan mode, no one to ask, the authorization gate, a repeated failure), is recorded exactly as before: an error result with no presentation. The text the model reads is unchanged. `ToolExecutor.executeBatch` takes an optional fifth argument for the same purpose.
108
+
109
+ The CLI's ACP server passes the field through, so a client such as Namzu Desktop that reports "the person said no" now shows "Declined" after a reload instead of "details unavailable". The terminal UI does not report it yet, so a call declined there still reloads as before.
110
+
111
+ - b8852a1: `abandonTurn` takes a new option, `withdrawMessages`. Pass it when you give the
112
+ turn's prompt back to a person to send again (a message box restored after
113
+ "continue without this reply"): the abandoned turn then contributes no message
114
+ to the next turn's context, so the provider receives the re-sent prompt once
115
+ instead of twice. The records stay in the log; the closing `turn_failed` carries
116
+ `failure.details.messagesWithdrawn: true`, which the fold honours. Nothing
117
+ changes unless you pass it: an abandoned turn's messages stay in the context by
118
+ default. `SessionLog.abandonTurn` accepts the same option as a fourth argument;
119
+ a custom `SessionLog` that wraps another should forward it.
120
+
121
+ The CLI's `namzu/sessions/abandon-paused` passes it, which fixes Desktop's
122
+ **Continue without this reply** sending the person's message to the provider
123
+ twice.
124
+
125
+ - 7f5ac50: Expose explicit paused-turn recovery through optional `AcpAgentGateway.retry` and
126
+ `ACPServer.retrySession`. Hosts retain the existing ordered update, review,
127
+ cancellation and single active execution owner without inventing a new prompt.
128
+
129
+ The desktop CLI host advertises scoped retry-status and retry methods. It resumes
130
+ only the exact verified checkpoint of a classified retryable provider pause with
131
+ resolved original accounting. Human decision holds and uncertain provider usage
132
+ remain blocked, including unlimited turns; this feature never resets a ledger or
133
+ abandons an active turn. Same-process retries preserve captured approval/effort
134
+ and the recorded model. After reconnection, default Retry is unavailable when the
135
+ original approval settings cannot be verified; a deliberate host retry must
136
+ explicitly select a permission mode in ordinary conversations. Pal recovery also
137
+ pins the authenticated original computer generation and environment identity
138
+ before sending, and rechecks them at resumed provider/tool entries. A cold,
139
+ originally offline, replaced or unavailable Pal computer lifetime cannot be
140
+ substituted with the currently ready computer. Pal ownership and current
141
+ computer-control guards remain required.
142
+
143
+ - 56d88dc: Add optional `namzu/tasks/update` planning notifications, exported `AcpTask` and `AcpTaskUpdate` shapes, and `ACP_TASK_CAPABILITY`. Hosts enable `supportsTaskNotifications` and clients declare `namzu/tasks`; existing core updates and default wire behavior remain unchanged. Notifications preserve planning IDs, failed status, dependency and owner clears, and deletion without forwarding private task descriptions or metadata.
144
+ - 3727e2b: Add the read-only `ACPServer.getSessionCwd(sessionId)` lookup for the exact
145
+ workspace of a session published on the current connection. Reserved loads,
146
+ unknown identities and stopped servers return `undefined`. Hosts can authorize
147
+ new-session model preparation before the first durable turn without accepting
148
+ an arbitrary client-provided session ID. Folder trust and durable/Pal ownership
149
+ checks remain the host's responsibility.
150
+ - 84452ec: Add `ToolManager.prepareExecutionAsync(name, rawInput, signal?)` and use it for
151
+ direct, nested and structured tool calls. Asynchronous refinements and JSON-safe
152
+ transforms now prepare one normalized input for authorization, review and
153
+ execution. Execution retries reuse that input; actual rewrites are revalidated.
154
+ The existing synchronous preparation API remains unchanged.
155
+
156
+ Cancellation ends preparation without admitting a late result. Schema callbacks
157
+ remain trusted host code: keep external work free of effects or cooperative with
158
+ host cancellation. Non-JSON host inputs must not be mutated while preparation is
159
+ pending.
160
+
161
+ Observation deduplication no longer replays historical schema callbacks. It uses
162
+ current executor evidence tied to the actual successful call and exact result.
163
+ Historical or recovered results without this proof remain full, so a new turn or
164
+ resume may retain more context under the existing compaction limits.
165
+
166
+ - 53aed2a: Add authenticated Pal channel ingress with captured host connections, a fresh actor per event, immutable native conversation targets, and shared durable inbox delivery. Recorded reply and action routing verifies the original owned conversation receipt and current authority; it does not send remote messages automatically. Hosts must provide a trusted event verifier and explicit receive, wake, reply and action policy. The CLI includes a private local HMAC fixture adapter and a bridge to exact native parked tool-review actions; other channel actions remain unsupported.
167
+ - 6194bda: Observe a background server's output without waiting for it to exit. `BackgroundJobRegistry.waitForOutput` and the optional `BackgroundJobRegistryRef.waitForOutput` match a bounded UTF-8 literal on stdout, stderr or either pipe independently, preserve combined byte cursors, and report match, exit, stop, timeout or cancellation outcomes with explicit retention gaps.
168
+
169
+ Set `output_contains` and optional `output_stream` on `wait_for_job` for one readiness observation. This mode never marks the process as work that must hold a finishing turn open. Omitting the condition preserves the existing exit wait. Custom hosts must implement the optional output-observation method to support readiness; unsupported hosts refuse it rather than waiting for exit. Observers have per-owner and registry limits and are cleaned up on every outcome. Process output remains evidence, not a guarantee of service health.
170
+
171
+ Byte caps and cursors now skip partial UTF-8 code points and report those skipped bytes instead of introducing replacement characters into the retained output.
172
+
173
+ - 301f5b3: Add opt-in `structuredResultSpilling: true` to built-in session logs. Large
174
+ screened structured tool candidates and accepted final JSON can use separate
175
+ checked spill references while their records remain within the 4 MiB ceiling.
176
+ The default keeps existing inline records; each spilled JSON body is limited
177
+ to 16 MiB. Live events and returned turns still carry the full value.
178
+
179
+ Use `readStructuredOutput` on a completed record from a verified log read to
180
+ restore accepted JSON. Completed-call recovery hydrates only the latest
181
+ selected completion and refuses missing or corrupt evidence without replay.
182
+ `readSpill` and spill stores accept optional byte limits and cancellation;
183
+ built-in bounded reads verify actual size, UTF-8, regular files and hashes.
184
+ Custom backends remain responsible for their own I/O limits. This does not
185
+ restore a pre-crash review decision or introduce general tool-data artifacts.
186
+
187
+ - 6194bda: Add `resumeSessionId` to local child-task admission and expose the admitted conversation as `TaskHandle.childSessionId`. A follow-up keeps the child's conversation and history while creating a fresh task, parent-turn attribution, cancellation channel, budget reservation and current configuration. Existing terminal task handles remain unchanged. Continuation requires a retained capability in the same manager and an unchanged registered definition; replayed history alone cannot authorize execution, and isolated workspaces are refused.
188
+
189
+ Existing builders supplying a custom log for another session keep their first-invocation behavior. Such a log does not create continuation authority for the admitted child, so a later follow-up is refused instead of replaying unrelated history.
190
+
191
+ Add optional invocation identifiers to immutable summaries: `SessionSummaryRef.turnRef`, `SessionSummaryMaterializer.materialize({ turnId })`, and `SessionStore.getSummary(sessionId, tenantId, turnId)`. Built-in stores seal follow-up summaries independently without replacing the original conversation summary. Custom session stores enabling continuation must declare `supportsInvocationSummaries: true` and implement this optional invocation key; their existing calls without a turn id retain their behavior.
192
+
193
+ Continuation also requires `supportsOwnerVersionCas: true`: custom stores must honor the optional expected ownership version on `updateSession` and `recordSummary`. Admission, rollback and pre-invocation checks refuse changed ownership, and `materialize({ expectedOwnerVersion })` prevents an old invocation from idling a new owner during completion. Built-in disk stores serialize these writes within a process; this does not establish a cross-process lease. Calls omitting the version preserve their existing behavior.
194
+
195
+ - 56d88dc: Add `DiskTaskStore.listStrict()` for hosts replacing a complete task projection. It rejects unreadable directories and corrupt records rather than silently presenting an empty or partial list. A session without a task directory still returns an empty list; existing `list()` retains its tolerant behavior.
196
+ - f7f48f9: Add optional `terminate(signal?): Promise<void>` to `SandboxDetachedProcess` and background `JobProcess` for providers that must confirm a remote process tree stopped. The registry waits for this confirmation before reporting termination. A failed confirmation rejects the stop call and retains the owned running job with optional `recoveryRequired` and a safe `stopError`, so the host can retry recovery without forgetting live work. Providers that use the existing synchronous `kill` method retain their current behavior.
197
+ - 9ef6506: Expose live tool progress and actual turn failure messages through optional fields on existing ACP update variants. Add explicit optional `namzu/*` ACP host extensions and advertise their method names. Gateway history loading now receives the requested workspace as an optional second argument; existing one-argument gateways remain compatible.
198
+
199
+ The CLI now loads durable, project/tenant-scoped ACP conversations and refuses archived writers. `namzu acp --desktop` enables operator methods for folder trust, scoped conversation/history, safe provider metadata and background jobs. Ordinary ACP connections retain the core method set. The private desktop preview uses this existing runtime and log rather than a second conversation store.
200
+
201
+ - 56e846c: Add optional inline user attachments to ACP prompt requests. Hosts opt into delivery with `supportsPromptAttachments: true`; initialization then advertises `promptAttachments: true`. Clients can check this capability before sending bytes, and gateways receive the validated attachment payload alongside the prompt. Stored attachment references are refused across this boundary; inline payloads are limited to eight attachments and 3 MiB of decoded bytes per message.
202
+
203
+ The CLI opts in and preserves image/document attachments in the actual user message and settled conversation history. Existing plain text requests keep their behavior. The private desktop admits native file picks or dropped/pasted bytes as bounded images and UTF-8 text, keeps draft and queue ownership, and refuses image submission to an older CLI rather than silently dropping it.
204
+
205
+ New image/document inputs are refused before send when the selected live provider explicitly declares that it cannot receive them. Desktop files remain available for retry with a suitable model. Attachment/settings-only drafts survive a connection rebuild, and queue editing restores captured options together with its text and files. Pre-turn CLI errors retain their actual diagnostic rather than becoming a generic failed turn.
206
+
207
+ ACP also accepts optional `AcpPromptOptions` with a reasoning effort and tool review mode. Hosts opt in with `supportsPromptOptions: true`, advertised as `promptOptions: true`; unsupported or malformed explicit settings are rejected before a turn starts. The CLI validates reasoning effort against the actual selected runtime's supported menu and applies the captured review mode to that turn.
208
+
209
+ - 2057fd6: Surface provider-hosted web search and fetch activity through existing ACP tool
210
+ updates, using qualified IDs and only provider-reported state and bounded public
211
+ captions. These display receipts do not grant local execution or approval.
212
+
213
+ Desktop conversation history adds optional validated journal message IDs and
214
+ timestamps for messages and work, and restores saved hosted search receipts.
215
+ Missing timing and unfinished operations remain explicit; reopening history
216
+ does not invent a current clock or a successful outcome. Existing message text
217
+ and execution authority are retained.
218
+
219
+ - 6f46da3: Add an optional `durableInbound` source to query, runAgent and query-backed
220
+ agent configuration. Deliveries use ordinary session-log message records and
221
+ await both their append queue and the host's exact acknowledgement before
222
+ inference. An explicit sessionLog is required for this optional source.
223
+
224
+ Export durable claim/reference/receipt contracts and bounded reference
225
+ validation. Runtime context can retain an optional delivery reference without
226
+ acquiring operator authority. Existing initial input, synchronous queues and
227
+ outstanding-work holds retain their defaults.
228
+
229
+ - be9f8b6: Add opt-in `structuredOutput.toolResultRetention: 'durable'` for tool mode.
230
+ Retain screened, post-hook JSON independently of capped tool previews, so
231
+ larger valid candidates can reach review and final structured settlement.
232
+ The default `receipt` behavior is unchanged; native mode rejects the durable
233
+ tool option.
234
+
235
+ The full JSON is an additional host-visible `tool_completed.structuredResultJson`
236
+ field and a verified completion recovery field, not provider-message content
237
+ or proof of acceptance. Guardrails, hooks, skips, cancellation and the session
238
+ record size ceiling still apply. Resume preserves execution evidence without
239
+ automatically accepting a pre-crash candidate or replaying its tool.
240
+
241
+ - 24cb6b4: Add `createHarnessSession` and host-composed external engine contracts. External sessions record an immutable engine/profile/native-session/cwd binding, authored prompts before dispatch, native item identities and exact review decisions under the existing session writer lease. Admission is required before native execution or approval; interrupted connections require matching native history and never automatically resend prompts. Existing Namzu query, provider and tool execution APIs and defaults are unchanged. New optional `harness` payloads use the existing session record kinds.
242
+
243
+ New external-bound journals cannot be continued through kernel `query`, `resumeSession` or `TurnRecorder.open`; use their recorded harness adapter or a separate Namzu session. Reading their owned history remains available.
244
+
245
+ - d5030ca: On Windows, `bash` with `run_in_background` now runs the command: before, the job registry spawned `/bin/sh`, which does not exist there, so every background job ended within milliseconds with no output and no explanation. Background jobs, foreground `bash` calls and plugin shell hooks now share one spawn (`spawnHostShell`, newly exported). A command that cannot be started is reported as "Could not start the command: <reason>" (and as `failed to start` by `job` and `wait_for_job`, with an `error` field) rather than as a plain exit, and Windows console output is decoded in its OEM code page instead of garbled as UTF-8. On Windows the command now runs under UTF-8 (an outer `cmd` sets code page 65001 and starts the real one with the command in the environment), so letters the OEM page lacks, such as `ğ` and `ş`, are no longer flattened to `g` and `s`, and a missing working directory is reported as such. Nothing to change on upgrade; `BackgroundJob`, `BackgroundJobOutput` and the job tool results gain an optional `error`.
246
+ - 6f46da3: Add durable Pal addresses, owned conversation routes, incoming message storage,
247
+ captured senders, explicit directed consent and executor-correlated messaging
248
+ tools. Acceptance is separate from verified session-log delivery and recipient
249
+ execution; unresolved claims are retained for recovery without repeating effects.
250
+
251
+ CLI and desktop Pal sessions use the same SDK messaging tools and durable query
252
+ input. Add `pal grant/revoke/inbox/dispatch`: wake consent is explicit and finite
253
+ dispatch uses preapproved tools. No external transport, automatic listener or
254
+ Pal Team membership is installed by this feature.
255
+
256
+ - 56d88dc: Add `CompletionInbox.deferDelivery(taskId, settlement)` and `drainAsync(signal?)` so hosts can await an owned task's tracking writes before delivering its result. The existing synchronous `drain()` keeps pending deferred results queued and reports rejected writes without consuming results. Cancelling an asynchronous drain releases its waiter while retaining the tracking promise and result. Query notification waits respect the caller's existing cancellation/deadline, and finalizers and outstanding-work holds never wait again on pending tracking.
257
+
258
+ Coordinator background workers and abandoned foreground waits now settle their linked planning task and original approved plan step from the actual worker outcome exactly once. Completion notifications and explicit waits await that settlement. Replacing the active plan cannot redirect an old worker's outcome to a reused step ID. Direct background launches without a completion channel are refused before starting a worker.
259
+
260
+ Rejected scheduler admission also fails the linked planning record and original plan step rather than leaving them running. The original admission error is retained, an uncertain worker dispatch is not represented as absent, and failed tracking persistence reports both errors without retrying the worker.
261
+
262
+ - 7f5ac50: Add optional `MCPClientConfig.transportFactory` for caller-owned transports,
263
+ preserving built-in transport configurations and the existing MCP protocol
264
+ lifecycle without launching a host subprocess as fallback.
265
+
266
+ Add optional `Sandbox.openStdio` with allocation-owned interactive guest pipes,
267
+ byte streaming, confirmed process-group shutdown and explicit per-request device
268
+ operation barriers. Idle services permit operator takeover; an unknown issued
269
+ application operation permanently fences the allocation until computer stop and
270
+ cannot be cleared by a late response or closing an external application's MCP
271
+ server. The local Pal worker must be rebuilt alongside the runtime to advertise
272
+ interactive support. Older workers refuse this capability before spawning;
273
+ ordinary foreground, background, file and desktop APIs remain available.
274
+
275
+ Keep quiet interactive services alive with bounded worker heartbeat frames,
276
+ discarded by the matching runtime before application output and without
277
+ changing request ownership or uncertain-effect barriers. Rebuild the worker
278
+ and load the matching runtime together for the interactive protocol.
279
+
280
+ - 6f46da3: Add `PalRuntime.onLifecycle` for live computer and admission observations, with
281
+ unsubscribe and isolated listener failures. Add `createPalActivitySource` for
282
+ authorized, bounded pages of approved metadata from an owned original Pal journal.
283
+ No private message, tool argument, result or error body is exposed in activity facts.
284
+
285
+ Activity cursors must remain unchanged previously emitted outputs stored by a
286
+ trusted host. Their scope hash binds ownership but does not authenticate a client
287
+ cursor, and previously consumed prefixes are not rescanned. Hosts must resolve
288
+ stored cursors rather than accept model, renderer or remote anchors directly.
289
+
290
+ These observation APIs do not grant execution, approve actions or wake Pals.
291
+
292
+ - 5e2fb3a: `DiskPalActivitySubscriptionStore.list()` is an additive trusted-host read of frozen latest subscription records, including disabled subscriptions. A missing root returns an empty list, while malformed or unreadable committed records and aliased directories reject the complete projection. Hosts must still enforce tenant and participant access before exposing metadata.
293
+
294
+ Custom `PalActivitySubscriptionStore` implementations do not acquire a new required method, and existing create, get, consent and progress behavior is unchanged.
295
+
296
+ - 84a9472: Add optional provider-owned Pal computer takeover through `PalComputerControl`,
297
+ `PalComputerInput` and runtime control methods. Hosts can transfer an idle guest
298
+ to human input using its exact generation, return it without waking the Pal, and
299
+ observe current control authority. Providers without the optional port retain
300
+ normal Pal execution and explicitly refuse takeover.
301
+
302
+ The runtime serializes control operations, refuses new Pal admissions during
303
+ operator control, and requires each subsequent admission to obtain its own
304
+ fresh screenshot before GUI input. CLI desktop ACP exposes take-over, return and
305
+ bounded input methods; optional screen generation pinning rejects stale captures.
306
+
307
+ - c1027fb: Add a connected computer observation to `PalSystemPromptOptions.computer`, with the current control mode, so hosts can describe an existing device independently of permission to execute tools.
308
+
309
+ Fix Pal chat composition when the operator holds its connected computer. The Pal now receives its actual connected/control state instead of being told the computer is unavailable. Operator-held chat retains zero guest tools and performs no guest inspection or allocation; Return control admits the existing guest capabilities on the following turn.
310
+
311
+ - d8d562e: Add `buildPalSystemPrompt` and `PalSystemPromptOptions` for hosts to compose a
312
+ Pal's saved identity, conversational language, public output discipline and
313
+ truthful computer availability. The helper does not acquire execution authority.
314
+ CLI Pal sessions use these shared instructions while retaining their pinned
315
+ model and execution policy. Authenticated name and appearance edits update the
316
+ next turn's display identity without rewriting the original introduction.
317
+
318
+ Add `PalRuntime.admitConversation`, `PalConversationAdmission` and
319
+ `PalRuntime.computerChanging`. Hosts can admit exclusive model-only chat without
320
+ starting a computer, with current pause, cancellation and ownership checks.
321
+ Guest acquisition remains separate and requires the real guarded environment;
322
+ the existing mandatory `admit` contract is unchanged. CLI manual chat supplies
323
+ zero tools while offline or operator-controlled, then adopts the actual guest
324
+ toolset on a later turn after explicit startup or returned control. Directed
325
+ dispatch and checkpoint resume continue to require guest admission.
326
+ The standalone `pal chat` command keeps its existing computer-startup preflight.
327
+
328
+ Add `palConversationGreeting` and `PalConversationGreeting` to reconstruct a
329
+ stable English onboarding prelude from an owned conversation's original profile
330
+ revision. CLI Pal claim and list results expose this separate host-authored
331
+ intro without starting a model request or manufacturing a journal turn.
332
+ Pal desktop history omits explicit assistant commentary and tool-call narration
333
+ from its public display projection while retaining the original journal.
334
+
335
+ - 53aed2a: Add durable subscriptions for closed Pal activity metadata from an exact owned original conversation. Observation, disclosure, recipient receipt and idle wake have independent current permission checks. Custom publication authorizers must also implement the final accept phase requiring current observation, disclosure and receipt together. Accepted facts enter the shared Pal inbox before cursor progress; retries preserve identity and verified observation trails suppress feedback.
336
+
337
+ The CLI adds finite pal subscribe, subscription, activity and unsubscribe commands. Publication performs no inference or guest startup; explicit dispatch still requires current wake/tool authorization. Original turn intake and exact recorded delivery receipts are required for causality, and unknown evidence or exhausted journal read budgets reject without advancing progress.
338
+
339
+ - ce52b90: Add optional host-only `PalComputerScreenStream`, `PalEnvironmentLease.screenStream`
340
+ and `PalRuntime.computerScreenStream(palId, generation)` for observing an exact
341
+ current Pal computer over read-only RFB. Existing providers remain compatible;
342
+ providers without the optional capability explicitly refuse live observation.
343
+ Keep allocation authorization private in the embedding host and enforce read-only
344
+ observation server-side; the stream does not grant operator input authority.
345
+
346
+ The CLI exposes the owning desktop ACP stream method with geometry and generation
347
+ rechecks, and reuses initialized registry roots to avoid repeated Windows ACL
348
+ subprocesses while retaining fresh Pal definitions and directory identity checks.
349
+ The local computer image adds x11vnc and authenticated binary WebSocket transport.
350
+ Rebuild the installed image explicitly and restart the owning computer to enable
351
+ live observation; older images retain screenshot/input behavior and advertise no
352
+ stream capability. Persistent workspace and browser profile volumes survive.
353
+
354
+ The guest desktop includes a themed wallpaper, a real dock, Files, terminal and
355
+ browser launchers, plus a local browser home page. Normal browser-window closure
356
+ keeps the desktop alive; owned profile shutdown retains browser flush ordering.
357
+
358
+ - 815433f: Add `DiskPalStore.delete(id, expectedRevision)` and the desktop host's
359
+ `namzu/pals/delete` metadata endpoint. Deletion uses a terminal immutable revision,
360
+ hides the current Pal, and refuses future updates and execution admission while
361
+ preserving historical profiles, journals, host files, and guest data volumes.
362
+ Hosts must stop active work and confirm computer cleanup before deleting its
363
+ identity. Existing custom `PalStore` implementations require no new method.
364
+ Readers from older releases do not understand terminal deleted profiles and
365
+ should not be used to read a registry after deletion has been published.
366
+
367
+ Add the desktop host's `namzu/conversations/archive` endpoint. It performs a
368
+ scoped, writer-gated soft removal while retaining the durable conversation and
369
+ files. Successful retries return `archived: true`; a physically absent strict
370
+ journal returns `archived: false, missing: true`, never claiming that an absent
371
+ conversation was archived. Hosts may discard only their own known unsent local
372
+ projection from this missing receipt. Existing terminal archive commands are
373
+ unchanged.
374
+
375
+ Release a connection's exact idle native-engine writer before desktop archival,
376
+ reserving the conversation until the operation settles. Active or unresolved
377
+ work is refused and a failed native close retains cleanup authority for retry.
378
+ The runtime reservation method is optional for existing embeddings.
379
+
380
+ Keep a Pal's approved stored control-path spelling when Windows native path
381
+ resolution changes only its case, after verifying the same physical directory.
382
+ Physical project identity remains canonical, while existing Pal profile revisions
383
+ and journal ownership paths remain unchanged. Different directory objects and
384
+ non-case aliases are refused.
385
+
386
+ - 4367edc: Add opt-in held keyboard input for a Pal's operator-controlled guest. Providers
387
+ advertise `heldKeyboard: true` only after negotiating the owned guest's support;
388
+ `PalComputerInput` then accepts session-scoped `key_down`, `key_up` and
389
+ `release_keys`. Providers must release their tracked held keys before confirming
390
+ returned Pal authority. Existing complete `key` taps and AI `computer_use`
391
+ actions keep their behavior, and older local images do not advertise holds.
392
+
393
+ The desktop captures a new keyboard lifetime for each focus session, forwards
394
+ press and release events without replaying browser key repeats, and releases
395
+ only that lifetime on focus/view loss. Cleanup retains exact Pal/generation and
396
+ operator authority checks and cannot release another lifetime's keys. Rebuild
397
+ the local Pal image to enable this capability; a runtime update alone retains
398
+ the older image's tap input.
399
+
400
+ - 6f46da3: Add optional `PalAppearance` preferences to saved Pal definitions and create/update inputs. Character and color selections persist in immutable profile revisions; existing records retain their absent appearance and hosts may choose their own display default.
401
+
402
+ The CLI accepts `--appearance <character>/<color>` on `pal create` and `pal update`, and the desktop ACP create/update extensions carry the same validated preference. Supported characters are `pixel`, `sprout`, and `spark`; supported colors are `green`, `blue`, `amber`, `violet`, and `rose`.
403
+
404
+ - f7f48f9: Add persistent Pal identities, immutable profile revisions and an SDK runtime
405
+ that requires an explicitly provided virtual computer before execution. Hosts
406
+ can retain one warm computer per Pal, serialize active conversations, enforce
407
+ current pause state and retry failed computer cleanup without losing ownership.
408
+
409
+ Add `namzu pal list/create/show/update/pause/resume/chat` and desktop host Pal
410
+ methods. Pal conversations pin a saved profile and bind exactly one Pal in their
411
+ session log. File, shell and computer tools run in the Pal guest, with no host
412
+ folder, host browser or host plugin fallback. The local computer image and engine
413
+ must be set up explicitly before chat can execute.
414
+
415
+ - 846557b: Add `dryRunEdit(content, input)` and the `AcpFileChangePreview` type, and let each tool call in a `session/request_permission` request carry an optional `preview` (`{ path, before, after }`) that the bridge forwards untouched. `dryRunEdit` runs the `edit` tool's own schema and apply code (single replacement, `replace_all`, `edits[]`, `insertLine`) on a string, so a host can show exactly what an approved edit will write without touching the file. `resolveWithinAnyReal` is now exported beside `resolveWithinReal`. Nothing existing changes: a client that ignores `preview` and an agent that never sets it behave as before.
416
+ - 56d88dc: Allow `task_update` to mark a planning task `failed`, matching the existing TaskStore status. Add `stats.failed` to `task_list` and show failures separately in model receipts and operator presentation. Failed blockers stop waiting without being counted as completed; earlier terminal tasks remain excluded from later-turn planning views.
417
+ - e447a47: `tool_completed` gains an optional `savedPresentation`: one label line (at most 200
418
+ characters) or a command's first line, never the output, journaled for every call that
419
+ has no diff, and for an external engine's tools from a name map. Nothing existing
420
+ changes: `presentation` keeps its diff and cancelled/declined shapes, and live hosts
421
+ that ignore the new field behave as before. A host that replays history can read
422
+ `presentation ?? savedPresentation` so a reopened conversation names its actions
423
+ instead of showing a placeholder. The desktop host does.
424
+ - 57c99b2: Scheduled script jobs can opt out of a project folder with `workspace: none` (`--workspace none` in the CLI). Namzu creates a private working directory only after operator confirmation, and a script never loads that directory as a project configuration.
425
+
426
+ Interactive schedule proposals now bind noteworthy results to the exact source conversation. The CLI stores them as durable host notices and displays them on resume without adding a fake model turn or changing the model's conversation history. An optional JSON script report lets a polling script distinguish a quiet check from a change and carry a bounded scheduler-owned state value between runs.
427
+
428
+ The CLI default for newly confirmed interactive proposals changes from detached results to source-conversation delivery. An unavailable source keeps its result pending and holds later runs until delivery succeeds. Existing jobs retain their previous behavior. To keep a new job detached, review `namzu schedule edit <job> --delivery none`; the operator must confirm any exact pending results being waived. New workspace, source-delivery and report fields use job format v3, which older CLIs refuse rather than silently ignore. Upgrade the scheduler service together with the CLI.
429
+
430
+ - c590142: New scheduled agent phases now default to unlimited tokens (`tokenBudget: 0`)
431
+ instead of 500,000 tokens. A positive request or configured limit still applies,
432
+ and existing saved jobs retain their confirmed values. Set `limits.tokenBudget`
433
+ to `500000` or pass `--token-budget 500000` to retain the old default for new jobs.
434
+ To remove an existing job's limit, run `namzu schedule edit <name> --token-budget 0`
435
+ and confirm the edit. Iteration and timeout defaults remain unchanged.
436
+
437
+ The SDK schedule tool accepts zero for an unlimited agent token allowance.
438
+ Unlimited previews omit the numeric daily ceiling and identify the absence of a
439
+ token limit; usage accounting continues to measure actual tokens.
440
+
441
+ - 1fa60b9: The ACP bridge now sends a `provider_retry` session update when a model call fails
442
+ transiently and will be tried again: `attempt`, `maxRetries`, `delayMs`, an optional
443
+ HTTP `status`, `serverDirected` and the `turnId`. It carries no provider body, header
444
+ or credential. A client can show "waiting, retrying in 6 seconds" instead of a silent
445
+ spinner.
446
+
447
+ `AcpSessionUpdate` gains this member. A client that already ignores update kinds it
448
+ does not know needs no change; a client with an exhaustive `switch` over
449
+ `update.kind` should add a `provider_retry` case (or a default branch) before it
450
+ upgrades the type.
451
+
452
+ - 5a0a1f7: Expose optional `skipped: true` metadata on pre-tool hook completions, recovered completed-call records and step tool results. This distinguishes a non-error skip receipt from output produced by executing a tool. Existing records without the field remain unchanged.
453
+
454
+ A skipped standalone structured-output or terminal tool now returns its receipt to the model instead of failing JSON integrity checks or settling with an unexecuted answer. Skips do not consume structured schema corrections; cancellation and iteration limits still apply. The runtime creates the marker only for pre-tool hook skips and does not infer it from receipt text or tool-authored result fields.
455
+
456
+ - e447a47: `task_created` and `task_updated` session events, and the ACP `AcpTask` row, gain an
457
+ optional `activeForm` (what the task reads as while it is being worked on, such as
458
+ "Running the tests"). It is absent when the model gave none, so nothing existing
459
+ changes; a host that ignores it behaves as before. A host that draws a live plan can
460
+ show it beside the task in progress. The desktop host passes it on when it lists a
461
+ session's tasks.
462
+ - bebe135: A tool result can now say what the call did as typed fields, so a host builds what a person sees from fields and not from the model's text. Nothing you already send or receive changes shape, the text the model reads is unchanged, and no code needs to change to upgrade.
463
+
464
+ New and optional: `ToolResult.facts`, a closed union (`ToolFacts`) of a command's exit code and its stdout and stderr as head-and-tail windows (`ToolTextWindow`) or a note that the output was binary, a read's path and size, a search's and a listing's counts, whether a write created, updated or left a file, and the kind of a failure (`ToolFailureReason`). The built-in `bash`, `read`, `grep`, `glob`, `edit` and `write` tools set it, `tool_completed` and the ACP `tool_call` update carry it, a generic `ToolCallView` may carry `facts` for what the call is about, and `admitToolFacts` reads a saved one back. A call refused without running, an unknown tool and a thrown filesystem error also carry a `failure` fact. `execHostShell` additionally returns `stdoutBytes` and `stderrBytes`. A post-tool hook that replaces the output also drops `facts`, so a redaction is never undone.
465
+
466
+ If you build a view of tool output yourself, read these fields instead of the `STDOUT:` and `STDERR:` labels, the "Found 2 match(es)" and "1 replacement(s)" sentences and the notes about withheld credentials or shortened output, which are the model's interface and are not stable text to parse.
467
+
468
+ The Desktop app now words every tool row from those fields (Read a.ts, Searched for export, Ran npm test · failed (exit 3), Couldn't read missing.txt: file not found), draws a command's colours, folds long output to its first and last lines with Show more, says "Binary output, 3 KB" instead of printing the bytes, counts a finished edit in the reply's changes card, shows paths in approvals relative to the project, and leaves "0s" off work that took under a second. The CLI host restores a saved conversation's `facts` (without a command's output) so a reopened row reads the same.
469
+
470
+ ### Patch Changes
471
+
472
+ - 7f5ac50: Preserve the recorded failure explanation in ACP `turn_ended.error` when a
473
+ provider fault pauses a turn at a checkpoint. Hosts can display the actual
474
+ failure instead of silently showing only a stopped turn. The existing coarse
475
+ `cancelled` category and exact `paused` reason remain compatible; ordinary
476
+ review pauses and user cancellation do not produce an error.
477
+ - 1af4531: Preserve the runtime's completed tool presentation in ACP updates. File diffs and terminal results now reach ACP clients with the real result data instead of falling back to a generic text label. Older event producers without a presentation retain the existing fallback.
478
+ - c8613e0: Make the held sandbox acquisition timeout regression deterministic by controlling its clock after sandbox creation starts. Runtime cancellation and timeout behavior are unchanged.
479
+ - c1027fb: Enforce the existing tool-mode structured-output retry allowance for unrepaired invalid JSON, truncated arguments and schema mismatches, as well as missing output. All such responses share one counter; multiple invalid calls in a response consume one correction after every sibling result is recorded. The default remains two correction opportunities. Valid paired candidates, ordinary tool work, successful local repairs, host refusals and reviewer rejections retain their separate behavior.
480
+
481
+ Persist corrections in optional `Checkpoint.review.toolStructuredAttempts`, saving feedback and answered results before another request. Exhausted resumes stop without another model call, and completed argument-failure evidence survives pending-batch recovery without revalidation. Old checkpoints and tool records remain readable without rewriting their bytes or hashes. Hosts must continue supplying the output configuration when resuming.
482
+
483
+ - b6ea5ca: Models work on first open with nothing to set up. With nothing saved, Namzu Desktop and the terminal app now start on what they find, in this order: a sign-in Namzu already reuses (Claude Code, Codex), an API key in the environment, a local server (Ollama on port 11434, LM Studio on port 1234; each probe waits at most 300 ms and they run together), then the keyless Zen free models. They say what they picked in plain words ("Using your Claude sign-in, found on this computer.") and save nothing, so a key or sign-in added later wins on the next open. `/model` and the model picker change it.
484
+
485
+ What changes for you: in the terminal app a first run with an API key or a local server in the environment no longer stops at the provider picker; it starts on that provider. The picker still opens when nothing is available. In Desktop the keyless Zen free models now count as usable, as they already did in the terminal app, so a new person's message box is ready and Send works at once; the "Add an API key or sign in to start" card now appears only when nothing at all is available. To keep the old terminal behaviour of choosing yourself, save a choice once with `/model`.
486
+
487
+ When Zen declines a free request that carried no key, both apps now say "Zen didn’t accept the free model right now. Try again in a while, or choose another provider. A Zen API key also works." and keep the technical detail under Details (Desktop) or `--debug` (terminal). The generic `provider.permission` explanation in `@namzu/sdk` no longer says the key authenticated: a 403 only says the request was refused.
488
+
489
+ - bb0ad2e: Fail structured tool output explicitly when its retained receipt is no longer valid JSON, including without a reviewer, instead of publishing truncated or rewritten text as a successful structured result. Increase `maxToolOutputChars` for larger tool results or select native structured output with a capable provider.
490
+
491
+ Make `wait_for_task` report the underlying turn outcome and retain failure explanations even with an empty answer. Completed scheduler lifecycles containing failed, partial or cancelled turns no longer appear successful; legacy completed results without a turn status retain their existing behavior. Blocking `create_task` and linked planning failure notes also preserve those explanations and describe empty legacy completions accurately.
492
+
493
+ Report a planning-task status change that cannot be confirmed as failure with the requested and returned statuses. The store may have refused the request or a concurrent update may have advanced it; other requested edits may already have applied. Existing store transition policies remain unchanged; successful task updates retain their quiet presentation.
494
+
495
+ - 7f5ac50: Recognize a source-exact bare `[` POSIX test command as a literal program
496
+ instead of falsely classifying it as a glob-expanded command. This removes
497
+ unnecessary unknown-program approval prompts for ordinary shell predicates and
498
+ copy loops in automatically approved Pal guest work. Real bracket patterns,
499
+ runtime-produced program names, opaque shell constructs and dangerous-command
500
+ denials retain their existing review/refusal behavior.
501
+ - 7473449: Interactive terminals in the same project can discover and message one another
502
+ with `/peers`, `list_sessions` and `send_session_message`. Idle terminals can
503
+ start a turn for peer context; busy terminals receive it at the next safe
504
+ request boundary. Peer input remains separate from operator instructions and
505
+ cannot grant approval. Different permission modes are refused. Use `/peers off`
506
+ to refuse new mail and pause delivery in this terminal.
507
+
508
+ The mailbox is bounded and process-local; queued is an acceptance receipt, not
509
+ proof of model delivery. Conversation switches cannot redirect pending mail.
510
+ Child-task activity now labels accepted messages as queued, and SDK manager
511
+ documentation describes the inbound callback that query-backed agents actually
512
+ consume. The SDK peer envelope refers to the host's reply tool rather than
513
+ prescribing a CLI child-task tool.
514
+
515
+ - 6194bda: Forward tool starts and progress through the query event stream while an approved batch is still running. Previously these events were recorded immediately but reached the operator only after the batch finished, leaving long commands and readiness waits without a live tool row. Event-driven observation retains the existing authorization, result ordering and provider-valid batch boundaries.
516
+
517
+ Closing the stream during a live tool event cancels the captured batch and waits for executor settlement before releasing the recorder and borrowed turn resources. Tools must still honor their cancellation signal; this does not promise forced termination of arbitrary custom code.
518
+
519
+ - f4b7d1d: Honor MCP input schemas that explicitly declare dictionary values through
520
+ schema-valued `additionalProperties`, including the empty `{}` value schema.
521
+ Previously local validation silently removed those dictionary keys before
522
+ dispatch, so application input could report success with empty event data.
523
+ Retain declared keys, validate typed values and bound recursive dictionaries.
524
+ Existing omitted/false closed-object behavior, explicit true passthrough,
525
+ server trust, result provenance and execution guards remain unchanged.
526
+ - 6ff961f: A tool call made from inside another tool (for example through `run_code`) to a tool that declares `requiresApproval` for that input is now refused and audited, even when an allow rule covers it. An approval cannot be requested from inside another tool; call such a tool directly. Hosts that mounted `run_code` with an allow rule on an approval-gated tool will see it refused.
527
+ - 023224a: A failed OpenAI or Google request now reaches the host with the provider's own type, code, parameter and request ID, as an Anthropic failure already did, so Details read "Status: 403 · Provider said: “…” · Type: invalid*request_error · Code: model_not_found" with "Request ID: …" on its own line. The error's `detail` for a vendor SDK error whose message is only a sentence is now a JSON body of those fields (`{"error":{"message","type","code","param"},"request_id"}`) instead of the bare sentence; read `providerCode` or the `Details` of a host rather than matching the sentence text. The Google driver now reads its refusal body and request-ID header. The vendor project line in Details reads "Project: proj*…".
528
+ - 12b5af9: Compare actual error/output/content fingerprints before refusing identical failed calls. Different errors restart the streak, and a successful potentially mutating execution allows a new check after repair. Denied calls and unrelated reads cannot reset the guard. Repetition advice no longer claims an unobserved future result is certain.
529
+ - 093d657: A saved engine tool named `wait`, `wait_agent` or `waitagent` now reads "Waited for agent", and `close_agent`, `interrupt_agent` or `kill_agent` (any casing, with or without the underscore) read "Stopped agent", where they read "Used wait agent" and so on before. No export or type changes; a consumer that matched on the old label text should match the new one.
530
+ - f0aeb9b: The package page (README) of `@namzu/sdk` now explains the install, a first agent that needs no key, tools, a real model driver and the subsystem map. Only the README changed; no code, API or behaviour changed.
531
+ - 3727e2b: Keep an assistant message's runtime stream ID when recording its durable history and final settlement, including forced closing summaries. ACP clients can now reconcile the settled answer with its streamed message instead of displaying it twice. Distinct messages with identical text retain separate identities; caller-authored message IDs are not trusted as stream identities.
532
+ - 56d88dc: Creating a task with `blockedBy` and deleting a task now emit `task.updated` for each existing task whose reciprocal dependency list actually changed, before `task.created` or `task.deleted`. Disk and in-memory task stores keep live event projections aligned with their dependency records, without announcing unchanged rows or the deleted task's self-edge as a surviving task. Repeated blocker references no longer add duplicate reciprocal edges in the in-memory store; supplied `blockedBy` references remain intact.
533
+
534
+ Confirmed disk neighbor writes are announced immediately, even when a later neighbor write, new-task record write, or target-file deletion fails. No created or deleted event is emitted for an unsuccessful creation or deletion, and already persisted changes remain observable.
535
+
536
+ - 98e8469: Clarify that task_list returns open tasks and tasks closed in the current turn,
537
+ with earlier completed or failed tasks retained in storage but omitted. Its
538
+ output now reports retained omissions and distinguishes a filtered empty view
539
+ from finding no records; the human presenter also qualifies its counts. Task
540
+ selection, input and data.stats remain unchanged. Hosts needing all durable
541
+ records should read their authorized TaskStore rather than infer deletion from
542
+ this filtered tool result.
543
+
3
544
  ## 49.0.0
4
545
 
5
546
  ### Major Changes