toolroll 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (626) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1113 -0
  3. package/THIRD_PARTY_NOTICES.md +449 -0
  4. package/dist/accent-colors.d.ts +48 -0
  5. package/dist/accent-colors.js +122 -0
  6. package/dist/action-ledger.d.ts +26 -0
  7. package/dist/action-ledger.js +75 -0
  8. package/dist/agent-fence.d.ts +42 -0
  9. package/dist/agent-fence.js +183 -0
  10. package/dist/agentconfig.d.ts +216 -0
  11. package/dist/agentconfig.js +454 -0
  12. package/dist/api-tokens.d.ts +16 -0
  13. package/dist/api-tokens.js +27 -0
  14. package/dist/approval-policy.d.ts +69 -0
  15. package/dist/approval-policy.js +137 -0
  16. package/dist/approval-rules-ui.d.ts +25 -0
  17. package/dist/approval-rules-ui.js +39 -0
  18. package/dist/assignment-adapters.d.ts +180 -0
  19. package/dist/assignment-adapters.js +239 -0
  20. package/dist/assignment-brief.d.ts +71 -0
  21. package/dist/assignment-brief.js +129 -0
  22. package/dist/assignment-delivery.d.ts +56 -0
  23. package/dist/assignment-delivery.js +160 -0
  24. package/dist/assignment-presentation.d.ts +26 -0
  25. package/dist/assignment-presentation.js +80 -0
  26. package/dist/assignment-status.d.ts +62 -0
  27. package/dist/assignment-status.js +152 -0
  28. package/dist/assignment-ui.d.ts +71 -0
  29. package/dist/assignment-ui.js +103 -0
  30. package/dist/assignment.d.ts +222 -0
  31. package/dist/assignment.js +399 -0
  32. package/dist/attest.d.ts +56 -0
  33. package/dist/attest.js +153 -0
  34. package/dist/backend.d.ts +97 -0
  35. package/dist/backend.js +166 -0
  36. package/dist/backup-ui.d.ts +22 -0
  37. package/dist/backup-ui.js +59 -0
  38. package/dist/backup.d.ts +84 -0
  39. package/dist/backup.js +421 -0
  40. package/dist/beads.d.ts +34 -0
  41. package/dist/beads.js +135 -0
  42. package/dist/bin.d.ts +2 -0
  43. package/dist/bin.js +22 -0
  44. package/dist/board.d.ts +150 -0
  45. package/dist/board.js +210 -0
  46. package/dist/boot-identity.d.ts +63 -0
  47. package/dist/boot-identity.js +99 -0
  48. package/dist/browser/THIRD_PARTY_NOTICES.txt +2295 -0
  49. package/dist/browser/workspace.css +4 -0
  50. package/dist/browser/workspace.js +225 -0
  51. package/dist/browser-crew.d.ts +11 -0
  52. package/dist/browser-crew.js +50 -0
  53. package/dist/browser-shell.d.ts +8 -0
  54. package/dist/browser-shell.js +60 -0
  55. package/dist/browser-workspace.d.ts +780 -0
  56. package/dist/browser-workspace.js +47 -0
  57. package/dist/budget-alerts.d.ts +19 -0
  58. package/dist/budget-alerts.js +46 -0
  59. package/dist/builder.d.ts +370 -0
  60. package/dist/builder.js +3262 -0
  61. package/dist/capscan.d.ts +35 -0
  62. package/dist/capscan.js +113 -0
  63. package/dist/chat-acceptance.d.ts +71 -0
  64. package/dist/chat-acceptance.js +120 -0
  65. package/dist/chat-actions.d.ts +265 -0
  66. package/dist/chat-actions.js +1273 -0
  67. package/dist/chat-channel.d.ts +109 -0
  68. package/dist/chat-channel.js +652 -0
  69. package/dist/chat-continuity.d.ts +32 -0
  70. package/dist/chat-continuity.js +317 -0
  71. package/dist/chat-controls.d.ts +113 -0
  72. package/dist/chat-controls.js +53 -0
  73. package/dist/chat-delivery-state.d.ts +159 -0
  74. package/dist/chat-delivery-state.js +309 -0
  75. package/dist/chat-delivery.d.ts +38 -0
  76. package/dist/chat-delivery.js +693 -0
  77. package/dist/chat-display.d.ts +1 -0
  78. package/dist/chat-display.js +18 -0
  79. package/dist/chat-evidence.d.ts +123 -0
  80. package/dist/chat-evidence.js +207 -0
  81. package/dist/chat-flow.d.ts +44 -0
  82. package/dist/chat-flow.js +215 -0
  83. package/dist/chat-inbox.d.ts +57 -0
  84. package/dist/chat-inbox.js +123 -0
  85. package/dist/chat-polish.d.ts +16 -0
  86. package/dist/chat-polish.js +135 -0
  87. package/dist/chat-review.d.ts +46 -0
  88. package/dist/chat-review.js +98 -0
  89. package/dist/chat-rooms.d.ts +123 -0
  90. package/dist/chat-rooms.js +216 -0
  91. package/dist/chat-task-actions.d.ts +44 -0
  92. package/dist/chat-task-actions.js +79 -0
  93. package/dist/check-progress.d.ts +51 -0
  94. package/dist/check-progress.js +290 -0
  95. package/dist/child-database.d.ts +12 -0
  96. package/dist/child-database.js +30 -0
  97. package/dist/claim.d.ts +688 -0
  98. package/dist/claim.js +1740 -0
  99. package/dist/cli.d.ts +137 -0
  100. package/dist/cli.js +1461 -0
  101. package/dist/codex-limits.d.ts +15 -0
  102. package/dist/codex-limits.js +145 -0
  103. package/dist/coding-context.d.ts +55 -0
  104. package/dist/coding-context.js +92 -0
  105. package/dist/coding-handoff.d.ts +57 -0
  106. package/dist/coding-handoff.js +277 -0
  107. package/dist/coding-provider.d.ts +72 -0
  108. package/dist/coding-provider.js +424 -0
  109. package/dist/coding-shipping-ui.d.ts +4 -0
  110. package/dist/coding-shipping-ui.js +12 -0
  111. package/dist/coding-types.d.ts +62 -0
  112. package/dist/coding-types.js +1 -0
  113. package/dist/coding-ui.d.ts +17 -0
  114. package/dist/coding-ui.js +364 -0
  115. package/dist/coding-update.d.ts +15 -0
  116. package/dist/coding-update.js +149 -0
  117. package/dist/coding-workspace.d.ts +124 -0
  118. package/dist/coding-workspace.js +768 -0
  119. package/dist/container-state.d.ts +5 -0
  120. package/dist/container-state.js +62 -0
  121. package/dist/containment.d.ts +197 -0
  122. package/dist/containment.js +559 -0
  123. package/dist/contest.d.ts +318 -0
  124. package/dist/contest.js +753 -0
  125. package/dist/control-setup.d.ts +35 -0
  126. package/dist/control-setup.js +40 -0
  127. package/dist/control-ui.d.ts +29 -0
  128. package/dist/control-ui.js +53 -0
  129. package/dist/controller-service.d.ts +1 -0
  130. package/dist/controller-service.js +19 -0
  131. package/dist/controller-supervisor.d.ts +30 -0
  132. package/dist/controller-supervisor.js +104 -0
  133. package/dist/converse.d.ts +304 -0
  134. package/dist/converse.js +849 -0
  135. package/dist/coordinator-proposals.d.ts +29 -0
  136. package/dist/coordinator-proposals.js +137 -0
  137. package/dist/coordinator.d.ts +186 -0
  138. package/dist/coordinator.js +447 -0
  139. package/dist/credentials-ui.d.ts +25 -0
  140. package/dist/credentials-ui.js +48 -0
  141. package/dist/daemon.d.ts +209 -0
  142. package/dist/daemon.js +604 -0
  143. package/dist/decision.d.ts +120 -0
  144. package/dist/decision.js +388 -0
  145. package/dist/demo.d.ts +55 -0
  146. package/dist/demo.js +992 -0
  147. package/dist/desktop-access.d.ts +28 -0
  148. package/dist/desktop-access.js +88 -0
  149. package/dist/desktop-bundle.d.ts +16 -0
  150. package/dist/desktop-bundle.js +74 -0
  151. package/dist/desktop-host.d.ts +54 -0
  152. package/dist/desktop-host.js +508 -0
  153. package/dist/desktop-update-gate.d.ts +12 -0
  154. package/dist/desktop-update-gate.js +91 -0
  155. package/dist/desktop-update-recovery.d.ts +14 -0
  156. package/dist/desktop-update-recovery.js +243 -0
  157. package/dist/desktop-update.d.ts +110 -0
  158. package/dist/desktop-update.js +740 -0
  159. package/dist/discord-api.d.ts +20 -0
  160. package/dist/discord-api.js +138 -0
  161. package/dist/discord-chat.d.ts +16 -0
  162. package/dist/discord-chat.js +381 -0
  163. package/dist/discord-settings.d.ts +7 -0
  164. package/dist/discord-settings.js +75 -0
  165. package/dist/discord.d.ts +10 -0
  166. package/dist/discord.js +169 -0
  167. package/dist/discover.d.ts +75 -0
  168. package/dist/discover.js +150 -0
  169. package/dist/dispatch.d.ts +100 -0
  170. package/dist/dispatch.js +311 -0
  171. package/dist/dispose.d.ts +161 -0
  172. package/dist/dispose.js +803 -0
  173. package/dist/email-settings.d.ts +34 -0
  174. package/dist/email-settings.js +50 -0
  175. package/dist/envelope.d.ts +47 -0
  176. package/dist/envelope.js +105 -0
  177. package/dist/evidence-pack.d.ts +185 -0
  178. package/dist/evidence-pack.js +258 -0
  179. package/dist/evidence.d.ts +345 -0
  180. package/dist/evidence.js +782 -0
  181. package/dist/exec.d.ts +285 -0
  182. package/dist/exec.js +1841 -0
  183. package/dist/exhaustion.d.ts +85 -0
  184. package/dist/exhaustion.js +141 -0
  185. package/dist/export-ui.d.ts +4 -0
  186. package/dist/export-ui.js +17 -0
  187. package/dist/export.d.ts +48 -0
  188. package/dist/export.js +305 -0
  189. package/dist/flow-actions.d.ts +77 -0
  190. package/dist/flow-actions.js +203 -0
  191. package/dist/flow-code.d.ts +50 -0
  192. package/dist/flow-code.js +159 -0
  193. package/dist/flow-draft.d.ts +38 -0
  194. package/dist/flow-draft.js +80 -0
  195. package/dist/flow-engine.d.ts +66 -0
  196. package/dist/flow-engine.js +416 -0
  197. package/dist/flow-insights.d.ts +95 -0
  198. package/dist/flow-insights.js +149 -0
  199. package/dist/flow-live.d.ts +24 -0
  200. package/dist/flow-live.js +150 -0
  201. package/dist/flow-people.d.ts +24 -0
  202. package/dist/flow-people.js +91 -0
  203. package/dist/flow-replies.d.ts +48 -0
  204. package/dist/flow-replies.js +113 -0
  205. package/dist/flow-scripts.d.ts +38 -0
  206. package/dist/flow-scripts.js +73 -0
  207. package/dist/flow-secrets.d.ts +13 -0
  208. package/dist/flow-secrets.js +45 -0
  209. package/dist/flow-sort.d.ts +82 -0
  210. package/dist/flow-sort.js +153 -0
  211. package/dist/flow-steps.d.ts +40 -0
  212. package/dist/flow-steps.js +408 -0
  213. package/dist/flow-triggers.d.ts +244 -0
  214. package/dist/flow-triggers.js +959 -0
  215. package/dist/flows-ui.d.ts +20 -0
  216. package/dist/flows-ui.js +175 -0
  217. package/dist/flows.d.ts +229 -0
  218. package/dist/flows.js +968 -0
  219. package/dist/fonts.d.ts +19 -0
  220. package/dist/fonts.js +19 -0
  221. package/dist/gaps.d.ts +35 -0
  222. package/dist/gaps.js +101 -0
  223. package/dist/gate-failure.d.ts +40 -0
  224. package/dist/gate-failure.js +66 -0
  225. package/dist/git.d.ts +54 -0
  226. package/dist/git.js +94 -0
  227. package/dist/google-mail.d.ts +58 -0
  228. package/dist/google-mail.js +151 -0
  229. package/dist/grant.d.ts +136 -0
  230. package/dist/grant.js +238 -0
  231. package/dist/graph.d.ts +164 -0
  232. package/dist/graph.js +383 -0
  233. package/dist/guides.d.ts +22 -0
  234. package/dist/guides.js +363 -0
  235. package/dist/held.d.ts +150 -0
  236. package/dist/held.js +799 -0
  237. package/dist/invoke.d.ts +112 -0
  238. package/dist/invoke.js +780 -0
  239. package/dist/issues.d.ts +41 -0
  240. package/dist/issues.js +131 -0
  241. package/dist/job-object-helper.ps1 +252 -0
  242. package/dist/jsonl-discriminants.d.ts +11 -0
  243. package/dist/jsonl-discriminants.js +93 -0
  244. package/dist/keys.d.ts +104 -0
  245. package/dist/keys.js +229 -0
  246. package/dist/kits-ui.d.ts +17 -0
  247. package/dist/kits-ui.js +46 -0
  248. package/dist/kits.d.ts +86 -0
  249. package/dist/kits.js +215 -0
  250. package/dist/knowledge-cli.d.ts +101 -0
  251. package/dist/knowledge-cli.js +92 -0
  252. package/dist/knowledge-ui.d.ts +24 -0
  253. package/dist/knowledge-ui.js +40 -0
  254. package/dist/lead-context.d.ts +8 -0
  255. package/dist/lead-context.js +56 -0
  256. package/dist/lead-follow.d.ts +22 -0
  257. package/dist/lead-follow.js +167 -0
  258. package/dist/lead-status.d.ts +75 -0
  259. package/dist/lead-status.js +285 -0
  260. package/dist/ledger-chain.d.ts +46 -0
  261. package/dist/ledger-chain.js +187 -0
  262. package/dist/ledger-csv.d.ts +4 -0
  263. package/dist/ledger-csv.js +11 -0
  264. package/dist/ledger-view.d.ts +24 -0
  265. package/dist/ledger-view.js +58 -0
  266. package/dist/limits-ui.d.ts +26 -0
  267. package/dist/limits-ui.js +67 -0
  268. package/dist/link.d.ts +72 -0
  269. package/dist/link.js +217 -0
  270. package/dist/live.d.ts +96 -0
  271. package/dist/live.js +366 -0
  272. package/dist/liveness.d.ts +30 -0
  273. package/dist/liveness.js +42 -0
  274. package/dist/log.d.ts +7 -0
  275. package/dist/log.js +25 -0
  276. package/dist/mailbox.d.ts +57 -0
  277. package/dist/mailbox.js +150 -0
  278. package/dist/maintenance.d.ts +11 -0
  279. package/dist/maintenance.js +35 -0
  280. package/dist/mate-cli.d.ts +52 -0
  281. package/dist/mate-cli.js +345 -0
  282. package/dist/mate-contract.d.ts +10 -0
  283. package/dist/mate-contract.js +30 -0
  284. package/dist/mate-doors.d.ts +69 -0
  285. package/dist/mate-doors.js +548 -0
  286. package/dist/mate-progress.d.ts +29 -0
  287. package/dist/mate-progress.js +121 -0
  288. package/dist/mate-tools.d.ts +94 -0
  289. package/dist/mate-tools.js +1878 -0
  290. package/dist/mate.d.ts +92 -0
  291. package/dist/mate.js +435 -0
  292. package/dist/mcp-connect.d.ts +103 -0
  293. package/dist/mcp-connect.js +252 -0
  294. package/dist/mcp.d.ts +27 -0
  295. package/dist/mcp.js +651 -0
  296. package/dist/memory-cli.d.ts +466 -0
  297. package/dist/memory-cli.js +111 -0
  298. package/dist/memory-pass.d.ts +160 -0
  299. package/dist/memory-pass.js +409 -0
  300. package/dist/metrics.d.ts +3 -0
  301. package/dist/metrics.js +56 -0
  302. package/dist/mobile-viewport.d.ts +3 -0
  303. package/dist/mobile-viewport.js +37 -0
  304. package/dist/model-catalog.d.ts +118 -0
  305. package/dist/model-catalog.js +376 -0
  306. package/dist/models-cli.d.ts +102 -0
  307. package/dist/models-cli.js +66 -0
  308. package/dist/models-ui.d.ts +34 -0
  309. package/dist/models-ui.js +68 -0
  310. package/dist/modes.d.ts +80 -0
  311. package/dist/modes.js +182 -0
  312. package/dist/monitoring-settings.d.ts +44 -0
  313. package/dist/monitoring-settings.js +173 -0
  314. package/dist/monitoring-ui.d.ts +20 -0
  315. package/dist/monitoring-ui.js +51 -0
  316. package/dist/monitoring.d.ts +34 -0
  317. package/dist/monitoring.js +221 -0
  318. package/dist/names.d.ts +67 -0
  319. package/dist/names.js +102 -0
  320. package/dist/observations.d.ts +40 -0
  321. package/dist/observations.js +211 -0
  322. package/dist/oidc.d.ts +71 -0
  323. package/dist/oidc.js +182 -0
  324. package/dist/onboard.d.ts +108 -0
  325. package/dist/onboard.js +325 -0
  326. package/dist/openrouter-models.d.ts +30 -0
  327. package/dist/openrouter-models.js +120 -0
  328. package/dist/operate.d.ts +118 -0
  329. package/dist/operate.js +11321 -0
  330. package/dist/peek-cli.d.ts +97 -0
  331. package/dist/peek-cli.js +215 -0
  332. package/dist/peek.d.ts +134 -0
  333. package/dist/peek.js +578 -0
  334. package/dist/phase-routing.d.ts +307 -0
  335. package/dist/phase-routing.js +658 -0
  336. package/dist/plan-auto.d.ts +14 -0
  337. package/dist/plan-auto.js +92 -0
  338. package/dist/plan.d.ts +186 -0
  339. package/dist/plan.js +401 -0
  340. package/dist/planner-source.d.ts +251 -0
  341. package/dist/planner-source.js +460 -0
  342. package/dist/planner.d.ts +75 -0
  343. package/dist/planner.js +992 -0
  344. package/dist/policy-ui.d.ts +20 -0
  345. package/dist/policy-ui.js +41 -0
  346. package/dist/policy.d.ts +111 -0
  347. package/dist/policy.js +231 -0
  348. package/dist/prepared-evidence.d.ts +16 -0
  349. package/dist/prepared-evidence.js +96 -0
  350. package/dist/pricing.d.ts +45 -0
  351. package/dist/pricing.js +77 -0
  352. package/dist/principal.d.ts +42 -0
  353. package/dist/principal.js +82 -0
  354. package/dist/probe.d.ts +46 -0
  355. package/dist/probe.js +79 -0
  356. package/dist/process-custody.d.ts +17 -0
  357. package/dist/process-custody.js +91 -0
  358. package/dist/process-liveness.d.ts +10 -0
  359. package/dist/process-liveness.js +81 -0
  360. package/dist/process-recovery-anchor.d.ts +75 -0
  361. package/dist/process-recovery-anchor.js +188 -0
  362. package/dist/process-recovery-coalition.d.ts +25 -0
  363. package/dist/process-recovery-coalition.js +105 -0
  364. package/dist/process-recovery-eligibility.d.ts +178 -0
  365. package/dist/process-recovery-eligibility.js +170 -0
  366. package/dist/process-recovery-native.d.ts +172 -0
  367. package/dist/process-recovery-native.js +592 -0
  368. package/dist/process-recovery-provenance.d.ts +163 -0
  369. package/dist/process-recovery-provenance.js +292 -0
  370. package/dist/process-recovery-services.d.ts +56 -0
  371. package/dist/process-recovery-services.js +191 -0
  372. package/dist/process-recovery-settlement.d.ts +32 -0
  373. package/dist/process-recovery-settlement.js +132 -0
  374. package/dist/process-recovery.d.ts +41 -0
  375. package/dist/process-recovery.js +91 -0
  376. package/dist/process-tree.d.ts +41 -0
  377. package/dist/process-tree.js +264 -0
  378. package/dist/project-access.d.ts +14 -0
  379. package/dist/project-access.js +34 -0
  380. package/dist/project-cli.d.ts +18 -0
  381. package/dist/project-cli.js +104 -0
  382. package/dist/project-delete-ui.d.ts +22 -0
  383. package/dist/project-delete-ui.js +48 -0
  384. package/dist/project-delete.d.ts +55 -0
  385. package/dist/project-delete.js +413 -0
  386. package/dist/project-knowledge.d.ts +111 -0
  387. package/dist/project-knowledge.js +241 -0
  388. package/dist/project-learning.d.ts +100 -0
  389. package/dist/project-learning.js +438 -0
  390. package/dist/project-memory.d.ts +81 -0
  391. package/dist/project-memory.js +264 -0
  392. package/dist/project-skills.d.ts +152 -0
  393. package/dist/project-skills.js +660 -0
  394. package/dist/project-tools.d.ts +219 -0
  395. package/dist/project-tools.js +796 -0
  396. package/dist/project.d.ts +61 -0
  397. package/dist/project.js +125 -0
  398. package/dist/prompt.d.ts +22 -0
  399. package/dist/prompt.js +72 -0
  400. package/dist/proof.d.ts +513 -0
  401. package/dist/proof.js +1140 -0
  402. package/dist/proposal.d.ts +82 -0
  403. package/dist/proposal.js +210 -0
  404. package/dist/provider-connection.d.ts +22 -0
  405. package/dist/provider-connection.js +98 -0
  406. package/dist/provider-limits.d.ts +35 -0
  407. package/dist/provider-limits.js +95 -0
  408. package/dist/provider.d.ts +279 -0
  409. package/dist/provider.js +935 -0
  410. package/dist/publish.d.ts +107 -0
  411. package/dist/publish.js +650 -0
  412. package/dist/pulls.d.ts +118 -0
  413. package/dist/pulls.js +240 -0
  414. package/dist/push.d.ts +95 -0
  415. package/dist/push.js +353 -0
  416. package/dist/quality.d.ts +8 -0
  417. package/dist/quality.js +6 -0
  418. package/dist/recipe-ui.d.ts +18 -0
  419. package/dist/recipe-ui.js +152 -0
  420. package/dist/recipes.d.ts +81 -0
  421. package/dist/recipes.js +332 -0
  422. package/dist/remote.d.ts +67 -0
  423. package/dist/remote.js +122 -0
  424. package/dist/render.d.ts +64 -0
  425. package/dist/render.js +587 -0
  426. package/dist/report-summary.d.ts +13 -0
  427. package/dist/report-summary.js +15 -0
  428. package/dist/repos.d.ts +65 -0
  429. package/dist/repos.js +277 -0
  430. package/dist/repository-context-ui.d.ts +2 -0
  431. package/dist/repository-context-ui.js +10 -0
  432. package/dist/repository-context.d.ts +67 -0
  433. package/dist/repository-context.js +376 -0
  434. package/dist/restart-certification.d.ts +134 -0
  435. package/dist/restart-certification.js +226 -0
  436. package/dist/result-actions.d.ts +28 -0
  437. package/dist/result-actions.js +270 -0
  438. package/dist/result-completion.d.ts +18 -0
  439. package/dist/result-completion.js +66 -0
  440. package/dist/result-review.d.ts +213 -0
  441. package/dist/result-review.js +430 -0
  442. package/dist/retention-ui.d.ts +12 -0
  443. package/dist/retention-ui.js +39 -0
  444. package/dist/retention.d.ts +72 -0
  445. package/dist/retention.js +288 -0
  446. package/dist/review-context.d.ts +243 -0
  447. package/dist/review-context.js +1043 -0
  448. package/dist/review-evidence.d.ts +33 -0
  449. package/dist/review-evidence.js +56 -0
  450. package/dist/reviewer.d.ts +97 -0
  451. package/dist/reviewer.js +202 -0
  452. package/dist/routine.d.ts +228 -0
  453. package/dist/routine.js +764 -0
  454. package/dist/runner.d.ts +266 -0
  455. package/dist/runner.js +399 -0
  456. package/dist/scan.d.ts +32 -0
  457. package/dist/scan.js +92 -0
  458. package/dist/scope.d.ts +695 -0
  459. package/dist/scope.js +1176 -0
  460. package/dist/scout-report.d.ts +42 -0
  461. package/dist/scout-report.js +108 -0
  462. package/dist/scout.d.ts +69 -0
  463. package/dist/scout.js +351 -0
  464. package/dist/serve.d.ts +313 -0
  465. package/dist/serve.js +21776 -0
  466. package/dist/session-brief.d.ts +8 -0
  467. package/dist/session-brief.js +24 -0
  468. package/dist/session-cli.d.ts +13 -0
  469. package/dist/session-cli.js +284 -0
  470. package/dist/session-contract.d.ts +183 -0
  471. package/dist/session-contract.js +122 -0
  472. package/dist/session-http.d.ts +19 -0
  473. package/dist/session-http.js +154 -0
  474. package/dist/session-server.d.ts +12 -0
  475. package/dist/session-server.js +37 -0
  476. package/dist/session-service.d.ts +22 -0
  477. package/dist/session-service.js +157 -0
  478. package/dist/setup-guide.d.ts +39 -0
  479. package/dist/setup-guide.js +93 -0
  480. package/dist/sign-in-guard.d.ts +45 -0
  481. package/dist/sign-in-guard.js +74 -0
  482. package/dist/skills-ui.d.ts +11 -0
  483. package/dist/skills-ui.js +58 -0
  484. package/dist/skills.d.ts +97 -0
  485. package/dist/skills.js +276 -0
  486. package/dist/slack-api.d.ts +55 -0
  487. package/dist/slack-api.js +229 -0
  488. package/dist/slack-chat.d.ts +28 -0
  489. package/dist/slack-chat.js +413 -0
  490. package/dist/slack-settings.d.ts +7 -0
  491. package/dist/slack-settings.js +75 -0
  492. package/dist/slack-state.d.ts +13 -0
  493. package/dist/slack-state.js +9 -0
  494. package/dist/slack.d.ts +13 -0
  495. package/dist/slack.js +167 -0
  496. package/dist/spend-ui.d.ts +28 -0
  497. package/dist/spend-ui.js +95 -0
  498. package/dist/spend.d.ts +142 -0
  499. package/dist/spend.js +313 -0
  500. package/dist/sqlite-runtime.d.ts +3 -0
  501. package/dist/sqlite-runtime.js +6 -0
  502. package/dist/sso-settings.d.ts +33 -0
  503. package/dist/sso-settings.js +103 -0
  504. package/dist/sso-ui.d.ts +22 -0
  505. package/dist/sso-ui.js +39 -0
  506. package/dist/storage.d.ts +15 -0
  507. package/dist/storage.js +84 -0
  508. package/dist/store.d.ts +7754 -0
  509. package/dist/store.js +23279 -0
  510. package/dist/structured-output.d.ts +58 -0
  511. package/dist/structured-output.js +103 -0
  512. package/dist/style-asset.d.ts +7 -0
  513. package/dist/style-asset.js +41 -0
  514. package/dist/subscription-chat.d.ts +46 -0
  515. package/dist/subscription-chat.js +275 -0
  516. package/dist/summary.d.ts +33 -0
  517. package/dist/summary.js +71 -0
  518. package/dist/supervisor.mjs +297 -0
  519. package/dist/surface.d.ts +63 -0
  520. package/dist/surface.js +352 -0
  521. package/dist/sync.d.ts +94 -0
  522. package/dist/sync.js +279 -0
  523. package/dist/task-composer.d.ts +13 -0
  524. package/dist/task-composer.js +52 -0
  525. package/dist/task-control.d.ts +165 -0
  526. package/dist/task-control.js +214 -0
  527. package/dist/task-outcome-cli.d.ts +10 -0
  528. package/dist/task-outcome-cli.js +92 -0
  529. package/dist/task-text.d.ts +30 -0
  530. package/dist/task-text.js +41 -0
  531. package/dist/team-cli.d.ts +15 -0
  532. package/dist/team-cli.js +618 -0
  533. package/dist/team-contract.d.ts +92 -0
  534. package/dist/team-contract.js +1 -0
  535. package/dist/team-http.d.ts +17 -0
  536. package/dist/team-http.js +144 -0
  537. package/dist/team-leads.d.ts +81 -0
  538. package/dist/team-leads.js +565 -0
  539. package/dist/team-runtime.d.ts +27 -0
  540. package/dist/team-runtime.js +264 -0
  541. package/dist/team-ui.d.ts +3 -0
  542. package/dist/team-ui.js +9 -0
  543. package/dist/team-updates.d.ts +8 -0
  544. package/dist/team-updates.js +57 -0
  545. package/dist/teammate-admin.d.ts +53 -0
  546. package/dist/teammate-admin.js +111 -0
  547. package/dist/teammate-desk.d.ts +60 -0
  548. package/dist/teammate-desk.js +154 -0
  549. package/dist/teammate-memory.d.ts +64 -0
  550. package/dist/teammate-memory.js +196 -0
  551. package/dist/teammate-question.d.ts +59 -0
  552. package/dist/teammate-question.js +175 -0
  553. package/dist/teammate-tools.d.ts +108 -0
  554. package/dist/teammate-tools.js +271 -0
  555. package/dist/teammate-week.d.ts +68 -0
  556. package/dist/teammate-week.js +132 -0
  557. package/dist/teammate-work.d.ts +76 -0
  558. package/dist/teammate-work.js +280 -0
  559. package/dist/teammates-ui.d.ts +20 -0
  560. package/dist/teammates-ui.js +166 -0
  561. package/dist/teammates.d.ts +180 -0
  562. package/dist/teammates.js +253 -0
  563. package/dist/teams-api.d.ts +33 -0
  564. package/dist/teams-api.js +204 -0
  565. package/dist/teams-chat.d.ts +26 -0
  566. package/dist/teams-chat.js +215 -0
  567. package/dist/teams-settings.d.ts +12 -0
  568. package/dist/teams-settings.js +57 -0
  569. package/dist/teams.d.ts +21 -0
  570. package/dist/teams.js +124 -0
  571. package/dist/telegram-flow.d.ts +49 -0
  572. package/dist/telegram-flow.js +110 -0
  573. package/dist/telegram-mate.d.ts +137 -0
  574. package/dist/telegram-mate.js +707 -0
  575. package/dist/telegram-progress.d.ts +14 -0
  576. package/dist/telegram-progress.js +129 -0
  577. package/dist/telegram-settings.d.ts +9 -0
  578. package/dist/telegram-settings.js +36 -0
  579. package/dist/telegram-status.d.ts +75 -0
  580. package/dist/telegram-status.js +265 -0
  581. package/dist/telegram-team.d.ts +85 -0
  582. package/dist/telegram-team.js +359 -0
  583. package/dist/telegram.d.ts +230 -0
  584. package/dist/telegram.js +1931 -0
  585. package/dist/templates.d.ts +65 -0
  586. package/dist/templates.js +118 -0
  587. package/dist/tool-launcher.d.ts +1 -0
  588. package/dist/tool-launcher.js +101 -0
  589. package/dist/tools-ui.d.ts +30 -0
  590. package/dist/tools-ui.js +40 -0
  591. package/dist/transitions-recipes.d.ts +1 -0
  592. package/dist/transitions-recipes.js +203 -0
  593. package/dist/tree-proof.d.ts +34 -0
  594. package/dist/tree-proof.js +58 -0
  595. package/dist/verification-evidence.d.ts +44 -0
  596. package/dist/verification-evidence.js +238 -0
  597. package/dist/version.d.ts +2 -0
  598. package/dist/version.js +10 -0
  599. package/dist/webhooks.d.ts +91 -0
  600. package/dist/webhooks.js +283 -0
  601. package/dist/work-index.d.ts +68 -0
  602. package/dist/work-index.js +384 -0
  603. package/dist/work-summary.d.ts +57 -0
  604. package/dist/work-summary.js +116 -0
  605. package/dist/workspace-motion.d.ts +4 -0
  606. package/dist/workspace-motion.js +133 -0
  607. package/dist/workspace-revision.d.ts +19 -0
  608. package/dist/workspace-revision.js +92 -0
  609. package/dist/workspace-ui.d.ts +204 -0
  610. package/dist/workspace-ui.js +411 -0
  611. package/dist/worktree-notices.d.ts +13 -0
  612. package/dist/worktree-notices.js +17 -0
  613. package/dist/worktree.d.ts +249 -0
  614. package/dist/worktree.js +720 -0
  615. package/package.json +122 -0
  616. package/scripts/canary-assertions.mjs +42 -0
  617. package/scripts/crash-canary.mjs +253 -0
  618. package/scripts/fixtures/crash-process.mjs +74 -0
  619. package/scripts/fixtures/pilot-scenarios.mjs +85 -0
  620. package/scripts/fixtures/restart-service.mjs +27 -0
  621. package/scripts/launchd-certification.mjs +143 -0
  622. package/scripts/pilot.mjs +121 -0
  623. package/scripts/proof-preflight.mjs +140 -0
  624. package/scripts/provider-canary.mjs +379 -0
  625. package/scripts/recovery-canary.mjs +135 -0
  626. package/scripts/restart-certification.mjs +98 -0
