agent-bober 0.18.0 → 0.19.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 (824) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/CHANGELOG.md +11 -0
  3. package/README.md +245 -6
  4. package/agents/bober-art-director.md +100 -0
  5. package/agents/bober-design-critic.md +114 -0
  6. package/agents/bober-frontend-builder.md +101 -0
  7. package/agents/bober-security-auditor.md +193 -0
  8. package/agents/bober-security-verifier.md +104 -0
  9. package/agents/bober-seo-strategist.md +144 -0
  10. package/agents/bober-seo-verifier.md +103 -0
  11. package/dist/calendar/calendar-egress.d.ts +26 -0
  12. package/dist/calendar/calendar-egress.d.ts.map +1 -0
  13. package/dist/calendar/calendar-egress.js +35 -0
  14. package/dist/calendar/calendar-egress.js.map +1 -0
  15. package/dist/calendar/calendar-token.d.ts +34 -0
  16. package/dist/calendar/calendar-token.d.ts.map +1 -0
  17. package/dist/calendar/calendar-token.js +56 -0
  18. package/dist/calendar/calendar-token.js.map +1 -0
  19. package/dist/calendar/connector.d.ts +22 -0
  20. package/dist/calendar/connector.d.ts.map +1 -0
  21. package/dist/calendar/connector.js +3 -0
  22. package/dist/calendar/connector.js.map +1 -0
  23. package/dist/calendar/finding-source.d.ts +20 -0
  24. package/dist/calendar/finding-source.d.ts.map +1 -0
  25. package/dist/calendar/finding-source.js +35 -0
  26. package/dist/calendar/finding-source.js.map +1 -0
  27. package/dist/calendar/google-connector.d.ts +65 -0
  28. package/dist/calendar/google-connector.d.ts.map +1 -0
  29. package/dist/calendar/google-connector.js +129 -0
  30. package/dist/calendar/google-connector.js.map +1 -0
  31. package/dist/calendar/ics-connector.d.ts +12 -0
  32. package/dist/calendar/ics-connector.d.ts.map +1 -0
  33. package/dist/calendar/ics-connector.js +48 -0
  34. package/dist/calendar/ics-connector.js.map +1 -0
  35. package/dist/calendar/proposal-gate.d.ts +84 -0
  36. package/dist/calendar/proposal-gate.d.ts.map +1 -0
  37. package/dist/calendar/proposal-gate.js +126 -0
  38. package/dist/calendar/proposal-gate.js.map +1 -0
  39. package/dist/calendar/slotter.d.ts +34 -0
  40. package/dist/calendar/slotter.d.ts.map +1 -0
  41. package/dist/calendar/slotter.js +196 -0
  42. package/dist/calendar/slotter.js.map +1 -0
  43. package/dist/calendar/types.d.ts +162 -0
  44. package/dist/calendar/types.d.ts.map +1 -0
  45. package/dist/calendar/types.js +28 -0
  46. package/dist/calendar/types.js.map +1 -0
  47. package/dist/chat/chat-session.d.ts +27 -0
  48. package/dist/chat/chat-session.d.ts.map +1 -1
  49. package/dist/chat/chat-session.js +101 -1
  50. package/dist/chat/chat-session.js.map +1 -1
  51. package/dist/chat/slash-commands.d.ts +6 -2
  52. package/dist/chat/slash-commands.d.ts.map +1 -1
  53. package/dist/chat/slash-commands.js +22 -2
  54. package/dist/chat/slash-commands.js.map +1 -1
  55. package/dist/chat/turn-classifier.d.ts +3 -0
  56. package/dist/chat/turn-classifier.d.ts.map +1 -1
  57. package/dist/chat/turn-classifier.js +7 -0
  58. package/dist/chat/turn-classifier.js.map +1 -1
  59. package/dist/cli/commands/calendar.d.ts +75 -0
  60. package/dist/cli/commands/calendar.d.ts.map +1 -0
  61. package/dist/cli/commands/calendar.js +203 -0
  62. package/dist/cli/commands/calendar.js.map +1 -0
  63. package/dist/cli/commands/do.d.ts +52 -0
  64. package/dist/cli/commands/do.d.ts.map +1 -0
  65. package/dist/cli/commands/do.js +216 -0
  66. package/dist/cli/commands/do.js.map +1 -0
  67. package/dist/cli/commands/hub.d.ts +29 -0
  68. package/dist/cli/commands/hub.d.ts.map +1 -0
  69. package/dist/cli/commands/hub.js +233 -0
  70. package/dist/cli/commands/hub.js.map +1 -0
  71. package/dist/cli/commands/medical.d.ts +25 -0
  72. package/dist/cli/commands/medical.d.ts.map +1 -1
  73. package/dist/cli/commands/medical.js +233 -0
  74. package/dist/cli/commands/medical.js.map +1 -1
  75. package/dist/cli/commands/research.d.ts +41 -0
  76. package/dist/cli/commands/research.d.ts.map +1 -0
  77. package/dist/cli/commands/research.js +313 -0
  78. package/dist/cli/commands/research.js.map +1 -0
  79. package/dist/cli/commands/security-audit.d.ts +89 -0
  80. package/dist/cli/commands/security-audit.d.ts.map +1 -0
  81. package/dist/cli/commands/security-audit.js +238 -0
  82. package/dist/cli/commands/security-audit.js.map +1 -0
  83. package/dist/cli/commands/task.d.ts +64 -0
  84. package/dist/cli/commands/task.d.ts.map +1 -0
  85. package/dist/cli/commands/task.js +422 -0
  86. package/dist/cli/commands/task.js.map +1 -0
  87. package/dist/cli/commands/telegram.d.ts +10 -0
  88. package/dist/cli/commands/telegram.d.ts.map +1 -0
  89. package/dist/cli/commands/telegram.js +44 -0
  90. package/dist/cli/commands/telegram.js.map +1 -0
  91. package/dist/cli/commands/vault.d.ts +40 -0
  92. package/dist/cli/commands/vault.d.ts.map +1 -0
  93. package/dist/cli/commands/vault.js +122 -0
  94. package/dist/cli/commands/vault.js.map +1 -0
  95. package/dist/cli/index.js +33 -0
  96. package/dist/cli/index.js.map +1 -1
  97. package/dist/config/role-providers.d.ts +15 -0
  98. package/dist/config/role-providers.d.ts.map +1 -1
  99. package/dist/config/role-providers.js +8 -1
  100. package/dist/config/role-providers.js.map +1 -1
  101. package/dist/config/schema.d.ts +3522 -171
  102. package/dist/config/schema.d.ts.map +1 -1
  103. package/dist/config/schema.js +405 -2
  104. package/dist/config/schema.js.map +1 -1
  105. package/dist/do-bridge/coding-promoter.d.ts +19 -0
  106. package/dist/do-bridge/coding-promoter.d.ts.map +1 -0
  107. package/dist/do-bridge/coding-promoter.js +43 -0
  108. package/dist/do-bridge/coding-promoter.js.map +1 -0
  109. package/dist/do-bridge/finding-port.d.ts +88 -0
  110. package/dist/do-bridge/finding-port.d.ts.map +1 -0
  111. package/dist/do-bridge/finding-port.js +95 -0
  112. package/dist/do-bridge/finding-port.js.map +1 -0
  113. package/dist/do-bridge/launcher.d.ts +55 -0
  114. package/dist/do-bridge/launcher.d.ts.map +1 -0
  115. package/dist/do-bridge/launcher.js +37 -0
  116. package/dist/do-bridge/launcher.js.map +1 -0
  117. package/dist/do-bridge/promote.d.ts +50 -0
  118. package/dist/do-bridge/promote.d.ts.map +1 -0
  119. package/dist/do-bridge/promote.js +116 -0
  120. package/dist/do-bridge/promote.js.map +1 -0
  121. package/dist/do-bridge/reconcile.d.ts +50 -0
  122. package/dist/do-bridge/reconcile.d.ts.map +1 -0
  123. package/dist/do-bridge/reconcile.js +70 -0
  124. package/dist/do-bridge/reconcile.js.map +1 -0
  125. package/dist/do-bridge/registry.d.ts +23 -0
  126. package/dist/do-bridge/registry.d.ts.map +1 -0
  127. package/dist/do-bridge/registry.js +42 -0
  128. package/dist/do-bridge/registry.js.map +1 -0
  129. package/dist/do-bridge/types.d.ts +50 -0
  130. package/dist/do-bridge/types.d.ts.map +1 -0
  131. package/dist/do-bridge/types.js +17 -0
  132. package/dist/do-bridge/types.js.map +1 -0
  133. package/dist/fleet/child-config.d.ts.map +1 -1
  134. package/dist/fleet/child-config.js +7 -0
  135. package/dist/fleet/child-config.js.map +1 -1
  136. package/dist/fleet/coordinator.d.ts +27 -1
  137. package/dist/fleet/coordinator.d.ts.map +1 -1
  138. package/dist/fleet/coordinator.js +70 -0
  139. package/dist/fleet/coordinator.js.map +1 -1
  140. package/dist/fleet/critic-deep.d.ts +9 -1
  141. package/dist/fleet/critic-deep.d.ts.map +1 -1
  142. package/dist/fleet/critic-deep.js +5 -2
  143. package/dist/fleet/critic-deep.js.map +1 -1
  144. package/dist/fleet/decomposer-deep.d.ts +4 -11
  145. package/dist/fleet/decomposer-deep.d.ts.map +1 -1
  146. package/dist/fleet/decomposer-deep.js +5 -5
  147. package/dist/fleet/decomposer-deep.js.map +1 -1
  148. package/dist/fleet/index.d.ts +9 -0
  149. package/dist/fleet/index.d.ts.map +1 -1
  150. package/dist/fleet/index.js +87 -8
  151. package/dist/fleet/index.js.map +1 -1
  152. package/dist/fleet/manifest.d.ts +26 -0
  153. package/dist/fleet/manifest.d.ts.map +1 -1
  154. package/dist/fleet/manifest.js +8 -0
  155. package/dist/fleet/manifest.js.map +1 -1
  156. package/dist/fleet/reporter.d.ts +4 -1
  157. package/dist/fleet/reporter.d.ts.map +1 -1
  158. package/dist/fleet/reporter.js +2 -1
  159. package/dist/fleet/reporter.js.map +1 -1
  160. package/dist/fleet/scaffolder.d.ts +5 -1
  161. package/dist/fleet/scaffolder.d.ts.map +1 -1
  162. package/dist/fleet/scaffolder.js +11 -2
  163. package/dist/fleet/scaffolder.js.map +1 -1
  164. package/dist/graph/client.d.ts.map +1 -1
  165. package/dist/graph/client.js +115 -23
  166. package/dist/graph/client.js.map +1 -1
  167. package/dist/graph/mcp-client.d.ts +1 -0
  168. package/dist/graph/mcp-client.d.ts.map +1 -1
  169. package/dist/graph/mcp-client.js +58 -7
  170. package/dist/graph/mcp-client.js.map +1 -1
  171. package/dist/hub/collector.d.ts +12 -0
  172. package/dist/hub/collector.d.ts.map +1 -0
  173. package/dist/hub/collector.js +36 -0
  174. package/dist/hub/collector.js.map +1 -0
  175. package/dist/hub/finding-source.d.ts +22 -0
  176. package/dist/hub/finding-source.d.ts.map +1 -0
  177. package/dist/hub/finding-source.js +41 -0
  178. package/dist/hub/finding-source.js.map +1 -0
  179. package/dist/hub/finding-store.d.ts +68 -0
  180. package/dist/hub/finding-store.d.ts.map +1 -0
  181. package/dist/hub/finding-store.js +122 -0
  182. package/dist/hub/finding-store.js.map +1 -0
  183. package/dist/hub/finding.d.ts +54 -0
  184. package/dist/hub/finding.d.ts.map +1 -0
  185. package/dist/hub/finding.js +24 -0
  186. package/dist/hub/finding.js.map +1 -0
  187. package/dist/hub/gmail-to-task.d.ts +69 -0
  188. package/dist/hub/gmail-to-task.d.ts.map +1 -0
  189. package/dist/hub/gmail-to-task.js +102 -0
  190. package/dist/hub/gmail-to-task.js.map +1 -0
  191. package/dist/hub/hub-config.d.ts +18 -0
  192. package/dist/hub/hub-config.d.ts.map +1 -0
  193. package/dist/hub/hub-config.js +40 -0
  194. package/dist/hub/hub-config.js.map +1 -0
  195. package/dist/hub/judge.d.ts +30 -0
  196. package/dist/hub/judge.d.ts.map +1 -0
  197. package/dist/hub/judge.js +177 -0
  198. package/dist/hub/judge.js.map +1 -0
  199. package/dist/hub/lenses.d.ts +60 -0
  200. package/dist/hub/lenses.d.ts.map +1 -0
  201. package/dist/hub/lenses.js +123 -0
  202. package/dist/hub/lenses.js.map +1 -0
  203. package/dist/hub/priority-md.d.ts +21 -0
  204. package/dist/hub/priority-md.d.ts.map +1 -0
  205. package/dist/hub/priority-md.js +64 -0
  206. package/dist/hub/priority-md.js.map +1 -0
  207. package/dist/hub/repo-resolver.d.ts +11 -0
  208. package/dist/hub/repo-resolver.d.ts.map +1 -0
  209. package/dist/hub/repo-resolver.js +39 -0
  210. package/dist/hub/repo-resolver.js.map +1 -0
  211. package/dist/hub/scope.d.ts +39 -0
  212. package/dist/hub/scope.d.ts.map +1 -0
  213. package/dist/hub/scope.js +62 -0
  214. package/dist/hub/scope.js.map +1 -0
  215. package/dist/hub/task-inbox.d.ts +16 -0
  216. package/dist/hub/task-inbox.d.ts.map +1 -0
  217. package/dist/hub/task-inbox.js +39 -0
  218. package/dist/hub/task-inbox.js.map +1 -0
  219. package/dist/incident/resolution-verify.d.ts +2 -2
  220. package/dist/index.d.ts +2 -1
  221. package/dist/index.d.ts.map +1 -1
  222. package/dist/index.js +2 -1
  223. package/dist/index.js.map +1 -1
  224. package/dist/medical/adapters/apple-health.js +1 -1
  225. package/dist/medical/adapters/apple-health.js.map +1 -1
  226. package/dist/medical/analysis/cadence.d.ts +32 -0
  227. package/dist/medical/analysis/cadence.d.ts.map +1 -0
  228. package/dist/medical/analysis/cadence.js +72 -0
  229. package/dist/medical/analysis/cadence.js.map +1 -0
  230. package/dist/medical/analysis/cross-marker.d.ts +33 -0
  231. package/dist/medical/analysis/cross-marker.d.ts.map +1 -0
  232. package/dist/medical/analysis/cross-marker.js +79 -0
  233. package/dist/medical/analysis/cross-marker.js.map +1 -0
  234. package/dist/medical/analysis/finding-writer.d.ts +26 -0
  235. package/dist/medical/analysis/finding-writer.d.ts.map +1 -0
  236. package/dist/medical/analysis/finding-writer.js +60 -0
  237. package/dist/medical/analysis/finding-writer.js.map +1 -0
  238. package/dist/medical/analysis/finding.d.ts +63 -0
  239. package/dist/medical/analysis/finding.d.ts.map +1 -0
  240. package/dist/medical/analysis/finding.js +70 -0
  241. package/dist/medical/analysis/finding.js.map +1 -0
  242. package/dist/medical/analysis/review-pass.d.ts +76 -0
  243. package/dist/medical/analysis/review-pass.d.ts.map +1 -0
  244. package/dist/medical/analysis/review-pass.js +119 -0
  245. package/dist/medical/analysis/review-pass.js.map +1 -0
  246. package/dist/medical/analysis/trends.d.ts +36 -0
  247. package/dist/medical/analysis/trends.d.ts.map +1 -0
  248. package/dist/medical/analysis/trends.js +157 -0
  249. package/dist/medical/analysis/trends.js.map +1 -0
  250. package/dist/medical/health-store.d.ts +5 -0
  251. package/dist/medical/health-store.d.ts.map +1 -1
  252. package/dist/medical/health-store.js +10 -0
  253. package/dist/medical/health-store.js.map +1 -1
  254. package/dist/medical/lab-note.d.ts +72 -0
  255. package/dist/medical/lab-note.d.ts.map +1 -0
  256. package/dist/medical/lab-note.js +161 -0
  257. package/dist/medical/lab-note.js.map +1 -0
  258. package/dist/medical/lab-pdf-parser.d.ts +19 -0
  259. package/dist/medical/lab-pdf-parser.d.ts.map +1 -0
  260. package/dist/medical/lab-pdf-parser.js +57 -0
  261. package/dist/medical/lab-pdf-parser.js.map +1 -0
  262. package/dist/medical/lab-reindex.d.ts +24 -0
  263. package/dist/medical/lab-reindex.d.ts.map +1 -0
  264. package/dist/medical/lab-reindex.js +45 -0
  265. package/dist/medical/lab-reindex.js.map +1 -0
  266. package/dist/medical/lab-types.d.ts +75 -0
  267. package/dist/medical/lab-types.d.ts.map +1 -0
  268. package/dist/medical/lab-types.js +17 -0
  269. package/dist/medical/lab-types.js.map +1 -0
  270. package/dist/medical/profile.d.ts +96 -0
  271. package/dist/medical/profile.d.ts.map +1 -0
  272. package/dist/medical/profile.js +273 -0
  273. package/dist/medical/profile.js.map +1 -0
  274. package/dist/medical/recommend/context.d.ts +48 -0
  275. package/dist/medical/recommend/context.d.ts.map +1 -0
  276. package/dist/medical/recommend/context.js +109 -0
  277. package/dist/medical/recommend/context.js.map +1 -0
  278. package/dist/medical/recommend/judge-panel.d.ts +49 -0
  279. package/dist/medical/recommend/judge-panel.d.ts.map +1 -0
  280. package/dist/medical/recommend/judge-panel.js +164 -0
  281. package/dist/medical/recommend/judge-panel.js.map +1 -0
  282. package/dist/medical/recommend/lenses.d.ts +72 -0
  283. package/dist/medical/recommend/lenses.d.ts.map +1 -0
  284. package/dist/medical/recommend/lenses.js +220 -0
  285. package/dist/medical/recommend/lenses.js.map +1 -0
  286. package/dist/medical/recommend/recommend.d.ts +86 -0
  287. package/dist/medical/recommend/recommend.d.ts.map +1 -0
  288. package/dist/medical/recommend/recommend.js +211 -0
  289. package/dist/medical/recommend/recommend.js.map +1 -0
  290. package/dist/medical/recommend/types.d.ts +98 -0
  291. package/dist/medical/recommend/types.d.ts.map +1 -0
  292. package/dist/medical/recommend/types.js +20 -0
  293. package/dist/medical/recommend/types.js.map +1 -0
  294. package/dist/medical/recommend/urgency.d.ts +26 -0
  295. package/dist/medical/recommend/urgency.d.ts.map +1 -0
  296. package/dist/medical/recommend/urgency.js +124 -0
  297. package/dist/medical/recommend/urgency.js.map +1 -0
  298. package/dist/medical/research/online-research.d.ts +65 -0
  299. package/dist/medical/research/online-research.d.ts.map +1 -0
  300. package/dist/medical/research/online-research.js +101 -0
  301. package/dist/medical/research/online-research.js.map +1 -0
  302. package/dist/medical/research/research-note.d.ts +32 -0
  303. package/dist/medical/research/research-note.d.ts.map +1 -0
  304. package/dist/medical/research/research-note.js +55 -0
  305. package/dist/medical/research/research-note.js.map +1 -0
  306. package/dist/medical/supplements.d.ts +82 -0
  307. package/dist/medical/supplements.d.ts.map +1 -0
  308. package/dist/medical/supplements.js +173 -0
  309. package/dist/medical/supplements.js.map +1 -0
  310. package/dist/orchestrator/agentic-loop.d.ts +160 -1
  311. package/dist/orchestrator/agentic-loop.d.ts.map +1 -1
  312. package/dist/orchestrator/agentic-loop.js +350 -41
  313. package/dist/orchestrator/agentic-loop.js.map +1 -1
  314. package/dist/orchestrator/compaction.d.ts +47 -0
  315. package/dist/orchestrator/compaction.d.ts.map +1 -0
  316. package/dist/orchestrator/compaction.js +75 -0
  317. package/dist/orchestrator/compaction.js.map +1 -0
  318. package/dist/orchestrator/generator-agent.d.ts +19 -0
  319. package/dist/orchestrator/generator-agent.d.ts.map +1 -1
  320. package/dist/orchestrator/generator-agent.js +27 -1
  321. package/dist/orchestrator/generator-agent.js.map +1 -1
  322. package/dist/orchestrator/loop-events.d.ts +98 -0
  323. package/dist/orchestrator/loop-events.d.ts.map +1 -0
  324. package/dist/orchestrator/loop-events.js +2 -0
  325. package/dist/orchestrator/loop-events.js.map +1 -0
  326. package/dist/orchestrator/model-resolver.d.ts.map +1 -1
  327. package/dist/orchestrator/model-resolver.js +10 -6
  328. package/dist/orchestrator/model-resolver.js.map +1 -1
  329. package/dist/orchestrator/pipeline.d.ts +10 -1
  330. package/dist/orchestrator/pipeline.d.ts.map +1 -1
  331. package/dist/orchestrator/pipeline.js +102 -4
  332. package/dist/orchestrator/pipeline.js.map +1 -1
  333. package/dist/orchestrator/security-audit-types.d.ts +53 -0
  334. package/dist/orchestrator/security-audit-types.d.ts.map +1 -0
  335. package/dist/orchestrator/security-audit-types.js +10 -0
  336. package/dist/orchestrator/security-audit-types.js.map +1 -0
  337. package/dist/orchestrator/security-auditor-agent.d.ts +68 -0
  338. package/dist/orchestrator/security-auditor-agent.d.ts.map +1 -0
  339. package/dist/orchestrator/security-auditor-agent.js +482 -0
  340. package/dist/orchestrator/security-auditor-agent.js.map +1 -0
  341. package/dist/orchestrator/security-gate.d.ts +73 -0
  342. package/dist/orchestrator/security-gate.d.ts.map +1 -0
  343. package/dist/orchestrator/security-gate.js +174 -0
  344. package/dist/orchestrator/security-gate.js.map +1 -0
  345. package/dist/orchestrator/security-hub.d.ts +45 -0
  346. package/dist/orchestrator/security-hub.d.ts.map +1 -0
  347. package/dist/orchestrator/security-hub.js +147 -0
  348. package/dist/orchestrator/security-hub.js.map +1 -0
  349. package/dist/orchestrator/security-knowledge/benchmark/harness.d.ts +43 -0
  350. package/dist/orchestrator/security-knowledge/benchmark/harness.d.ts.map +1 -0
  351. package/dist/orchestrator/security-knowledge/benchmark/harness.js +13 -0
  352. package/dist/orchestrator/security-knowledge/benchmark/harness.js.map +1 -0
  353. package/dist/orchestrator/security-knowledge/diff-provider.d.ts +79 -0
  354. package/dist/orchestrator/security-knowledge/diff-provider.d.ts.map +1 -0
  355. package/dist/orchestrator/security-knowledge/diff-provider.js +320 -0
  356. package/dist/orchestrator/security-knowledge/diff-provider.js.map +1 -0
  357. package/dist/orchestrator/security-knowledge/index.d.ts +22 -0
  358. package/dist/orchestrator/security-knowledge/index.d.ts.map +1 -0
  359. package/dist/orchestrator/security-knowledge/index.js +66 -0
  360. package/dist/orchestrator/security-knowledge/index.js.map +1 -0
  361. package/dist/orchestrator/security-knowledge/parser.d.ts +9 -0
  362. package/dist/orchestrator/security-knowledge/parser.d.ts.map +1 -0
  363. package/dist/orchestrator/security-knowledge/parser.js +137 -0
  364. package/dist/orchestrator/security-knowledge/parser.js.map +1 -0
  365. package/dist/orchestrator/security-knowledge/registry.d.ts +25 -0
  366. package/dist/orchestrator/security-knowledge/registry.d.ts.map +1 -0
  367. package/dist/orchestrator/security-knowledge/registry.js +114 -0
  368. package/dist/orchestrator/security-knowledge/registry.js.map +1 -0
  369. package/dist/orchestrator/security-knowledge/resolver.d.ts +48 -0
  370. package/dist/orchestrator/security-knowledge/resolver.d.ts.map +1 -0
  371. package/dist/orchestrator/security-knowledge/resolver.js +63 -0
  372. package/dist/orchestrator/security-knowledge/resolver.js.map +1 -0
  373. package/dist/orchestrator/security-knowledge/selector.d.ts +18 -0
  374. package/dist/orchestrator/security-knowledge/selector.d.ts.map +1 -0
  375. package/dist/orchestrator/security-knowledge/selector.js +46 -0
  376. package/dist/orchestrator/security-knowledge/selector.js.map +1 -0
  377. package/dist/orchestrator/security-knowledge/signature.d.ts +37 -0
  378. package/dist/orchestrator/security-knowledge/signature.d.ts.map +1 -0
  379. package/dist/orchestrator/security-knowledge/signature.js +2 -0
  380. package/dist/orchestrator/security-knowledge/signature.js.map +1 -0
  381. package/dist/orchestrator/security-knowledge/supply-chain-inspector.d.ts +29 -0
  382. package/dist/orchestrator/security-knowledge/supply-chain-inspector.d.ts.map +1 -0
  383. package/dist/orchestrator/security-knowledge/supply-chain-inspector.js +211 -0
  384. package/dist/orchestrator/security-knowledge/supply-chain-inspector.js.map +1 -0
  385. package/dist/orchestrator/security-scanners.d.ts +126 -0
  386. package/dist/orchestrator/security-scanners.d.ts.map +1 -0
  387. package/dist/orchestrator/security-scanners.js +501 -0
  388. package/dist/orchestrator/security-scanners.js.map +1 -0
  389. package/dist/orchestrator/security-verifier-agent.d.ts +62 -0
  390. package/dist/orchestrator/security-verifier-agent.d.ts.map +1 -0
  391. package/dist/orchestrator/security-verifier-agent.js +230 -0
  392. package/dist/orchestrator/security-verifier-agent.js.map +1 -0
  393. package/dist/orchestrator/session-store.d.ts +95 -0
  394. package/dist/orchestrator/session-store.d.ts.map +1 -0
  395. package/dist/orchestrator/session-store.js +186 -0
  396. package/dist/orchestrator/session-store.js.map +1 -0
  397. package/dist/orchestrator/stack-knowledge.d.ts +17 -0
  398. package/dist/orchestrator/stack-knowledge.d.ts.map +1 -0
  399. package/dist/orchestrator/stack-knowledge.js +35 -0
  400. package/dist/orchestrator/stack-knowledge.js.map +1 -0
  401. package/dist/orchestrator/subagents.d.ts +62 -0
  402. package/dist/orchestrator/subagents.d.ts.map +1 -0
  403. package/dist/orchestrator/subagents.js +143 -0
  404. package/dist/orchestrator/subagents.js.map +1 -0
  405. package/dist/orchestrator/tools/executor.d.ts +68 -0
  406. package/dist/orchestrator/tools/executor.d.ts.map +1 -0
  407. package/dist/orchestrator/tools/executor.js +104 -0
  408. package/dist/orchestrator/tools/executor.js.map +1 -0
  409. package/dist/orchestrator/tools/mcp-bridge.d.ts +76 -0
  410. package/dist/orchestrator/tools/mcp-bridge.d.ts.map +1 -0
  411. package/dist/orchestrator/tools/mcp-bridge.js +154 -0
  412. package/dist/orchestrator/tools/mcp-bridge.js.map +1 -0
  413. package/dist/orchestrator/tools/schemas.d.ts.map +1 -1
  414. package/dist/orchestrator/tools/schemas.js +3 -0
  415. package/dist/orchestrator/tools/schemas.js.map +1 -1
  416. package/dist/orchestrator/workflow/budget.d.ts +24 -2
  417. package/dist/orchestrator/workflow/budget.d.ts.map +1 -1
  418. package/dist/orchestrator/workflow/budget.js +39 -1
  419. package/dist/orchestrator/workflow/budget.js.map +1 -1
  420. package/dist/orchestrator/workflow/engine.d.ts +1 -1
  421. package/dist/orchestrator/workflow/engine.d.ts.map +1 -1
  422. package/dist/orchestrator/workflow/selector.d.ts.map +1 -1
  423. package/dist/orchestrator/workflow/selector.js +10 -0
  424. package/dist/orchestrator/workflow/selector.js.map +1 -1
  425. package/dist/providers/anthropic.d.ts.map +1 -1
  426. package/dist/providers/anthropic.js +116 -26
  427. package/dist/providers/anthropic.js.map +1 -1
  428. package/dist/providers/claude-code.d.ts.map +1 -1
  429. package/dist/providers/claude-code.js +17 -0
  430. package/dist/providers/claude-code.js.map +1 -1
  431. package/dist/providers/cost-meter.d.ts +52 -0
  432. package/dist/providers/cost-meter.d.ts.map +1 -0
  433. package/dist/providers/cost-meter.js +81 -0
  434. package/dist/providers/cost-meter.js.map +1 -0
  435. package/dist/providers/factory.d.ts +6 -1
  436. package/dist/providers/factory.d.ts.map +1 -1
  437. package/dist/providers/factory.js +24 -5
  438. package/dist/providers/factory.js.map +1 -1
  439. package/dist/providers/google.d.ts.map +1 -1
  440. package/dist/providers/google.js +29 -0
  441. package/dist/providers/google.js.map +1 -1
  442. package/dist/providers/grounded-search.d.ts +128 -0
  443. package/dist/providers/grounded-search.d.ts.map +1 -0
  444. package/dist/providers/grounded-search.js +160 -0
  445. package/dist/providers/grounded-search.js.map +1 -0
  446. package/dist/providers/openai-compat.d.ts +15 -1
  447. package/dist/providers/openai-compat.d.ts.map +1 -1
  448. package/dist/providers/openai-compat.js +24 -0
  449. package/dist/providers/openai-compat.js.map +1 -1
  450. package/dist/providers/openai.d.ts +7 -0
  451. package/dist/providers/openai.d.ts.map +1 -1
  452. package/dist/providers/openai.js +95 -4
  453. package/dist/providers/openai.js.map +1 -1
  454. package/dist/providers/types.d.ts +88 -0
  455. package/dist/providers/types.d.ts.map +1 -1
  456. package/dist/research/cadence.d.ts +33 -0
  457. package/dist/research/cadence.d.ts.map +1 -0
  458. package/dist/research/cadence.js +55 -0
  459. package/dist/research/cadence.js.map +1 -0
  460. package/dist/research/digest.d.ts +80 -0
  461. package/dist/research/digest.d.ts.map +1 -0
  462. package/dist/research/digest.js +119 -0
  463. package/dist/research/digest.js.map +1 -0
  464. package/dist/research/egress.d.ts +28 -0
  465. package/dist/research/egress.d.ts.map +1 -0
  466. package/dist/research/egress.js +41 -0
  467. package/dist/research/egress.js.map +1 -0
  468. package/dist/research/job-store.d.ts +30 -0
  469. package/dist/research/job-store.d.ts.map +1 -0
  470. package/dist/research/job-store.js +100 -0
  471. package/dist/research/job-store.js.map +1 -0
  472. package/dist/research/model-diversity.d.ts +27 -0
  473. package/dist/research/model-diversity.d.ts.map +1 -0
  474. package/dist/research/model-diversity.js +52 -0
  475. package/dist/research/model-diversity.js.map +1 -0
  476. package/dist/research/note-writer.d.ts +36 -0
  477. package/dist/research/note-writer.d.ts.map +1 -0
  478. package/dist/research/note-writer.js +53 -0
  479. package/dist/research/note-writer.js.map +1 -0
  480. package/dist/research/online-retrieval.d.ts +27 -0
  481. package/dist/research/online-retrieval.d.ts.map +1 -0
  482. package/dist/research/online-retrieval.js +22 -0
  483. package/dist/research/online-retrieval.js.map +1 -0
  484. package/dist/research/runner.d.ts +80 -0
  485. package/dist/research/runner.d.ts.map +1 -0
  486. package/dist/research/runner.js +115 -0
  487. package/dist/research/runner.js.map +1 -0
  488. package/dist/research/scheduler.d.ts +61 -0
  489. package/dist/research/scheduler.d.ts.map +1 -0
  490. package/dist/research/scheduler.js +58 -0
  491. package/dist/research/scheduler.js.map +1 -0
  492. package/dist/research/types.d.ts +81 -0
  493. package/dist/research/types.d.ts.map +1 -0
  494. package/dist/research/types.js +57 -0
  495. package/dist/research/types.js.map +1 -0
  496. package/dist/seo/adapters/http.d.ts +43 -0
  497. package/dist/seo/adapters/http.d.ts.map +1 -0
  498. package/dist/seo/adapters/http.js +35 -0
  499. package/dist/seo/adapters/http.js.map +1 -0
  500. package/dist/seo/ai-visibility-provider.d.ts +171 -0
  501. package/dist/seo/ai-visibility-provider.d.ts.map +1 -0
  502. package/dist/seo/ai-visibility-provider.js +165 -0
  503. package/dist/seo/ai-visibility-provider.js.map +1 -0
  504. package/dist/seo/ai-visibility-scorer.d.ts +43 -0
  505. package/dist/seo/ai-visibility-scorer.d.ts.map +1 -0
  506. package/dist/seo/ai-visibility-scorer.js +102 -0
  507. package/dist/seo/ai-visibility-scorer.js.map +1 -0
  508. package/dist/seo/analyzer.d.ts +58 -0
  509. package/dist/seo/analyzer.d.ts.map +1 -0
  510. package/dist/seo/analyzer.js +265 -0
  511. package/dist/seo/analyzer.js.map +1 -0
  512. package/dist/seo/benchmark/harness.d.ts +56 -0
  513. package/dist/seo/benchmark/harness.d.ts.map +1 -0
  514. package/dist/seo/benchmark/harness.js +172 -0
  515. package/dist/seo/benchmark/harness.js.map +1 -0
  516. package/dist/seo/builder/approved-finding.d.ts +115 -0
  517. package/dist/seo/builder/approved-finding.d.ts.map +1 -0
  518. package/dist/seo/builder/approved-finding.js +145 -0
  519. package/dist/seo/builder/approved-finding.js.map +1 -0
  520. package/dist/seo/builder/build-runner.d.ts +41 -0
  521. package/dist/seo/builder/build-runner.d.ts.map +1 -0
  522. package/dist/seo/builder/build-runner.js +156 -0
  523. package/dist/seo/builder/build-runner.js.map +1 -0
  524. package/dist/seo/builder/draft-generators.d.ts +32 -0
  525. package/dist/seo/builder/draft-generators.d.ts.map +1 -0
  526. package/dist/seo/builder/draft-generators.js +31 -0
  527. package/dist/seo/builder/draft-generators.js.map +1 -0
  528. package/dist/seo/builder/draft-store.d.ts +30 -0
  529. package/dist/seo/builder/draft-store.d.ts.map +1 -0
  530. package/dist/seo/builder/draft-store.js +76 -0
  531. package/dist/seo/builder/draft-store.js.map +1 -0
  532. package/dist/seo/builder/draft-types.d.ts +36 -0
  533. package/dist/seo/builder/draft-types.d.ts.map +1 -0
  534. package/dist/seo/builder/draft-types.js +14 -0
  535. package/dist/seo/builder/draft-types.js.map +1 -0
  536. package/dist/seo/builder/hub-approved-source.d.ts +11 -0
  537. package/dist/seo/builder/hub-approved-source.d.ts.map +1 -0
  538. package/dist/seo/builder/hub-approved-source.js +48 -0
  539. package/dist/seo/builder/hub-approved-source.js.map +1 -0
  540. package/dist/seo/builder/seo-builder.d.ts +72 -0
  541. package/dist/seo/builder/seo-builder.d.ts.map +1 -0
  542. package/dist/seo/builder/seo-builder.js +72 -0
  543. package/dist/seo/builder/seo-builder.js.map +1 -0
  544. package/dist/seo/citation-gate.d.ts +36 -0
  545. package/dist/seo/citation-gate.d.ts.map +1 -0
  546. package/dist/seo/citation-gate.js +59 -0
  547. package/dist/seo/citation-gate.js.map +1 -0
  548. package/dist/seo/command.d.ts +11 -0
  549. package/dist/seo/command.d.ts.map +1 -0
  550. package/dist/seo/command.js +90 -0
  551. package/dist/seo/command.js.map +1 -0
  552. package/dist/seo/content-sanitizer.d.ts +56 -0
  553. package/dist/seo/content-sanitizer.d.ts.map +1 -0
  554. package/dist/seo/content-sanitizer.js +55 -0
  555. package/dist/seo/content-sanitizer.js.map +1 -0
  556. package/dist/seo/crawl-engine.d.ts +35 -0
  557. package/dist/seo/crawl-engine.d.ts.map +1 -0
  558. package/dist/seo/crawl-engine.js +2 -0
  559. package/dist/seo/crawl-engine.js.map +1 -0
  560. package/dist/seo/data-source.d.ts +156 -0
  561. package/dist/seo/data-source.d.ts.map +1 -0
  562. package/dist/seo/data-source.js +2 -0
  563. package/dist/seo/data-source.js.map +1 -0
  564. package/dist/seo/egress.d.ts +39 -0
  565. package/dist/seo/egress.d.ts.map +1 -0
  566. package/dist/seo/egress.js +64 -0
  567. package/dist/seo/egress.js.map +1 -0
  568. package/dist/seo/hub-emitter.d.ts +28 -0
  569. package/dist/seo/hub-emitter.d.ts.map +1 -0
  570. package/dist/seo/hub-emitter.js +95 -0
  571. package/dist/seo/hub-emitter.js.map +1 -0
  572. package/dist/seo/index.d.ts +42 -0
  573. package/dist/seo/index.d.ts.map +1 -0
  574. package/dist/seo/index.js +19 -0
  575. package/dist/seo/index.js.map +1 -0
  576. package/dist/seo/never-encode-filter.d.ts +45 -0
  577. package/dist/seo/never-encode-filter.d.ts.map +1 -0
  578. package/dist/seo/never-encode-filter.js +51 -0
  579. package/dist/seo/never-encode-filter.js.map +1 -0
  580. package/dist/seo/parser.d.ts +46 -0
  581. package/dist/seo/parser.d.ts.map +1 -0
  582. package/dist/seo/parser.js +113 -0
  583. package/dist/seo/parser.js.map +1 -0
  584. package/dist/seo/playbook-index.d.ts +19 -0
  585. package/dist/seo/playbook-index.d.ts.map +1 -0
  586. package/dist/seo/playbook-index.js +74 -0
  587. package/dist/seo/playbook-index.js.map +1 -0
  588. package/dist/seo/quota-governor.d.ts +100 -0
  589. package/dist/seo/quota-governor.d.ts.map +1 -0
  590. package/dist/seo/quota-governor.js +199 -0
  591. package/dist/seo/quota-governor.js.map +1 -0
  592. package/dist/seo/quota-ledger.d.ts +50 -0
  593. package/dist/seo/quota-ledger.d.ts.map +1 -0
  594. package/dist/seo/quota-ledger.js +95 -0
  595. package/dist/seo/quota-ledger.js.map +1 -0
  596. package/dist/seo/report-store.d.ts +30 -0
  597. package/dist/seo/report-store.d.ts.map +1 -0
  598. package/dist/seo/report-store.js +94 -0
  599. package/dist/seo/report-store.js.map +1 -0
  600. package/dist/seo/retriever.d.ts +34 -0
  601. package/dist/seo/retriever.d.ts.map +1 -0
  602. package/dist/seo/retriever.js +95 -0
  603. package/dist/seo/retriever.js.map +1 -0
  604. package/dist/seo/runner.d.ts +108 -0
  605. package/dist/seo/runner.d.ts.map +1 -0
  606. package/dist/seo/runner.js +512 -0
  607. package/dist/seo/runner.js.map +1 -0
  608. package/dist/seo/scrape-throttle.d.ts +84 -0
  609. package/dist/seo/scrape-throttle.d.ts.map +1 -0
  610. package/dist/seo/scrape-throttle.js +149 -0
  611. package/dist/seo/scrape-throttle.js.map +1 -0
  612. package/dist/seo/serp-provider.d.ts +52 -0
  613. package/dist/seo/serp-provider.d.ts.map +1 -0
  614. package/dist/seo/serp-provider.js +17 -0
  615. package/dist/seo/serp-provider.js.map +1 -0
  616. package/dist/seo/sources/ai-visibility-adapter.d.ts +87 -0
  617. package/dist/seo/sources/ai-visibility-adapter.d.ts.map +1 -0
  618. package/dist/seo/sources/ai-visibility-adapter.js +85 -0
  619. package/dist/seo/sources/ai-visibility-adapter.js.map +1 -0
  620. package/dist/seo/sources/api-spine-provider.d.ts +66 -0
  621. package/dist/seo/sources/api-spine-provider.d.ts.map +1 -0
  622. package/dist/seo/sources/api-spine-provider.js +68 -0
  623. package/dist/seo/sources/api-spine-provider.js.map +1 -0
  624. package/dist/seo/sources/citation-verifier.d.ts +95 -0
  625. package/dist/seo/sources/citation-verifier.d.ts.map +1 -0
  626. package/dist/seo/sources/citation-verifier.js +106 -0
  627. package/dist/seo/sources/citation-verifier.js.map +1 -0
  628. package/dist/seo/sources/crawl-source.d.ts +62 -0
  629. package/dist/seo/sources/crawl-source.d.ts.map +1 -0
  630. package/dist/seo/sources/crawl-source.js +87 -0
  631. package/dist/seo/sources/crawl-source.js.map +1 -0
  632. package/dist/seo/sources/damcrawler-crawl-engine.d.ts +151 -0
  633. package/dist/seo/sources/damcrawler-crawl-engine.d.ts.map +1 -0
  634. package/dist/seo/sources/damcrawler-crawl-engine.js +154 -0
  635. package/dist/seo/sources/damcrawler-crawl-engine.js.map +1 -0
  636. package/dist/seo/sources/damcrawler-serp-provider.d.ts +75 -0
  637. package/dist/seo/sources/damcrawler-serp-provider.d.ts.map +1 -0
  638. package/dist/seo/sources/damcrawler-serp-provider.js +60 -0
  639. package/dist/seo/sources/damcrawler-serp-provider.js.map +1 -0
  640. package/dist/seo/sources/dataforseo-adapter.d.ts +46 -0
  641. package/dist/seo/sources/dataforseo-adapter.d.ts.map +1 -0
  642. package/dist/seo/sources/dataforseo-adapter.js +335 -0
  643. package/dist/seo/sources/dataforseo-adapter.js.map +1 -0
  644. package/dist/seo/sources/dataforseo-serp-provider.d.ts +30 -0
  645. package/dist/seo/sources/dataforseo-serp-provider.d.ts.map +1 -0
  646. package/dist/seo/sources/dataforseo-serp-provider.js +20 -0
  647. package/dist/seo/sources/dataforseo-serp-provider.js.map +1 -0
  648. package/dist/seo/sources/engine-scrape-parser-chatgpt.d.ts +62 -0
  649. package/dist/seo/sources/engine-scrape-parser-chatgpt.d.ts.map +1 -0
  650. package/dist/seo/sources/engine-scrape-parser-chatgpt.js +72 -0
  651. package/dist/seo/sources/engine-scrape-parser-chatgpt.js.map +1 -0
  652. package/dist/seo/sources/engine-scrape-parser-perplexity.d.ts +10 -0
  653. package/dist/seo/sources/engine-scrape-parser-perplexity.d.ts.map +1 -0
  654. package/dist/seo/sources/engine-scrape-parser-perplexity.js +72 -0
  655. package/dist/seo/sources/engine-scrape-parser-perplexity.js.map +1 -0
  656. package/dist/seo/sources/gsc-adapter.d.ts +64 -0
  657. package/dist/seo/sources/gsc-adapter.d.ts.map +1 -0
  658. package/dist/seo/sources/gsc-adapter.js +221 -0
  659. package/dist/seo/sources/gsc-adapter.js.map +1 -0
  660. package/dist/seo/sources/local-export.d.ts +53 -0
  661. package/dist/seo/sources/local-export.d.ts.map +1 -0
  662. package/dist/seo/sources/local-export.js +307 -0
  663. package/dist/seo/sources/local-export.js.map +1 -0
  664. package/dist/seo/sources/mention-citation-extractor.d.ts +136 -0
  665. package/dist/seo/sources/mention-citation-extractor.d.ts.map +1 -0
  666. package/dist/seo/sources/mention-citation-extractor.js +272 -0
  667. package/dist/seo/sources/mention-citation-extractor.js.map +1 -0
  668. package/dist/seo/sources/scrape-arm-provider.d.ts +109 -0
  669. package/dist/seo/sources/scrape-arm-provider.d.ts.map +1 -0
  670. package/dist/seo/sources/scrape-arm-provider.js +129 -0
  671. package/dist/seo/sources/scrape-arm-provider.js.map +1 -0
  672. package/dist/seo/tracked-prompt-store.d.ts +33 -0
  673. package/dist/seo/tracked-prompt-store.d.ts.map +1 -0
  674. package/dist/seo/tracked-prompt-store.js +68 -0
  675. package/dist/seo/tracked-prompt-store.js.map +1 -0
  676. package/dist/seo/types.d.ts +128 -0
  677. package/dist/seo/types.d.ts.map +1 -0
  678. package/dist/seo/types.js +14 -0
  679. package/dist/seo/types.js.map +1 -0
  680. package/dist/seo/verifier.d.ts +34 -0
  681. package/dist/seo/verifier.d.ts.map +1 -0
  682. package/dist/seo/verifier.js +204 -0
  683. package/dist/seo/verifier.js.map +1 -0
  684. package/dist/seo/workflow-capabilities.d.ts +26 -0
  685. package/dist/seo/workflow-capabilities.d.ts.map +1 -0
  686. package/dist/seo/workflow-capabilities.js +12 -0
  687. package/dist/seo/workflow-capabilities.js.map +1 -0
  688. package/dist/state/facts.d.ts +5 -1
  689. package/dist/state/facts.d.ts.map +1 -1
  690. package/dist/state/facts.js +29 -19
  691. package/dist/state/facts.js.map +1 -1
  692. package/dist/state/index.d.ts +1 -1
  693. package/dist/state/index.d.ts.map +1 -1
  694. package/dist/state/index.js +1 -1
  695. package/dist/state/index.js.map +1 -1
  696. package/dist/state/outline-state.d.ts +0 -12
  697. package/dist/state/outline-state.d.ts.map +1 -1
  698. package/dist/state/outline-state.js +1 -18
  699. package/dist/state/outline-state.js.map +1 -1
  700. package/dist/state/security-audit-state.d.ts +20 -0
  701. package/dist/state/security-audit-state.d.ts.map +1 -0
  702. package/dist/state/security-audit-state.js +59 -0
  703. package/dist/state/security-audit-state.js.map +1 -0
  704. package/dist/teams/registry.d.ts.map +1 -1
  705. package/dist/teams/registry.js +17 -0
  706. package/dist/teams/registry.js.map +1 -1
  707. package/dist/telegram/bot.d.ts +137 -0
  708. package/dist/telegram/bot.d.ts.map +1 -0
  709. package/dist/telegram/bot.js +323 -0
  710. package/dist/telegram/bot.js.map +1 -0
  711. package/dist/telegram/digest.d.ts +19 -0
  712. package/dist/telegram/digest.d.ts.map +1 -0
  713. package/dist/telegram/digest.js +23 -0
  714. package/dist/telegram/digest.js.map +1 -0
  715. package/dist/telegram/fleet-view.d.ts +38 -0
  716. package/dist/telegram/fleet-view.d.ts.map +1 -0
  717. package/dist/telegram/fleet-view.js +98 -0
  718. package/dist/telegram/fleet-view.js.map +1 -0
  719. package/dist/telegram/handlers/approvals.d.ts +61 -0
  720. package/dist/telegram/handlers/approvals.d.ts.map +1 -0
  721. package/dist/telegram/handlers/approvals.js +122 -0
  722. package/dist/telegram/handlers/approvals.js.map +1 -0
  723. package/dist/telegram/handlers/capture.d.ts +43 -0
  724. package/dist/telegram/handlers/capture.d.ts.map +1 -0
  725. package/dist/telegram/handlers/capture.js +51 -0
  726. package/dist/telegram/handlers/capture.js.map +1 -0
  727. package/dist/telegram/handlers/prioritize.d.ts +50 -0
  728. package/dist/telegram/handlers/prioritize.d.ts.map +1 -0
  729. package/dist/telegram/handlers/prioritize.js +99 -0
  730. package/dist/telegram/handlers/prioritize.js.map +1 -0
  731. package/dist/telegram/handlers/upload.d.ts +105 -0
  732. package/dist/telegram/handlers/upload.d.ts.map +1 -0
  733. package/dist/telegram/handlers/upload.js +149 -0
  734. package/dist/telegram/handlers/upload.js.map +1 -0
  735. package/dist/telegram/keyboard.d.ts +48 -0
  736. package/dist/telegram/keyboard.d.ts.map +1 -0
  737. package/dist/telegram/keyboard.js +81 -0
  738. package/dist/telegram/keyboard.js.map +1 -0
  739. package/dist/telegram/outbound.d.ts +77 -0
  740. package/dist/telegram/outbound.d.ts.map +1 -0
  741. package/dist/telegram/outbound.js +45 -0
  742. package/dist/telegram/outbound.js.map +1 -0
  743. package/dist/telegram/router.d.ts +46 -0
  744. package/dist/telegram/router.d.ts.map +1 -0
  745. package/dist/telegram/router.js +63 -0
  746. package/dist/telegram/router.js.map +1 -0
  747. package/dist/telegram/streaming.d.ts +36 -0
  748. package/dist/telegram/streaming.d.ts.map +1 -0
  749. package/dist/telegram/streaming.js +55 -0
  750. package/dist/telegram/streaming.js.map +1 -0
  751. package/dist/telegram/whitelist.d.ts +20 -0
  752. package/dist/telegram/whitelist.d.ts.map +1 -0
  753. package/dist/telegram/whitelist.js +34 -0
  754. package/dist/telegram/whitelist.js.map +1 -0
  755. package/dist/utils/git.d.ts +0 -6
  756. package/dist/utils/git.d.ts.map +1 -1
  757. package/dist/utils/git.js +0 -19
  758. package/dist/utils/git.js.map +1 -1
  759. package/dist/utils/index.d.ts +1 -1
  760. package/dist/utils/index.d.ts.map +1 -1
  761. package/dist/utils/index.js +1 -1
  762. package/dist/utils/index.js.map +1 -1
  763. package/dist/vault/conventions.d.ts +23 -0
  764. package/dist/vault/conventions.d.ts.map +1 -0
  765. package/dist/vault/conventions.js +22 -0
  766. package/dist/vault/conventions.js.map +1 -0
  767. package/dist/vault/frontmatter.d.ts +47 -0
  768. package/dist/vault/frontmatter.d.ts.map +1 -0
  769. package/dist/vault/frontmatter.js +149 -0
  770. package/dist/vault/frontmatter.js.map +1 -0
  771. package/dist/vault/index-map.d.ts +35 -0
  772. package/dist/vault/index-map.d.ts.map +1 -0
  773. package/dist/vault/index-map.js +67 -0
  774. package/dist/vault/index-map.js.map +1 -0
  775. package/dist/vault/mcp-adapter.d.ts +96 -0
  776. package/dist/vault/mcp-adapter.d.ts.map +1 -0
  777. package/dist/vault/mcp-adapter.js +176 -0
  778. package/dist/vault/mcp-adapter.js.map +1 -0
  779. package/dist/vault/note-io.d.ts +29 -0
  780. package/dist/vault/note-io.d.ts.map +1 -0
  781. package/dist/vault/note-io.js +44 -0
  782. package/dist/vault/note-io.js.map +1 -0
  783. package/dist/vault/profile.d.ts +35 -0
  784. package/dist/vault/profile.d.ts.map +1 -0
  785. package/dist/vault/profile.js +50 -0
  786. package/dist/vault/profile.js.map +1 -0
  787. package/dist/vault/reindex.d.ts +55 -0
  788. package/dist/vault/reindex.d.ts.map +1 -0
  789. package/dist/vault/reindex.js +69 -0
  790. package/dist/vault/reindex.js.map +1 -0
  791. package/dist/vault/types.d.ts +25 -0
  792. package/dist/vault/types.d.ts.map +1 -0
  793. package/dist/vault/types.js +9 -0
  794. package/dist/vault/types.js.map +1 -0
  795. package/package.json +20 -4
  796. package/scripts/sync-targets.json +2 -1
  797. package/skills/bober.design/SKILL.md +190 -0
  798. package/skills/bober.design/references/1-anti-slop.md +102 -0
  799. package/skills/bober.design/references/2-design-brief.md +84 -0
  800. package/skills/bober.design/references/3-critique-rubric.md +62 -0
  801. package/skills/bober.design/references/4-copy-guide.md +43 -0
  802. package/skills/bober.plan/SKILL.md +15 -1
  803. package/skills/bober.run/SKILL.md +7 -4
  804. package/skills/bober.security-anchor/SKILL.md +172 -0
  805. package/skills/bober.security-audit/SKILL.md +288 -0
  806. package/skills/bober.security-dex-backend/SKILL.md +306 -0
  807. package/skills/bober.security-generic/SKILL.md +295 -0
  808. package/skills/bober.security-igaming/SKILL.md +290 -0
  809. package/skills/bober.security-node/SKILL.md +267 -0
  810. package/skills/bober.security-payments/SKILL.md +249 -0
  811. package/skills/bober.security-react/SKILL.md +194 -0
  812. package/skills/bober.security-solidity/SKILL.md +306 -0
  813. package/skills/bober.seo/SKILL.md +132 -0
  814. package/skills/bober.seo-ai-visibility/SKILL.md +110 -0
  815. package/skills/bober.seo-content-decay/SKILL.md +99 -0
  816. package/skills/bober.seo-generic/SKILL.md +173 -0
  817. package/skills/bober.seo-internal-linking/SKILL.md +87 -0
  818. package/skills/bober.seo-parasite-watch/SKILL.md +121 -0
  819. package/skills/bober.seo-rank-track/SKILL.md +98 -0
  820. package/skills/bober.seo-schema-audit/SKILL.md +97 -0
  821. package/skills/bober.seo-technical-audit/SKILL.md +113 -0
  822. package/skills/bober.seo-topical-map/SKILL.md +100 -0
  823. package/skills/bober.seo-verticals/SKILL.md +133 -0
  824. package/skills/bober.using-bober/SKILL.md +1 -0
