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,65 @@
1
+ /**
2
+ * Which repositories the operator has actually committed to.
3
+ *
4
+ * Discovery is total and costs nothing, so it stays the way you find things.
5
+ * Enrollment is the smaller, deliberate list: what gets reported by default,
6
+ * and later what may be written to. Keeping the two separate is what lets the
7
+ * first run need no configuration while the tenth run stays quiet.
8
+ *
9
+ * The file is plain JSON in a conventional location because someone will want
10
+ * to edit it by hand or check it into their dotfiles — which also means it is
11
+ * untrusted input and gets validated like any other.
12
+ */
13
+ export declare const CONFIG_VERSION = 2;
14
+ export type ProjectRegistry = {
15
+ repos: string[];
16
+ roots: string[];
17
+ };
18
+ export type LoadResult = {
19
+ repos: string[];
20
+ } | {
21
+ error: string;
22
+ };
23
+ export type RegistryLoadResult = ProjectRegistry | {
24
+ error: string;
25
+ };
26
+ type RegistryUpdateFailure = {
27
+ ok: false;
28
+ reason: "locked" | "registry" | "abandoned";
29
+ message: string;
30
+ };
31
+ export declare function configPath(env: Record<string, string | undefined>, home: string): string;
32
+ export declare function loadProjectRegistry(file: string): Promise<RegistryLoadResult>;
33
+ /** Compatibility view for reports, CLI enrollment, and the MCP surface. */
34
+ export declare function loadRepos(file: string): Promise<LoadResult>;
35
+ export declare function saveRepos(file: string, repos: readonly string[]): Promise<void>;
36
+ /**
37
+ * The ONE locked registry update (onboarding findings 9/17/19/25/29/30):
38
+ * every writer — CLI add/remove, the console, up's enrollment — goes
39
+ * through here. The lock is an exclusive-create file whose body carries
40
+ * {pid, token, at}; a LIVE owner's lock is never touched; stale recovery
41
+ * runs only after kill(pid, 0) proves the owner dead, serialized through
42
+ * a second exclusive reaper lock that re-reads the exact snapshot it
43
+ * observed before unlinking. The owner releases only while its hold is
44
+ * under 25s — past that it abandons WITHOUT unlinking and reports so; the
45
+ * deadline is checked BEFORE publication, so a committed rename is never
46
+ * reported as failed. Reads: only ENOENT means an empty registry —
47
+ * malformed JSON, wrong shape, EACCES, and I/O errors REFUSE.
48
+ */
49
+ export declare function updateRepos(file: string, transform: (repos: string[]) => string[]): Promise<{
50
+ ok: true;
51
+ repos: string[];
52
+ } | RegistryUpdateFailure>;
53
+ /** Persist project roots through the same lock as repo enrollment. */
54
+ export declare function updateProjectRoots(file: string, transform: (roots: string[]) => string[]): Promise<{
55
+ ok: true;
56
+ roots: string[];
57
+ } | RegistryUpdateFailure>;
58
+ /** Atomically update repositories and roots without either writer erasing the other. */
59
+ export declare function updateProjectRegistry(file: string, transform: (registry: ProjectRegistry) => ProjectRegistry): Promise<{
60
+ ok: true;
61
+ registry: ProjectRegistry;
62
+ } | RegistryUpdateFailure>;
63
+ export declare function addRepos(existing: readonly string[], incoming: readonly string[]): string[];
64
+ export declare function removeRepos(existing: readonly string[], targets: readonly string[]): string[];
65
+ export {};
package/dist/repos.js ADDED
@@ -0,0 +1,277 @@
1
+ /**
2
+ * Which repositories the operator has actually committed to.
3
+ *
4
+ * Discovery is total and costs nothing, so it stays the way you find things.
5
+ * Enrollment is the smaller, deliberate list: what gets reported by default,
6
+ * and later what may be written to. Keeping the two separate is what lets the
7
+ * first run need no configuration while the tenth run stays quiet.
8
+ *
9
+ * The file is plain JSON in a conventional location because someone will want
10
+ * to edit it by hand or check it into their dotfiles — which also means it is
11
+ * untrusted input and gets validated like any other.
12
+ */
13
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
14
+ import { dirname, join } from "node:path";
15
+ import { configBase, namedPath } from "./names.js";
16
+ export const CONFIG_VERSION = 2;
17
+ const FILE_NAME = "repos.json";
18
+ export function configPath(env, home) {
19
+ // Rename continuity: an enrolled list under an older name keeps working
20
+ // until one exists under the new one.
21
+ return namedPath(configBase(env, home), [FILE_NAME]);
22
+ }
23
+ export async function loadProjectRegistry(file) {
24
+ let text;
25
+ try {
26
+ text = await readFile(file, "utf8");
27
+ }
28
+ catch (cause) {
29
+ // ONLY the missing file is the ordinary first-run state (round-3
30
+ // finding 6): a permission or I/O failure is an unreadable registry,
31
+ // never an empty one — the MCP gateway fails closed on it.
32
+ if (cause.code === "ENOENT")
33
+ return { repos: [], roots: [] };
34
+ return { error: `${file} could not be read (${String(cause.message)})` };
35
+ }
36
+ let parsed;
37
+ try {
38
+ parsed = JSON.parse(text);
39
+ }
40
+ catch {
41
+ return { error: `${file} is not valid JSON — fix or delete it` };
42
+ }
43
+ const registry = readProjectRegistry(parsed);
44
+ if (registry === null) {
45
+ return { error: `${file} does not look like a Toolroll config — fix or delete it` };
46
+ }
47
+ return { repos: sortUnique(registry.repos), roots: sortUnique(registry.roots) };
48
+ }
49
+ /** Compatibility view for reports, CLI enrollment, and the MCP surface. */
50
+ export async function loadRepos(file) {
51
+ const loaded = await loadProjectRegistry(file);
52
+ return "error" in loaded ? loaded : { repos: loaded.repos };
53
+ }
54
+ export async function saveRepos(file, repos) {
55
+ await mkdir(dirname(file), { recursive: true });
56
+ const config = { version: CONFIG_VERSION, repos: sortUnique(repos), roots: [] };
57
+ await writeFile(file, `${JSON.stringify(config, null, 2)}\n`, "utf8");
58
+ }
59
+ /**
60
+ * The ONE locked registry update (onboarding findings 9/17/19/25/29/30):
61
+ * every writer — CLI add/remove, the console, up's enrollment — goes
62
+ * through here. The lock is an exclusive-create file whose body carries
63
+ * {pid, token, at}; a LIVE owner's lock is never touched; stale recovery
64
+ * runs only after kill(pid, 0) proves the owner dead, serialized through
65
+ * a second exclusive reaper lock that re-reads the exact snapshot it
66
+ * observed before unlinking. The owner releases only while its hold is
67
+ * under 25s — past that it abandons WITHOUT unlinking and reports so; the
68
+ * deadline is checked BEFORE publication, so a committed rename is never
69
+ * reported as failed. Reads: only ENOENT means an empty registry —
70
+ * malformed JSON, wrong shape, EACCES, and I/O errors REFUSE.
71
+ */
72
+ export async function updateRepos(file, transform) {
73
+ const updated = await updateProjectRegistry(file, current => ({
74
+ ...current,
75
+ repos: transform(current.repos),
76
+ }));
77
+ return updated.ok ? { ok: true, repos: updated.registry.repos } : updated;
78
+ }
79
+ /** Persist project roots through the same lock as repo enrollment. */
80
+ export async function updateProjectRoots(file, transform) {
81
+ const updated = await updateProjectRegistry(file, current => ({
82
+ ...current,
83
+ roots: transform(current.roots),
84
+ }));
85
+ return updated.ok ? { ok: true, roots: updated.registry.roots } : updated;
86
+ }
87
+ /** Atomically update repositories and roots without either writer erasing the other. */
88
+ export async function updateProjectRegistry(file, transform) {
89
+ const { openSync, closeSync, writeSync, readFileSync, unlinkSync, existsSync: exists, mkdirSync, renameSync } = await import("node:fs");
90
+ const { randomBytes } = await import("node:crypto");
91
+ mkdirSync(dirname(file), { recursive: true });
92
+ const lockPath = `${file}.lock`;
93
+ const reaperPath = `${file}.reaper.lock`;
94
+ const token = randomBytes(16).toString("hex");
95
+ const body = JSON.stringify({ pid: process.pid, token, at: Date.now() });
96
+ const sleep = (ms) => new Promise(done => setTimeout(done, ms));
97
+ const tryReap = () => {
98
+ // Recovery only for PROVEN-dead owners, serialized by the reaper lock,
99
+ // which re-reads the exact snapshot before unlinking (finding 29). An
100
+ // orphaned reaper lock is itself reaped by the same dead-pid rule.
101
+ let snapshot = null;
102
+ try {
103
+ snapshot = JSON.parse(readFileSync(lockPath, "utf8"));
104
+ }
105
+ catch {
106
+ return;
107
+ }
108
+ if (typeof snapshot?.pid !== "number")
109
+ return;
110
+ try {
111
+ process.kill(snapshot.pid, 0);
112
+ return; // alive: never touched
113
+ }
114
+ catch {
115
+ // ESRCH — dead; continue under the reaper lock
116
+ }
117
+ try {
118
+ const before = readFileSync(reaperPath, "utf8");
119
+ const parsed = JSON.parse(before);
120
+ if (typeof parsed?.pid === "number") {
121
+ try {
122
+ process.kill(parsed.pid, 0);
123
+ return; // a live reaper is working
124
+ }
125
+ catch {
126
+ try {
127
+ unlinkSync(reaperPath);
128
+ }
129
+ catch { /* raced */ }
130
+ }
131
+ }
132
+ }
133
+ catch {
134
+ // no reaper lock — proceed to claim it
135
+ }
136
+ let reaperFd;
137
+ try {
138
+ reaperFd = openSync(reaperPath, "wx");
139
+ }
140
+ catch {
141
+ return; // another reaper won
142
+ }
143
+ try {
144
+ writeSync(reaperFd, JSON.stringify({ pid: process.pid }));
145
+ // Re-read and require the EXACT observed snapshot + a repeated
146
+ // dead-pid proof before unlinking (finding 29).
147
+ const now = readFileSync(lockPath, "utf8");
148
+ const again = JSON.parse(now);
149
+ if (again?.pid === snapshot.pid && again?.token === snapshot.token) {
150
+ try {
151
+ process.kill(snapshot.pid, 0);
152
+ }
153
+ catch {
154
+ try {
155
+ unlinkSync(lockPath);
156
+ }
157
+ catch { /* raced */ }
158
+ }
159
+ }
160
+ }
161
+ catch {
162
+ // lock vanished or changed — nothing to do
163
+ }
164
+ finally {
165
+ closeSync(reaperFd);
166
+ try {
167
+ unlinkSync(reaperPath);
168
+ }
169
+ catch { /* already gone */ }
170
+ }
171
+ };
172
+ let held = false;
173
+ const acquiredAt = () => Date.now() - start;
174
+ let start = 0;
175
+ for (let attempt = 0; attempt < 6 && !held; attempt += 1) {
176
+ try {
177
+ const fd = openSync(lockPath, "wx");
178
+ writeSync(fd, body);
179
+ closeSync(fd);
180
+ held = true;
181
+ start = Date.now();
182
+ }
183
+ catch {
184
+ tryReap();
185
+ await sleep(100);
186
+ }
187
+ }
188
+ if (!held)
189
+ return { ok: false, reason: "locked", message: `${file} is busy — another enrollment holds its lock; try again` };
190
+ try {
191
+ let current;
192
+ if (!exists(file)) {
193
+ current = { repos: [], roots: [] }; // ONLY the missing-file case is an empty registry
194
+ }
195
+ else {
196
+ let text;
197
+ try {
198
+ text = readFileSync(file, "utf8");
199
+ }
200
+ catch (error) {
201
+ return { ok: false, reason: "registry", message: `${file} could not be read (${String(error.message)}) — refusing to replace it` };
202
+ }
203
+ let parsed;
204
+ try {
205
+ parsed = JSON.parse(text);
206
+ }
207
+ catch {
208
+ return { ok: false, reason: "registry", message: `${file} is not valid JSON — fix or delete it; refusing to replace it` };
209
+ }
210
+ const registry = readProjectRegistryStrict(parsed);
211
+ if (registry === null) {
212
+ return { ok: false, reason: "registry", message: `${file} does not look like a Toolroll config — refusing to replace it` };
213
+ }
214
+ current = registry;
215
+ }
216
+ const transformed = transform({ repos: [...current.repos], roots: [...current.roots] });
217
+ const next = { repos: sortUnique(transformed.repos), roots: sortUnique(transformed.roots) };
218
+ // Deadline BEFORE publication (finding 30): a rename past the hold
219
+ // window would commit while the lock may already be reaped.
220
+ if (acquiredAt() > 20_000) {
221
+ held = false; // abandon: no unlink, no publication
222
+ return { ok: false, reason: "abandoned", message: "the registry lock aged out before the update could publish — nothing changed; try again" };
223
+ }
224
+ const temp = `${file}.${process.pid}.${token.slice(0, 8)}.tmp`;
225
+ const fd = openSync(temp, "wx");
226
+ writeSync(fd, `${JSON.stringify({ version: CONFIG_VERSION, ...next }, null, 2)}
227
+ `);
228
+ closeSync(fd);
229
+ renameSync(temp, file);
230
+ return { ok: true, registry: next };
231
+ }
232
+ finally {
233
+ if (held && acquiredAt() < 25_000) {
234
+ try {
235
+ unlinkSync(lockPath);
236
+ }
237
+ catch { /* reaped despite liveness rules */ }
238
+ }
239
+ }
240
+ }
241
+ /** Strict shape for the locked path (finding 36): non-string entries REFUSE. */
242
+ function readProjectRegistryStrict(parsed) {
243
+ if (typeof parsed !== "object" || parsed === null)
244
+ return null;
245
+ const { repos, roots } = parsed;
246
+ if (!Array.isArray(repos))
247
+ return null;
248
+ if (!repos.every((repo) => typeof repo === "string"))
249
+ return null;
250
+ if (roots !== undefined && (!Array.isArray(roots) || !roots.every((root) => typeof root === "string")))
251
+ return null;
252
+ return { repos, roots: roots ?? [] };
253
+ }
254
+ export function addRepos(existing, incoming) {
255
+ return sortUnique([...existing, ...incoming]);
256
+ }
257
+ export function removeRepos(existing, targets) {
258
+ const unwanted = new Set(targets);
259
+ return existing.filter(repo => !unwanted.has(repo));
260
+ }
261
+ /** null when the shape is wrong; non-string entries are dropped, not trusted. */
262
+ function readProjectRegistry(parsed) {
263
+ if (typeof parsed !== "object" || parsed === null)
264
+ return null;
265
+ const { repos, roots } = parsed;
266
+ if (!Array.isArray(repos))
267
+ return null;
268
+ if (roots !== undefined && !Array.isArray(roots))
269
+ return null;
270
+ return {
271
+ repos: repos.filter((repo) => typeof repo === "string"),
272
+ roots: (roots ?? []).filter((root) => typeof root === "string"),
273
+ };
274
+ }
275
+ function sortUnique(repos) {
276
+ return [...new Set(repos)].sort();
277
+ }
@@ -0,0 +1,2 @@
1
+ import type { RepositoryContext } from './repository-context.js';
2
+ export declare function repositoryContextHtml(repo: string, query: string, result: RepositoryContext | null, csrf: string): string;
@@ -0,0 +1,10 @@
1
+ const escape = (value) => value.replace(/[&<>"']/g, char => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' })[char]);
2
+ export function repositoryContextHtml(repo, query, result, csrf) {
3
+ const root = `/settings/knowledge?repo=${encodeURIComponent(repo)}`;
4
+ return `<section class="knowledge repository-context"><h2>Relevant code</h2><form method="get" action="/settings/knowledge"><input type="hidden" name="repo" value="${escape(repo)}"><label>Find code<input name="q" value="${escape(query)}" maxlength="1000" placeholder="A feature, file or symbol"></label><button type="submit">Search</button></form>` +
5
+ (result === null ? '' : `<p class="meta">${result.index.engine === 'typescript-ast' ? 'Code relationships' : 'Source search'}${result.mode === 'impact' ? ' · possible change impact' : ''}</p>` +
6
+ (result.excerpts.length ? result.excerpts.map(one => `<details><summary>${escape(one.file)}:${one.line}${one.symbol ? ` · ${escape(one.symbol)}` : ''}</summary><p class="meta">${escape(one.reason)}</p><pre>${escape(one.text)}</pre><a href="${root}&mode=impact&q=${encodeURIComponent(one.file)}">What this may affect</a></details>`).join('') : '<p>No matching source was found in this bounded search.</p>') +
7
+ (result.relationships.length ? `<details><summary>Related files</summary><ul>${result.relationships.map(one => `<li>${escape(one.from)} → ${escape(one.to)} · ${escape(one.kind)}</li>`).join('')}</ul></details>` : '') +
8
+ `<details><summary>Context details</summary><p>${escape(result.index.status)}${result.checkout ? ` · checkout ${escape(result.checkout.head.slice(0, 8))}` : ''}</p>${result.warnings.map(one => `<p>${escape(one)}</p>`).join('')}</details>`) +
9
+ (csrf ? `<details><summary>Refresh code index</summary><form method="post" action="/settings/knowledge/refresh"><input type="hidden" name="csrf" value="${escape(csrf)}"><input type="hidden" name="repo" value="${escape(repo)}"><p>Builds a local map of TypeScript and JavaScript imports. Uses no model.</p><button type="submit">Refresh index</button></form></details>` : '') + `</section>`;
10
+ }
@@ -0,0 +1,67 @@
1
+ export type RepositoryContextRequest = {
2
+ repo: string;
3
+ query: string;
4
+ mode?: 'search' | 'impact';
5
+ audience?: 'lead' | 'crew';
6
+ /** Canonical admitted project when repo is a crew worktree. Must share its Git common directory. */
7
+ project?: string;
8
+ baseRevision?: string;
9
+ cacheRoot?: string;
10
+ refresh?: boolean;
11
+ maxBytes?: number;
12
+ };
13
+ export type RepositoryCheckout = {
14
+ repo: string;
15
+ gitDir: string;
16
+ head: string;
17
+ baseRevision: string;
18
+ sourceHash: string;
19
+ source: 'working-tree';
20
+ };
21
+ export type RepositoryRelationship = {
22
+ from: string;
23
+ to: string;
24
+ kind: 'imports' | 're-exports' | 'dynamic-import';
25
+ file: string;
26
+ line: number;
27
+ provenance: 'explicit';
28
+ };
29
+ export type RepositoryExcerpt = {
30
+ file: string;
31
+ line: number;
32
+ endLine: number;
33
+ sha256: string;
34
+ text: string;
35
+ reason: string;
36
+ symbol: string | null;
37
+ };
38
+ export type RepositoryContext = {
39
+ version: 1;
40
+ readOnly: boolean;
41
+ query: string;
42
+ mode: 'search' | 'impact';
43
+ asOf: string;
44
+ checkout: RepositoryCheckout | null;
45
+ index: {
46
+ engine: 'typescript-ast' | 'text-search';
47
+ status: 'ready' | 'missing' | 'stale' | 'unavailable';
48
+ generation: string | null;
49
+ extractor: string | null;
50
+ };
51
+ excerpts: RepositoryExcerpt[];
52
+ relationships: RepositoryRelationship[];
53
+ omissions: {
54
+ files: number;
55
+ excerpts: number;
56
+ relationships: number;
57
+ sourceBytes: number;
58
+ };
59
+ warnings: string[];
60
+ };
61
+ /** Synchronous, read-only capture for DB transaction and provider-admission callers.
62
+ * Call once and persist the returned selection; resume uses that capture, never fresh source. */
63
+ export declare function repositoryContextRead(request: Omit<RepositoryContextRequest, 'refresh'>): RepositoryContext;
64
+ /** Explicit refresh is the only cache-writing path. It never changes project/task records. */
65
+ export declare function repositoryContext(request: RepositoryContextRequest): Promise<RepositoryContext>;
66
+ /** Human/model context rendering; saved records remain the authority and retain this structured capture. */
67
+ export declare function repositoryContextText(context: RepositoryContext): string;