@namzu/sdk 48.3.1 → 50.0.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 (838) hide show
  1. package/CHANGELOG.md +542 -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/registry.d.ts +2 -0
  32. package/dist/config/registry.d.ts.map +1 -1
  33. package/dist/config/registry.js +23 -3
  34. package/dist/config/registry.js.map +1 -1
  35. package/dist/config/runtime.d.ts +31 -31
  36. package/dist/connector/mcp/adapter.d.ts.map +1 -1
  37. package/dist/connector/mcp/adapter.js +11 -4
  38. package/dist/connector/mcp/adapter.js.map +1 -1
  39. package/dist/connector/mcp/client.d.ts.map +1 -1
  40. package/dist/connector/mcp/client.js +6 -3
  41. package/dist/connector/mcp/client.js.map +1 -1
  42. package/dist/connector/mcp/discovery.d.ts +9 -5
  43. package/dist/connector/mcp/discovery.d.ts.map +1 -1
  44. package/dist/connector/mcp/discovery.js +16 -8
  45. package/dist/connector/mcp/discovery.js.map +1 -1
  46. package/dist/connector/mcp/mcp-toolset.d.ts +3 -0
  47. package/dist/connector/mcp/mcp-toolset.d.ts.map +1 -1
  48. package/dist/connector/mcp/mcp-toolset.js +20 -2
  49. package/dist/connector/mcp/mcp-toolset.js.map +1 -1
  50. package/dist/connector/mcp/reconnect.d.ts +2 -0
  51. package/dist/connector/mcp/reconnect.d.ts.map +1 -1
  52. package/dist/connector/mcp/reconnect.js +36 -5
  53. package/dist/connector/mcp/reconnect.js.map +1 -1
  54. package/dist/constants/acp/index.d.ts +3 -0
  55. package/dist/constants/acp/index.d.ts.map +1 -1
  56. package/dist/constants/acp/index.js +3 -0
  57. package/dist/constants/acp/index.js.map +1 -1
  58. package/dist/contracts/a2a.d.ts +80 -80
  59. package/dist/contracts/schemas.d.ts +2 -2
  60. package/dist/contracts/session/schemas.d.ts +10 -10
  61. package/dist/manager/agent/lifecycle.d.ts +11 -0
  62. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  63. package/dist/manager/agent/lifecycle.js +178 -3
  64. package/dist/manager/agent/lifecycle.js.map +1 -1
  65. package/dist/manager/plan/lifecycle.d.ts +7 -8
  66. package/dist/manager/plan/lifecycle.d.ts.map +1 -1
  67. package/dist/manager/plan/lifecycle.js +7 -8
  68. package/dist/manager/plan/lifecycle.js.map +1 -1
  69. package/dist/manager/resident/consumption.d.ts +8 -8
  70. package/dist/manager/resident/learning-cycle.d.ts +2 -2
  71. package/dist/manager/resident/learning-observation.d.ts +12 -12
  72. package/dist/manager/resident/learning.d.ts +82 -82
  73. package/dist/manager/resident/outbox.d.ts +8 -8
  74. package/dist/manager/resident/proposal.d.ts +2 -2
  75. package/dist/manager/resident/store.d.ts +10 -10
  76. package/dist/manager/session/attribution.d.ts +1 -0
  77. package/dist/manager/session/attribution.d.ts.map +1 -1
  78. package/dist/manager/session/attribution.js +9 -1
  79. package/dist/manager/session/attribution.js.map +1 -1
  80. package/dist/manager/session/streamed-message-identity.d.ts +6 -0
  81. package/dist/manager/session/streamed-message-identity.d.ts.map +1 -0
  82. package/dist/manager/session/streamed-message-identity.js +14 -0
  83. package/dist/manager/session/streamed-message-identity.js.map +1 -0
  84. package/dist/manager/session/turn-recorder.d.ts.map +1 -1
  85. package/dist/manager/session/turn-recorder.js +4 -3
  86. package/dist/manager/session/turn-recorder.js.map +1 -1
  87. package/dist/pals/activity/causality.d.ts +23 -0
  88. package/dist/pals/activity/causality.d.ts.map +1 -0
  89. package/dist/pals/activity/causality.js +205 -0
  90. package/dist/pals/activity/causality.js.map +1 -0
  91. package/dist/pals/activity/projection.d.ts +5 -0
  92. package/dist/pals/activity/projection.d.ts.map +1 -0
  93. package/dist/pals/activity/projection.js +79 -0
  94. package/dist/pals/activity/projection.js.map +1 -0
  95. package/dist/pals/activity/source.d.ts +16 -0
  96. package/dist/pals/activity/source.d.ts.map +1 -0
  97. package/dist/pals/activity/source.js +235 -0
  98. package/dist/pals/activity/source.js.map +1 -0
  99. package/dist/pals/activity/subscription-policy.d.ts +38 -0
  100. package/dist/pals/activity/subscription-policy.d.ts.map +1 -0
  101. package/dist/pals/activity/subscription-policy.js +183 -0
  102. package/dist/pals/activity/subscription-policy.js.map +1 -0
  103. package/dist/pals/activity/subscription-schema.d.ts +353 -0
  104. package/dist/pals/activity/subscription-schema.d.ts.map +1 -0
  105. package/dist/pals/activity/subscription-schema.js +24 -0
  106. package/dist/pals/activity/subscription-schema.js.map +1 -0
  107. package/dist/pals/activity/subscription-store.d.ts +25 -0
  108. package/dist/pals/activity/subscription-store.d.ts.map +1 -0
  109. package/dist/pals/activity/subscription-store.js +152 -0
  110. package/dist/pals/activity/subscription-store.js.map +1 -0
  111. package/dist/pals/activity/subscription-types.d.ts +42 -0
  112. package/dist/pals/activity/subscription-types.d.ts.map +1 -0
  113. package/dist/pals/activity/subscription-types.js +2 -0
  114. package/dist/pals/activity/subscription-types.js.map +1 -0
  115. package/dist/pals/activity/subscriptions.d.ts +32 -0
  116. package/dist/pals/activity/subscriptions.d.ts.map +1 -0
  117. package/dist/pals/activity/subscriptions.js +151 -0
  118. package/dist/pals/activity/subscriptions.js.map +1 -0
  119. package/dist/pals/activity/types.d.ts +77 -0
  120. package/dist/pals/activity/types.d.ts.map +1 -0
  121. package/dist/pals/activity/types.js +2 -0
  122. package/dist/pals/activity/types.js.map +1 -0
  123. package/dist/pals/channels/ingress.d.ts +9 -0
  124. package/dist/pals/channels/ingress.d.ts.map +1 -0
  125. package/dist/pals/channels/ingress.js +131 -0
  126. package/dist/pals/channels/ingress.js.map +1 -0
  127. package/dist/pals/channels/routes.d.ts +20 -0
  128. package/dist/pals/channels/routes.d.ts.map +1 -0
  129. package/dist/pals/channels/routes.js +111 -0
  130. package/dist/pals/channels/routes.js.map +1 -0
  131. package/dist/pals/channels/routing.d.ts +37 -0
  132. package/dist/pals/channels/routing.d.ts.map +1 -0
  133. package/dist/pals/channels/routing.js +150 -0
  134. package/dist/pals/channels/routing.js.map +1 -0
  135. package/dist/pals/channels/schema.d.ts +234 -0
  136. package/dist/pals/channels/schema.d.ts.map +1 -0
  137. package/dist/pals/channels/schema.js +94 -0
  138. package/dist/pals/channels/schema.js.map +1 -0
  139. package/dist/pals/channels/types.d.ts +115 -0
  140. package/dist/pals/channels/types.d.ts.map +1 -0
  141. package/dist/pals/channels/types.js +2 -0
  142. package/dist/pals/channels/types.js.map +1 -0
  143. package/dist/pals/communication/broker.d.ts +8 -0
  144. package/dist/pals/communication/broker.d.ts.map +1 -0
  145. package/dist/pals/communication/broker.js +121 -0
  146. package/dist/pals/communication/broker.js.map +1 -0
  147. package/dist/pals/communication/dispatch.d.ts +4 -0
  148. package/dist/pals/communication/dispatch.d.ts.map +1 -0
  149. package/dist/pals/communication/dispatch.js +57 -0
  150. package/dist/pals/communication/dispatch.js.map +1 -0
  151. package/dist/pals/communication/inbound.d.ts +9 -0
  152. package/dist/pals/communication/inbound.d.ts.map +1 -0
  153. package/dist/pals/communication/inbound.js +155 -0
  154. package/dist/pals/communication/inbound.js.map +1 -0
  155. package/dist/pals/communication/ingress-dispatch.d.ts +5 -0
  156. package/dist/pals/communication/ingress-dispatch.d.ts.map +1 -0
  157. package/dist/pals/communication/ingress-dispatch.js +51 -0
  158. package/dist/pals/communication/ingress-dispatch.js.map +1 -0
  159. package/dist/pals/communication/ingress-inbound.d.ts +9 -0
  160. package/dist/pals/communication/ingress-inbound.d.ts.map +1 -0
  161. package/dist/pals/communication/ingress-inbound.js +222 -0
  162. package/dist/pals/communication/ingress-inbound.js.map +1 -0
  163. package/dist/pals/communication/ingress-schema.d.ts +7829 -0
  164. package/dist/pals/communication/ingress-schema.d.ts.map +1 -0
  165. package/dist/pals/communication/ingress-schema.js +479 -0
  166. package/dist/pals/communication/ingress-schema.js.map +1 -0
  167. package/dist/pals/communication/ingress-types.d.ts +187 -0
  168. package/dist/pals/communication/ingress-types.d.ts.map +1 -0
  169. package/dist/pals/communication/ingress-types.js +73 -0
  170. package/dist/pals/communication/ingress-types.js.map +1 -0
  171. package/dist/pals/communication/operator.d.ts +75 -0
  172. package/dist/pals/communication/operator.d.ts.map +1 -0
  173. package/dist/pals/communication/operator.js +217 -0
  174. package/dist/pals/communication/operator.js.map +1 -0
  175. package/dist/pals/communication/policy.d.ts +41 -0
  176. package/dist/pals/communication/policy.d.ts.map +1 -0
  177. package/dist/pals/communication/policy.js +138 -0
  178. package/dist/pals/communication/policy.js.map +1 -0
  179. package/dist/pals/communication/schema.d.ts +2000 -0
  180. package/dist/pals/communication/schema.d.ts.map +1 -0
  181. package/dist/pals/communication/schema.js +170 -0
  182. package/dist/pals/communication/schema.js.map +1 -0
  183. package/dist/pals/communication/store.d.ts +61 -0
  184. package/dist/pals/communication/store.d.ts.map +1 -0
  185. package/dist/pals/communication/store.js +450 -0
  186. package/dist/pals/communication/store.js.map +1 -0
  187. package/dist/pals/communication/tools.d.ts +23 -0
  188. package/dist/pals/communication/tools.d.ts.map +1 -0
  189. package/dist/pals/communication/tools.js +107 -0
  190. package/dist/pals/communication/tools.js.map +1 -0
  191. package/dist/pals/communication/types.d.ts +168 -0
  192. package/dist/pals/communication/types.d.ts.map +1 -0
  193. package/dist/pals/communication/types.js +24 -0
  194. package/dist/pals/communication/types.js.map +1 -0
  195. package/dist/pals/communication/verify.d.ts +22 -0
  196. package/dist/pals/communication/verify.d.ts.map +1 -0
  197. package/dist/pals/communication/verify.js +142 -0
  198. package/dist/pals/communication/verify.js.map +1 -0
  199. package/dist/pals/lifecycle.d.ts +37 -0
  200. package/dist/pals/lifecycle.d.ts.map +1 -0
  201. package/dist/pals/lifecycle.js +22 -0
  202. package/dist/pals/lifecycle.js.map +1 -0
  203. package/dist/pals/prompt.d.ts +30 -0
  204. package/dist/pals/prompt.d.ts.map +1 -0
  205. package/dist/pals/prompt.js +65 -0
  206. package/dist/pals/prompt.js.map +1 -0
  207. package/dist/pals/reference-images.d.ts +44 -0
  208. package/dist/pals/reference-images.d.ts.map +1 -0
  209. package/dist/pals/reference-images.js +248 -0
  210. package/dist/pals/reference-images.js.map +1 -0
  211. package/dist/pals/runtime.d.ts +46 -0
  212. package/dist/pals/runtime.d.ts.map +1 -0
  213. package/dist/pals/runtime.js +624 -0
  214. package/dist/pals/runtime.js.map +1 -0
  215. package/dist/pals/store.d.ts +26 -0
  216. package/dist/pals/store.d.ts.map +1 -0
  217. package/dist/pals/store.js +334 -0
  218. package/dist/pals/store.js.map +1 -0
  219. package/dist/pals/types.d.ts +145 -0
  220. package/dist/pals/types.d.ts.map +1 -0
  221. package/dist/pals/types.js +2 -0
  222. package/dist/pals/types.js.map +1 -0
  223. package/dist/peers/envelope.js +1 -1
  224. package/dist/peers/envelope.js.map +1 -1
  225. package/dist/peers/protocol.d.ts +83 -83
  226. package/dist/peers/record.d.ts +10 -10
  227. package/dist/plugin/lifecycle.d.ts +14 -10
  228. package/dist/plugin/lifecycle.d.ts.map +1 -1
  229. package/dist/plugin/lifecycle.js +178 -41
  230. package/dist/plugin/lifecycle.js.map +1 -1
  231. package/dist/plugin/shell-hook.d.ts.map +1 -1
  232. package/dist/plugin/shell-hook.js +7 -2
  233. package/dist/plugin/shell-hook.js.map +1 -1
  234. package/dist/process/kill-tree.d.ts.map +1 -1
  235. package/dist/process/kill-tree.js +9 -1
  236. package/dist/process/kill-tree.js.map +1 -1
  237. package/dist/prompt/resident-learning.js +2 -2
  238. package/dist/prompt/resident-learning.js.map +1 -1
  239. package/dist/prompt/resident-step.d.ts +2 -2
  240. package/dist/prompt/resident-step.js +4 -4
  241. package/dist/prompt/resident-step.js.map +1 -1
  242. package/dist/provider/errors.d.ts +19 -0
  243. package/dist/provider/errors.d.ts.map +1 -1
  244. package/dist/provider/errors.js +123 -2
  245. package/dist/provider/errors.js.map +1 -1
  246. package/dist/public-runtime.d.ts +43 -15
  247. package/dist/public-runtime.d.ts.map +1 -1
  248. package/dist/public-runtime.js +37 -9
  249. package/dist/public-runtime.js.map +1 -1
  250. package/dist/public-tools.d.ts +8 -3
  251. package/dist/public-tools.d.ts.map +1 -1
  252. package/dist/public-tools.js +8 -3
  253. package/dist/public-tools.js.map +1 -1
  254. package/dist/public-types.d.ts +27 -7
  255. package/dist/public-types.d.ts.map +1 -1
  256. package/dist/registry/tool/presentation.d.ts +1 -0
  257. package/dist/registry/tool/presentation.d.ts.map +1 -1
  258. package/dist/registry/tool/presentation.js +9 -7
  259. package/dist/registry/tool/presentation.js.map +1 -1
  260. package/dist/registry/tool/screen.d.ts.map +1 -1
  261. package/dist/registry/tool/screen.js +33 -2
  262. package/dist/registry/tool/screen.js.map +1 -1
  263. package/dist/runtime/harness-session/index.d.ts +5 -0
  264. package/dist/runtime/harness-session/index.d.ts.map +1 -0
  265. package/dist/runtime/harness-session/index.js +928 -0
  266. package/dist/runtime/harness-session/index.js.map +1 -0
  267. package/dist/runtime/harness-session/journal.d.ts +37 -0
  268. package/dist/runtime/harness-session/journal.d.ts.map +1 -0
  269. package/dist/runtime/harness-session/journal.js +177 -0
  270. package/dist/runtime/harness-session/journal.js.map +1 -0
  271. package/dist/runtime/harness-session/saved-view.d.ts +8 -0
  272. package/dist/runtime/harness-session/saved-view.d.ts.map +1 -0
  273. package/dist/runtime/harness-session/saved-view.js +112 -0
  274. package/dist/runtime/harness-session/saved-view.js.map +1 -0
  275. package/dist/runtime/jobs/awaited-jobs.d.ts +2 -1
  276. package/dist/runtime/jobs/awaited-jobs.d.ts.map +1 -1
  277. package/dist/runtime/jobs/awaited-jobs.js +2 -1
  278. package/dist/runtime/jobs/awaited-jobs.js.map +1 -1
  279. package/dist/runtime/jobs/registry.d.ts +56 -1
  280. package/dist/runtime/jobs/registry.d.ts.map +1 -1
  281. package/dist/runtime/jobs/registry.js +377 -39
  282. package/dist/runtime/jobs/registry.js.map +1 -1
  283. package/dist/runtime/query/abandon-turn.d.ts +12 -1
  284. package/dist/runtime/query/abandon-turn.d.ts.map +1 -1
  285. package/dist/runtime/query/abandon-turn.js +3 -1
  286. package/dist/runtime/query/abandon-turn.js.map +1 -1
  287. package/dist/runtime/query/checkpoint.d.ts +4 -0
  288. package/dist/runtime/query/checkpoint.d.ts.map +1 -1
  289. package/dist/runtime/query/checkpoint.js +10 -0
  290. package/dist/runtime/query/checkpoint.js.map +1 -1
  291. package/dist/runtime/query/durable-inbound.d.ts +5 -0
  292. package/dist/runtime/query/durable-inbound.d.ts.map +1 -0
  293. package/dist/runtime/query/durable-inbound.js +89 -0
  294. package/dist/runtime/query/durable-inbound.js.map +1 -0
  295. package/dist/runtime/query/events.d.ts +4 -0
  296. package/dist/runtime/query/events.d.ts.map +1 -1
  297. package/dist/runtime/query/events.js +22 -5
  298. package/dist/runtime/query/events.js.map +1 -1
  299. package/dist/runtime/query/executor/tool-call-admission.d.ts +5 -1
  300. package/dist/runtime/query/executor/tool-call-admission.d.ts.map +1 -1
  301. package/dist/runtime/query/executor/tool-call-admission.js +85 -13
  302. package/dist/runtime/query/executor/tool-call-admission.js.map +1 -1
  303. package/dist/runtime/query/executor.d.ts +41 -18
  304. package/dist/runtime/query/executor.d.ts.map +1 -1
  305. package/dist/runtime/query/executor.js +227 -114
  306. package/dist/runtime/query/executor.js.map +1 -1
  307. package/dist/runtime/query/index.d.ts +9 -0
  308. package/dist/runtime/query/index.d.ts.map +1 -1
  309. package/dist/runtime/query/index.js +41 -5
  310. package/dist/runtime/query/index.js.map +1 -1
  311. package/dist/runtime/query/iteration/index.d.ts +18 -6
  312. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  313. package/dist/runtime/query/iteration/index.js +176 -75
  314. package/dist/runtime/query/iteration/index.js.map +1 -1
  315. package/dist/runtime/query/iteration/outstanding-work.d.ts +9 -5
  316. package/dist/runtime/query/iteration/outstanding-work.d.ts.map +1 -1
  317. package/dist/runtime/query/iteration/outstanding-work.js +63 -6
  318. package/dist/runtime/query/iteration/outstanding-work.js.map +1 -1
  319. package/dist/runtime/query/iteration/phases/context.d.ts +8 -0
  320. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  321. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  322. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  323. package/dist/runtime/query/iteration/phases/tool-review.js +106 -17
  324. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  325. package/dist/runtime/query/iteration/step-shaping.d.ts +2 -0
  326. package/dist/runtime/query/iteration/step-shaping.d.ts.map +1 -1
  327. package/dist/runtime/query/iteration/step-shaping.js +5 -1
  328. package/dist/runtime/query/iteration/step-shaping.js.map +1 -1
  329. package/dist/runtime/query/observation-context.d.ts +2 -2
  330. package/dist/runtime/query/observation-context.d.ts.map +1 -1
  331. package/dist/runtime/query/observation-context.js +20 -13
  332. package/dist/runtime/query/observation-context.js.map +1 -1
  333. package/dist/runtime/query/prepare-turn.js +2 -2
  334. package/dist/runtime/query/prepare-turn.js.map +1 -1
  335. package/dist/runtime/query/prompt-cache.d.ts +1 -0
  336. package/dist/runtime/query/prompt-cache.d.ts.map +1 -1
  337. package/dist/runtime/query/prompt-cache.js +2 -0
  338. package/dist/runtime/query/prompt-cache.js.map +1 -1
  339. package/dist/runtime/query/prompt.d.ts +2 -0
  340. package/dist/runtime/query/prompt.d.ts.map +1 -1
  341. package/dist/runtime/query/prompt.js +23 -1
  342. package/dist/runtime/query/prompt.js.map +1 -1
  343. package/dist/runtime/query/repeat-call.d.ts +12 -3
  344. package/dist/runtime/query/repeat-call.d.ts.map +1 -1
  345. package/dist/runtime/query/repeat-call.js +33 -10
  346. package/dist/runtime/query/repeat-call.js.map +1 -1
  347. package/dist/runtime/query/resume-pending.d.ts +5 -6
  348. package/dist/runtime/query/resume-pending.d.ts.map +1 -1
  349. package/dist/runtime/query/resume-pending.js +30 -3
  350. package/dist/runtime/query/resume-pending.js.map +1 -1
  351. package/dist/runtime/query/resume-session.js +1 -1
  352. package/dist/runtime/query/resume-session.js.map +1 -1
  353. package/dist/runtime/query/review-policy.d.ts +8 -1
  354. package/dist/runtime/query/review-policy.d.ts.map +1 -1
  355. package/dist/runtime/query/review-policy.js +6 -0
  356. package/dist/runtime/query/review-policy.js.map +1 -1
  357. package/dist/runtime/query/saved-presentation.d.ts +13 -0
  358. package/dist/runtime/query/saved-presentation.d.ts.map +1 -0
  359. package/dist/runtime/query/saved-presentation.js +63 -0
  360. package/dist/runtime/query/saved-presentation.js.map +1 -0
  361. package/dist/runtime/query/steering.d.ts +6 -9
  362. package/dist/runtime/query/steering.d.ts.map +1 -1
  363. package/dist/runtime/query/steering.js.map +1 -1
  364. package/dist/runtime/query/tool-executions.d.ts +7 -3
  365. package/dist/runtime/query/tool-executions.d.ts.map +1 -1
  366. package/dist/runtime/query/tool-executions.js +89 -9
  367. package/dist/runtime/query/tool-executions.js.map +1 -1
  368. package/dist/runtime/query/tooling.d.ts +3 -1
  369. package/dist/runtime/query/tooling.d.ts.map +1 -1
  370. package/dist/runtime/query/tooling.js +3 -0
  371. package/dist/runtime/query/tooling.js.map +1 -1
  372. package/dist/scheduler/completion-inbox.d.ts +25 -1
  373. package/dist/scheduler/completion-inbox.d.ts.map +1 -1
  374. package/dist/scheduler/completion-inbox.js +102 -8
  375. package/dist/scheduler/completion-inbox.js.map +1 -1
  376. package/dist/scheduler/delegating.d.ts.map +1 -1
  377. package/dist/scheduler/delegating.js +5 -0
  378. package/dist/scheduler/delegating.js.map +1 -1
  379. package/dist/scheduler/local.d.ts.map +1 -1
  380. package/dist/scheduler/local.js +2 -0
  381. package/dist/scheduler/local.js.map +1 -1
  382. package/dist/session/summary/materialize.d.ts +10 -6
  383. package/dist/session/summary/materialize.d.ts.map +1 -1
  384. package/dist/session/summary/materialize.js +41 -8
  385. package/dist/session/summary/materialize.js.map +1 -1
  386. package/dist/store/budget/ledger.d.ts +9 -0
  387. package/dist/store/budget/ledger.d.ts.map +1 -1
  388. package/dist/store/budget/ledger.js +58 -6
  389. package/dist/store/budget/ledger.js.map +1 -1
  390. package/dist/store/evidence/index-page.d.ts +12 -12
  391. package/dist/store/evidence/source-text.d.ts +4 -4
  392. package/dist/store/index.d.ts +1 -0
  393. package/dist/store/index.d.ts.map +1 -1
  394. package/dist/store/index.js +1 -0
  395. package/dist/store/index.js.map +1 -1
  396. package/dist/store/memory/disk.d.ts +7 -2
  397. package/dist/store/memory/disk.d.ts.map +1 -1
  398. package/dist/store/memory/disk.js +58 -5
  399. package/dist/store/memory/disk.js.map +1 -1
  400. package/dist/store/memory/index.d.ts +9 -0
  401. package/dist/store/memory/index.d.ts.map +1 -1
  402. package/dist/store/memory/index.js +43 -5
  403. package/dist/store/memory/index.js.map +1 -1
  404. package/dist/store/memory/markdown.d.ts +7 -2
  405. package/dist/store/memory/markdown.d.ts.map +1 -1
  406. package/dist/store/memory/markdown.js +33 -0
  407. package/dist/store/memory/markdown.js.map +1 -1
  408. package/dist/store/memory/memory.d.ts +7 -2
  409. package/dist/store/memory/memory.d.ts.map +1 -1
  410. package/dist/store/memory/memory.js +34 -0
  411. package/dist/store/memory/memory.js.map +1 -1
  412. package/dist/store/memory/revision.d.ts +16 -0
  413. package/dist/store/memory/revision.d.ts.map +1 -0
  414. package/dist/store/memory/revision.js +144 -0
  415. package/dist/store/memory/revision.js.map +1 -0
  416. package/dist/store/session/disk.d.ts +9 -4
  417. package/dist/store/session/disk.d.ts.map +1 -1
  418. package/dist/store/session/disk.js +57 -11
  419. package/dist/store/session/disk.js.map +1 -1
  420. package/dist/store/session/memory.d.ts +5 -3
  421. package/dist/store/session/memory.d.ts.map +1 -1
  422. package/dist/store/session/memory.js +24 -7
  423. package/dist/store/session/memory.js.map +1 -1
  424. package/dist/store/session-log/core.d.ts +26 -6
  425. package/dist/store/session-log/core.d.ts.map +1 -1
  426. package/dist/store/session-log/core.js +61 -8
  427. package/dist/store/session-log/core.js.map +1 -1
  428. package/dist/store/session-log/disk.d.ts +2 -2
  429. package/dist/store/session-log/disk.d.ts.map +1 -1
  430. package/dist/store/session-log/disk.js +1 -0
  431. package/dist/store/session-log/disk.js.map +1 -1
  432. package/dist/store/session-log/fold.d.ts +7 -0
  433. package/dist/store/session-log/fold.d.ts.map +1 -1
  434. package/dist/store/session-log/fold.js +21 -0
  435. package/dist/store/session-log/fold.js.map +1 -1
  436. package/dist/store/session-log/index.d.ts +5 -3
  437. package/dist/store/session-log/index.d.ts.map +1 -1
  438. package/dist/store/session-log/index.js +3 -1
  439. package/dist/store/session-log/index.js.map +1 -1
  440. package/dist/store/session-log/memory.d.ts +1 -1
  441. package/dist/store/session-log/memory.d.ts.map +1 -1
  442. package/dist/store/session-log/memory.js +1 -0
  443. package/dist/store/session-log/memory.js.map +1 -1
  444. package/dist/store/session-log/spill.d.ts +10 -3
  445. package/dist/store/session-log/spill.d.ts.map +1 -1
  446. package/dist/store/session-log/spill.js +70 -5
  447. package/dist/store/session-log/spill.js.map +1 -1
  448. package/dist/store/session-log/structured-result.d.ts +21 -0
  449. package/dist/store/session-log/structured-result.d.ts.map +1 -0
  450. package/dist/store/session-log/structured-result.js +67 -0
  451. package/dist/store/session-log/structured-result.js.map +1 -0
  452. package/dist/store/task/disk.d.ts +11 -0
  453. package/dist/store/task/disk.d.ts.map +1 -1
  454. package/dist/store/task/disk.js +41 -2
  455. package/dist/store/task/disk.js.map +1 -1
  456. package/dist/store/task/memory.d.ts.map +1 -1
  457. package/dist/store/task/memory.js +15 -3
  458. package/dist/store/task/memory.js.map +1 -1
  459. package/dist/tools/admit-facts.d.ts +13 -0
  460. package/dist/tools/admit-facts.d.ts.map +1 -0
  461. package/dist/tools/admit-facts.js +142 -0
  462. package/dist/tools/admit-facts.js.map +1 -0
  463. package/dist/tools/builtins/bash.d.ts +4 -1
  464. package/dist/tools/builtins/bash.d.ts.map +1 -1
  465. package/dist/tools/builtins/bash.js +108 -22
  466. package/dist/tools/builtins/bash.js.map +1 -1
  467. package/dist/tools/builtins/browser.d.ts +10 -10
  468. package/dist/tools/builtins/computer-use.d.ts +90 -90
  469. package/dist/tools/builtins/edit.d.ts +17 -0
  470. package/dist/tools/builtins/edit.d.ts.map +1 -1
  471. package/dist/tools/builtins/edit.js +34 -0
  472. package/dist/tools/builtins/edit.js.map +1 -1
  473. package/dist/tools/builtins/file-write-result.d.ts.map +1 -1
  474. package/dist/tools/builtins/file-write-result.js +13 -0
  475. package/dist/tools/builtins/file-write-result.js.map +1 -1
  476. package/dist/tools/builtins/glob.d.ts.map +1 -1
  477. package/dist/tools/builtins/glob.js +12 -0
  478. package/dist/tools/builtins/glob.js.map +1 -1
  479. package/dist/tools/builtins/grep.d.ts.map +1 -1
  480. package/dist/tools/builtins/grep.js +14 -0
  481. package/dist/tools/builtins/grep.js.map +1 -1
  482. package/dist/tools/builtins/index.d.ts +2 -0
  483. package/dist/tools/builtins/index.d.ts.map +1 -1
  484. package/dist/tools/builtins/index.js +1 -0
  485. package/dist/tools/builtins/index.js.map +1 -1
  486. package/dist/tools/builtins/job.d.ts.map +1 -1
  487. package/dist/tools/builtins/job.js +4 -1
  488. package/dist/tools/builtins/job.js.map +1 -1
  489. package/dist/tools/builtins/lsp.d.ts +2 -2
  490. package/dist/tools/builtins/read-file.d.ts.map +1 -1
  491. package/dist/tools/builtins/read-file.js +49 -0
  492. package/dist/tools/builtins/read-file.js.map +1 -1
  493. package/dist/tools/builtins/view-image.d.ts +24 -0
  494. package/dist/tools/builtins/view-image.d.ts.map +1 -0
  495. package/dist/tools/builtins/view-image.js +385 -0
  496. package/dist/tools/builtins/view-image.js.map +1 -0
  497. package/dist/tools/builtins/wait-for-job-bounds.d.ts +8 -4
  498. package/dist/tools/builtins/wait-for-job-bounds.d.ts.map +1 -1
  499. package/dist/tools/builtins/wait-for-job-bounds.js +43 -8
  500. package/dist/tools/builtins/wait-for-job-bounds.js.map +1 -1
  501. package/dist/tools/builtins/wait-for-job.d.ts +3 -0
  502. package/dist/tools/builtins/wait-for-job.d.ts.map +1 -1
  503. package/dist/tools/builtins/wait-for-job.js +127 -15
  504. package/dist/tools/builtins/wait-for-job.js.map +1 -1
  505. package/dist/tools/builtins/write-file.d.ts.map +1 -1
  506. package/dist/tools/builtins/write-file.js +1 -0
  507. package/dist/tools/builtins/write-file.js.map +1 -1
  508. package/dist/tools/command-shell.d.ts +37 -2
  509. package/dist/tools/command-shell.d.ts.map +1 -1
  510. package/dist/tools/command-shell.js +100 -3
  511. package/dist/tools/command-shell.js.map +1 -1
  512. package/dist/tools/coordinator/agent.d.ts +9 -19
  513. package/dist/tools/coordinator/agent.d.ts.map +1 -1
  514. package/dist/tools/coordinator/agent.js.map +1 -1
  515. package/dist/tools/coordinator/index.d.ts.map +1 -1
  516. package/dist/tools/coordinator/index.js +127 -67
  517. package/dist/tools/coordinator/index.js.map +1 -1
  518. package/dist/tools/coordinator/wait-with-idle-bound.d.ts +2 -0
  519. package/dist/tools/coordinator/wait-with-idle-bound.d.ts.map +1 -1
  520. package/dist/tools/coordinator/wait-with-idle-bound.js +1 -1
  521. package/dist/tools/coordinator/wait-with-idle-bound.js.map +1 -1
  522. package/dist/tools/defineTool.d.ts.map +1 -1
  523. package/dist/tools/defineTool.js +4 -0
  524. package/dist/tools/defineTool.js.map +1 -1
  525. package/dist/tools/failure-facts.d.ts +8 -0
  526. package/dist/tools/failure-facts.d.ts.map +1 -0
  527. package/dist/tools/failure-facts.js +24 -0
  528. package/dist/tools/failure-facts.js.map +1 -0
  529. package/dist/tools/host-output.d.ts +24 -0
  530. package/dist/tools/host-output.d.ts.map +1 -0
  531. package/dist/tools/host-output.js +117 -0
  532. package/dist/tools/host-output.js.map +1 -0
  533. package/dist/tools/memory/delete.d.ts.map +1 -1
  534. package/dist/tools/memory/delete.js +38 -3
  535. package/dist/tools/memory/delete.js.map +1 -1
  536. package/dist/tools/memory/read.d.ts.map +1 -1
  537. package/dist/tools/memory/read.js +38 -2
  538. package/dist/tools/memory/read.js.map +1 -1
  539. package/dist/tools/memory/search.d.ts.map +1 -1
  540. package/dist/tools/memory/search.js +38 -7
  541. package/dist/tools/memory/search.js.map +1 -1
  542. package/dist/tools/memory/update.d.ts.map +1 -1
  543. package/dist/tools/memory/update.js +30 -3
  544. package/dist/tools/memory/update.js.map +1 -1
  545. package/dist/tools/oem-code-pages.d.ts +8 -0
  546. package/dist/tools/oem-code-pages.d.ts.map +1 -0
  547. package/dist/tools/oem-code-pages.js +23 -0
  548. package/dist/tools/oem-code-pages.js.map +1 -0
  549. package/dist/tools/schedules/schedule-tool.d.ts.map +1 -1
  550. package/dist/tools/schedules/schedule-tool.js +35 -6
  551. package/dist/tools/schedules/schedule-tool.js.map +1 -1
  552. package/dist/tools/schedules/types.d.ts +23 -3
  553. package/dist/tools/schedules/types.d.ts.map +1 -1
  554. package/dist/tools/task/list.d.ts.map +1 -1
  555. package/dist/tools/task/list.js +14 -6
  556. package/dist/tools/task/list.js.map +1 -1
  557. package/dist/tools/task/present.d.ts.map +1 -1
  558. package/dist/tools/task/present.js +26 -6
  559. package/dist/tools/task/present.js.map +1 -1
  560. package/dist/tools/task/update.d.ts.map +1 -1
  561. package/dist/tools/task/update.js +12 -5
  562. package/dist/tools/task/update.js.map +1 -1
  563. package/dist/tools/text-window.d.ts +19 -0
  564. package/dist/tools/text-window.d.ts.map +1 -0
  565. package/dist/tools/text-window.js +83 -0
  566. package/dist/tools/text-window.js.map +1 -0
  567. package/dist/toolsets/manager.d.ts +24 -0
  568. package/dist/toolsets/manager.d.ts.map +1 -1
  569. package/dist/toolsets/manager.js +105 -2
  570. package/dist/toolsets/manager.js.map +1 -1
  571. package/dist/turn/memory-recall.d.ts +2 -0
  572. package/dist/turn/memory-recall.d.ts.map +1 -1
  573. package/dist/turn/memory-recall.js +3 -1
  574. package/dist/turn/memory-recall.js.map +1 -1
  575. package/dist/types/acp/index.d.ts +137 -1
  576. package/dist/types/acp/index.d.ts.map +1 -1
  577. package/dist/types/agent/base.d.ts +3 -0
  578. package/dist/types/agent/base.d.ts.map +1 -1
  579. package/dist/types/agent/manager.d.ts +8 -23
  580. package/dist/types/agent/manager.d.ts.map +1 -1
  581. package/dist/types/agent/scheduler.d.ts +10 -1
  582. package/dist/types/agent/scheduler.d.ts.map +1 -1
  583. package/dist/types/agent/task.d.ts +4 -0
  584. package/dist/types/agent/task.d.ts.map +1 -1
  585. package/dist/types/authorization/index.d.ts +30 -30
  586. package/dist/types/connector/mcp.d.ts +7 -0
  587. package/dist/types/connector/mcp.d.ts.map +1 -1
  588. package/dist/types/errors/catalog.d.ts.map +1 -1
  589. package/dist/types/errors/catalog.js +4 -2
  590. package/dist/types/errors/catalog.js.map +1 -1
  591. package/dist/types/harness/schema.d.ts +354 -0
  592. package/dist/types/harness/schema.d.ts.map +1 -0
  593. package/dist/types/harness/schema.js +203 -0
  594. package/dist/types/harness/schema.js.map +1 -0
  595. package/dist/types/harness/session.d.ts +278 -0
  596. package/dist/types/harness/session.d.ts.map +1 -0
  597. package/dist/types/harness/session.js +2 -0
  598. package/dist/types/harness/session.js.map +1 -0
  599. package/dist/types/hitl/index.d.ts +12 -0
  600. package/dist/types/hitl/index.d.ts.map +1 -1
  601. package/dist/types/hitl/index.js.map +1 -1
  602. package/dist/types/job/index.d.ts +47 -0
  603. package/dist/types/job/index.d.ts.map +1 -0
  604. package/dist/types/job/index.js +2 -0
  605. package/dist/types/job/index.js.map +1 -0
  606. package/dist/types/memory/index.d.ts +29 -0
  607. package/dist/types/memory/index.d.ts.map +1 -1
  608. package/dist/types/memory/index.js +6 -0
  609. package/dist/types/memory/index.js.map +1 -1
  610. package/dist/types/message/inbound-delivery.d.ts +44 -0
  611. package/dist/types/message/inbound-delivery.d.ts.map +1 -0
  612. package/dist/types/message/inbound-delivery.js +14 -0
  613. package/dist/types/message/inbound-delivery.js.map +1 -0
  614. package/dist/types/message/index.d.ts +4 -1
  615. package/dist/types/message/index.d.ts.map +1 -1
  616. package/dist/types/message/index.js +5 -1
  617. package/dist/types/message/index.js.map +1 -1
  618. package/dist/types/plugin/index.d.ts +18 -8
  619. package/dist/types/plugin/index.d.ts.map +1 -1
  620. package/dist/types/plugin/index.js +5 -2
  621. package/dist/types/plugin/index.js.map +1 -1
  622. package/dist/types/sandbox/index.d.ts +39 -2
  623. package/dist/types/sandbox/index.d.ts.map +1 -1
  624. package/dist/types/sandbox/index.js.map +1 -1
  625. package/dist/types/session/checkpoint.d.ts +24 -17
  626. package/dist/types/session/checkpoint.d.ts.map +1 -1
  627. package/dist/types/session/checkpoint.js +1 -0
  628. package/dist/types/session/checkpoint.js.map +1 -1
  629. package/dist/types/session/events.d.ts +23 -1
  630. package/dist/types/session/events.d.ts.map +1 -1
  631. package/dist/types/session/events.js.map +1 -1
  632. package/dist/types/session/records.d.ts +1514 -565
  633. package/dist/types/session/records.d.ts.map +1 -1
  634. package/dist/types/session/records.js +89 -1
  635. package/dist/types/session/records.js.map +1 -1
  636. package/dist/types/session/step.d.ts +2 -0
  637. package/dist/types/session/step.d.ts.map +1 -1
  638. package/dist/types/session/step.js.map +1 -1
  639. package/dist/types/session/store.d.ts +19 -10
  640. package/dist/types/session/store.d.ts.map +1 -1
  641. package/dist/types/session/tool-execution.d.ts +6 -0
  642. package/dist/types/session/tool-execution.d.ts.map +1 -1
  643. package/dist/types/structured-output/index.d.ts +12 -2
  644. package/dist/types/structured-output/index.d.ts.map +1 -1
  645. package/dist/types/summary/ref.d.ts +3 -1
  646. package/dist/types/summary/ref.d.ts.map +1 -1
  647. package/dist/types/tool/index.d.ts +32 -4
  648. package/dist/types/tool/index.d.ts.map +1 -1
  649. package/dist/types/tool/index.js.map +1 -1
  650. package/dist/types/tool/presentation.d.ts +106 -0
  651. package/dist/types/tool/presentation.d.ts.map +1 -1
  652. package/dist/utils/json-snapshot.d.ts +6 -2
  653. package/dist/utils/json-snapshot.d.ts.map +1 -1
  654. package/dist/utils/json-snapshot.js +19 -9
  655. package/dist/utils/json-snapshot.js.map +1 -1
  656. package/dist/utils/structured-result-json.d.ts +5 -0
  657. package/dist/utils/structured-result-json.d.ts.map +1 -0
  658. package/dist/utils/structured-result-json.js +10 -0
  659. package/dist/utils/structured-result-json.js.map +1 -0
  660. package/package.json +1 -1
  661. package/src/agents/QueryAgent.ts +1 -0
  662. package/src/agents/examples/SupervisorAgent.ts +1 -0
  663. package/src/agents/runAgent.ts +3 -0
  664. package/src/authorization/shell-lexer.ts +16 -1
  665. package/src/bridge/acp/permission.ts +17 -3
  666. package/src/bridge/acp/server.ts +271 -25
  667. package/src/bridge/acp/tasks.ts +23 -0
  668. package/src/bridge/acp/update.ts +167 -13
  669. package/src/config/registry.ts +24 -3
  670. package/src/connector/mcp/adapter.ts +16 -4
  671. package/src/connector/mcp/client.ts +6 -2
  672. package/src/connector/mcp/discovery.ts +29 -8
  673. package/src/connector/mcp/mcp-toolset.ts +25 -4
  674. package/src/connector/mcp/reconnect.ts +34 -4
  675. package/src/constants/acp/index.ts +4 -0
  676. package/src/manager/agent/lifecycle.ts +230 -3
  677. package/src/manager/plan/lifecycle.ts +11 -9
  678. package/src/manager/session/attribution.ts +12 -2
  679. package/src/manager/session/streamed-message-identity.ts +21 -0
  680. package/src/manager/session/turn-recorder.ts +4 -3
  681. package/src/pals/activity/causality.ts +261 -0
  682. package/src/pals/activity/projection.ts +89 -0
  683. package/src/pals/activity/source.ts +240 -0
  684. package/src/pals/activity/subscription-policy.ts +230 -0
  685. package/src/pals/activity/subscription-schema.ts +27 -0
  686. package/src/pals/activity/subscription-store.ts +172 -0
  687. package/src/pals/activity/subscription-types.ts +48 -0
  688. package/src/pals/activity/subscriptions.ts +209 -0
  689. package/src/pals/activity/types.ts +108 -0
  690. package/src/pals/channels/ingress.ts +153 -0
  691. package/src/pals/channels/routes.ts +118 -0
  692. package/src/pals/channels/routing.ts +197 -0
  693. package/src/pals/channels/schema.ts +108 -0
  694. package/src/pals/channels/types.ts +156 -0
  695. package/src/pals/communication/broker.ts +131 -0
  696. package/src/pals/communication/dispatch.ts +66 -0
  697. package/src/pals/communication/inbound.ts +193 -0
  698. package/src/pals/communication/ingress-dispatch.ts +63 -0
  699. package/src/pals/communication/ingress-inbound.ts +269 -0
  700. package/src/pals/communication/ingress-schema.ts +526 -0
  701. package/src/pals/communication/ingress-types.ts +336 -0
  702. package/src/pals/communication/operator.ts +315 -0
  703. package/src/pals/communication/policy.ts +174 -0
  704. package/src/pals/communication/schema.ts +173 -0
  705. package/src/pals/communication/store.ts +577 -0
  706. package/src/pals/communication/tools.ts +139 -0
  707. package/src/pals/communication/types.ts +227 -0
  708. package/src/pals/communication/verify.ts +220 -0
  709. package/src/pals/lifecycle.ts +54 -0
  710. package/src/pals/prompt.ts +101 -0
  711. package/src/pals/reference-images.ts +322 -0
  712. package/src/pals/runtime.ts +670 -0
  713. package/src/pals/store.ts +369 -0
  714. package/src/pals/types.ts +157 -0
  715. package/src/peers/envelope.ts +1 -1
  716. package/src/plugin/lifecycle.ts +217 -46
  717. package/src/plugin/shell-hook.ts +8 -2
  718. package/src/process/kill-tree.ts +10 -1
  719. package/src/prompt/resident-learning.ts +2 -2
  720. package/src/prompt/resident-step.ts +4 -4
  721. package/src/provider/errors.ts +135 -2
  722. package/src/public-runtime.ts +119 -12
  723. package/src/public-tools.ts +13 -1
  724. package/src/public-types.ts +69 -7
  725. package/src/registry/tool/presentation.ts +9 -4
  726. package/src/registry/tool/screen.ts +34 -2
  727. package/src/runtime/harness-session/index.ts +1125 -0
  728. package/src/runtime/harness-session/journal.ts +209 -0
  729. package/src/runtime/harness-session/saved-view.ts +122 -0
  730. package/src/runtime/jobs/awaited-jobs.ts +2 -1
  731. package/src/runtime/jobs/registry.ts +423 -50
  732. package/src/runtime/query/abandon-turn.ts +18 -2
  733. package/src/runtime/query/checkpoint.ts +11 -0
  734. package/src/runtime/query/durable-inbound.ts +101 -0
  735. package/src/runtime/query/events.ts +22 -5
  736. package/src/runtime/query/executor/tool-call-admission.ts +125 -32
  737. package/src/runtime/query/executor.ts +316 -130
  738. package/src/runtime/query/index.ts +48 -5
  739. package/src/runtime/query/iteration/index.ts +253 -114
  740. package/src/runtime/query/iteration/outstanding-work.ts +57 -7
  741. package/src/runtime/query/iteration/phases/context.ts +8 -0
  742. package/src/runtime/query/iteration/phases/tool-review.ts +124 -22
  743. package/src/runtime/query/iteration/step-shaping.ts +9 -1
  744. package/src/runtime/query/observation-context.ts +22 -16
  745. package/src/runtime/query/prepare-turn.ts +2 -2
  746. package/src/runtime/query/prompt-cache.ts +3 -0
  747. package/src/runtime/query/prompt.ts +32 -1
  748. package/src/runtime/query/repeat-call.ts +40 -10
  749. package/src/runtime/query/resume-pending.ts +60 -7
  750. package/src/runtime/query/resume-session.ts +1 -1
  751. package/src/runtime/query/review-policy.ts +23 -2
  752. package/src/runtime/query/saved-presentation.ts +70 -0
  753. package/src/runtime/query/steering.ts +6 -9
  754. package/src/runtime/query/tool-executions.ts +108 -9
  755. package/src/runtime/query/tooling.ts +6 -1
  756. package/src/scheduler/completion-inbox.ts +108 -7
  757. package/src/scheduler/delegating.ts +5 -0
  758. package/src/scheduler/local.ts +2 -0
  759. package/src/session/summary/materialize.ts +51 -9
  760. package/src/store/budget/ledger.ts +60 -5
  761. package/src/store/index.ts +1 -0
  762. package/src/store/memory/disk.ts +82 -7
  763. package/src/store/memory/index.ts +66 -7
  764. package/src/store/memory/markdown.ts +54 -2
  765. package/src/store/memory/memory.ts +52 -2
  766. package/src/store/memory/revision.ts +158 -0
  767. package/src/store/session/disk.ts +77 -10
  768. package/src/store/session/memory.ts +32 -7
  769. package/src/store/session-log/core.ts +118 -11
  770. package/src/store/session-log/disk.ts +9 -2
  771. package/src/store/session-log/fold.ts +22 -0
  772. package/src/store/session-log/index.ts +5 -0
  773. package/src/store/session-log/memory.ts +2 -1
  774. package/src/store/session-log/spill.ts +89 -6
  775. package/src/store/session-log/structured-result.ts +96 -0
  776. package/src/store/task/disk.ts +46 -2
  777. package/src/store/task/memory.ts +13 -3
  778. package/src/tools/admit-facts.ts +145 -0
  779. package/src/tools/builtins/bash.ts +132 -24
  780. package/src/tools/builtins/edit.ts +42 -0
  781. package/src/tools/builtins/file-write-result.ts +14 -0
  782. package/src/tools/builtins/glob.ts +12 -0
  783. package/src/tools/builtins/grep.ts +14 -0
  784. package/src/tools/builtins/index.ts +2 -0
  785. package/src/tools/builtins/job.ts +4 -1
  786. package/src/tools/builtins/read-file.ts +57 -0
  787. package/src/tools/builtins/view-image.ts +409 -0
  788. package/src/tools/builtins/wait-for-job-bounds.ts +45 -7
  789. package/src/tools/builtins/wait-for-job.ts +159 -36
  790. package/src/tools/builtins/write-file.ts +4 -2
  791. package/src/tools/command-shell.ts +132 -5
  792. package/src/tools/coordinator/agent.ts +9 -19
  793. package/src/tools/coordinator/index.ts +150 -75
  794. package/src/tools/coordinator/wait-with-idle-bound.ts +3 -1
  795. package/src/tools/defineTool.ts +4 -0
  796. package/src/tools/failure-facts.ts +24 -0
  797. package/src/tools/host-output.ts +136 -0
  798. package/src/tools/memory/delete.ts +33 -3
  799. package/src/tools/memory/read.ts +35 -2
  800. package/src/tools/memory/search.ts +38 -7
  801. package/src/tools/memory/update.ts +28 -3
  802. package/src/tools/oem-code-pages.ts +22 -0
  803. package/src/tools/schedules/schedule-tool.ts +38 -5
  804. package/src/tools/schedules/types.ts +23 -3
  805. package/src/tools/task/list.ts +15 -7
  806. package/src/tools/task/present.ts +37 -7
  807. package/src/tools/task/update.ts +12 -5
  808. package/src/tools/text-window.ts +87 -0
  809. package/src/toolsets/manager.ts +132 -2
  810. package/src/turn/memory-recall.ts +5 -1
  811. package/src/types/acp/index.ts +150 -4
  812. package/src/types/agent/base.ts +3 -0
  813. package/src/types/agent/manager.ts +8 -23
  814. package/src/types/agent/scheduler.ts +10 -1
  815. package/src/types/agent/task.ts +4 -0
  816. package/src/types/connector/mcp.ts +7 -0
  817. package/src/types/errors/catalog.ts +4 -2
  818. package/src/types/harness/schema.ts +203 -0
  819. package/src/types/harness/session.ts +306 -0
  820. package/src/types/hitl/index.ts +17 -1
  821. package/src/types/job/index.ts +42 -0
  822. package/src/types/memory/index.ts +43 -0
  823. package/src/types/message/inbound-delivery.ts +63 -0
  824. package/src/types/message/index.ts +8 -1
  825. package/src/types/plugin/index.ts +11 -6
  826. package/src/types/sandbox/index.ts +46 -0
  827. package/src/types/session/checkpoint.ts +4 -1
  828. package/src/types/session/events.ts +23 -1
  829. package/src/types/session/records.ts +114 -2
  830. package/src/types/session/step.ts +2 -0
  831. package/src/types/session/store.ts +23 -9
  832. package/src/types/session/tool-execution.ts +6 -0
  833. package/src/types/structured-output/index.ts +13 -2
  834. package/src/types/summary/ref.ts +3 -1
  835. package/src/types/tool/index.ts +39 -5
  836. package/src/types/tool/presentation.ts +121 -0
  837. package/src/utils/json-snapshot.ts +26 -9
  838. package/src/utils/structured-result-json.ts +10 -0
