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,695 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import type { Store, Mutation } from "./store.js";
3
+ import type { QualityMode } from "./quality.js";
4
+ import type { AuthMode } from "./keys.js";
5
+ import type { ProviderId } from "./provider.js";
6
+ import { type PhaseRoute, type ReadinessLookup, type RiskLevel } from "./phase-routing.js";
7
+ export declare function hashToken(token: string): string;
8
+ /**
9
+ * A person's chosen password gets a real KDF. Bare sha256 is fine for the
10
+ * minted 256-bit tokens — nothing brute-forces that space — but a password a
11
+ * human picked lives in a much smaller one, so it is salted and stretched
12
+ * (scrypt), and the stored string names its own scheme so both generations
13
+ * of credential verify side by side.
14
+ */
15
+ export declare function hashPassword(password: string): string;
16
+ /** Verify a presented secret against a stored hash of either scheme. */
17
+ export declare function verifyCredential(stored: string, presented: string): boolean;
18
+ /**
19
+ * The execution profile (Parity II foundations, findings 1/2/13/14/22):
20
+ * WHAT RUNS, bound into what the operator signs. A discriminated union —
21
+ * each variant asserts only what its provider actually supports, with the
22
+ * EFFECTIVE constants the argv will carry, never aspirations. The model
23
+ * is always an exact string and always emitted on the argv: nothing in an
24
+ * approved profile is left for later resolution to decide (ruling 10).
25
+ * providerVersion and resolvedFrom are PROVENANCE and live outside these
26
+ * shapes (finding 20) — they never enter a digest.
27
+ */
28
+ export declare const CLAUDE_LIMITS: {
29
+ readonly maxTurns: 1000;
30
+ readonly repairMaxTurns: 4;
31
+ readonly timeoutSeconds: 1200;
32
+ readonly repairTimeoutSeconds: 300;
33
+ };
34
+ export declare const CODEX_SHAPED_LIMITS: {
35
+ readonly timeoutSeconds: 1200;
36
+ readonly repairTimeoutSeconds: 300;
37
+ };
38
+ export declare const GEMINI_LIMITS: {
39
+ readonly timeoutSeconds: 1200;
40
+ readonly repairTimeoutSeconds: 300;
41
+ };
42
+ export type ClaudeProfile = {
43
+ provider: "claude";
44
+ /** The exact model string the argv carries. Never empty, never "default". */
45
+ model: string;
46
+ /** Claude's real argv semantic. `auto` is the safe unattended posture:
47
+ * Claude's classifier allows routine project work and stops risky acts.
48
+ * `acceptEdits` remains readable for approvals created before auto mode;
49
+ * bypass is still a separate, explicitly signed escalation. */
50
+ permissionArgv: "auto" | "acceptEdits" | "bypassPermissions";
51
+ maxTurns: number;
52
+ repairMaxTurns: number;
53
+ timeoutSeconds: number;
54
+ /** Absent on legacy approvals, where timeoutSeconds remains an absolute
55
+ * wall clock. New approvals bind an activity watchdog instead. */
56
+ timeoutKind?: "idle";
57
+ repairTimeoutSeconds: number;
58
+ /** Exact model for repairs, or the stable literal "inherit" (= the
59
+ * build model, which is itself exact). */
60
+ repairModel: string;
61
+ };
62
+ export type CodexShapedProfile = {
63
+ provider: "codex" | "openrouter";
64
+ model: string;
65
+ /** Codex's real constraint surface. Full access is rendered with the
66
+ * CLI's combined --dangerously-bypass-approvals-and-sandbox switch; the
67
+ * value here records the resulting sandbox posture in the signed profile. */
68
+ sandboxMode: "workspace-write" | "danger-full-access";
69
+ /** The tool has no argv turn limit. New approvals use an inactivity
70
+ * watchdog; legacy approvals retain their signed wall-clock bound. */
71
+ maxTurns: "unsupported";
72
+ repairMaxTurns: "unsupported";
73
+ timeoutSeconds: number;
74
+ timeoutKind?: "idle";
75
+ repairTimeoutSeconds: number;
76
+ repairModel: string;
77
+ };
78
+ export type GeminiProfile = {
79
+ provider: "gemini";
80
+ model: string;
81
+ /** Gemini's real dial (`--approval-mode`): auto_edit auto-approves edit
82
+ * tools only (the acceptEdits parallel); yolo auto-approves everything
83
+ * and files only where claude files bypassPermissions. `default` and
84
+ * `plan` are not profile values — headless `default` just fails tools,
85
+ * and `plan` is read-only while the protocol requires workspace writes. */
86
+ approvalArgv: "auto_edit" | "yolo";
87
+ /** No argv turn bound exists (v0.57.0 audit); new approvals use an
88
+ * inactivity watchdog, while legacy approvals keep their signed clock. */
89
+ maxTurns: "unsupported";
90
+ repairMaxTurns: "unsupported";
91
+ timeoutSeconds: number;
92
+ timeoutKind?: "idle";
93
+ repairTimeoutSeconds: number;
94
+ repairModel: string;
95
+ };
96
+ export type ExecutionProfile = ClaudeProfile | CodexShapedProfile | GeminiProfile;
97
+ /** The durable unattended permission choices exposed by the console. The
98
+ * provider-specific argv is still what gets sealed into an approval; this
99
+ * small cross-provider type is only the operator-facing policy. */
100
+ export type UnattendedPermissionMode = "auto" | "bypassPermissions";
101
+ export declare const PROFILE_DIGEST_VERSION = 2;
102
+ /** The stored snapshot bytes: version embedded IN the snapshot (finding 17). */
103
+ export declare function canonicalProfileJson(profile: ExecutionProfile): string;
104
+ /** sha256 over a domain-separated canonical encoding, truncated to the
105
+ * same 128 bits every other safety digest here uses (finding 21). */
106
+ export declare function profileDigestOf(profile: ExecutionProfile): string;
107
+ export declare const CHAIN_DIGEST_VERSION = 1;
108
+ /** One entry of an approved fallback chain: the WHOLE execution profile
109
+ * (so a claude->codex switch cannot inherit one provider's repair config)
110
+ * and the auth mode it runs under. Order is authority. */
111
+ export type ChainEntry = {
112
+ profile: ExecutionProfile;
113
+ authMode: "subscription" | "api-key";
114
+ };
115
+ /** The stored snapshot bytes for a chain: the version rides IN the
116
+ * snapshot, exactly like a single profile's. */
117
+ export declare function canonicalChainJson(entries: readonly ChainEntry[]): string;
118
+ /** sha256 over a domain-separated canonical chain encoding — a DIFFERENT
119
+ * domain from a single profile ("standing-orders:chain:" vs
120
+ * ":profile:"), so a chain digest can never collide with a profile
121
+ * digest, truncated to the same 128 bits. */
122
+ export declare function chainDigestOf(entries: readonly ChainEntry[]): string;
123
+ /**
124
+ * One chain entry's BINDING digest (E3d): the profile digest + auth mode
125
+ * under their own domain. A run row pins this at admission (or base-cycle
126
+ * open), and the dispatch proof re-derives it from the approved chain at
127
+ * the run's index — so nothing downstream can swap WHICH entry a run
128
+ * spends as, in model or in credential.
129
+ */
130
+ export declare function entryDigestOf(entry: ChainEntry): string;
131
+ /** Strict re-hydration of a stored chain — every entry proved through the
132
+ * single-profile rehydrator; anything unexpected is null. */
133
+ export declare function chainFromJson(json: string | null): ChainEntry[] | null;
134
+ /**
135
+ * THE STRICT RAW TERMS READ (raw authority repair): the stored columns of
136
+ * a scope or a standing order, proved EXACTLY — a JSON list is a list of
137
+ * strings and nothing else, a rubric is a list of whole criteria carrying
138
+ * exactly the keys this code writes and parsing with zero problems, a
139
+ * budget is a safe integer or null. Nothing is filtered, defaulted, or
140
+ * coerced on the way to an authority: the words say what is wrong, and
141
+ * the caller refuses.
142
+ */
143
+ export declare function exactStringList(value: unknown, what: string): {
144
+ ok: true;
145
+ list: string[];
146
+ } | {
147
+ ok: false;
148
+ problem: string;
149
+ };
150
+ export declare function exactAcceptance(value: unknown): {
151
+ ok: true;
152
+ criteria: AcceptanceCriterion[];
153
+ } | {
154
+ ok: false;
155
+ problem: string;
156
+ };
157
+ export declare function exactSafeIntegerOrNull(value: unknown, what: string): string | null;
158
+ /**
159
+ * The longest clock a snapshot may bind, in seconds: a JavaScript timer
160
+ * holds at most 2^31 − 1 milliseconds, and a bound past that fires at
161
+ * once instead of never — a "timeout" that is not one. Every stored
162
+ * clock is proved against this before it is believed (v48 integrity).
163
+ */
164
+ export declare const MAX_TIMER_SECONDS: number;
165
+ /** A positive integer the platform can represent exactly. */
166
+ export declare function safePositiveInteger(v: unknown): v is number;
167
+ /** A positive whole number of seconds a timer can actually wait. */
168
+ export declare function timerSafeSeconds(v: unknown): v is number;
169
+ /**
170
+ * Whether an object carries exactly the named keys: every required key
171
+ * present, only optional keys otherwise, nothing unknown. Stored snapshots
172
+ * are proved this way so a key this code never writes is a refusal, never
173
+ * an ignorable extra.
174
+ */
175
+ export declare function exactKeys(value: object, required: readonly string[], optional: readonly string[]): boolean;
176
+ /** Strict re-hydration of a stored snapshot — every field type-proved;
177
+ * anything unexpected is null, never a guess. */
178
+ export declare function profileFromJson(json: string | null): ExecutionProfile | null;
179
+ export type EvidenceKind = "check" | "screenshot" | "changed-path" | "manual-review";
180
+ export declare const EVIDENCE_KINDS: readonly EvidenceKind[];
181
+ export type AcceptanceCriterion = {
182
+ id: string;
183
+ /** The signed outcome statement. Restating it differently in a proof is
184
+ * refuted, not short — the same severity as any other altered term. */
185
+ statement: string;
186
+ /** Advisory guidance for HOW to satisfy the statement. Never enters the
187
+ * digest and is never a term the approval binds — an operator can leave
188
+ * it, change it, or ignore it without touching what was signed. */
189
+ how: string | null;
190
+ /** SIGNED: the evidence kinds a proof must reference, by exact id, to
191
+ * answer this criterion. Never empty. */
192
+ evidence: EvidenceKind[];
193
+ };
194
+ export declare const ACCEPTANCE_LIMITS: {
195
+ readonly criteria: 12;
196
+ readonly id: 40;
197
+ readonly statement: 1000;
198
+ readonly how: 500;
199
+ readonly evidenceKinds: number;
200
+ };
201
+ export type AcceptanceProblem = {
202
+ reason: string;
203
+ message: string;
204
+ };
205
+ /**
206
+ * Parse a rubric from already-JSON-parsed input (the planner's handoff, a
207
+ * console form, a routine or template definition): fail closed, every
208
+ * problem reported at once, stable reasons — the same discipline as every
209
+ * other quoted-data parser in this codebase (`plan.ts`, `proof.ts`). An
210
+ * absent or empty `value` parses to `[]` with no problems: whether that is
211
+ * ALLOWED is a question for the caller (`propose` says yes; every authoring
212
+ * road says no), never for this parser.
213
+ */
214
+ export declare function parseAcceptanceCriteria(value: unknown): {
215
+ criteria: AcceptanceCriterion[];
216
+ problems: AcceptanceProblem[];
217
+ };
218
+ /** The exact bytes a rubric's SIGNED terms reduce to for the digest: sorted
219
+ * by id, `how` dropped (advisory, never signed), evidence kinds sorted so
220
+ * two equivalent lists never digest differently. */
221
+ /**
222
+ * The plain-text rubric encoding shared by every non-JSON authoring
223
+ * surface — the console's rubric textarea (one line each) and the CLI's
224
+ * `--acceptance` flag (one line per `;`-separated entry): one criterion
225
+ * per line, shaped
226
+ *
227
+ * [id:] statement | evidence,kinds [| how]
228
+ *
229
+ * `id` is optional — auto-numbered `c1`, `c2`, ... in encounter order when
230
+ * every line omits it, so a person can write the rubric without inventing
231
+ * ids by hand. This function never validates; it only turns text into the
232
+ * same plain-object shape `parseAcceptanceCriteria` already validates, so
233
+ * both entry points can never drift on what counts as a valid criterion.
234
+ */
235
+ /** The one criterion a filing may carry when nobody has written the rubric
236
+ * yet: the console's scout follow-ups file with it, and `--acceptance plan`
237
+ * on the command line expands to it. A mode with planAuto sends such a
238
+ * filing to the planner instead of building against it. */
239
+ export declare const PLACEHOLDER_RUBRIC_STATEMENT = "The operator has reviewed this follow-up and written a real rubric before approving it.";
240
+ export declare const PLACEHOLDER_RUBRIC: AcceptanceCriterion[];
241
+ export declare function rubricIsPlaceholder(acceptance: readonly {
242
+ statement: string;
243
+ evidence: readonly string[];
244
+ }[]): boolean;
245
+ /** Split a `--acceptance` rubric into criteria. Criteria are `;`-separated,
246
+ * but a `;` inside a statement must not split it: every criterion ends with
247
+ * its `|<evidence kinds>` part, so a segment with no `|` is the front of the
248
+ * next one and is glued back on. The single word `plan` means the placeholder. */
249
+ export declare function splitAcceptanceRubric(text: string): string[];
250
+ export declare const isCommitSha: (value: string) => boolean;
251
+ export declare function acceptanceLinesToInput(lines: readonly string[]): unknown[];
252
+ /** The inverse of `acceptanceLinesToInput`, for pre-filling an editor from
253
+ * a stored rubric — round-trips through `parseAcceptanceCriteria` exactly. */
254
+ export declare function acceptanceToLines(criteria: readonly AcceptanceCriterion[]): string[];
255
+ export declare function canonicalAcceptance(criteria: readonly AcceptanceCriterion[]): {
256
+ id: string;
257
+ statement: string;
258
+ evidence: EvidenceKind[];
259
+ }[];
260
+ export type Scope = {
261
+ taskId: string;
262
+ /** What success looks like, in the operator's words. */
263
+ goal: string;
264
+ /** What this task is explicitly not allowed to turn into. */
265
+ outOfScope: string | null;
266
+ /** Paths the work is expected to touch. Advisory, and worth stating. */
267
+ touches: string[];
268
+ /** v39: the signed acceptance rubric. `[]` on every scope proposed before
269
+ * this migration and on any legacy road that still calls `propose`
270
+ * directly — a scope-producing ROAD enforces non-emptiness, never this
271
+ * type, never `propose`, never the digest. */
272
+ acceptance: AcceptanceCriterion[];
273
+ /** v41: evidence policy, signed with the scope. Default is omitted from
274
+ * the digest so every pre-v41 approval remains byte-for-byte valid. */
275
+ qualityMode?: QualityMode;
276
+ /** The dollar cap per build attempt, integer micro-dollars (v15) —
277
+ * approved spend, restated at the yes, enforced by the provider's own
278
+ * stop. NULL = no per-attempt cap was asked for. */
279
+ budgetMicrousd: number | null;
280
+ proposedAt: string;
281
+ /** Of the scope as written. Approval is bound to this exact value. */
282
+ digest: string;
283
+ approvedAt: string | null;
284
+ approvedBy: string | null;
285
+ /** The digest that was actually agreed to, which may now be stale. */
286
+ approvedDigest: string | null;
287
+ /** How the approval happened (v29): 'password' = the ceremony;
288
+ * 'mode' = sealed by the signer's live mode (modeDigest names it). */
289
+ approvalBasis?: "password" | "mode" | null;
290
+ modeDigest?: string | null;
291
+ /** v24 (optional so hand-built scopes in tests stay valid): the working
292
+ * execution profile, its resolution state, and the immutable snapshot
293
+ * the approval act sealed. */
294
+ profile?: ExecutionProfile | null;
295
+ profileState?: "resolved" | "unresolved";
296
+ unresolvedReason?: string | null;
297
+ approvedProfile?: ExecutionProfile | null;
298
+ /** The raw snapshot bytes the row carries (v48 integrity): what the
299
+ * strict stored-scope projection proves, exactly, before any seal or
300
+ * consent surface believes the rehydrated `profile`. */
301
+ profileJson?: string | null;
302
+ approvedProfileJson?: string | null;
303
+ digestVersion?: number;
304
+ /** v30 fallback chains. `proposedChainJson` is the WORKING chain snapshot
305
+ * the digest bound (present only when the repo has configured fallbacks);
306
+ * `approvedChainJson` is the immutable snapshot the seal COPIED from it;
307
+ * `approvalKind` names which the approval sealed. All undefined/null on a
308
+ * legacy single-profile scope — every scope until an operator configures a
309
+ * fallback chain. The runtime re-derives the active entry from
310
+ * `approvedChainJson`, never from mutable config. */
311
+ proposedChainJson?: string | null;
312
+ approvedChainJson?: string | null;
313
+ approvalKind?: "profile" | "chain";
314
+ /** v47 phase routing: the signed risk level, the WORKING canonical route
315
+ * the digest bound, and the immutable snapshot the seal COPIED from it.
316
+ * `routeEra` is the durable marker: null on a row PROVEN to predate v47
317
+ * (legacy — its sealed profile alone governs), the route version on every
318
+ * row filed since — for those, a missing or unreadable route is corrupt
319
+ * and fails closed everywhere. */
320
+ riskLevel?: RiskLevel;
321
+ /** A prepared commit the machine checks out instead of running an agent
322
+ * (v69). Signed into the digest; must descend from the task's base. */
323
+ candidate?: string | null;
324
+ proposedRouteJson?: string | null;
325
+ approvedRouteJson?: string | null;
326
+ routeEra?: number | null;
327
+ /** THE RAW TERMS VERDICT (raw authority repair): null when every stored
328
+ * term and metadata column read back EXACTLY — touches a JSON list of
329
+ * strings, the rubric a list of whole criteria with no unknown key, the
330
+ * budget a safe integer or null, the quality mode, risk level, approval
331
+ * kind, profile state, digest version, and route era each one of the
332
+ * words this code writes — and the words when one did not. The lenient
333
+ * fields above (`touches`, `acceptance`, …) are the console's reading;
334
+ * every authority — consent, seal, chain, dispatch — refuses on a
335
+ * non-null verdict, so filtering, defaulting, or coercion can never
336
+ * turn a corrupt row into authority. Undefined on a hand-built scope. */
337
+ termsProblem?: string | null;
338
+ /** Who wrote the text (mate arc, ruling 2): a confirmed mate proposal,
339
+ * the coordinator, a scout, or a person (null). Read raw and proved by
340
+ * `termsProblem` — a word outside these is a stated problem, never a
341
+ * value that slips past the mate quarantine at a mode seal. */
342
+ proposedVia?: "mate" | "coordinator" | "scout" | null;
343
+ };
344
+ export type Approval = {
345
+ approved: true;
346
+ at: string;
347
+ by: string;
348
+ } | {
349
+ approved: false;
350
+ reason: "none" | "changed" | "never-proposed";
351
+ };
352
+ export type ScopeInput = {
353
+ taskId: string;
354
+ /** v102: the person writing these words (a web edit, a chat confirmation, a coding hand-off); the requester rule refuses them. */
355
+ author?: string;
356
+ goal: string;
357
+ outOfScope?: string | null;
358
+ touches?: readonly string[];
359
+ /** v24: an EXPLICIT profile skips resolution in the store (routine
360
+ * firings and the demo's illustrative scopes use this road). */
361
+ profile?: ExecutionProfile;
362
+ /** A task-level permission choice. When absent, the task's stored choice
363
+ * (if any), then the installation default, decides the concrete profile. */
364
+ permissionMode?: UnattendedPermissionMode;
365
+ /** Concrete task quality choice. When absent, the task override and then
366
+ * the installation default are resolved by the store. */
367
+ qualityMode?: QualityMode;
368
+ /** v69: a prepared commit to install as this attempt — no agent runs. */
369
+ candidate?: string | null;
370
+ /** v47: the task's declared risk. When absent, the task's stored choice
371
+ * (if any), else routine. A durable TASK choice, like qualityMode. */
372
+ riskLevel?: RiskLevel;
373
+ /** Integer micro-dollars per build attempt; digest-bound when present. */
374
+ budgetMicrousd?: number | null;
375
+ /** The mode road's escalated filing default (C7): the resolved profile
376
+ * seals claude bypassPermissions / gemini yolo; codex-shaped unchanged. */
377
+ posture?: "escalated";
378
+ /** Who wrote this text (mate arc, ruling 2): `mate` for a confirmed mate
379
+ * proposal — mode coverage then never seals it; a human rewrite clears it. */
380
+ proposedVia?: "mate" | "coordinator" | null;
381
+ /** v39: the signed acceptance rubric. Absent digests exactly like `[]` —
382
+ * see `Scope.acceptance`. `propose` itself never requires this to be
383
+ * non-empty; the roads that call it do. */
384
+ acceptance?: readonly AcceptanceCriterion[];
385
+ now: Date;
386
+ mutation?: Mutation;
387
+ };
388
+ /**
389
+ * The exact bytes an operator agreed to.
390
+ *
391
+ * Every field that constrains the work goes in. If a change to a field would
392
+ * change what an operator would have said, it has to move the digest, or the
393
+ * approval it invalidates would be an approval of something else.
394
+ */
395
+ export declare function digestOf(scope: Pick<Scope, "goal" | "outOfScope" | "touches"> & {
396
+ budgetMicrousd?: number | null;
397
+ /** v39: the rubric, folded in ONLY when non-empty — the same absent/`[]`
398
+ * equivalence budgetMicrousd has always used, so a scope proposed before
399
+ * this migration, or by a road that never sends one, digests to exactly
400
+ * what it digested to before this field existed. `how` never enters
401
+ * here (advisory, never signed); evidence kinds do. */
402
+ acceptance?: readonly AcceptanceCriterion[];
403
+ qualityMode?: QualityMode;
404
+ /** v69: a prepared commit, folded in only when present so every earlier
405
+ * digest is untouched. */
406
+ candidate?: string | null;
407
+ }, target?: ExecutionProfile | null | {
408
+ chain: readonly ChainEntry[];
409
+ }, route?: PhaseRoute | null): string;
410
+ export declare function propose(store: Store, input: ScopeInput): Scope;
411
+ export type GuardedProposeResult = {
412
+ ok: true;
413
+ scope: Scope;
414
+ } | {
415
+ ok: false;
416
+ reason: "changed" | "claimed" | "bad-goal" | "bad-out-of-scope" | "bad-touches" | "bad-acceptance" | "acceptance-required";
417
+ message?: string;
418
+ };
419
+ /**
420
+ * A scope edit from a surface where the editor might be stale — two browser
421
+ * tabs, a form submitted after the world moved. `sawDigest` names the version
422
+ * the editor was looking at (null: they saw no scope at all); a mismatch is a
423
+ * refusal, never a silent overwrite of somebody else's words. Edits are also
424
+ * refused while a live claim holds the task: the running build read its scope
425
+ * at start, and rewording the agreement under it would make the digest lie
426
+ * about what the work was agreed to. Field caps and control-character rules
427
+ * live here because every one of these strings will later be rendered.
428
+ *
429
+ * v39: this is a scope-producing ROAD, not the `propose` primitive, so it is
430
+ * where the rubric becomes mandatory — every edit through here (a fresh
431
+ * proposal or a rewrite of an already-approved one) must carry at least one
432
+ * criterion, or it is refused with a clear `acceptance-required` reason
433
+ * rather than silently filing without one. A scope that already carries a
434
+ * live, unrewritten approval from before this code existed never reaches
435
+ * this function again unless somebody edits it — which is exactly when the
436
+ * requirement should start applying.
437
+ */
438
+ export declare function proposeGuarded(store: Store, input: Omit<ScopeInput, "acceptance"> & {
439
+ sawDigest: string | null;
440
+ taskRef: number | null;
441
+ acceptance?: unknown;
442
+ }): GuardedProposeResult;
443
+ /**
444
+ * A person says yes.
445
+ *
446
+ * Takes the digest they were shown, so agreeing to a scope that changed while
447
+ * they were reading it fails rather than silently approving the new one.
448
+ */
449
+ /**
450
+ * Register somebody who is allowed to agree to scopes.
451
+ *
452
+ * The token is shown once and stored only as a hash, exactly like a runner's.
453
+ * It exists because an approval nobody has to authenticate is not a gate: an
454
+ * agent that can run these commands can read a scope's digest out of `task
455
+ * show` and approve its own brief with it. Requiring a credential the agent
456
+ * was never given is what keeps "a person agreed to this" true.
457
+ */
458
+ export type AddApproverResult = {
459
+ ok: true;
460
+ name: string;
461
+ token: string;
462
+ bootstrap: boolean;
463
+ chosen: boolean;
464
+ } | {
465
+ ok: false;
466
+ reason: "not-an-approver" | "weak-password";
467
+ };
468
+ export declare function addApprover(store: Store, name: string, now: Date, by?: {
469
+ name: string;
470
+ token: string;
471
+ }, newToken?: () => string, mutation?: Mutation,
472
+ /** A password the person chose. Absent, a token is minted and shown once. */
473
+ password?: string): AddApproverResult;
474
+ export type ApproveResult = {
475
+ ok: true;
476
+ scope: Scope;
477
+ } | {
478
+ ok: false;
479
+ reason: "no-scope" | "changed" | "no-approvers" | "not-an-approver" | "profile-unresolved" | "unrouted";
480
+ }
481
+ /** v102: the project's approval rules stopped it — the requester can't approve, protected work needs a person —
482
+ * or recorded this person's yes and needs a second one (`second-approver`). */
483
+ | {
484
+ ok: false;
485
+ reason: "requester" | "person-required";
486
+ } | {
487
+ ok: false;
488
+ reason: "second-approver";
489
+ have: number;
490
+ need: number;
491
+ already: boolean;
492
+ }
493
+ /** Sprint 8: the organisation policy stops these terms (a provider, a model, the permission ceiling); `message` says which. */
494
+ | {
495
+ ok: false;
496
+ reason: "policy";
497
+ message: string;
498
+ };
499
+ /**
500
+ * Whether this name-and-token pair is a person the store knows. Shared by
501
+ * every act that requires a human's authority — approving a scope, answering
502
+ * a decision — because "who said yes" must never be a string the caller
503
+ * typed. Fails closed: with no approver registered there is nobody who can
504
+ * agree to anything, and treating that as "authority is not required here"
505
+ * would make the gate optional — which is the same as not having one.
506
+ */
507
+ /**
508
+ * IDENTITY, split from authority (modes chain, D2/E2): who this credential
509
+ * belongs to and what standing they hold. Viewers authenticate here and
510
+ * read; every consequential act goes through authenticateApprover below,
511
+ * which additionally demands ACTIVE approver standing — so the forty
512
+ * ceremony sites enforce the role without one of them changing.
513
+ */
514
+ export declare function authenticateAccount(store: Store, by: string, secret: string): {
515
+ ok: true;
516
+ role: "approver" | "viewer";
517
+ generation: number;
518
+ } | {
519
+ ok: false;
520
+ reason: "no-approvers" | "unknown" | "revoked" | "locked";
521
+ };
522
+ /**
523
+ * v100: someone who signed in with the identity provider moments ago has no
524
+ * password to type again. The console marks such a request with this, for
525
+ * that person only, and an EMPTY password then stands for the fresh sign-in
526
+ * at every step-up that reaches `authenticateApprover` (scope and routine
527
+ * approval, chat-action review, the console's own ceremonies). A typed
528
+ * password is always checked, and nothing else stands in.
529
+ */
530
+ export declare const freshIdentitySignIn: AsyncLocalStorage<{
531
+ actor: string | null;
532
+ }>;
533
+ export declare const hasFreshIdentitySignIn: (by: string) => boolean;
534
+ export declare function authenticateApprover(store: Store, by: string, token: string, repo?: string | null): {
535
+ ok: true;
536
+ } | {
537
+ ok: false;
538
+ reason: "no-approvers" | "not-an-approver";
539
+ };
540
+ /**
541
+ * What an approval needs besides the password (v100: an identity-provider
542
+ * sign-in moments ago stands in for the password; nothing stands in for
543
+ * this): an active account in the approver role, with access to the project.
544
+ */
545
+ export declare function approverStanding(store: Store, by: string, repo?: string | null): {
546
+ ok: true;
547
+ } | {
548
+ ok: false;
549
+ reason: "no-approvers" | "not-an-approver";
550
+ };
551
+ /**
552
+ * C1's atomic road: file the scope AND seal its approval in ONE
553
+ * transaction, under a mode the SAME transaction re-proves. The caller
554
+ * has already authenticated the actor and matched channel rules; this
555
+ * function owns the predicate's transactional half — mode active, actor
556
+ * IS the signer, repo matches, and the sealed digest is the filed one
557
+ * (trivially true here: they are the same transaction). Never
558
+ * sealScopeApproval after a filing — that was the TOCTOU.
559
+ */
560
+ /**
561
+ * C1's coverage question, answerable from ANY filing road: does a live
562
+ * mode make THIS actor's credentialed filing auto-approve here, and with
563
+ * which defaults? Callers re-ask INSIDE their filing transaction — an
564
+ * answer carried across transactions would be the TOCTOU again.
565
+ */
566
+ export declare function modeFilingCoverage(store: Store, repo: string | null, actor: string, now: Date): {
567
+ digest: string;
568
+ escalated: boolean;
569
+ defaultBudgetMicrousd: number | null;
570
+ } | null;
571
+ export declare function fileAndSealUnderMode(store: Store, input: ScopeInput & {
572
+ repo: string | null;
573
+ actor: string;
574
+ }): {
575
+ ok: true;
576
+ scope: Scope;
577
+ basis: "mode";
578
+ } | {
579
+ ok: false;
580
+ reason: "no-mode" | "not-signer" | "not-covered" | "coordinator-filed" | "acceptance-required" | "profile-unresolved";
581
+ detail?: string;
582
+ };
583
+ export declare function approve(store: Store, taskId: string, by: string, now: Date, sawDigest: string, token: string, mutation?: Mutation): ApproveResult;
584
+ /**
585
+ * Whether this task may be built.
586
+ *
587
+ * `changed` is the interesting answer and the reason the digest exists: the
588
+ * scope was approved, and then somebody — possibly an agent, possibly the
589
+ * operator, possibly a different session — rewrote it. The old yes does not
590
+ * transfer.
591
+ */
592
+ export declare function approvalOf(scope: Scope | null): Approval;
593
+ /**
594
+ * THE STRICT STORED-SCOPE PROJECTION (v48 integrity): the ONE reading of
595
+ * a filed scope that a seal and every consent surface believe. Nothing
596
+ * lenient stands in for it — the working profile, chain, and route are
597
+ * re-parsed from their raw bytes with exact keys, safe integers, and
598
+ * timer-safe clocks; the chain's entries carry a well-formed auth mode;
599
+ * the route's build and repair legs ARE the profile's exact pairs; on a
600
+ * chain filing the profile IS the chain's entry zero; and the row's
601
+ * digest re-derives, complete, from these very values. A legacy row (no
602
+ * route era) has no authority a person can newly agree to. One
603
+ * disagreement is the words, and nothing — no nonce, no password field,
604
+ * no approve action, no seal — is exposed on it.
605
+ */
606
+ export type ScopeAuthority = {
607
+ ok: true;
608
+ profile: ExecutionProfile;
609
+ chain: ChainEntry[] | null;
610
+ route: PhaseRoute;
611
+ digest: string;
612
+ authMode: AuthMode | null;
613
+ } | {
614
+ ok: false;
615
+ reason: "terms" | "unrouted" | "unresolved" | "profile" | "chain" | "route" | "parity" | "digest" | "auth-mode";
616
+ problem: string;
617
+ };
618
+ /** What the strict projection reads OUTSIDE the row (atomic authority
619
+ * closure): the operator's stored auth mode for a provider, strictly — a
620
+ * present file that says neither word is a stated problem, never the
621
+ * default a lenient read would coerce it to. Filing, consent, the seal,
622
+ * and the spawn all hand in the same reader, so one broken file closes
623
+ * every door in the same words. */
624
+ export type ScopeAuthorityEnv = {
625
+ authMode?: (provider: ProviderId) => {
626
+ ok: true;
627
+ mode: AuthMode;
628
+ } | {
629
+ ok: false;
630
+ problem: string;
631
+ };
632
+ };
633
+ /**
634
+ * THE PARITY every projection proves between a route and the profile and
635
+ * terms it was filed beside (atomic authority closure): the build and
636
+ * repair legs ARE the profile's exact pairs, and the route's signed risk
637
+ * and quality ARE the row's — a row whose risk says high over a route
638
+ * recommended for routine was not filed by this code, and neither the
639
+ * seal, the consent door, nor the dispatch proof believes it. One
640
+ * function, so the working side, the sealed side, and the last-mile
641
+ * dispatch proof cannot drift. Null when everything agrees.
642
+ */
643
+ export declare function routeParityProblem(route: PhaseRoute, profile: ExecutionProfile, terms: {
644
+ riskLevel: RiskLevel;
645
+ qualityMode: QualityMode;
646
+ }): string | null;
647
+ export declare function scopeAuthorityOf(scope: Scope, env?: ScopeAuthorityEnv): ScopeAuthority;
648
+ /** The rubric's approval-card lines (v39): one per criterion, the id in
649
+ * front (the exact string a proof must answer by) and its required
650
+ * evidence kinds after it — `how` is deliberately absent here, the same way
651
+ * it is absent from the digest: it is guidance, never a signed term. */
652
+ export declare function acceptanceWords(criteria: readonly AcceptanceCriterion[]): string[];
653
+ /** The route's approval-card lines (v47): the WORKING route the digest
654
+ * bound, projected with whatever readiness the caller can see — the same
655
+ * bytes the task page and chat render. Empty on a scope with no route. */
656
+ export declare function scopeRouteWords(scope: Pick<Scope, "proposedRouteJson">, readiness?: ReadinessLookup): string[];
657
+ /** The scope, in the words an operator has to be able to agree or disagree with. */
658
+ export declare function describeScope(scope: Scope, readiness?: ReadinessLookup): string[];
659
+ /** The chain's approval-card lines; empty for a single-profile scope. */
660
+ export declare function chainWords(chain: ChainEntry[] | null): string[];
661
+ /**
662
+ * EVERY rendered term of one watched attempt — what the form shows is what
663
+ * the password signs, byte for byte. The subset the dispatch proof
664
+ * re-derives (scopeDigest, profileDigest, profileJson, repo, head) is read
665
+ * back by the builder and the coordinator; the rest are the product terms
666
+ * the ceremony renders in words: the budget as a STOP THRESHOLD, the turn
667
+ * cap, the per-turn clock whose expiry is SESSION-FATAL, and the absolute
668
+ * expiry. Continuation carries the parent attempt and the follow-up text
669
+ * INSIDE the signed terms (v3 R7).
670
+ */
671
+ export type AttendedTerms = {
672
+ taskId: string;
673
+ /** v28: HOW liveness is renewed — a SIGNED term, because liveness is an
674
+ * admission predicate, not decoration. "console-visible" = any open
675
+ * console page of this server renews use. Legacy terms lack the field
676
+ * and beat-all refuses them (they were signed as page-bound). */
677
+ attentionMode: "console-visible";
678
+ scopeDigest: string;
679
+ profileDigest: string;
680
+ profileJson: string;
681
+ repo: string;
682
+ runner: string;
683
+ runnerGeneration: number;
684
+ head: string;
685
+ maxSessionTurns: number;
686
+ budgetMicrousd: number;
687
+ turnTimeoutSeconds: number;
688
+ absoluteExpiry: string;
689
+ parentRun?: number | null;
690
+ followup?: string | null;
691
+ };
692
+ /** Deterministic bytes: sorted keys, undefined dropped — the signed text. */
693
+ export declare function attendedTermsJson(terms: AttendedTerms): string;
694
+ /** The composite digest one password signs (ruling 12), domain-separated. */
695
+ export declare function attendedDigestOf(terms: AttendedTerms): string;