@@ -0,0 +1,43 @@
1
+ // ── Coding domains ────────────────────────────────────────────────────
2
+ /**
3
+ * Domains the coding promoter handles.
4
+ * Finding.domain is a free string (not an enum), so we match literals here.
5
+ * Contract assumption 3: coding/projects Findings are promoted to bober-run tasks.
6
+ */
7
+ const CODING_DOMAINS = new Set(["coding", "projects"]);
8
+ // ── codingPromoter ────────────────────────────────────────────────────
9
+ /**
10
+ * Converts a coding or projects Finding into a bober-run PromotionPlan.
11
+ *
12
+ * task derivation (one-line, non-empty):
13
+ * 1. Base: finding.title (always present and non-empty per FindingSchema).
14
+ * 2. Evidence: up to 2 evidence lines appended as context (dash-separated).
15
+ * 3. teamId: extracted from the first "team:<id>" tag, or undefined (default team).
16
+ *
17
+ * PURE: no I/O, no clock read, no side effects.
18
+ */
19
+ export function codingPromoter(finding) {
20
+ // Extract optional teamId from a "team:<id>" tag
21
+ const teamTag = finding.tags.find((t) => t.startsWith("team:"));
22
+ const teamId = teamTag !== undefined ? teamTag.slice("team:".length) : undefined;
23
+ // Build the one-line task from title + optional evidence context
24
+ let task = finding.title;
25
+ if (finding.evidence.length > 0) {
26
+ const evidenceSummary = finding.evidence.slice(0, 2).join("; ");
27
+ task = `${task} — ${evidenceSummary}`;
28
+ }
29
+ return {
30
+ kind: "bober-run",
31
+ task,
32
+ teamId,
33
+ };
34
+ }
35
+ // ── Domain guard ──────────────────────────────────────────────────────
36
+ /**
37
+ * Returns true when the finding's domain is one the coding promoter handles.
38
+ * Used by the CLI registration to register the promoter under all applicable domains.
39
+ */
40
+ export function isCodingDomain(domain) {
41
+ return CODING_DOMAINS.has(domain);
42
+ }
43
+ //# sourceMappingURL=coding-promoter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coding-promoter.js","sourceRoot":"","sources":["../../src/do-bridge/coding-promoter.ts"],"names":[],"mappings":"AAGA,yEAAyE;AAEzE;;;;GAIG;AACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;AAE/D,yEAAyE;AAEzE;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,iDAAiD;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEjF,iEAAiE;IACjE,IAAI,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;IACzB,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,IAAI,GAAG,GAAG,IAAI,MAAM,eAAe,EAAE,CAAC;IACxC,CAAC;IAED,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,IAAI;QACJ,MAAM;KACP,CAAC;AACJ,CAAC;AAED,yEAAyE;AAEzE;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,88 @@
1
+ import type { Finding } from "../hub/finding.js";
2
+ import type { FactStore } from "../state/facts.js";
3
+ import type { PromotionRef } from "./types.js";
4
+ /**
5
+ * Do-bridge view of a Finding where promotesTo is a parsed PromotionRef
6
+ * object rather than the raw string stored on disk.
7
+ *
8
+ * FindingSchema.promotesTo is z.string().optional() — the hub schema is NOT
9
+ * modified. This type is owned by the do-bridge port layer; serialization
10
+ * and deserialization happen inside the adapters below.
11
+ */
12
+ export type DoFinding = Omit<Finding, "promotesTo"> & {
13
+ promotesTo?: PromotionRef;
14
+ };
15
+ /**
16
+ * Narrow port for finding lookup and promotion state writes.
17
+ * Returns DoFinding (promotesTo as structured object) so callers never
18
+ * touch the raw JSON string stored on disk.
19
+ */
20
+ export interface FindingStore {
21
+ /** Read a finding by id. Returns null if not found. */
22
+ readFinding(id: string): Promise<DoFinding | null>;
23
+ /**
24
+ * Set promotesTo = ref AND transition status open->in-progress in one call.
25
+ * Returns the updated DoFinding, or null if the id does not exist.
26
+ */
27
+ setPromotion(id: string, ref: PromotionRef, opts: {
28
+ now: string;
29
+ }): Promise<DoFinding | null>;
30
+ /** Return all findings that currently carry a PromotionRef (promotesTo defined). */
31
+ listPromoted(): Promise<DoFinding[]>;
32
+ /**
33
+ * Transition a finding to an arbitrary status AND overwrite its promotesTo ref,
34
+ * in one supersede-aware write. Used by reconcile for done/open outcomes.
35
+ * Returns the updated DoFinding, or null if the id does not exist.
36
+ */
37
+ applyOutcome(id: string, status: Finding["status"], ref: PromotionRef, opts: {
38
+ now: string;
39
+ }): Promise<DoFinding | null>;
40
+ }
41
+ /**
42
+ * FactStore-backed adapter for FindingStore.
43
+ *
44
+ * readFinding: delegates to readFindings() (hub's canonical read path) and
45
+ * converts the string promotesTo to a PromotionRef object.
46
+ *
47
+ * setPromotion: serializes the ref to a JSON string, delegates to
48
+ * transitionFinding() (hub's supersede-aware UPDATE path) so bitemporal
49
+ * history is preserved, then converts the result back to DoFinding.
50
+ */
51
+ export declare class FactStoreFindingStore implements FindingStore {
52
+ private readonly store;
53
+ constructor(store: FactStore);
54
+ readFinding(id: string): Promise<DoFinding | null>;
55
+ setPromotion(id: string, ref: PromotionRef, { now }: {
56
+ now: string;
57
+ }): Promise<DoFinding | null>;
58
+ listPromoted(): Promise<DoFinding[]>;
59
+ applyOutcome(id: string, status: Finding["status"], ref: PromotionRef, { now }: {
60
+ now: string;
61
+ }): Promise<DoFinding | null>;
62
+ }
63
+ /**
64
+ * In-memory fake for tests — backed by a Map<string, DoFinding>.
65
+ *
66
+ * setPromotion stores the PromotionRef OBJECT directly (no serialization)
67
+ * so tests can assert promotesTo.runId / promotesTo.status on the result of
68
+ * readFinding without JSON.parse.
69
+ *
70
+ * `writes` records every setPromotion call:
71
+ * - sc-2-2/2-3: assert writes.length === 1 on approve
72
+ * - sc-2-4: assert writes.length === 0 on reject
73
+ */
74
+ export declare class InMemoryFindingStore implements FindingStore {
75
+ private readonly map;
76
+ /** Records every setPromotion write. Tests assert .length for mutation count. */
77
+ readonly writes: DoFinding[];
78
+ constructor(seed?: Finding[]);
79
+ readFinding(id: string): Promise<DoFinding | null>;
80
+ setPromotion(id: string, ref: PromotionRef, _opts: {
81
+ now: string;
82
+ }): Promise<DoFinding | null>;
83
+ listPromoted(): Promise<DoFinding[]>;
84
+ applyOutcome(id: string, status: Finding["status"], ref: PromotionRef, _opts: {
85
+ now: string;
86
+ }): Promise<DoFinding | null>;
87
+ }
88
+ //# sourceMappingURL=finding-port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-port.d.ts","sourceRoot":"","sources":["../../src/do-bridge/finding-port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG;IACpD,UAAU,CAAC,EAAE,YAAY,CAAC;CAC3B,CAAC;AAgBF;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAEnD;;;OAGG;IACH,YAAY,CACV,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GACpB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAE7B,oFAAoF;IACpF,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAErC;;;;OAIG;IACH,YAAY,CACV,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,EACzB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GACpB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;CAC9B;AAID;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,YAAW,YAAY;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,SAAS;IAEvC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAKlD,YAAY,CAChB,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,YAAY,EACjB,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GACvB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAStB,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIpC,YAAY,CAChB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,EACzB,GAAG,EAAE,YAAY,EACjB,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GACvB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;CAO7B;AAID;;;;;;;;;;GAUG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;IAE7C,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,CAAM;gBAEtB,IAAI,GAAE,OAAO,EAAO;IAI1B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAIlD,YAAY,CAChB,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GACrB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAStB,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIpC,YAAY,CAChB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,EACzB,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GACrB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;CAQ7B"}
@@ -0,0 +1,95 @@
1
+ import { readFindings, transitionFinding } from "../hub/finding-store.js";
2
+ import { serializePromotionRef, parsePromotionRef } from "./types.js";
3
+ // ── Internal helpers ──────────────────────────────────────────────────
4
+ /**
5
+ * Convert a hub Finding (string promotesTo) to a DoFinding (object promotesTo).
6
+ * If promotesTo is present but unparseable, it is dropped (undefined).
7
+ */
8
+ function toDoFinding(f) {
9
+ const ref = f.promotesTo !== undefined ? (parsePromotionRef(f.promotesTo) ?? undefined) : undefined;
10
+ return { ...f, promotesTo: ref };
11
+ }
12
+ // ── FactStoreFindingStore ─────────────────────────────────────────────
13
+ /**
14
+ * FactStore-backed adapter for FindingStore.
15
+ *
16
+ * readFinding: delegates to readFindings() (hub's canonical read path) and
17
+ * converts the string promotesTo to a PromotionRef object.
18
+ *
19
+ * setPromotion: serializes the ref to a JSON string, delegates to
20
+ * transitionFinding() (hub's supersede-aware UPDATE path) so bitemporal
21
+ * history is preserved, then converts the result back to DoFinding.
22
+ */
23
+ export class FactStoreFindingStore {
24
+ store;
25
+ constructor(store) {
26
+ this.store = store;
27
+ }
28
+ async readFinding(id) {
29
+ const f = readFindings(this.store).find((f) => f.id === id);
30
+ return f !== undefined ? toDoFinding(f) : null;
31
+ }
32
+ async setPromotion(id, ref, { now }) {
33
+ // Serialize the object ref to the string the hub schema expects on disk.
34
+ const result = await transitionFinding(this.store, id, "in-progress", {
35
+ now,
36
+ mutate: { promotesTo: serializePromotionRef(ref) },
37
+ });
38
+ return result !== null ? toDoFinding(result) : null;
39
+ }
40
+ async listPromoted() {
41
+ return readFindings(this.store).map(toDoFinding).filter((f) => f.promotesTo !== undefined);
42
+ }
43
+ async applyOutcome(id, status, ref, { now }) {
44
+ const result = await transitionFinding(this.store, id, status, {
45
+ now,
46
+ mutate: { promotesTo: serializePromotionRef(ref) },
47
+ });
48
+ return result !== null ? toDoFinding(result) : null;
49
+ }
50
+ }
51
+ // ── InMemoryFindingStore ──────────────────────────────────────────────
52
+ /**
53
+ * In-memory fake for tests — backed by a Map<string, DoFinding>.
54
+ *
55
+ * setPromotion stores the PromotionRef OBJECT directly (no serialization)
56
+ * so tests can assert promotesTo.runId / promotesTo.status on the result of
57
+ * readFinding without JSON.parse.
58
+ *
59
+ * `writes` records every setPromotion call:
60
+ * - sc-2-2/2-3: assert writes.length === 1 on approve
61
+ * - sc-2-4: assert writes.length === 0 on reject
62
+ */
63
+ export class InMemoryFindingStore {
64
+ map;
65
+ /** Records every setPromotion write. Tests assert .length for mutation count. */
66
+ writes = [];
67
+ constructor(seed = []) {
68
+ this.map = new Map(seed.map((f) => [f.id, toDoFinding(f)]));
69
+ }
70
+ async readFinding(id) {
71
+ return this.map.get(id) ?? null;
72
+ }
73
+ async setPromotion(id, ref, _opts) {
74
+ const cur = this.map.get(id);
75
+ if (cur === undefined)
76
+ return null;
77
+ const next = { ...cur, status: "in-progress", promotesTo: ref };
78
+ this.map.set(id, next);
79
+ this.writes.push(next);
80
+ return next;
81
+ }
82
+ async listPromoted() {
83
+ return [...this.map.values()].filter((f) => f.promotesTo !== undefined);
84
+ }
85
+ async applyOutcome(id, status, ref, _opts) {
86
+ const cur = this.map.get(id);
87
+ if (cur === undefined)
88
+ return null;
89
+ const next = { ...cur, status, promotesTo: ref };
90
+ this.map.set(id, next);
91
+ this.writes.push(next);
92
+ return next;
93
+ }
94
+ }
95
+ //# sourceMappingURL=finding-port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding-port.js","sourceRoot":"","sources":["../../src/do-bridge/finding-port.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Launcher port and default RunSpawner-backed adapter.
3
+ *
4
+ * HARD BOUNDARY: `src/cli/commands/do.ts` MUST NOT import RunSpawner or
5
+ * execa directly. The RunSpawner import lives here; do.ts imports from
6
+ * this file instead.
7
+ */
8
+ import { RunSpawner } from "../chat/run-spawner.js";
9
+ import type { PromotionPlan } from "./types.js";
10
+ /**
11
+ * Port for launching the work behind an approved PromotionPlan.
12
+ * Injected into runDo so unit tests use a fake and never spawn a real process.
13
+ */
14
+ export interface Launcher {
15
+ /** Launch the work described by plan. Returns the runId used + optional pid. */
16
+ launch(plan: PromotionPlan): Promise<{
17
+ runId: string;
18
+ pid?: number;
19
+ }>;
20
+ }
21
+ /** Options for the RunSpawnerLauncher adapter. */
22
+ export interface RunSpawnerLauncherOptions {
23
+ /** Absolute project root, passed to RunSpawner. */
24
+ projectRoot: string;
25
+ /** The finding id — embedded in the generated runId: `do-<findingId>-<ts>`. */
26
+ findingId: string;
27
+ /** Session id for the RunSpawner sidecar. Defaults to `do-<findingId>`. */
28
+ sessionId?: string;
29
+ /** Clock injection. Defaults to () => new Date().toISOString(). */
30
+ now?: () => string;
31
+ /**
32
+ * Pre-built RunSpawner to use instead of constructing one.
33
+ * Inject a RunSpawner with a fake spawn fn in launcher.test.ts so no real
34
+ * process is ever started in unit tests.
35
+ */
36
+ spawner?: RunSpawner;
37
+ }
38
+ /**
39
+ * Default Launcher adapter — wraps RunSpawner to spawn a detached
40
+ * `agent-bober run <task> --run-id <id>` child.
41
+ *
42
+ * runId format: `do-<findingId>-<timestamp>` — stable prefix for identifying
43
+ * do-bridge runs in roster state.json files.
44
+ */
45
+ export declare class RunSpawnerLauncher implements Launcher {
46
+ private readonly spawner;
47
+ private readonly findingId;
48
+ private readonly now;
49
+ constructor(opts: RunSpawnerLauncherOptions);
50
+ launch(plan: PromotionPlan): Promise<{
51
+ runId: string;
52
+ pid?: number;
53
+ }>;
54
+ }
55
+ //# sourceMappingURL=launcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/do-bridge/launcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,gFAAgF;IAChF,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAID,kDAAkD;AAClD,MAAM,WAAW,yBAAyB;IACxC,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAED;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,QAAQ;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEvB,IAAI,EAAE,yBAAyB;IAarC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAK5E"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Launcher port and default RunSpawner-backed adapter.
3
+ *
4
+ * HARD BOUNDARY: `src/cli/commands/do.ts` MUST NOT import RunSpawner or
5
+ * execa directly. The RunSpawner import lives here; do.ts imports from
6
+ * this file instead.
7
+ */
8
+ import { RunSpawner } from "../chat/run-spawner.js";
9
+ /**
10
+ * Default Launcher adapter — wraps RunSpawner to spawn a detached
11
+ * `agent-bober run <task> --run-id <id>` child.
12
+ *
13
+ * runId format: `do-<findingId>-<timestamp>` — stable prefix for identifying
14
+ * do-bridge runs in roster state.json files.
15
+ */
16
+ export class RunSpawnerLauncher {
17
+ spawner;
18
+ findingId;
19
+ now;
20
+ constructor(opts) {
21
+ this.findingId = opts.findingId;
22
+ this.now = opts.now ?? (() => new Date().toISOString());
23
+ // bober: builds a fresh RunSpawner per CLI invocation; swap for a pre-built
24
+ // injected spawner in tests so no real execa ever runs.
25
+ const spawnerOpts = {
26
+ projectRoot: opts.projectRoot,
27
+ sessionId: opts.sessionId ?? `do-${opts.findingId}`,
28
+ };
29
+ this.spawner = opts.spawner ?? new RunSpawner(spawnerOpts);
30
+ }
31
+ async launch(plan) {
32
+ const runId = `do-${this.findingId}-${this.now()}`;
33
+ const ack = await this.spawner.spawn(plan.task, runId);
34
+ return { runId, pid: ack.pid };
35
+ }
36
+ }
37
+ //# sourceMappingURL=launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/do-bridge/launcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAmCpD;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IACZ,OAAO,CAAa;IACpB,SAAS,CAAS;IAClB,GAAG,CAAe;IAEnC,YAAY,IAA+B;QACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAExD,4EAA4E;QAC5E,wDAAwD;QACxD,MAAM,WAAW,GAAsB;YACrC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,CAAC,SAAS,EAAE;SACpD,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAmB;QAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Promotion gate orchestration — write pending marker, resolve approve/reject,
3
+ * then on approval call launch; on rejection clean up and return.
4
+ *
5
+ * PURE-ish DI core: all I/O via injected projectRoot paths + approval-state.ts
6
+ * functions + injected confirm / now / launcher. Never reads the real clock
7
+ * (now is injected). Never throws — failures propagate as Promise rejections
8
+ * which the caller (runDo) converts to process.exitCode = 1.
9
+ */
10
+ import type { PromotionPlan } from "./types.js";
11
+ /** Result returned by runPromotionGate after the approve/reject decision. */
12
+ export interface GateOutcome {
13
+ approved: boolean;
14
+ }
15
+ /** Arguments for runPromotionGate — all I/O dependencies are injected. */
16
+ export interface PromotionGateArgs {
17
+ /** Absolute project root (used to build .bober/approvals paths). */
18
+ projectRoot: string;
19
+ /** Finding id — used to derive checkpointId `promote-<findingId>`. */
20
+ findingId: string;
21
+ /** The promotion plan to summarize in the pending marker. */
22
+ plan: PromotionPlan;
23
+ /** When true, bypass interactive prompt and auto-approve. */
24
+ yes?: boolean;
25
+ /**
26
+ * Whether stdout is a TTY. When true and not --yes, calls the injected
27
+ * confirm() and waits for a synchronous answer. When false, polls the
28
+ * approvals directory until an external approve/reject marker appears.
29
+ */
30
+ isTTY: boolean;
31
+ /** Injected interactive confirm. TTY path only; must return true/false. */
32
+ confirm: () => Promise<boolean>;
33
+ /** Clock injection — returns an ISO string. */
34
+ now: () => string;
35
+ /** Non-TTY poll interval in ms. Default 2000ms; use small values in tests. */
36
+ pollMs?: number;
37
+ /** Non-TTY timeout in ms. Default 24 hours. */
38
+ timeoutMs?: number;
39
+ }
40
+ /**
41
+ * Write promote-<findingId>.pending.json, gate on it
42
+ * (--yes → auto-approve; TTY → prompts(); non-TTY → poll directory),
43
+ * and return { approved }.
44
+ *
45
+ * Writes/deletes markers via approval-state.ts only — no new format.
46
+ * checkpointId is always `promote-${findingId}` so external
47
+ * `bober approve promote-<id>` resolves it (sc-2-5).
48
+ */
49
+ export declare function runPromotionGate(args: PromotionGateArgs): Promise<GateOutcome>;
50
+ //# sourceMappingURL=promote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../src/do-bridge/promote.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,6EAA6E;AAC7E,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,IAAI,EAAE,aAAa,CAAC;IACpB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;;OAIG;IACH,KAAK,EAAE,OAAO,CAAC;IACf,2EAA2E;IAC3E,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,+CAA+C;IAC/C,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAiHpF"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Promotion gate orchestration — write pending marker, resolve approve/reject,
3
+ * then on approval call launch; on rejection clean up and return.
4
+ *
5
+ * PURE-ish DI core: all I/O via injected projectRoot paths + approval-state.ts
6
+ * functions + injected confirm / now / launcher. Never reads the real clock
7
+ * (now is injected). Never throws — failures propagate as Promise rejections
8
+ * which the caller (runDo) converts to process.exitCode = 1.
9
+ */
10
+ import { readdir } from "node:fs/promises";
11
+ import { join } from "node:path";
12
+ import { savePending, saveApproved, saveRejected, deletePending, } from "../state/approval-state.js";
13
+ /**
14
+ * Write promote-<findingId>.pending.json, gate on it
15
+ * (--yes → auto-approve; TTY → prompts(); non-TTY → poll directory),
16
+ * and return { approved }.
17
+ *
18
+ * Writes/deletes markers via approval-state.ts only — no new format.
19
+ * checkpointId is always `promote-${findingId}` so external
20
+ * `bober approve promote-<id>` resolves it (sc-2-5).
21
+ */
22
+ export async function runPromotionGate(args) {
23
+ const { projectRoot, findingId, plan, yes = false, isTTY, confirm, now, pollMs = 2_000, timeoutMs = 24 * 60 * 60 * 1_000, } = args;
24
+ const checkpointId = `promote-${findingId}`;
25
+ const requestedAt = now();
26
+ const requestedAtMs = Date.parse(requestedAt);
27
+ const timeoutAt = new Date(requestedAtMs + timeoutMs).toISOString();
28
+ // 1. Write the pending marker
29
+ await savePending(projectRoot, {
30
+ checkpointId,
31
+ artifact: { type: "bober-run", summary: plan.task },
32
+ prompt: `Promote to bober run: "${plan.task}"`,
33
+ requestedAt,
34
+ timeoutAt,
35
+ });
36
+ // 2. --yes: auto-approve without prompting
37
+ if (yes) {
38
+ await saveApproved(projectRoot, checkpointId, {
39
+ approvedAt: now(),
40
+ approverId: "auto",
41
+ });
42
+ await deletePending(projectRoot, checkpointId);
43
+ return { approved: true };
44
+ }
45
+ // 3. TTY: interactive confirm
46
+ if (isTTY) {
47
+ const confirmed = await confirm();
48
+ if (confirmed) {
49
+ await saveApproved(projectRoot, checkpointId, {
50
+ approvedAt: now(),
51
+ approverId: "tty",
52
+ });
53
+ await deletePending(projectRoot, checkpointId);
54
+ return { approved: true };
55
+ }
56
+ else {
57
+ await saveRejected(projectRoot, checkpointId, {
58
+ rejectedAt: now(),
59
+ rejecterId: "tty",
60
+ feedback: "User declined at TTY prompt",
61
+ });
62
+ await deletePending(projectRoot, checkpointId);
63
+ return { approved: false };
64
+ }
65
+ }
66
+ // 4. Non-TTY: poll the approvals directory until resolved or timeout
67
+ // Mirror: src/orchestrator/checkpoints/mechanisms/disk.ts:104-175
68
+ // Use Date.now() for elapsed-time tracking (not the injected `now` which is
69
+ // for file timestamps only and may be frozen in tests).
70
+ const approvalsDir = join(projectRoot, ".bober", "approvals");
71
+ const startedAtMs = Date.now();
72
+ let pollHandle;
73
+ try {
74
+ return await new Promise((resolve, reject) => {
75
+ const tick = async () => {
76
+ try {
77
+ const entries = new Set(await readdir(approvalsDir).catch(() => []));
78
+ if (entries.has(`${checkpointId}.approved.json`)) {
79
+ await deletePending(projectRoot, checkpointId);
80
+ resolve({ approved: true });
81
+ return;
82
+ }
83
+ if (entries.has(`${checkpointId}.rejected.json`)) {
84
+ await deletePending(projectRoot, checkpointId);
85
+ resolve({ approved: false });
86
+ return;
87
+ }
88
+ // Timeout check (wall clock — not the injected now() which is for file timestamps)
89
+ if (Date.now() - startedAtMs >= timeoutMs) {
90
+ await deletePending(projectRoot, checkpointId);
91
+ resolve({ approved: false });
92
+ return;
93
+ }
94
+ // Schedule next tick — never leak timers (disk.ts:170-175)
95
+ pollHandle = setTimeout(() => {
96
+ tick().catch(reject);
97
+ }, pollMs);
98
+ }
99
+ catch (err) {
100
+ reject(err);
101
+ }
102
+ };
103
+ // Kick off the first tick
104
+ pollHandle = setTimeout(() => {
105
+ tick().catch(reject);
106
+ }, pollMs);
107
+ });
108
+ }
109
+ finally {
110
+ // Always clear the handle — covers the resolved-before-tick case
111
+ if (pollHandle !== undefined) {
112
+ clearTimeout(pollHandle);
113
+ }
114
+ }
115
+ }
116
+ //# sourceMappingURL=promote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/do-bridge/promote.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { FindingStore } from "./finding-port.js";
2
+ import type { RunState } from "../mcp/run-manager.js";
3
+ /**
4
+ * Injected dependencies for reconcilePromotions.
5
+ * Keeps the core pure so tests can inject a run-state fake without a real run.
6
+ */
7
+ export interface ReconcileDeps {
8
+ store: FindingStore;
9
+ /**
10
+ * Injected run-state reader.
11
+ * CLI passes `(runId) => readRunState(projectRoot, runId)`.
12
+ * Tests inject a fake that returns a predetermined RunState or null.
13
+ */
14
+ readState: (runId: string) => Promise<RunState | null>;
15
+ /** Clock injection — never call new Date() inside the core. */
16
+ now: () => string;
17
+ }
18
+ /** Counts of findings advanced in a single reconcilePromotions pass. */
19
+ export interface ReconcileSummary {
20
+ /** Findings transitioned to 'done' (run completed). */
21
+ completed: number;
22
+ /** Findings returned to 'open' (run aborted or failed). */
23
+ aborted: number;
24
+ /** Findings left unchanged (run still running, missing, or unrecognised). */
25
+ unchanged: number;
26
+ }
27
+ /**
28
+ * For each Finding whose promotesTo.status is 'launched', read the linked
29
+ * run's state.json snapshot and advance the Finding to its terminal status.
30
+ *
31
+ * Transition table:
32
+ * run 'completed' → finding 'done', promotesTo.status 'completed'
33
+ * run 'aborted'|'failed' → finding 'open', promotesTo.status 'aborted'
34
+ * run 'running' (or null) → finding unchanged (no write)
35
+ *
36
+ * PURE-ish: all I/O is injected. Never throws — per-finding failures are
37
+ * swallowed internally. Reads the current snapshot and returns immediately;
38
+ * does NOT poll or block waiting for an in-flight run to finish.
39
+ */
40
+ export declare function reconcilePromotions(deps: ReconcileDeps): Promise<ReconcileSummary>;
41
+ /**
42
+ * Thin wrapper around reconcilePromotions that injects the real readRunState
43
+ * adapter for a given project root. Called by the `bober do` CLI handler.
44
+ *
45
+ * Caller is responsible for wrapping this in try/catch so a reconcile failure
46
+ * can never abort the enclosing command (mirrors seedProjectFacts in
47
+ * src/orchestrator/pipeline.ts:981).
48
+ */
49
+ export declare function reconcilePromotionsForRoot(projectRoot: string, store: FindingStore, now: () => string): Promise<ReconcileSummary>;
50
+ //# sourceMappingURL=reconcile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../../src/do-bridge/reconcile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAItD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB;;;;OAIG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IACvD,+DAA+D;IAC/D,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAID,wEAAwE;AACxE,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC;CACnB;AAID;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuCxF;AAID;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,MAAM,MAAM,GAChB,OAAO,CAAC,gBAAgB,CAAC,CAM3B"}
@@ -0,0 +1,70 @@
1
+ import { readRunState } from "../state/run-state.js";
2
+ // ── reconcilePromotions (DI core) ─────────────────────────────────────
3
+ /**
4
+ * For each Finding whose promotesTo.status is 'launched', read the linked
5
+ * run's state.json snapshot and advance the Finding to its terminal status.
6
+ *
7
+ * Transition table:
8
+ * run 'completed' → finding 'done', promotesTo.status 'completed'
9
+ * run 'aborted'|'failed' → finding 'open', promotesTo.status 'aborted'
10
+ * run 'running' (or null) → finding unchanged (no write)
11
+ *
12
+ * PURE-ish: all I/O is injected. Never throws — per-finding failures are
13
+ * swallowed internally. Reads the current snapshot and returns immediately;
14
+ * does NOT poll or block waiting for an in-flight run to finish.
15
+ */
16
+ export async function reconcilePromotions(deps) {
17
+ const { store, readState, now } = deps;
18
+ const summary = { completed: 0, aborted: 0, unchanged: 0 };
19
+ const promoted = await store.listPromoted();
20
+ const launched = promoted.filter((f) => f.promotesTo?.status === "launched");
21
+ for (const finding of launched) {
22
+ try {
23
+ // promotesTo is guaranteed non-undefined by the filter above
24
+ const ref = finding.promotesTo;
25
+ const state = await readState(ref.runId);
26
+ if (state === null) {
27
+ // Missing or corrupt run-state file → treat as "still running"
28
+ summary.unchanged++;
29
+ continue;
30
+ }
31
+ if (state.status === "completed") {
32
+ const updatedRef = { ...ref, status: "completed" };
33
+ await store.applyOutcome(finding.id, "done", updatedRef, { now: now() });
34
+ summary.completed++;
35
+ }
36
+ else if (state.status === "aborted" || state.status === "failed") {
37
+ const updatedRef = { ...ref, status: "aborted" };
38
+ await store.applyOutcome(finding.id, "open", updatedRef, { now: now() });
39
+ summary.aborted++;
40
+ }
41
+ else {
42
+ // 'running', 'input-required', 'paused' — leave unchanged
43
+ summary.unchanged++;
44
+ }
45
+ }
46
+ catch {
47
+ // Per-finding error: swallow and count as unchanged (belt and suspenders).
48
+ // reconcilePromotions MUST NOT throw.
49
+ summary.unchanged++;
50
+ }
51
+ }
52
+ return summary;
53
+ }
54
+ // ── reconcilePromotionsForRoot (CLI wrapper) ──────────────────────────
55
+ /**
56
+ * Thin wrapper around reconcilePromotions that injects the real readRunState
57
+ * adapter for a given project root. Called by the `bober do` CLI handler.
58
+ *
59
+ * Caller is responsible for wrapping this in try/catch so a reconcile failure
60
+ * can never abort the enclosing command (mirrors seedProjectFacts in
61
+ * src/orchestrator/pipeline.ts:981).
62
+ */
63
+ export async function reconcilePromotionsForRoot(projectRoot, store, now) {
64
+ return reconcilePromotions({
65
+ store,
66
+ readState: (runId) => readRunState(projectRoot, runId),
67
+ now,
68
+ });
69
+ }
70
+ //# sourceMappingURL=reconcile.js.map