@zhin.js/agent 1.1.13 → 1.1.15

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 (1163) hide show
  1. package/README.md +40 -20
  2. package/lib/ai-event-bus.d.ts +1 -1
  3. package/lib/ai-hook-handlers.d.ts +1 -1
  4. package/lib/assistant/config.d.ts +3 -17
  5. package/lib/assistant/config.d.ts.map +1 -1
  6. package/lib/assistant/config.js +1 -8
  7. package/lib/assistant/config.js.map +1 -1
  8. package/lib/assistant/index.d.ts +6 -9
  9. package/lib/assistant/index.d.ts.map +1 -1
  10. package/lib/assistant/index.js +4 -6
  11. package/lib/assistant/index.js.map +1 -1
  12. package/lib/assistant/job-engine.d.ts +0 -4
  13. package/lib/assistant/job-engine.d.ts.map +1 -1
  14. package/lib/assistant/job-engine.js +0 -2
  15. package/lib/assistant/job-engine.js.map +1 -1
  16. package/lib/assistant/job-store.d.ts +1 -8
  17. package/lib/assistant/job-store.d.ts.map +1 -1
  18. package/lib/assistant/job-store.js +3 -9
  19. package/lib/assistant/job-store.js.map +1 -1
  20. package/lib/assistant/job-worker.d.ts +2 -3
  21. package/lib/assistant/job-worker.d.ts.map +1 -1
  22. package/lib/assistant/job-worker.js +15 -25
  23. package/lib/assistant/job-worker.js.map +1 -1
  24. package/lib/assistant/runtime-contract.d.ts +22 -0
  25. package/lib/assistant/runtime-contract.d.ts.map +1 -0
  26. package/lib/assistant/runtime-contract.js +2 -0
  27. package/lib/assistant/runtime-contract.js.map +1 -0
  28. package/lib/assistant/types.d.ts +0 -10
  29. package/lib/assistant/types.d.ts.map +1 -1
  30. package/lib/assistant/types.js +0 -4
  31. package/lib/assistant/types.js.map +1 -1
  32. package/lib/authoring/bridge.d.ts +1 -1
  33. package/lib/authoring/index.d.ts +0 -4
  34. package/lib/authoring/index.d.ts.map +1 -1
  35. package/lib/authoring/index.js +0 -2
  36. package/lib/authoring/index.js.map +1 -1
  37. package/lib/authoring/types.d.ts +3 -39
  38. package/lib/authoring/types.d.ts.map +1 -1
  39. package/lib/authoring/types.js.map +1 -1
  40. package/lib/builtin/bash-tool.d.ts.map +1 -1
  41. package/lib/builtin/bash-tool.js +15 -2
  42. package/lib/builtin/bash-tool.js.map +1 -1
  43. package/lib/builtin/five-agent/index.d.ts +0 -1
  44. package/lib/builtin/five-agent/index.d.ts.map +1 -1
  45. package/lib/builtin/five-agent/index.js +0 -1
  46. package/lib/builtin/five-agent/index.js.map +1 -1
  47. package/lib/builtin/five-agent/role-capability-policy.d.ts +1 -1
  48. package/lib/builtin/five-agent/role-capability-policy.d.ts.map +1 -1
  49. package/lib/builtin/five-agent/role-capability-policy.js +1 -1
  50. package/lib/builtin/five-agent/role-capability-policy.js.map +1 -1
  51. package/lib/builtin/spawn-task-tool.d.ts +1 -1
  52. package/lib/builtin/spawn-task-tool.d.ts.map +1 -1
  53. package/lib/builtin/spawn-task-tool.js +4 -100
  54. package/lib/builtin/spawn-task-tool.js.map +1 -1
  55. package/lib/builtin-tools.d.ts +0 -2
  56. package/lib/builtin-tools.d.ts.map +1 -1
  57. package/lib/builtin-tools.js +0 -6
  58. package/lib/builtin-tools.js.map +1 -1
  59. package/lib/common-adapter-tools.d.ts +1 -1
  60. package/lib/config/agent-interfaces.d.ts +2 -1
  61. package/lib/config/agent-interfaces.d.ts.map +1 -1
  62. package/lib/config/index.d.ts +3 -3
  63. package/lib/config/index.d.ts.map +1 -1
  64. package/lib/config/index.js +2 -2
  65. package/lib/config/index.js.map +1 -1
  66. package/lib/config/keyword-triggers.d.ts +0 -1
  67. package/lib/config/keyword-triggers.d.ts.map +1 -1
  68. package/lib/config/keyword-triggers.js +0 -1
  69. package/lib/config/keyword-triggers.js.map +1 -1
  70. package/lib/config/normalize-ai-config.d.ts.map +1 -1
  71. package/lib/config/normalize-ai-config.js +9 -0
  72. package/lib/config/normalize-ai-config.js.map +1 -1
  73. package/lib/config/validate-ai-config.d.ts +1 -0
  74. package/lib/config/validate-ai-config.d.ts.map +1 -1
  75. package/lib/config/validate-ai-config.js +179 -0
  76. package/lib/config/validate-ai-config.js.map +1 -1
  77. package/lib/config/zhin-agent-config.d.ts +0 -3
  78. package/lib/config/zhin-agent-config.d.ts.map +1 -1
  79. package/lib/config/zhin-agent-constants.d.ts +0 -3
  80. package/lib/config/zhin-agent-constants.d.ts.map +1 -1
  81. package/lib/config/zhin-agent-constants.js +0 -14
  82. package/lib/config/zhin-agent-constants.js.map +1 -1
  83. package/lib/config/zhin-agent-defaults.d.ts.map +1 -1
  84. package/lib/config/zhin-agent-defaults.js +0 -3
  85. package/lib/config/zhin-agent-defaults.js.map +1 -1
  86. package/lib/config/zhin-agent-dependencies.d.ts +4 -5
  87. package/lib/config/zhin-agent-dependencies.d.ts.map +1 -1
  88. package/lib/context/context-system.d.ts +2 -1
  89. package/lib/context/context-system.d.ts.map +1 -1
  90. package/lib/context/context-system.js +1 -0
  91. package/lib/context/context-system.js.map +1 -1
  92. package/lib/context/context-tail-limit.d.ts +2 -2
  93. package/lib/context/context-tail-limit.d.ts.map +1 -1
  94. package/lib/context/context-tail-limit.js +2 -3
  95. package/lib/context/context-tail-limit.js.map +1 -1
  96. package/lib/context/im-turn-context-adapter.d.ts +1 -2
  97. package/lib/context/im-turn-context-adapter.d.ts.map +1 -1
  98. package/lib/context/im-turn-context-adapter.js +1 -5
  99. package/lib/context/im-turn-context-adapter.js.map +1 -1
  100. package/lib/context/turn-envelope.d.ts +1 -1
  101. package/lib/context/turn-envelope.d.ts.map +1 -1
  102. package/lib/context/turn-envelope.js +4 -0
  103. package/lib/context/turn-envelope.js.map +1 -1
  104. package/lib/context/turn-user-message.d.ts +1 -1
  105. package/lib/context/turn-user-message.d.ts.map +1 -1
  106. package/lib/context/turn-user-message.js +3 -3
  107. package/lib/context/turn-user-message.js.map +1 -1
  108. package/lib/core/agent-core-run.d.ts.map +1 -1
  109. package/lib/core/agent-core-run.js +36 -12
  110. package/lib/core/agent-core-run.js.map +1 -1
  111. package/lib/core/agent-loop-standalone.d.ts +1 -1
  112. package/lib/core/agent-loop-standalone.js +13 -6
  113. package/lib/core/agent-loop-standalone.js.map +1 -1
  114. package/lib/core/tool-execution-authority.d.ts +2 -2
  115. package/lib/core/tool-execution-authority.d.ts.map +1 -1
  116. package/lib/data-governance/data-governance.d.ts +198 -0
  117. package/lib/data-governance/data-governance.d.ts.map +1 -0
  118. package/lib/data-governance/data-governance.js +660 -0
  119. package/lib/data-governance/data-governance.js.map +1 -0
  120. package/lib/data-governance/database-payload-lifecycle-repository.d.ts +68 -0
  121. package/lib/data-governance/database-payload-lifecycle-repository.d.ts.map +1 -0
  122. package/lib/data-governance/database-payload-lifecycle-repository.js +226 -0
  123. package/lib/data-governance/database-payload-lifecycle-repository.js.map +1 -0
  124. package/lib/data-governance/disclosure-manifest.d.ts +110 -0
  125. package/lib/data-governance/disclosure-manifest.d.ts.map +1 -0
  126. package/lib/data-governance/disclosure-manifest.js +264 -0
  127. package/lib/data-governance/disclosure-manifest.js.map +1 -0
  128. package/lib/data-governance/encrypted-database-payload-vault.d.ts +107 -0
  129. package/lib/data-governance/encrypted-database-payload-vault.d.ts.map +1 -0
  130. package/lib/data-governance/encrypted-database-payload-vault.js +236 -0
  131. package/lib/data-governance/encrypted-database-payload-vault.js.map +1 -0
  132. package/lib/data-governance/encrypted-file-payload-vault.d.ts +117 -0
  133. package/lib/data-governance/encrypted-file-payload-vault.d.ts.map +1 -0
  134. package/lib/data-governance/encrypted-file-payload-vault.js +507 -0
  135. package/lib/data-governance/encrypted-file-payload-vault.js.map +1 -0
  136. package/lib/data-governance/file-payload-lifecycle-repository.d.ts +19 -0
  137. package/lib/data-governance/file-payload-lifecycle-repository.d.ts.map +1 -0
  138. package/lib/data-governance/file-payload-lifecycle-repository.js +194 -0
  139. package/lib/data-governance/file-payload-lifecycle-repository.js.map +1 -0
  140. package/lib/data-governance/governance-authority-repository.d.ts +148 -0
  141. package/lib/data-governance/governance-authority-repository.d.ts.map +1 -0
  142. package/lib/data-governance/governance-authority-repository.js +439 -0
  143. package/lib/data-governance/governance-authority-repository.js.map +1 -0
  144. package/lib/data-governance/governed-payload-write-saga.d.ts +126 -0
  145. package/lib/data-governance/governed-payload-write-saga.d.ts.map +1 -0
  146. package/lib/data-governance/governed-payload-write-saga.js +471 -0
  147. package/lib/data-governance/governed-payload-write-saga.js.map +1 -0
  148. package/lib/data-governance/payload-hold-overdue-projection.d.ts +57 -0
  149. package/lib/data-governance/payload-hold-overdue-projection.d.ts.map +1 -0
  150. package/lib/data-governance/payload-hold-overdue-projection.js +80 -0
  151. package/lib/data-governance/payload-hold-overdue-projection.js.map +1 -0
  152. package/lib/data-governance/payload-lifecycle.d.ts +359 -0
  153. package/lib/data-governance/payload-lifecycle.d.ts.map +1 -0
  154. package/lib/data-governance/payload-lifecycle.js +930 -0
  155. package/lib/data-governance/payload-lifecycle.js.map +1 -0
  156. package/lib/data-governance/payload-vault-storage-handoff.d.ts +255 -0
  157. package/lib/data-governance/payload-vault-storage-handoff.d.ts.map +1 -0
  158. package/lib/data-governance/payload-vault-storage-handoff.js +471 -0
  159. package/lib/data-governance/payload-vault-storage-handoff.js.map +1 -0
  160. package/lib/defaults/hooks.d.ts +2 -2
  161. package/lib/defaults/hooks.d.ts.map +1 -1
  162. package/lib/defaults/hooks.js +2 -2
  163. package/lib/defaults/hooks.js.map +1 -1
  164. package/lib/defaults/subagents.d.ts +2 -2
  165. package/lib/defaults/subagents.d.ts.map +1 -1
  166. package/lib/defaults/subagents.js +2 -2
  167. package/lib/defaults/subagents.js.map +1 -1
  168. package/lib/defaults/tools.d.ts +1 -2
  169. package/lib/defaults/tools.js +2 -2
  170. package/lib/defaults/tools.js.map +1 -1
  171. package/lib/discovery/agent-surface-info.d.ts +0 -2
  172. package/lib/discovery/agent-surface-info.d.ts.map +1 -1
  173. package/lib/discovery/agent-surface-info.js +0 -5
  174. package/lib/discovery/agent-surface-info.js.map +1 -1
  175. package/lib/discovery/agent-surface.d.ts.map +1 -1
  176. package/lib/discovery/agent-surface.js +0 -39
  177. package/lib/discovery/agent-surface.js.map +1 -1
  178. package/lib/event/agent-stream-hooks.d.ts +1 -1
  179. package/lib/event/hook-stream-sink.d.ts +1 -1
  180. package/lib/event/publish-agent-stream.d.ts +3 -3
  181. package/lib/event/publish-agent-stream.d.ts.map +1 -1
  182. package/lib/event/publish-agent-stream.js +1 -1
  183. package/lib/event/publish-agent-stream.js.map +1 -1
  184. package/lib/event/session-events.d.ts +1 -1
  185. package/lib/event/turn-event.d.ts +22 -2
  186. package/lib/event/turn-event.d.ts.map +1 -1
  187. package/lib/event/turn-event.js.map +1 -1
  188. package/lib/event/turn-to-agent-stream.js +6 -0
  189. package/lib/event/turn-to-agent-stream.js.map +1 -1
  190. package/lib/features/agent-feature.d.ts +1 -1
  191. package/lib/features/mcp-feature.d.ts +1 -1
  192. package/lib/index.d.ts +100 -33
  193. package/lib/index.d.ts.map +1 -1
  194. package/lib/index.js +95 -21
  195. package/lib/index.js.map +1 -1
  196. package/lib/ingress/capability-ingress.d.ts +5 -5
  197. package/lib/ingress/capability-ingress.d.ts.map +1 -1
  198. package/lib/ingress/capability-ingress.js +26 -26
  199. package/lib/ingress/capability-ingress.js.map +1 -1
  200. package/lib/init/activate-ai-database-storage.d.ts +5 -3
  201. package/lib/init/activate-ai-database-storage.d.ts.map +1 -1
  202. package/lib/init/activate-ai-database-storage.js +23 -32
  203. package/lib/init/activate-ai-database-storage.js.map +1 -1
  204. package/lib/init/configure-zhin-agent.d.ts +1 -1
  205. package/lib/init/configure-zhin-agent.d.ts.map +1 -1
  206. package/lib/init/configure-zhin-agent.js +3 -5
  207. package/lib/init/configure-zhin-agent.js.map +1 -1
  208. package/lib/init/define-ai-database-models.d.ts.map +1 -1
  209. package/lib/init/define-ai-database-models.js +21 -5
  210. package/lib/init/define-ai-database-models.js.map +1 -1
  211. package/lib/init/dispose-zhin-agent.d.ts +1 -3
  212. package/lib/init/dispose-zhin-agent.d.ts.map +1 -1
  213. package/lib/init/dispose-zhin-agent.js +0 -2
  214. package/lib/init/dispose-zhin-agent.js.map +1 -1
  215. package/lib/init/introspection-collectors.d.ts +1 -1
  216. package/lib/init/introspection-collectors.d.ts.map +1 -1
  217. package/lib/init/introspection-collectors.js +13 -14
  218. package/lib/init/introspection-collectors.js.map +1 -1
  219. package/lib/internal/agent-host.d.ts +5 -8
  220. package/lib/internal/agent-host.d.ts.map +1 -1
  221. package/lib/internal/host-types.d.ts +4 -0
  222. package/lib/internal/host-types.d.ts.map +1 -1
  223. package/lib/journal/persistent-turn-journal.d.ts +5 -1
  224. package/lib/journal/persistent-turn-journal.d.ts.map +1 -1
  225. package/lib/journal/persistent-turn-journal.js +11 -1
  226. package/lib/journal/persistent-turn-journal.js.map +1 -1
  227. package/lib/mcp-client/bridge.d.ts +1 -1
  228. package/lib/mcp-client/connection.d.ts +1 -1
  229. package/lib/mcp-client/index.d.ts +1 -1
  230. package/lib/media/media-normalize.d.ts +9 -5
  231. package/lib/media/media-normalize.d.ts.map +1 -1
  232. package/lib/media/media-normalize.js +125 -69
  233. package/lib/media/media-normalize.js.map +1 -1
  234. package/lib/media/media-publisher.d.ts.map +1 -1
  235. package/lib/media/media-publisher.js +48 -3
  236. package/lib/media/media-publisher.js.map +1 -1
  237. package/lib/media/vision-capability.js +1 -1
  238. package/lib/media/vision-capability.js.map +1 -1
  239. package/lib/memory/index.d.ts +1 -1
  240. package/lib/memory/index.d.ts.map +1 -1
  241. package/lib/plugin-ai-hook-bus.d.ts +1 -1
  242. package/lib/plugin-runtime/agent-host-port.d.ts +74 -4
  243. package/lib/plugin-runtime/agent-host-port.d.ts.map +1 -1
  244. package/lib/plugin-runtime/agent-host-port.js.map +1 -1
  245. package/lib/plugin-runtime/agent-runtime.d.ts +3 -0
  246. package/lib/plugin-runtime/agent-runtime.d.ts.map +1 -1
  247. package/lib/plugin-runtime/agent-runtime.js +73 -3
  248. package/lib/plugin-runtime/agent-runtime.js.map +1 -1
  249. package/lib/plugin-runtime/agent-trace-runtime.d.ts +37 -0
  250. package/lib/plugin-runtime/agent-trace-runtime.d.ts.map +1 -0
  251. package/lib/plugin-runtime/agent-trace-runtime.js +150 -0
  252. package/lib/plugin-runtime/agent-trace-runtime.js.map +1 -0
  253. package/lib/plugin-runtime/capability-tools.js +2 -2
  254. package/lib/plugin-runtime/capability-tools.js.map +1 -1
  255. package/lib/plugin-runtime/database-overlay-pack-promotion-repository.d.ts +70 -0
  256. package/lib/plugin-runtime/database-overlay-pack-promotion-repository.d.ts.map +1 -0
  257. package/lib/plugin-runtime/database-overlay-pack-promotion-repository.js +203 -0
  258. package/lib/plugin-runtime/database-overlay-pack-promotion-repository.js.map +1 -0
  259. package/lib/plugin-runtime/deferred-capability-plan.d.ts +26 -0
  260. package/lib/plugin-runtime/deferred-capability-plan.d.ts.map +1 -1
  261. package/lib/plugin-runtime/deferred-capability-plan.js +98 -4
  262. package/lib/plugin-runtime/deferred-capability-plan.js.map +1 -1
  263. package/lib/plugin-runtime/full-agent-turn-engine.js +48 -5
  264. package/lib/plugin-runtime/full-agent-turn-engine.js.map +1 -1
  265. package/lib/plugin-runtime/host-mcp-projection.d.ts +1 -1
  266. package/lib/plugin-runtime/index.d.ts +67 -0
  267. package/lib/plugin-runtime/index.d.ts.map +1 -1
  268. package/lib/plugin-runtime/index.js +65 -0
  269. package/lib/plugin-runtime/index.js.map +1 -1
  270. package/lib/plugin-runtime/native-interaction-tools.js +1 -1
  271. package/lib/plugin-runtime/native-interaction-tools.js.map +1 -1
  272. package/lib/plugin-runtime/native-semantic-memory-tools.d.ts +17 -0
  273. package/lib/plugin-runtime/native-semantic-memory-tools.d.ts.map +1 -0
  274. package/lib/plugin-runtime/native-semantic-memory-tools.js +169 -0
  275. package/lib/plugin-runtime/native-semantic-memory-tools.js.map +1 -0
  276. package/lib/plugin-runtime/turn-intent-resolver.d.ts +20 -0
  277. package/lib/plugin-runtime/turn-intent-resolver.d.ts.map +1 -0
  278. package/lib/plugin-runtime/turn-intent-resolver.js +8 -0
  279. package/lib/plugin-runtime/turn-intent-resolver.js.map +1 -0
  280. package/lib/plugin-runtime/workroom-acceptance-authority.d.ts +5 -0
  281. package/lib/plugin-runtime/workroom-acceptance-authority.d.ts.map +1 -0
  282. package/lib/plugin-runtime/workroom-acceptance-authority.js +14 -0
  283. package/lib/plugin-runtime/workroom-acceptance-authority.js.map +1 -0
  284. package/lib/plugin-runtime/workroom-acceptance-fact-providers.d.ts +233 -0
  285. package/lib/plugin-runtime/workroom-acceptance-fact-providers.d.ts.map +1 -0
  286. package/lib/plugin-runtime/workroom-acceptance-fact-providers.js +517 -0
  287. package/lib/plugin-runtime/workroom-acceptance-fact-providers.js.map +1 -0
  288. package/lib/plugin-runtime/workroom-acceptance-internal-providers.d.ts +139 -0
  289. package/lib/plugin-runtime/workroom-acceptance-internal-providers.d.ts.map +1 -0
  290. package/lib/plugin-runtime/workroom-acceptance-internal-providers.js +430 -0
  291. package/lib/plugin-runtime/workroom-acceptance-internal-providers.js.map +1 -0
  292. package/lib/plugin-runtime/workroom-acceptance-policy.d.ts +4 -0
  293. package/lib/plugin-runtime/workroom-acceptance-policy.d.ts.map +1 -0
  294. package/lib/plugin-runtime/workroom-acceptance-policy.js +20 -0
  295. package/lib/plugin-runtime/workroom-acceptance-policy.js.map +1 -0
  296. package/lib/plugin-runtime/workroom-acceptance-production-composition.d.ts +175 -0
  297. package/lib/plugin-runtime/workroom-acceptance-production-composition.d.ts.map +1 -0
  298. package/lib/plugin-runtime/workroom-acceptance-production-composition.js +793 -0
  299. package/lib/plugin-runtime/workroom-acceptance-production-composition.js.map +1 -0
  300. package/lib/plugin-runtime/workroom-acceptance-provider-composition.d.ts +186 -0
  301. package/lib/plugin-runtime/workroom-acceptance-provider-composition.d.ts.map +1 -0
  302. package/lib/plugin-runtime/workroom-acceptance-provider-composition.js +553 -0
  303. package/lib/plugin-runtime/workroom-acceptance-provider-composition.js.map +1 -0
  304. package/lib/plugin-runtime/workroom-accepted-source-runtime.d.ts +75 -0
  305. package/lib/plugin-runtime/workroom-accepted-source-runtime.d.ts.map +1 -0
  306. package/lib/plugin-runtime/workroom-accepted-source-runtime.js +267 -0
  307. package/lib/plugin-runtime/workroom-accepted-source-runtime.js.map +1 -0
  308. package/lib/plugin-runtime/workroom-assignment-authority-grant-runtime.d.ts +42 -0
  309. package/lib/plugin-runtime/workroom-assignment-authority-grant-runtime.d.ts.map +1 -0
  310. package/lib/plugin-runtime/workroom-assignment-authority-grant-runtime.js +90 -0
  311. package/lib/plugin-runtime/workroom-assignment-authority-grant-runtime.js.map +1 -0
  312. package/lib/plugin-runtime/workroom-assignment-authority-provider.d.ts +159 -0
  313. package/lib/plugin-runtime/workroom-assignment-authority-provider.d.ts.map +1 -0
  314. package/lib/plugin-runtime/workroom-assignment-authority-provider.js +595 -0
  315. package/lib/plugin-runtime/workroom-assignment-authority-provider.js.map +1 -0
  316. package/lib/plugin-runtime/workroom-assignment-knowledge-composition.d.ts +58 -0
  317. package/lib/plugin-runtime/workroom-assignment-knowledge-composition.d.ts.map +1 -0
  318. package/lib/plugin-runtime/workroom-assignment-knowledge-composition.js +218 -0
  319. package/lib/plugin-runtime/workroom-assignment-knowledge-composition.js.map +1 -0
  320. package/lib/plugin-runtime/workroom-data-governance-authority-writer.d.ts +47 -0
  321. package/lib/plugin-runtime/workroom-data-governance-authority-writer.d.ts.map +1 -0
  322. package/lib/plugin-runtime/workroom-data-governance-authority-writer.js +115 -0
  323. package/lib/plugin-runtime/workroom-data-governance-authority-writer.js.map +1 -0
  324. package/lib/plugin-runtime/workroom-data-governance-composition.d.ts +28 -0
  325. package/lib/plugin-runtime/workroom-data-governance-composition.d.ts.map +1 -0
  326. package/lib/plugin-runtime/workroom-data-governance-composition.js +41 -0
  327. package/lib/plugin-runtime/workroom-data-governance-composition.js.map +1 -0
  328. package/lib/plugin-runtime/workroom-data-governance-root-provider.d.ts +51 -0
  329. package/lib/plugin-runtime/workroom-data-governance-root-provider.d.ts.map +1 -0
  330. package/lib/plugin-runtime/workroom-data-governance-root-provider.js +66 -0
  331. package/lib/plugin-runtime/workroom-data-governance-root-provider.js.map +1 -0
  332. package/lib/plugin-runtime/workroom-data-governance-runtime.d.ts +134 -0
  333. package/lib/plugin-runtime/workroom-data-governance-runtime.d.ts.map +1 -0
  334. package/lib/plugin-runtime/workroom-data-governance-runtime.js +1253 -0
  335. package/lib/plugin-runtime/workroom-data-governance-runtime.js.map +1 -0
  336. package/lib/plugin-runtime/workroom-data-governance-storage.d.ts +66 -0
  337. package/lib/plugin-runtime/workroom-data-governance-storage.d.ts.map +1 -0
  338. package/lib/plugin-runtime/workroom-data-governance-storage.js +160 -0
  339. package/lib/plugin-runtime/workroom-data-governance-storage.js.map +1 -0
  340. package/lib/plugin-runtime/workroom-data-lifecycle-composition.d.ts +37 -0
  341. package/lib/plugin-runtime/workroom-data-lifecycle-composition.d.ts.map +1 -0
  342. package/lib/plugin-runtime/workroom-data-lifecycle-composition.js +131 -0
  343. package/lib/plugin-runtime/workroom-data-lifecycle-composition.js.map +1 -0
  344. package/lib/plugin-runtime/workroom-data-lifecycle-console.d.ts +238 -0
  345. package/lib/plugin-runtime/workroom-data-lifecycle-console.d.ts.map +1 -0
  346. package/lib/plugin-runtime/workroom-data-lifecycle-console.js +495 -0
  347. package/lib/plugin-runtime/workroom-data-lifecycle-console.js.map +1 -0
  348. package/lib/plugin-runtime/workroom-data-lifecycle-human-ingress.d.ts +15 -0
  349. package/lib/plugin-runtime/workroom-data-lifecycle-human-ingress.d.ts.map +1 -0
  350. package/lib/plugin-runtime/workroom-data-lifecycle-human-ingress.js +119 -0
  351. package/lib/plugin-runtime/workroom-data-lifecycle-human-ingress.js.map +1 -0
  352. package/lib/plugin-runtime/workroom-dynamic-planning-provider.d.ts +142 -0
  353. package/lib/plugin-runtime/workroom-dynamic-planning-provider.d.ts.map +1 -0
  354. package/lib/plugin-runtime/workroom-dynamic-planning-provider.js +301 -0
  355. package/lib/plugin-runtime/workroom-dynamic-planning-provider.js.map +1 -0
  356. package/lib/plugin-runtime/workroom-dynamic-planning.d.ts +4 -0
  357. package/lib/plugin-runtime/workroom-dynamic-planning.d.ts.map +1 -0
  358. package/lib/plugin-runtime/workroom-dynamic-planning.js +13 -0
  359. package/lib/plugin-runtime/workroom-dynamic-planning.js.map +1 -0
  360. package/lib/plugin-runtime/workroom-effect-composition.d.ts +37 -0
  361. package/lib/plugin-runtime/workroom-effect-composition.d.ts.map +1 -0
  362. package/lib/plugin-runtime/workroom-effect-composition.js +69 -0
  363. package/lib/plugin-runtime/workroom-effect-composition.js.map +1 -0
  364. package/lib/plugin-runtime/workroom-effect-production.d.ts +133 -0
  365. package/lib/plugin-runtime/workroom-effect-production.d.ts.map +1 -0
  366. package/lib/plugin-runtime/workroom-effect-production.js +272 -0
  367. package/lib/plugin-runtime/workroom-effect-production.js.map +1 -0
  368. package/lib/plugin-runtime/workroom-effect-runtime.d.ts +72 -0
  369. package/lib/plugin-runtime/workroom-effect-runtime.d.ts.map +1 -0
  370. package/lib/plugin-runtime/workroom-effect-runtime.js +179 -0
  371. package/lib/plugin-runtime/workroom-effect-runtime.js.map +1 -0
  372. package/lib/plugin-runtime/workroom-governed-dispatch-composition.d.ts +27 -0
  373. package/lib/plugin-runtime/workroom-governed-dispatch-composition.d.ts.map +1 -0
  374. package/lib/plugin-runtime/workroom-governed-dispatch-composition.js +40 -0
  375. package/lib/plugin-runtime/workroom-governed-dispatch-composition.js.map +1 -0
  376. package/lib/plugin-runtime/workroom-governed-dispatch-reasons.d.ts +10 -0
  377. package/lib/plugin-runtime/workroom-governed-dispatch-reasons.d.ts.map +1 -0
  378. package/lib/plugin-runtime/workroom-governed-dispatch-reasons.js +20 -0
  379. package/lib/plugin-runtime/workroom-governed-dispatch-reasons.js.map +1 -0
  380. package/lib/plugin-runtime/workroom-journal-payload-composition.d.ts +16 -0
  381. package/lib/plugin-runtime/workroom-journal-payload-composition.d.ts.map +1 -0
  382. package/lib/plugin-runtime/workroom-journal-payload-composition.js +69 -0
  383. package/lib/plugin-runtime/workroom-journal-payload-composition.js.map +1 -0
  384. package/lib/plugin-runtime/workroom-local-agent-core-adapter.d.ts +17 -0
  385. package/lib/plugin-runtime/workroom-local-agent-core-adapter.d.ts.map +1 -0
  386. package/lib/plugin-runtime/workroom-local-agent-core-adapter.js +101 -0
  387. package/lib/plugin-runtime/workroom-local-agent-core-adapter.js.map +1 -0
  388. package/lib/plugin-runtime/workroom-local-agent-loop.d.ts +90 -0
  389. package/lib/plugin-runtime/workroom-local-agent-loop.d.ts.map +1 -0
  390. package/lib/plugin-runtime/workroom-local-agent-loop.js +303 -0
  391. package/lib/plugin-runtime/workroom-local-agent-loop.js.map +1 -0
  392. package/lib/plugin-runtime/workroom-local-assignment-authority.d.ts +5 -0
  393. package/lib/plugin-runtime/workroom-local-assignment-authority.d.ts.map +1 -0
  394. package/lib/plugin-runtime/workroom-local-assignment-authority.js +16 -0
  395. package/lib/plugin-runtime/workroom-local-assignment-authority.js.map +1 -0
  396. package/lib/plugin-runtime/workroom-local-assignment-runtime.d.ts +33 -0
  397. package/lib/plugin-runtime/workroom-local-assignment-runtime.d.ts.map +1 -0
  398. package/lib/plugin-runtime/workroom-local-assignment-runtime.js +189 -0
  399. package/lib/plugin-runtime/workroom-local-assignment-runtime.js.map +1 -0
  400. package/lib/plugin-runtime/workroom-local-assignment-supply.d.ts +39 -0
  401. package/lib/plugin-runtime/workroom-local-assignment-supply.d.ts.map +1 -0
  402. package/lib/plugin-runtime/workroom-local-assignment-supply.js +107 -0
  403. package/lib/plugin-runtime/workroom-local-assignment-supply.js.map +1 -0
  404. package/lib/plugin-runtime/workroom-overlay-pack-promotion.d.ts +145 -0
  405. package/lib/plugin-runtime/workroom-overlay-pack-promotion.d.ts.map +1 -0
  406. package/lib/plugin-runtime/workroom-overlay-pack-promotion.js +516 -0
  407. package/lib/plugin-runtime/workroom-overlay-pack-promotion.js.map +1 -0
  408. package/lib/plugin-runtime/workroom-payload-processor-recall.d.ts +91 -0
  409. package/lib/plugin-runtime/workroom-payload-processor-recall.d.ts.map +1 -0
  410. package/lib/plugin-runtime/workroom-payload-processor-recall.js +189 -0
  411. package/lib/plugin-runtime/workroom-payload-processor-recall.js.map +1 -0
  412. package/lib/plugin-runtime/workroom-plan-gate-authority.d.ts +7 -0
  413. package/lib/plugin-runtime/workroom-plan-gate-authority.d.ts.map +1 -0
  414. package/lib/plugin-runtime/workroom-plan-gate-authority.js +40 -0
  415. package/lib/plugin-runtime/workroom-plan-gate-authority.js.map +1 -0
  416. package/lib/plugin-runtime/workroom-portfolio-capacity.d.ts +132 -0
  417. package/lib/plugin-runtime/workroom-portfolio-capacity.d.ts.map +1 -0
  418. package/lib/plugin-runtime/workroom-portfolio-capacity.js +189 -0
  419. package/lib/plugin-runtime/workroom-portfolio-capacity.js.map +1 -0
  420. package/lib/plugin-runtime/workroom-portfolio-checkpoint-ack.d.ts +38 -0
  421. package/lib/plugin-runtime/workroom-portfolio-checkpoint-ack.d.ts.map +1 -0
  422. package/lib/plugin-runtime/workroom-portfolio-checkpoint-ack.js +103 -0
  423. package/lib/plugin-runtime/workroom-portfolio-checkpoint-ack.js.map +1 -0
  424. package/lib/plugin-runtime/workroom-portfolio-control-composition.d.ts +30 -0
  425. package/lib/plugin-runtime/workroom-portfolio-control-composition.d.ts.map +1 -0
  426. package/lib/plugin-runtime/workroom-portfolio-control-composition.js +102 -0
  427. package/lib/plugin-runtime/workroom-portfolio-control-composition.js.map +1 -0
  428. package/lib/plugin-runtime/workroom-portfolio-control-runtime.d.ts +41 -0
  429. package/lib/plugin-runtime/workroom-portfolio-control-runtime.d.ts.map +1 -0
  430. package/lib/plugin-runtime/workroom-portfolio-control-runtime.js +208 -0
  431. package/lib/plugin-runtime/workroom-portfolio-control-runtime.js.map +1 -0
  432. package/lib/plugin-runtime/workroom-portfolio-grant-assignment.d.ts +141 -0
  433. package/lib/plugin-runtime/workroom-portfolio-grant-assignment.d.ts.map +1 -0
  434. package/lib/plugin-runtime/workroom-portfolio-grant-assignment.js +331 -0
  435. package/lib/plugin-runtime/workroom-portfolio-grant-assignment.js.map +1 -0
  436. package/lib/plugin-runtime/workroom-portfolio-kernel-authority.d.ts +23 -0
  437. package/lib/plugin-runtime/workroom-portfolio-kernel-authority.d.ts.map +1 -0
  438. package/lib/plugin-runtime/workroom-portfolio-kernel-authority.js +82 -0
  439. package/lib/plugin-runtime/workroom-portfolio-kernel-authority.js.map +1 -0
  440. package/lib/plugin-runtime/workroom-portfolio-sponsor.d.ts +96 -0
  441. package/lib/plugin-runtime/workroom-portfolio-sponsor.d.ts.map +1 -0
  442. package/lib/plugin-runtime/workroom-portfolio-sponsor.js +313 -0
  443. package/lib/plugin-runtime/workroom-portfolio-sponsor.js.map +1 -0
  444. package/lib/plugin-runtime/workroom-preemption-runtime.d.ts +57 -0
  445. package/lib/plugin-runtime/workroom-preemption-runtime.d.ts.map +1 -0
  446. package/lib/plugin-runtime/workroom-preemption-runtime.js +163 -0
  447. package/lib/plugin-runtime/workroom-preemption-runtime.js.map +1 -0
  448. package/lib/plugin-runtime/workroom-priority-authority.d.ts +11 -0
  449. package/lib/plugin-runtime/workroom-priority-authority.d.ts.map +1 -0
  450. package/lib/plugin-runtime/workroom-priority-authority.js +72 -0
  451. package/lib/plugin-runtime/workroom-priority-authority.js.map +1 -0
  452. package/lib/plugin-runtime/workroom-profile-authority-composition.d.ts +61 -0
  453. package/lib/plugin-runtime/workroom-profile-authority-composition.d.ts.map +1 -0
  454. package/lib/plugin-runtime/workroom-profile-authority-composition.js +231 -0
  455. package/lib/plugin-runtime/workroom-profile-authority-composition.js.map +1 -0
  456. package/lib/plugin-runtime/workroom-profile-authority-runtime.d.ts +228 -0
  457. package/lib/plugin-runtime/workroom-profile-authority-runtime.d.ts.map +1 -0
  458. package/lib/plugin-runtime/workroom-profile-authority-runtime.js +1132 -0
  459. package/lib/plugin-runtime/workroom-profile-authority-runtime.js.map +1 -0
  460. package/lib/plugin-runtime/workroom-projection-outbound.d.ts +10 -0
  461. package/lib/plugin-runtime/workroom-projection-outbound.d.ts.map +1 -0
  462. package/lib/plugin-runtime/workroom-projection-outbound.js +35 -0
  463. package/lib/plugin-runtime/workroom-projection-outbound.js.map +1 -0
  464. package/lib/plugin-runtime/workroom-projection-runtime.d.ts +87 -0
  465. package/lib/plugin-runtime/workroom-projection-runtime.d.ts.map +1 -0
  466. package/lib/plugin-runtime/workroom-projection-runtime.js +421 -0
  467. package/lib/plugin-runtime/workroom-projection-runtime.js.map +1 -0
  468. package/lib/plugin-runtime/workroom-remote-assignment-authority.d.ts +9 -0
  469. package/lib/plugin-runtime/workroom-remote-assignment-authority.d.ts.map +1 -0
  470. package/lib/plugin-runtime/workroom-remote-assignment-authority.js +20 -0
  471. package/lib/plugin-runtime/workroom-remote-assignment-authority.js.map +1 -0
  472. package/lib/plugin-runtime/workroom-remote-callback-runtime.d.ts +38 -0
  473. package/lib/plugin-runtime/workroom-remote-callback-runtime.d.ts.map +1 -0
  474. package/lib/plugin-runtime/workroom-remote-callback-runtime.js +80 -0
  475. package/lib/plugin-runtime/workroom-remote-callback-runtime.js.map +1 -0
  476. package/lib/plugin-runtime/workroom-remote-executor.d.ts +20 -0
  477. package/lib/plugin-runtime/workroom-remote-executor.d.ts.map +1 -0
  478. package/lib/plugin-runtime/workroom-remote-executor.js +42 -0
  479. package/lib/plugin-runtime/workroom-remote-executor.js.map +1 -0
  480. package/lib/plugin-runtime/workroom-reviewer-authority-runtime.d.ts +72 -0
  481. package/lib/plugin-runtime/workroom-reviewer-authority-runtime.d.ts.map +1 -0
  482. package/lib/plugin-runtime/workroom-reviewer-authority-runtime.js +142 -0
  483. package/lib/plugin-runtime/workroom-reviewer-authority-runtime.js.map +1 -0
  484. package/lib/plugin-runtime/workroom-risk-acceptance-runtime.d.ts +112 -0
  485. package/lib/plugin-runtime/workroom-risk-acceptance-runtime.d.ts.map +1 -0
  486. package/lib/plugin-runtime/workroom-risk-acceptance-runtime.js +376 -0
  487. package/lib/plugin-runtime/workroom-risk-acceptance-runtime.js.map +1 -0
  488. package/lib/plugin-runtime/workroom-run-profile-pin-authority.d.ts +42 -0
  489. package/lib/plugin-runtime/workroom-run-profile-pin-authority.d.ts.map +1 -0
  490. package/lib/plugin-runtime/workroom-run-profile-pin-authority.js +125 -0
  491. package/lib/plugin-runtime/workroom-run-profile-pin-authority.js.map +1 -0
  492. package/lib/plugin-runtime/workroom-scheduler-portfolio-composition.d.ts +25 -0
  493. package/lib/plugin-runtime/workroom-scheduler-portfolio-composition.d.ts.map +1 -0
  494. package/lib/plugin-runtime/workroom-scheduler-portfolio-composition.js +79 -0
  495. package/lib/plugin-runtime/workroom-scheduler-portfolio-composition.js.map +1 -0
  496. package/lib/plugin-runtime/workroom-scheduler-portfolio-contract.d.ts +16 -0
  497. package/lib/plugin-runtime/workroom-scheduler-portfolio-contract.d.ts.map +1 -0
  498. package/lib/plugin-runtime/workroom-scheduler-portfolio-contract.js +49 -0
  499. package/lib/plugin-runtime/workroom-scheduler-portfolio-contract.js.map +1 -0
  500. package/lib/plugin-runtime/workroom-scheduler-portfolio-request-authority.d.ts +63 -0
  501. package/lib/plugin-runtime/workroom-scheduler-portfolio-request-authority.d.ts.map +1 -0
  502. package/lib/plugin-runtime/workroom-scheduler-portfolio-request-authority.js +233 -0
  503. package/lib/plugin-runtime/workroom-scheduler-portfolio-request-authority.js.map +1 -0
  504. package/lib/plugin-runtime/workroom-scheduler-portfolio-supply.d.ts +37 -0
  505. package/lib/plugin-runtime/workroom-scheduler-portfolio-supply.d.ts.map +1 -0
  506. package/lib/plugin-runtime/workroom-scheduler-portfolio-supply.js +122 -0
  507. package/lib/plugin-runtime/workroom-scheduler-portfolio-supply.js.map +1 -0
  508. package/lib/plugin-runtime/workroom-scheduler-route-registry.d.ts +27 -0
  509. package/lib/plugin-runtime/workroom-scheduler-route-registry.d.ts.map +1 -0
  510. package/lib/plugin-runtime/workroom-scheduler-route-registry.js +136 -0
  511. package/lib/plugin-runtime/workroom-scheduler-route-registry.js.map +1 -0
  512. package/lib/plugin-runtime/workroom-scheduler-runtime.d.ts +84 -0
  513. package/lib/plugin-runtime/workroom-scheduler-runtime.d.ts.map +1 -0
  514. package/lib/plugin-runtime/workroom-scheduler-runtime.js +231 -0
  515. package/lib/plugin-runtime/workroom-scheduler-runtime.js.map +1 -0
  516. package/lib/portfolio/capacity-control-outbox.d.ts +174 -0
  517. package/lib/portfolio/capacity-control-outbox.d.ts.map +1 -0
  518. package/lib/portfolio/capacity-control-outbox.js +338 -0
  519. package/lib/portfolio/capacity-control-outbox.js.map +1 -0
  520. package/lib/portfolio/database-capacity-control-outbox.d.ts +62 -0
  521. package/lib/portfolio/database-capacity-control-outbox.d.ts.map +1 -0
  522. package/lib/portfolio/database-capacity-control-outbox.js +166 -0
  523. package/lib/portfolio/database-capacity-control-outbox.js.map +1 -0
  524. package/lib/portfolio/file-capacity-control-outbox.d.ts +10 -0
  525. package/lib/portfolio/file-capacity-control-outbox.d.ts.map +1 -0
  526. package/lib/portfolio/file-capacity-control-outbox.js +113 -0
  527. package/lib/portfolio/file-capacity-control-outbox.js.map +1 -0
  528. package/lib/portfolio/file-portfolio-journal.d.ts +11 -0
  529. package/lib/portfolio/file-portfolio-journal.d.ts.map +1 -0
  530. package/lib/portfolio/file-portfolio-journal.js +196 -0
  531. package/lib/portfolio/file-portfolio-journal.js.map +1 -0
  532. package/lib/portfolio/portfolio-admission.d.ts +95 -0
  533. package/lib/portfolio/portfolio-admission.d.ts.map +1 -0
  534. package/lib/portfolio/portfolio-admission.js +1080 -0
  535. package/lib/portfolio/portfolio-admission.js.map +1 -0
  536. package/lib/portfolio/portfolio-journal.d.ts +359 -0
  537. package/lib/portfolio/portfolio-journal.d.ts.map +1 -0
  538. package/lib/portfolio/portfolio-journal.js +844 -0
  539. package/lib/portfolio/portfolio-journal.js.map +1 -0
  540. package/lib/portfolio/resource-bundle.d.ts +136 -0
  541. package/lib/portfolio/resource-bundle.d.ts.map +1 -0
  542. package/lib/portfolio/resource-bundle.js +387 -0
  543. package/lib/portfolio/resource-bundle.js.map +1 -0
  544. package/lib/portfolio/sponsor-projection.d.ts +78 -0
  545. package/lib/portfolio/sponsor-projection.d.ts.map +1 -0
  546. package/lib/portfolio/sponsor-projection.js +135 -0
  547. package/lib/portfolio/sponsor-projection.js.map +1 -0
  548. package/lib/prompt/assembly.d.ts.map +1 -1
  549. package/lib/prompt/assembly.js +1 -3
  550. package/lib/prompt/assembly.js.map +1 -1
  551. package/lib/prompt/prompt-builder.d.ts +1 -1
  552. package/lib/prompt/prompt-builder.d.ts.map +1 -1
  553. package/lib/prompt/system-prompt.d.ts +1 -1
  554. package/lib/prompt/system-prompt.js +2 -2
  555. package/lib/prompt/system-prompt.js.map +1 -1
  556. package/lib/reserved-tools.d.ts.map +1 -1
  557. package/lib/reserved-tools.js +0 -1
  558. package/lib/reserved-tools.js.map +1 -1
  559. package/lib/{orchestrator → resource-hub}/hook-registry.d.ts.map +1 -1
  560. package/lib/{orchestrator → resource-hub}/hook-registry.js.map +1 -1
  561. package/lib/{orchestrator → resource-hub}/index.d.ts +4 -11
  562. package/lib/{orchestrator → resource-hub}/index.d.ts.map +1 -1
  563. package/lib/{orchestrator → resource-hub}/index.js +4 -8
  564. package/lib/{orchestrator → resource-hub}/index.js.map +1 -1
  565. package/lib/{orchestrator → resource-hub}/mcp-lifecycle.d.ts.map +1 -1
  566. package/lib/{orchestrator → resource-hub}/mcp-lifecycle.js.map +1 -1
  567. package/lib/{orchestrator → resource-hub}/mcp-registry.d.ts.map +1 -1
  568. package/lib/{orchestrator → resource-hub}/mcp-registry.js.map +1 -1
  569. package/lib/{orchestrator → resource-hub}/resolve-subagent-tools.d.ts +3 -3
  570. package/lib/resource-hub/resolve-subagent-tools.d.ts.map +1 -0
  571. package/lib/{orchestrator → resource-hub}/resolve-subagent-tools.js +18 -13
  572. package/lib/resource-hub/resolve-subagent-tools.js.map +1 -0
  573. package/lib/{orchestrator → resource-hub}/resource-registry.d.ts.map +1 -1
  574. package/lib/{orchestrator → resource-hub}/resource-registry.js.map +1 -1
  575. package/lib/{orchestrator → resource-hub}/role-configs.d.ts.map +1 -1
  576. package/lib/{orchestrator → resource-hub}/role-configs.js +0 -2
  577. package/lib/{orchestrator → resource-hub}/role-configs.js.map +1 -1
  578. package/lib/{orchestrator → resource-hub}/skill-registry.d.ts.map +1 -1
  579. package/lib/{orchestrator → resource-hub}/skill-registry.js.map +1 -1
  580. package/lib/{orchestrator → resource-hub}/subagent-registry.d.ts.map +1 -1
  581. package/lib/{orchestrator → resource-hub}/subagent-registry.js.map +1 -1
  582. package/lib/{orchestrator → resource-hub}/tool-registry.d.ts.map +1 -1
  583. package/lib/{orchestrator → resource-hub}/tool-registry.js.map +1 -1
  584. package/lib/{orchestrator → resource-hub}/tool-selection.d.ts.map +1 -1
  585. package/lib/{orchestrator → resource-hub}/tool-selection.js.map +1 -1
  586. package/lib/{orchestrator → resource-hub}/types.d.ts +1 -1
  587. package/lib/{orchestrator → resource-hub}/types.d.ts.map +1 -1
  588. package/lib/{orchestrator → resource-hub}/types.js.map +1 -1
  589. package/lib/routing/workroom-bot-identity.d.ts +22 -0
  590. package/lib/routing/workroom-bot-identity.d.ts.map +1 -0
  591. package/lib/routing/workroom-bot-identity.js +46 -0
  592. package/lib/routing/workroom-bot-identity.js.map +1 -0
  593. package/lib/schedule-domain/budget-guard.d.ts +1 -1
  594. package/lib/schedule-domain/budget-guard.d.ts.map +1 -1
  595. package/lib/schedule-domain/budget-guard.js +9 -1
  596. package/lib/schedule-domain/budget-guard.js.map +1 -1
  597. package/lib/schedule-domain/execution-domain.d.ts +1 -0
  598. package/lib/schedule-domain/execution-domain.d.ts.map +1 -1
  599. package/lib/schedule-domain/execution-domain.js +3 -1
  600. package/lib/schedule-domain/execution-domain.js.map +1 -1
  601. package/lib/schedule-domain/schedule-execution-queue.d.ts +24 -0
  602. package/lib/schedule-domain/schedule-execution-queue.d.ts.map +1 -0
  603. package/lib/schedule-domain/schedule-execution-queue.js +123 -0
  604. package/lib/schedule-domain/schedule-execution-queue.js.map +1 -0
  605. package/lib/seam/seam-integration.d.ts +1 -1
  606. package/lib/seam/seam-integration.js +1 -1
  607. package/lib/seam/skill-service.d.ts +1 -1
  608. package/lib/security/exec-policy.d.ts +11 -1
  609. package/lib/security/exec-policy.d.ts.map +1 -1
  610. package/lib/security/exec-policy.js +16 -4
  611. package/lib/security/exec-policy.js.map +1 -1
  612. package/lib/security/policy-facade.d.ts.map +1 -1
  613. package/lib/security/policy-facade.js +60 -5
  614. package/lib/security/policy-facade.js.map +1 -1
  615. package/lib/security/sandbox-docker.js +1 -1
  616. package/lib/security/sandbox-docker.js.map +1 -1
  617. package/lib/security/sandbox.d.ts +2 -0
  618. package/lib/security/sandbox.d.ts.map +1 -1
  619. package/lib/security/sandbox.js +16 -4
  620. package/lib/security/sandbox.js.map +1 -1
  621. package/lib/security/turn-file-authority.d.ts +1 -1
  622. package/lib/security/turn-file-authority.d.ts.map +1 -1
  623. package/lib/security/turn-file-authority.js +10 -3
  624. package/lib/security/turn-file-authority.js.map +1 -1
  625. package/lib/security/turn-sandbox-authority.d.ts +13 -0
  626. package/lib/security/turn-sandbox-authority.d.ts.map +1 -0
  627. package/lib/security/turn-sandbox-authority.js +42 -0
  628. package/lib/security/turn-sandbox-authority.js.map +1 -0
  629. package/lib/service.d.ts +2 -0
  630. package/lib/service.d.ts.map +1 -1
  631. package/lib/service.js +2 -1
  632. package/lib/service.js.map +1 -1
  633. package/lib/session/approval-port.d.ts +2 -0
  634. package/lib/session/approval-port.d.ts.map +1 -1
  635. package/lib/session/approval-port.js.map +1 -1
  636. package/lib/session/index.d.ts +2 -6
  637. package/lib/session/index.d.ts.map +1 -1
  638. package/lib/session/index.js +2 -4
  639. package/lib/session/index.js.map +1 -1
  640. package/lib/session/session-io.d.ts +2 -6
  641. package/lib/session/session-io.d.ts.map +1 -1
  642. package/lib/session/session-io.js +4 -20
  643. package/lib/session/session-io.js.map +1 -1
  644. package/lib/session/session-system.d.ts +0 -2
  645. package/lib/session/session-system.d.ts.map +1 -1
  646. package/lib/session/session-system.js +2 -13
  647. package/lib/session/session-system.js.map +1 -1
  648. package/lib/session/turn-ingress-session.d.ts +1 -5
  649. package/lib/session/turn-ingress-session.d.ts.map +1 -1
  650. package/lib/session/turn-ingress-session.js +27 -29
  651. package/lib/session/turn-ingress-session.js.map +1 -1
  652. package/lib/session-tree-runtime.d.ts +15 -0
  653. package/lib/session-tree-runtime.d.ts.map +1 -0
  654. package/lib/{session-tree-runtime-registry.js → session-tree-runtime.js} +5 -15
  655. package/lib/session-tree-runtime.js.map +1 -0
  656. package/lib/skill/index.d.ts +2 -2
  657. package/lib/skill/index.d.ts.map +1 -1
  658. package/lib/skill/index.js +1 -1
  659. package/lib/skill/skill-registry-as-service.d.ts +1 -1
  660. package/lib/skill/skill-system.d.ts +4 -4
  661. package/lib/skill/skill-system.d.ts.map +1 -1
  662. package/lib/skill/skill-system.js +2 -2
  663. package/lib/skill/skill-system.js.map +1 -1
  664. package/lib/subagent/subagent-runtime.d.ts +2 -7
  665. package/lib/subagent/subagent-runtime.d.ts.map +1 -1
  666. package/lib/subagent/subagent-runtime.js +4 -43
  667. package/lib/subagent/subagent-runtime.js.map +1 -1
  668. package/lib/subagent/subagent-system-init.d.ts.map +1 -1
  669. package/lib/subagent/subagent-system-init.js +0 -2
  670. package/lib/subagent/subagent-system-init.js.map +1 -1
  671. package/lib/subagent-ai-events.d.ts +1 -1
  672. package/lib/subagent-ai-events.js +1 -1
  673. package/lib/subagent-preset.d.ts +1 -1
  674. package/lib/subagent-preset.d.ts.map +1 -1
  675. package/lib/subagent-prompt.d.ts +0 -2
  676. package/lib/subagent-prompt.d.ts.map +1 -1
  677. package/lib/subagent-prompt.js +3 -3
  678. package/lib/subagent-prompt.js.map +1 -1
  679. package/lib/task-executor.d.ts +1 -0
  680. package/lib/task-executor.d.ts.map +1 -1
  681. package/lib/task-executor.js +4 -1
  682. package/lib/task-executor.js.map +1 -1
  683. package/lib/tool/classic-tool-execution-authority.js +2 -2
  684. package/lib/tool/classic-tool-execution-authority.js.map +1 -1
  685. package/lib/tool/context-tools.d.ts +1 -4
  686. package/lib/tool/context-tools.d.ts.map +1 -1
  687. package/lib/tool/context-tools.js +0 -50
  688. package/lib/tool/context-tools.js.map +1 -1
  689. package/lib/tool/contracts.d.ts +1 -1
  690. package/lib/tool/conversation-reference-tool.d.ts +5 -0
  691. package/lib/tool/conversation-reference-tool.d.ts.map +1 -0
  692. package/lib/tool/conversation-reference-tool.js +40 -0
  693. package/lib/tool/conversation-reference-tool.js.map +1 -0
  694. package/lib/tool/index.d.ts +1 -0
  695. package/lib/tool/index.d.ts.map +1 -1
  696. package/lib/tool/index.js +1 -0
  697. package/lib/tool/index.js.map +1 -1
  698. package/lib/tool/prepare-turn-tools.d.ts.map +1 -1
  699. package/lib/tool/prepare-turn-tools.js +7 -22
  700. package/lib/tool/prepare-turn-tools.js.map +1 -1
  701. package/lib/tool/runtime.d.ts +3 -4
  702. package/lib/tool/runtime.d.ts.map +1 -1
  703. package/lib/tool/runtime.js +0 -1
  704. package/lib/tool/runtime.js.map +1 -1
  705. package/lib/tool/sources.d.ts +3 -4
  706. package/lib/tool/sources.d.ts.map +1 -1
  707. package/lib/tool/sources.js +2 -6
  708. package/lib/tool/sources.js.map +1 -1
  709. package/lib/tool/tool-approval-once-store.d.ts +1 -1
  710. package/lib/tool/tool-approval-once-store.js +1 -1
  711. package/lib/tool/tool-system.d.ts.map +1 -1
  712. package/lib/tool/tool-system.js.map +1 -1
  713. package/lib/tool/turn-tool-runtime.d.ts +2 -1
  714. package/lib/tool/turn-tool-runtime.d.ts.map +1 -1
  715. package/lib/tool/turn-tool-runtime.js +76 -21
  716. package/lib/tool/turn-tool-runtime.js.map +1 -1
  717. package/lib/tool-bridge.d.ts +2 -2
  718. package/lib/tool-bridge.js +1 -1
  719. package/lib/tool-catalog/deferred-turn-controller.d.ts +1 -1
  720. package/lib/tool-catalog/tool-catalog.d.ts +1 -1
  721. package/lib/turn/auto-continue.d.ts +1 -1
  722. package/lib/turn/deferred-delivery.d.ts +1 -1
  723. package/lib/turn/inbound-media.d.ts +12 -8
  724. package/lib/turn/inbound-media.d.ts.map +1 -1
  725. package/lib/turn/inbound-media.js +61 -42
  726. package/lib/turn/inbound-media.js.map +1 -1
  727. package/lib/turn/inbound-queue-config.d.ts +1 -1
  728. package/lib/turn/inbound-queue-runtime.d.ts +1 -1
  729. package/lib/turn/inbound-turn-queue.d.ts +1 -1
  730. package/lib/turn/index.d.ts +1 -1
  731. package/lib/turn/index.d.ts.map +1 -1
  732. package/lib/turn/index.js.map +1 -1
  733. package/lib/turn/persist-deferred-context.d.ts +1 -1
  734. package/lib/turn/persist-subagent-context.d.ts +1 -1
  735. package/lib/turn/process-stream.d.ts +1 -1
  736. package/lib/turn/prompt-api.d.ts +1 -1
  737. package/lib/turn/prompt-controller.d.ts +6 -0
  738. package/lib/turn/prompt-controller.d.ts.map +1 -1
  739. package/lib/turn/prompt-controller.js +58 -5
  740. package/lib/turn/prompt-controller.js.map +1 -1
  741. package/lib/turn/turn-ingress.d.ts +55 -5
  742. package/lib/turn/turn-ingress.d.ts.map +1 -1
  743. package/lib/turn/turn-ingress.js +18 -0
  744. package/lib/turn/turn-ingress.js.map +1 -1
  745. package/lib/turn/turn-pipeline.d.ts.map +1 -1
  746. package/lib/turn/turn-pipeline.js +5 -4
  747. package/lib/turn/turn-pipeline.js.map +1 -1
  748. package/lib/utils/keyed-mutex.d.ts +1 -1
  749. package/lib/utils/keyed-mutex.d.ts.map +1 -1
  750. package/lib/utils/keyed-mutex.js +32 -5
  751. package/lib/utils/keyed-mutex.js.map +1 -1
  752. package/lib/workroom/acceptance-control.d.ts +76 -0
  753. package/lib/workroom/acceptance-control.d.ts.map +1 -0
  754. package/lib/workroom/acceptance-control.js +335 -0
  755. package/lib/workroom/acceptance-control.js.map +1 -0
  756. package/lib/workroom/acceptance-policy.d.ts +152 -0
  757. package/lib/workroom/acceptance-policy.d.ts.map +1 -0
  758. package/lib/workroom/acceptance-policy.js +610 -0
  759. package/lib/workroom/acceptance-policy.js.map +1 -0
  760. package/lib/workroom/accepted-source-memory-application.d.ts +113 -0
  761. package/lib/workroom/accepted-source-memory-application.d.ts.map +1 -0
  762. package/lib/workroom/accepted-source-memory-application.js +327 -0
  763. package/lib/workroom/accepted-source-memory-application.js.map +1 -0
  764. package/lib/workroom/accepted-source-projector.d.ts +89 -0
  765. package/lib/workroom/accepted-source-projector.d.ts.map +1 -0
  766. package/lib/workroom/accepted-source-projector.js +281 -0
  767. package/lib/workroom/accepted-source-projector.js.map +1 -0
  768. package/lib/workroom/assignment-authority-grant-application.d.ts +125 -0
  769. package/lib/workroom/assignment-authority-grant-application.d.ts.map +1 -0
  770. package/lib/workroom/assignment-authority-grant-application.js +317 -0
  771. package/lib/workroom/assignment-authority-grant-application.js.map +1 -0
  772. package/lib/workroom/assignment-authority-grant-repository.d.ts +151 -0
  773. package/lib/workroom/assignment-authority-grant-repository.d.ts.map +1 -0
  774. package/lib/workroom/assignment-authority-grant-repository.js +387 -0
  775. package/lib/workroom/assignment-authority-grant-repository.js.map +1 -0
  776. package/lib/workroom/assignment-executor.d.ts +110 -0
  777. package/lib/workroom/assignment-executor.d.ts.map +1 -0
  778. package/lib/workroom/assignment-executor.js +371 -0
  779. package/lib/workroom/assignment-executor.js.map +1 -0
  780. package/lib/workroom/assignment-observation-ingress.d.ts +21 -0
  781. package/lib/workroom/assignment-observation-ingress.d.ts.map +1 -0
  782. package/lib/workroom/assignment-observation-ingress.js +24 -0
  783. package/lib/workroom/assignment-observation-ingress.js.map +1 -0
  784. package/lib/workroom/canonical-value.d.ts +7 -0
  785. package/lib/workroom/canonical-value.d.ts.map +1 -0
  786. package/lib/workroom/canonical-value.js +32 -0
  787. package/lib/workroom/canonical-value.js.map +1 -0
  788. package/lib/workroom/catalog-definition.d.ts +49 -0
  789. package/lib/workroom/catalog-definition.d.ts.map +1 -0
  790. package/lib/workroom/catalog-definition.js +2 -0
  791. package/lib/workroom/catalog-definition.js.map +1 -0
  792. package/lib/workroom/catalog.d.ts +80 -0
  793. package/lib/workroom/catalog.d.ts.map +1 -0
  794. package/lib/workroom/catalog.js +372 -0
  795. package/lib/workroom/catalog.js.map +1 -0
  796. package/lib/workroom/database-project-knowledge-journal.d.ts +62 -0
  797. package/lib/workroom/database-project-knowledge-journal.d.ts.map +1 -0
  798. package/lib/workroom/database-project-knowledge-journal.js +161 -0
  799. package/lib/workroom/database-project-knowledge-journal.js.map +1 -0
  800. package/lib/workroom/durable-file-store.d.ts +52 -0
  801. package/lib/workroom/durable-file-store.d.ts.map +1 -0
  802. package/lib/workroom/durable-file-store.js +117 -0
  803. package/lib/workroom/durable-file-store.js.map +1 -0
  804. package/lib/workroom/dynamic-workflow-planner.d.ts +86 -0
  805. package/lib/workroom/dynamic-workflow-planner.d.ts.map +1 -0
  806. package/lib/workroom/dynamic-workflow-planner.js +260 -0
  807. package/lib/workroom/dynamic-workflow-planner.js.map +1 -0
  808. package/lib/workroom/effect-blocker-repository.d.ts +35 -0
  809. package/lib/workroom/effect-blocker-repository.d.ts.map +1 -0
  810. package/lib/workroom/effect-blocker-repository.js +174 -0
  811. package/lib/workroom/effect-blocker-repository.js.map +1 -0
  812. package/lib/workroom/effect-ledger.d.ts +191 -0
  813. package/lib/workroom/effect-ledger.d.ts.map +1 -0
  814. package/lib/workroom/effect-ledger.js +443 -0
  815. package/lib/workroom/effect-ledger.js.map +1 -0
  816. package/lib/workroom/file-accepted-source-memory-repository.d.ts +15 -0
  817. package/lib/workroom/file-accepted-source-memory-repository.d.ts.map +1 -0
  818. package/lib/workroom/file-accepted-source-memory-repository.js +133 -0
  819. package/lib/workroom/file-accepted-source-memory-repository.js.map +1 -0
  820. package/lib/workroom/file-effect-ledger.d.ts +10 -0
  821. package/lib/workroom/file-effect-ledger.d.ts.map +1 -0
  822. package/lib/workroom/file-effect-ledger.js +118 -0
  823. package/lib/workroom/file-effect-ledger.js.map +1 -0
  824. package/lib/workroom/file-human-ingress-application.d.ts +10 -0
  825. package/lib/workroom/file-human-ingress-application.d.ts.map +1 -0
  826. package/lib/workroom/file-human-ingress-application.js +177 -0
  827. package/lib/workroom/file-human-ingress-application.js.map +1 -0
  828. package/lib/workroom/file-human-ingress.d.ts +24 -0
  829. package/lib/workroom/file-human-ingress.d.ts.map +1 -0
  830. package/lib/workroom/file-human-ingress.js +234 -0
  831. package/lib/workroom/file-human-ingress.js.map +1 -0
  832. package/lib/workroom/file-interaction-space-binding-repository.d.ts +24 -0
  833. package/lib/workroom/file-interaction-space-binding-repository.d.ts.map +1 -0
  834. package/lib/workroom/file-interaction-space-binding-repository.js +293 -0
  835. package/lib/workroom/file-interaction-space-binding-repository.js.map +1 -0
  836. package/lib/workroom/file-profile-journal.d.ts +32 -0
  837. package/lib/workroom/file-profile-journal.d.ts.map +1 -0
  838. package/lib/workroom/file-profile-journal.js +308 -0
  839. package/lib/workroom/file-profile-journal.js.map +1 -0
  840. package/lib/workroom/git-workspace-gateway.d.ts +149 -0
  841. package/lib/workroom/git-workspace-gateway.d.ts.map +1 -0
  842. package/lib/workroom/git-workspace-gateway.js +248 -0
  843. package/lib/workroom/git-workspace-gateway.js.map +1 -0
  844. package/lib/workroom/human-ingress-application.d.ts +126 -0
  845. package/lib/workroom/human-ingress-application.d.ts.map +1 -0
  846. package/lib/workroom/human-ingress-application.js +414 -0
  847. package/lib/workroom/human-ingress-application.js.map +1 -0
  848. package/lib/workroom/human-ingress-orchestrator.d.ts +99 -0
  849. package/lib/workroom/human-ingress-orchestrator.d.ts.map +1 -0
  850. package/lib/workroom/human-ingress-orchestrator.js +234 -0
  851. package/lib/workroom/human-ingress-orchestrator.js.map +1 -0
  852. package/lib/workroom/human-ingress-source-reader.d.ts +29 -0
  853. package/lib/workroom/human-ingress-source-reader.d.ts.map +1 -0
  854. package/lib/workroom/human-ingress-source-reader.js +119 -0
  855. package/lib/workroom/human-ingress-source-reader.js.map +1 -0
  856. package/lib/workroom/human-ingress.d.ts +182 -0
  857. package/lib/workroom/human-ingress.d.ts.map +1 -0
  858. package/lib/workroom/human-ingress.js +526 -0
  859. package/lib/workroom/human-ingress.js.map +1 -0
  860. package/lib/workroom/interaction-space-binding-service.d.ts +57 -0
  861. package/lib/workroom/interaction-space-binding-service.d.ts.map +1 -0
  862. package/lib/workroom/interaction-space-binding-service.js +197 -0
  863. package/lib/workroom/interaction-space-binding-service.js.map +1 -0
  864. package/lib/workroom/interaction-space-router.d.ts +75 -0
  865. package/lib/workroom/interaction-space-router.d.ts.map +1 -0
  866. package/lib/workroom/interaction-space-router.js +243 -0
  867. package/lib/workroom/interaction-space-router.js.map +1 -0
  868. package/lib/workroom/journal-model.d.ts +40 -0
  869. package/lib/workroom/journal-model.d.ts.map +1 -0
  870. package/lib/workroom/journal-model.js +12 -0
  871. package/lib/workroom/journal-model.js.map +1 -0
  872. package/lib/workroom/journal.d.ts +217 -0
  873. package/lib/workroom/journal.d.ts.map +1 -0
  874. package/lib/workroom/journal.js +2022 -0
  875. package/lib/workroom/journal.js.map +1 -0
  876. package/lib/workroom/kernel-contracts.d.ts +168 -0
  877. package/lib/workroom/kernel-contracts.d.ts.map +1 -0
  878. package/lib/workroom/kernel-contracts.js +2 -0
  879. package/lib/workroom/kernel-contracts.js.map +1 -0
  880. package/lib/workroom/kernel-state.d.ts +5 -0
  881. package/lib/workroom/kernel-state.d.ts.map +1 -0
  882. package/lib/workroom/kernel-state.js +853 -0
  883. package/lib/workroom/kernel-state.js.map +1 -0
  884. package/lib/workroom/legacy-embedded-payload-migration.d.ts +89 -0
  885. package/lib/workroom/legacy-embedded-payload-migration.d.ts.map +1 -0
  886. package/lib/workroom/legacy-embedded-payload-migration.js +312 -0
  887. package/lib/workroom/legacy-embedded-payload-migration.js.map +1 -0
  888. package/lib/workroom/legacy-run-offline-migration.d.ts +84 -0
  889. package/lib/workroom/legacy-run-offline-migration.d.ts.map +1 -0
  890. package/lib/workroom/legacy-run-offline-migration.js +470 -0
  891. package/lib/workroom/legacy-run-offline-migration.js.map +1 -0
  892. package/lib/workroom/local-assignment-executor.d.ts +59 -0
  893. package/lib/workroom/local-assignment-executor.d.ts.map +1 -0
  894. package/lib/workroom/local-assignment-executor.js +197 -0
  895. package/lib/workroom/local-assignment-executor.js.map +1 -0
  896. package/lib/workroom/local-assignment-issuance.d.ts +68 -0
  897. package/lib/workroom/local-assignment-issuance.d.ts.map +1 -0
  898. package/lib/workroom/local-assignment-issuance.js +128 -0
  899. package/lib/workroom/local-assignment-issuance.js.map +1 -0
  900. package/lib/workroom/plan-approval-control.d.ts +52 -0
  901. package/lib/workroom/plan-approval-control.d.ts.map +1 -0
  902. package/lib/workroom/plan-approval-control.js +9 -0
  903. package/lib/workroom/plan-approval-control.js.map +1 -0
  904. package/lib/workroom/plan-revision.d.ts +44 -0
  905. package/lib/workroom/plan-revision.d.ts.map +1 -0
  906. package/lib/workroom/plan-revision.js +133 -0
  907. package/lib/workroom/plan-revision.js.map +1 -0
  908. package/lib/workroom/profile-compiler.d.ts +130 -0
  909. package/lib/workroom/profile-compiler.d.ts.map +1 -0
  910. package/lib/workroom/profile-compiler.js +357 -0
  911. package/lib/workroom/profile-compiler.js.map +1 -0
  912. package/lib/workroom/profile-registry.d.ts +191 -0
  913. package/lib/workroom/profile-registry.d.ts.map +1 -0
  914. package/lib/workroom/profile-registry.js +698 -0
  915. package/lib/workroom/profile-registry.js.map +1 -0
  916. package/lib/workroom/project-knowledge-registry.d.ts +136 -0
  917. package/lib/workroom/project-knowledge-registry.d.ts.map +1 -0
  918. package/lib/workroom/project-knowledge-registry.js +429 -0
  919. package/lib/workroom/project-knowledge-registry.js.map +1 -0
  920. package/lib/workroom/projection-outbox.d.ts +254 -0
  921. package/lib/workroom/projection-outbox.d.ts.map +1 -0
  922. package/lib/workroom/projection-outbox.js +1312 -0
  923. package/lib/workroom/projection-outbox.js.map +1 -0
  924. package/lib/workroom/remote-assignment-dispatch-command.d.ts +31 -0
  925. package/lib/workroom/remote-assignment-dispatch-command.d.ts.map +1 -0
  926. package/lib/workroom/remote-assignment-dispatch-command.js +56 -0
  927. package/lib/workroom/remote-assignment-dispatch-command.js.map +1 -0
  928. package/lib/workroom/remote-assignment-issuance.d.ts +88 -0
  929. package/lib/workroom/remote-assignment-issuance.d.ts.map +1 -0
  930. package/lib/workroom/remote-assignment-issuance.js +201 -0
  931. package/lib/workroom/remote-assignment-issuance.js.map +1 -0
  932. package/lib/workroom/remote-callback-application.d.ts +115 -0
  933. package/lib/workroom/remote-callback-application.d.ts.map +1 -0
  934. package/lib/workroom/remote-callback-application.js +570 -0
  935. package/lib/workroom/remote-callback-application.js.map +1 -0
  936. package/lib/workroom/remote-callback-gateway.d.ts +60 -0
  937. package/lib/workroom/remote-callback-gateway.d.ts.map +1 -0
  938. package/lib/workroom/remote-callback-gateway.js +173 -0
  939. package/lib/workroom/remote-callback-gateway.js.map +1 -0
  940. package/lib/workroom/remote-callback-inbox.d.ts +278 -0
  941. package/lib/workroom/remote-callback-inbox.d.ts.map +1 -0
  942. package/lib/workroom/remote-callback-inbox.js +1088 -0
  943. package/lib/workroom/remote-callback-inbox.js.map +1 -0
  944. package/lib/workroom/remote-callback-reconciliation-worker.d.ts +60 -0
  945. package/lib/workroom/remote-callback-reconciliation-worker.d.ts.map +1 -0
  946. package/lib/workroom/remote-callback-reconciliation-worker.js +197 -0
  947. package/lib/workroom/remote-callback-reconciliation-worker.js.map +1 -0
  948. package/lib/workroom/remote-dispatch-admission.d.ts +45 -0
  949. package/lib/workroom/remote-dispatch-admission.d.ts.map +1 -0
  950. package/lib/workroom/remote-dispatch-admission.js +187 -0
  951. package/lib/workroom/remote-dispatch-admission.js.map +1 -0
  952. package/lib/workroom/remote-dispatch-outbox.d.ts +203 -0
  953. package/lib/workroom/remote-dispatch-outbox.d.ts.map +1 -0
  954. package/lib/workroom/remote-dispatch-outbox.js +765 -0
  955. package/lib/workroom/remote-dispatch-outbox.js.map +1 -0
  956. package/lib/workroom/remote-dispatch-scheduler.d.ts +36 -0
  957. package/lib/workroom/remote-dispatch-scheduler.d.ts.map +1 -0
  958. package/lib/workroom/remote-dispatch-scheduler.js +133 -0
  959. package/lib/workroom/remote-dispatch-scheduler.js.map +1 -0
  960. package/lib/workroom/remote-dispatch-worker.d.ts +22 -0
  961. package/lib/workroom/remote-dispatch-worker.d.ts.map +1 -0
  962. package/lib/workroom/remote-dispatch-worker.js +124 -0
  963. package/lib/workroom/remote-dispatch-worker.js.map +1 -0
  964. package/lib/workroom/remote-dispatch.d.ts +79 -0
  965. package/lib/workroom/remote-dispatch.d.ts.map +1 -0
  966. package/lib/workroom/remote-dispatch.js +220 -0
  967. package/lib/workroom/remote-dispatch.js.map +1 -0
  968. package/lib/workroom/role-capability-snapshot.d.ts +88 -0
  969. package/lib/workroom/role-capability-snapshot.d.ts.map +1 -0
  970. package/lib/workroom/role-capability-snapshot.js +456 -0
  971. package/lib/workroom/role-capability-snapshot.js.map +1 -0
  972. package/lib/workroom/runtime.d.ts +142 -0
  973. package/lib/workroom/runtime.d.ts.map +1 -0
  974. package/lib/workroom/runtime.js +542 -0
  975. package/lib/workroom/runtime.js.map +1 -0
  976. package/lib/workroom/scheduler-priority-control.d.ts +35 -0
  977. package/lib/workroom/scheduler-priority-control.d.ts.map +1 -0
  978. package/lib/workroom/scheduler-priority-control.js +9 -0
  979. package/lib/workroom/scheduler-priority-control.js.map +1 -0
  980. package/lib/workroom/workflow-plan-builder.d.ts +88 -0
  981. package/lib/workroom/workflow-plan-builder.d.ts.map +1 -0
  982. package/lib/workroom/workflow-plan-builder.js +232 -0
  983. package/lib/workroom/workflow-plan-builder.js.map +1 -0
  984. package/lib/workroom/workroom-assignment-knowledge-context.d.ts +102 -0
  985. package/lib/workroom/workroom-assignment-knowledge-context.d.ts.map +1 -0
  986. package/lib/workroom/workroom-assignment-knowledge-context.js +127 -0
  987. package/lib/workroom/workroom-assignment-knowledge-context.js.map +1 -0
  988. package/lib/workroom/workroom-kernel.d.ts +147 -0
  989. package/lib/workroom/workroom-kernel.d.ts.map +1 -0
  990. package/lib/workroom/workroom-kernel.js +1454 -0
  991. package/lib/workroom/workroom-kernel.js.map +1 -0
  992. package/lib/workroom/workroom-preemption.d.ts +65 -0
  993. package/lib/workroom/workroom-preemption.d.ts.map +1 -0
  994. package/lib/workroom/workroom-preemption.js +213 -0
  995. package/lib/workroom/workroom-preemption.js.map +1 -0
  996. package/lib/workroom/workroom-run-control.d.ts +69 -0
  997. package/lib/workroom/workroom-run-control.d.ts.map +1 -0
  998. package/lib/workroom/workroom-run-control.js +144 -0
  999. package/lib/workroom/workroom-run-control.js.map +1 -0
  1000. package/lib/workroom/workroom-scheduler-application.d.ts +43 -0
  1001. package/lib/workroom/workroom-scheduler-application.d.ts.map +1 -0
  1002. package/lib/workroom/workroom-scheduler-application.js +71 -0
  1003. package/lib/workroom/workroom-scheduler-application.js.map +1 -0
  1004. package/lib/workroom/workroom-scheduler.d.ts +135 -0
  1005. package/lib/workroom/workroom-scheduler.d.ts.map +1 -0
  1006. package/lib/workroom/workroom-scheduler.js +657 -0
  1007. package/lib/workroom/workroom-scheduler.js.map +1 -0
  1008. package/lib/workroom/workroom-task-report-store.d.ts +131 -0
  1009. package/lib/workroom/workroom-task-report-store.d.ts.map +1 -0
  1010. package/lib/workroom/workroom-task-report-store.js +528 -0
  1011. package/lib/workroom/workroom-task-report-store.js.map +1 -0
  1012. package/lib/zhin-agent/index.d.ts +7 -22
  1013. package/lib/zhin-agent/index.d.ts.map +1 -1
  1014. package/lib/zhin-agent/index.js +5 -33
  1015. package/lib/zhin-agent/index.js.map +1 -1
  1016. package/lib/zhin-agent/runtime-modules.d.ts +3 -3
  1017. package/lib/zhin-agent/runtime-modules.d.ts.map +1 -1
  1018. package/lib/zhin-agent/runtime-modules.js +3 -3
  1019. package/lib/zhin-agent/runtime-modules.js.map +1 -1
  1020. package/package.json +10 -16
  1021. package/lib/a2a/delegation-message.d.ts +0 -14
  1022. package/lib/a2a/delegation-message.d.ts.map +0 -1
  1023. package/lib/a2a/delegation-message.js +0 -53
  1024. package/lib/a2a/delegation-message.js.map +0 -1
  1025. package/lib/a2a/task-state.d.ts +0 -9
  1026. package/lib/a2a/task-state.d.ts.map +0 -1
  1027. package/lib/a2a/task-state.js +0 -53
  1028. package/lib/a2a/task-state.js.map +0 -1
  1029. package/lib/assistant/runtime-registry.d.ts +0 -23
  1030. package/lib/assistant/runtime-registry.d.ts.map +0 -1
  1031. package/lib/assistant/runtime-registry.js +0 -27
  1032. package/lib/assistant/runtime-registry.js.map +0 -1
  1033. package/lib/authoring/define-dynamic.d.ts +0 -4
  1034. package/lib/authoring/define-dynamic.d.ts.map +0 -1
  1035. package/lib/authoring/define-dynamic.js +0 -8
  1036. package/lib/authoring/define-dynamic.js.map +0 -1
  1037. package/lib/authoring/define-state.d.ts +0 -4
  1038. package/lib/authoring/define-state.d.ts.map +0 -1
  1039. package/lib/authoring/define-state.js +0 -8
  1040. package/lib/authoring/define-state.js.map +0 -1
  1041. package/lib/builtin/five-agent/strategy.d.ts +0 -4
  1042. package/lib/builtin/five-agent/strategy.d.ts.map +0 -1
  1043. package/lib/builtin/five-agent/strategy.js +0 -42
  1044. package/lib/builtin/five-agent/strategy.js.map +0 -1
  1045. package/lib/builtin/memory-search-tool.d.ts +0 -2
  1046. package/lib/builtin/memory-search-tool.d.ts.map +0 -1
  1047. package/lib/builtin/memory-search-tool.js +0 -58
  1048. package/lib/builtin/memory-search-tool.js.map +0 -1
  1049. package/lib/builtin/memory-upsert-tool.d.ts +0 -2
  1050. package/lib/builtin/memory-upsert-tool.d.ts.map +0 -1
  1051. package/lib/builtin/memory-upsert-tool.js +0 -72
  1052. package/lib/builtin/memory-upsert-tool.js.map +0 -1
  1053. package/lib/builtin/orchestration-tools.d.ts +0 -7
  1054. package/lib/builtin/orchestration-tools.d.ts.map +0 -1
  1055. package/lib/builtin/orchestration-tools.js +0 -259
  1056. package/lib/builtin/orchestration-tools.js.map +0 -1
  1057. package/lib/connection/authorization-flow.d.ts +0 -26
  1058. package/lib/connection/authorization-flow.d.ts.map +0 -1
  1059. package/lib/connection/authorization-flow.js +0 -76
  1060. package/lib/connection/authorization-flow.js.map +0 -1
  1061. package/lib/connection/index.d.ts +0 -3
  1062. package/lib/connection/index.d.ts.map +0 -1
  1063. package/lib/connection/index.js +0 -2
  1064. package/lib/connection/index.js.map +0 -1
  1065. package/lib/dynamic/dynamic-registry.d.ts +0 -34
  1066. package/lib/dynamic/dynamic-registry.d.ts.map +0 -1
  1067. package/lib/dynamic/dynamic-registry.js +0 -52
  1068. package/lib/dynamic/dynamic-registry.js.map +0 -1
  1069. package/lib/init/bootstrap-gate.d.ts +0 -6
  1070. package/lib/init/bootstrap-gate.d.ts.map +0 -1
  1071. package/lib/init/bootstrap-gate.js +0 -28
  1072. package/lib/init/bootstrap-gate.js.map +0 -1
  1073. package/lib/memory-entry-registry.d.ts +0 -13
  1074. package/lib/memory-entry-registry.d.ts.map +0 -1
  1075. package/lib/memory-entry-registry.js +0 -24
  1076. package/lib/memory-entry-registry.js.map +0 -1
  1077. package/lib/orchestration-memory-hook.d.ts +0 -3
  1078. package/lib/orchestration-memory-hook.d.ts.map +0 -1
  1079. package/lib/orchestration-memory-hook.js +0 -22
  1080. package/lib/orchestration-memory-hook.js.map +0 -1
  1081. package/lib/orchestration-runtime-registry.d.ts +0 -16
  1082. package/lib/orchestration-runtime-registry.d.ts.map +0 -1
  1083. package/lib/orchestration-runtime-registry.js +0 -20
  1084. package/lib/orchestration-runtime-registry.js.map +0 -1
  1085. package/lib/orchestrator/agent-dispatcher.d.ts +0 -171
  1086. package/lib/orchestrator/agent-dispatcher.d.ts.map +0 -1
  1087. package/lib/orchestrator/agent-dispatcher.js +0 -415
  1088. package/lib/orchestrator/agent-dispatcher.js.map +0 -1
  1089. package/lib/orchestrator/bootstrap-executors.d.ts +0 -7
  1090. package/lib/orchestrator/bootstrap-executors.d.ts.map +0 -1
  1091. package/lib/orchestrator/bootstrap-executors.js +0 -73
  1092. package/lib/orchestrator/bootstrap-executors.js.map +0 -1
  1093. package/lib/orchestrator/orchestration-mappers.d.ts +0 -9
  1094. package/lib/orchestrator/orchestration-mappers.d.ts.map +0 -1
  1095. package/lib/orchestrator/orchestration-mappers.js +0 -117
  1096. package/lib/orchestrator/orchestration-mappers.js.map +0 -1
  1097. package/lib/orchestrator/orchestration-repository.d.ts +0 -91
  1098. package/lib/orchestrator/orchestration-repository.d.ts.map +0 -1
  1099. package/lib/orchestrator/orchestration-repository.js +0 -389
  1100. package/lib/orchestrator/orchestration-repository.js.map +0 -1
  1101. package/lib/orchestrator/orchestration-service.d.ts +0 -133
  1102. package/lib/orchestrator/orchestration-service.d.ts.map +0 -1
  1103. package/lib/orchestrator/orchestration-service.js +0 -582
  1104. package/lib/orchestrator/orchestration-service.js.map +0 -1
  1105. package/lib/orchestrator/orchestration-source.d.ts +0 -5
  1106. package/lib/orchestrator/orchestration-source.d.ts.map +0 -1
  1107. package/lib/orchestrator/orchestration-source.js +0 -22
  1108. package/lib/orchestrator/orchestration-source.js.map +0 -1
  1109. package/lib/orchestrator/orchestration-types.d.ts +0 -88
  1110. package/lib/orchestrator/orchestration-types.d.ts.map +0 -1
  1111. package/lib/orchestrator/orchestration-types.js +0 -2
  1112. package/lib/orchestrator/orchestration-types.js.map +0 -1
  1113. package/lib/orchestrator/remote-agent-registry.d.ts +0 -37
  1114. package/lib/orchestrator/remote-agent-registry.d.ts.map +0 -1
  1115. package/lib/orchestrator/remote-agent-registry.js +0 -178
  1116. package/lib/orchestrator/remote-agent-registry.js.map +0 -1
  1117. package/lib/orchestrator/remote-task-executor.d.ts +0 -10
  1118. package/lib/orchestrator/remote-task-executor.d.ts.map +0 -1
  1119. package/lib/orchestrator/remote-task-executor.js +0 -231
  1120. package/lib/orchestrator/remote-task-executor.js.map +0 -1
  1121. package/lib/orchestrator/remote-task-poller.d.ts +0 -18
  1122. package/lib/orchestrator/remote-task-poller.d.ts.map +0 -1
  1123. package/lib/orchestrator/remote-task-poller.js +0 -84
  1124. package/lib/orchestrator/remote-task-poller.js.map +0 -1
  1125. package/lib/orchestrator/resolve-subagent-tools.d.ts.map +0 -1
  1126. package/lib/orchestrator/resolve-subagent-tools.js.map +0 -1
  1127. package/lib/orchestrator/task-queue.d.ts +0 -167
  1128. package/lib/orchestrator/task-queue.d.ts.map +0 -1
  1129. package/lib/orchestrator/task-queue.js +0 -416
  1130. package/lib/orchestrator/task-queue.js.map +0 -1
  1131. package/lib/session/passive-group-buffer.d.ts +0 -15
  1132. package/lib/session/passive-group-buffer.d.ts.map +0 -1
  1133. package/lib/session/passive-group-buffer.js +0 -50
  1134. package/lib/session/passive-group-buffer.js.map +0 -1
  1135. package/lib/session/passive-group-session.d.ts +0 -10
  1136. package/lib/session/passive-group-session.d.ts.map +0 -1
  1137. package/lib/session/passive-group-session.js +0 -32
  1138. package/lib/session/passive-group-session.js.map +0 -1
  1139. package/lib/session-tree-runtime-registry.d.ts +0 -22
  1140. package/lib/session-tree-runtime-registry.d.ts.map +0 -1
  1141. package/lib/session-tree-runtime-registry.js.map +0 -1
  1142. package/lib/state/agent-state-store.d.ts +0 -18
  1143. package/lib/state/agent-state-store.d.ts.map +0 -1
  1144. package/lib/state/agent-state-store.js +0 -50
  1145. package/lib/state/agent-state-store.js.map +0 -1
  1146. /package/lib/{orchestrator → resource-hub}/hook-registry.d.ts +0 -0
  1147. /package/lib/{orchestrator → resource-hub}/hook-registry.js +0 -0
  1148. /package/lib/{orchestrator → resource-hub}/mcp-lifecycle.d.ts +0 -0
  1149. /package/lib/{orchestrator → resource-hub}/mcp-lifecycle.js +0 -0
  1150. /package/lib/{orchestrator → resource-hub}/mcp-registry.d.ts +0 -0
  1151. /package/lib/{orchestrator → resource-hub}/mcp-registry.js +0 -0
  1152. /package/lib/{orchestrator → resource-hub}/resource-registry.d.ts +0 -0
  1153. /package/lib/{orchestrator → resource-hub}/resource-registry.js +0 -0
  1154. /package/lib/{orchestrator → resource-hub}/role-configs.d.ts +0 -0
  1155. /package/lib/{orchestrator → resource-hub}/skill-registry.d.ts +0 -0
  1156. /package/lib/{orchestrator → resource-hub}/skill-registry.js +0 -0
  1157. /package/lib/{orchestrator → resource-hub}/subagent-registry.d.ts +0 -0
  1158. /package/lib/{orchestrator → resource-hub}/subagent-registry.js +0 -0
  1159. /package/lib/{orchestrator → resource-hub}/tool-registry.d.ts +0 -0
  1160. /package/lib/{orchestrator → resource-hub}/tool-registry.js +0 -0
  1161. /package/lib/{orchestrator → resource-hub}/tool-selection.d.ts +0 -0
  1162. /package/lib/{orchestrator → resource-hub}/tool-selection.js +0 -0
  1163. /package/lib/{orchestrator → resource-hub}/types.js +0 -0
