@zhin.js/workroom 0.0.0 → 0.0.2

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 (815) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -4
  3. package/lib/data-governance/canonical-value.d.ts +7 -0
  4. package/lib/data-governance/canonical-value.d.ts.map +1 -0
  5. package/lib/data-governance/canonical-value.js +35 -0
  6. package/lib/data-governance/canonical-value.js.map +1 -0
  7. package/lib/data-governance/data-governance.d.ts +198 -0
  8. package/lib/data-governance/data-governance.d.ts.map +1 -0
  9. package/lib/data-governance/data-governance.js +660 -0
  10. package/lib/data-governance/data-governance.js.map +1 -0
  11. package/lib/data-governance/database-payload-lifecycle-repository.d.ts +68 -0
  12. package/lib/data-governance/database-payload-lifecycle-repository.d.ts.map +1 -0
  13. package/lib/data-governance/database-payload-lifecycle-repository.js +226 -0
  14. package/lib/data-governance/database-payload-lifecycle-repository.js.map +1 -0
  15. package/lib/data-governance/disclosure-authority.d.ts +38 -0
  16. package/lib/data-governance/disclosure-authority.d.ts.map +1 -0
  17. package/lib/data-governance/disclosure-authority.js +2 -0
  18. package/lib/data-governance/disclosure-authority.js.map +1 -0
  19. package/lib/data-governance/disclosure-manifest.d.ts +110 -0
  20. package/lib/data-governance/disclosure-manifest.d.ts.map +1 -0
  21. package/lib/data-governance/disclosure-manifest.js +264 -0
  22. package/lib/data-governance/disclosure-manifest.js.map +1 -0
  23. package/lib/data-governance/durable-file-store.d.ts +56 -0
  24. package/lib/data-governance/durable-file-store.d.ts.map +1 -0
  25. package/lib/data-governance/durable-file-store.js +125 -0
  26. package/lib/data-governance/durable-file-store.js.map +1 -0
  27. package/lib/data-governance/encrypted-database-payload-vault.d.ts +107 -0
  28. package/lib/data-governance/encrypted-database-payload-vault.d.ts.map +1 -0
  29. package/lib/data-governance/encrypted-database-payload-vault.js +236 -0
  30. package/lib/data-governance/encrypted-database-payload-vault.js.map +1 -0
  31. package/lib/data-governance/encrypted-file-payload-vault.d.ts +117 -0
  32. package/lib/data-governance/encrypted-file-payload-vault.d.ts.map +1 -0
  33. package/lib/data-governance/encrypted-file-payload-vault.js +507 -0
  34. package/lib/data-governance/encrypted-file-payload-vault.js.map +1 -0
  35. package/lib/data-governance/file-payload-lifecycle-repository.d.ts +19 -0
  36. package/lib/data-governance/file-payload-lifecycle-repository.d.ts.map +1 -0
  37. package/lib/data-governance/file-payload-lifecycle-repository.js +194 -0
  38. package/lib/data-governance/file-payload-lifecycle-repository.js.map +1 -0
  39. package/lib/data-governance/governance-authority-repository.d.ts +152 -0
  40. package/lib/data-governance/governance-authority-repository.d.ts.map +1 -0
  41. package/lib/data-governance/governance-authority-repository.js +455 -0
  42. package/lib/data-governance/governance-authority-repository.js.map +1 -0
  43. package/lib/data-governance/governed-payload-write-saga.d.ts +126 -0
  44. package/lib/data-governance/governed-payload-write-saga.d.ts.map +1 -0
  45. package/lib/data-governance/governed-payload-write-saga.js +471 -0
  46. package/lib/data-governance/governed-payload-write-saga.js.map +1 -0
  47. package/lib/data-governance/payload-hold-overdue-projection.d.ts +57 -0
  48. package/lib/data-governance/payload-hold-overdue-projection.d.ts.map +1 -0
  49. package/lib/data-governance/payload-hold-overdue-projection.js +80 -0
  50. package/lib/data-governance/payload-hold-overdue-projection.js.map +1 -0
  51. package/lib/data-governance/payload-lifecycle.d.ts +359 -0
  52. package/lib/data-governance/payload-lifecycle.d.ts.map +1 -0
  53. package/lib/data-governance/payload-lifecycle.js +930 -0
  54. package/lib/data-governance/payload-lifecycle.js.map +1 -0
  55. package/lib/data-governance/payload-vault-storage-handoff.d.ts +255 -0
  56. package/lib/data-governance/payload-vault-storage-handoff.d.ts.map +1 -0
  57. package/lib/data-governance/payload-vault-storage-handoff.js +471 -0
  58. package/lib/data-governance/payload-vault-storage-handoff.js.map +1 -0
  59. package/lib/data-governance.d.ts +26 -0
  60. package/lib/data-governance.d.ts.map +1 -0
  61. package/lib/data-governance.js +26 -0
  62. package/lib/data-governance.js.map +1 -0
  63. package/lib/index.d.ts +102 -0
  64. package/lib/index.d.ts.map +1 -0
  65. package/lib/index.js +105 -0
  66. package/lib/index.js.map +1 -0
  67. package/lib/portfolio/capacity-control-outbox.d.ts +174 -0
  68. package/lib/portfolio/capacity-control-outbox.d.ts.map +1 -0
  69. package/lib/portfolio/capacity-control-outbox.js +338 -0
  70. package/lib/portfolio/capacity-control-outbox.js.map +1 -0
  71. package/lib/portfolio/database-capacity-control-outbox.d.ts +62 -0
  72. package/lib/portfolio/database-capacity-control-outbox.d.ts.map +1 -0
  73. package/lib/portfolio/database-capacity-control-outbox.js +166 -0
  74. package/lib/portfolio/database-capacity-control-outbox.js.map +1 -0
  75. package/lib/portfolio/file-capacity-control-outbox.d.ts +10 -0
  76. package/lib/portfolio/file-capacity-control-outbox.d.ts.map +1 -0
  77. package/lib/portfolio/file-capacity-control-outbox.js +113 -0
  78. package/lib/portfolio/file-capacity-control-outbox.js.map +1 -0
  79. package/lib/portfolio/file-portfolio-journal.d.ts +11 -0
  80. package/lib/portfolio/file-portfolio-journal.d.ts.map +1 -0
  81. package/lib/portfolio/file-portfolio-journal.js +196 -0
  82. package/lib/portfolio/file-portfolio-journal.js.map +1 -0
  83. package/lib/portfolio/portfolio-admission.d.ts +95 -0
  84. package/lib/portfolio/portfolio-admission.d.ts.map +1 -0
  85. package/lib/portfolio/portfolio-admission.js +1080 -0
  86. package/lib/portfolio/portfolio-admission.js.map +1 -0
  87. package/lib/portfolio/portfolio-journal.d.ts +359 -0
  88. package/lib/portfolio/portfolio-journal.d.ts.map +1 -0
  89. package/lib/portfolio/portfolio-journal.js +844 -0
  90. package/lib/portfolio/portfolio-journal.js.map +1 -0
  91. package/lib/portfolio/resource-bundle.d.ts +136 -0
  92. package/lib/portfolio/resource-bundle.d.ts.map +1 -0
  93. package/lib/portfolio/resource-bundle.js +387 -0
  94. package/lib/portfolio/resource-bundle.js.map +1 -0
  95. package/lib/portfolio/sponsor-projection.d.ts +78 -0
  96. package/lib/portfolio/sponsor-projection.d.ts.map +1 -0
  97. package/lib/portfolio/sponsor-projection.js +135 -0
  98. package/lib/portfolio/sponsor-projection.js.map +1 -0
  99. package/lib/portfolio.d.ts +24 -0
  100. package/lib/portfolio.d.ts.map +1 -0
  101. package/lib/portfolio.js +24 -0
  102. package/lib/portfolio.js.map +1 -0
  103. package/lib/remote.d.ts +23 -0
  104. package/lib/remote.d.ts.map +1 -0
  105. package/lib/remote.js +23 -0
  106. package/lib/remote.js.map +1 -0
  107. package/lib/room/database-room-task-journal.d.ts +66 -0
  108. package/lib/room/database-room-task-journal.d.ts.map +1 -0
  109. package/lib/room/database-room-task-journal.js +154 -0
  110. package/lib/room/database-room-task-journal.js.map +1 -0
  111. package/lib/room/index.d.ts +15 -0
  112. package/lib/room/index.d.ts.map +1 -0
  113. package/lib/room/index.js +15 -0
  114. package/lib/room/index.js.map +1 -0
  115. package/lib/room/room-bus.d.ts +45 -0
  116. package/lib/room/room-bus.d.ts.map +1 -0
  117. package/lib/room/room-bus.js +71 -0
  118. package/lib/room/room-bus.js.map +1 -0
  119. package/lib/room/room-definition.d.ts +75 -0
  120. package/lib/room/room-definition.d.ts.map +1 -0
  121. package/lib/room/room-definition.js +22 -0
  122. package/lib/room/room-definition.js.map +1 -0
  123. package/lib/room/room-event-sequencer.d.ts +29 -0
  124. package/lib/room/room-event-sequencer.d.ts.map +1 -0
  125. package/lib/room/room-event-sequencer.js +57 -0
  126. package/lib/room/room-event-sequencer.js.map +1 -0
  127. package/lib/room/room-guards.d.ts +105 -0
  128. package/lib/room/room-guards.d.ts.map +1 -0
  129. package/lib/room/room-guards.js +222 -0
  130. package/lib/room/room-guards.js.map +1 -0
  131. package/lib/room/room-membership.d.ts +15 -0
  132. package/lib/room/room-membership.d.ts.map +1 -0
  133. package/lib/room/room-membership.js +34 -0
  134. package/lib/room/room-membership.js.map +1 -0
  135. package/lib/room/room-registry.d.ts +59 -0
  136. package/lib/room/room-registry.d.ts.map +1 -0
  137. package/lib/room/room-registry.js +64 -0
  138. package/lib/room/room-registry.js.map +1 -0
  139. package/lib/room/room-router.d.ts +31 -0
  140. package/lib/room/room-router.d.ts.map +1 -0
  141. package/lib/room/room-router.js +99 -0
  142. package/lib/room/room-router.js.map +1 -0
  143. package/lib/room/room-send-limiter.d.ts +91 -0
  144. package/lib/room/room-send-limiter.d.ts.map +1 -0
  145. package/lib/room/room-send-limiter.js +124 -0
  146. package/lib/room/room-send-limiter.js.map +1 -0
  147. package/lib/room/room-task-authorizer.d.ts +54 -0
  148. package/lib/room/room-task-authorizer.d.ts.map +1 -0
  149. package/lib/room/room-task-authorizer.js +139 -0
  150. package/lib/room/room-task-authorizer.js.map +1 -0
  151. package/lib/room/room-task-journal.d.ts +27 -0
  152. package/lib/room/room-task-journal.d.ts.map +1 -0
  153. package/lib/room/room-task-journal.js +49 -0
  154. package/lib/room/room-task-journal.js.map +1 -0
  155. package/lib/room/room-task-service.d.ts +54 -0
  156. package/lib/room/room-task-service.d.ts.map +1 -0
  157. package/lib/room/room-task-service.js +103 -0
  158. package/lib/room/room-task-service.js.map +1 -0
  159. package/lib/room/room-task.d.ts +143 -0
  160. package/lib/room/room-task.d.ts.map +1 -0
  161. package/lib/room/room-task.js +315 -0
  162. package/lib/room/room-task.js.map +1 -0
  163. package/lib/room/validate-room.d.ts +15 -0
  164. package/lib/room/validate-room.d.ts.map +1 -0
  165. package/lib/room/validate-room.js +314 -0
  166. package/lib/room/validate-room.js.map +1 -0
  167. package/lib/scheduler.d.ts +20 -0
  168. package/lib/scheduler.d.ts.map +1 -0
  169. package/lib/scheduler.js +20 -0
  170. package/lib/scheduler.js.map +1 -0
  171. package/lib/workroom/acceptance-control.d.ts +77 -0
  172. package/lib/workroom/acceptance-control.d.ts.map +1 -0
  173. package/lib/workroom/acceptance-control.js +345 -0
  174. package/lib/workroom/acceptance-control.js.map +1 -0
  175. package/lib/workroom/acceptance-policy.d.ts +152 -0
  176. package/lib/workroom/acceptance-policy.d.ts.map +1 -0
  177. package/lib/workroom/acceptance-policy.js +610 -0
  178. package/lib/workroom/acceptance-policy.js.map +1 -0
  179. package/lib/workroom/accepted-source-memory-application.d.ts +113 -0
  180. package/lib/workroom/accepted-source-memory-application.d.ts.map +1 -0
  181. package/lib/workroom/accepted-source-memory-application.js +327 -0
  182. package/lib/workroom/accepted-source-memory-application.js.map +1 -0
  183. package/lib/workroom/accepted-source-projector.d.ts +89 -0
  184. package/lib/workroom/accepted-source-projector.d.ts.map +1 -0
  185. package/lib/workroom/accepted-source-projector.js +281 -0
  186. package/lib/workroom/accepted-source-projector.js.map +1 -0
  187. package/lib/workroom/assignment-authority-grant-application.d.ts +125 -0
  188. package/lib/workroom/assignment-authority-grant-application.d.ts.map +1 -0
  189. package/lib/workroom/assignment-authority-grant-application.js +318 -0
  190. package/lib/workroom/assignment-authority-grant-application.js.map +1 -0
  191. package/lib/workroom/assignment-authority-grant-repository.d.ts +152 -0
  192. package/lib/workroom/assignment-authority-grant-repository.d.ts.map +1 -0
  193. package/lib/workroom/assignment-authority-grant-repository.js +389 -0
  194. package/lib/workroom/assignment-authority-grant-repository.js.map +1 -0
  195. package/lib/workroom/assignment-authority.d.ts +75 -0
  196. package/lib/workroom/assignment-authority.d.ts.map +1 -0
  197. package/lib/workroom/assignment-authority.js +179 -0
  198. package/lib/workroom/assignment-authority.js.map +1 -0
  199. package/lib/workroom/assignment-executor.d.ts +110 -0
  200. package/lib/workroom/assignment-executor.d.ts.map +1 -0
  201. package/lib/workroom/assignment-executor.js +371 -0
  202. package/lib/workroom/assignment-executor.js.map +1 -0
  203. package/lib/workroom/assignment-observation-ingress.d.ts +21 -0
  204. package/lib/workroom/assignment-observation-ingress.d.ts.map +1 -0
  205. package/lib/workroom/assignment-observation-ingress.js +24 -0
  206. package/lib/workroom/assignment-observation-ingress.js.map +1 -0
  207. package/lib/workroom/canonical-value.d.ts +2 -0
  208. package/lib/workroom/canonical-value.d.ts.map +1 -0
  209. package/lib/workroom/canonical-value.js +2 -0
  210. package/lib/workroom/canonical-value.js.map +1 -0
  211. package/lib/workroom/catalog-definition.d.ts +52 -0
  212. package/lib/workroom/catalog-definition.d.ts.map +1 -0
  213. package/lib/workroom/catalog-definition.js +6 -0
  214. package/lib/workroom/catalog-definition.js.map +1 -0
  215. package/lib/workroom/catalog.d.ts +80 -0
  216. package/lib/workroom/catalog.d.ts.map +1 -0
  217. package/lib/workroom/catalog.js +386 -0
  218. package/lib/workroom/catalog.js.map +1 -0
  219. package/lib/workroom/coding-assignment-executor.d.ts +90 -0
  220. package/lib/workroom/coding-assignment-executor.d.ts.map +1 -0
  221. package/lib/workroom/coding-assignment-executor.js +250 -0
  222. package/lib/workroom/coding-assignment-executor.js.map +1 -0
  223. package/lib/workroom/coding-git-objects.d.ts +17 -0
  224. package/lib/workroom/coding-git-objects.d.ts.map +1 -0
  225. package/lib/workroom/coding-git-objects.js +68 -0
  226. package/lib/workroom/coding-git-objects.js.map +1 -0
  227. package/lib/workroom/database-project-knowledge-journal.d.ts +62 -0
  228. package/lib/workroom/database-project-knowledge-journal.d.ts.map +1 -0
  229. package/lib/workroom/database-project-knowledge-journal.js +161 -0
  230. package/lib/workroom/database-project-knowledge-journal.js.map +1 -0
  231. package/lib/workroom/durable-file-store.d.ts +2 -0
  232. package/lib/workroom/durable-file-store.d.ts.map +1 -0
  233. package/lib/workroom/durable-file-store.js +2 -0
  234. package/lib/workroom/durable-file-store.js.map +1 -0
  235. package/lib/workroom/dynamic-workflow-planner.d.ts +86 -0
  236. package/lib/workroom/dynamic-workflow-planner.d.ts.map +1 -0
  237. package/lib/workroom/dynamic-workflow-planner.js +260 -0
  238. package/lib/workroom/dynamic-workflow-planner.js.map +1 -0
  239. package/lib/workroom/effect-blocker-repository.d.ts +51 -0
  240. package/lib/workroom/effect-blocker-repository.d.ts.map +1 -0
  241. package/lib/workroom/effect-blocker-repository.js +174 -0
  242. package/lib/workroom/effect-blocker-repository.js.map +1 -0
  243. package/lib/workroom/effect-ledger.d.ts +211 -0
  244. package/lib/workroom/effect-ledger.d.ts.map +1 -0
  245. package/lib/workroom/effect-ledger.js +484 -0
  246. package/lib/workroom/effect-ledger.js.map +1 -0
  247. package/lib/workroom/file-accepted-source-memory-repository.d.ts +15 -0
  248. package/lib/workroom/file-accepted-source-memory-repository.d.ts.map +1 -0
  249. package/lib/workroom/file-accepted-source-memory-repository.js +136 -0
  250. package/lib/workroom/file-accepted-source-memory-repository.js.map +1 -0
  251. package/lib/workroom/file-coding-execution-store.d.ts +25 -0
  252. package/lib/workroom/file-coding-execution-store.d.ts.map +1 -0
  253. package/lib/workroom/file-coding-execution-store.js +122 -0
  254. package/lib/workroom/file-coding-execution-store.js.map +1 -0
  255. package/lib/workroom/file-effect-ledger.d.ts +10 -0
  256. package/lib/workroom/file-effect-ledger.d.ts.map +1 -0
  257. package/lib/workroom/file-effect-ledger.js +121 -0
  258. package/lib/workroom/file-effect-ledger.js.map +1 -0
  259. package/lib/workroom/file-human-ingress-application.d.ts +10 -0
  260. package/lib/workroom/file-human-ingress-application.d.ts.map +1 -0
  261. package/lib/workroom/file-human-ingress-application.js +177 -0
  262. package/lib/workroom/file-human-ingress-application.js.map +1 -0
  263. package/lib/workroom/file-human-ingress.d.ts +24 -0
  264. package/lib/workroom/file-human-ingress.d.ts.map +1 -0
  265. package/lib/workroom/file-human-ingress.js +234 -0
  266. package/lib/workroom/file-human-ingress.js.map +1 -0
  267. package/lib/workroom/file-interaction-space-binding-repository.d.ts +24 -0
  268. package/lib/workroom/file-interaction-space-binding-repository.d.ts.map +1 -0
  269. package/lib/workroom/file-interaction-space-binding-repository.js +293 -0
  270. package/lib/workroom/file-interaction-space-binding-repository.js.map +1 -0
  271. package/lib/workroom/file-profile-journal.d.ts +33 -0
  272. package/lib/workroom/file-profile-journal.d.ts.map +1 -0
  273. package/lib/workroom/file-profile-journal.js +311 -0
  274. package/lib/workroom/file-profile-journal.js.map +1 -0
  275. package/lib/workroom/git-workspace-gateway.d.ts +152 -0
  276. package/lib/workroom/git-workspace-gateway.d.ts.map +1 -0
  277. package/lib/workroom/git-workspace-gateway.js +257 -0
  278. package/lib/workroom/git-workspace-gateway.js.map +1 -0
  279. package/lib/workroom/github-workspace-transport.d.ts +30 -0
  280. package/lib/workroom/github-workspace-transport.d.ts.map +1 -0
  281. package/lib/workroom/github-workspace-transport.js +224 -0
  282. package/lib/workroom/github-workspace-transport.js.map +1 -0
  283. package/lib/workroom/governed-dispatch-reasons.d.ts +10 -0
  284. package/lib/workroom/governed-dispatch-reasons.d.ts.map +1 -0
  285. package/lib/workroom/governed-dispatch-reasons.js +20 -0
  286. package/lib/workroom/governed-dispatch-reasons.js.map +1 -0
  287. package/lib/workroom/human-ingress-application.d.ts +128 -0
  288. package/lib/workroom/human-ingress-application.d.ts.map +1 -0
  289. package/lib/workroom/human-ingress-application.js +415 -0
  290. package/lib/workroom/human-ingress-application.js.map +1 -0
  291. package/lib/workroom/human-ingress-orchestrator.d.ts +99 -0
  292. package/lib/workroom/human-ingress-orchestrator.d.ts.map +1 -0
  293. package/lib/workroom/human-ingress-orchestrator.js +262 -0
  294. package/lib/workroom/human-ingress-orchestrator.js.map +1 -0
  295. package/lib/workroom/human-ingress-source-reader.d.ts +29 -0
  296. package/lib/workroom/human-ingress-source-reader.d.ts.map +1 -0
  297. package/lib/workroom/human-ingress-source-reader.js +126 -0
  298. package/lib/workroom/human-ingress-source-reader.js.map +1 -0
  299. package/lib/workroom/human-ingress.d.ts +182 -0
  300. package/lib/workroom/human-ingress.d.ts.map +1 -0
  301. package/lib/workroom/human-ingress.js +526 -0
  302. package/lib/workroom/human-ingress.js.map +1 -0
  303. package/lib/workroom/interaction-space-binding-service.d.ts +57 -0
  304. package/lib/workroom/interaction-space-binding-service.d.ts.map +1 -0
  305. package/lib/workroom/interaction-space-binding-service.js +197 -0
  306. package/lib/workroom/interaction-space-binding-service.js.map +1 -0
  307. package/lib/workroom/interaction-space-router.d.ts +75 -0
  308. package/lib/workroom/interaction-space-router.d.ts.map +1 -0
  309. package/lib/workroom/interaction-space-router.js +243 -0
  310. package/lib/workroom/interaction-space-router.js.map +1 -0
  311. package/lib/workroom/journal/activatable-journal.d.ts +15 -0
  312. package/lib/workroom/journal/activatable-journal.d.ts.map +1 -0
  313. package/lib/workroom/journal/activatable-journal.js +39 -0
  314. package/lib/workroom/journal/activatable-journal.js.map +1 -0
  315. package/lib/workroom/journal/contracts.d.ts +141 -0
  316. package/lib/workroom/journal/contracts.d.ts.map +1 -0
  317. package/lib/workroom/journal/contracts.js +19 -0
  318. package/lib/workroom/journal/contracts.js.map +1 -0
  319. package/lib/workroom/journal/database-journal.d.ts +31 -0
  320. package/lib/workroom/journal/database-journal.d.ts.map +1 -0
  321. package/lib/workroom/journal/database-journal.js +114 -0
  322. package/lib/workroom/journal/database-journal.js.map +1 -0
  323. package/lib/workroom/journal/event-codec.d.ts +26 -0
  324. package/lib/workroom/journal/event-codec.d.ts.map +1 -0
  325. package/lib/workroom/journal/event-codec.js +241 -0
  326. package/lib/workroom/journal/event-codec.js.map +1 -0
  327. package/lib/workroom/journal/event-validation.d.ts +10 -0
  328. package/lib/workroom/journal/event-validation.d.ts.map +1 -0
  329. package/lib/workroom/journal/event-validation.js +671 -0
  330. package/lib/workroom/journal/event-validation.js.map +1 -0
  331. package/lib/workroom/journal/file-journal.d.ts +15 -0
  332. package/lib/workroom/journal/file-journal.d.ts.map +1 -0
  333. package/lib/workroom/journal/file-journal.js +272 -0
  334. package/lib/workroom/journal/file-journal.js.map +1 -0
  335. package/lib/workroom/journal/index.d.ts +12 -0
  336. package/lib/workroom/journal/index.d.ts.map +1 -0
  337. package/lib/workroom/journal/index.js +10 -0
  338. package/lib/workroom/journal/index.js.map +1 -0
  339. package/lib/workroom/journal/legacy-payload-guard.d.ts +16 -0
  340. package/lib/workroom/journal/legacy-payload-guard.d.ts.map +1 -0
  341. package/lib/workroom/journal/legacy-payload-guard.js +172 -0
  342. package/lib/workroom/journal/legacy-payload-guard.js.map +1 -0
  343. package/lib/workroom/journal/memory-journal.d.ts +27 -0
  344. package/lib/workroom/journal/memory-journal.d.ts.map +1 -0
  345. package/lib/workroom/journal/memory-journal.js +103 -0
  346. package/lib/workroom/journal/memory-journal.js.map +1 -0
  347. package/lib/workroom/journal/payload-governance.d.ts +29 -0
  348. package/lib/workroom/journal/payload-governance.d.ts.map +1 -0
  349. package/lib/workroom/journal/payload-governance.js +282 -0
  350. package/lib/workroom/journal/payload-governance.js.map +1 -0
  351. package/lib/workroom/journal/payload-reference.d.ts +9 -0
  352. package/lib/workroom/journal/payload-reference.d.ts.map +1 -0
  353. package/lib/workroom/journal/payload-reference.js +60 -0
  354. package/lib/workroom/journal/payload-reference.js.map +1 -0
  355. package/lib/workroom/journal/stored-event-projection.d.ts +6 -0
  356. package/lib/workroom/journal/stored-event-projection.d.ts.map +1 -0
  357. package/lib/workroom/journal/stored-event-projection.js +280 -0
  358. package/lib/workroom/journal/stored-event-projection.js.map +1 -0
  359. package/lib/workroom/journal-model.d.ts +40 -0
  360. package/lib/workroom/journal-model.d.ts.map +1 -0
  361. package/lib/workroom/journal-model.js +12 -0
  362. package/lib/workroom/journal-model.js.map +1 -0
  363. package/lib/workroom/kernel-contracts.d.ts +168 -0
  364. package/lib/workroom/kernel-contracts.d.ts.map +1 -0
  365. package/lib/workroom/kernel-contracts.js +2 -0
  366. package/lib/workroom/kernel-contracts.js.map +1 -0
  367. package/lib/workroom/kernel-state.d.ts +5 -0
  368. package/lib/workroom/kernel-state.d.ts.map +1 -0
  369. package/lib/workroom/kernel-state.js +885 -0
  370. package/lib/workroom/kernel-state.js.map +1 -0
  371. package/lib/workroom/local-assignment-issuance.d.ts +68 -0
  372. package/lib/workroom/local-assignment-issuance.d.ts.map +1 -0
  373. package/lib/workroom/local-assignment-issuance.js +128 -0
  374. package/lib/workroom/local-assignment-issuance.js.map +1 -0
  375. package/lib/workroom/plan-approval-control.d.ts +52 -0
  376. package/lib/workroom/plan-approval-control.d.ts.map +1 -0
  377. package/lib/workroom/plan-approval-control.js +9 -0
  378. package/lib/workroom/plan-approval-control.js.map +1 -0
  379. package/lib/workroom/plan-revision.d.ts +44 -0
  380. package/lib/workroom/plan-revision.d.ts.map +1 -0
  381. package/lib/workroom/plan-revision.js +133 -0
  382. package/lib/workroom/plan-revision.js.map +1 -0
  383. package/lib/workroom/profile-compiler.d.ts +130 -0
  384. package/lib/workroom/profile-compiler.d.ts.map +1 -0
  385. package/lib/workroom/profile-compiler.js +357 -0
  386. package/lib/workroom/profile-compiler.js.map +1 -0
  387. package/lib/workroom/profile-registry.d.ts +191 -0
  388. package/lib/workroom/profile-registry.d.ts.map +1 -0
  389. package/lib/workroom/profile-registry.js +698 -0
  390. package/lib/workroom/profile-registry.js.map +1 -0
  391. package/lib/workroom/project-knowledge-registry.d.ts +136 -0
  392. package/lib/workroom/project-knowledge-registry.d.ts.map +1 -0
  393. package/lib/workroom/project-knowledge-registry.js +429 -0
  394. package/lib/workroom/project-knowledge-registry.js.map +1 -0
  395. package/lib/workroom/projection-outbox/contracts.d.ts +195 -0
  396. package/lib/workroom/projection-outbox/contracts.d.ts.map +1 -0
  397. package/lib/workroom/projection-outbox/contracts.js +11 -0
  398. package/lib/workroom/projection-outbox/contracts.js.map +1 -0
  399. package/lib/workroom/projection-outbox/delivery-worker.d.ts +22 -0
  400. package/lib/workroom/projection-outbox/delivery-worker.d.ts.map +1 -0
  401. package/lib/workroom/projection-outbox/delivery-worker.js +96 -0
  402. package/lib/workroom/projection-outbox/delivery-worker.js.map +1 -0
  403. package/lib/workroom/projection-outbox/file-repository.d.ts +11 -0
  404. package/lib/workroom/projection-outbox/file-repository.d.ts.map +1 -0
  405. package/lib/workroom/projection-outbox/file-repository.js +89 -0
  406. package/lib/workroom/projection-outbox/file-repository.js.map +1 -0
  407. package/lib/workroom/projection-outbox/index.d.ts +10 -0
  408. package/lib/workroom/projection-outbox/index.d.ts.map +1 -0
  409. package/lib/workroom/projection-outbox/index.js +8 -0
  410. package/lib/workroom/projection-outbox/index.js.map +1 -0
  411. package/lib/workroom/projection-outbox/memory-repository.d.ts +11 -0
  412. package/lib/workroom/projection-outbox/memory-repository.d.ts.map +1 -0
  413. package/lib/workroom/projection-outbox/memory-repository.js +40 -0
  414. package/lib/workroom/projection-outbox/memory-repository.js.map +1 -0
  415. package/lib/workroom/projection-outbox/projector.d.ts +36 -0
  416. package/lib/workroom/projection-outbox/projector.d.ts.map +1 -0
  417. package/lib/workroom/projection-outbox/projector.js +517 -0
  418. package/lib/workroom/projection-outbox/projector.js.map +1 -0
  419. package/lib/workroom/projection-outbox/repository-state.d.ts +17 -0
  420. package/lib/workroom/projection-outbox/repository-state.d.ts.map +1 -0
  421. package/lib/workroom/projection-outbox/repository-state.js +343 -0
  422. package/lib/workroom/projection-outbox/repository-state.js.map +1 -0
  423. package/lib/workroom/projection-outbox/tracer.d.ts +19 -0
  424. package/lib/workroom/projection-outbox/tracer.d.ts.map +1 -0
  425. package/lib/workroom/projection-outbox/tracer.js +201 -0
  426. package/lib/workroom/projection-outbox/tracer.js.map +1 -0
  427. package/lib/workroom/remote-assignment-dispatch-command.d.ts +31 -0
  428. package/lib/workroom/remote-assignment-dispatch-command.d.ts.map +1 -0
  429. package/lib/workroom/remote-assignment-dispatch-command.js +56 -0
  430. package/lib/workroom/remote-assignment-dispatch-command.js.map +1 -0
  431. package/lib/workroom/remote-assignment-issuance.d.ts +88 -0
  432. package/lib/workroom/remote-assignment-issuance.d.ts.map +1 -0
  433. package/lib/workroom/remote-assignment-issuance.js +201 -0
  434. package/lib/workroom/remote-assignment-issuance.js.map +1 -0
  435. package/lib/workroom/remote-callback-application.d.ts +115 -0
  436. package/lib/workroom/remote-callback-application.d.ts.map +1 -0
  437. package/lib/workroom/remote-callback-application.js +570 -0
  438. package/lib/workroom/remote-callback-application.js.map +1 -0
  439. package/lib/workroom/remote-callback-gateway.d.ts +60 -0
  440. package/lib/workroom/remote-callback-gateway.d.ts.map +1 -0
  441. package/lib/workroom/remote-callback-gateway.js +173 -0
  442. package/lib/workroom/remote-callback-gateway.js.map +1 -0
  443. package/lib/workroom/remote-callback-inbox.d.ts +278 -0
  444. package/lib/workroom/remote-callback-inbox.d.ts.map +1 -0
  445. package/lib/workroom/remote-callback-inbox.js +1088 -0
  446. package/lib/workroom/remote-callback-inbox.js.map +1 -0
  447. package/lib/workroom/remote-callback-reconciliation-worker.d.ts +60 -0
  448. package/lib/workroom/remote-callback-reconciliation-worker.d.ts.map +1 -0
  449. package/lib/workroom/remote-callback-reconciliation-worker.js +197 -0
  450. package/lib/workroom/remote-callback-reconciliation-worker.js.map +1 -0
  451. package/lib/workroom/remote-dispatch-admission.d.ts +45 -0
  452. package/lib/workroom/remote-dispatch-admission.d.ts.map +1 -0
  453. package/lib/workroom/remote-dispatch-admission.js +187 -0
  454. package/lib/workroom/remote-dispatch-admission.js.map +1 -0
  455. package/lib/workroom/remote-dispatch-outbox.d.ts +204 -0
  456. package/lib/workroom/remote-dispatch-outbox.d.ts.map +1 -0
  457. package/lib/workroom/remote-dispatch-outbox.js +768 -0
  458. package/lib/workroom/remote-dispatch-outbox.js.map +1 -0
  459. package/lib/workroom/remote-dispatch-scheduler.d.ts +36 -0
  460. package/lib/workroom/remote-dispatch-scheduler.d.ts.map +1 -0
  461. package/lib/workroom/remote-dispatch-scheduler.js +133 -0
  462. package/lib/workroom/remote-dispatch-scheduler.js.map +1 -0
  463. package/lib/workroom/remote-dispatch-worker.d.ts +22 -0
  464. package/lib/workroom/remote-dispatch-worker.d.ts.map +1 -0
  465. package/lib/workroom/remote-dispatch-worker.js +124 -0
  466. package/lib/workroom/remote-dispatch-worker.js.map +1 -0
  467. package/lib/workroom/remote-dispatch.d.ts +79 -0
  468. package/lib/workroom/remote-dispatch.d.ts.map +1 -0
  469. package/lib/workroom/remote-dispatch.js +220 -0
  470. package/lib/workroom/remote-dispatch.js.map +1 -0
  471. package/lib/workroom/remote-executor.d.ts +15 -0
  472. package/lib/workroom/remote-executor.d.ts.map +1 -0
  473. package/lib/workroom/remote-executor.js +21 -0
  474. package/lib/workroom/remote-executor.js.map +1 -0
  475. package/lib/workroom/role-capability-snapshot.d.ts +88 -0
  476. package/lib/workroom/role-capability-snapshot.d.ts.map +1 -0
  477. package/lib/workroom/role-capability-snapshot.js +456 -0
  478. package/lib/workroom/role-capability-snapshot.js.map +1 -0
  479. package/lib/workroom/runtime.d.ts +142 -0
  480. package/lib/workroom/runtime.d.ts.map +1 -0
  481. package/lib/workroom/runtime.js +543 -0
  482. package/lib/workroom/runtime.js.map +1 -0
  483. package/lib/workroom/scheduler-priority-control.d.ts +35 -0
  484. package/lib/workroom/scheduler-priority-control.d.ts.map +1 -0
  485. package/lib/workroom/scheduler-priority-control.js +9 -0
  486. package/lib/workroom/scheduler-priority-control.js.map +1 -0
  487. package/lib/workroom/software-delivery-plan.d.ts +32 -0
  488. package/lib/workroom/software-delivery-plan.d.ts.map +1 -0
  489. package/lib/workroom/software-delivery-plan.js +60 -0
  490. package/lib/workroom/software-delivery-plan.js.map +1 -0
  491. package/lib/workroom/validate-catalog.d.ts +2 -0
  492. package/lib/workroom/validate-catalog.d.ts.map +1 -0
  493. package/lib/workroom/validate-catalog.js +230 -0
  494. package/lib/workroom/validate-catalog.js.map +1 -0
  495. package/lib/workroom/workflow-plan-builder.d.ts +88 -0
  496. package/lib/workroom/workflow-plan-builder.d.ts.map +1 -0
  497. package/lib/workroom/workflow-plan-builder.js +232 -0
  498. package/lib/workroom/workflow-plan-builder.js.map +1 -0
  499. package/lib/workroom/workroom-assignment-knowledge-context.d.ts +102 -0
  500. package/lib/workroom/workroom-assignment-knowledge-context.d.ts.map +1 -0
  501. package/lib/workroom/workroom-assignment-knowledge-context.js +127 -0
  502. package/lib/workroom/workroom-assignment-knowledge-context.js.map +1 -0
  503. package/lib/workroom/workroom-kernel.d.ts +157 -0
  504. package/lib/workroom/workroom-kernel.d.ts.map +1 -0
  505. package/lib/workroom/workroom-kernel.js +1526 -0
  506. package/lib/workroom/workroom-kernel.js.map +1 -0
  507. package/lib/workroom/workroom-preemption.d.ts +65 -0
  508. package/lib/workroom/workroom-preemption.d.ts.map +1 -0
  509. package/lib/workroom/workroom-preemption.js +213 -0
  510. package/lib/workroom/workroom-preemption.js.map +1 -0
  511. package/lib/workroom/workroom-run-control.d.ts +69 -0
  512. package/lib/workroom/workroom-run-control.d.ts.map +1 -0
  513. package/lib/workroom/workroom-run-control.js +144 -0
  514. package/lib/workroom/workroom-run-control.js.map +1 -0
  515. package/lib/workroom/workroom-scheduler-application.d.ts +43 -0
  516. package/lib/workroom/workroom-scheduler-application.d.ts.map +1 -0
  517. package/lib/workroom/workroom-scheduler-application.js +71 -0
  518. package/lib/workroom/workroom-scheduler-application.js.map +1 -0
  519. package/lib/workroom/workroom-scheduler.d.ts +135 -0
  520. package/lib/workroom/workroom-scheduler.d.ts.map +1 -0
  521. package/lib/workroom/workroom-scheduler.js +660 -0
  522. package/lib/workroom/workroom-scheduler.js.map +1 -0
  523. package/lib/workroom/workroom-task-report-store.d.ts +131 -0
  524. package/lib/workroom/workroom-task-report-store.d.ts.map +1 -0
  525. package/lib/workroom/workroom-task-report-store.js +528 -0
  526. package/lib/workroom/workroom-task-report-store.js.map +1 -0
  527. package/lib/workroom-runtime/database-overlay-pack-promotion-repository.d.ts +70 -0
  528. package/lib/workroom-runtime/database-overlay-pack-promotion-repository.d.ts.map +1 -0
  529. package/lib/workroom-runtime/database-overlay-pack-promotion-repository.js +203 -0
  530. package/lib/workroom-runtime/database-overlay-pack-promotion-repository.js.map +1 -0
  531. package/lib/workroom-runtime/github-actions-delivery-provider.d.ts +44 -0
  532. package/lib/workroom-runtime/github-actions-delivery-provider.d.ts.map +1 -0
  533. package/lib/workroom-runtime/github-actions-delivery-provider.js +246 -0
  534. package/lib/workroom-runtime/github-actions-delivery-provider.js.map +1 -0
  535. package/lib/workroom-runtime/github-exact-merge-gateway.d.ts +62 -0
  536. package/lib/workroom-runtime/github-exact-merge-gateway.d.ts.map +1 -0
  537. package/lib/workroom-runtime/github-exact-merge-gateway.js +79 -0
  538. package/lib/workroom-runtime/github-exact-merge-gateway.js.map +1 -0
  539. package/lib/workroom-runtime/github-workroom-capability.d.ts +15 -0
  540. package/lib/workroom-runtime/github-workroom-capability.d.ts.map +1 -0
  541. package/lib/workroom-runtime/github-workroom-capability.js +79 -0
  542. package/lib/workroom-runtime/github-workroom-capability.js.map +1 -0
  543. package/lib/workroom-runtime/self-delivery-project-composition.d.ts +25 -0
  544. package/lib/workroom-runtime/self-delivery-project-composition.d.ts.map +1 -0
  545. package/lib/workroom-runtime/self-delivery-project-composition.js +85 -0
  546. package/lib/workroom-runtime/self-delivery-project-composition.js.map +1 -0
  547. package/lib/workroom-runtime/self-delivery-project.d.ts +65 -0
  548. package/lib/workroom-runtime/self-delivery-project.d.ts.map +1 -0
  549. package/lib/workroom-runtime/self-delivery-project.js +140 -0
  550. package/lib/workroom-runtime/self-delivery-project.js.map +1 -0
  551. package/lib/workroom-runtime/workroom-acceptance-authority.d.ts +5 -0
  552. package/lib/workroom-runtime/workroom-acceptance-authority.d.ts.map +1 -0
  553. package/lib/workroom-runtime/workroom-acceptance-authority.js +14 -0
  554. package/lib/workroom-runtime/workroom-acceptance-authority.js.map +1 -0
  555. package/lib/workroom-runtime/workroom-acceptance-fact-providers.d.ts +233 -0
  556. package/lib/workroom-runtime/workroom-acceptance-fact-providers.d.ts.map +1 -0
  557. package/lib/workroom-runtime/workroom-acceptance-fact-providers.js +517 -0
  558. package/lib/workroom-runtime/workroom-acceptance-fact-providers.js.map +1 -0
  559. package/lib/workroom-runtime/workroom-acceptance-internal-providers.d.ts +139 -0
  560. package/lib/workroom-runtime/workroom-acceptance-internal-providers.d.ts.map +1 -0
  561. package/lib/workroom-runtime/workroom-acceptance-internal-providers.js +435 -0
  562. package/lib/workroom-runtime/workroom-acceptance-internal-providers.js.map +1 -0
  563. package/lib/workroom-runtime/workroom-acceptance-policy.d.ts +4 -0
  564. package/lib/workroom-runtime/workroom-acceptance-policy.d.ts.map +1 -0
  565. package/lib/workroom-runtime/workroom-acceptance-policy.js +20 -0
  566. package/lib/workroom-runtime/workroom-acceptance-policy.js.map +1 -0
  567. package/lib/workroom-runtime/workroom-acceptance-production-composition.d.ts +177 -0
  568. package/lib/workroom-runtime/workroom-acceptance-production-composition.d.ts.map +1 -0
  569. package/lib/workroom-runtime/workroom-acceptance-production-composition.js +794 -0
  570. package/lib/workroom-runtime/workroom-acceptance-production-composition.js.map +1 -0
  571. package/lib/workroom-runtime/workroom-acceptance-provider-composition.d.ts +189 -0
  572. package/lib/workroom-runtime/workroom-acceptance-provider-composition.d.ts.map +1 -0
  573. package/lib/workroom-runtime/workroom-acceptance-provider-composition.js +590 -0
  574. package/lib/workroom-runtime/workroom-acceptance-provider-composition.js.map +1 -0
  575. package/lib/workroom-runtime/workroom-accepted-source-runtime.d.ts +75 -0
  576. package/lib/workroom-runtime/workroom-accepted-source-runtime.d.ts.map +1 -0
  577. package/lib/workroom-runtime/workroom-accepted-source-runtime.js +267 -0
  578. package/lib/workroom-runtime/workroom-accepted-source-runtime.js.map +1 -0
  579. package/lib/workroom-runtime/workroom-assignment-authority-grant-runtime.d.ts +42 -0
  580. package/lib/workroom-runtime/workroom-assignment-authority-grant-runtime.d.ts.map +1 -0
  581. package/lib/workroom-runtime/workroom-assignment-authority-grant-runtime.js +90 -0
  582. package/lib/workroom-runtime/workroom-assignment-authority-grant-runtime.js.map +1 -0
  583. package/lib/workroom-runtime/workroom-assignment-authority-provider.d.ts +84 -0
  584. package/lib/workroom-runtime/workroom-assignment-authority-provider.d.ts.map +1 -0
  585. package/lib/workroom-runtime/workroom-assignment-authority-provider.js +494 -0
  586. package/lib/workroom-runtime/workroom-assignment-authority-provider.js.map +1 -0
  587. package/lib/workroom-runtime/workroom-assignment-knowledge-composition.d.ts +58 -0
  588. package/lib/workroom-runtime/workroom-assignment-knowledge-composition.d.ts.map +1 -0
  589. package/lib/workroom-runtime/workroom-assignment-knowledge-composition.js +218 -0
  590. package/lib/workroom-runtime/workroom-assignment-knowledge-composition.js.map +1 -0
  591. package/lib/workroom-runtime/workroom-bot-identity.d.ts +22 -0
  592. package/lib/workroom-runtime/workroom-bot-identity.d.ts.map +1 -0
  593. package/lib/workroom-runtime/workroom-bot-identity.js +53 -0
  594. package/lib/workroom-runtime/workroom-bot-identity.js.map +1 -0
  595. package/lib/workroom-runtime/workroom-capability-realization.d.ts +23 -0
  596. package/lib/workroom-runtime/workroom-capability-realization.d.ts.map +1 -0
  597. package/lib/workroom-runtime/workroom-capability-realization.js +74 -0
  598. package/lib/workroom-runtime/workroom-capability-realization.js.map +1 -0
  599. package/lib/workroom-runtime/workroom-data-governance-authority-writer.d.ts +49 -0
  600. package/lib/workroom-runtime/workroom-data-governance-authority-writer.d.ts.map +1 -0
  601. package/lib/workroom-runtime/workroom-data-governance-authority-writer.js +140 -0
  602. package/lib/workroom-runtime/workroom-data-governance-authority-writer.js.map +1 -0
  603. package/lib/workroom-runtime/workroom-data-governance-bootstrap.d.ts +27 -0
  604. package/lib/workroom-runtime/workroom-data-governance-bootstrap.d.ts.map +1 -0
  605. package/lib/workroom-runtime/workroom-data-governance-bootstrap.js +324 -0
  606. package/lib/workroom-runtime/workroom-data-governance-bootstrap.js.map +1 -0
  607. package/lib/workroom-runtime/workroom-data-governance-composition.d.ts +28 -0
  608. package/lib/workroom-runtime/workroom-data-governance-composition.d.ts.map +1 -0
  609. package/lib/workroom-runtime/workroom-data-governance-composition.js +41 -0
  610. package/lib/workroom-runtime/workroom-data-governance-composition.js.map +1 -0
  611. package/lib/workroom-runtime/workroom-data-governance-root-provider.d.ts +51 -0
  612. package/lib/workroom-runtime/workroom-data-governance-root-provider.d.ts.map +1 -0
  613. package/lib/workroom-runtime/workroom-data-governance-root-provider.js +66 -0
  614. package/lib/workroom-runtime/workroom-data-governance-root-provider.js.map +1 -0
  615. package/lib/workroom-runtime/workroom-data-governance-runtime.d.ts +100 -0
  616. package/lib/workroom-runtime/workroom-data-governance-runtime.d.ts.map +1 -0
  617. package/lib/workroom-runtime/workroom-data-governance-runtime.js +1356 -0
  618. package/lib/workroom-runtime/workroom-data-governance-runtime.js.map +1 -0
  619. package/lib/workroom-runtime/workroom-data-governance-storage.d.ts +66 -0
  620. package/lib/workroom-runtime/workroom-data-governance-storage.d.ts.map +1 -0
  621. package/lib/workroom-runtime/workroom-data-governance-storage.js +159 -0
  622. package/lib/workroom-runtime/workroom-data-governance-storage.js.map +1 -0
  623. package/lib/workroom-runtime/workroom-data-lifecycle-composition.d.ts +37 -0
  624. package/lib/workroom-runtime/workroom-data-lifecycle-composition.d.ts.map +1 -0
  625. package/lib/workroom-runtime/workroom-data-lifecycle-composition.js +131 -0
  626. package/lib/workroom-runtime/workroom-data-lifecycle-composition.js.map +1 -0
  627. package/lib/workroom-runtime/workroom-data-lifecycle-console.d.ts +238 -0
  628. package/lib/workroom-runtime/workroom-data-lifecycle-console.d.ts.map +1 -0
  629. package/lib/workroom-runtime/workroom-data-lifecycle-console.js +495 -0
  630. package/lib/workroom-runtime/workroom-data-lifecycle-console.js.map +1 -0
  631. package/lib/workroom-runtime/workroom-data-lifecycle-human-ingress.d.ts +15 -0
  632. package/lib/workroom-runtime/workroom-data-lifecycle-human-ingress.d.ts.map +1 -0
  633. package/lib/workroom-runtime/workroom-data-lifecycle-human-ingress.js +119 -0
  634. package/lib/workroom-runtime/workroom-data-lifecycle-human-ingress.js.map +1 -0
  635. package/lib/workroom-runtime/workroom-database-models.d.ts +4 -0
  636. package/lib/workroom-runtime/workroom-database-models.d.ts.map +1 -0
  637. package/lib/workroom-runtime/workroom-database-models.js +34 -0
  638. package/lib/workroom-runtime/workroom-database-models.js.map +1 -0
  639. package/lib/workroom-runtime/workroom-database-storage.d.ts +14 -0
  640. package/lib/workroom-runtime/workroom-database-storage.d.ts.map +1 -0
  641. package/lib/workroom-runtime/workroom-database-storage.js +30 -0
  642. package/lib/workroom-runtime/workroom-database-storage.js.map +1 -0
  643. package/lib/workroom-runtime/workroom-delivery-gateway.d.ts +96 -0
  644. package/lib/workroom-runtime/workroom-delivery-gateway.d.ts.map +1 -0
  645. package/lib/workroom-runtime/workroom-delivery-gateway.js +129 -0
  646. package/lib/workroom-runtime/workroom-delivery-gateway.js.map +1 -0
  647. package/lib/workroom-runtime/workroom-dynamic-planning-provider.d.ts +142 -0
  648. package/lib/workroom-runtime/workroom-dynamic-planning-provider.d.ts.map +1 -0
  649. package/lib/workroom-runtime/workroom-dynamic-planning-provider.js +302 -0
  650. package/lib/workroom-runtime/workroom-dynamic-planning-provider.js.map +1 -0
  651. package/lib/workroom-runtime/workroom-dynamic-planning.d.ts +4 -0
  652. package/lib/workroom-runtime/workroom-dynamic-planning.d.ts.map +1 -0
  653. package/lib/workroom-runtime/workroom-dynamic-planning.js +13 -0
  654. package/lib/workroom-runtime/workroom-dynamic-planning.js.map +1 -0
  655. package/lib/workroom-runtime/workroom-effect-composition.d.ts +37 -0
  656. package/lib/workroom-runtime/workroom-effect-composition.d.ts.map +1 -0
  657. package/lib/workroom-runtime/workroom-effect-composition.js +80 -0
  658. package/lib/workroom-runtime/workroom-effect-composition.js.map +1 -0
  659. package/lib/workroom-runtime/workroom-effect-production.d.ts +138 -0
  660. package/lib/workroom-runtime/workroom-effect-production.d.ts.map +1 -0
  661. package/lib/workroom-runtime/workroom-effect-production.js +291 -0
  662. package/lib/workroom-runtime/workroom-effect-production.js.map +1 -0
  663. package/lib/workroom-runtime/workroom-effect-runtime.d.ts +56 -0
  664. package/lib/workroom-runtime/workroom-effect-runtime.d.ts.map +1 -0
  665. package/lib/workroom-runtime/workroom-effect-runtime.js +239 -0
  666. package/lib/workroom-runtime/workroom-effect-runtime.js.map +1 -0
  667. package/lib/workroom-runtime/workroom-governed-dispatch-composition.d.ts +32 -0
  668. package/lib/workroom-runtime/workroom-governed-dispatch-composition.d.ts.map +1 -0
  669. package/lib/workroom-runtime/workroom-governed-dispatch-composition.js +43 -0
  670. package/lib/workroom-runtime/workroom-governed-dispatch-composition.js.map +1 -0
  671. package/lib/workroom-runtime/workroom-host-port.d.ts +113 -0
  672. package/lib/workroom-runtime/workroom-host-port.d.ts.map +1 -0
  673. package/lib/workroom-runtime/workroom-host-port.js +3 -0
  674. package/lib/workroom-runtime/workroom-host-port.js.map +1 -0
  675. package/lib/workroom-runtime/workroom-journal-payload-composition.d.ts +16 -0
  676. package/lib/workroom-runtime/workroom-journal-payload-composition.d.ts.map +1 -0
  677. package/lib/workroom-runtime/workroom-journal-payload-composition.js +69 -0
  678. package/lib/workroom-runtime/workroom-journal-payload-composition.js.map +1 -0
  679. package/lib/workroom-runtime/workroom-local-agent-core-adapter.d.ts +16 -0
  680. package/lib/workroom-runtime/workroom-local-agent-core-adapter.d.ts.map +1 -0
  681. package/lib/workroom-runtime/workroom-local-agent-core-adapter.js +100 -0
  682. package/lib/workroom-runtime/workroom-local-agent-core-adapter.js.map +1 -0
  683. package/lib/workroom-runtime/workroom-local-agent-loop.d.ts +91 -0
  684. package/lib/workroom-runtime/workroom-local-agent-loop.d.ts.map +1 -0
  685. package/lib/workroom-runtime/workroom-local-agent-loop.js +313 -0
  686. package/lib/workroom-runtime/workroom-local-agent-loop.js.map +1 -0
  687. package/lib/workroom-runtime/workroom-local-assignment-authority.d.ts +5 -0
  688. package/lib/workroom-runtime/workroom-local-assignment-authority.d.ts.map +1 -0
  689. package/lib/workroom-runtime/workroom-local-assignment-authority.js +16 -0
  690. package/lib/workroom-runtime/workroom-local-assignment-authority.js.map +1 -0
  691. package/lib/workroom-runtime/workroom-local-assignment-executor.d.ts +60 -0
  692. package/lib/workroom-runtime/workroom-local-assignment-executor.d.ts.map +1 -0
  693. package/lib/workroom-runtime/workroom-local-assignment-executor.js +197 -0
  694. package/lib/workroom-runtime/workroom-local-assignment-executor.js.map +1 -0
  695. package/lib/workroom-runtime/workroom-local-assignment-runtime.d.ts +34 -0
  696. package/lib/workroom-runtime/workroom-local-assignment-runtime.d.ts.map +1 -0
  697. package/lib/workroom-runtime/workroom-local-assignment-runtime.js +235 -0
  698. package/lib/workroom-runtime/workroom-local-assignment-runtime.js.map +1 -0
  699. package/lib/workroom-runtime/workroom-local-assignment-supply.d.ts +39 -0
  700. package/lib/workroom-runtime/workroom-local-assignment-supply.d.ts.map +1 -0
  701. package/lib/workroom-runtime/workroom-local-assignment-supply.js +107 -0
  702. package/lib/workroom-runtime/workroom-local-assignment-supply.js.map +1 -0
  703. package/lib/workroom-runtime/workroom-overlay-pack-promotion.d.ts +145 -0
  704. package/lib/workroom-runtime/workroom-overlay-pack-promotion.d.ts.map +1 -0
  705. package/lib/workroom-runtime/workroom-overlay-pack-promotion.js +516 -0
  706. package/lib/workroom-runtime/workroom-overlay-pack-promotion.js.map +1 -0
  707. package/lib/workroom-runtime/workroom-payload-processor-recall.d.ts +91 -0
  708. package/lib/workroom-runtime/workroom-payload-processor-recall.d.ts.map +1 -0
  709. package/lib/workroom-runtime/workroom-payload-processor-recall.js +189 -0
  710. package/lib/workroom-runtime/workroom-payload-processor-recall.js.map +1 -0
  711. package/lib/workroom-runtime/workroom-plan-gate-authority.d.ts +7 -0
  712. package/lib/workroom-runtime/workroom-plan-gate-authority.d.ts.map +1 -0
  713. package/lib/workroom-runtime/workroom-plan-gate-authority.js +40 -0
  714. package/lib/workroom-runtime/workroom-plan-gate-authority.js.map +1 -0
  715. package/lib/workroom-runtime/workroom-portfolio-capacity.d.ts +132 -0
  716. package/lib/workroom-runtime/workroom-portfolio-capacity.d.ts.map +1 -0
  717. package/lib/workroom-runtime/workroom-portfolio-capacity.js +189 -0
  718. package/lib/workroom-runtime/workroom-portfolio-capacity.js.map +1 -0
  719. package/lib/workroom-runtime/workroom-portfolio-checkpoint-ack.d.ts +38 -0
  720. package/lib/workroom-runtime/workroom-portfolio-checkpoint-ack.d.ts.map +1 -0
  721. package/lib/workroom-runtime/workroom-portfolio-checkpoint-ack.js +103 -0
  722. package/lib/workroom-runtime/workroom-portfolio-checkpoint-ack.js.map +1 -0
  723. package/lib/workroom-runtime/workroom-portfolio-control-composition.d.ts +30 -0
  724. package/lib/workroom-runtime/workroom-portfolio-control-composition.d.ts.map +1 -0
  725. package/lib/workroom-runtime/workroom-portfolio-control-composition.js +103 -0
  726. package/lib/workroom-runtime/workroom-portfolio-control-composition.js.map +1 -0
  727. package/lib/workroom-runtime/workroom-portfolio-control-runtime.d.ts +42 -0
  728. package/lib/workroom-runtime/workroom-portfolio-control-runtime.d.ts.map +1 -0
  729. package/lib/workroom-runtime/workroom-portfolio-control-runtime.js +209 -0
  730. package/lib/workroom-runtime/workroom-portfolio-control-runtime.js.map +1 -0
  731. package/lib/workroom-runtime/workroom-portfolio-grant-assignment.d.ts +141 -0
  732. package/lib/workroom-runtime/workroom-portfolio-grant-assignment.d.ts.map +1 -0
  733. package/lib/workroom-runtime/workroom-portfolio-grant-assignment.js +334 -0
  734. package/lib/workroom-runtime/workroom-portfolio-grant-assignment.js.map +1 -0
  735. package/lib/workroom-runtime/workroom-portfolio-kernel-authority.d.ts +23 -0
  736. package/lib/workroom-runtime/workroom-portfolio-kernel-authority.d.ts.map +1 -0
  737. package/lib/workroom-runtime/workroom-portfolio-kernel-authority.js +88 -0
  738. package/lib/workroom-runtime/workroom-portfolio-kernel-authority.js.map +1 -0
  739. package/lib/workroom-runtime/workroom-portfolio-sponsor.d.ts +96 -0
  740. package/lib/workroom-runtime/workroom-portfolio-sponsor.d.ts.map +1 -0
  741. package/lib/workroom-runtime/workroom-portfolio-sponsor.js +313 -0
  742. package/lib/workroom-runtime/workroom-portfolio-sponsor.js.map +1 -0
  743. package/lib/workroom-runtime/workroom-preemption-runtime.d.ts +57 -0
  744. package/lib/workroom-runtime/workroom-preemption-runtime.d.ts.map +1 -0
  745. package/lib/workroom-runtime/workroom-preemption-runtime.js +163 -0
  746. package/lib/workroom-runtime/workroom-preemption-runtime.js.map +1 -0
  747. package/lib/workroom-runtime/workroom-priority-authority.d.ts +19 -0
  748. package/lib/workroom-runtime/workroom-priority-authority.d.ts.map +1 -0
  749. package/lib/workroom-runtime/workroom-priority-authority.js +76 -0
  750. package/lib/workroom-runtime/workroom-priority-authority.js.map +1 -0
  751. package/lib/workroom-runtime/workroom-profile-authority-composition.d.ts +61 -0
  752. package/lib/workroom-runtime/workroom-profile-authority-composition.d.ts.map +1 -0
  753. package/lib/workroom-runtime/workroom-profile-authority-composition.js +232 -0
  754. package/lib/workroom-runtime/workroom-profile-authority-composition.js.map +1 -0
  755. package/lib/workroom-runtime/workroom-profile-authority-runtime.d.ts +229 -0
  756. package/lib/workroom-runtime/workroom-profile-authority-runtime.d.ts.map +1 -0
  757. package/lib/workroom-runtime/workroom-profile-authority-runtime.js +1133 -0
  758. package/lib/workroom-runtime/workroom-profile-authority-runtime.js.map +1 -0
  759. package/lib/workroom-runtime/workroom-projection-outbound.d.ts +10 -0
  760. package/lib/workroom-runtime/workroom-projection-outbound.d.ts.map +1 -0
  761. package/lib/workroom-runtime/workroom-projection-outbound.js +35 -0
  762. package/lib/workroom-runtime/workroom-projection-outbound.js.map +1 -0
  763. package/lib/workroom-runtime/workroom-projection-runtime.d.ts +93 -0
  764. package/lib/workroom-runtime/workroom-projection-runtime.d.ts.map +1 -0
  765. package/lib/workroom-runtime/workroom-projection-runtime.js +476 -0
  766. package/lib/workroom-runtime/workroom-projection-runtime.js.map +1 -0
  767. package/lib/workroom-runtime/workroom-remote-assignment-authority.d.ts +9 -0
  768. package/lib/workroom-runtime/workroom-remote-assignment-authority.d.ts.map +1 -0
  769. package/lib/workroom-runtime/workroom-remote-assignment-authority.js +20 -0
  770. package/lib/workroom-runtime/workroom-remote-assignment-authority.js.map +1 -0
  771. package/lib/workroom-runtime/workroom-remote-callback-runtime.d.ts +38 -0
  772. package/lib/workroom-runtime/workroom-remote-callback-runtime.d.ts.map +1 -0
  773. package/lib/workroom-runtime/workroom-remote-callback-runtime.js +80 -0
  774. package/lib/workroom-runtime/workroom-remote-callback-runtime.js.map +1 -0
  775. package/lib/workroom-runtime/workroom-remote-executor.d.ts +9 -0
  776. package/lib/workroom-runtime/workroom-remote-executor.d.ts.map +1 -0
  777. package/lib/workroom-runtime/workroom-remote-executor.js +23 -0
  778. package/lib/workroom-runtime/workroom-remote-executor.js.map +1 -0
  779. package/lib/workroom-runtime/workroom-reviewer-authority-runtime.d.ts +72 -0
  780. package/lib/workroom-runtime/workroom-reviewer-authority-runtime.d.ts.map +1 -0
  781. package/lib/workroom-runtime/workroom-reviewer-authority-runtime.js +142 -0
  782. package/lib/workroom-runtime/workroom-reviewer-authority-runtime.js.map +1 -0
  783. package/lib/workroom-runtime/workroom-risk-acceptance-runtime.d.ts +112 -0
  784. package/lib/workroom-runtime/workroom-risk-acceptance-runtime.d.ts.map +1 -0
  785. package/lib/workroom-runtime/workroom-risk-acceptance-runtime.js +376 -0
  786. package/lib/workroom-runtime/workroom-risk-acceptance-runtime.js.map +1 -0
  787. package/lib/workroom-runtime/workroom-run-profile-pin-authority.d.ts +42 -0
  788. package/lib/workroom-runtime/workroom-run-profile-pin-authority.d.ts.map +1 -0
  789. package/lib/workroom-runtime/workroom-run-profile-pin-authority.js +125 -0
  790. package/lib/workroom-runtime/workroom-run-profile-pin-authority.js.map +1 -0
  791. package/lib/workroom-runtime/workroom-scheduler-portfolio-composition.d.ts +32 -0
  792. package/lib/workroom-runtime/workroom-scheduler-portfolio-composition.d.ts.map +1 -0
  793. package/lib/workroom-runtime/workroom-scheduler-portfolio-composition.js +83 -0
  794. package/lib/workroom-runtime/workroom-scheduler-portfolio-composition.js.map +1 -0
  795. package/lib/workroom-runtime/workroom-scheduler-portfolio-contract.d.ts +16 -0
  796. package/lib/workroom-runtime/workroom-scheduler-portfolio-contract.d.ts.map +1 -0
  797. package/lib/workroom-runtime/workroom-scheduler-portfolio-contract.js +49 -0
  798. package/lib/workroom-runtime/workroom-scheduler-portfolio-contract.js.map +1 -0
  799. package/lib/workroom-runtime/workroom-scheduler-portfolio-request-authority.d.ts +66 -0
  800. package/lib/workroom-runtime/workroom-scheduler-portfolio-request-authority.d.ts.map +1 -0
  801. package/lib/workroom-runtime/workroom-scheduler-portfolio-request-authority.js +250 -0
  802. package/lib/workroom-runtime/workroom-scheduler-portfolio-request-authority.js.map +1 -0
  803. package/lib/workroom-runtime/workroom-scheduler-portfolio-supply.d.ts +42 -0
  804. package/lib/workroom-runtime/workroom-scheduler-portfolio-supply.d.ts.map +1 -0
  805. package/lib/workroom-runtime/workroom-scheduler-portfolio-supply.js +141 -0
  806. package/lib/workroom-runtime/workroom-scheduler-portfolio-supply.js.map +1 -0
  807. package/lib/workroom-runtime/workroom-scheduler-route-registry.d.ts +27 -0
  808. package/lib/workroom-runtime/workroom-scheduler-route-registry.d.ts.map +1 -0
  809. package/lib/workroom-runtime/workroom-scheduler-route-registry.js +136 -0
  810. package/lib/workroom-runtime/workroom-scheduler-route-registry.js.map +1 -0
  811. package/lib/workroom-runtime/workroom-scheduler-runtime.d.ts +84 -0
  812. package/lib/workroom-runtime/workroom-scheduler-runtime.d.ts.map +1 -0
  813. package/lib/workroom-runtime/workroom-scheduler-runtime.js +236 -0
  814. package/lib/workroom-runtime/workroom-scheduler-runtime.js.map +1 -0
  815. package/package.json +55 -6