@@ -0,0 +1,152 @@
1
+ /** Private lead catch-up, separate from human notification delivery. These are
2
+ * observed assignment transitions, not a promise to capture every intermediate
3
+ * state between scans. Recording or reading them never dispatches agent work. */
4
+ import { createHash } from "node:crypto";
5
+ import { assignmentOf } from "./assignment.js";
6
+ import { publicChatText } from "./chat-display.js";
7
+ export const ASSIGNMENT_STATUS_ACTION = "assignment status observed";
8
+ export const ASSIGNMENT_STATUS_SOURCE = "work";
9
+ const hash = (value) => createHash("sha256").update(JSON.stringify(value)).digest("hex");
10
+ const text = publicChatText;
11
+ /** No saved artifact contents, credential bytes, or polling timestamps. Exact
12
+ * IDs and digests identify the full read; display text is deliberately bounded. */
13
+ export function assignmentStatusBrief(assignment) {
14
+ const receipt = assignment.receipt;
15
+ const action = assignment.primaryAction;
16
+ return {
17
+ rootId: assignment.rootId, activeTaskId: assignment.activeTaskId,
18
+ title: text(assignment.title, 200), state: assignment.state, detail: text(assignment.detail, 1_000),
19
+ owner: assignment.owner === null ? null : { kind: assignment.owner.kind, id: assignment.owner.id, label: text(assignment.owner.label, 100) },
20
+ runId: assignment.attempts.find(one => one.taskId === assignment.activeTaskId)?.runId ?? receipt?.runId ?? null,
21
+ // The same state can be read by an operator or a coordinator. Permission
22
+ // hints are caller-specific, not a transition or a grant to this consumer.
23
+ primaryAction: action === null ? null : { code: action.code, label: text(action.label, 160), target: action.target },
24
+ attention: assignment.attention.slice(0, 8).map(one => text(one, 500)),
25
+ result: receipt === null ? null : { digest: receipt.digest, runId: receipt.runId,
26
+ checks: { status: receipt.checks.status, exitCode: receipt.checks.exitCode, logArtifactId: receipt.checks.logArtifactId }, checksDigest: hash(receipt.checks) },
27
+ completion: assignment.completion === null ? null : { actor: assignment.completion.actor, digest: assignment.completion.digest },
28
+ publication: assignment.publication === null ? null : { state: text(assignment.publication.state, 80),
29
+ prUrl: /^https:\/\/github\.com\/[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+\/pull\/\d+$/.test(assignment.publication.prUrl ?? "") && assignment.publication.prUrl.length <= 2_000 ? assignment.publication.prUrl : null,
30
+ remoteState: assignment.publication.remoteState === null ? null : text(assignment.publication.remoteState, 80) },
31
+ };
32
+ }
33
+ /** An unreadable ledger event is an explicit consumer error, not a cursor that
34
+ * may silently skip the row. This validates the bounded data, not authority. */
35
+ export function parseAssignmentStatusEvent(value) {
36
+ if (Buffer.byteLength(value) > 32_768)
37
+ return null;
38
+ const object = (v) => v !== null && typeof v === "object" && !Array.isArray(v);
39
+ const string = (v, n) => typeof v === "string" && v.length <= n;
40
+ const sha = (v) => typeof v === "string" && /^[a-f0-9]{64}$/.test(v);
41
+ const id = (v) => v === null || Number.isSafeInteger(v) && Number(v) > 0;
42
+ const keys = (v, names) => Object.keys(v).length === names.length && names.every(name => Object.hasOwn(v, name));
43
+ try {
44
+ const event = JSON.parse(value);
45
+ if (!object(event) || !keys(event, ["version", "digest", "stateDigest", "assignment"]) || event["version"] !== 1 || !sha(event["digest"]) || !sha(event["stateDigest"]))
46
+ return null;
47
+ const a = event["assignment"];
48
+ if (!object(a) || !keys(a, ["rootId", "activeTaskId", "title", "state", "detail", "owner", "runId", "primaryAction", "attention", "result", "completion", "publication"]) ||
49
+ !string(a["rootId"], 64) || !string(a["activeTaskId"], 64) || !string(a["title"], 200) || !string(a["detail"], 1_000) || !id(a["runId"]) ||
50
+ !["working", "checking", "needs-decision", "ready-to-check", "complete", "cancelled"].includes(String(a["state"])) ||
51
+ !Array.isArray(a["attention"]) || a["attention"].length > 8 || !a["attention"].every(one => string(one, 500)))
52
+ return null;
53
+ const owner = a["owner"], action = a["primaryAction"], result = a["result"], completion = a["completion"], publication = a["publication"];
54
+ if (!object(owner) || !keys(owner, ["kind", "id", "label"]) || !["coordinator", "lead"].includes(String(owner["kind"])) || !string(owner["id"], 128) || !string(owner["label"], 100))
55
+ return null;
56
+ if (action !== null && (!object(action) || !keys(action, ["code", "label", "target"]) || !string(action["code"], 80) || !string(action["label"], 160) ||
57
+ !object(action["target"]) || !keys(action["target"], ["taskId", "runId", "decisionId"]) || !string(action["target"]["taskId"], 64) || !id(action["target"]["runId"]) || !id(action["target"]["decisionId"])))
58
+ return null;
59
+ if (result !== null && (!object(result) || !keys(result, ["digest", "runId", "checks", "checksDigest"]) || !sha(result["digest"]) || !id(result["runId"]) || result["runId"] === null || !sha(result["checksDigest"]) ||
60
+ !object(result["checks"]) || !keys(result["checks"], ["status", "exitCode", "logArtifactId"]) ||
61
+ !["passed", "failed", "not-run", "unavailable"].includes(String(result["checks"]["status"])) ||
62
+ !(result["checks"]["exitCode"] === null || Number.isInteger(result["checks"]["exitCode"]) && Number(result["checks"]["exitCode"]) >= 0 && Number(result["checks"]["exitCode"]) <= 255) || !id(result["checks"]["logArtifactId"])))
63
+ return null;
64
+ if (completion !== null && (!object(completion) || !keys(completion, ["actor", "digest"]) || !string(completion["actor"], 160) || !sha(completion["digest"])))
65
+ return null;
66
+ if (publication !== null && (!object(publication) || !keys(publication, ["state", "prUrl", "remoteState"]) || !string(publication["state"], 80) ||
67
+ !(publication["prUrl"] === null || string(publication["prUrl"], 2_000)) || !(publication["remoteState"] === null || string(publication["remoteState"], 80))))
68
+ return null;
69
+ return hash(a) === event["stateDigest"] ? event : null;
70
+ }
71
+ catch {
72
+ return null;
73
+ }
74
+ }
75
+ /** Call inside the mutation's transaction when possible; independently atomic
76
+ * for worker reconciliation. The latest event, not a permanent digest set,
77
+ * deduplicates retries so Working → Needs decision → Working is retained. */
78
+ export function noteAssignmentStatus(store, snapshot, now) {
79
+ if (!snapshot.owner?.active || snapshot.repo === null)
80
+ return null;
81
+ return store.transact(() => {
82
+ const owner = snapshot.owner;
83
+ const ref = store.lookupRef(snapshot.rootId);
84
+ if (!ref || ref.repo !== snapshot.repo || ref.revisionOf !== null)
85
+ return null;
86
+ if (owner.kind === "lead") {
87
+ const held = store.handle.prepare("SELECT o.lead,l.status FROM team_task_owner o JOIN team_lead l ON l.id=o.lead WHERE o.task_ref=?").get(ref.id);
88
+ if (held?.["lead"] !== owner.id || held["status"] !== "active")
89
+ return null;
90
+ }
91
+ else {
92
+ const claimed = store.handle.prepare("SELECT actor FROM action_ledger WHERE task_id=? AND action='assignment claimed' AND source='work' ORDER BY id DESC LIMIT 1").get(snapshot.rootId);
93
+ if ((claimed === undefined ? ref.coordinatorCid : String(claimed["actor"]).replace(/^coordinator:/, "")) !== owner.id)
94
+ return null;
95
+ const credential = store.handle.prepare("SELECT repos FROM coordinator_credential WHERE cid=? AND revoked_at IS NULL").get(owner.id);
96
+ let repos;
97
+ try {
98
+ repos = JSON.parse(String(credential?.["repos"] ?? "null"));
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ if (!Array.isArray(repos) || !repos.includes(snapshot.repo))
104
+ return null;
105
+ }
106
+ const assignment = assignmentStatusBrief(snapshot);
107
+ if (assignment.owner === null)
108
+ return null;
109
+ const stateDigest = hash(assignment);
110
+ const previous = store.handle.prepare("SELECT id,outcome FROM action_ledger WHERE task_id=? AND action=? AND source=? ORDER BY id DESC LIMIT 1")
111
+ .get(snapshot.rootId, ASSIGNMENT_STATUS_ACTION, ASSIGNMENT_STATUS_SOURCE);
112
+ if (previous !== undefined) {
113
+ try {
114
+ if (JSON.parse(String(previous["outcome"]))?.stateDigest === stateDigest)
115
+ return null;
116
+ }
117
+ catch { /* Preserve an unreadable older event; append the current observation. */ }
118
+ }
119
+ const digest = hash({ rootRef: ref.id, owner: owner.id, previous: previous === undefined ? null : Number(previous["id"]), stateDigest });
120
+ const event = { version: 1, digest, stateDigest, assignment: { ...assignment, owner: assignment.owner } };
121
+ return store.recordAction({ at: now.toISOString(), actor: `${owner.kind}:${owner.id}`, repo: snapshot.repo,
122
+ taskId: snapshot.rootId, runId: assignment.runId, action: ASSIGNMENT_STATUS_ACTION,
123
+ outcome: JSON.stringify(event), source: ASSIGNMENT_STATUS_SOURCE });
124
+ });
125
+ }
126
+ /** At most fifty roots per pass; the cursor survives process restarts. A full
127
+ * pass cycles back, so changes below the cursor are eventually observed too. */
128
+ export function syncAssignmentStatuses(store, now, repos, root) {
129
+ if (repos.length === 0)
130
+ return;
131
+ const allowed = [...new Set(repos)].sort();
132
+ const key = `assignment-status:${hash(allowed)}`;
133
+ const rows = store.handle.prepare(`SELECT t.id,t.external_id FROM task_ref t
134
+ WHERE t.backend='built-in' AND t.revision_of IS NULL
135
+ AND t.repo IN (SELECT value FROM json_each(?)) AND t.id>?
136
+ AND (t.coordinator_cid IS NOT NULL OR EXISTS(SELECT 1 FROM team_task_owner o WHERE o.task_ref=t.id) OR EXISTS
137
+ (SELECT 1 FROM action_ledger a WHERE a.task_id=t.external_id AND a.action='assignment claimed' AND a.source='work'))
138
+ ORDER BY t.id LIMIT 50`).all(JSON.stringify(allowed), store.serviceCursor(key));
139
+ // Release the writer between families. Each observation and its durable
140
+ // position still commit together; an interrupted sweep resumes after the
141
+ // last committed family instead of holding every heartbeat behind a batch.
142
+ if (rows.length === 0)
143
+ store.setServiceCursor(key, 0, now);
144
+ for (const [index, row] of rows.entries()) {
145
+ store.transact(() => {
146
+ const snapshot = assignmentOf(store, String(row['external_id']), now, { principal: 'coordinator', repos: allowed }, root);
147
+ if (snapshot !== null)
148
+ noteAssignmentStatus(store, snapshot, now);
149
+ store.setServiceCursor(key, index === rows.length - 1 && rows.length < 50 ? 0 : Number(row['id']), now);
150
+ });
151
+ }
152
+ }
@@ -0,0 +1,71 @@
1
+ /** Presentation only. Assignment state and retry authority belong to their
2
+ * existing projections and signed operating-mode terms, never this renderer. */
3
+ import type { AssignmentSnapshot } from './assignment.js';
4
+ import type { DisplayStatus, StatusTone, WorkStatus } from './workspace-ui.js';
5
+ import { type AssignmentWorkStatus } from './assignment-presentation.js';
6
+ /** The existing verified receipt reader may discover damage after a verdict
7
+ * was saved. Keep the limitation visible without inventing another work stage. */
8
+ export declare function assignmentWithEvidence(assignment: AssignmentSnapshot, resultStatus: DisplayStatus | null, resultRunId?: number | null): AssignmentSnapshot;
9
+ export declare function assignmentStatusOf(assignment: AssignmentSnapshot, workStatus?: AssignmentWorkStatus): WorkStatus;
10
+ /** Navigation only. A control action still opens its existing exact ceremony. */
11
+ export declare function assignmentActionHref(assignment: AssignmentSnapshot): string | null;
12
+ export type AssignmentAttemptRow = {
13
+ taskId: string;
14
+ label: string;
15
+ href: string;
16
+ runId: number | null;
17
+ detail: string | null;
18
+ };
19
+ /** Every version of the assignment, oldest first, as the card lists them. */
20
+ export declare function assignmentAttemptsOf(assignment: AssignmentSnapshot): AssignmentAttemptRow[];
21
+ export declare function assignmentAttemptsHtml(assignment: AssignmentSnapshot): string;
22
+ type AssignmentCardOptions = {
23
+ hideAction?: boolean;
24
+ problem?: boolean;
25
+ diagnostics?: WorkStatus['diagnostics'];
26
+ workStatus?: AssignmentWorkStatus;
27
+ resultHref?: string;
28
+ };
29
+ /** The status card's content: one projection for the server HTML and the
30
+ * rebuilt task page, so the two never word the same state differently. */
31
+ export type AssignmentCard = {
32
+ token: string;
33
+ tone: StatusTone;
34
+ label: string;
35
+ action: {
36
+ label: string;
37
+ href: string;
38
+ openResult: boolean;
39
+ } | null;
40
+ /** Ready with passing checks: a verdict chip replaces the detail sentence. */
41
+ passed: {
42
+ by: string | null;
43
+ } | null;
44
+ detail: {
45
+ text: string;
46
+ problem: boolean;
47
+ };
48
+ problems: string[];
49
+ diagnostics: {
50
+ token: string;
51
+ label: string;
52
+ detail: string;
53
+ problem: boolean;
54
+ }[];
55
+ notices: {
56
+ summary: string;
57
+ lines: string[];
58
+ } | null;
59
+ attempts: AssignmentAttemptRow[];
60
+ lead: {
61
+ label: string;
62
+ active: boolean;
63
+ } | null;
64
+ };
65
+ export declare function assignmentCardOf(assignment: AssignmentSnapshot, options?: AssignmentCardOptions): AssignmentCard;
66
+ export declare function assignmentSummaryHtml(assignment: AssignmentSnapshot, options?: AssignmentCardOptions & {
67
+ compact?: boolean;
68
+ }): string;
69
+ /** Shared assignment layout; actions remain comfortable on touch screens. */
70
+ export declare const ASSIGNMENT_CSS = ".assignment-summary{min-width:0;overflow-wrap:anywhere}.assignment-summary .assignment-state{font-weight:600;margin:0}.assignment-summary h2.assignment-state{font-size:1.125rem;color:var(--foreground)}.assignment-summary>.assignment-attempts,.assignment-summary>.assignment-notices{border:0;box-shadow:none;padding:0;margin:.25rem 0 0;background:transparent}.assignment-summary>.button-link{margin-top:.7rem;min-height:44px}.assignment-summary>.work-action{display:inline-flex;margin-inline-start:.6rem;min-height:44px;align-items:center}.assignment-detail{margin:.55rem 0}.assignment-attempts summary,.assignment-notices summary{min-height:44px;display:list-item;align-content:center;cursor:pointer}.assignment-notices summary{font-size:.8125rem;color:var(--foreground)}.assignment-notices p{margin:.25rem 0 .5rem}.assignment-attempts ol{padding-left:1.4rem}.assignment-attempts li{margin:.4rem 0}.assignment-attempts li a{display:inline-flex;align-items:center;min-height:44px;margin-right:.7rem}.assignment-attempts li p{margin:0 0 .4rem}";
71
+ export {};
@@ -0,0 +1,103 @@
1
+ import { assignmentPresentationOf, shortenedMaterialReason } from './assignment-presentation.js';
2
+ const escape = (value) => value.replace(/[&<>"']/g, char => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' })[char]);
3
+ /** The existing verified receipt reader may discover damage after a verdict
4
+ * was saved. Keep the limitation visible without inventing another work stage. */
5
+ export function assignmentWithEvidence(assignment, resultStatus, resultRunId = assignment.receipt?.runId ?? null) {
6
+ if (resultStatus?.token !== 'evidence-damaged')
7
+ return assignment;
8
+ return { ...assignment,
9
+ attempts: assignment.attempts.map(attempt => attempt.taskId === assignment.activeTaskId && resultRunId !== null && attempt.runId === resultRunId ? { ...attempt, detail: resultStatus.detail } : attempt),
10
+ attention: [...new Set([...assignment.attention, resultStatus.detail])],
11
+ };
12
+ }
13
+ export function assignmentStatusOf(assignment, workStatus) {
14
+ return assignmentPresentationOf(assignment, workStatus === undefined ? {} : { workStatus }).status;
15
+ }
16
+ const taskHref = (assignment, taskId) => `/t/${encodeURIComponent(assignment.rootId)}?version=${encodeURIComponent(taskId)}`;
17
+ /** Navigation only. A control action still opens its existing exact ceremony. */
18
+ export function assignmentActionHref(assignment) {
19
+ const action = assignment.primaryAction;
20
+ if (action === null)
21
+ return null;
22
+ const { taskId, runId, decisionId } = action.target;
23
+ if (decisionId !== null)
24
+ return `/d/${decisionId}`;
25
+ if (action.code === 'inspect-decisions')
26
+ return '/';
27
+ if (action.code === 'open-pr' && /^https:\/\/github\.com\/[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+\/pull\/\d+$/.test(assignment.publication?.prUrl ?? ''))
28
+ return assignment.publication.prUrl;
29
+ if (runId !== null && (action.code === 'open-result' || action.code === 'open-pr' || action.code === 'retry-review')) {
30
+ return `/review?result=${encodeURIComponent(taskId)}&run=${runId}${assignment.repo === null ? '' : '&project=' + encodeURIComponent(assignment.repo)}`;
31
+ }
32
+ if (runId !== null && (action.code === 'inspect-run' || action.code === 'reconcile-run'))
33
+ return `/r/${runId}`;
34
+ const anchor = action.code === 'approve-scope' ? '#approve'
35
+ : action.code === 'inspect-stop' || action.code === 'resume-run' ? '#task-control'
36
+ : action.code === 'unhold' || action.code === 'retry-task' ? '#task-actions'
37
+ : action.code === 'write-scope' || action.code === 'select-agent' ? '#scope'
38
+ : action.code === 'inspect-hold' ? '#holds'
39
+ : action.code === 'start-worker' || action.code === 'repair-dependency' ? '#run-status' : '';
40
+ return taskHref(assignment, taskId) + anchor;
41
+ }
42
+ /** Every version of the assignment, oldest first, as the card lists them. */
43
+ export function assignmentAttemptsOf(assignment) {
44
+ return assignment.attempts.map((attempt, index) => ({
45
+ taskId: attempt.taskId, label: `${index === 0 ? 'Original' : `Correction ${index}`} · ${attempt.label}`,
46
+ href: taskHref(assignment, attempt.taskId), runId: attempt.runId,
47
+ detail: (assignment.state === 'checking' && attempt.taskId === assignment.activeTaskId) || attempt.detail === assignment.detail ? null : attempt.detail,
48
+ }));
49
+ }
50
+ export function assignmentAttemptsHtml(assignment) {
51
+ if (assignment.attempts.length === 0)
52
+ return '';
53
+ return `<details class="assignment-attempts"><summary>Attempts <span class="meta">${assignment.attempts.length}</span></summary><ol>` + assignmentAttemptsOf(assignment).map(attempt => `<li data-attempt-task="${escape(attempt.taskId)}" data-history-version="${escape(attempt.taskId)}"><a href="${escape(attempt.href)}">${escape(attempt.label)}</a>${attempt.runId === null ? '' : ` <a href="/r/${attempt.runId}">Run #${attempt.runId}</a>`}${attempt.detail === null ? '' : `<p class="meta">${escape(attempt.detail)}</p>`}</li>`).join('') + `</ol>${assignment.owner === null ? '' : `<p class="meta">Lead: ${escape(assignment.owner.label)}${assignment.owner.active ? '' : ' · access ended'}</p>`}<p class="work-meta work-id">Task <span class="mono">${escape(assignment.rootId)}</span></p></details>`;
54
+ }
55
+ /** Only recognized storage limits and explicitly identified older records are
56
+ * secondary. Unknown findings and damaged current material stay in view. */
57
+ function savedMaterialNotice(detail, assignment) {
58
+ if (shortenedMaterialReason(detail))
59
+ return 'partial';
60
+ const earlier = /^Saved [\w-]+ #(\d+) \(run (\d+)\) is unavailable or changed\.$/.exec(detail);
61
+ return earlier !== null && assignment.receipt !== null && Number(earlier[2]) < assignment.receipt.runId &&
62
+ !assignment.receipt.artifacts.some(one => one.id === Number(earlier[1])) ? 'history' : null;
63
+ }
64
+ export function assignmentCardOf(assignment, options = {}) {
65
+ const presentation = assignmentPresentationOf(assignment, options);
66
+ const { status, diagnostics } = presentation;
67
+ const href = assignment.primaryAction?.code === 'open-result' && options.resultHref !== undefined ? options.resultHref : assignmentActionHref(assignment);
68
+ const attention = presentation.attention.map(one => one.detail);
69
+ const notices = [...attention, ...diagnostics.map(one => one.detail)].filter(one => savedMaterialNotice(one, assignment) !== null);
70
+ const partial = notices.some(one => savedMaterialNotice(one, assignment) === 'partial');
71
+ const history = notices.some(one => savedMaterialNotice(one, assignment) === 'history');
72
+ const ready = assignment.state === "ready-to-check" || assignment.state === "complete";
73
+ const checkProblem = ready && assignment.receipt !== null && assignment.receipt.completionKind !== 'research-report' && assignment.receipt.checks.status !== 'passed';
74
+ return {
75
+ token: status.token, tone: status.tone, label: status.label,
76
+ action: options.hideAction || href === null ? null : { label: assignment.primaryAction.label, href, openResult: options.resultHref !== undefined },
77
+ // A good outcome at a glance; the same words stay in the result.
78
+ passed: ready && !checkProblem && assignment.receipt !== null && assignment.receipt.checks.status === 'passed'
79
+ ? { by: assignment.completion === null ? null : assignment.completion.actor.replace(/^(?:operator|coordinator|lead):/, '') } : null,
80
+ detail: { text: assignment.detail, problem: checkProblem || options.problem === true && !ready },
81
+ problems: attention.filter(one => savedMaterialNotice(one, assignment) === null),
82
+ diagnostics: diagnostics.filter(one => savedMaterialNotice(one.detail, assignment) === null)
83
+ .map(one => ({ token: one.token, label: one.label, detail: one.detail, problem: one.tone === 'problem' || one.tone === 'attention' })),
84
+ notices: notices.length === 0 ? null : { summary: [partial ? 'Saved output is partial' : '', history ? 'Earlier material unavailable' : ''].filter(Boolean).join(' · '), lines: [...new Set(notices)] },
85
+ attempts: assignmentAttemptsOf(assignment),
86
+ lead: assignment.owner === null ? null : { label: assignment.owner.label, active: assignment.owner.active },
87
+ };
88
+ }
89
+ export function assignmentSummaryHtml(assignment, options = {}) {
90
+ const card = assignmentCardOf(assignment, options);
91
+ return `<section class="${options.compact ? 'assignment-summary' : 'card assignment-summary'}" aria-label="assignment progress" data-assignment="${escape(assignment.rootId)}" data-work-status="${card.token}" data-tone="${card.tone}"${options.compact ? '' : ' data-task-status'}>` +
92
+ (options.compact ? `<span class="status-line" data-work-status="${card.token}" data-tone="${card.tone}"><i class="status-dot" aria-hidden="true"></i><span class="status-label">${card.label}</span></span>` : `<h2 class="assignment-state">${card.label}</h2>`) +
93
+ (card.action === null ? '' : `<a class="${options.compact ? 'work-action' : 'button-link'}" href="${escape(card.action.href)}"${card.action.openResult ? ' data-open-result' : ''}${options.compact ? '' : ' data-primary-action'}>${escape(card.action.label)}${options.compact ? ' →' : ''}</a>`) +
94
+ (!options.compact && card.passed !== null
95
+ ? `<p class="meta assignment-detail assignment-verdict"><span class="verdict-chip verdict-chip--success">Checks passed</span>${card.passed.by === null ? '' : ` Completed by ${escape(card.passed.by)}`}</p>`
96
+ : `<p class="${card.detail.problem ? 'problem' : 'meta'} assignment-detail">${escape(card.detail.text)}</p>`) +
97
+ card.problems.map(one => `<p class="problem">${escape(one)}</p>`).join('') +
98
+ card.diagnostics.map(one => `<p class="${one.problem ? 'problem' : 'meta'}" data-work-diagnostic="${escape(one.token)}">${escape(one.label)} · ${escape(one.detail)}</p>`).join('') +
99
+ (card.notices === null ? '' : `<details class="assignment-notices"><summary>${card.notices.summary}</summary>${card.notices.lines.map(one => `<p class="meta">${escape(one)}</p>`).join('')}</details>`) +
100
+ assignmentAttemptsHtml(assignment) + `</section>`;
101
+ }
102
+ /** Shared assignment layout; actions remain comfortable on touch screens. */
103
+ export const ASSIGNMENT_CSS = `.assignment-summary{min-width:0;overflow-wrap:anywhere}.assignment-summary .assignment-state{font-weight:600;margin:0}.assignment-summary h2.assignment-state{font-size:1.125rem;color:var(--foreground)}.assignment-summary>.assignment-attempts,.assignment-summary>.assignment-notices{border:0;box-shadow:none;padding:0;margin:.25rem 0 0;background:transparent}.assignment-summary>.button-link{margin-top:.7rem;min-height:44px}.assignment-summary>.work-action{display:inline-flex;margin-inline-start:.6rem;min-height:44px;align-items:center}.assignment-detail{margin:.55rem 0}.assignment-attempts summary,.assignment-notices summary{min-height:44px;display:list-item;align-content:center;cursor:pointer}.assignment-notices summary{font-size:.8125rem;color:var(--foreground)}.assignment-notices p{margin:.25rem 0 .5rem}.assignment-attempts ol{padding-left:1.4rem}.assignment-attempts li{margin:.4rem 0}.assignment-attempts li a{display:inline-flex;align-items:center;min-height:44px;margin-right:.7rem}.assignment-attempts li p{margin:0 0 .4rem}`;
@@ -0,0 +1,222 @@
1
+ import { type Store, type ProofVerdictRow, type ProofAcceptanceRow } from "./store.js";
2
+ import { type WorkAction, type WorkSummaryAccess } from "./work-summary.js";
3
+ import { type VerifiedApprover } from "./principal.js";
4
+ export type AssignmentAccess = WorkSummaryAccess;
5
+ export type AssignmentOwner = {
6
+ kind: "coordinator" | "lead";
7
+ id: string;
8
+ label: string;
9
+ };
10
+ export type AssignmentChecks = {
11
+ status: "passed" | "failed" | "not-run" | "unavailable";
12
+ exitCode: number | null;
13
+ command: string | null;
14
+ logArtifactId: number | null;
15
+ detail: string;
16
+ };
17
+ export type AssignmentReceipt = {
18
+ digest: string;
19
+ rootId: string;
20
+ taskId: string;
21
+ runId: number;
22
+ base: string | null;
23
+ head: string | null;
24
+ scopeDigest: string | null;
25
+ proof: ProofVerdictRow | null;
26
+ completionKind: "verified-build" | "checked-build" | "finished-build" | "research-report" | "accepted-exception" | null;
27
+ proofAcceptance: ProofAcceptanceRow | null;
28
+ checks: AssignmentChecks;
29
+ artifacts: {
30
+ id: number;
31
+ kind: string;
32
+ sha256: string;
33
+ bytes: number;
34
+ complete: boolean;
35
+ }[];
36
+ caveats: string[];
37
+ agentReport: string | null;
38
+ evidence: "recorded";
39
+ };
40
+ export type AssignmentSnapshot = {
41
+ version: 1;
42
+ rootId: string;
43
+ activeTaskId: string;
44
+ repo: string | null;
45
+ title: string;
46
+ state: "working" | "checking" | "needs-decision" | "ready-to-check" | "complete" | "cancelled";
47
+ detail: string;
48
+ primaryAction: WorkAction | null;
49
+ attention: string[];
50
+ attempts: {
51
+ taskId: string;
52
+ runId: number | null;
53
+ label: string;
54
+ detail: string;
55
+ }[];
56
+ owner: (AssignmentOwner & {
57
+ active: boolean;
58
+ }) | null;
59
+ receipt: AssignmentReceipt | null;
60
+ savedContext?: {
61
+ goal: string | null;
62
+ outOfScope: string | null;
63
+ excerpts: {
64
+ artifactId: number;
65
+ runId: number;
66
+ kind: string;
67
+ sha256: string;
68
+ text: string | null;
69
+ shortened: boolean;
70
+ problem: string | null;
71
+ }[];
72
+ };
73
+ completion: {
74
+ actor: string;
75
+ at: string;
76
+ digest: string;
77
+ } | null;
78
+ handoff: {
79
+ kind: "result" | "decision" | "attention";
80
+ digest: string;
81
+ acknowledged: boolean;
82
+ } | null;
83
+ publication: {
84
+ state: string;
85
+ prUrl: string | null;
86
+ remoteState: string | null;
87
+ } | null;
88
+ deployment: {
89
+ status: "not-recorded";
90
+ };
91
+ };
92
+ /** Status-first handoff for routine reads. Fetch get_assignment only when
93
+ * inspecting its exact evidence; do not repeat a full proof in every poll. */
94
+ export declare function assignmentBrief(assignment: AssignmentSnapshot | null): {
95
+ version: 1;
96
+ rootId: string;
97
+ activeTaskId: string;
98
+ state: "cancelled" | "checking" | "complete" | "needs-decision" | "ready-to-check" | "working";
99
+ detail: string;
100
+ owner: (AssignmentOwner & {
101
+ active: boolean;
102
+ }) | null;
103
+ primaryAction: WorkAction | null;
104
+ attention: string[];
105
+ attempts: number;
106
+ handoff: {
107
+ kind: "result" | "decision" | "attention";
108
+ digest: string;
109
+ acknowledged: boolean;
110
+ } | null;
111
+ completion: {
112
+ actor: string;
113
+ at: string;
114
+ digest: string;
115
+ } | null;
116
+ result: {
117
+ digest: string;
118
+ taskId: string;
119
+ runId: number;
120
+ base: string | null;
121
+ head: string | null;
122
+ completionKind: "accepted-exception" | "checked-build" | "finished-build" | "research-report" | "verified-build" | null;
123
+ checks: AssignmentChecks;
124
+ proofAcceptance: ProofAcceptanceRow | null;
125
+ verdict: "attested" | "refuted" | "short" | "verified" | null;
126
+ criteria: {
127
+ passed: number;
128
+ total: number;
129
+ };
130
+ evidence: "recorded";
131
+ } | null;
132
+ publication: {
133
+ state: string;
134
+ prUrl: string | null;
135
+ remoteState: string | null;
136
+ } | null;
137
+ deployment: {
138
+ status: "not-recorded";
139
+ };
140
+ } | null;
141
+ export declare function assignmentOf(store: Store, taskId: string, now: Date, access: AssignmentAccess, root?: string): AssignmentSnapshot | null;
142
+ type MutationResult = {
143
+ ok: true;
144
+ assignment: AssignmentSnapshot;
145
+ } | {
146
+ ok: false;
147
+ reason: string;
148
+ message: string;
149
+ };
150
+ export declare function claimAssignment(store: Store, taskId: string, owner: AssignmentOwner, now: Date, root?: string): MutationResult;
151
+ /** Diagnostic only: artifact availability does not authorize or block a human
152
+ * handoff. Deployment independently validates its actual native check. */
153
+ export declare function assignmentEvidenceIntact(store: Store, root: string, receipt: AssignmentReceipt): boolean;
154
+ export declare function checkAssignment(store: Store, taskId: string, receiptDigest: string, owner: AssignmentOwner, now: Date, root?: string): MutationResult;
155
+ /** The signed-in user can mark the same exact receipt handled without taking
156
+ * lead ownership. This records review, never check success or new authority. */
157
+ export declare function checkAssignmentAsOperator(store: Store, taskId: string, receiptDigest: string, who: VerifiedApprover, now: Date, root?: string): MutationResult;
158
+ /** The ordinary worker reconciles at most 50 owned roots per pass. A lost
159
+ * wakeup is recovered after restart; immutable notification keys dedupe it. */
160
+ export declare function syncAssignmentHandoffs(store: Store, now: Date, repos: readonly string[], root?: string): void;
161
+ export declare function assignmentUpdates(store: Store, now: Date, access: AssignmentAccess, query: {
162
+ after: number;
163
+ limit: number;
164
+ }, root?: string): {
165
+ events: {
166
+ id: number;
167
+ createdAt: string;
168
+ rootId: string;
169
+ digest: string;
170
+ superseded: boolean;
171
+ assignment: {
172
+ version: 1;
173
+ rootId: string;
174
+ activeTaskId: string;
175
+ state: "cancelled" | "checking" | "complete" | "needs-decision" | "ready-to-check" | "working";
176
+ detail: string;
177
+ owner: (AssignmentOwner & {
178
+ active: boolean;
179
+ }) | null;
180
+ primaryAction: WorkAction | null;
181
+ attention: string[];
182
+ attempts: number;
183
+ handoff: {
184
+ kind: "result" | "decision" | "attention";
185
+ digest: string;
186
+ acknowledged: boolean;
187
+ } | null;
188
+ completion: {
189
+ actor: string;
190
+ at: string;
191
+ digest: string;
192
+ } | null;
193
+ result: {
194
+ digest: string;
195
+ taskId: string;
196
+ runId: number;
197
+ base: string | null;
198
+ head: string | null;
199
+ completionKind: "accepted-exception" | "checked-build" | "finished-build" | "research-report" | "verified-build" | null;
200
+ checks: AssignmentChecks;
201
+ proofAcceptance: ProofAcceptanceRow | null;
202
+ verdict: "attested" | "refuted" | "short" | "verified" | null;
203
+ criteria: {
204
+ passed: number;
205
+ total: number;
206
+ };
207
+ evidence: "recorded";
208
+ } | null;
209
+ publication: {
210
+ state: string;
211
+ prUrl: string | null;
212
+ remoteState: string | null;
213
+ } | null;
214
+ deployment: {
215
+ status: "not-recorded";
216
+ };
217
+ };
218
+ }[];
219
+ nextCursor: number;
220
+ hasMore: boolean;
221
+ };
222
+ export {};