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
package/dist/grant.js ADDED
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Permission to write to somebody else's tracker.
3
+ *
4
+ * Everything up to here reads. This is the line, and it is drawn deliberately
5
+ * wide of where it needs to be: discovery indexes everything it can see, and
6
+ * Toolroll drives only what has been handed over, one repository and one
7
+ * backend at a time, by a person, in an act that shows its own consequences
8
+ * first.
9
+ *
10
+ * The grant is not a boolean. A yes/no flag would answer "may I write here"
11
+ * and leave every interesting question — write *what*, to *which* tasks, with
12
+ * *whose* credentials, visible to *whom* — to whatever the agent decided at
13
+ * 3am. So the record carries all of them, and the check is against the whole
14
+ * thing.
15
+ *
16
+ * Two defaults are load-bearing.
17
+ *
18
+ * **Only tasks we created or were given.** An operator enrolling a repository
19
+ * with four hundred open issues is not volunteering all four hundred to an
20
+ * unattended agent, and reading enrollment that way is how a tool ends up
21
+ * closing somebody's backlog overnight.
22
+ *
23
+ * **Closing is not included.** Creating a task is additive and reversible;
24
+ * transitioning one we own is ours to do; closing work somebody else filed is
25
+ * neither, so it is off unless explicitly granted. Widening takes another
26
+ * human action, which is the design's rule and not a nicety.
27
+ *
28
+ * Absence of a grant is denial. There is no implicit, inherited, or default
29
+ * permission anywhere in this module — an unknown repository is refused for
30
+ * the same reason an unknown lease is: silence is not consent.
31
+ */
32
+ import { run } from "./exec.js";
33
+ export const MUTATION_CLASSES = [
34
+ "create",
35
+ "transition",
36
+ "edge",
37
+ "hold",
38
+ "close",
39
+ "comment",
40
+ ];
41
+ /** Granted unless asked otherwise; `close` is the deliberate omission. */
42
+ export const DEFAULT_MUTATIONS = ["create", "transition", "edge", "hold"];
43
+ /**
44
+ * Whether this write is inside the grant.
45
+ *
46
+ * Written as a pure function over the whole grant so the policy can be read in
47
+ * one place and tested without a database, a repository, or a network — the
48
+ * three things that make a permission check hard to trust.
49
+ */
50
+ export function permits(grant, request) {
51
+ if (grant === null) {
52
+ return {
53
+ ok: false,
54
+ reason: "no-grant",
55
+ message: `${request.repo} is not enrolled for ${request.backend} — \`toolroll enroll\` grants write access`,
56
+ };
57
+ }
58
+ // The grant has to be *this* grant. Callers look one up and pass it in, and
59
+ // a caller that looks up the wrong one — or reuses a handle across
60
+ // repositories in a loop — would otherwise have repo A's permission applied
61
+ // to repo B. Re-checking here costs a string compare and removes a class of
62
+ // confused-deputy bug that no amount of care at the call site can rule out.
63
+ if (grant.repo !== request.repo || grant.backend !== request.backend) {
64
+ return {
65
+ ok: false,
66
+ reason: "no-grant",
67
+ message: `that grant is for ${grant.backend} in ${grant.repo}, not ${request.backend} in ${request.repo}`,
68
+ };
69
+ }
70
+ if (!grant.mutations.includes(request.mutation)) {
71
+ return {
72
+ ok: false,
73
+ reason: "mutation",
74
+ message: `the grant on ${request.repo} does not allow \`${request.mutation}\` (it allows ${grant.mutations.join(", ")})`,
75
+ };
76
+ }
77
+ if (grant.selector === "ours" && request.origin === "theirs") {
78
+ return {
79
+ ok: false,
80
+ reason: "selector",
81
+ message: `the grant on ${request.repo} covers only tasks Toolroll created or was given`,
82
+ };
83
+ }
84
+ // A path outside the declared set is the case this is really for: a grant
85
+ // over `.beads/` must not become a licence to edit the working tree.
86
+ if (request.path !== undefined && !grant.paths.some(allowed => within(request.path, allowed))) {
87
+ return {
88
+ ok: false,
89
+ reason: "path",
90
+ message: `${request.path} is outside the grant on ${request.repo} (${grant.paths.join(", ")})`,
91
+ };
92
+ }
93
+ return { ok: true };
94
+ }
95
+ /**
96
+ * Whether `path` is the granted scope or sits inside it.
97
+ *
98
+ * Segment-aware, so `.beads-backup` is not inside `.beads`, and `..` is
99
+ * resolved before comparing — without that, `.beads/../src/index.ts` starts
100
+ * with `.beads/` and a grant over a tracker's data directory becomes a licence
101
+ * to rewrite the working tree.
102
+ *
103
+ * This is a lexical check and says so. A symlink inside the granted directory
104
+ * still points wherever it points, and no amount of string handling will catch
105
+ * that; the boundary for it is the worktree the runner is confined to, which
106
+ * is M1's problem and not this function's.
107
+ */
108
+ function within(path, allowed) {
109
+ const target = resolveSegments(path);
110
+ const scope = resolveSegments(allowed);
111
+ if (target === null || scope === null)
112
+ return false;
113
+ return target === scope || target.startsWith(`${scope}/`);
114
+ }
115
+ /** null when the path climbs above its own root, which is never inside anything. */
116
+ function resolveSegments(path) {
117
+ const out = [];
118
+ for (const segment of normalise(path).split("/")) {
119
+ if (segment === "" || segment === ".")
120
+ continue;
121
+ if (segment !== "..") {
122
+ out.push(segment);
123
+ continue;
124
+ }
125
+ if (out.length === 0)
126
+ return null;
127
+ out.pop();
128
+ }
129
+ return out.join("/");
130
+ }
131
+ function normalise(path) {
132
+ return path.replace(/\\/g, "/").replace(/\/+$/, "");
133
+ }
134
+ /**
135
+ * Build the grant that would be created, including the one fact an operator
136
+ * cannot easily check for themselves: whether these writes will be visible.
137
+ *
138
+ * A backend that stores its data in a tracked directory means every task
139
+ * transition shows up in `git status` and eventually in history — which is
140
+ * either exactly what somebody wants, or a nasty surprise on their next
141
+ * commit. It is asked of git rather than assumed, because the answer differs
142
+ * per repository and the guess would be wrong half the time.
143
+ */
144
+ export async function proposeGrant(options) {
145
+ const { repo, backend, paths, mutations = DEFAULT_MUTATIONS, selector = "ours", credentialScope = null, grantedBy = "operator", now, runner = run, } = options;
146
+ return {
147
+ repo,
148
+ backend,
149
+ paths: [...paths],
150
+ mutations: [...mutations],
151
+ selector,
152
+ credentialScope,
153
+ observedByGit: await observedByGit(repo, paths, runner),
154
+ grantedAt: now.toISOString(),
155
+ grantedBy,
156
+ };
157
+ }
158
+ /**
159
+ * True when at least one granted path is not ignored by git.
160
+ *
161
+ * `git check-ignore` exits 0 when a path *is* ignored and 1 when it is not, so
162
+ * the interesting answer is the failure. Anything else — no git, an unreadable
163
+ * repository — is reported as observed, because claiming writes are invisible
164
+ * when we could not establish it is the wrong way to be wrong.
165
+ *
166
+ * Each path is asked about twice, bare and with a trailing slash, and that is
167
+ * not belt-and-braces. A `.gitignore` rule written `.beads/` matches only
168
+ * directories, and git cannot tell that a path *is* a directory when it does
169
+ * not exist yet — which is precisely the state at enrolment, before the
170
+ * tracker has been initialised. Asked bare, git says "not ignored" and the
171
+ * grant would tell somebody their writes are about to show up in every commit
172
+ * when they are not.
173
+ */
174
+ async function observedByGit(repo, paths, runner) {
175
+ const local = paths.filter(path => !isRemoteRef(path));
176
+ if (local.length === 0)
177
+ return false;
178
+ for (const path of local) {
179
+ const asked = [path, `${normalise(path)}/`];
180
+ const ignored = await Promise.all(asked.map(async (candidate) => {
181
+ const result = await runner("git", ["--no-optional-locks", "check-ignore", "-q", candidate], {
182
+ cwd: repo,
183
+ });
184
+ return result.code === 0;
185
+ }));
186
+ if (!ignored.some(Boolean))
187
+ return true;
188
+ }
189
+ return false;
190
+ }
191
+ /** `owner/name` is a GitHub tracker, not a file in the working tree. */
192
+ function isRemoteRef(path) {
193
+ return /^[^/\\]+\/[^/\\]+$/.test(path) && !path.startsWith(".");
194
+ }
195
+ /**
196
+ * The grant, in the words an operator needs before agreeing to it — what may
197
+ * be touched, what may be done, to which tasks, and whether anyone else will
198
+ * see it happen.
199
+ */
200
+ export function describeGrant(grant) {
201
+ return [
202
+ ` repository ${grant.repo}`,
203
+ ` backend ${grant.backend}`,
204
+ ` may touch ${grant.paths.join(", ")}`,
205
+ ` may do ${grant.mutations.join(", ")}`,
206
+ ` on tasks ${grant.selector === "ours" ? "only those Toolroll created or was given" : "every task in the tracker"}`,
207
+ ` credentials ${grant.credentialScope ?? "none of its own — it uses the ones already on this machine"}`,
208
+ ` visibility ${describeVisibility(grant)}`,
209
+ ];
210
+ }
211
+ /**
212
+ * Who will see these writes.
213
+ *
214
+ * Careful about what git can actually tell us. `check-ignore` answers whether
215
+ * a path would show up in `git status` — it does not decide what lands in
216
+ * history, since nothing lands there until somebody commits. Saying "these
217
+ * will be in your history" would be a claim this program is in no position to
218
+ * make; saying they will turn up in `git status`, staged by whoever commits
219
+ * next, is exactly true and is the thing an operator needs to know.
220
+ *
221
+ * A remote tracker is a different question entirely: nothing about git governs
222
+ * it, and the writes are visible to everyone with access the moment they land.
223
+ */
224
+ function describeVisibility(grant) {
225
+ const remote = grant.paths.every(isRemoteRef);
226
+ if (remote)
227
+ return "these writes are visible to anyone with access to the tracker, immediately";
228
+ return grant.observedByGit
229
+ ? "these writes turn up in `git status` — whoever commits next will pick them up"
230
+ : "git ignores these paths, so they stay out of `git status` and out of commits";
231
+ }
232
+ /** What is not granted, which is the half people forget to read. */
233
+ export function describeWithheld(grant) {
234
+ const withheld = MUTATION_CLASSES.filter(one => !grant.mutations.includes(one));
235
+ if (withheld.length === 0)
236
+ return [];
237
+ return [` will not ${withheld.join(", ")} — widening takes another \`enroll\``];
238
+ }
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Which work graph is already here.
3
+ *
4
+ * Chosen by looking, not by asking — an operator who already keeps their work
5
+ * in beads should not be made to declare that to a tool standing in the same
6
+ * directory. But **detection is not authorization.** Finding a populated
7
+ * tracker says it exists; it says nothing about whether its owner wants Night
8
+ * Orders scheduling, closing, or restructuring what is in it. Nothing here
9
+ * writes, enrolls, or grants anything.
10
+ *
11
+ * **Nothing is ever installed.** No package manager, no package runner, no
12
+ * initializer — `bd init` stages files, edits agent integrations, and can make
13
+ * a commit, so it is the operator's to run. This module runs read commands
14
+ * against binaries that are already on PATH, and prints what it cannot do.
15
+ *
16
+ * Data and runtime are detected independently, and that separation is the
17
+ * point. A populated tracker with no working runtime is real work that this
18
+ * machine cannot currently dispatch, and saying so at 9am is the whole job —
19
+ * the alternative is finding out inside a dead loop at 3am.
20
+ *
21
+ * Where a fact is not established it is `unverified`, and unverified fails
22
+ * closed. A backend whose dependency edges we cannot confirm is shown and may
23
+ * even be recommended, but it is not dispatchable, because §4's rule is that
24
+ * scheduling edges are never emulated: a private graph other tools cannot see
25
+ * is shadow data.
26
+ */
27
+ import { type ExecResult, type RunOptions } from "./exec.js";
28
+ export type BackendKind = "beads" | "backlog-md" | "github-issues";
29
+ /**
30
+ * Whether the backend carries dependency edges of its own.
31
+ *
32
+ * `unverified` is not a soft `native`. It means nobody has confirmed it, and a
33
+ * scheduler must treat it as absent rather than assume in its own favour.
34
+ */
35
+ export type Deps = "native" | "unverified" | "none";
36
+ export type Runtime = {
37
+ state: "ok";
38
+ version: string | null;
39
+ } | {
40
+ state: "missing";
41
+ binary: string;
42
+ } | {
43
+ state: "outdated";
44
+ version: string;
45
+ needs: string;
46
+ } | {
47
+ state: "unreadable";
48
+ reason: string;
49
+ };
50
+ /**
51
+ * What was counted, and which question it answers. A ready count and an open
52
+ * count are different numbers, and labelling one as the other would misreport
53
+ * how much work is actually dispatchable.
54
+ */
55
+ export type Count = {
56
+ of: "ready" | "open";
57
+ value: number;
58
+ };
59
+ export type Detection = {
60
+ kind: BackendKind;
61
+ label: string;
62
+ /** Repositories whose data was found on disk, or which have issues. */
63
+ repos: string[];
64
+ /** null when nothing could be counted — absence of a number, not zero. */
65
+ count: Count | null;
66
+ deps: Deps;
67
+ runtime: Runtime;
68
+ /** Whether work here could actually be scheduled tonight. */
69
+ dispatchable: boolean;
70
+ /** What could not be read, in words. Never silently dropped. */
71
+ problems: string[];
72
+ };
73
+ /**
74
+ * The ladder from §3. `ambiguous` is a deliberate outcome and not a failure:
75
+ * several populated trackers mean the operator has to say which one, because
76
+ * task count is not write authority and the biggest tracker may be the
77
+ * abandoned one.
78
+ */
79
+ export type Choice = {
80
+ action: "recommend";
81
+ kind: BackendKind;
82
+ dispatchable: boolean;
83
+ why: string;
84
+ } | {
85
+ action: "ambiguous";
86
+ kinds: BackendKind[];
87
+ why: string;
88
+ } | {
89
+ action: "built-in";
90
+ why: string;
91
+ };
92
+ export type ChooseOptions = {
93
+ /** A backend the operator already enrolled. Outranks anything detected. */
94
+ enrolled?: BackendKind;
95
+ };
96
+ /**
97
+ * What the operator would run to set a backend up, and what it would do to
98
+ * their repository.
99
+ *
100
+ * This is text, and stays text. `bd init` creates or updates `AGENTS.md` and
101
+ * installs Claude and Codex integrations unless told not to — which is a
102
+ * substantial thing to do to somebody's repository, and not ours to do on
103
+ * their behalf. A tool that refuses to run `bd init` for you and then quietly
104
+ * ran it from inside a helpful setup prompt would have spent the only
105
+ * credibility it had.
106
+ *
107
+ * There is deliberately no prompt. A wizard would cost the zero-config opening
108
+ * this tool is built around, and half the intended audience is an agent or a
109
+ * scheduled run, where anything that blocks on an answer simply hangs.
110
+ *
111
+ * Commands are quoted from each tool's own documentation rather than inferred.
112
+ * Backlog.md is detected but not offered here, because its install path has
113
+ * not been verified — and printing a command that has not been checked is how
114
+ * an operator ends up running the wrong thing on our say-so.
115
+ */
116
+ export type SetupOption = {
117
+ kind: BackendKind | "built-in";
118
+ label: string;
119
+ /** null when there is nothing to install. */
120
+ install: string | null;
121
+ /** null when there is nothing to initialize. */
122
+ init: string | null;
123
+ /** What it changes in the repository. Never omitted where there is one. */
124
+ sideEffects: string | null;
125
+ note: string | null;
126
+ };
127
+ export declare function setupOptions(): SetupOption[];
128
+ export type Runner = (file: string, args: readonly string[], options?: RunOptions) => Promise<ExecResult>;
129
+ export type DetectOptions = {
130
+ runner?: Runner;
131
+ /** Injected so the pure half of detection needs no fixture tree. */
132
+ exists?: (path: string) => boolean;
133
+ };
134
+ /** Reading a tracker is local work; only the GitHub one crosses the network. */
135
+ export declare const LOCAL_TIMEOUT_MS = 10000;
136
+ export declare const NETWORK_TIMEOUT_MS = 20000;
137
+ /**
138
+ * Dependency fields on GitHub Issues need a newer `gh` than the REST route
139
+ * does. The version gate is therefore about *native edges*, not about whether
140
+ * issues can be read at all — an older gh still counts them, it just cannot be
141
+ * trusted to schedule from them.
142
+ */
143
+ export declare const GH_DEPS_MIN_VERSION = "2.94.0";
144
+ export declare const LABELS: Record<BackendKind, string>;
145
+ export declare function detectGraphs(repos: readonly string[], options?: DetectOptions): Promise<Detection[]>;
146
+ /** null when no version-shaped token is present — unknown, not zero. */
147
+ export declare function parseVersion(text: string): string | null;
148
+ /** Negative, zero, or positive, like every other comparator. */
149
+ export declare function compareVersions(left: string, right: string): number;
150
+ /**
151
+ * The ladder from §3, as a pure function so the policy can be read and tested
152
+ * without a filesystem.
153
+ *
154
+ * The rung that does the most work is the third: several populated repo-local
155
+ * trackers mean Toolroll stays in discovery until a person says which one.
156
+ * Picking the largest would be inventing authority out of a row count.
157
+ *
158
+ * GitHub Issues is never chosen automatically. It has native edges, but a
159
+ * populated issue tracker is evidence people file issues, not evidence anyone
160
+ * wants an unattended agent closing them — the design requires existing
161
+ * dependency use *and* a confirmed write scope, and neither is established by
162
+ * looking.
163
+ */
164
+ export declare function chooseBackend(detections: readonly Detection[], options?: ChooseOptions): Choice;