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,133 @@
1
+ /** Motion adapts presentation only. Native navigation, forms and tab state
2
+ * remain owned by their existing handlers. No network or credential access. */
3
+ export const WORKSPACE_MOTION_CSS = String.raw `
4
+ :root {
5
+ --panel-open-dur: 250ms;
6
+ --panel-close-dur: 150ms;
7
+ --panel-translate-y: 8px;
8
+ --panel-blur: 0px;
9
+ --tabs-text-muted: var(--muted-foreground);
10
+ --tabs-text-active: var(--foreground);
11
+ --tabs-bar-bg: transparent;
12
+ --tabs-pill-bg: var(--foreground);
13
+ }
14
+ /* Keep the existing underline tabs and 44px controls, not the demo's pill. */
15
+ .result-tabs.t-tabs { display: flex; padding: 0; border-radius: 0; background: transparent; }
16
+ .result-tabs .t-tab { height: auto; min-height: 44px; border-radius: 0; }
17
+ .result-tabs.t-tabs a[aria-selected="true"] { border-bottom-color: transparent; }
18
+ .result-tabs .t-tabs-pill { top: auto; bottom: 0; height: 2px; border-radius: 0; }
19
+ .t-acc-panel-inner { min-height: 0; }
20
+ .t-acc .t-acc-panel-inner { filter: none; }
21
+ .t-acc[data-open="false"] > .t-acc-panel { grid-template-rows: 0fr; }
22
+ .t-acc[data-open="false"] > .t-acc-panel > .t-acc-panel-inner { opacity: 0; }
23
+ .t-acc > summary { cursor: pointer; }
24
+ .t-acc > summary .t-acc-chevron { width: 14px; height: 14px; margin-left: .4rem; }
25
+ .t-acc > summary .t-acc-chevron svg { width: 100%; height: 100%; }
26
+ .t-acc > summary::before, .t-acc > summary::after { content: none !important; }
27
+ .t-acc > summary::-webkit-details-marker { display: none; }
28
+ .t-acc > summary { list-style: none; }
29
+ .switcher[open] .switcher-menu.t-dropdown { animation: none; }
30
+ /* Cross-document entry/exit: links and POSTs are never held for motion.
31
+ * Unsupported browsers keep normal, immediate navigation. */
32
+ .chat-result { view-transition-name: so-result; }
33
+ ::view-transition-old(so-result) { animation: result-leave var(--panel-close-dur) var(--panel-ease) both; }
34
+ ::view-transition-new(so-result) { animation: result-enter var(--panel-open-dur) var(--panel-ease) both; }
35
+ @keyframes result-enter { from { opacity: 0; transform: translateY(var(--panel-translate-y)); } }
36
+ @keyframes result-leave { to { opacity: 0; transform: translateY(var(--panel-translate-y)); } }
37
+ @media (prefers-reduced-motion: reduce) {
38
+ ::view-transition-old(so-result), ::view-transition-new(so-result) { animation: none !important; }
39
+ }
40
+ `;
41
+ export const WORKSPACE_MOTION_SCRIPT = String.raw `
42
+ (function(){
43
+ var reduced=window.matchMedia('(prefers-reduced-motion: reduce)');
44
+ var closers=new WeakMap();
45
+ function duration(name,fallback){
46
+ if(reduced.matches)return 0;
47
+ var raw=getComputedStyle(document.documentElement).getPropertyValue(name).trim();
48
+ var n=parseFloat(raw);return Number.isFinite(n)?n*(raw.endsWith('ms')?1:1000):fallback;
49
+ }
50
+ function enhanceDetails(details,menu){
51
+ if(details.dataset.motionReady)return;
52
+ var head=details.querySelector(':scope > summary');if(!head)return;
53
+ var panel,inner;
54
+ if(menu){
55
+ panel=details.querySelector(':scope > .switcher-menu, :scope > .work-tools-menu');if(!panel)return;
56
+ inner=panel;panel.classList.add('t-dropdown');panel.dataset.origin='top-left';
57
+ }else{
58
+ panel=document.createElement('div');panel.className='t-acc-panel';
59
+ inner=document.createElement('div');inner.className='t-acc-panel-inner';
60
+ Array.from(details.childNodes).forEach(function(node){if(node!==head)inner.appendChild(node);});
61
+ panel.appendChild(inner);details.appendChild(panel);details.classList.add('t-acc');
62
+ var chevron=document.createElement('span');chevron.className='t-acc-chevron';chevron.setAttribute('aria-hidden','true');
63
+ chevron.innerHTML='<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M4 6.5L8 10.5L12 6.5"/></svg>';
64
+ // Use the existing icon when present, rather than rendering two.
65
+ var old=head.querySelector(':scope > svg');if(old)old.remove();head.appendChild(chevron);
66
+ }
67
+ details.dataset.motionReady='true';
68
+ var timer=null,closing=false;
69
+ function paint(open){
70
+ details.dataset.open=String(open);head.setAttribute('aria-expanded',String(open));inner.inert=!open;
71
+ if(menu){panel.classList.toggle('is-open',open);if(open)panel.classList.remove('is-closing');}
72
+ }
73
+ function cancel(){if(timer!==null)clearTimeout(timer);timer=null;}
74
+ function finish(){closing=false;details.open=false;panel.classList.remove('is-closing');timer=null;paint(false);}
75
+ function open(){
76
+ cancel();closing=false;details.open=true;paint(false);panel.classList.remove('is-closing');
77
+ void panel.offsetHeight;paint(true);
78
+ }
79
+ function close(){
80
+ cancel();closing=true;
81
+ if(inner.contains(document.activeElement))head.focus();
82
+ paint(false);if(menu)panel.classList.add('is-closing');
83
+ var ms=duration(menu?'--dropdown-close-dur':'--acc-collapse',menu?150:250);
84
+ if(ms===0)finish();else timer=setTimeout(finish,ms);
85
+ }
86
+ paint(details.open);
87
+ head.addEventListener('click',function(ev){
88
+ if(ev.defaultPrevented||ev.ctrlKey||ev.metaKey||ev.altKey||ev.shiftKey||ev.button!==0)return;
89
+ if(ev.target.closest('a,button,input,select,textarea'))return;
90
+ ev.preventDefault();if(details.open&&!closing)close();else open();
91
+ });
92
+ // External close (Escape/outside click/group exclusivity) stays immediate.
93
+ details.addEventListener('toggle',function(){
94
+ if(!details.open){cancel();closing=false;panel.classList.remove('is-closing');paint(false);}
95
+ else if(!closing)paint(true);
96
+ });
97
+ closers.set(details,function(){if(closing){cancel();finish();}});
98
+ }
99
+ function enhanceTabs(bar){
100
+ if(bar.dataset.motionReady)return;
101
+ var tabs=Array.from(bar.querySelectorAll('[data-result-tab]'));if(!tabs.length)return;
102
+ bar.dataset.motionReady='true';bar.classList.add('t-tabs');
103
+ var pill=document.createElement('span');pill.className='t-tabs-pill';pill.setAttribute('aria-hidden','true');bar.prepend(pill);
104
+ tabs.forEach(function(tab){tab.classList.add('t-tab');});
105
+ function move(animate){
106
+ var tab=tabs.find(function(t){return t.getAttribute('aria-selected')==='true';})||tabs[0];
107
+ var prev=pill.style.transition;
108
+ if(!animate)pill.style.transition='none';
109
+ pill.style.transform='translateX('+tab.offsetLeft+'px)';pill.style.width=tab.offsetWidth+'px';
110
+ if(!animate){void pill.offsetWidth;pill.style.transition=prev;}
111
+ }
112
+ // Selection and keyboard behavior remain in RESULT_REVIEW_SCRIPT.
113
+ new MutationObserver(function(){move(!reduced.matches);}).observe(bar,{subtree:true,attributes:true,attributeFilter:['aria-selected']});
114
+ move(false);
115
+ if(typeof ResizeObserver!=='undefined')new ResizeObserver(function(){move(false);}).observe(bar);
116
+ else window.addEventListener('resize',function(){move(false);});
117
+ }
118
+ function scan(){
119
+ document.querySelectorAll('details.switcher,details.work-tools').forEach(function(d){enhanceDetails(d,true);});
120
+ document.querySelectorAll('details.nav-group,details.task-history,details.decision-context,details.result-knowledge,details.chat-activity-details,details.result-pin,details.result-notes,details.result-details').forEach(function(d){enhanceDetails(d,false);});
121
+ document.querySelectorAll('.result-tabs').forEach(enhanceTabs);
122
+ }
123
+ scan();
124
+ reduced.addEventListener('change',function(){if(reduced.matches)document.querySelectorAll('details[data-motion-ready]').forEach(function(d){var finish=closers.get(d);if(finish)finish();});});
125
+ // Live chat can insert new disclosures. Only enhance fresh nodes; never
126
+ // replace content or read field values, and never restart existing motion.
127
+ var queued=false;
128
+ new MutationObserver(function(records){
129
+ if(queued||!records.some(function(r){return r.addedNodes.length>0;}))return;
130
+ queued=true;queueMicrotask(function(){queued=false;scan();});
131
+ }).observe(document.body,{childList:true,subtree:true});
132
+ })();
133
+ `;
@@ -0,0 +1,19 @@
1
+ import type { Store } from './store.js';
2
+ export type WorkspaceRevision = {
3
+ current(): string;
4
+ expiresAt(now: Date): number;
5
+ };
6
+ type WorkspaceValidator = {
7
+ etag: string;
8
+ revision: string;
9
+ expiresAt: number;
10
+ };
11
+ /** Per-server response metadata. Reads preserve insertion order; writes at
12
+ * capacity discard the oldest key before storing the supplied validator. */
13
+ export declare class WorkspaceValidatorCache {
14
+ private readonly entries;
15
+ get(key: string): WorkspaceValidator | undefined;
16
+ set(key: string, validator: WorkspaceValidator): void;
17
+ }
18
+ export declare function prepareWorkspaceRevision(store: Store): WorkspaceRevision;
19
+ export {};
@@ -0,0 +1,92 @@
1
+ /** Durable invalidation for authenticated workspace reads. This is cache
2
+ * metadata only: it never grants access or certifies task/process state. */
3
+ import { createHash } from 'node:crypto';
4
+ import { DEFAULT_LIVENESS_MS } from './runner.js';
5
+ const KEY = 'workspace-content:v1';
6
+ const PREFIX = 'workspace_revision_v1_';
7
+ const MAX_AGE_MS = 60_000;
8
+ const OMIT = new Set(['schema_version', 'service_cursor', 'wake', 'notification_delivery',
9
+ 'team_read', 'team_request', 'push_delivery', 'telegram_update', 'telegram_outbound_message', 'telegram_retry', 'bridge_lease']);
10
+ const QUIET = {
11
+ runner: ['heartbeat_at'], claim: ['heartbeat_at', 'expires_at'], watch_lease: ['heartbeat_at', 'expires_at'],
12
+ watch_episode: ['ticks'], provider_readiness: ['observed_at'],
13
+ };
14
+ const identifier = (name) => `"${name.replaceAll('"', '""')}"`;
15
+ /** Per-server response metadata. Reads preserve insertion order; writes at
16
+ * capacity discard the oldest key before storing the supplied validator. */
17
+ export class WorkspaceValidatorCache {
18
+ entries = new Map();
19
+ get(key) { return this.entries.get(key); }
20
+ set(key, validator) {
21
+ if (this.entries.size >= 256)
22
+ this.entries.delete(this.entries.keys().next().value);
23
+ this.entries.set(key, validator);
24
+ }
25
+ }
26
+ export function prepareWorkspaceRevision(store) {
27
+ const db = store.raw();
28
+ const bump = `INSERT INTO service_cursor(key,value,updated_at) VALUES ('${KEY}',1,strftime('%Y-%m-%dT%H:%M:%fZ','now'))
29
+ ON CONFLICT(key) DO UPDATE SET value=service_cursor.value+1,updated_at=excluded.updated_at;`;
30
+ const wanted = new Map();
31
+ // Virtual tables (the FTS5 memory index) cannot carry triggers, and their
32
+ // shadow tables are derived views rebuilt from the stores of record.
33
+ const tables = db.prepare("SELECT name FROM sqlite_schema WHERE type='table' AND name NOT LIKE 'sqlite_%' AND sql NOT LIKE 'CREATE VIRTUAL%' AND name NOT LIKE 'memory_search%'").all();
34
+ for (const row of tables) {
35
+ const table = String(row['name']);
36
+ if (OMIT.has(table))
37
+ continue;
38
+ const columns = db.prepare(`PRAGMA table_info(${identifier(table)})`).all().map(column => String(column['name']));
39
+ const meaningful = columns.filter(column => !QUIET[table]?.includes(column));
40
+ const changes = meaningful.map(column => `OLD.${identifier(column)} IS NOT NEW.${identifier(column)}`);
41
+ // A routine beat is quiet, but a revival after a liveness/lease gap must
42
+ // invalidate an already-rendered "offline" view immediately.
43
+ if (table === 'runner')
44
+ changes.push(`NEW.heartbeat_at < OLD.heartbeat_at OR NEW.heartbeat_at >= strftime('%Y-%m-%dT%H:%M:%fZ',OLD.heartbeat_at,'+${DEFAULT_LIVENESS_MS / 1000} seconds')`);
45
+ if (table === 'claim' || table === 'watch_lease')
46
+ changes.push('NEW.heartbeat_at >= OLD.expires_at');
47
+ for (const event of ['INSERT', 'UPDATE', 'DELETE']) {
48
+ const guard = event === 'UPDATE' ? ` WHEN ${changes.join(' OR ')}` : '';
49
+ const body = `AFTER ${event} ON ${identifier(table)}${guard} BEGIN ${bump} END`;
50
+ const digest = createHash('sha256').update(body).digest('hex').slice(0, 16);
51
+ wanted.set(`${PREFIX}${table}_${event.toLowerCase()}_${digest}`, body);
52
+ }
53
+ }
54
+ // Only DDL and one metadata row are written here; no task/history scan or
55
+ // backfill holds the writer. Existing installations perform no DDL writes.
56
+ store.transact(() => {
57
+ const existing = db.prepare("SELECT name FROM sqlite_schema WHERE type='trigger' AND name LIKE ?").all(`${PREFIX}%`);
58
+ const installed = new Set(existing.map(row => String(row['name'])).filter(name => name.startsWith(PREFIX)));
59
+ for (const name of installed)
60
+ if (!wanted.has(name))
61
+ db.exec(`DROP TRIGGER ${identifier(name)}`);
62
+ for (const [name, body] of wanted)
63
+ if (!installed.has(name))
64
+ db.exec(`CREATE TRIGGER ${identifier(name)} ${body}`);
65
+ db.prepare('INSERT OR IGNORE INTO service_cursor(key,value,updated_at) VALUES (?,0,?)').run(KEY, new Date().toISOString());
66
+ });
67
+ const current = db.prepare('SELECT CAST(value AS TEXT) AS value FROM service_cursor WHERE key = ?');
68
+ const boundary = db.prepare(`SELECT MIN(at) AS at FROM (
69
+ SELECT MIN(expires_at) AS at FROM claim WHERE released_at IS NULL AND expires_at > ?
70
+ UNION ALL SELECT MIN(until) FROM hold WHERE until > ?
71
+ UNION ALL SELECT MIN(absolute_expiry) FROM operating_mode WHERE revoked_at IS NULL AND absolute_expiry > ?
72
+ UNION ALL SELECT MIN(strftime('%Y-%m-%dT%H:%M:%fZ',heartbeat_at,'+${DEFAULT_LIVENESS_MS / 1000} seconds')) FROM runner
73
+ WHERE retired_at IS NULL AND strftime('%Y-%m-%dT%H:%M:%fZ',heartbeat_at,'+${DEFAULT_LIVENESS_MS / 1000} seconds') >= ?
74
+ UNION ALL SELECT MIN(expires_at) FROM watch_lease WHERE expires_at > ?
75
+ UNION ALL SELECT MIN(expires_at) FROM capability WHERE expires_at > ?
76
+ UNION ALL SELECT MIN(reset_at) FROM quota WHERE reset_at > ?
77
+ )`);
78
+ return {
79
+ current() {
80
+ const value = current.get(KEY)?.['value'];
81
+ if (typeof value !== 'string' || !/^\d+$/.test(value))
82
+ throw new Error('Workspace revision is unavailable');
83
+ return `v1:${value}`;
84
+ },
85
+ expiresAt(now) {
86
+ const iso = now.toISOString();
87
+ const value = boundary.get(iso, iso, iso, iso, iso, iso, iso)?.['at'];
88
+ const at = typeof value === 'string' ? Date.parse(value) : NaN;
89
+ return Math.min(now.getTime() + MAX_AGE_MS, Number.isFinite(at) ? at : Infinity);
90
+ },
91
+ };
92
+ }
@@ -0,0 +1,204 @@
1
+ /**
2
+ * The workspace's ONE display projection (package 1, 2026-09-13): the
3
+ * words, tone, and next action a task or result wears on every surface —
4
+ * Work rows, the task page's status box, the focused chat's journey card,
5
+ * the review cockpit's chip, and the completion receipt's heading. Pure
6
+ * functions over facts the store already records (task state, the dispatch
7
+ * diagnosis, the machine's proof verdict and its reasons, an operator's
8
+ * acceptance, the publication row); nothing here is a second lifecycle,
9
+ * and nothing here reads the agent's narrative as evidence of success.
10
+ *
11
+ * The vocabulary is the truthful-status contract from the workspace plan:
12
+ * a saved result with a failed check says "Changes saved, but checks
13
+ * failed"; a missing proof says "verification needed"; agent-reported
14
+ * checks say so; an accepted exception stays an exception; and nothing
15
+ * local is ever called shipped or deployed — "PR opened" and "Merge
16
+ * observed" name observed publication records, and deployment is never
17
+ * claimed without one.
18
+ */
19
+ import type { DispatchDiagnosis } from "./dispatch.js";
20
+ import { type ProofVerdict } from "./proof.js";
21
+ import type { ReviewRetryState, TaskState } from "./store.js";
22
+ import type { TaskControlView } from "./task-control.js";
23
+ /** The Work destination's views — shortcuts over the same rows, never a
24
+ * persisted state. All is the default. */
25
+ export type WorkView = "all" | "needs-you" | "running" | "completed";
26
+ export declare const WORK_VIEWS: readonly {
27
+ key: WorkView;
28
+ label: string;
29
+ hint: string;
30
+ empty: string;
31
+ }[];
32
+ export declare function parseWorkView(raw: string | null): WorkView;
33
+ /** The finished result's recorded facts, as `taskViewData`, dispatch, and
34
+ * the completed-work query already read them. */
35
+ export type ResultFacts = {
36
+ runId: number | null;
37
+ /** The result run's role — a scout delivers a report, not a diff. */
38
+ role: string | null;
39
+ outcome: string | null;
40
+ verdict: ProofVerdict | null;
41
+ reasons: readonly string[];
42
+ accepted: boolean;
43
+ /** A no-change conclusion's two presence facts (handoff + sealed diff);
44
+ * undefined when the caller did not read them. */
45
+ recordComplete?: boolean;
46
+ /** This exact run's independent review (v50 retry projection), read
47
+ * per run so an older selected result keeps its own words; undefined
48
+ * when the caller did not read it, null when never requested. */
49
+ review?: ReviewFacts | null;
50
+ };
51
+ /** The result's review facts as `reviewRetryStateOf` records them, plus
52
+ * the one liveness fact the words depend on. */
53
+ export type ReviewFacts = {
54
+ state: ReviewRetryState["state"];
55
+ /** The attempt in play: the next ordinal while queued, else the live or
56
+ * latest attempt's. */
57
+ attempt: number | null;
58
+ cap: number;
59
+ attempts: number;
60
+ retriesRemaining: number;
61
+ latestReason: string | null;
62
+ interrupted: boolean;
63
+ /** Who asked for the open (queued) request, when one is open. */
64
+ queuedBy: string | null;
65
+ queuedOrigin?: "operator" | "automatic" | null;
66
+ /** Whether the live attempt's reviewer worker is answering. */
67
+ reviewerAlive: boolean;
68
+ };
69
+ /** The review facts from the store's bounded retry projection — the same
70
+ * reading `diagnoseTaskDispatch` makes, so every surface starts from one
71
+ * record. `reviewerAlive` answers for the live attempt's runner. */
72
+ export declare function reviewFactsOf(retry: ReviewRetryState | null, reviewerAlive: (runner: string) => boolean): ReviewFacts | null;
73
+ /** The tokens a review in flight wears — the dispatch codes, unchanged. */
74
+ export declare const REVIEW_TOKENS: ReadonlySet<string>;
75
+ /**
76
+ * A review that is queued, running, failed with a retry left, or
77
+ * exhausted is the result's PRIMARY status — the machine is still
78
+ * deciding, and every surface must say so with the same words. A review
79
+ * never requested, or one that succeeded, adds nothing: the stored verdict
80
+ * (folded by the review where one landed) speaks. Words and tokens are
81
+ * the v50 dispatch contract; nothing here changes the lifecycle.
82
+ */
83
+ export declare function reviewStatusOf(review: ReviewFacts | null): DisplayStatus | null;
84
+ export type PublicationFacts = {
85
+ state: string;
86
+ prNumber: number | null;
87
+ prUrl: string | null;
88
+ remoteState: string | null;
89
+ lastCheckState: string | null;
90
+ } | null;
91
+ export type StatusTone = "attention" | "problem" | "live" | "ready" | "done" | "muted" | "neutral";
92
+ export type NextAction = {
93
+ label: string;
94
+ /** Where the act lives — the page, not a URL, so every surface can
95
+ * build its own link (a task page anchors, a row links out). */
96
+ kind: "open-result" | "open-review" | "open-task" | "open-run" | "open-pr";
97
+ };
98
+ export type DisplayStatus = {
99
+ /** The stable `data-work-status` token pages and tests key off. */
100
+ token: string;
101
+ /** The main wording — the same words on every surface. */
102
+ label: string;
103
+ /** One plain sentence: the real reason when one is recorded, never an
104
+ * invented cause, repair, retry time, or percentage. */
105
+ detail: string;
106
+ tone: StatusTone;
107
+ action: NextAction | null;
108
+ };
109
+ /** What kind of evidence problem a verdict records: a check the machine
110
+ * actually ran and saw fail, evidence that contradicts the sealed record
111
+ * (a mismatched changed-path claim, an altered criterion, a caveat that
112
+ * contradicts a met verdict), or evidence that is simply absent. A generic
113
+ * refuted verdict is NOT a failed test claim — only the verify-command
114
+ * reasons say a check failed. */
115
+ export type EvidenceProblem = "checks-failed" | "mismatched" | "missing" | "none";
116
+ export declare function evidenceProblemOf(verdict: ProofVerdict | null, reasons: readonly string[]): EvidenceProblem;
117
+ /** The exit code of the failed check, when the recorded reason names one. */
118
+ export declare function failedCheckExit(reasons: readonly string[]): number | null;
119
+ /** The observed publication record in words. Each state is a distinct
120
+ * fact: a pushed branch is not a PR, an open PR is not a merge, and a
121
+ * merge is not a deployment — no record here ever says "deployed". The
122
+ * words name what was recorded or last observed and what stays
123
+ * unconfirmed; a missing or stale observation never proves that nothing
124
+ * merged or deployed, and merging is never called manual-only — an
125
+ * authorized mode may merge on green. */
126
+ export declare function publicationStatusOf(publication: PublicationFacts): {
127
+ token: string;
128
+ label: string;
129
+ detail: string;
130
+ } | null;
131
+ /**
132
+ * The finished result's status — the one place the done words are chosen.
133
+ * Precedence: no record → scout report → operator acceptance → the machine
134
+ * verdict's problems (a refuted or short verdict is never masked by a
135
+ * no-change outcome) → a no-change conclusion, which owes no proof beyond
136
+ * its handoff and sealed diff → agent-attested → verified, where an
137
+ * observed publication names itself (a published but unverified result
138
+ * keeps its evidence problem as the main wording; the publication rides
139
+ * the detail).
140
+ */
141
+ export declare function resultStatusOf(result: ResultFacts | null, publication?: PublicationFacts): DisplayStatus;
142
+ /** The completion receipt's heading: what the record actually supports.
143
+ * Never "shipped" — local changes are saved; a PR or merge is named only
144
+ * from its observed record. */
145
+ export declare function receiptHeadingOf(outcome: string | null, publication: PublicationFacts, role?: string | null): string;
146
+ /** The receipt's one-line publication fact under the heading. */
147
+ export declare function receiptPublicationWords(publication: PublicationFacts): string;
148
+ /** Everything one Work row needs, gathered by the server from records it
149
+ * already reads elsewhere. */
150
+ export type WorkFacts = {
151
+ id: string;
152
+ title: string;
153
+ repo: string | null;
154
+ state: TaskState;
155
+ updatedAt: string;
156
+ dispatch: DispatchDiagnosis | null;
157
+ result: ResultFacts | null;
158
+ publication: PublicationFacts;
159
+ liveRunId: number | null;
160
+ /** The unfinished recorded attempt, even if its claim disappeared. */
161
+ unfinishedRunId?: number | null;
162
+ control?: TaskControlView;
163
+ /** An unanswered question on this exact task, read from the decision
164
+ * owner. An elapsed attention deadline does not close a question. */
165
+ openDecision?: {
166
+ id: number;
167
+ runId: number;
168
+ question: string;
169
+ overdue: boolean;
170
+ } | null;
171
+ };
172
+ export type WorkStatus = DisplayStatus & {
173
+ /** Which shortcut views list this row; `all` always does. */
174
+ views: readonly WorkView[];
175
+ /** The rank All sorts by: what needs a person first, then live work,
176
+ * then queued and waiting, then finished, then cancelled. */
177
+ rank: number;
178
+ /** Facts that remain visible when a more useful next action leads. */
179
+ diagnostics?: readonly Pick<DisplayStatus, "token" | "label" | "detail" | "tone">[];
180
+ };
181
+ /** Needs you: the existing diagnosis semantics — waiting on a person with a
182
+ * concrete act — never every queued task indiscriminately. */
183
+ export declare function needsPerson(dispatch: DispatchDiagnosis | null): boolean;
184
+ export declare function dispatchActionLabel(dispatch: DispatchDiagnosis | null): string;
185
+ export declare function workStatusOf(facts: WorkFacts, resultDisplay?: DisplayStatus): WorkStatus;
186
+ /** The counts each view tab wears — from the same rows the page lists. */
187
+ export declare function workCounts(rows: readonly {
188
+ views: readonly WorkView[];
189
+ }[]): Record<WorkView, number>;
190
+ /** All's order: rank, then most recently updated. */
191
+ export declare function compareWorkRows(a: {
192
+ rank: number;
193
+ updatedAt: string;
194
+ }, b: {
195
+ rank: number;
196
+ updatedAt: string;
197
+ }): number;
198
+ /** The shell's three primary destinations, from the page's own active
199
+ * key: every old page keeps its key and lights the destination it now
200
+ * lives under. */
201
+ export type PrimaryDestination = "chat" | "work" | "projects" | "flows" | "settings" | null;
202
+ export declare function primaryDestinationOf(active: string): PrimaryDestination;
203
+ /** Learning stays in Settings and a useful, closed result disclosure. */
204
+ export declare function learningHtml(view: import('./project-learning.js').LearningView, csrf: string, canManage: boolean, source?: number): string;