@@ -0,0 +1,230 @@
1
+ import { chmodSync, lstatSync, mkdirSync, readdirSync, realpathSync } from 'node:fs'
2
+ import { join, resolve } from 'node:path'
3
+ import { isDeepStrictEqual } from 'node:util'
4
+ import { z } from 'zod'
5
+ import { DiskRevisionRecordStore } from '../../store/kv/revision-record-store.js'
6
+ import { defineSchema } from '../../store/schema.js'
7
+ import {
8
+ observationRouteKeySchema,
9
+ observationSourceSchema,
10
+ } from '../communication/ingress-schema.js'
11
+ import type { PalIngressAuthorizationRequest } from '../communication/ingress-types.js'
12
+ import { addressSchema, freezeCommunicationValue } from '../communication/schema.js'
13
+ import type { PalMessageAuthorization } from '../communication/types.js'
14
+ import { subscriptionSchema } from './subscription-schema.js'
15
+ import type {
16
+ PalActivitySubscriptionAuthorizationRequest,
17
+ PalActivitySubscriptionStore,
18
+ } from './subscription-types.js'
19
+
20
+ export interface PalActivitySubscriptionPermission {
21
+ readonly v: 1
22
+ readonly subscriptionId: string
23
+ readonly revision: number
24
+ readonly observe: boolean
25
+ readonly disclose: boolean
26
+ readonly receive: boolean
27
+ readonly wake: boolean
28
+ }
29
+ export interface PalActivitySubscriptionPermissionUpdate
30
+ extends Omit<PalActivitySubscriptionPermission, 'v' | 'revision'> {
31
+ readonly expectedRevision: number
32
+ }
33
+ export class PalActivitySubscriptionPermissionConflictError extends Error {
34
+ override readonly name = 'PalActivitySubscriptionPermissionConflictError'
35
+ }
36
+ const permissionSchema = z
37
+ .object({
38
+ v: z.literal(1),
39
+ subscriptionId: z.string().uuid(),
40
+ revision: z.number().int().positive().safe(),
41
+ observe: z.boolean(),
42
+ disclose: z.boolean(),
43
+ receive: z.boolean(),
44
+ wake: z.boolean(),
45
+ })
46
+ .strict()
47
+ const updateSchema = permissionSchema
48
+ .omit({ v: true, revision: true })
49
+ .extend({ expectedRevision: z.number().int().nonnegative().safe() })
50
+ const denied = (): PalMessageAuthorization => ({
51
+ allow: false,
52
+ reason: 'No current permission for this exact Pal activity subscription.',
53
+ })
54
+
55
+ /** Explicit local operator consent. Missing rules deny and each phase rereads current records. */
56
+ export class DiskPalActivitySubscriptionPolicy {
57
+ private readonly root: string
58
+ private readonly secure: (path: string) => void
59
+ private readonly subscriptions: PalActivitySubscriptionStore
60
+ private readonly records = new DiskRevisionRecordStore<PalActivitySubscriptionPermission>(
61
+ defineSchema({
62
+ kind: 'pal-activity-subscription-permission',
63
+ current: 1,
64
+ migrations: {},
65
+ }),
66
+ 'Pal activity subscription permission',
67
+ (value) => value.revision,
68
+ )
69
+ constructor(options: {
70
+ root: string
71
+ subscriptions: PalActivitySubscriptionStore
72
+ secureDirectory?: (path: string) => void
73
+ }) {
74
+ this.root = resolve(options.root)
75
+ this.subscriptions = options.subscriptions
76
+ this.secure =
77
+ options.secureDirectory ??
78
+ ((path) => {
79
+ if (process.platform !== 'win32') chmodSync(path, 0o700)
80
+ })
81
+ this.directory(this.root)
82
+ }
83
+ private directory(path: string) {
84
+ mkdirSync(path, { recursive: true, mode: 0o700 })
85
+ const stat = lstatSync(path)
86
+ if (!stat.isDirectory() || stat.isSymbolicLink() || realpathSync(path) !== path)
87
+ throw new Error('Pal activity permissions require real directories without aliases.')
88
+ this.secure(path)
89
+ }
90
+ private location(id: string) {
91
+ const key = z.string().uuid().parse(id)
92
+ this.directory(this.root)
93
+ const directory = join(this.root, key)
94
+ this.directory(directory)
95
+ const revisionsDir = join(directory, 'revisions')
96
+ this.directory(revisionsDir)
97
+ for (const name of readdirSync(revisionsDir)) {
98
+ if (!/^[1-9][0-9]*\.json$/u.test(name)) continue
99
+ const stat = lstatSync(join(revisionsDir, name))
100
+ if (!stat.isFile() || stat.isSymbolicLink())
101
+ throw new Error('Pal permission commits must be real files.')
102
+ }
103
+ return {
104
+ legacyPath: join(directory, 'permission.json'),
105
+ revisionsDir,
106
+ publishLegacyProjection: false,
107
+ }
108
+ }
109
+ private checked(input: unknown, id: string) {
110
+ const { schemaVersion: _schemaVersion, ...value } = permissionSchema
111
+ .extend({ schemaVersion: z.literal(1).optional() })
112
+ .parse(input)
113
+ if (value.subscriptionId !== id) throw new Error('Foreign Pal subscription permission.')
114
+ return freezeCommunicationValue(value)
115
+ }
116
+ async get(id: string): Promise<PalActivitySubscriptionPermission | null> {
117
+ const record = await this.records.read(this.location(id))
118
+ return record === null ? null : this.checked(record, id)
119
+ }
120
+ async update(
121
+ input: PalActivitySubscriptionPermissionUpdate,
122
+ ): Promise<PalActivitySubscriptionPermission> {
123
+ const captured = updateSchema.parse(input)
124
+ if (!(await this.subscriptions.get(captured.subscriptionId)))
125
+ throw new Error('Unknown Pal activity subscription.')
126
+ return this.records.transact(this.location(captured.subscriptionId), (stored) => {
127
+ const current = stored === null ? null : this.checked(stored, captured.subscriptionId)
128
+ if ((current?.revision ?? 0) !== captured.expectedRevision)
129
+ throw new PalActivitySubscriptionPermissionConflictError(
130
+ 'Subscription permission changed; reload before updating.',
131
+ )
132
+ const { expectedRevision, ...values } = captured
133
+ const record = this.checked(
134
+ { ...values, v: 1, revision: expectedRevision + 1 },
135
+ values.subscriptionId,
136
+ )
137
+ return { record, result: record }
138
+ })
139
+ }
140
+ async authorizeSubscription(
141
+ request: PalActivitySubscriptionAuthorizationRequest,
142
+ ): Promise<PalMessageAuthorization> {
143
+ const phase = z.enum(['observe', 'disclose', 'receive', 'accept']).parse(request.phase)
144
+ const permitted = (rule: PalActivitySubscriptionPermission | null) =>
145
+ phase === 'accept' ? rule?.observe && rule.disclose && rule.receive : rule?.[phase]
146
+ const captured = freezeCommunicationValue(subscriptionSchema.parse(request.subscription))
147
+ const stored = await this.subscriptions.get(captured.id)
148
+ const subscription = stored ? freezeCommunicationValue(subscriptionSchema.parse(stored)) : null
149
+ if (
150
+ !subscription?.enabled ||
151
+ subscription.configurationRevision !== captured.configurationRevision ||
152
+ !isDeepStrictEqual(subscription.scope, captured.scope) ||
153
+ !isDeepStrictEqual(subscription.recipient, captured.recipient)
154
+ )
155
+ return denied()
156
+ const observed = await this.get(subscription.id)
157
+ if (!permitted(observed)) return denied()
158
+ const current = await this.subscriptions.get(subscription.id)
159
+ if (
160
+ !current?.enabled ||
161
+ current.configurationRevision !== captured.configurationRevision ||
162
+ !isDeepStrictEqual(current.scope, captured.scope) ||
163
+ !isDeepStrictEqual(current.recipient, captured.recipient)
164
+ )
165
+ return denied()
166
+ const rule = await this.get(subscription.id)
167
+ if (!rule || !permitted(rule)) return denied()
168
+ return {
169
+ allow: true,
170
+ grant: {
171
+ id: `pal-subscription:${subscription.id}:${phase}`,
172
+ revision: String(rule.revision),
173
+ },
174
+ }
175
+ }
176
+ async authorizeIngress(input: PalIngressAuthorizationRequest): Promise<PalMessageAuthorization> {
177
+ if (!('kind' in input) || input.kind !== 'observation') return denied()
178
+ const request = freezeCommunicationValue(
179
+ z
180
+ .object({
181
+ kind: z.literal('observation'),
182
+ phase: z.enum(['accept', 'deliver', 'wake']),
183
+ source: observationSourceSchema,
184
+ routeKey: observationRouteKeySchema,
185
+ recipient: addressSchema,
186
+ })
187
+ .parse(input),
188
+ )
189
+ const id = z.string().uuid().parse(request.source.subscriptionId)
190
+ const phase = z.enum(['accept', 'deliver', 'wake']).parse(request.phase)
191
+ const stored = await this.subscriptions.get(id)
192
+ const subscription = stored ? freezeCommunicationValue(subscriptionSchema.parse(stored)) : null
193
+ if (
194
+ !subscription?.enabled ||
195
+ request.routeKey.kind !== 'observation' ||
196
+ request.routeKey.subscriptionId !== id ||
197
+ !isDeepStrictEqual(request.source.scope, subscription.scope) ||
198
+ !isDeepStrictEqual(request.routeKey.scope, subscription.scope) ||
199
+ !isDeepStrictEqual(request.recipient, subscription.recipient) ||
200
+ !isDeepStrictEqual(request.routeKey.recipient, subscription.recipient)
201
+ )
202
+ return denied()
203
+ const observed = await this.get(id)
204
+ if (
205
+ !observed?.observe ||
206
+ !observed.disclose ||
207
+ !observed.receive ||
208
+ (phase === 'wake' && !observed.wake)
209
+ )
210
+ return denied()
211
+ const current = await this.subscriptions.get(id)
212
+ if (
213
+ !current?.enabled ||
214
+ current.configurationRevision !== subscription.configurationRevision ||
215
+ !isDeepStrictEqual(current.scope, subscription.scope) ||
216
+ !isDeepStrictEqual(current.recipient, subscription.recipient)
217
+ )
218
+ return denied()
219
+ const rule = await this.get(id)
220
+ if (!rule?.observe || !rule.disclose || !rule.receive || (phase === 'wake' && !rule.wake))
221
+ return denied()
222
+ return {
223
+ allow: true,
224
+ grant: {
225
+ id: `pal-subscription:${id}:${phase}`,
226
+ revision: String(rule.revision),
227
+ },
228
+ }
229
+ }
230
+ }
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod'
2
+ import { activityCursorSchema, activityScopeSchema } from '../communication/ingress-schema.js'
3
+ import { addressSchema } from '../communication/schema.js'
4
+
5
+ const positive = z.number().int().positive().safe()
6
+ export const subscriptionScopeSchema = activityScopeSchema
7
+ export const subscriptionCursorSchema = activityCursorSchema
8
+ const subscriptionObjectSchema = z
9
+ .object({
10
+ v: z.literal(1),
11
+ id: z.string().uuid(),
12
+ revision: positive,
13
+ configurationRevision: positive,
14
+ scope: subscriptionScopeSchema,
15
+ recipient: addressSchema,
16
+ enabled: z.boolean(),
17
+ cursor: subscriptionCursorSchema.nullable(),
18
+ })
19
+ .strict()
20
+ export const subscriptionSchema = subscriptionObjectSchema.refine(
21
+ (v) => v.scope.tenantId === v.recipient.tenantId,
22
+ 'Cross-tenant observation is refused.',
23
+ )
24
+ export const storedSubscriptionSchema = subscriptionObjectSchema
25
+ .extend({ schemaVersion: z.literal(1).optional() })
26
+ .transform(({ schemaVersion: _schemaVersion, ...value }) => value)
27
+ .pipe(subscriptionSchema)
@@ -0,0 +1,172 @@
1
+ import { chmodSync, lstatSync, mkdirSync, readdirSync, realpathSync } from 'node:fs'
2
+ import { join, resolve } from 'node:path'
3
+ import { isDeepStrictEqual } from 'node:util'
4
+ import { z } from 'zod'
5
+ import { DiskRevisionRecordStore } from '../../store/kv/revision-record-store.js'
6
+ import { defineSchema } from '../../store/schema.js'
7
+ import { freezeCommunicationValue } from '../communication/schema.js'
8
+ import {
9
+ storedSubscriptionSchema,
10
+ subscriptionCursorSchema,
11
+ subscriptionSchema,
12
+ } from './subscription-schema.js'
13
+ import type { PalActivitySubscription, PalActivitySubscriptionStore } from './subscription-types.js'
14
+ import type { PalActivityCursor } from './types.js'
15
+
16
+ export class PalActivitySubscriptionConflictError extends Error {
17
+ override readonly name = 'PalActivitySubscriptionConflictError'
18
+ }
19
+
20
+ /** Private immutable revision commits. No cursors are accepted from a client or model. */
21
+ export class DiskPalActivitySubscriptionStore implements PalActivitySubscriptionStore {
22
+ private readonly root: string
23
+ private readonly secure: (path: string) => void
24
+ private readonly records = new DiskRevisionRecordStore<PalActivitySubscription>(
25
+ defineSchema({
26
+ kind: 'pal-activity-subscription',
27
+ current: 1,
28
+ migrations: {},
29
+ }),
30
+ 'Pal activity subscription',
31
+ (value) => value.revision,
32
+ )
33
+ constructor(options: {
34
+ root: string
35
+ secureDirectory?: (path: string) => void
36
+ }) {
37
+ this.root = resolve(options.root)
38
+ this.secure =
39
+ options.secureDirectory ??
40
+ ((path) => {
41
+ if (process.platform !== 'win32') chmodSync(path, 0o700)
42
+ })
43
+ this.directory(this.root)
44
+ }
45
+ private directory(path: string) {
46
+ mkdirSync(path, { recursive: true, mode: 0o700 })
47
+ const stat = lstatSync(path)
48
+ if (!stat.isDirectory() || stat.isSymbolicLink() || realpathSync(path) !== path)
49
+ throw new Error('Pal subscriptions require real directories without aliases.')
50
+ this.secure(path)
51
+ }
52
+ private location(input: string) {
53
+ const id = z.string().uuid().parse(input)
54
+ this.directory(this.root)
55
+ const directory = join(this.root, id)
56
+ this.directory(directory)
57
+ const revisionsDir = join(directory, 'revisions')
58
+ this.directory(revisionsDir)
59
+ for (const name of readdirSync(revisionsDir)) {
60
+ if (!/^[1-9][0-9]*\.json$/u.test(name)) continue
61
+ const stat = lstatSync(join(revisionsDir, name))
62
+ if (!stat.isFile() || stat.isSymbolicLink())
63
+ throw new Error('Pal subscription commits must be real files.')
64
+ }
65
+ return {
66
+ legacyPath: join(directory, 'subscription.json'),
67
+ revisionsDir,
68
+ publishLegacyProjection: false,
69
+ }
70
+ }
71
+ private checked(input: unknown, id: string): PalActivitySubscription {
72
+ const value = storedSubscriptionSchema.parse(input)
73
+ if (value.id !== id || value.configurationRevision > value.revision)
74
+ throw new Error('Foreign or invalid Pal activity subscription.')
75
+ return freezeCommunicationValue(value)
76
+ }
77
+ async get(id: string): Promise<PalActivitySubscription | null> {
78
+ const value = await this.records.read(this.location(id))
79
+ return value === null ? null : this.checked(value, id)
80
+ }
81
+ /** Complete current records for trusted host projection; a bad record rejects the whole list. */
82
+ async list(): Promise<readonly PalActivitySubscription[]> {
83
+ try {
84
+ const entry = lstatSync(this.root)
85
+ if (!entry.isDirectory() || entry.isSymbolicLink() || realpathSync(this.root) !== this.root)
86
+ throw new Error('Pal subscriptions require real directories without aliases.')
87
+ } catch (error) {
88
+ if ((error as NodeJS.ErrnoException).code === 'ENOENT') return Object.freeze([])
89
+ throw error
90
+ }
91
+ const subscriptions: PalActivitySubscription[] = []
92
+ for (const name of readdirSync(this.root).sort()) {
93
+ if (!z.string().uuid().safeParse(name).success) continue
94
+ const value = await this.get(name)
95
+ if (value) subscriptions.push(value)
96
+ }
97
+ return Object.freeze(subscriptions)
98
+ }
99
+ async create(input: Parameters<PalActivitySubscriptionStore['create']>[0]) {
100
+ const value = subscriptionSchema.parse({
101
+ ...input,
102
+ v: 1,
103
+ revision: 1,
104
+ configurationRevision: 1,
105
+ cursor: null,
106
+ })
107
+ const proposed = this.checked(value, value.id)
108
+ return this.records.transact(this.location(proposed.id), (stored) => {
109
+ if (stored !== null)
110
+ throw new PalActivitySubscriptionConflictError('Subscription identity already exists.')
111
+ return { record: proposed, result: proposed }
112
+ })
113
+ }
114
+ async setEnabled(input: Parameters<PalActivitySubscriptionStore['setEnabled']>[0]) {
115
+ const captured = z
116
+ .object({
117
+ id: z.string().uuid(),
118
+ expectedRevision: z.number().int().positive().safe(),
119
+ enabled: z.boolean(),
120
+ })
121
+ .strict()
122
+ .parse(input)
123
+ return this.records.transact(this.location(captured.id), (stored) => {
124
+ const current = stored === null ? null : this.checked(stored, captured.id)
125
+ if (!current || current.revision !== captured.expectedRevision)
126
+ throw new PalActivitySubscriptionConflictError(
127
+ 'Subscription changed; reload before changing consent.',
128
+ )
129
+ const record = this.checked(
130
+ {
131
+ ...current,
132
+ enabled: captured.enabled,
133
+ revision: current.revision + 1,
134
+ configurationRevision: current.configurationRevision + 1,
135
+ },
136
+ current.id,
137
+ )
138
+ return { record, result: record }
139
+ })
140
+ }
141
+ async advance(input: PalActivitySubscription, inputCursor: PalActivityCursor) {
142
+ const parsed = subscriptionSchema.parse(input)
143
+ const captured = this.checked(parsed, parsed.id)
144
+ const cursor = freezeCommunicationValue(subscriptionCursorSchema.parse(inputCursor))
145
+ if (cursor.after.seq < cursor.root.seq || cursor.after.offset < cursor.root.offset)
146
+ throw new Error('Subscription cursor cannot precede its root.')
147
+ if (captured.cursor) {
148
+ const previous = captured.cursor
149
+ if (
150
+ cursor.scopeHash !== previous.scopeHash ||
151
+ !isDeepStrictEqual(cursor.root, previous.root) ||
152
+ cursor.after.seq < previous.after.seq ||
153
+ cursor.after.offset < previous.after.offset ||
154
+ cursor.generation < previous.generation ||
155
+ (cursor.after.seq === previous.after.seq && !isDeepStrictEqual(cursor, previous))
156
+ )
157
+ throw new Error('Subscription cursor identity changed or moved backwards.')
158
+ }
159
+ return this.records.transact(this.location(captured.id), (stored) => {
160
+ const current = stored === null ? null : this.checked(stored, captured.id)
161
+ if (!current || !current.enabled || !isDeepStrictEqual(current, captured))
162
+ throw new PalActivitySubscriptionConflictError(
163
+ 'Subscription changed before accepted progress could commit.',
164
+ )
165
+ const record = this.checked(
166
+ { ...current, revision: current.revision + 1, cursor },
167
+ current.id,
168
+ )
169
+ return { record, result: record }
170
+ })
171
+ }
172
+ }
@@ -0,0 +1,48 @@
1
+ import type { PalAddress } from '../communication/types.js'
2
+ import type { PalActivityCursor, PalActivityFact, PalActivityScope } from './types.js'
3
+
4
+ /** Host-owned, immutable observation scope and destination, with separately revocable consent. */
5
+ export interface PalActivitySubscription {
6
+ readonly v: 1
7
+ readonly id: string
8
+ readonly revision: number
9
+ readonly configurationRevision: number
10
+ readonly scope: PalActivityScope
11
+ readonly recipient: PalAddress
12
+ readonly enabled: boolean
13
+ readonly cursor: PalActivityCursor | null
14
+ }
15
+
16
+ export interface PalActivitySubscriptionStore {
17
+ get(id: string): Promise<PalActivitySubscription | null>
18
+ create(input: {
19
+ readonly id: string
20
+ readonly scope: PalActivityScope
21
+ readonly recipient: PalAddress
22
+ readonly enabled: boolean
23
+ }): Promise<PalActivitySubscription>
24
+ setEnabled(input: {
25
+ readonly id: string
26
+ readonly expectedRevision: number
27
+ readonly enabled: boolean
28
+ }): Promise<PalActivitySubscription>
29
+ /** Only an unchanged cursor emitted by the trusted original-journal source may be committed. */
30
+ advance(
31
+ subscription: PalActivitySubscription,
32
+ cursor: PalActivityCursor,
33
+ ): Promise<PalActivitySubscription>
34
+ }
35
+
36
+ export interface PalActivitySubscriptionAuthorizationRequest {
37
+ /** `accept` requires observe, disclose and receive together immediately before inbox acceptance. */
38
+ readonly phase: 'observe' | 'disclose' | 'receive' | 'accept'
39
+ readonly subscription: PalActivitySubscription
40
+ readonly fact?: PalActivityFact
41
+ }
42
+
43
+ export interface PalActivitySubscriptionResult {
44
+ readonly subscription: PalActivitySubscription
45
+ readonly accepted: readonly string[]
46
+ readonly suppressed: readonly string[]
47
+ readonly complete: boolean
48
+ }
@@ -0,0 +1,209 @@
1
+ import { isDeepStrictEqual } from 'node:util'
2
+ import { z } from 'zod'
3
+ import { ingressIntentDigest, ingressIntentId } from '../communication/ingress-schema.js'
4
+ import type { PalIngressStore, PalObservationIntent } from '../communication/ingress-types.js'
5
+ import { freezeCommunicationValue, hash, label } from '../communication/schema.js'
6
+ import type { PalMessageAuthorization, PalMessageGrant } from '../communication/types.js'
7
+ import type { PalStore } from '../types.js'
8
+ import { createPalActivitySource } from './source.js'
9
+ import { subscriptionSchema } from './subscription-schema.js'
10
+ import type {
11
+ PalActivitySubscriptionAuthorizationRequest,
12
+ PalActivitySubscriptionResult,
13
+ PalActivitySubscriptionStore,
14
+ } from './subscription-types.js'
15
+ import type {
16
+ PalActivityFact,
17
+ PalActivityReadOptions,
18
+ PalActivityScope,
19
+ PalActivitySourceOptions,
20
+ } from './types.js'
21
+
22
+ export class PalActivitySubscriptionDeniedError extends Error {
23
+ override readonly name = 'PalActivitySubscriptionDeniedError'
24
+ constructor() {
25
+ super('Current Pal observation, disclosure and recipient consent are required.')
26
+ }
27
+ }
28
+
29
+ export interface PalActivitySubscriptionRunnerOptions {
30
+ readonly subscriptions: PalActivitySubscriptionStore
31
+ readonly ingress: PalIngressStore
32
+ readonly pals: PalStore
33
+ readonly openJournal: PalActivitySourceOptions['openJournal']
34
+ /**
35
+ * Trusted current host policy. Observation, disclosure and receipt are independent decisions;
36
+ * the final `accept` phase must require all three together under current consent.
37
+ */
38
+ readonly authorize: (
39
+ request: PalActivitySubscriptionAuthorizationRequest,
40
+ signal: AbortSignal,
41
+ ) => Promise<PalMessageAuthorization>
42
+ /**
43
+ * Resolve prior subscription IDs from original turn delivery evidence retained by the host.
44
+ * An independent turn yields []; unknown or incomplete evidence must reject. Never accept
45
+ * a model, renderer or remote client's assertion about its own provenance.
46
+ */
47
+ readonly resolveCausality: (
48
+ scope: PalActivityScope,
49
+ fact: PalActivityFact,
50
+ signal: AbortSignal,
51
+ ) => Promise<readonly string[]>
52
+ readonly now?: () => number
53
+ /** Hint only. Observer failures and pending promises cannot prevent acceptance/progress. */
54
+ readonly notify?: (palId: string) => void | Promise<void>
55
+ }
56
+
57
+ /** One bounded page, no daemon and no inference. Progress follows durable inbox acceptance. */
58
+ export async function publishPalActivityOnce(
59
+ options: PalActivitySubscriptionRunnerOptions,
60
+ id: string,
61
+ input: Omit<PalActivityReadOptions, 'cursor'>,
62
+ ): Promise<PalActivitySubscriptionResult> {
63
+ const subscriptionId = z.string().uuid().parse(id)
64
+ const { signal } = input
65
+ const { subscriptions, ingress, pals, openJournal, authorize, resolveCausality, notify } = options
66
+ const now = options.now ?? Date.now
67
+ if (
68
+ typeof authorize !== 'function' ||
69
+ typeof resolveCausality !== 'function' ||
70
+ typeof openJournal !== 'function'
71
+ )
72
+ throw new TypeError(
73
+ 'Pal subscriptions require trusted policy, causality and original journal ports.',
74
+ )
75
+ signal.throwIfAborted()
76
+ const stored = await subscriptions.get(subscriptionId)
77
+ if (!stored) throw new PalActivitySubscriptionDeniedError()
78
+ const subscription = freezeCommunicationValue(subscriptionSchema.parse(stored))
79
+ async function current() {
80
+ signal.throwIfAborted()
81
+ const value = await subscriptions.get(subscriptionId)
82
+ signal.throwIfAborted()
83
+ if (
84
+ !value?.enabled ||
85
+ value.configurationRevision !== subscription.configurationRevision ||
86
+ !isDeepStrictEqual(value.scope, subscription.scope) ||
87
+ !isDeepStrictEqual(value.recipient, subscription.recipient)
88
+ )
89
+ throw new PalActivitySubscriptionDeniedError()
90
+ }
91
+ async function permitted(
92
+ phase: PalActivitySubscriptionAuthorizationRequest['phase'],
93
+ fact?: PalActivityFact,
94
+ ): Promise<PalMessageGrant> {
95
+ await current()
96
+ const decision = await authorize(
97
+ freezeCommunicationValue({
98
+ phase,
99
+ subscription,
100
+ ...(fact ? { fact } : {}),
101
+ }),
102
+ signal,
103
+ )
104
+ signal.throwIfAborted()
105
+ if (!decision.allow) throw new PalActivitySubscriptionDeniedError()
106
+ const grant = freezeCommunicationValue(
107
+ z.object({ id: label, revision: label }).strict().parse(decision.grant),
108
+ )
109
+ await current()
110
+ return grant
111
+ }
112
+ const source = createPalActivitySource({
113
+ scope: subscription.scope,
114
+ pals,
115
+ openJournal,
116
+ async authorize() {
117
+ await permitted('observe')
118
+ return true
119
+ },
120
+ })
121
+ const page = await source.read({
122
+ signal,
123
+ maxRecords: input.maxRecords,
124
+ maxReadBytes: input.maxReadBytes,
125
+ ...(subscription.cursor ? { cursor: subscription.cursor } : {}),
126
+ })
127
+ const accepted: string[] = []
128
+ const suppressed: string[] = []
129
+ for (const fact of page.facts) {
130
+ const observed = await permitted('observe', fact)
131
+ const lineage = z
132
+ .array(z.string().uuid())
133
+ .refine((ids) => new Set(ids).size === ids.length)
134
+ .parse(await resolveCausality(subscription.scope, fact, signal))
135
+ signal.throwIfAborted()
136
+ await current()
137
+ if (lineage.includes(subscription.id)) {
138
+ suppressed.push(fact.id)
139
+ continue
140
+ }
141
+ const disclosed = await permitted('disclose', fact)
142
+ const received = await permitted('receive', fact)
143
+ const recipient = pals.get(subscription.recipient.palId)
144
+ if (!recipient) throw new PalActivitySubscriptionDeniedError()
145
+ const acceptedGrant = await permitted('accept', fact)
146
+ const draft = {
147
+ kind: 'observation' as const,
148
+ operationId: fact.id,
149
+ source: {
150
+ kind: 'host-observation' as const,
151
+ subscriptionId: subscription.id,
152
+ scope: subscription.scope,
153
+ },
154
+ recipient: subscription.recipient,
155
+ routeKey: {
156
+ v: 1 as const,
157
+ kind: 'observation' as const,
158
+ recipient: subscription.recipient,
159
+ subscriptionId: subscription.id,
160
+ scope: subscription.scope,
161
+ },
162
+ fact,
163
+ subscriptionTrail: [...lineage, subscription.id],
164
+ replyTo: null,
165
+ grant: {
166
+ id: hash([
167
+ 'pal-observation-grants/1',
168
+ subscription.id,
169
+ observed.id,
170
+ disclosed.id,
171
+ received.id,
172
+ acceptedGrant.id,
173
+ ]),
174
+ revision: hash([
175
+ subscription.configurationRevision,
176
+ observed.revision,
177
+ disclosed.revision,
178
+ received.revision,
179
+ acceptedGrant.revision,
180
+ ]),
181
+ },
182
+ createdAt: now(),
183
+ }
184
+ const intentId = ingressIntentId(draft)
185
+ const intent = freezeCommunicationValue({
186
+ ...draft,
187
+ id: intentId,
188
+ digest: ingressIntentDigest({ ...draft, id: intentId }),
189
+ }) as PalObservationIntent
190
+ await ingress.acceptIngress(intent, recipient.revision)
191
+ accepted.push(intent.id)
192
+ if (notify) {
193
+ try {
194
+ Promise.resolve(notify(subscription.recipient.palId)).catch(() => {})
195
+ } catch {}
196
+ }
197
+ }
198
+ await permitted('observe')
199
+ const next =
200
+ subscription.cursor && isDeepStrictEqual(subscription.cursor, page.cursor)
201
+ ? subscription
202
+ : await subscriptions.advance(subscription, page.cursor)
203
+ return freezeCommunicationValue({
204
+ subscription: next,
205
+ accepted,
206
+ suppressed,
207
+ complete: page.complete,
208
+ })
209
+ }