@@ -0,0 +1,1454 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { WorkroomSequenceConflictError } from './journal.js';
3
+ import { assertAssignmentExecutionEnvelope, validateAssignmentExecutionObservation, } from './assignment-executor.js';
4
+ import { compareCanonicalWorkroomText, canonicalWorkroomJson, digestCanonicalWorkroomValue, } from './canonical-value.js';
5
+ import { assertWorkflowPlanProposal, } from './workflow-plan-builder.js';
6
+ import { assertWorkflowPlanRevisionCandidate, computeWorkflowPlanRevisionDiff, } from './plan-revision.js';
7
+ import { createAcceptanceDecisionInput, createAcceptanceContractPinInput, assertAcceptanceContract, freezeAcceptanceContract, decideTaskAcceptance, } from './acceptance-policy.js';
8
+ import { decideWorkroom, replayWorkroom } from './kernel-state.js';
9
+ import { decideReviewerClaim, decideReviewerVerdict, decideSponsorGate, } from './acceptance-control.js';
10
+ import { materializeWorkroomRemoteAssignment, normalizeWorkroomRemoteAssignmentClaimRequest, parseWorkroomRemoteAssignmentIssuance, workroomRemoteAssignmentId, workroomRemoteAssignmentRequestDigest, } from './remote-assignment-issuance.js';
11
+ import { materializeWorkroomLocalAssignment, normalizeWorkroomLocalAssignmentClaimRequest, parseWorkroomLocalAssignmentIssuance, workroomLocalAssignmentId, workroomLocalAssignmentRequestDigest, } from './local-assignment-issuance.js';
12
+ import { decideWorkroomSchedule, getWorkroomScheduledTaskSnapshot, parseWorkroomPriorityChangeProposal, } from './workroom-scheduler.js';
13
+ import { decideWorkroomPreemptionTimeout, replayWorkroomPreemptions, } from './workroom-preemption.js';
14
+ import { WorkroomPriorityUnauthorizedError, } from './scheduler-priority-control.js';
15
+ import { WorkroomPlanGateUnauthorizedError, } from './plan-approval-control.js';
16
+ import { WorkroomRunControlUnauthorizedError, assertWorkroomRunControlCommand, workroomRunControlRequestDigest, } from './workroom-run-control.js';
17
+ /** The sole command and state-transition authority for Workroom Run facts. */
18
+ export class WorkroomKernel {
19
+ #journal;
20
+ #now;
21
+ #createId;
22
+ #acceptancePolicy;
23
+ #acceptanceAuthority;
24
+ #assignmentHeartbeatLeaseMs;
25
+ #remoteAssignmentAuthority;
26
+ #localAssignmentAuthority;
27
+ #planGateAuthority;
28
+ #priorityAuthority;
29
+ #runControlAuthority;
30
+ constructor(options) {
31
+ this.#journal = options.journal;
32
+ this.#now = options.now ?? Date.now;
33
+ this.#createId = options.createId ?? (() => randomUUID());
34
+ this.#acceptancePolicy = options.acceptancePolicy;
35
+ this.#acceptanceAuthority = options.acceptanceAuthority;
36
+ this.#assignmentHeartbeatLeaseMs = options.assignmentHeartbeatLeaseMs ?? 30_000;
37
+ this.#remoteAssignmentAuthority = options.remoteAssignmentAuthority;
38
+ this.#localAssignmentAuthority = options.localAssignmentAuthority;
39
+ this.#planGateAuthority = options.planGateAuthority;
40
+ this.#priorityAuthority = options.priorityAuthority;
41
+ this.#runControlAuthority = options.runControlAuthority;
42
+ if (!Number.isSafeInteger(this.#assignmentHeartbeatLeaseMs)
43
+ || this.#assignmentHeartbeatLeaseMs < 1) {
44
+ throw new Error('Assignment heartbeat lease must be a positive safe integer');
45
+ }
46
+ }
47
+ async createRun(input) {
48
+ if (!input.projectId.trim())
49
+ throw new Error('Workroom projectId is required');
50
+ if (!input.title.trim())
51
+ throw new Error('Workroom title is required');
52
+ const projectId = input.projectId.trim();
53
+ const title = input.title.trim();
54
+ const runId = input.runId ?? this.#createId();
55
+ assertRunId(runId);
56
+ const existing = await this.#journal.read(runId);
57
+ if (existing.length > 0)
58
+ throw new Error(`Workroom run ${runId} already exists`);
59
+ await this.#journal.append(runId, -1, [this.#event('run.created', {
60
+ projectId,
61
+ title,
62
+ })]);
63
+ return this.read(projectId, runId);
64
+ }
65
+ /**
66
+ * Atomic, exact-replay admission of an Orchestrator proposal. The model can
67
+ * only provide a validated WorkflowPlanProposal; this Kernel method is the
68
+ * sole writer that materializes Run and Task facts.
69
+ */
70
+ async admitWorkflowPlan(input) {
71
+ const normalized = normalizePlanAdmission(input);
72
+ const runId = planAdmissionRunId(normalized.operationId);
73
+ const admittedPayload = Object.freeze({
74
+ operationId: normalized.operationId,
75
+ sourceEventRef: normalized.sourceEventRef,
76
+ sourceEventDigest: normalized.sourceEventDigest,
77
+ orchestratorAgentDefinitionId: normalized.orchestratorAgentDefinitionId,
78
+ plan: normalized.plan,
79
+ schedulerPolicy: normalized.plan.schedulerPolicy,
80
+ });
81
+ const taskDrafts = normalized.plan.tasks.flatMap(task => {
82
+ const draft = this.#event('task.planned', {
83
+ taskKey: task.key,
84
+ title: task.title,
85
+ required: task.required,
86
+ maxAttempts: task.maxAttempts,
87
+ role: task.role,
88
+ dependsOn: task.dependsOn,
89
+ requires: task.requires,
90
+ sponsorLane: task.scheduler.sponsorLane,
91
+ localRank: task.scheduler.localRank,
92
+ deadline: task.scheduler.deadline,
93
+ enqueuedAt: task.scheduler.enqueuedAt,
94
+ preemptibility: task.scheduler.preemptibility,
95
+ ...(task.approvalGate ? { approvalGate: task.approvalGate } : {}),
96
+ });
97
+ return [
98
+ draft,
99
+ ...(task.approvalGate
100
+ ? [this.#event('task.blocked', {
101
+ taskKey: task.key,
102
+ blockerId: task.approvalGate.id,
103
+ kind: 'approval',
104
+ owner: task.approvalGate.owner,
105
+ reason: `Workflow Plan Sponsor Gate ${task.approvalGate.id}`,
106
+ deadline: task.approvalGate.deadline,
107
+ })]
108
+ : []),
109
+ ];
110
+ });
111
+ const drafts = Object.freeze([
112
+ this.#event('run.created', {
113
+ projectId: normalized.projectId,
114
+ title: normalized.title,
115
+ }),
116
+ this.#event('plan.admitted', admittedPayload),
117
+ ...taskDrafts,
118
+ ]);
119
+ let existing = await this.#journal.read(runId);
120
+ if (existing.length === 0) {
121
+ try {
122
+ await this.#journal.append(runId, -1, drafts);
123
+ }
124
+ catch (error) {
125
+ if (!(error instanceof WorkroomSequenceConflictError))
126
+ throw error;
127
+ }
128
+ existing = await this.#journal.read(runId);
129
+ }
130
+ assertExactPlanAdmission(existing, normalized, admittedPayload);
131
+ const state = replayWorkroom(existing);
132
+ const receiptRef = `workroom-run:${runId}:plan:${encodeURIComponent(normalized.plan.proposalId)}`;
133
+ return Object.freeze({
134
+ runId,
135
+ receiptRef,
136
+ receiptDigest: digestCanonicalWorkroomValue({
137
+ version: 1,
138
+ runId,
139
+ operationId: normalized.operationId,
140
+ planDigest: normalized.plan.digest,
141
+ sourceEventDigest: normalized.sourceEventDigest,
142
+ }),
143
+ state,
144
+ });
145
+ }
146
+ /** Kernel CAS admission for a non-authoritative, complete Plan Revision proposal. */
147
+ async admitPlanRevision(candidate) {
148
+ assertWorkflowPlanRevisionCandidate(candidate);
149
+ const events = await this.#journal.read(candidate.runId);
150
+ if (events.length === 0)
151
+ throw new Error(`Workroom run ${candidate.runId} not found`);
152
+ const state = replayWorkroom(events);
153
+ assertProject(state, candidate.projectId);
154
+ const current = currentWorkflowPlan(events);
155
+ const replay = events.find(event => event.type === 'plan.revision_applied'
156
+ && event.payload.candidate?.proposalId === candidate.proposalId);
157
+ if (replay) {
158
+ const persisted = replay.payload.candidate;
159
+ if (canonicalWorkroomJson(persisted) !== canonicalWorkroomJson(candidate)) {
160
+ throw new Error(`Plan Revision proposal replay payload drift: ${candidate.proposalId}`);
161
+ }
162
+ return Object.freeze({
163
+ status: 'applied', planRevision: Number(replay.payload.planRevision), duplicate: true, state,
164
+ });
165
+ }
166
+ if (candidate.expectedSequence !== state.sequence
167
+ || candidate.basePlanRevision !== current.revision
168
+ || candidate.basePlanDigest !== current.plan.digest) {
169
+ return Object.freeze({
170
+ status: 'stale', planRevision: current.revision, actualSequence: state.sequence,
171
+ actualPlanDigest: current.plan.digest,
172
+ });
173
+ }
174
+ const expectedTaskKeys = current.plan.tasks.map(task => task.key).sort();
175
+ const candidateTaskKeys = Object.keys(candidate.baseTaskRevisions).sort();
176
+ if (canonicalWorkroomJson(expectedTaskKeys) !== canonicalWorkroomJson(candidateTaskKeys)) {
177
+ return Object.freeze({
178
+ status: 'rejected', planRevision: current.revision,
179
+ reason: 'Plan Revision base Task revisions are incomplete for the current Plan',
180
+ });
181
+ }
182
+ for (const [taskKey, revision] of Object.entries(candidate.baseTaskRevisions)) {
183
+ if (state.tasks[taskKey]?.revision !== revision) {
184
+ return Object.freeze({
185
+ status: 'stale', planRevision: current.revision, actualSequence: state.sequence,
186
+ actualPlanDigest: current.plan.digest,
187
+ });
188
+ }
189
+ }
190
+ let recomputed;
191
+ try {
192
+ recomputed = computeWorkflowPlanRevisionDiff(current.plan, candidate.nextPlan, candidate.baseTaskRevisions);
193
+ }
194
+ catch (error) {
195
+ return Object.freeze({
196
+ status: 'rejected', planRevision: current.revision,
197
+ reason: error instanceof Error ? error.message : String(error),
198
+ });
199
+ }
200
+ if (canonicalWorkroomJson(recomputed) !== canonicalWorkroomJson(candidate.diff)) {
201
+ return Object.freeze({
202
+ status: 'rejected', planRevision: current.revision,
203
+ reason: 'Plan Revision claimed diff differs from the Kernel recomputation',
204
+ });
205
+ }
206
+ const reused = recomputed.added.filter(task => state.tasks[task.key]).map(task => task.key).sort();
207
+ if (reused.length > 0) {
208
+ return Object.freeze({
209
+ status: 'rejected', planRevision: current.revision,
210
+ reason: `Plan Revision cannot reuse historical Task keys: ${reused.join(', ')}`,
211
+ });
212
+ }
213
+ const changedKeys = [...recomputed.replaced, ...recomputed.removed].map(change => change.taskKey);
214
+ const active = changedKeys.filter(key => {
215
+ const status = state.tasks[key]?.status;
216
+ return status === 'executing' || status === 'awaiting_acceptance' || status === 'cancelling';
217
+ }).sort();
218
+ if (active.length > 0) {
219
+ return Object.freeze({
220
+ status: 'preemption_required', planRevision: current.revision, taskKeys: Object.freeze(active),
221
+ });
222
+ }
223
+ const immutable = changedKeys.filter(key => state.tasks[key]?.status === 'accepted').sort();
224
+ if (immutable.length > 0) {
225
+ return Object.freeze({
226
+ status: 'rejected', planRevision: current.revision,
227
+ reason: `Accepted Tasks are immutable: ${immutable.join(', ')}`,
228
+ });
229
+ }
230
+ const planRevision = current.revision + 1;
231
+ const drafts = [this.#event('plan.revision_applied', {
232
+ candidate,
233
+ planRevision,
234
+ recomputedDiffDigest: digestCanonicalWorkroomValue(recomputed),
235
+ })];
236
+ for (const task of recomputed.added)
237
+ drafts.push(...this.#planTaskDrafts(task));
238
+ for (const replacement of recomputed.replaced) {
239
+ drafts.push(this.#event('task.plan_revised', {
240
+ ...planTaskPayload(replacement.task),
241
+ expectedTaskRevision: replacement.expectedTaskRevision,
242
+ newTaskRevision: replacement.expectedTaskRevision + 1,
243
+ reason: candidate.reason,
244
+ }));
245
+ if (replacement.task.approvalGate) {
246
+ drafts.push(this.#planTaskBlockerDraft(replacement.task));
247
+ }
248
+ }
249
+ for (const removal of recomputed.removed) {
250
+ drafts.push(this.#event('task.cancelled', {
251
+ taskKey: removal.taskKey,
252
+ reason: `Removed by Plan Revision ${candidate.proposalId}: ${candidate.reason}`,
253
+ }));
254
+ }
255
+ try {
256
+ await this.#journal.append(candidate.runId, candidate.expectedSequence, drafts);
257
+ }
258
+ catch (error) {
259
+ if (!(error instanceof WorkroomSequenceConflictError))
260
+ throw error;
261
+ const latestEvents = await this.#journal.read(candidate.runId);
262
+ const latest = currentWorkflowPlan(latestEvents);
263
+ return Object.freeze({
264
+ status: 'stale', planRevision: latest.revision,
265
+ actualSequence: latestEvents.at(-1)?.sequence ?? -1,
266
+ actualPlanDigest: latest.plan.digest,
267
+ });
268
+ }
269
+ return Object.freeze({
270
+ status: 'applied', planRevision, duplicate: false,
271
+ state: await this.read(candidate.projectId, candidate.runId),
272
+ });
273
+ }
274
+ /** Exact authority verification followed by one Scheduler priority Journal fact. */
275
+ async commitPriorityChange(value) {
276
+ const proposal = parseWorkroomPriorityChangeProposal(value);
277
+ const events = await this.#journal.read(proposal.runId);
278
+ if (events.length === 0)
279
+ throw new Error(`Workroom run ${proposal.runId} not found`);
280
+ const duplicate = events.find(event => event.type === 'scheduler.priority_changed'
281
+ && event.payload.proposalId === proposal.proposalId);
282
+ if (duplicate) {
283
+ const persisted = { ...duplicate.payload };
284
+ delete persisted.authorizedBy;
285
+ if (canonicalWorkroomJson(persisted) !== canonicalWorkroomJson(proposal)) {
286
+ throw new Error(`Workroom priority proposal replay payload drift: ${proposal.proposalId}`);
287
+ }
288
+ return Object.freeze({
289
+ status: 'duplicate', proposalId: proposal.proposalId, sequence: duplicate.sequence,
290
+ });
291
+ }
292
+ const state = replayWorkroom(events);
293
+ assertProject(state, proposal.projectId);
294
+ if (state.sequence !== proposal.expectedSequence) {
295
+ throw new WorkroomSequenceConflictError(proposal.runId, proposal.expectedSequence, state.sequence);
296
+ }
297
+ const currentTask = getWorkroomScheduledTaskSnapshot(events, proposal.taskKey);
298
+ if (currentTask.taskRevision !== proposal.taskRevision
299
+ || currentTask.sponsorLane !== proposal.currentLane) {
300
+ throw new Error('Workroom priority proposal targets a stale Task revision or lane');
301
+ }
302
+ if (proposal.deadline < state.now)
303
+ throw new Error('Workroom priority proposal is expired');
304
+ const authority = this.#priorityAuthority;
305
+ if (!authority)
306
+ throw new Error('Workroom priority authority is not installed');
307
+ const planAuthority = currentWorkflowPlan(events).plan.authority;
308
+ const authorizationInput = Object.freeze({
309
+ version: 1,
310
+ proposal,
311
+ projectAuthority: Object.freeze({
312
+ catalogRevision: planAuthority.projectRevision,
313
+ projectDigest: planAuthority.projectDigest,
314
+ orchestratorAgentDefinitionId: planAuthority.orchestratorAgentDefinitionId,
315
+ }),
316
+ currentTask,
317
+ });
318
+ const authorization = await authority.authorize(authorizationInput);
319
+ if (!authorization.authorized)
320
+ throw new WorkroomPriorityUnauthorizedError(authorization.reason);
321
+ if (authorization.authority !== proposal.authority
322
+ || authorization.principalId !== proposal.principalId
323
+ || authorization.authorizationRef !== proposal.authorityRef
324
+ || authorization.proposalDigest !== proposal.digest) {
325
+ throw new Error('Workroom priority authority returned a stale or mismatched exact proof');
326
+ }
327
+ if (proposal.requestedLane !== proposal.currentLane && authorization.authority !== 'sponsor') {
328
+ throw new Error('Only an exact Sponsor authority may move a Task across lanes');
329
+ }
330
+ const appended = await this.#journal.append(proposal.runId, proposal.expectedSequence, [this.#event('scheduler.priority_changed', { ...proposal, authorizedBy: authorization.authorizationRef })]);
331
+ return Object.freeze({
332
+ status: 'committed', proposalId: proposal.proposalId, sequence: appended[0].sequence,
333
+ });
334
+ }
335
+ /** Typed pre-execution Sponsor decision; generic blocker resolution is forbidden for approval gates. */
336
+ async decidePlanApprovalGate(input) {
337
+ const normalized = normalizePlanGateDecision(input);
338
+ const requestDigest = digestCanonicalWorkroomValue(normalized);
339
+ let events = await this.#journal.read(normalized.runId);
340
+ const replay = events.find(event => event.type === 'plan_gate.decided'
341
+ && event.payload.operationId === normalized.operationId);
342
+ if (replay) {
343
+ if (replay.payload.requestDigest !== requestDigest) {
344
+ throw new Error(`Plan Sponsor Gate operation payload conflict: ${normalized.operationId}`);
345
+ }
346
+ const state = replayWorkroom(events);
347
+ assertProject(state, normalized.projectId);
348
+ return planGateReceipt('duplicate', normalized, requestDigest, state);
349
+ }
350
+ const state = replayWorkroom(events);
351
+ assertProject(state, normalized.projectId);
352
+ if (state.sequence !== normalized.expectedSequence) {
353
+ throw new WorkroomSequenceConflictError(normalized.runId, normalized.expectedSequence, state.sequence);
354
+ }
355
+ const planEvents = events.filter(event => event.type === 'plan.admitted');
356
+ if (planEvents.length !== 1)
357
+ throw new Error('Plan Sponsor Gate requires one exact admitted Plan');
358
+ const plan = planEvents[0].payload.plan;
359
+ assertWorkflowPlanProposal(plan);
360
+ const plannedTask = plan.tasks.find(task => task.key === normalized.taskKey);
361
+ const task = state.tasks[normalized.taskKey];
362
+ if (!plannedTask || !task || task.revision !== normalized.taskRevision) {
363
+ throw new Error('Plan Sponsor Gate decision targets a stale Task revision');
364
+ }
365
+ const gate = plannedTask.approvalGate;
366
+ if (!gate || gate.id !== normalized.gateId
367
+ || !task.blockers.some(blocker => blocker.id === gate.id && blocker.kind === 'approval')) {
368
+ throw new Error('Plan Sponsor Gate decision targets an absent or settled gate');
369
+ }
370
+ const authority = this.#planGateAuthority;
371
+ if (!authority)
372
+ throw new Error('Plan Sponsor Gate authority is not installed');
373
+ const authorizationInput = Object.freeze({
374
+ version: 1,
375
+ ...normalized,
376
+ planProposalId: plan.proposalId,
377
+ planDigest: plan.digest,
378
+ projectRevision: plan.authority.projectRevision,
379
+ projectDigest: plan.authority.projectDigest,
380
+ sourceParameterDigest: plan.parameterDigest,
381
+ profileRevisionId: plan.authority.profileRevisionId,
382
+ profileDigest: plan.authority.profileDigest,
383
+ policyRevisionId: gate.policyRevisionId,
384
+ policyDigest: gate.policyDigest,
385
+ gateOwner: gate.owner,
386
+ gateDeadline: gate.deadline,
387
+ });
388
+ const authorization = await authority.authorize(authorizationInput);
389
+ if (!authorization.authorized)
390
+ throw new WorkroomPlanGateUnauthorizedError(authorization.reason);
391
+ if (authorization.principalId !== normalized.sponsorPrincipalId
392
+ || typeof authorization.authorizationRef !== 'string'
393
+ || !authorization.authorizationRef.trim()) {
394
+ throw new Error('Plan Sponsor Gate authority returned a stale principal proof');
395
+ }
396
+ const audit = this.#event('plan_gate.decided', {
397
+ operationId: normalized.operationId,
398
+ requestDigest,
399
+ taskKey: normalized.taskKey,
400
+ taskRevision: normalized.taskRevision,
401
+ gateId: normalized.gateId,
402
+ planDigest: plan.digest,
403
+ policyRevisionId: gate.policyRevisionId,
404
+ policyDigest: gate.policyDigest,
405
+ decision: normalized.decision,
406
+ sponsorPrincipalId: authorization.principalId,
407
+ authorizedBy: authorization.authorizationRef,
408
+ reasonDigest: digestCanonicalWorkroomValue({ reason: normalized.reason }),
409
+ });
410
+ const action = normalized.decision === 'approve'
411
+ ? [this.#event('task.blocker_resolved', {
412
+ taskKey: normalized.taskKey,
413
+ blockerId: normalized.gateId,
414
+ })]
415
+ : normalized.decision === 'cancel'
416
+ ? decideWorkroom(state, {
417
+ type: 'cancel_run',
418
+ reason: `Plan Sponsor Gate ${normalized.gateId} cancelled`,
419
+ controlDeadline: state.now,
420
+ }, (type, payload) => this.#event(type, payload))
421
+ : [this.#event('task.failed', {
422
+ taskKey: normalized.taskKey,
423
+ reason: `Plan Sponsor Gate ${normalized.gateId} ${normalized.decision}`,
424
+ })];
425
+ await this.#journal.append(normalized.runId, normalized.expectedSequence, [audit, ...action]);
426
+ events = await this.#journal.read(normalized.runId);
427
+ return planGateReceipt('committed', normalized, requestDigest, replayWorkroom(events));
428
+ }
429
+ /** Kernel-owned CAS commit for one exact deterministic Scheduler selection. */
430
+ async commitSchedulerDecision(decision) {
431
+ const events = await this.#journal.read(decision.runId);
432
+ if (events.length === 0)
433
+ throw new Error(`Workroom run ${decision.runId} not found`);
434
+ const decisionEventType = decision.type === 'dispatch_task'
435
+ ? 'scheduler.dispatch_requested'
436
+ : 'scheduler.preemption_requested';
437
+ const duplicate = events.find(event => event.type === decisionEventType
438
+ && event.payload.decisionId === decision.decisionId);
439
+ if (duplicate) {
440
+ if (canonicalWorkroomJson(duplicate.payload) !== canonicalWorkroomJson(decision)) {
441
+ throw new Error(`Workroom Scheduler decision replay payload drift: ${decision.decisionId}`);
442
+ }
443
+ return Object.freeze({
444
+ status: 'duplicate',
445
+ decisionId: decision.decisionId,
446
+ sequence: duplicate.sequence,
447
+ });
448
+ }
449
+ const expected = decideWorkroomSchedule(events);
450
+ if (!expected || canonicalWorkroomJson(expected) !== canonicalWorkroomJson(decision)) {
451
+ throw new Error('Workroom Scheduler decision is stale or differs from the deterministic Kernel decision');
452
+ }
453
+ const state = replayWorkroom(events);
454
+ assertProject(state, decision.projectId);
455
+ if (state.sequence !== decision.expectedSequence) {
456
+ throw new WorkroomSequenceConflictError(decision.runId, decision.expectedSequence, state.sequence);
457
+ }
458
+ const drafts = decision.type === 'dispatch_task'
459
+ ? [Object.freeze({
460
+ eventId: decision.decisionId,
461
+ occurredAt: state.now,
462
+ type: 'scheduler.dispatch_requested',
463
+ payload: decision,
464
+ })]
465
+ : [
466
+ Object.freeze({
467
+ eventId: decision.decisionId,
468
+ occurredAt: state.now,
469
+ type: 'scheduler.preemption_requested',
470
+ payload: decision,
471
+ }),
472
+ this.#event('assignment.checkpoint_requested', {
473
+ decisionId: decision.decisionId,
474
+ assignmentId: decision.assignmentId,
475
+ envelopeDigest: decision.assignmentEnvelopeDigest,
476
+ reservedTaskKey: decision.reservedTaskKey,
477
+ requestedAt: decision.requestedAt,
478
+ deadline: decision.deadline,
479
+ takeoverFence: decision.takeoverFence,
480
+ owner: decision.owner,
481
+ allowedSuccessors: decision.allowedSuccessors,
482
+ }),
483
+ ];
484
+ const appended = await this.#journal.append(decision.runId, decision.expectedSequence, drafts);
485
+ if (appended.length !== drafts.length)
486
+ throw new Error('Workroom Scheduler Kernel append did not commit one decision batch');
487
+ return Object.freeze({
488
+ status: 'committed',
489
+ decisionId: decision.decisionId,
490
+ sequence: appended.at(-1).sequence,
491
+ });
492
+ }
493
+ async execute(projectId, runId, command) {
494
+ assertProjectId(projectId);
495
+ const scopedProjectId = projectId.trim();
496
+ assertRunId(runId);
497
+ const state = await this.#readUnscoped(runId);
498
+ assertProject(state, scopedProjectId);
499
+ const events = command.type === 'advance_clock' ? await this.#journal.read(runId) : undefined;
500
+ const drafts = [
501
+ ...decideWorkroom(state, command, (type, payload) => this.#event(type, payload)),
502
+ ...(command.type === 'advance_clock' && events
503
+ ? decideWorkroomPreemptionTimeout(events, command.now, (type, payload) => this.#event(type, payload))
504
+ : []),
505
+ ];
506
+ await this.#journal.append(runId, state.sequence, drafts);
507
+ return drafts.length === 0 ? state : this.read(scopedProjectId, runId);
508
+ }
509
+ /** Sponsor-authorized, exact-sequence Run cancellation or durable replan request. */
510
+ async controlRun(command, authenticatedPrincipal) {
511
+ assertWorkroomRunControlCommand(command);
512
+ const principalId = authenticatedPrincipal.principalId.trim();
513
+ if (!principalId)
514
+ throw new Error('Workroom Run control authenticated principal is required');
515
+ const events = await this.#journal.read(command.runId);
516
+ if (events.length === 0)
517
+ throw new Error(`Workroom run ${command.runId} not found`);
518
+ const state = replayWorkroom(events);
519
+ assertProject(state, command.projectId);
520
+ const requestDigest = workroomRunControlRequestDigest(command, principalId);
521
+ const replay = events.find(event => event.type === 'run.control_decided'
522
+ && event.payload.operationId === command.operationId);
523
+ if (replay) {
524
+ if (replay.payload.requestDigest !== requestDigest
525
+ || replay.payload.action !== command.action
526
+ || replay.payload.principalId !== principalId) {
527
+ throw new Error(`Workroom Run control replay payload drift: ${command.operationId}`);
528
+ }
529
+ await this.#authorizeRunControl(command, principalId, requestDigest, {
530
+ sequence: Number(replay.payload.stateSequence),
531
+ status: replay.payload.stateStatus,
532
+ digest: String(replay.payload.stateDigest),
533
+ }, 'commit');
534
+ return runControlReceipt('duplicate', command, requestDigest, replay.eventId, state);
535
+ }
536
+ if (command.expectedSequence !== state.sequence) {
537
+ await this.#authorizeRunControl(command, principalId, requestDigest, {
538
+ sequence: state.sequence,
539
+ status: state.status,
540
+ digest: digestCanonicalWorkroomValue(state),
541
+ }, 'stale_probe');
542
+ return Object.freeze({ status: 'stale', actualSequence: state.sequence });
543
+ }
544
+ if (command.action === 'cancel' && state.cancelRequested) {
545
+ throw new Error('Workroom Run cancellation is already active');
546
+ }
547
+ if (state.status === 'completed' || state.status === 'cancelled') {
548
+ throw new Error(`Workroom run is terminal: ${state.status}`);
549
+ }
550
+ if (command.action === 'cancel' && command.controlDeadline < state.now) {
551
+ throw new Error('Workroom Run cancellation deadline is before the current Kernel clock');
552
+ }
553
+ if (command.action === 'request_replan' && state.cancelRequested) {
554
+ throw new Error('Cannot request replan while Run cancellation is active');
555
+ }
556
+ const stateDigest = digestCanonicalWorkroomValue(state);
557
+ const authorization = await this.#authorizeRunControl(command, principalId, requestDigest, {
558
+ sequence: state.sequence, status: state.status, digest: stateDigest,
559
+ }, 'commit');
560
+ const audit = this.#event('run.control_decided', {
561
+ operationId: command.operationId,
562
+ action: command.action,
563
+ reasonCode: command.reasonCode,
564
+ expectedSequence: command.expectedSequence,
565
+ principalId,
566
+ requestDigest,
567
+ catalogRevision: authorization.catalogRevision,
568
+ projectDigest: authorization.projectDigest,
569
+ authorizationRef: authorization.authorizationRef,
570
+ stateSequence: state.sequence,
571
+ stateStatus: state.status,
572
+ stateDigest,
573
+ });
574
+ const drafts = command.action === 'cancel'
575
+ ? [
576
+ audit,
577
+ ...decideWorkroom(state, {
578
+ type: 'cancel_run', reason: command.reasonCode,
579
+ controlDeadline: command.controlDeadline,
580
+ }, (type, payload) => this.#event(type, payload)),
581
+ ]
582
+ : [audit, this.#event('run.replan_requested', {
583
+ operationId: command.operationId,
584
+ reasonCode: command.reasonCode,
585
+ requestDigest,
586
+ })];
587
+ const appended = await this.#journal.append(command.runId, state.sequence, drafts);
588
+ if (appended.length !== drafts.length) {
589
+ throw new Error('Workroom Run control append did not commit one exact batch');
590
+ }
591
+ const next = replayWorkroom([...events, ...appended]);
592
+ return runControlReceipt('committed', command, requestDigest, appended[0].eventId, next);
593
+ }
594
+ async #authorizeRunControl(command, principalId, requestDigest, state, purpose) {
595
+ if (!this.#runControlAuthority) {
596
+ throw new WorkroomRunControlUnauthorizedError('authority_not_installed');
597
+ }
598
+ const authorization = await this.#runControlAuthority.authorize(Object.freeze({
599
+ version: 1,
600
+ purpose,
601
+ command,
602
+ authenticatedPrincipalId: principalId,
603
+ requestDigest,
604
+ stateSequence: state.sequence,
605
+ stateStatus: state.status,
606
+ stateDigest: state.digest,
607
+ }));
608
+ if (!authorization.authorized) {
609
+ throw new WorkroomRunControlUnauthorizedError(authorization.reason);
610
+ }
611
+ if (authorization.principalId !== principalId
612
+ || !authorization.catalogRevision.trim()
613
+ || !authorization.projectDigest.trim()
614
+ || !authorization.authorizationRef.trim()) {
615
+ throw new WorkroomRunControlUnauthorizedError('authority_decision_not_exact');
616
+ }
617
+ return authorization;
618
+ }
619
+ /** Atomically persists the local Assignment claim and its exact Envelope. */
620
+ async previewLocalAssignment(input) {
621
+ const request = normalizeWorkroomLocalAssignmentClaimRequest(input);
622
+ const events = await this.#journal.read(request.runId);
623
+ const state = replayWorkroom(events);
624
+ assertProject(state, request.projectId);
625
+ const existing = findLocalAssignmentIssuance(events, request.operationId);
626
+ if (existing)
627
+ assertLocalAssignmentReplay(existing, workroomLocalAssignmentRequestDigest(request));
628
+ const task = state.tasks[request.taskKey];
629
+ if (!task)
630
+ throw new Error(`Task ${request.taskKey} not found`);
631
+ if (!existing && task.status !== 'ready')
632
+ throw new Error(`Task ${task.key} is ${task.status}`);
633
+ return assignmentPreview({
634
+ kind: 'local', assignmentRef: existing?.envelope.assignmentId
635
+ ?? workroomLocalAssignmentId(request.operationId),
636
+ claimDigest: digestCanonicalWorkroomValue({ kind: 'local', request }),
637
+ taskRevision: existing?.envelope.taskRevision ?? task.revision,
638
+ kernelSequence: state.sequence,
639
+ kernelStateDigest: digestCanonicalWorkroomValue(events),
640
+ });
641
+ }
642
+ async findLocalAssignment(input) {
643
+ const request = normalizeWorkroomLocalAssignmentClaimRequest(input);
644
+ const events = await this.#journal.read(request.runId);
645
+ const issued = findLocalAssignmentIssuance(events, request.operationId);
646
+ if (!issued)
647
+ return undefined;
648
+ assertLocalAssignmentReplay(issued, workroomLocalAssignmentRequestDigest(request));
649
+ const state = replayWorkroom(events);
650
+ assertProject(state, request.projectId);
651
+ return Object.freeze({ ...issued, state });
652
+ }
653
+ async issueLocalAssignment(input) {
654
+ const request = normalizeWorkroomLocalAssignmentClaimRequest(input);
655
+ const requestDigest = workroomLocalAssignmentRequestDigest(request);
656
+ const existingEvents = await this.#journal.read(request.runId);
657
+ const replayed = findLocalAssignmentIssuance(existingEvents, request.operationId);
658
+ if (replayed) {
659
+ assertLocalAssignmentReplay(replayed, requestDigest);
660
+ const state = replayWorkroom(existingEvents);
661
+ assertProject(state, request.projectId);
662
+ return Object.freeze({ ...replayed, state });
663
+ }
664
+ const authorityPort = this.#localAssignmentAuthority;
665
+ if (!authorityPort)
666
+ throw new Error('Local Assignment authority resolver is not installed');
667
+ const state = replayWorkroom(existingEvents);
668
+ assertProject(state, request.projectId);
669
+ const task = state.tasks[request.taskKey];
670
+ if (!task)
671
+ throw new Error(`Task ${request.taskKey} not found`);
672
+ if (task.status !== 'ready')
673
+ throw new Error(`Task ${task.key} is ${task.status}`);
674
+ if (!task.acceptanceContract) {
675
+ throw new Error(`Task ${task.key} Acceptance Contract is not pinned`);
676
+ }
677
+ const attempt = task.attempt + 1;
678
+ const fence = Object.values(state.assignments)
679
+ .filter(assignment => assignment.taskKey === task.key)
680
+ .reduce((highest, assignment) => Math.max(highest, assignment.fence), 0) + 1;
681
+ const assignmentId = workroomLocalAssignmentId(request.operationId);
682
+ const factAnchor = Object.freeze({
683
+ ref: `workroom-journal:${encodeURIComponent(state.runId)}:${state.sequence}`,
684
+ sequence: state.sequence,
685
+ digest: digestCanonicalWorkroomValue(existingEvents),
686
+ });
687
+ const assignment = Object.freeze({
688
+ id: assignmentId,
689
+ revision: 1,
690
+ attempt,
691
+ fence,
692
+ });
693
+ const authority = await authorityPort.resolveLocal(Object.freeze({
694
+ projectId: state.projectId,
695
+ runId: state.runId,
696
+ task: Object.freeze({
697
+ key: task.key,
698
+ revision: task.revision,
699
+ acceptanceContract: task.acceptanceContract,
700
+ }),
701
+ assignment,
702
+ requestedAgentDefinitionId: request.agentDefinitionId,
703
+ factAnchor,
704
+ }));
705
+ const timing = this.#trustedAssignmentTiming('Local');
706
+ const issued = materializeWorkroomLocalAssignment({
707
+ request,
708
+ taskRevision: task.revision,
709
+ assignmentId,
710
+ assignmentRevision: assignment.revision,
711
+ attempt,
712
+ fence,
713
+ issuedAt: timing.issuedAt,
714
+ factAnchor,
715
+ authority,
716
+ });
717
+ const claimDrafts = decideWorkroom(state, {
718
+ type: 'claim_task',
719
+ taskKey: task.key,
720
+ assignmentId,
721
+ assignmentRevision: issued.envelope.assignmentRevision,
722
+ fence,
723
+ envelopeDigest: issued.envelope.digest,
724
+ owner: issued.envelope.principalId,
725
+ role: issued.envelope.role,
726
+ leaseExpiresAt: timing.leaseExpiresAt,
727
+ }, (type, payload) => this.#event(type, payload));
728
+ const drafts = Object.freeze([
729
+ ...claimDrafts,
730
+ this.#event('local_execution.requested', issued),
731
+ ]);
732
+ try {
733
+ await this.#journal.append(request.runId, state.sequence, drafts);
734
+ }
735
+ catch (error) {
736
+ if (!(error instanceof WorkroomSequenceConflictError))
737
+ throw error;
738
+ const winnerEvents = await this.#journal.read(request.runId);
739
+ const winner = findLocalAssignmentIssuance(winnerEvents, request.operationId);
740
+ if (!winner)
741
+ throw error;
742
+ assertLocalAssignmentReplay(winner, requestDigest);
743
+ const winnerState = replayWorkroom(winnerEvents);
744
+ assertProject(winnerState, request.projectId);
745
+ return Object.freeze({ ...winner, state: winnerState });
746
+ }
747
+ return Object.freeze({
748
+ ...issued,
749
+ state: await this.read(request.projectId, request.runId),
750
+ });
751
+ }
752
+ /**
753
+ * Atomically persists the Kernel claim and its exact Remote Dispatch intent.
754
+ * A caller names only the desired definition/endpoint; the current-generation
755
+ * authority port supplies every executable snapshot and grant.
756
+ */
757
+ async previewRemoteAssignment(input) {
758
+ const request = normalizeWorkroomRemoteAssignmentClaimRequest(input);
759
+ const events = await this.#journal.read(request.runId);
760
+ const state = replayWorkroom(events);
761
+ assertProject(state, request.projectId);
762
+ const existing = findRemoteAssignmentIssuance(events, request.operationId);
763
+ if (existing)
764
+ assertRemoteAssignmentReplay(existing, workroomRemoteAssignmentRequestDigest(request));
765
+ const task = state.tasks[request.taskKey];
766
+ if (!task)
767
+ throw new Error(`Task ${request.taskKey} not found`);
768
+ if (!existing && task.status !== 'ready')
769
+ throw new Error(`Task ${task.key} is ${task.status}`);
770
+ return assignmentPreview({
771
+ kind: 'remote', assignmentRef: existing?.envelope.assignmentId
772
+ ?? workroomRemoteAssignmentId(request.operationId),
773
+ claimDigest: digestCanonicalWorkroomValue({ kind: 'remote', request }),
774
+ taskRevision: existing?.envelope.taskRevision ?? task.revision,
775
+ kernelSequence: state.sequence,
776
+ kernelStateDigest: digestCanonicalWorkroomValue(events),
777
+ });
778
+ }
779
+ async findRemoteAssignment(input) {
780
+ const request = normalizeWorkroomRemoteAssignmentClaimRequest(input);
781
+ const events = await this.#journal.read(request.runId);
782
+ const issued = findRemoteAssignmentIssuance(events, request.operationId);
783
+ if (!issued)
784
+ return undefined;
785
+ assertRemoteAssignmentReplay(issued, workroomRemoteAssignmentRequestDigest(request));
786
+ const state = replayWorkroom(events);
787
+ assertProject(state, request.projectId);
788
+ return Object.freeze({ ...issued, state });
789
+ }
790
+ async issueRemoteAssignment(input) {
791
+ const request = normalizeWorkroomRemoteAssignmentClaimRequest(input);
792
+ const requestDigest = workroomRemoteAssignmentRequestDigest(request);
793
+ const existingEvents = await this.#journal.read(request.runId);
794
+ const replayed = findRemoteAssignmentIssuance(existingEvents, request.operationId);
795
+ if (replayed) {
796
+ assertRemoteAssignmentReplay(replayed, requestDigest);
797
+ const state = replayWorkroom(existingEvents);
798
+ assertProject(state, request.projectId);
799
+ return Object.freeze({ ...replayed, state });
800
+ }
801
+ const authorityPort = this.#remoteAssignmentAuthority;
802
+ if (!authorityPort) {
803
+ throw new Error('Remote Assignment authority resolver is not installed');
804
+ }
805
+ const state = replayWorkroom(existingEvents);
806
+ assertProject(state, request.projectId);
807
+ const task = state.tasks[request.taskKey];
808
+ if (!task)
809
+ throw new Error(`Task ${request.taskKey} not found`);
810
+ if (task.status !== 'ready')
811
+ throw new Error(`Task ${task.key} is ${task.status}`);
812
+ if (!task.acceptanceContract) {
813
+ throw new Error(`Task ${task.key} Acceptance Contract is not pinned`);
814
+ }
815
+ const attempt = task.attempt + 1;
816
+ const fence = Object.values(state.assignments)
817
+ .filter(assignment => assignment.taskKey === task.key)
818
+ .reduce((highest, assignment) => Math.max(highest, assignment.fence), 0) + 1;
819
+ const assignmentId = workroomRemoteAssignmentId(request.operationId);
820
+ const factAnchor = Object.freeze({
821
+ ref: `workroom-journal:${encodeURIComponent(state.runId)}:${state.sequence}`,
822
+ sequence: state.sequence,
823
+ digest: digestCanonicalWorkroomValue(existingEvents),
824
+ });
825
+ const assignment = Object.freeze({
826
+ id: assignmentId,
827
+ revision: 1,
828
+ attempt,
829
+ fence,
830
+ });
831
+ const authority = await authorityPort.resolve(Object.freeze({
832
+ projectId: state.projectId,
833
+ runId: state.runId,
834
+ task: Object.freeze({
835
+ key: task.key,
836
+ revision: task.revision,
837
+ acceptanceContract: task.acceptanceContract,
838
+ }),
839
+ assignment,
840
+ requestedAgentDefinitionId: request.agentDefinitionId,
841
+ requestedEndpointId: request.endpointId,
842
+ factAnchor,
843
+ }));
844
+ const timing = this.#trustedAssignmentTiming('Remote');
845
+ const leaseExpiresAt = timing.leaseExpiresAt;
846
+ const issued = materializeWorkroomRemoteAssignment({
847
+ request,
848
+ taskRevision: task.revision,
849
+ assignmentId,
850
+ assignmentRevision: assignment.revision,
851
+ attempt,
852
+ fence,
853
+ issuedAt: timing.issuedAt,
854
+ leaseExpiresAt,
855
+ reconcileDeadline: timing.reconcileDeadline,
856
+ acceptanceContract: task.acceptanceContract,
857
+ factAnchor,
858
+ authority,
859
+ });
860
+ const claimDrafts = decideWorkroom(state, {
861
+ type: 'claim_task',
862
+ taskKey: task.key,
863
+ assignmentId,
864
+ assignmentRevision: issued.envelope.assignmentRevision,
865
+ fence,
866
+ envelopeDigest: issued.envelope.digest,
867
+ owner: issued.envelope.principalId,
868
+ role: issued.envelope.role,
869
+ leaseExpiresAt,
870
+ }, (type, payload) => this.#event(type, payload));
871
+ const drafts = Object.freeze([
872
+ ...claimDrafts,
873
+ this.#event('remote_dispatch.requested', issued),
874
+ ]);
875
+ try {
876
+ await this.#journal.append(request.runId, state.sequence, drafts);
877
+ }
878
+ catch (error) {
879
+ if (!(error instanceof WorkroomSequenceConflictError))
880
+ throw error;
881
+ const winnerEvents = await this.#journal.read(request.runId);
882
+ const winner = findRemoteAssignmentIssuance(winnerEvents, request.operationId);
883
+ if (!winner)
884
+ throw error;
885
+ assertRemoteAssignmentReplay(winner, requestDigest);
886
+ const winnerState = replayWorkroom(winnerEvents);
887
+ assertProject(winnerState, request.projectId);
888
+ return Object.freeze({ ...winner, state: winnerState });
889
+ }
890
+ return Object.freeze({
891
+ ...issued,
892
+ state: await this.read(request.projectId, request.runId),
893
+ });
894
+ }
895
+ async applyAssignmentObservation(envelope, value, expectedSequence) {
896
+ assertAssignmentExecutionEnvelope(envelope);
897
+ const observation = validateAssignmentExecutionObservation(envelope, value);
898
+ if (!Number.isSafeInteger(expectedSequence) || expectedSequence < 0) {
899
+ throw new Error('Assignment observation expectedSequence must be a non-negative safe integer');
900
+ }
901
+ const events = await this.#journal.read(envelope.runId);
902
+ if (events.length === 0)
903
+ throw new Error(`Workroom run ${envelope.runId} not found`);
904
+ const state = replayWorkroom(events);
905
+ assertProject(state, envelope.projectId);
906
+ const task = state.tasks[envelope.taskKey];
907
+ const assignment = state.assignments[envelope.assignmentId];
908
+ if (!task || !assignment
909
+ || task.revision !== envelope.taskRevision
910
+ || assignment.taskKey !== task.key
911
+ || assignment.taskRevision !== envelope.taskRevision
912
+ || assignment.revision !== envelope.assignmentRevision
913
+ || assignment.attempt !== envelope.attempt
914
+ || assignment.fence !== envelope.fence
915
+ || assignment.envelopeDigest !== envelope.digest
916
+ || assignment.owner !== envelope.principalId
917
+ || assignment.role !== envelope.role) {
918
+ throw new Error('Assignment observation Envelope is stale or targets another authority scope');
919
+ }
920
+ const observationDigest = digestCanonicalWorkroomValue(observation);
921
+ const persistedDigest = assignment.observationDigests[observation.observationId];
922
+ if (persistedDigest) {
923
+ if (persistedDigest !== observationDigest) {
924
+ throw new Error(`Assignment observationId conflict: ${observation.observationId}`);
925
+ }
926
+ return state;
927
+ }
928
+ if (task.currentAssignmentId !== assignment.id) {
929
+ throw new Error('Assignment observation Envelope is stale or targets another authority scope');
930
+ }
931
+ if (state.sequence !== expectedSequence) {
932
+ throw new WorkroomSequenceConflictError(envelope.runId, expectedSequence, state.sequence);
933
+ }
934
+ const header = {
935
+ assignmentId: assignment.id,
936
+ observationId: observation.observationId,
937
+ observationDigest,
938
+ envelopeDigest: envelope.digest,
939
+ };
940
+ let draft;
941
+ switch (observation.type) {
942
+ case 'progress':
943
+ requireObservationStatus(assignment.status, ['running']);
944
+ draft = this.#event('assignment.progress', { ...header, progress: observation.progress });
945
+ break;
946
+ case 'heartbeat':
947
+ requireObservationStatus(assignment.status, ['leased', 'running']);
948
+ draft = this.#event('assignment.heartbeat', {
949
+ ...header,
950
+ leaseExpiresAt: this.#trustedHeartbeatLeaseExpiry(assignment.leaseExpiresAt),
951
+ });
952
+ break;
953
+ case 'checkpoint':
954
+ requireObservationStatus(assignment.status, ['running']);
955
+ draft = this.#event('assignment.checkpointed', {
956
+ ...header,
957
+ checkpointRef: observation.checkpoint.ref,
958
+ checkpointDigest: observation.checkpoint.digest,
959
+ });
960
+ break;
961
+ case 'execution_completed':
962
+ requireObservationStatus(assignment.status, ['running']);
963
+ draft = this.#event('assignment.execution_completed', {
964
+ ...header,
965
+ reportRef: observation.completion.report.ref,
966
+ reportDigest: observation.completion.report.digest,
967
+ candidateRef: observation.completion.candidate.ref,
968
+ candidateHash: observation.completion.candidate.hash,
969
+ ...(observation.completion.completionReceiptDigest === undefined
970
+ ? {}
971
+ : { completionReceiptDigest: observation.completion.completionReceiptDigest }),
972
+ });
973
+ break;
974
+ }
975
+ const preemption = replayWorkroomPreemptions(events).pending;
976
+ const drafts = observation.type === 'checkpoint'
977
+ && preemption?.assignmentId === assignment.id
978
+ ? [
979
+ draft,
980
+ this.#event('scheduler.preemption_checkpoint_acknowledged', {
981
+ decisionId: preemption.decisionId,
982
+ assignmentId: assignment.id,
983
+ envelopeDigest: envelope.digest,
984
+ observationId: observation.observationId,
985
+ observationDigest,
986
+ checkpointRef: observation.checkpoint.ref,
987
+ checkpointDigest: observation.checkpoint.digest,
988
+ assignmentAttempt: assignment.attempt,
989
+ assignmentFence: assignment.fence,
990
+ takeoverFence: preemption.takeoverFence,
991
+ }),
992
+ this.#event('assignment.preempted', {
993
+ decisionId: preemption.decisionId,
994
+ assignmentId: assignment.id,
995
+ checkpointRef: observation.checkpoint.ref,
996
+ checkpointDigest: observation.checkpoint.digest,
997
+ outcome: 'interrupted',
998
+ }),
999
+ ]
1000
+ : [draft];
1001
+ await this.#journal.append(envelope.runId, expectedSequence, drafts);
1002
+ return this.read(envelope.projectId, envelope.runId);
1003
+ }
1004
+ async evaluateTaskAcceptance(projectId, runId, taskKey) {
1005
+ assertProjectId(projectId);
1006
+ const scopedProjectId = projectId.trim();
1007
+ assertRunId(runId);
1008
+ const policy = this.#acceptancePolicy;
1009
+ if (!policy)
1010
+ throw new Error('Acceptance Policy Decision Port is not installed');
1011
+ const state = await this.#readUnscoped(runId);
1012
+ assertProject(state, scopedProjectId);
1013
+ const input = createAcceptanceDecisionInput(state, taskKey);
1014
+ const decision = await policy.decide(input);
1015
+ const assignment = state.assignments[input.assignment.id];
1016
+ if (!assignment?.candidateRef
1017
+ || !assignment.candidateHash
1018
+ || decision.candidate.id !== assignment.candidateRef
1019
+ || decision.candidate.hash !== assignment.candidateHash) {
1020
+ throw new Error('Acceptance Candidate does not match the Executor completion candidate');
1021
+ }
1022
+ const drafts = decideTaskAcceptance(input, decision, (type, payload) => this.#event(type, payload));
1023
+ await this.#journal.append(runId, input.expectedSequence, drafts);
1024
+ return this.read(scopedProjectId, runId);
1025
+ }
1026
+ async pinTaskAcceptance(projectId, runId, taskKey) {
1027
+ assertProjectId(projectId);
1028
+ const scopedProjectId = projectId.trim();
1029
+ assertRunId(runId);
1030
+ const policy = this.#acceptancePolicy;
1031
+ if (!policy)
1032
+ throw new Error('Acceptance Policy Decision Port is not installed');
1033
+ const state = await this.#readUnscoped(runId);
1034
+ assertProject(state, scopedProjectId);
1035
+ const input = createAcceptanceContractPinInput(state, taskKey);
1036
+ const contract = await policy.pinContract(input);
1037
+ assertAcceptanceContract(contract, input.task.key, input.task.revision);
1038
+ const pinnedContract = freezeAcceptanceContract(contract);
1039
+ const drafts = [this.#event('task.acceptance_pinned', {
1040
+ taskKey: input.task.key,
1041
+ contract: pinnedContract,
1042
+ })];
1043
+ await this.#journal.append(runId, input.expectedSequence, drafts);
1044
+ return this.read(scopedProjectId, runId);
1045
+ }
1046
+ async claimReviewerAssignment(projectId, runId, assignmentId, principalId) {
1047
+ const { scopedProjectId, state } = await this.#readProject(projectId, runId);
1048
+ const assignment = state.reviewerAssignments[assignmentId];
1049
+ if (!assignment)
1050
+ throw new Error(`Reviewer Assignment ${assignmentId} not found`);
1051
+ const authorization = await this.#authorize(state, {
1052
+ action: 'claim_review',
1053
+ principalId,
1054
+ requiredRole: 'reviewer',
1055
+ taskKey: assignment.taskKey,
1056
+ targetId: assignment.id,
1057
+ });
1058
+ const drafts = decideReviewerClaim(state, { assignmentId, principalId, authorization }, (type, payload) => this.#event(type, payload));
1059
+ await this.#journal.append(runId, state.sequence, drafts);
1060
+ return this.read(scopedProjectId, runId);
1061
+ }
1062
+ async submitReviewerVerdict(projectId, runId, assignmentId, principalId, verdict) {
1063
+ const { scopedProjectId, state } = await this.#readProject(projectId, runId);
1064
+ const assignment = state.reviewerAssignments[assignmentId];
1065
+ if (!assignment)
1066
+ throw new Error(`Reviewer Assignment ${assignmentId} not found`);
1067
+ const authorization = await this.#authorize(state, {
1068
+ action: 'submit_review',
1069
+ principalId,
1070
+ requiredRole: 'reviewer',
1071
+ taskKey: assignment.taskKey,
1072
+ targetId: assignment.id,
1073
+ });
1074
+ const drafts = decideReviewerVerdict(state, { assignmentId, principalId, authorization, verdict }, (type, payload) => this.#event(type, payload));
1075
+ await this.#journal.append(runId, state.sequence, drafts);
1076
+ return this.read(scopedProjectId, runId);
1077
+ }
1078
+ async decideSponsorGate(projectId, runId, gateId, principalId, input) {
1079
+ const { scopedProjectId, state } = await this.#readProject(projectId, runId);
1080
+ const gate = state.sponsorGates[gateId];
1081
+ if (!gate)
1082
+ throw new Error(`Sponsor Gate ${gateId} not found`);
1083
+ const authorization = await this.#authorize(state, {
1084
+ action: 'decide_sponsor',
1085
+ principalId,
1086
+ requiredRole: 'sponsor',
1087
+ taskKey: gate.taskKey,
1088
+ targetId: gate.id,
1089
+ });
1090
+ const drafts = decideSponsorGate(state, { gateId, principalId, authorization, ...input }, (type, payload) => this.#event(type, payload));
1091
+ await this.#journal.append(runId, state.sequence, drafts);
1092
+ return this.read(scopedProjectId, runId);
1093
+ }
1094
+ async read(projectId, runId) {
1095
+ assertProjectId(projectId);
1096
+ const scopedProjectId = projectId.trim();
1097
+ assertRunId(runId);
1098
+ const state = await this.#readUnscoped(runId);
1099
+ assertProject(state, scopedProjectId);
1100
+ return state;
1101
+ }
1102
+ async list(projectId) {
1103
+ assertProjectId(projectId);
1104
+ const scopedProjectId = projectId.trim();
1105
+ const states = await Promise.all((await this.#journal.listRunIds()).map(runId => this.#readUnscoped(runId)));
1106
+ return Object.freeze(states
1107
+ .filter(state => state.projectId === scopedProjectId)
1108
+ .sort((left, right) => right.now - left.now));
1109
+ }
1110
+ /** Durable remote dispatch intents used by the generation recovery projector. */
1111
+ async listLocalAssignmentIssuances() {
1112
+ const receipts = [];
1113
+ for (const runId of await this.#journal.listRunIds()) {
1114
+ const events = await this.#journal.read(runId);
1115
+ if (events.length === 0)
1116
+ continue;
1117
+ const state = replayWorkroom(events);
1118
+ for (const event of events) {
1119
+ if (event.type !== 'local_execution.requested')
1120
+ continue;
1121
+ receipts.push(Object.freeze({
1122
+ ...parseWorkroomLocalAssignmentIssuance(event.payload),
1123
+ state,
1124
+ }));
1125
+ }
1126
+ }
1127
+ return Object.freeze(receipts.sort((left, right) => compareCanonicalWorkroomText(left.operationId, right.operationId)));
1128
+ }
1129
+ /** Durable remote dispatch intents used by the generation recovery projector. */
1130
+ async listRemoteAssignmentIssuances() {
1131
+ const receipts = [];
1132
+ for (const runId of await this.#journal.listRunIds()) {
1133
+ const events = await this.#journal.read(runId);
1134
+ if (events.length === 0)
1135
+ continue;
1136
+ const state = replayWorkroom(events);
1137
+ for (const event of events) {
1138
+ if (event.type !== 'remote_dispatch.requested')
1139
+ continue;
1140
+ receipts.push(Object.freeze({
1141
+ ...parseWorkroomRemoteAssignmentIssuance(event.payload),
1142
+ state,
1143
+ }));
1144
+ }
1145
+ }
1146
+ return Object.freeze(receipts.sort((left, right) => compareCanonicalWorkroomText(left.operationId, right.operationId)));
1147
+ }
1148
+ async #readUnscoped(runId) {
1149
+ const events = await this.#journal.read(runId);
1150
+ if (events.length === 0)
1151
+ throw new Error(`Workroom run ${runId} not found`);
1152
+ return replayWorkroom(events);
1153
+ }
1154
+ async #readProject(projectId, runId) {
1155
+ assertProjectId(projectId);
1156
+ const scopedProjectId = projectId.trim();
1157
+ assertRunId(runId);
1158
+ const state = await this.#readUnscoped(runId);
1159
+ assertProject(state, scopedProjectId);
1160
+ return { scopedProjectId, state };
1161
+ }
1162
+ async #authorize(state, input) {
1163
+ const authority = this.#acceptanceAuthority;
1164
+ if (!authority)
1165
+ throw new Error('Workroom Acceptance Authority Port is not installed');
1166
+ return await authority.authorize(Object.freeze({
1167
+ ...input,
1168
+ projectId: state.projectId,
1169
+ runId: state.runId,
1170
+ expectedSequence: state.sequence,
1171
+ }));
1172
+ }
1173
+ #planTaskDrafts(task) {
1174
+ return Object.freeze([
1175
+ this.#event('task.planned', planTaskPayload(task)),
1176
+ ...(task.approvalGate ? [this.#planTaskBlockerDraft(task)] : []),
1177
+ ]);
1178
+ }
1179
+ #planTaskBlockerDraft(task) {
1180
+ const gate = task.approvalGate;
1181
+ if (!gate)
1182
+ throw new Error(`Workflow Plan Task ${task.key} has no Sponsor Gate`);
1183
+ return this.#event('task.blocked', {
1184
+ taskKey: task.key,
1185
+ blockerId: gate.id,
1186
+ kind: 'approval',
1187
+ owner: gate.owner,
1188
+ reason: `Workflow Plan Sponsor Gate ${gate.id}`,
1189
+ deadline: gate.deadline,
1190
+ });
1191
+ }
1192
+ #event(type, payload) {
1193
+ return Object.freeze({
1194
+ eventId: this.#createId(),
1195
+ occurredAt: this.#now(),
1196
+ type,
1197
+ payload: Object.freeze({ ...payload }),
1198
+ });
1199
+ }
1200
+ #trustedHeartbeatLeaseExpiry(currentLeaseExpiresAt) {
1201
+ const now = this.#now();
1202
+ if (!Number.isFinite(now))
1203
+ throw new Error('Assignment heartbeat clock must be finite');
1204
+ if (now >= currentLeaseExpiresAt) {
1205
+ throw new Error('Assignment heartbeat cannot revive an expired lease');
1206
+ }
1207
+ const leaseExpiresAt = now + this.#assignmentHeartbeatLeaseMs;
1208
+ if (!Number.isFinite(leaseExpiresAt))
1209
+ throw new Error('Assignment heartbeat lease expiry must be finite');
1210
+ if (leaseExpiresAt <= currentLeaseExpiresAt) {
1211
+ throw new Error('Assignment heartbeat must strictly extend the current lease');
1212
+ }
1213
+ return leaseExpiresAt;
1214
+ }
1215
+ #trustedAssignmentTiming(kind) {
1216
+ const now = this.#now();
1217
+ if (!Number.isFinite(now) || now < 0) {
1218
+ throw new Error(`${kind} Assignment claim clock must be a finite timestamp`);
1219
+ }
1220
+ const expiresAt = now + this.#assignmentHeartbeatLeaseMs;
1221
+ const reconcileDeadline = expiresAt + this.#assignmentHeartbeatLeaseMs;
1222
+ if (!Number.isFinite(expiresAt) || !Number.isFinite(reconcileDeadline)) {
1223
+ throw new Error(`${kind} Assignment lease expiry must be finite`);
1224
+ }
1225
+ return Object.freeze({
1226
+ issuedAt: now,
1227
+ leaseExpiresAt: expiresAt,
1228
+ reconcileDeadline,
1229
+ });
1230
+ }
1231
+ }
1232
+ function assignmentPreview(input) {
1233
+ const body = Object.freeze({ version: 1, ...input });
1234
+ return Object.freeze({ ...body, previewDigest: digestCanonicalWorkroomValue(body) });
1235
+ }
1236
+ function currentWorkflowPlan(events) {
1237
+ const admitted = events.filter(event => event.type === 'plan.admitted');
1238
+ if (admitted.length !== 1)
1239
+ throw new Error('Plan Revision requires one exact admitted Plan');
1240
+ let plan = admitted[0].payload.plan;
1241
+ assertWorkflowPlanProposal(plan);
1242
+ let revision = 1;
1243
+ for (const event of events) {
1244
+ if (event.type !== 'plan.revision_applied')
1245
+ continue;
1246
+ const candidate = event.payload.candidate;
1247
+ assertWorkflowPlanRevisionCandidate(candidate);
1248
+ const nextRevision = Number(event.payload.planRevision);
1249
+ if (candidate.basePlanRevision !== revision || candidate.basePlanDigest !== plan.digest
1250
+ || nextRevision !== revision + 1) {
1251
+ throw new Error('Persisted Plan Revision chain is not contiguous');
1252
+ }
1253
+ plan = candidate.nextPlan;
1254
+ revision = nextRevision;
1255
+ }
1256
+ return Object.freeze({ revision, plan });
1257
+ }
1258
+ function planTaskPayload(task) {
1259
+ return {
1260
+ taskKey: task.key,
1261
+ title: task.title,
1262
+ required: task.required,
1263
+ maxAttempts: task.maxAttempts,
1264
+ role: task.role,
1265
+ dependsOn: task.dependsOn,
1266
+ requires: task.requires,
1267
+ sponsorLane: task.scheduler.sponsorLane,
1268
+ localRank: task.scheduler.localRank,
1269
+ deadline: task.scheduler.deadline,
1270
+ enqueuedAt: task.scheduler.enqueuedAt,
1271
+ preemptibility: task.scheduler.preemptibility,
1272
+ ...(task.approvalGate ? { approvalGate: task.approvalGate } : {}),
1273
+ };
1274
+ }
1275
+ function requireObservationStatus(status, allowed) {
1276
+ if (!allowed.includes(status))
1277
+ throw new Error(`Assignment cannot observe execution while ${status}`);
1278
+ }
1279
+ function assertRunId(runId) {
1280
+ if (!/^[A-Za-z0-9_-]{1,128}$/u.test(runId)) {
1281
+ throw new Error('Workroom runId must contain only letters, digits, underscore or hyphen');
1282
+ }
1283
+ }
1284
+ function assertProjectId(projectId) {
1285
+ if (!projectId.trim())
1286
+ throw new Error('Workroom projectId is required');
1287
+ }
1288
+ function assertProject(state, projectId) {
1289
+ if (state.projectId !== projectId)
1290
+ throw new Error('Workroom run does not belong to the requested Project');
1291
+ }
1292
+ function runControlReceipt(status, command, requestDigest, receiptRef, state) {
1293
+ return Object.freeze({
1294
+ status,
1295
+ action: command.action,
1296
+ operationId: command.operationId,
1297
+ receiptRef,
1298
+ receiptDigest: digestCanonicalWorkroomValue({
1299
+ version: 1,
1300
+ operationId: command.operationId,
1301
+ action: command.action,
1302
+ requestDigest,
1303
+ receiptRef,
1304
+ }),
1305
+ state,
1306
+ });
1307
+ }
1308
+ function findLocalAssignmentIssuance(events, operationId) {
1309
+ const matches = events.filter(event => event.type === 'local_execution.requested'
1310
+ && event.payload.operationId === operationId);
1311
+ if (matches.length > 1) {
1312
+ throw new Error(`Local Assignment operation ${operationId} is duplicated in the Kernel Journal`);
1313
+ }
1314
+ return matches[0]
1315
+ ? parseWorkroomLocalAssignmentIssuance(matches[0].payload)
1316
+ : undefined;
1317
+ }
1318
+ function assertLocalAssignmentReplay(issuance, requestDigest) {
1319
+ if (issuance.requestDigest !== requestDigest) {
1320
+ throw new Error(`Local Assignment operation payload conflict: ${issuance.operationId}`);
1321
+ }
1322
+ }
1323
+ function findRemoteAssignmentIssuance(events, operationId) {
1324
+ const matches = events.filter(event => event.type === 'remote_dispatch.requested'
1325
+ && event.payload.operationId === operationId);
1326
+ if (matches.length > 1) {
1327
+ throw new Error(`Remote Assignment operation ${operationId} is duplicated in the Kernel Journal`);
1328
+ }
1329
+ return matches[0]
1330
+ ? parseWorkroomRemoteAssignmentIssuance(matches[0].payload)
1331
+ : undefined;
1332
+ }
1333
+ function assertRemoteAssignmentReplay(issuance, requestDigest) {
1334
+ if (issuance.requestDigest !== requestDigest) {
1335
+ throw new Error(`Remote Assignment operation payload conflict: ${issuance.operationId}`);
1336
+ }
1337
+ }
1338
+ function normalizePlanAdmission(input) {
1339
+ requireCanonicalText(input.operationId, 'operationId');
1340
+ assertProjectId(input.projectId);
1341
+ requireCanonicalText(input.title, 'title');
1342
+ requireCanonicalText(input.sourceEventRef, 'sourceEventRef');
1343
+ requireDigest(input.sourceEventDigest, 'sourceEventDigest');
1344
+ requireCanonicalText(input.orchestratorAgentDefinitionId, 'orchestratorAgentDefinitionId');
1345
+ assertWorkflowPlanProposal(input.plan);
1346
+ if (input.plan.projectId !== input.projectId.trim()) {
1347
+ throw new Error('Workflow Plan proposal belongs to another Project');
1348
+ }
1349
+ return Object.freeze({
1350
+ ...structuredClone(input),
1351
+ projectId: input.projectId.trim(),
1352
+ title: input.title.trim(),
1353
+ });
1354
+ }
1355
+ function normalizePlanGateDecision(input) {
1356
+ for (const [value, label] of [
1357
+ [input.operationId, 'operationId'], [input.projectId, 'projectId'], [input.runId, 'runId'],
1358
+ [input.taskKey, 'taskKey'], [input.gateId, 'gateId'], [input.reason, 'reason'],
1359
+ [input.sponsorPrincipalId, 'sponsorPrincipalId'], [input.sponsorAuthorityRef, 'sponsorAuthorityRef'],
1360
+ ])
1361
+ requireCanonicalText(value, label);
1362
+ if (!Number.isSafeInteger(input.taskRevision) || input.taskRevision < 1) {
1363
+ throw new Error('Plan Sponsor Gate taskRevision must be a positive safe integer');
1364
+ }
1365
+ if (!Number.isSafeInteger(input.expectedSequence) || input.expectedSequence < 0) {
1366
+ throw new Error('Plan Sponsor Gate expectedSequence must be a non-negative safe integer');
1367
+ }
1368
+ if (!['approve', 'reject', 'request_changes', 'cancel'].includes(input.decision)) {
1369
+ throw new Error('Plan Sponsor Gate decision is invalid');
1370
+ }
1371
+ return Object.freeze(structuredClone(input));
1372
+ }
1373
+ function planGateReceipt(status, input, requestDigest, state) {
1374
+ const receiptRef = `workroom-run:${input.runId}:plan-gate:${encodeURIComponent(input.operationId)}`;
1375
+ return Object.freeze({
1376
+ status,
1377
+ operationId: input.operationId,
1378
+ receiptRef,
1379
+ receiptDigest: digestCanonicalWorkroomValue({
1380
+ version: 1,
1381
+ operationId: input.operationId,
1382
+ requestDigest,
1383
+ decision: input.decision,
1384
+ }),
1385
+ state,
1386
+ });
1387
+ }
1388
+ function planAdmissionRunId(operationId) {
1389
+ return `run-${digestCanonicalWorkroomValue({ operationId }).slice('sha256:'.length, 38)}`;
1390
+ }
1391
+ function assertExactPlanAdmission(events, input, admittedPayload) {
1392
+ const expectedTypes = [
1393
+ 'run.created',
1394
+ 'plan.admitted',
1395
+ ...input.plan.tasks.flatMap(task => [
1396
+ 'task.planned',
1397
+ ...(task.approvalGate ? ['task.blocked'] : []),
1398
+ ]),
1399
+ ];
1400
+ if (events.length !== expectedTypes.length
1401
+ || events.some((event, index) => event.type !== expectedTypes[index])) {
1402
+ throw new Error('Workflow Plan operation replay conflicts with persisted Run shape');
1403
+ }
1404
+ const created = events[0];
1405
+ const admitted = events[1];
1406
+ if (created.payload.projectId !== input.projectId
1407
+ || created.payload.title !== input.title
1408
+ || canonicalWorkroomJson(admitted.payload) !== canonicalWorkroomJson(admittedPayload)) {
1409
+ throw new Error('Workflow Plan operation replay payload drift');
1410
+ }
1411
+ let cursor = 2;
1412
+ for (const task of input.plan.tasks) {
1413
+ const payload = events[cursor++].payload;
1414
+ const expected = {
1415
+ taskKey: task.key, title: task.title, required: task.required,
1416
+ maxAttempts: task.maxAttempts, role: task.role,
1417
+ dependsOn: task.dependsOn, requires: task.requires,
1418
+ sponsorLane: task.scheduler.sponsorLane,
1419
+ localRank: task.scheduler.localRank,
1420
+ deadline: task.scheduler.deadline,
1421
+ enqueuedAt: task.scheduler.enqueuedAt,
1422
+ preemptibility: task.scheduler.preemptibility,
1423
+ ...(task.approvalGate ? { approvalGate: task.approvalGate } : {}),
1424
+ };
1425
+ if (canonicalWorkroomJson(payload) !== canonicalWorkroomJson(expected)) {
1426
+ throw new Error('Workflow Plan operation replay Task payload drift');
1427
+ }
1428
+ if (task.approvalGate) {
1429
+ const blocker = events[cursor++].payload;
1430
+ const expectedBlocker = {
1431
+ taskKey: task.key,
1432
+ blockerId: task.approvalGate.id,
1433
+ kind: 'approval',
1434
+ owner: task.approvalGate.owner,
1435
+ reason: `Workflow Plan Sponsor Gate ${task.approvalGate.id}`,
1436
+ deadline: task.approvalGate.deadline,
1437
+ };
1438
+ if (canonicalWorkroomJson(blocker) !== canonicalWorkroomJson(expectedBlocker)) {
1439
+ throw new Error('Workflow Plan operation replay Sponsor Gate payload drift');
1440
+ }
1441
+ }
1442
+ }
1443
+ }
1444
+ function requireCanonicalText(value, label) {
1445
+ if (typeof value !== 'string' || !value.trim() || value !== value.trim()) {
1446
+ throw new Error(`Workroom Plan admission ${label} must be canonical text`);
1447
+ }
1448
+ }
1449
+ function requireDigest(value, label) {
1450
+ if (typeof value !== 'string' || !/^sha256:[a-f0-9]{64}$/u.test(value)) {
1451
+ throw new Error(`Workroom Plan admission ${label} must be a canonical SHA-256 digest`);
1452
+ }
1453
+ }
1454
+ //# sourceMappingURL=workroom-kernel.js.map