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,264 @@
1
+ /**
2
+ * Project memory (2026-09-21): the durable "why" beside project knowledge
3
+ * and lessons, in the same database. A decision is one settled choice with
4
+ * its rationale, who made it, when, and where it came from; it is never
5
+ * an instruction or a permission. One search index (SQLite FTS5) spans
6
+ * instructions, references, lessons, decisions and the conversations a
7
+ * person may read, scoped per project and audience. Nothing here calls a
8
+ * model; the backward pass that proposes edits lives in memory-pass.ts.
9
+ */
10
+ import { createHash } from 'node:crypto';
11
+ import { scanForSecrets } from './evidence.js';
12
+ import { learningIdentity } from './project-learning.js';
13
+ export const MEMORY_SCHEMA = `
14
+ CREATE TABLE IF NOT EXISTS project_decision (
15
+ id INTEGER PRIMARY KEY, repo TEXT NOT NULL, identity TEXT NOT NULL, revision INTEGER NOT NULL DEFAULT 1,
16
+ claim TEXT NOT NULL, why TEXT NOT NULL,
17
+ status TEXT NOT NULL CHECK(status IN ('active','superseded','retired')),
18
+ supersedes INTEGER REFERENCES project_decision(id),
19
+ decided_by TEXT NOT NULL, decided_at TEXT NOT NULL,
20
+ source_kind TEXT NOT NULL CHECK(source_kind IN ('conversation','task','result','manual','backward-pass')),
21
+ source_ref TEXT, recorded_by TEXT NOT NULL, sha TEXT NOT NULL
22
+ );
23
+ CREATE INDEX IF NOT EXISTS project_decision_repo ON project_decision(repo, status, id);
24
+ CREATE TABLE IF NOT EXISTS decision_change (
25
+ id INTEGER PRIMARY KEY, decision INTEGER NOT NULL REFERENCES project_decision(id), revision INTEGER NOT NULL,
26
+ actor TEXT NOT NULL, at TEXT NOT NULL, action TEXT NOT NULL, payload TEXT NOT NULL, sha TEXT NOT NULL,
27
+ UNIQUE(decision, revision)
28
+ );
29
+ CREATE TRIGGER IF NOT EXISTS decision_change_no_update BEFORE UPDATE ON decision_change BEGIN SELECT RAISE(ABORT,'Decision history is immutable'); END;
30
+ CREATE TRIGGER IF NOT EXISTS decision_change_no_delete BEFORE DELETE ON decision_change BEGIN SELECT RAISE(ABORT,'Decision history is immutable'); END;
31
+ CREATE TRIGGER IF NOT EXISTS project_decision_no_delete BEFORE DELETE ON project_decision BEGIN SELECT RAISE(ABORT,'Decisions are retired, never deleted'); END;
32
+ CREATE VIRTUAL TABLE IF NOT EXISTS memory_search USING fts5(kind UNINDEXED, ref UNINDEXED, repo UNINDEXED, scope UNINDEXED, title, body, tokenize='unicode61');
33
+ -- The backward pass (memory-pass.ts): sessions analysed once per surface
34
+ -- version, gaps that accumulate corroboration across runs, and the
35
+ -- proposals a person accepts or rejects. Rejections are remembered.
36
+ CREATE TABLE IF NOT EXISTS memory_session (
37
+ id TEXT PRIMARY KEY, repo TEXT NOT NULL, kind TEXT NOT NULL CHECK(kind IN ('claude','codex','lead','crew')),
38
+ source TEXT NOT NULL, seen_at TEXT NOT NULL, surface TEXT NOT NULL, trace_sha TEXT NOT NULL,
39
+ analyzed_at TEXT, verdict TEXT, problem TEXT
40
+ );
41
+ CREATE INDEX IF NOT EXISTS memory_session_repo ON memory_session(repo, seen_at);
42
+ CREATE TABLE IF NOT EXISTS memory_gap (
43
+ id INTEGER PRIMARY KEY, repo TEXT NOT NULL, key TEXT NOT NULL, mistake TEXT NOT NULL, proposed TEXT NOT NULL,
44
+ domain TEXT NOT NULL CHECK(domain IN ('project','orchestration')), first_seen TEXT NOT NULL, last_seen TEXT NOT NULL,
45
+ retired_at TEXT, retired_reason TEXT, UNIQUE(repo, key)
46
+ );
47
+ CREATE TABLE IF NOT EXISTS memory_sighting (
48
+ gap INTEGER NOT NULL REFERENCES memory_gap(id), session TEXT NOT NULL REFERENCES memory_session(id),
49
+ at TEXT NOT NULL, quote TEXT NOT NULL, PRIMARY KEY(gap, session)
50
+ );
51
+ CREATE TABLE IF NOT EXISTS memory_proposal (
52
+ id INTEGER PRIMARY KEY, repo TEXT NOT NULL, kind TEXT NOT NULL CHECK(kind IN ('instruction-add','instruction-remove','decision-add')),
53
+ fingerprint TEXT NOT NULL, title TEXT NOT NULL, rationale TEXT NOT NULL, before_text TEXT, after_text TEXT NOT NULL,
54
+ evidence TEXT NOT NULL, sessions INTEGER NOT NULL, status TEXT NOT NULL CHECK(status IN ('pending','accepted','rejected','stale')),
55
+ created_at TEXT NOT NULL, decided_by TEXT, decided_at TEXT, surface TEXT NOT NULL
56
+ );
57
+ CREATE INDEX IF NOT EXISTS memory_proposal_pending ON memory_proposal(repo, status, fingerprint);
58
+ CREATE TABLE IF NOT EXISTS memory_rejection (
59
+ repo TEXT NOT NULL, fingerprint TEXT NOT NULL, rejected_at TEXT NOT NULL, rejected_by TEXT NOT NULL, sessions INTEGER NOT NULL, PRIMARY KEY(repo, fingerprint)
60
+ );
61
+ `;
62
+ const sha = (text) => createHash('sha256').update(text).digest('hex');
63
+ function clean(value, bytes, label) {
64
+ const trimmed = value.trim();
65
+ if (!trimmed)
66
+ throw Error(`${label} is required.`);
67
+ if (Buffer.byteLength(trimmed) > bytes || /[\x00-\x08\x0b\x0c\x0e-\x1f\x7f�]/u.test(trimmed))
68
+ throw Error(`${label} is too long or is not readable text.`);
69
+ if (scanForSecrets(trimmed).length)
70
+ throw Error('Remove credentials or secrets before saving.');
71
+ return trimmed;
72
+ }
73
+ function admission(store, repo, actor, write = false) {
74
+ if (!store.schemaCurrent() || !store.accountCanAccess(actor, repo) || (write && store.accountOf(actor)?.role !== 'approver'))
75
+ throw Error('Project memory is outside your access.');
76
+ return learningIdentity(repo);
77
+ }
78
+ function decisionOf(row) {
79
+ return { id: Number(row['id']), repo: String(row['repo']), revision: Number(row['revision']), claim: String(row['claim']), why: String(row['why']),
80
+ status: row['status'], supersedes: row['supersedes'] === null ? null : Number(row['supersedes']),
81
+ decidedBy: String(row['decided_by']), decidedAt: String(row['decided_at']), sourceKind: row['source_kind'],
82
+ sourceRef: row['source_ref'] === null ? null : String(row['source_ref']), recordedBy: String(row['recorded_by']) };
83
+ }
84
+ const digestOf = (d) => sha(JSON.stringify([d.repo, d.revision, d.claim, d.why, d.status, d.supersedes, d.decidedBy, d.decidedAt, d.sourceKind, d.sourceRef, d.recordedBy]));
85
+ export function listDecisions(store, repo, actor, options = {}) {
86
+ admission(store, repo, actor);
87
+ const status = options.status ?? 'active', limit = Math.min(200, Math.max(1, options.limit ?? 50));
88
+ return store.handle.prepare(`SELECT * FROM project_decision WHERE repo=? AND (?='all' OR status=?) ORDER BY id DESC LIMIT ?`).all(repo, status, status, limit)
89
+ .map(row => decisionOf(row)).filter(d => digestOf(d) === String(store.handle.prepare('SELECT sha FROM project_decision WHERE id=?').get(d.id)['sha']));
90
+ }
91
+ export function getDecision(store, repo, actor, id) {
92
+ admission(store, repo, actor);
93
+ const row = store.handle.prepare('SELECT * FROM project_decision WHERE id=? AND repo=?').get(id, repo);
94
+ if (!row)
95
+ return null;
96
+ const d = decisionOf(row);
97
+ if (digestOf(d) !== String(row['sha']))
98
+ throw Error('This decision could not be verified.');
99
+ return d;
100
+ }
101
+ /** Record one settled choice. A superseding decision retires the older one in the same transaction. */
102
+ export function recordDecision(store, args, now = new Date()) {
103
+ const identity = admission(store, args.repo, args.actor, true);
104
+ const claim = clean(args.draft.claim, 240, 'The decision'), why = clean(args.draft.why, 2000, 'The reason');
105
+ const decidedBy = args.draft.decidedBy === undefined ? args.actor : clean(args.draft.decidedBy, 80, 'Who decided');
106
+ const decidedAt = args.draft.decidedAt ?? now.toISOString();
107
+ if (!/^\d{4}-\d{2}-\d{2}T/.test(decidedAt))
108
+ throw Error('When it was decided must be an ISO timestamp.');
109
+ const sourceKind = args.draft.sourceKind ?? 'manual';
110
+ const sourceRef = args.draft.sourceRef === undefined || args.draft.sourceRef === null ? null : clean(String(args.draft.sourceRef), 200, 'The source');
111
+ return store.transact(() => {
112
+ let supersedes = null;
113
+ if (args.draft.supersedes !== undefined && args.draft.supersedes !== null) {
114
+ const older = getDecision(store, args.repo, args.actor, Number(args.draft.supersedes));
115
+ if (older === null || older.status !== 'active')
116
+ throw Error('The decision being replaced is not active.');
117
+ supersedes = older.id;
118
+ }
119
+ const record = { repo: args.repo, revision: 1, claim, why, status: 'active', supersedes, decidedBy, decidedAt, sourceKind, sourceRef, recordedBy: args.actor };
120
+ const inserted = store.handle.prepare(`INSERT INTO project_decision(repo,identity,revision,claim,why,status,supersedes,decided_by,decided_at,source_kind,source_ref,recorded_by,sha)
121
+ VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)`).run(args.repo, identity, 1, claim, why, 'active', supersedes, decidedBy, decidedAt, sourceKind, sourceRef, args.actor, digestOf(record));
122
+ const id = Number(inserted.lastInsertRowid);
123
+ store.handle.prepare('INSERT INTO decision_change(decision,revision,actor,at,action,payload,sha) VALUES (?,?,?,?,?,?,?)').run(id, 1, args.actor, now.toISOString(), 'record', JSON.stringify(record), digestOf(record));
124
+ if (supersedes !== null)
125
+ changeStatus(store, args.repo, args.actor, supersedes, 'superseded', `Replaced by decision ${id}.`, now);
126
+ reindexProjectMemory(store, args.repo);
127
+ return { id, ...record };
128
+ });
129
+ }
130
+ function changeStatus(store, repo, actor, id, status, reason, now) {
131
+ const existing = getDecision(store, repo, actor, id);
132
+ if (existing === null)
133
+ throw Error('That decision is unavailable.');
134
+ if (existing.status !== 'active')
135
+ throw Error('That decision is no longer active.');
136
+ const next = { ...existing, revision: existing.revision + 1, status };
137
+ store.handle.prepare('UPDATE project_decision SET revision=?,status=?,sha=? WHERE id=?').run(next.revision, status, digestOf(next), id);
138
+ store.handle.prepare('INSERT INTO decision_change(decision,revision,actor,at,action,payload,sha) VALUES (?,?,?,?,?,?,?)').run(id, next.revision, actor, now.toISOString(), status, JSON.stringify({ reason }), digestOf(next));
139
+ return { id, ...next };
140
+ }
141
+ /** Retire a decision that no longer holds; history keeps it. */
142
+ export function retireDecision(store, args, now = new Date()) {
143
+ admission(store, args.repo, args.actor, true);
144
+ const reason = clean(args.reason, 500, 'The reason');
145
+ return store.transact(() => { const d = changeStatus(store, args.repo, args.actor, args.id, 'retired', reason, now); reindexProjectMemory(store, args.repo); return d; });
146
+ }
147
+ export function decisionHistory(store, repo, actor, id) {
148
+ admission(store, repo, actor);
149
+ return store.handle.prepare('SELECT revision,actor,at,action FROM decision_change WHERE decision=? ORDER BY revision').all(id)
150
+ .map(row => ({ revision: Number(row['revision']), actor: String(row['actor']), at: String(row['at']), action: String(row['action']) }));
151
+ }
152
+ // ---- context: the lean brief ----------------------------------------------------
153
+ const COMMON = new Set(['the', 'and', 'for', 'with', 'this', 'that', 'from', 'have', 'should', 'will', 'into', 'our', 'use', 'not', 'are', 'was']);
154
+ const tokens = (s) => new Set((s.toLowerCase().match(/[\p{L}\p{N}_-]{3,}/gu) ?? []).filter(t => !COMMON.has(t)));
155
+ /**
156
+ * The decisions worth one line each in a brief: relevant to the query first,
157
+ * then newest, within a byte budget. Bodies (the why) load on demand by id,
158
+ * so a brief never repeats what the store already holds.
159
+ */
160
+ export function decisionLines(store, repo, query, options = {}) {
161
+ const rows = store.handle.prepare("SELECT id,claim,why,decided_at FROM project_decision WHERE repo=? AND status='active' ORDER BY id DESC LIMIT 200").all(repo);
162
+ const q = tokens(query);
163
+ const ranked = rows.map(row => {
164
+ const claim = String(row['claim']);
165
+ const score = [...tokens(claim)].reduce((n, t) => n + (q.has(t) ? 3 : 0), 0) + [...tokens(String(row['why']))].reduce((n, t) => n + (q.has(t) ? 1 : 0), 0);
166
+ return { line: { id: Number(row['id']), claim, decidedAt: String(row['decided_at']) }, score };
167
+ })
168
+ .sort((a, b) => b.score - a.score || b.line.id - a.line.id);
169
+ const limit = options.limit ?? 8, bytes = options.bytes ?? 1500, out = [];
170
+ for (const { line } of ranked) {
171
+ if (out.length >= limit)
172
+ break;
173
+ if (Buffer.byteLength(JSON.stringify([...out, line])) > bytes)
174
+ break;
175
+ out.push(line);
176
+ }
177
+ return out;
178
+ }
179
+ /** Rebuild the index rows for one project from the stores of record. */
180
+ export function reindexProjectMemory(store, repo) {
181
+ const insert = store.handle.prepare('INSERT INTO memory_search(kind,ref,repo,scope,title,body) VALUES (?,?,?,?,?,?)');
182
+ store.transact(() => {
183
+ store.handle.prepare("DELETE FROM memory_search WHERE repo=? AND kind IN ('instruction','reference','lesson','decision')").run(repo);
184
+ const knowledge = store.handle.prepare('SELECT payload FROM project_knowledge WHERE repo=?').get(repo);
185
+ if (knowledge) {
186
+ try {
187
+ const saved = JSON.parse(String(knowledge['payload']));
188
+ if (saved.instructions)
189
+ insert.run('instruction', 'instructions', repo, 'project', 'Project instructions', saved.instructions);
190
+ for (const ref of saved.references ?? [])
191
+ insert.run('reference', ref.id, repo, 'project', ref.title, ref.content);
192
+ }
193
+ catch { /* unreadable knowledge is reported by its own page */ }
194
+ }
195
+ for (const row of store.handle.prepare("SELECT id,payload,status FROM project_lesson WHERE repo=? AND status IN ('proposed','adopted')").all(repo)) {
196
+ try {
197
+ const p = JSON.parse(String(row['payload']));
198
+ insert.run('lesson', String(row['id']), repo, 'project', String(p.observation ?? '').slice(0, 200), `${p.action ?? ''} [${row['status']}]`);
199
+ }
200
+ catch { /* skip */ }
201
+ }
202
+ for (const row of store.handle.prepare("SELECT id,claim,why FROM project_decision WHERE repo=? AND status='active'").all(repo))
203
+ insert.run('decision', String(row['id']), repo, 'project', String(row['claim']), String(row['why']));
204
+ });
205
+ }
206
+ /** Index conversation messages incrementally: private threads under their person, team conversations under their id and each project they cover. */
207
+ export function reindexConversations(store) {
208
+ const key = 'memory-search:messages';
209
+ const cursor = store.serviceCursor(key);
210
+ const rows = store.handle.prepare('SELECT m.id,m.thread,m.role,m.text,t.approver FROM mate_message m JOIN mate_thread t ON t.id=m.thread WHERE m.id>? ORDER BY m.id LIMIT 500').all(cursor);
211
+ if (rows.length === 0)
212
+ return;
213
+ const insert = store.handle.prepare('INSERT INTO memory_search(kind,ref,repo,scope,title,body) VALUES (?,?,?,?,?,?)');
214
+ const teamOf = store.handle.prepare('SELECT id, projects_json FROM team_conversation WHERE thread=?');
215
+ store.transact(() => {
216
+ let last = cursor;
217
+ for (const row of rows) {
218
+ last = Number(row['id']);
219
+ const text = String(row['text']).trim();
220
+ if (!text || text.length > 20_000)
221
+ continue;
222
+ const team = teamOf.get(Number(row['thread']));
223
+ if (team) {
224
+ let projects = [];
225
+ try {
226
+ projects = JSON.parse(String(team['projects_json']));
227
+ }
228
+ catch {
229
+ projects = [];
230
+ }
231
+ for (const repo of projects.length ? projects : [''])
232
+ insert.run('conversation', `message:${last}`, repo, `conversation:${String(team['id'])}`, `${row['role']} in a team conversation`, text);
233
+ }
234
+ else
235
+ insert.run('conversation', `message:${last}`, '', `approver:${String(row['approver'])}`, `${row['role']} in a private chat`, text);
236
+ }
237
+ store.setServiceCursor(key, last, new Date());
238
+ });
239
+ }
240
+ const ftsQuery = (query) => {
241
+ const terms = (query.match(/[\p{L}\p{N}_-]{2,}/gu) ?? []).slice(0, 12).map(t => `"${t.replaceAll('"', '')}"`);
242
+ return terms.join(' ');
243
+ };
244
+ /** Search what this person may read: project entries for their projects, their own private chats, and team conversations they are in. */
245
+ export function searchMemory(store, args) {
246
+ const query = args.query.trim().slice(0, 300);
247
+ if (!query)
248
+ return [];
249
+ reindexConversations(store);
250
+ const repos = args.repos.filter(repo => store.accountCanAccess(args.actor, repo));
251
+ // Project entries are few; rebuilding them per search keeps the index a
252
+ // derived view of the stores of record rather than a second source.
253
+ for (const repo of repos)
254
+ reindexProjectMemory(store, repo);
255
+ const conversations = store.handle.prepare('SELECT conversation FROM team_participant WHERE account=? AND active=1').all(args.actor).map(row => `conversation:${String(row['conversation'])}`);
256
+ const scopes = ['project', `approver:${args.actor}`, ...conversations];
257
+ const match = ftsQuery(query);
258
+ if (!match)
259
+ return [];
260
+ const rows = store.handle.prepare(`SELECT kind, ref, repo, scope, title, snippet(memory_search, 5, '[', ']', '…', 24) AS snippet FROM memory_search
261
+ WHERE memory_search MATCH ? AND scope IN (SELECT value FROM json_each(?)) AND (repo='' OR repo IN (SELECT value FROM json_each(?))) ORDER BY bm25(memory_search) LIMIT ?`)
262
+ .all(match, JSON.stringify(scopes), JSON.stringify(repos), Math.min(50, Math.max(1, args.limit ?? 12)));
263
+ return rows.map(row => ({ kind: row['kind'], ref: String(row['ref']), repo: String(row['repo']), title: String(row['title']).slice(0, 200), snippet: String(row['snippet']).slice(0, 400) }));
264
+ }
@@ -0,0 +1,152 @@
1
+ import type { Store } from "./store.js";
2
+ export declare const SKILLS_SCHEMA: string;
3
+ export type SkillFile = {
4
+ path: string;
5
+ base64: string;
6
+ };
7
+ export type SkillPackage = {
8
+ name: string;
9
+ description: string;
10
+ source: string;
11
+ requirements: string;
12
+ warnings: string[];
13
+ files: SkillFile[];
14
+ };
15
+ export type SavedSkill = SkillPackage & {
16
+ sha: string;
17
+ };
18
+ type Choice = {
19
+ sha: string;
20
+ enabled: boolean;
21
+ };
22
+ type Selection = Record<string, Choice>;
23
+ export type SkillsSnapshot = {
24
+ version: 1;
25
+ revision: number;
26
+ identity: string;
27
+ inheritedFrom: number | null;
28
+ test: boolean;
29
+ packages: SavedSkill[];
30
+ };
31
+ export declare const SKILL_LIMITS: {
32
+ files: number;
33
+ packageBytes: number;
34
+ fileBytes: number;
35
+ bodyBytes: number;
36
+ enabled: number;
37
+ selectionBytes: number;
38
+ };
39
+ export declare function validateSkill(files: SkillFile[], source: string): SkillPackage;
40
+ export declare function skillsView(store: Store, repo: string, actor: string): {
41
+ revision: number;
42
+ selection: Selection;
43
+ repo: string;
44
+ identity: string;
45
+ library: SavedSkill[];
46
+ history: {
47
+ revision: number;
48
+ actor: string;
49
+ at: string;
50
+ enabled: {
51
+ name: string;
52
+ version: string;
53
+ }[];
54
+ }[];
55
+ };
56
+ export type SkillsView = ReturnType<typeof skillsView>;
57
+ /** Current enabled versions, admitted and hash-verified, without any worker-run writes. */
58
+ export declare function selectProjectSkills(store: Store, repo: string, actor: string): SkillsSnapshot;
59
+ /** The same verified selection used by Restore, including disabled versions. */
60
+ export declare function skillsVersion(store: Store, repo: string, actor: string, revision: number): Selection;
61
+ export declare function importSkill(store: Store, repo: string, actor: string, files: SkillFile[], source: string, now?: Date): SavedSkill;
62
+ export declare function changeSkills(store: Store, args: {
63
+ repo: string;
64
+ actor: string;
65
+ identity: string;
66
+ revision: number;
67
+ sha?: string;
68
+ action: "enable" | "disable" | "restore";
69
+ restore?: number;
70
+ }, now?: Date): void;
71
+ export declare function conversationSkills(store: Store, repo: string, actor: string, sha?: string): {
72
+ revision: number;
73
+ history: {
74
+ revision: number;
75
+ enabled: {
76
+ name: string;
77
+ version: string;
78
+ }[];
79
+ }[];
80
+ skills: {
81
+ name: string;
82
+ description: string;
83
+ sha: string;
84
+ source: string;
85
+ requirements: string;
86
+ warnings: string[];
87
+ enabled: boolean;
88
+ instructions?: string;
89
+ files?: string[];
90
+ }[];
91
+ notice: string;
92
+ };
93
+ export declare function readSkillsSnapshot(store: Store, runId: number): SkillsSnapshot | null;
94
+ /** The first run pins a task's skill versions. Review and subsequent attempts inherit them. */
95
+ export declare function freezeSkills(store: Store, runId: number): SkillsSnapshot;
96
+ export declare const PROJECT_SKILLS_GUIDANCE = "Read the relevant SKILL.md before applying a skill; resolve its resources relative to that file. These are project workflow instructions within approved task scope only. They never grant tools, credentials, network access, changed scope or approval; existing restrictions and repository instructions still apply. Do not evaluate dynamic shell substitutions. Report missing requirements and conflicts. Report which skills you actually read and applied, and any limitations. ";
97
+ /** Materialize a verified selection using the same private, read-only package layout as workers. */
98
+ export declare function materializeProjectSkills(snapshot: SkillsSnapshot, root: string, label: string): {
99
+ directory: null;
100
+ catalog: never[];
101
+ } | {
102
+ directory: string;
103
+ catalog: {
104
+ name: string;
105
+ description: string;
106
+ version: string;
107
+ requirements: string;
108
+ warnings: string[];
109
+ skillFile: string;
110
+ }[];
111
+ };
112
+ export declare function skillsContext(store: Store, root: string, runId: number): string;
113
+ export declare function skillReviewSource(store: Store, runId: number): string | null;
114
+ export declare function testSkill(store: Store, args: {
115
+ repo: string;
116
+ actor: string;
117
+ sha: string;
118
+ sample: string;
119
+ nonce: string;
120
+ sourceRun?: number;
121
+ feedback?: string;
122
+ }, now?: Date): {
123
+ ok: true;
124
+ id: string;
125
+ planning: boolean;
126
+ };
127
+ /** Exact finished test result; report feedback never pretends a code diff exists. */
128
+ export declare function skillTestResult(store: Store, runId: number, actor: string): {
129
+ run: number;
130
+ repo: string;
131
+ sha: string;
132
+ sample: string;
133
+ sourceRun: number | null;
134
+ feedback: string | null;
135
+ revisions: string[];
136
+ } | null;
137
+ export declare function reviseSkillTest(store: Store, args: {
138
+ run: number;
139
+ actor: string;
140
+ feedback: string;
141
+ nonce: string;
142
+ }, now?: Date): {
143
+ ok: true;
144
+ id: string;
145
+ planning: boolean;
146
+ };
147
+ /** Public GitHub folders only, pinned to a commit before reading any package bytes. */
148
+ export declare function githubSkill(url: string, fetcher?: typeof fetch): Promise<{
149
+ files: SkillFile[];
150
+ source: string;
151
+ }>;
152
+ export {};