@@ -0,0 +1,91 @@
1
+ import type { OutboundMessageService } from '@zhin.js/core/runtime';
2
+ /**
3
+ * Per-account send rate limiter for Room output (personal QQ accounts can be risk-controlled by the platform).
4
+ *
5
+ * Two forms over ONE shared instance (`createRoomSendLimiter`), both booking into the same per-account map:
6
+ * - `send(request)`: a decorator over `Pick<OutboundMessageService, 'send'>`; once a slot is granted it still
7
+ * calls the wrapped `send`.
8
+ * - `outboundMiddleware()`: an outbound middleware definition (`{ target: 'outbound', handle(ctx, next) }`);
9
+ * books a slot, sleeps, then `await next()`. Wrap it as `defineMiddleware(limiter.outboundMiddleware())`
10
+ * to get the feature brand. `middleware(envelope, next)` is the low-level form underneath it.
11
+ * Either way the normal outbound chain (OutboundRenderer -> outbound middleware -> Endpoint) is never bypassed:
12
+ * the limiter only delays or refuses before `inner.send` / `next()`.
13
+ *
14
+ * C1 MUST make EVERY outbound of a member Endpoint use this same instance (as an outbound middleware, or by
15
+ * wrapping the shared OutboundMessageService), keyed by account. Wrapping only RoomBus's `outbound` under-counts
16
+ * `$reply` and generation output of the same account, so the account-level risk-control protection would only
17
+ * be partial. It is not installed globally by B4.
18
+ *
19
+ * One outbound path must use exactly ONE form (middleware, OR `send` wrapping the OutboundMessageService).
20
+ * Using both on the same path books the same send twice and double-counts it. Share the instance across
21
+ * DIFFERENT paths of the same account, not across two forms of one path.
22
+ */
23
+ type DeliveryReceipt = Awaited<ReturnType<OutboundMessageService['send']>>;
24
+ export interface RoomSendLimit {
25
+ readonly maxPerMinute?: number;
26
+ readonly minIntervalMs?: number;
27
+ }
28
+ export interface RoomSendLimiterOptions {
29
+ /** Wrapped service for the `send` form; without it `send` refuses. Not needed for the `middleware` form. */
30
+ readonly inner?: Pick<OutboundMessageService, 'send'>;
31
+ /** Bot account of an endpoint (e.g. PeerRegistry.selfOf). Falls back to the endpoint id when unknown. */
32
+ readonly accountOf?: (endpointId: string) => string | undefined;
33
+ readonly now?: () => number;
34
+ readonly sleep?: (ms: number) => Promise<void>;
35
+ /** Default 20. */
36
+ readonly maxPerMinute?: number;
37
+ /** Minimum gap between two sends of one account. Default 1000. */
38
+ readonly minIntervalMs?: number;
39
+ /** A send that would have to wait longer is rejected instead. Default 5000. */
40
+ readonly maxWaitMs?: number;
41
+ /** Overrides keyed by account (or `endpoint:<id>` for unresolved accounts). */
42
+ readonly perAccount?: Readonly<Record<string, RoomSendLimit>>;
43
+ readonly logger?: {
44
+ warn(message: string): void;
45
+ };
46
+ }
47
+ export interface RateLimitedOutboundOptions extends RoomSendLimiterOptions {
48
+ readonly inner: Pick<OutboundMessageService, 'send'>;
49
+ }
50
+ /** Structural outbound envelope: only what the limiter reads, so no core middleware type is imported. */
51
+ export interface RoomSendEnvelope {
52
+ readonly conversation: {
53
+ readonly endpoint: {
54
+ readonly id: string;
55
+ };
56
+ };
57
+ }
58
+ export declare class RoomSendRateLimitedError extends Error {
59
+ readonly code: string;
60
+ readonly retryable: boolean;
61
+ constructor(code: string, message: string, retryable: boolean);
62
+ }
63
+ /** Structural subset of the core outbound middleware context: the envelope lives in `input`. */
64
+ export interface RoomOutboundMiddlewareContext {
65
+ readonly input: RoomSendEnvelope;
66
+ }
67
+ /** Structural outbound middleware definition; `phase` / `order` default in `defineMiddleware`. */
68
+ export interface RoomOutboundMiddlewareDefinition {
69
+ readonly target: 'outbound';
70
+ handle(context: RoomOutboundMiddlewareContext, next: () => Promise<void>): Promise<void>;
71
+ }
72
+ export interface RoomSendLimiter {
73
+ send(request: Parameters<OutboundMessageService['send']>[0]): Promise<DeliveryReceipt>;
74
+ /**
75
+ * Low-level: takes the ENVELOPE, not the core middleware context. Passing the context makes `reserve` fail
76
+ * closed on every send. Use `outboundMiddleware()` in plugins. Adaptation by hand:
77
+ * `handle: (ctx, next) => limiter.middleware(ctx.input, next)`.
78
+ * Throws RoomSendRateLimitedError when refused.
79
+ */
80
+ middleware(envelope: RoomSendEnvelope, next: () => Promise<void>): Promise<void>;
81
+ /**
82
+ * Outbound middleware definition for plugins: `defineMiddleware(limiter.outboundMiddleware())`.
83
+ * Do not combine with `send` on the same outbound path (double counting).
84
+ */
85
+ outboundMiddleware(): RoomOutboundMiddlewareDefinition;
86
+ }
87
+ export declare function createRoomSendLimiter(options: RoomSendLimiterOptions): RoomSendLimiter;
88
+ /** Tests / standalone use only. Production (C1) uses the shared `createRoomSendLimiter` instance. */
89
+ export declare function createRateLimitedOutbound(options: RateLimitedOutboundOptions): Pick<OutboundMessageService, 'send'>;
90
+ export {};
91
+ //# sourceMappingURL=room-send-limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-send-limiter.d.ts","sourceRoot":"","sources":["../../src/room/room-send-limiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ const WINDOW_MS = 60_000;
2
+ const MAX_KEYS = 1024;
3
+ export class RoomSendRateLimitedError extends Error {
4
+ code;
5
+ retryable;
6
+ constructor(code, message, retryable) {
7
+ super(message);
8
+ this.code = code;
9
+ this.retryable = retryable;
10
+ this.name = 'RoomSendRateLimitedError';
11
+ }
12
+ }
13
+ function positive(name, value, fallback, allowZero = false) {
14
+ const resolved = value ?? fallback;
15
+ if (!Number.isSafeInteger(resolved) || resolved < (allowZero ? 0 : 1)) {
16
+ throw new RangeError(`Room send limiter option ${name} must be a ${allowZero ? 'non-negative' : 'positive'} integer, got ${String(resolved)}`);
17
+ }
18
+ return resolved;
19
+ }
20
+ const rejected = (code, message, retryable) => Object.freeze({ status: 'rejected', failure: Object.freeze({ code, message, retryable }) });
21
+ export function createRoomSendLimiter(options) {
22
+ const { inner, logger } = options;
23
+ const now = options.now ?? (() => Date.now());
24
+ const sleep = options.sleep ?? ((ms) => new Promise((resolve) => { setTimeout(resolve, ms); }));
25
+ const maxPerMinute = positive('maxPerMinute', options.maxPerMinute, 20);
26
+ const minIntervalMs = positive('minIntervalMs', options.minIntervalMs, 1000, true);
27
+ const maxWaitMs = positive('maxWaitMs', options.maxWaitMs, 5000, true);
28
+ const overrides = new Map();
29
+ for (const [key, limit] of Object.entries(options.perAccount ?? {})) {
30
+ overrides.set(key, {
31
+ maxPerMinute: positive(`perAccount.${key}.maxPerMinute`, limit.maxPerMinute, maxPerMinute),
32
+ minIntervalMs: positive(`perAccount.${key}.minIntervalMs`, limit.minIntervalMs, minIntervalMs, true),
33
+ });
34
+ }
35
+ const bookings = new Map();
36
+ const sweep = (at) => {
37
+ for (const [key, booking] of bookings) {
38
+ if (booking.last + WINDOW_MS <= at)
39
+ bookings.delete(key);
40
+ }
41
+ };
42
+ /** Synchronous so that arrival order equals booking order. Returns the wait, or a rejection receipt. */
43
+ const reserve = (request) => {
44
+ try {
45
+ const endpointId = request.conversation.endpoint.id;
46
+ if (typeof endpointId !== 'string' || endpointId === '')
47
+ throw new TypeError('request has no endpoint id');
48
+ const key = options.accountOf?.(endpointId) || `endpoint:${endpointId}`;
49
+ const limit = overrides.get(key) ?? { maxPerMinute, minIntervalMs };
50
+ const at = now();
51
+ if (!Number.isFinite(at))
52
+ throw new TypeError('clock returned a non-finite value');
53
+ let booking = bookings.get(key);
54
+ if (booking && booking.last + WINDOW_MS <= at) {
55
+ bookings.delete(key);
56
+ booking = undefined;
57
+ }
58
+ if (!booking) {
59
+ if (bookings.size >= MAX_KEYS)
60
+ sweep(at);
61
+ if (bookings.size >= MAX_KEYS) {
62
+ return rejected('room_send_guard_error', `too many tracked send accounts (${MAX_KEYS})`, true);
63
+ }
64
+ }
65
+ const slots = booking?.slots ?? [];
66
+ let slot = Math.max(at, booking ? booking.last + limit.minIntervalMs : at);
67
+ if (slots.length >= limit.maxPerMinute) {
68
+ slot = Math.max(slot, slots[slots.length - limit.maxPerMinute] + WINDOW_MS);
69
+ }
70
+ const wait = slot - at;
71
+ if (wait > maxWaitMs) {
72
+ return rejected('room_send_rate_limited', `account ${key} send rate limit reached; retry in ${wait} ms`, true);
73
+ }
74
+ // Booked before sending: platform risk control counts attempts, so failures count too.
75
+ slots.push(slot);
76
+ while (slots.length > limit.maxPerMinute)
77
+ slots.shift();
78
+ bookings.set(key, { slots, last: slot });
79
+ return wait;
80
+ }
81
+ catch (error) {
82
+ const message = error instanceof Error ? error.message : String(error);
83
+ logger?.warn(`room send limiter failed closed: ${message}`);
84
+ return rejected('room_send_guard_error', message, false);
85
+ }
86
+ };
87
+ const middleware = async (envelope, next) => {
88
+ const wait = reserve(envelope);
89
+ if (typeof wait !== 'number') {
90
+ logger?.warn(`room send refused: ${wait.failure?.code ?? wait.status}`);
91
+ throw new RoomSendRateLimitedError(wait.failure?.code ?? 'room_send_guard_error', wait.failure?.message ?? 'send refused', wait.failure?.retryable ?? false);
92
+ }
93
+ if (wait > 0)
94
+ await sleep(wait);
95
+ await next();
96
+ };
97
+ return Object.freeze({
98
+ async send(request) {
99
+ if (!inner)
100
+ return rejected('room_send_guard_error', 'send limiter has no inner service', false);
101
+ const wait = reserve(request);
102
+ if (typeof wait !== 'number') {
103
+ logger?.warn(`room send refused: ${wait.failure?.code ?? wait.status}`);
104
+ return wait;
105
+ }
106
+ if (wait > 0)
107
+ await sleep(wait);
108
+ return inner.send(request);
109
+ },
110
+ middleware,
111
+ outboundMiddleware() {
112
+ return Object.freeze({
113
+ target: 'outbound',
114
+ handle: (context, next) => middleware(context.input, next),
115
+ });
116
+ },
117
+ });
118
+ }
119
+ /** Tests / standalone use only. Production (C1) uses the shared `createRoomSendLimiter` instance. */
120
+ export function createRateLimitedOutbound(options) {
121
+ const limiter = createRoomSendLimiter(options);
122
+ return Object.freeze({ send: (request) => limiter.send(request) });
123
+ }
124
+ //# sourceMappingURL=room-send-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-send-limiter.js","sourceRoot":"","sources":["../../src/room/room-send-limiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { RoomTaskCommand } from './room-task.js';
2
+ import type { GuardActor, RoomGuards } from './room-guards.js';
3
+ import type { RoomDefinition } from './room-definition.js';
4
+ import type { RoomEntry } from './room-registry.js';
5
+ export type RoomTaskAuthorizer = (roomId: string, command: RoomTaskCommand) => string | undefined;
6
+ export type RoomAssignCommand = Extract<RoomTaskCommand, {
7
+ type: 'assign';
8
+ }>;
9
+ export interface RoomTaskAuthorizerOptions {
10
+ readonly guards: Pick<RoomGuards, 'authorizeSensitive'>;
11
+ /** Resolves the `by` of a command to the actor behind it; undefined means unknown, which is refused. */
12
+ readonly actorOf: (by: string) => GuardActor | undefined;
13
+ /**
14
+ * Role check for `assign` (lead / coordinator only); return a refusal reason or undefined to allow.
15
+ * Optional, but when absent every `assign` is refused (fail-closed).
16
+ */
17
+ readonly authorizeAssign?: (roomId: string, command: RoomAssignCommand) => string | undefined;
18
+ /**
19
+ * Composed after the built-in checks pass. Use `createRoomRoleAuthorizer(...)` to enforce the role /
20
+ * membership checks for create / start / block / complete / handoff (and `handoffTo`); when absent those
21
+ * commands are not checked here (not a safe default).
22
+ */
23
+ readonly next?: RoomTaskAuthorizer;
24
+ }
25
+ export declare function createRoomTaskAuthorizer(options: RoomTaskAuthorizerOptions): RoomTaskAuthorizer;
26
+ export interface RoomRoleAuthorizerOptions {
27
+ /** The Room definition (preferred) or a registry entry; membership is indexed from it. */
28
+ readonly room: RoomDefinition | RoomEntry;
29
+ /** When given, commands for any other room id are refused (`unknown room`). */
30
+ readonly roomId?: string;
31
+ /**
32
+ * Resolves `by` to an actor; used only for `create`, where a human may start a Task. Without it, a `by` with
33
+ * the `human:` prefix counts as a human and every other `by` must be a member.
34
+ */
35
+ readonly actorOf?: (by: string) => GuardActor | undefined;
36
+ }
37
+ /**
38
+ * Role / membership check to pass as `next` of `createRoomTaskAuthorizer`. Returns a refusal reason or undefined.
39
+ * - create: `assignee` (if any) must be a member; `by` must be a known actor (a member or a human).
40
+ * - start / block / complete: `by` must be a member.
41
+ * - handoff: `by` and `to` are members and the role of `by` lists the role of `to` in `handoffTo`
42
+ * (no `handoffTo` means no handoff allowed).
43
+ * - assign / cancel: not checked here (see `createRoomRoleAssignAuthorizer` and the built-in cancel check).
44
+ * - any other (unknown) command type is refused.
45
+ * Fail-closed: any throw (or a member whose role is missing) is a refusal.
46
+ */
47
+ export declare function createRoomRoleAuthorizer(options: RoomRoleAuthorizerOptions): RoomTaskAuthorizer;
48
+ /**
49
+ * Role check for `assign`, to pass as `authorizeAssign`: only the coordinator (a Room without one refuses every
50
+ * assign) may assign, and only to a member. The hook is synchronous and cannot see the Task, so status-dependent
51
+ * rules stay with the state machine. Fail-closed: a throw is a refusal.
52
+ */
53
+ export declare function createRoomRoleAssignAuthorizer(options: Pick<RoomRoleAuthorizerOptions, 'room' | 'roomId'>): (roomId: string, command: RoomAssignCommand) => string | undefined;
54
+ //# sourceMappingURL=room-task-authorizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-task-authorizer.d.ts","sourceRoot":"","sources":["../../src/room/room-task-authorizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AA4BpD,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,KAAK,MAAM,GAAG,SAAS,CAAC;AAElG,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,eAAe,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAE7E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;IACxD,wGAAwG;IACxG,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IACzD;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,KAAK,MAAM,GAAG,SAAS,CAAC;IAC9F;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,kBAAkB,CA2B/F;AAID,MAAM,WAAW,yBAAyB;IACxC,0FAA0F;IAC1F,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,CAAC;IAC1C,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;CAC3D;AA2BD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,kBAAkB,CAuC/F;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,IAAI,CAAC,yBAAyB,EAAE,MAAM,GAAG,QAAQ,CAAC,GAC1D,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,KAAK,MAAM,GAAG,SAAS,CAepE"}
@@ -0,0 +1,139 @@
1
+ export function createRoomTaskAuthorizer(options) {
2
+ const { guards, actorOf, authorizeAssign, next } = options;
3
+ return (roomId, command) => {
4
+ if (command.type === 'cancel') {
5
+ try {
6
+ const actor = actorOf(command.by);
7
+ if (!actor)
8
+ return 'task.cancel requires a known human actor';
9
+ const refusal = guards.authorizeSensitive('task.cancel', actor);
10
+ if (refusal !== undefined)
11
+ return refusal;
12
+ }
13
+ catch (error) {
14
+ return `task.cancel authorization failed: ${error instanceof Error ? error.message : String(error)}`;
15
+ }
16
+ }
17
+ else if (command.type === 'assign') {
18
+ if (!authorizeAssign)
19
+ return 'task.assign requires a role check (authorizeAssign); refused by default';
20
+ try {
21
+ const refusal = authorizeAssign(roomId, command);
22
+ if (refusal !== undefined)
23
+ return refusal;
24
+ }
25
+ catch (error) {
26
+ return `task.assign authorization failed: ${error instanceof Error ? error.message : String(error)}`;
27
+ }
28
+ }
29
+ try {
30
+ return next?.(roomId, command);
31
+ }
32
+ catch (error) {
33
+ return `task authorization failed: ${error instanceof Error ? error.message : String(error)}`;
34
+ }
35
+ };
36
+ }
37
+ function indexRoom(room) {
38
+ const entry = 'definition' in room ? room : undefined;
39
+ const definition = entry ? entry.definition : room;
40
+ const byAgent = new Map();
41
+ for (const member of definition.members)
42
+ byAgent.set(member.agent, member.role);
43
+ return {
44
+ id: entry?.id,
45
+ coordinator: definition.coordinator,
46
+ roleOf: (agent) => (Object.hasOwn(definition.roles, byAgent.get(agent) ?? '') ? byAgent.get(agent) : undefined),
47
+ handoffTo: (agent) => {
48
+ const role = byAgent.get(agent);
49
+ return role !== undefined && Object.hasOwn(definition.roles, role) ? definition.roles[role]?.handoffTo : undefined;
50
+ },
51
+ };
52
+ }
53
+ const isHumanBy = (by) => by.startsWith('human:') && by.length > 'human:'.length;
54
+ /**
55
+ * Role / membership check to pass as `next` of `createRoomTaskAuthorizer`. Returns a refusal reason or undefined.
56
+ * - create: `assignee` (if any) must be a member; `by` must be a known actor (a member or a human).
57
+ * - start / block / complete: `by` must be a member.
58
+ * - handoff: `by` and `to` are members and the role of `by` lists the role of `to` in `handoffTo`
59
+ * (no `handoffTo` means no handoff allowed).
60
+ * - assign / cancel: not checked here (see `createRoomRoleAssignAuthorizer` and the built-in cancel check).
61
+ * - any other (unknown) command type is refused.
62
+ * Fail-closed: any throw (or a member whose role is missing) is a refusal.
63
+ */
64
+ export function createRoomRoleAuthorizer(options) {
65
+ const { room, roomId, actorOf } = options;
66
+ return (target, command) => {
67
+ try {
68
+ const index = indexRoom(room);
69
+ if (roomId !== undefined && target !== roomId)
70
+ return `unknown room ${target}`;
71
+ if (roomId === undefined && index.id !== undefined && target !== index.id)
72
+ return `unknown room ${target}`;
73
+ const member = (agent) => index.roleOf(agent) !== undefined;
74
+ switch (command.type) {
75
+ case 'create': {
76
+ const known = actorOf ? actorOf(command.by) !== undefined : isHumanBy(command.by) || member(command.by);
77
+ if (!known)
78
+ return `create: unknown actor ${command.by}`;
79
+ if (command.assignee !== undefined && !member(command.assignee))
80
+ return `create: ${command.assignee} is not a member`;
81
+ return undefined;
82
+ }
83
+ case 'start':
84
+ case 'block':
85
+ case 'complete':
86
+ return member(command.by) ? undefined : `${command.type}: ${command.by} is not a member of room ${target}`;
87
+ case 'handoff': {
88
+ const from = index.roleOf(command.by);
89
+ if (from === undefined)
90
+ return `handoff: ${command.by} is not a member of room ${target}`;
91
+ const to = index.roleOf(command.to);
92
+ if (to === undefined)
93
+ return `handoff: ${command.to} is not a member of room ${target}`;
94
+ if (!index.handoffTo(command.by)?.includes(to))
95
+ return `handoff: role ${from} may not hand off to role ${to}`;
96
+ return undefined;
97
+ }
98
+ case 'assign':
99
+ case 'cancel':
100
+ return undefined; // checked by `authorizeAssign` / the built-in cancel check
101
+ default: {
102
+ const unknown = command;
103
+ return `unsupported command type ${String(unknown.type)}`;
104
+ }
105
+ }
106
+ }
107
+ catch (error) {
108
+ return `task authorization failed: ${error instanceof Error ? error.message : String(error)}`;
109
+ }
110
+ };
111
+ }
112
+ /**
113
+ * Role check for `assign`, to pass as `authorizeAssign`: only the coordinator (a Room without one refuses every
114
+ * assign) may assign, and only to a member. The hook is synchronous and cannot see the Task, so status-dependent
115
+ * rules stay with the state machine. Fail-closed: a throw is a refusal.
116
+ */
117
+ export function createRoomRoleAssignAuthorizer(options) {
118
+ const { room, roomId } = options;
119
+ return (target, command) => {
120
+ try {
121
+ const index = indexRoom(room);
122
+ if (roomId !== undefined && target !== roomId)
123
+ return `unknown room ${target}`;
124
+ if (roomId === undefined && index.id !== undefined && target !== index.id)
125
+ return `unknown room ${target}`;
126
+ if (index.roleOf(command.by) === undefined)
127
+ return `assign: ${command.by} is not a member of room ${target}`;
128
+ if (index.coordinator === undefined || command.by !== index.coordinator)
129
+ return 'assign: only the coordinator may assign';
130
+ if (index.roleOf(command.assignee) === undefined)
131
+ return `assign: ${command.assignee} is not a member`;
132
+ return undefined;
133
+ }
134
+ catch (error) {
135
+ return `task authorization failed: ${error instanceof Error ? error.message : String(error)}`;
136
+ }
137
+ };
138
+ }
139
+ //# sourceMappingURL=room-task-authorizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-task-authorizer.js","sourceRoot":"","sources":["../../src/room/room-task-authorizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type RoomTaskEvent } from './room-task.js';
2
+ /** One append-only event stream per Room. */
3
+ export interface RoomTaskJournal {
4
+ read(roomId: string): Promise<readonly RoomTaskEvent[]>;
5
+ /**
6
+ * Compare-and-set append. `expectedSequence` is the sequence of the last stored event (-1 when empty).
7
+ * The batch is written atomically: all events or none.
8
+ */
9
+ append(roomId: string, expectedSequence: number, events: readonly RoomTaskEvent[]): Promise<readonly RoomTaskEvent[]>;
10
+ }
11
+ export declare class RoomTaskSequenceConflictError extends Error {
12
+ readonly roomId: string;
13
+ readonly expected: number;
14
+ readonly actual: number;
15
+ constructor(roomId: string, expected: number, actual: number);
16
+ }
17
+ export declare class RoomTaskJournalCorruptionError extends Error {
18
+ constructor(message: string);
19
+ }
20
+ /** Shared batch checks: scope, contiguity from expectedSequence + 1 and a full replay of the result. */
21
+ export declare function assertRoomTaskAppend(roomId: string, current: readonly RoomTaskEvent[], expectedSequence: number, events: readonly RoomTaskEvent[]): void;
22
+ export declare class MemoryRoomTaskJournal implements RoomTaskJournal {
23
+ #private;
24
+ read(roomId: string): Promise<readonly RoomTaskEvent[]>;
25
+ append(roomId: string, expectedSequence: number, events: readonly RoomTaskEvent[]): Promise<readonly RoomTaskEvent[]>;
26
+ }
27
+ //# sourceMappingURL=room-task-journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-task-journal.d.ts","sourceRoot":"","sources":["../../src/room/room-task-journal.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAErE,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;IACxD;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;CACvH;AAED,qBAAa,6BAA8B,SAAQ,KAAK;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAlE,MAAM,EAAE,MAAM,EAAW,QAAQ,EAAE,MAAM,EAAW,MAAM,EAAE,MAAM;CAIxF;AAED,qBAAa,8BAA+B,SAAQ,KAAK;gBAC3C,OAAO,EAAE,MAAM;CAI5B;AAED,wGAAwG;AACxG,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,aAAa,EAAE,EACjC,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,SAAS,aAAa,EAAE,GAC/B,IAAI,CAQN;AAED,qBAAa,qBAAsB,YAAW,eAAe;;IAGrD,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC;IAIvD,MAAM,CACV,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,SAAS,aAAa,EAAE,GAC/B,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC;CASrC"}
@@ -0,0 +1,49 @@
1
+ import { deepFreezeWorkroomValue } from '../workroom/canonical-value.js';
2
+ import { replayRoomTasks } from './room-task.js';
3
+ export class RoomTaskSequenceConflictError extends Error {
4
+ roomId;
5
+ expected;
6
+ actual;
7
+ constructor(roomId, expected, actual) {
8
+ super(`Room Task journal for ${roomId} expected sequence ${expected} but found ${actual}`);
9
+ this.roomId = roomId;
10
+ this.expected = expected;
11
+ this.actual = actual;
12
+ this.name = 'RoomTaskSequenceConflictError';
13
+ }
14
+ }
15
+ export class RoomTaskJournalCorruptionError extends Error {
16
+ constructor(message) {
17
+ super(`Room Task journal is corrupt: ${message}`);
18
+ this.name = 'RoomTaskJournalCorruptionError';
19
+ }
20
+ }
21
+ /** Shared batch checks: scope, contiguity from expectedSequence + 1 and a full replay of the result. */
22
+ export function assertRoomTaskAppend(roomId, current, expectedSequence, events) {
23
+ const actual = current.length - 1;
24
+ if (actual !== expectedSequence)
25
+ throw new RoomTaskSequenceConflictError(roomId, expectedSequence, actual);
26
+ events.forEach((event, index) => {
27
+ if (event.roomId !== roomId)
28
+ throw new Error(`Room Task append scope drift: event belongs to room ${String(event.roomId)}`);
29
+ if (event.sequence !== expectedSequence + 1 + index)
30
+ throw new Error('Room Task append sequence is not contiguous');
31
+ });
32
+ replayRoomTasks(roomId, [...current, ...events]);
33
+ }
34
+ export class MemoryRoomTaskJournal {
35
+ #rooms = new Map();
36
+ async read(roomId) {
37
+ return this.#rooms.get(roomId) ?? Object.freeze([]);
38
+ }
39
+ async append(roomId, expectedSequence, events) {
40
+ const current = this.#rooms.get(roomId) ?? [];
41
+ // Copy first so later mutation of the caller's objects cannot reach the store.
42
+ const copy = events.map(event => JSON.parse(JSON.stringify(event)));
43
+ assertRoomTaskAppend(roomId, current, expectedSequence, copy);
44
+ const frozen = copy.map(event => deepFreezeWorkroomValue(event));
45
+ this.#rooms.set(roomId, Object.freeze([...current, ...frozen]));
46
+ return Object.freeze(frozen);
47
+ }
48
+ }
49
+ //# sourceMappingURL=room-task-journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-task-journal.js","sourceRoot":"","sources":["../../src/room/room-task-journal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAsB,MAAM,gBAAgB,CAAC;AAYrE,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACjC;IAAyB;IAA2B;IAAzE,YAAqB,MAAc,EAAW,QAAgB,EAAW,MAAc;QACrF,KAAK,CAAC,yBAAyB,MAAM,sBAAsB,QAAQ,cAAc,MAAM,EAAE,CAAC,CAAC;QADxE,WAAM,GAAN,MAAM,CAAQ;QAAW,aAAQ,GAAR,QAAQ,CAAQ;QAAW,WAAM,GAAN,MAAM,CAAQ;QAErF,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAC9C,CAAC;CACF;AAED,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IACvD,YAAY,OAAe;QACzB,KAAK,CAAC,iCAAiC,OAAO,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;IAC/C,CAAC;CACF;AAED,wGAAwG;AACxG,MAAM,UAAU,oBAAoB,CAClC,MAAc,EACd,OAAiC,EACjC,gBAAwB,EACxB,MAAgC;IAEhC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,IAAI,MAAM,KAAK,gBAAgB;QAAE,MAAM,IAAI,6BAA6B,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC3G,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5H,IAAI,KAAK,CAAC,QAAQ,KAAK,gBAAgB,GAAG,CAAC,GAAG,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACtH,CAAC,CAAC,CAAC;IACH,eAAe,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,OAAO,qBAAqB;IACvB,MAAM,GAAG,IAAI,GAAG,EAAoC,CAAC;IAE9D,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,MAAM,CACV,MAAc,EACd,gBAAwB,EACxB,MAAgC;QAEhC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9C,+EAA+E;QAC/E,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAkB,CAAC,CAAC;QACrF,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,54 @@
1
+ import { type RoomTaskCommand, type RoomTaskEvent, type RoomTaskStatus, type RoomTaskView } from './room-task.js';
2
+ import { type RoomTaskJournal } from './room-task-journal.js';
3
+ export declare class RoomTaskAuthorizationError extends Error {
4
+ readonly reason: string;
5
+ constructor(reason: string);
6
+ }
7
+ export interface RoomTaskExecuteResult {
8
+ readonly events: readonly RoomTaskEvent[];
9
+ readonly state: RoomTaskView;
10
+ /** True when the commandId was already applied (idempotent hit); no new events were written. */
11
+ readonly replayed: boolean;
12
+ }
13
+ export interface RoomTaskListFilter {
14
+ readonly status?: RoomTaskStatus;
15
+ readonly assignee?: string;
16
+ }
17
+ export interface RoomTaskServiceOptions {
18
+ readonly journal: RoomTaskJournal;
19
+ readonly newId?: () => string;
20
+ /** Source of command timestamps' default and nothing else; the pure layer never reads a clock. */
21
+ readonly now?: () => number;
22
+ /**
23
+ * Hook for membership / role checks (done by the caller layer, not the state machine).
24
+ * Return a refusal reason to reject the command; return undefined to allow it.
25
+ *
26
+ * authorize MUST restrict who may issue `assign` against an already-assigned or blocked Task: allow only
27
+ * the lead/coordinator role, because `assign` checks neither `from` nor counts handoffCount. A member who
28
+ * wants to give up a Task must use `handoff`. The C1 authorize hook has to enforce this: createRoomTaskAuthorizer
29
+ * is the fail-closed path (it refuses every `assign` unless its `authorizeAssign` role check allows it).
30
+ */
31
+ readonly authorize?: (roomId: string, command: RoomTaskCommand) => string | undefined;
32
+ readonly logger?: {
33
+ warn(message: string): void;
34
+ };
35
+ }
36
+ /** `Omit` must distribute over the command union, or the per-command fields (`result`, `to`, ...) are lost. */
37
+ type DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;
38
+ export type RoomTaskExecuteInput = DistributiveOmit<RoomTaskCommand, 'at'> & {
39
+ readonly at?: number;
40
+ };
41
+ export interface RoomTaskService {
42
+ execute(roomId: string, command: RoomTaskExecuteInput): Promise<RoomTaskExecuteResult>;
43
+ get(roomId: string, taskId: string): Promise<RoomTaskView | undefined>;
44
+ list(roomId: string, filter?: RoomTaskListFilter): Promise<readonly RoomTaskView[]>;
45
+ /**
46
+ * Listeners run after the command is persisted and after the Room serial section has finished, in the
47
+ * order of the caller's own events. Concurrent executes may interleave their dispatches, so subscribers
48
+ * must order by `event.sequence`. Errors are logged, never propagated.
49
+ */
50
+ subscribe(listener: (event: RoomTaskEvent) => void | Promise<void>): () => void;
51
+ }
52
+ export declare function createRoomTaskService(options: RoomTaskServiceOptions): RoomTaskService;
53
+ export {};
54
+ //# sourceMappingURL=room-task-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-task-service.d.ts","sourceRoot":"","sources":["../../src/room/room-task-service.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,aAAa,EAElB,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAiC,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE7F,qBAAa,0BAA2B,SAAQ,KAAK;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAIpC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;IAC9B,kGAAkG;IAClG,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,KAAK,MAAM,GAAG,SAAS,CAAC;IACtF,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACnD;AAED,+GAA+G;AAC/G,KAAK,gBAAgB,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;AACzF,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtG,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACvF,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;IACvE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAAC;IACpF;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC;CACjF;AAUD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAkFtF"}