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,75 @@
1
+ /** `bober calendar` — propose / apply a schedule from ranked findings + free/busy. */
2
+ import type { Command } from "commander";
3
+ import type { Finding, BusyInterval } from "../../calendar/types.js";
4
+ import type { CalendarConnector } from "../../calendar/connector.js";
5
+ /**
6
+ * Injectable dependencies for runCalendarPlan.
7
+ * Production callers pass undefined (all fields default to the real implementations).
8
+ * Tests inject fixture readers and a fixed clock to achieve deterministic assertions.
9
+ */
10
+ export interface CalendarPlanDeps {
11
+ /** Override the findings reader (default: readFindingsFromFile). */
12
+ readFindings?: (path: string) => Promise<Finding[]>;
13
+ /** Override the free/busy reader (default: readBusyIntervalsFromFile). */
14
+ readFreeBusy?: (path: string) => Promise<BusyInterval[]>;
15
+ /** Override the current ISO time string (clock read ONLY at the CLI boundary). */
16
+ nowIso?: string;
17
+ /** Factory for the calendar connector used by --export-ics (default: createIcsConnector). */
18
+ makeConnector?: (outPath: string) => CalendarConnector;
19
+ /**
20
+ * Generate the planId for the live propose path.
21
+ * Default: `Date.now().toString(36)` (unique per run).
22
+ * Tests inject a fixed string for deterministic checkpointId assertions.
23
+ */
24
+ makePlanId?: () => string;
25
+ /**
26
+ * Override the connector name stored in the plan sidecar.
27
+ * Default: read from `config.calendar.connector` (or "ics" if no config).
28
+ * Tests inject "stub" to avoid config loading.
29
+ */
30
+ connectorName?: string;
31
+ }
32
+ /**
33
+ * Injectable dependencies for runCalendarApply.
34
+ * Tests inject a pre-built stub connector to avoid config loading and real I/O.
35
+ */
36
+ export interface CalendarApplyDeps {
37
+ /** Inject a pre-built connector (bypasses config + factory). */
38
+ connector?: CalendarConnector;
39
+ /**
40
+ * ICS output path for the ics connector (only used when connector is 'ics').
41
+ * Default: <projectRoot>/.bober/calendar/schedule.ics
42
+ */
43
+ icsOutPath?: string;
44
+ }
45
+ /**
46
+ * Core logic for `bober calendar plan`.
47
+ *
48
+ * Extracted so tests can inject fixture deps without module-level mocking.
49
+ * The CLI .action() calls this with no deps (production path).
50
+ *
51
+ * --dry-run: prints the proposed plan to stdout only; writes NOTHING to any calendar
52
+ * or .ics file. No connectors exist in this sprint (sc-1-6 / nonGoals).
53
+ * --export-ics: writes a local RFC 5545 .ics file via the ICS connector.
54
+ * (no flags): live path — proposes via the approval gate; writes ZERO events until
55
+ * an ApprovedMarker exists for the returned checkpointId.
56
+ */
57
+ export declare function runCalendarPlan(projectRoot: string, opts: {
58
+ findings?: string;
59
+ freebusy?: string;
60
+ dryRun?: boolean;
61
+ exportIcs?: string;
62
+ }, deps?: CalendarPlanDeps): Promise<void>;
63
+ /**
64
+ * Core logic for `bober calendar apply <checkpointId>`.
65
+ *
66
+ * Detects the approved/rejected marker and calls connector.writeEvents exactly
67
+ * once on approval; never on rejection; prints "pending" when neither marker exists.
68
+ */
69
+ export declare function runCalendarApply(projectRoot: string, checkpointId: string, deps?: CalendarApplyDeps): Promise<void>;
70
+ /**
71
+ * Register the `bober calendar` command tree.
72
+ * Mirrors registerMedicalCommand (src/cli/commands/medical.ts:229-297).
73
+ */
74
+ export declare function registerCalendarCommand(program: Command): void;
75
+ //# sourceMappingURL=calendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/calendar.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAKtF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAmB,MAAM,yBAAyB,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAWrE;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACpD,0EAA0E;IAC1E,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACzD,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6FAA6F;IAC7F,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,iBAAiB,CAAC;IACvD;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAID;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AASD;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EACpF,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA4Gf;AAID;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA+Df;AAID;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6B9D"}
@@ -0,0 +1,203 @@
1
+ /** `bober calendar` — propose / apply a schedule from ranked findings + free/busy. */
2
+ import { join } from "node:path";
3
+ import chalk from "chalk";
4
+ import { findProjectRoot } from "../../utils/fs.js";
5
+ import { planSlots } from "../../calendar/slotter.js";
6
+ import { readFindingsFromFile, readBusyIntervalsFromFile } from "../../calendar/finding-source.js";
7
+ import { createIcsConnector } from "../../calendar/ics-connector.js";
8
+ import { loadConfig } from "../../config/loader.js";
9
+ import { proposePlan, applyPlan } from "../../calendar/proposal-gate.js";
10
+ // ── Root resolver ─────────────────────────────────────────────────────
11
+ async function resolveRoot() {
12
+ const root = await findProjectRoot();
13
+ return root ?? process.cwd();
14
+ }
15
+ // ── Default planning window ───────────────────────────────────────────
16
+ const WINDOW_DAYS = 7;
17
+ const MS_PER_DAY = 24 * 60 * 60 * 1000;
18
+ // ── Core (extracted for testability) ─────────────────────────────────
19
+ /**
20
+ * Core logic for `bober calendar plan`.
21
+ *
22
+ * Extracted so tests can inject fixture deps without module-level mocking.
23
+ * The CLI .action() calls this with no deps (production path).
24
+ *
25
+ * --dry-run: prints the proposed plan to stdout only; writes NOTHING to any calendar
26
+ * or .ics file. No connectors exist in this sprint (sc-1-6 / nonGoals).
27
+ * --export-ics: writes a local RFC 5545 .ics file via the ICS connector.
28
+ * (no flags): live path — proposes via the approval gate; writes ZERO events until
29
+ * an ApprovedMarker exists for the returned checkpointId.
30
+ */
31
+ export async function runCalendarPlan(projectRoot, opts, deps = {}) {
32
+ try {
33
+ // ── 1. Read findings (pre-ranked by the hub) ──────────────────────
34
+ const findingsPath = opts.findings;
35
+ if (findingsPath === undefined) {
36
+ process.stderr.write(chalk.red("--findings <path> is required\n"));
37
+ process.exitCode = 1;
38
+ return;
39
+ }
40
+ const readFindings = deps.readFindings ?? readFindingsFromFile;
41
+ const findings = await readFindings(findingsPath);
42
+ // ── 2. Read free/busy intervals ───────────────────────────────────
43
+ const freebusyPath = opts.freebusy;
44
+ const readFreeBusy = deps.readFreeBusy ?? readBusyIntervalsFromFile;
45
+ const busy = freebusyPath !== undefined ? await readFreeBusy(freebusyPath) : [];
46
+ // ── 3. Build planning constraints ────────────────────────────────
47
+ // Clock read ONLY here at the CLI boundary (mirrors medical.ts:102).
48
+ const nowIso = deps.nowIso ?? new Date().toISOString();
49
+ const windowEndMs = Date.parse(nowIso) + WINDOW_DAYS * MS_PER_DAY;
50
+ const constraints = {
51
+ windowStartIso: nowIso,
52
+ windowEndIso: new Date(windowEndMs).toISOString(),
53
+ };
54
+ // ── 4. Slot-fill (pure, synchronous, LLM-free) ───────────────────
55
+ const plan = planSlots(findings, busy, constraints);
56
+ // ── 5. Print proposed plan (stdout only — dry-run writes nothing) ─
57
+ process.stdout.write(chalk.bold("\nProposed calendar plan\n"));
58
+ process.stdout.write(`Window: ${constraints.windowStartIso} → ${constraints.windowEndIso}\n\n`);
59
+ if (plan.scheduled.length === 0 && plan.unscheduled.length === 0) {
60
+ process.stdout.write(chalk.yellow("No findings to schedule.\n"));
61
+ return;
62
+ }
63
+ if (plan.scheduled.length > 0) {
64
+ process.stdout.write(chalk.green(`Scheduled (${plan.scheduled.length}):\n`));
65
+ for (const item of plan.scheduled) {
66
+ process.stdout.write(` [${item.startIso} → ${item.endIso}] ${item.title}\n`);
67
+ }
68
+ }
69
+ if (plan.unscheduled.length > 0) {
70
+ process.stdout.write(chalk.yellow(`\nUnscheduled (${plan.unscheduled.length}):\n`));
71
+ for (const entry of plan.unscheduled) {
72
+ process.stdout.write(` ${entry.findingId} reason: ${entry.reason}\n`);
73
+ }
74
+ }
75
+ // ── 6. --export-ics → write VCALENDAR via the connector ──────────
76
+ if (opts.exportIcs !== undefined) {
77
+ const makeConnector = deps.makeConnector ??
78
+ ((outPath) => createIcsConnector({ outPath, freeBusyPath: opts.freebusy, nowIso }));
79
+ const connector = makeConnector(opts.exportIcs);
80
+ const result = await connector.writeEvents(plan.scheduled);
81
+ process.stdout.write(chalk.green(`\nWrote ${result.writtenCount} event(s) to ${result.target}\n`));
82
+ }
83
+ if (opts.dryRun === true) {
84
+ process.stdout.write(chalk.gray("\n(dry-run — nothing written to any calendar)\n"));
85
+ }
86
+ // ── 7. Live path: no flags → propose via approval gate ───────────
87
+ // No auto-approve in ANY mode (contract nonGoal). Approval is strictly out-of-band
88
+ // via `bober approve <checkpointId>` or `/approve <checkpointId>` in chat.
89
+ if (opts.dryRun !== true && opts.exportIcs === undefined) {
90
+ const planId = deps.makePlanId !== undefined ? deps.makePlanId() : Date.now().toString(36);
91
+ // Determine connector name from config (informational for the marker summary)
92
+ let connName = deps.connectorName;
93
+ if (connName === undefined) {
94
+ try {
95
+ const config = await loadConfig(projectRoot);
96
+ connName = config.calendar?.connector ?? "ics";
97
+ }
98
+ catch {
99
+ connName = "ics"; // bober: no-config fallback; upgrade: surface config-missing warning
100
+ }
101
+ }
102
+ const { checkpointId } = await proposePlan({
103
+ projectRoot,
104
+ planId,
105
+ plan,
106
+ connectorName: connName,
107
+ now: () => nowIso,
108
+ });
109
+ process.stdout.write(chalk.green(`\nProposal saved. Approve to write events:\n`));
110
+ process.stdout.write(` bober approve ${checkpointId}\n`);
111
+ process.stdout.write(` /approve ${checkpointId} (in chat)\n`);
112
+ process.stdout.write(chalk.gray(`\nCheckpoint ID: ${checkpointId}\n`));
113
+ }
114
+ }
115
+ catch (err) {
116
+ process.stderr.write(chalk.red(`Failed to plan: ${err instanceof Error ? err.message : String(err)}\n`));
117
+ // CLI handlers MUST NOT throw — set exitCode and return (mirrors medical.ts:268-269).
118
+ process.exitCode = 1;
119
+ }
120
+ }
121
+ // ── runCalendarApply (extracted for testability) ──────────────────────
122
+ /**
123
+ * Core logic for `bober calendar apply <checkpointId>`.
124
+ *
125
+ * Detects the approved/rejected marker and calls connector.writeEvents exactly
126
+ * once on approval; never on rejection; prints "pending" when neither marker exists.
127
+ */
128
+ export async function runCalendarApply(projectRoot, checkpointId, deps = {}) {
129
+ try {
130
+ let connector = deps.connector;
131
+ if (connector === undefined) {
132
+ // Determine connector type from config
133
+ let connectorType = "ics";
134
+ try {
135
+ const config = await loadConfig(projectRoot);
136
+ connectorType = config.calendar?.connector ?? "ics";
137
+ }
138
+ catch {
139
+ // bober: no-config fallback to ics; upgrade: surface warning to user
140
+ }
141
+ if (connectorType === "google") {
142
+ process.stderr.write(chalk.red("Google Calendar apply requires OAuth token provisioning.\n" +
143
+ " Provision the token sidecar and use the programmatic API.\n" +
144
+ " Fallback: use `bober calendar plan --export-ics <path>` for local .ics output.\n"));
145
+ process.exitCode = 1;
146
+ return;
147
+ }
148
+ // ICS connector: use injected path or default
149
+ const outPath = deps.icsOutPath ??
150
+ join(projectRoot, ".bober", "calendar", "schedule.ics");
151
+ connector = createIcsConnector({ outPath, nowIso: new Date().toISOString() });
152
+ }
153
+ const outcome = await applyPlan(projectRoot, checkpointId, connector);
154
+ switch (outcome.status) {
155
+ case "applied":
156
+ process.stdout.write(chalk.green(`Applied: ${outcome.writtenCount} event(s) written.\n`));
157
+ break;
158
+ case "rejected":
159
+ process.stderr.write(chalk.red(`Plan rejected.${outcome.feedback !== undefined ? ` Reason: ${outcome.feedback}` : ""}\n`));
160
+ process.exitCode = 1;
161
+ break;
162
+ case "pending":
163
+ process.stdout.write(chalk.yellow(`Pending approval. Approve with:\n bober approve ${checkpointId}\n /approve ${checkpointId} (in chat)\n`));
164
+ break;
165
+ }
166
+ }
167
+ catch (err) {
168
+ process.stderr.write(chalk.red(`Failed to apply: ${err instanceof Error ? err.message : String(err)}\n`));
169
+ process.exitCode = 1;
170
+ }
171
+ }
172
+ // ── registerCalendarCommand ───────────────────────────────────────────
173
+ /**
174
+ * Register the `bober calendar` command tree.
175
+ * Mirrors registerMedicalCommand (src/cli/commands/medical.ts:229-297).
176
+ */
177
+ export function registerCalendarCommand(program) {
178
+ const calendarCmd = program
179
+ .command("calendar")
180
+ .description("Calendar planner utilities");
181
+ // ── calendar plan ─────────────────────────────────────────────────
182
+ calendarCmd
183
+ .command("plan")
184
+ .description("Propose a schedule from ranked findings + free/busy (deterministic, LLM-free)")
185
+ .option("--dry-run", "print the proposed plan; write nothing to any calendar")
186
+ .option("--findings <path>", "ranked findings JSON file (Finding[] ordered by priority)")
187
+ .option("--freebusy <path>", "free/busy intervals JSON file (BusyInterval[])")
188
+ .option("--export-ics <path>", "write the scheduled plan to an RFC 5545 .ics file (local, no network)")
189
+ .action(async (opts) => {
190
+ const projectRoot = await resolveRoot();
191
+ await runCalendarPlan(projectRoot, opts);
192
+ });
193
+ // ── calendar apply ────────────────────────────────────────────────
194
+ calendarCmd
195
+ .command("apply <checkpointId>")
196
+ .description("Write events for an approved calendar plan (approve with: bober approve <id>)")
197
+ .option("--out <path>", "ICS output path (only used with ics connector)")
198
+ .action(async (checkpointId, opts) => {
199
+ const projectRoot = await resolveRoot();
200
+ await runCalendarApply(projectRoot, checkpointId, { icsOutPath: opts.out });
201
+ });
202
+ }
203
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../src/cli/commands/calendar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * `bober do <findingId>` — promote a hub Finding into a bober run task.
3
+ *
4
+ * Error handling: CLI handlers MUST NOT throw. Set process.exitCode=1 and return.
5
+ *
6
+ * HARD BOUNDARY: this file MUST NOT import execa, node:child_process,
7
+ * or RunSpawner directly. Import the Launcher adapter from do-bridge/launcher.ts
8
+ * instead — it owns the RunSpawner import.
9
+ */
10
+ import type { Command } from "commander";
11
+ import type { FindingStore } from "../../do-bridge/finding-port.js";
12
+ import { PromoterRegistry } from "../../do-bridge/registry.js";
13
+ import type { Launcher } from "../../do-bridge/launcher.js";
14
+ /**
15
+ * Injected dependencies for the real (non-dry-run) launch path.
16
+ * OPTIONAL so the 12 existing Sprint-1 tests (4-arg calls that hit
17
+ * dry-run/error branches) still compile without providing deps.
18
+ */
19
+ export interface RunDoDeps {
20
+ /** Launcher port — injected so tests use a fake and never spawn a real process. */
21
+ launcher: Launcher;
22
+ /** Absolute project root for approval marker files. */
23
+ projectRoot: string;
24
+ /** Interactive confirm. TTY path calls this; tests pass a stub. */
25
+ confirm: () => Promise<boolean>;
26
+ /** Whether stdout is a TTY. Defaults to process.stdout.isTTY. */
27
+ isTTY?: boolean;
28
+ /** Clock injection. Defaults to () => new Date().toISOString(). */
29
+ now?: () => string;
30
+ /** Non-TTY poll interval in ms (small values for tests). */
31
+ pollMs?: number;
32
+ /** Non-TTY timeout in ms. */
33
+ timeoutMs?: number;
34
+ }
35
+ /**
36
+ * DI core for `bober do` — accepts injected FindingStore + registry so tests
37
+ * can drive it without opening a real DB or spawning anything.
38
+ *
39
+ * Never throws: every failure branch sets process.exitCode=1 and returns.
40
+ *
41
+ * Resolution branches:
42
+ * 1. finding === null → stderr "no finding with id …" + exitCode 1 + return.
43
+ * 2. promoter === undefined → stderr naming the unsupported domain + exitCode 1 + return.
44
+ * 3. --dry-run → print ONE stdout line containing plan.task + "dry-run"; NO writes.
45
+ * 4. non-dry-run → gate (pending → approve/reject) → launch on approve.
46
+ */
47
+ export declare function runDo(store: FindingStore, registry: PromoterRegistry, findingId: string, opts: {
48
+ dryRun?: boolean;
49
+ yes?: boolean;
50
+ }, deps?: RunDoDeps): Promise<void>;
51
+ export declare function registerDoCommand(program: Command): void;
52
+ //# sourceMappingURL=do.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"do.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/do.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAkC5D;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,mFAAmF;IACnF,QAAQ,EAAE,QAAQ,CAAC;IACnB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,iEAAiE;IACjE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;;;;;;;;;GAWG;AACH,wBAAsB,KAAK,CACzB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,EACzC,IAAI,CAAC,EAAE,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CA0Gf;AAID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmHxD"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * `bober do <findingId>` — promote a hub Finding into a bober run task.
3
+ *
4
+ * Error handling: CLI handlers MUST NOT throw. Set process.exitCode=1 and return.
5
+ *
6
+ * HARD BOUNDARY: this file MUST NOT import execa, node:child_process,
7
+ * or RunSpawner directly. Import the Launcher adapter from do-bridge/launcher.ts
8
+ * instead — it owns the RunSpawner import.
9
+ */
10
+ import chalk from "chalk";
11
+ import prompts from "prompts";
12
+ import { findProjectRoot } from "../../utils/fs.js";
13
+ import { loadConfig } from "../../config/loader.js";
14
+ import { loadTeam } from "../../teams/registry.js";
15
+ import { FactStore, factsDbPath, ensureFactsDir } from "../../state/facts.js";
16
+ import { FactStoreFindingStore } from "../../do-bridge/finding-port.js";
17
+ import { PromoterRegistry } from "../../do-bridge/registry.js";
18
+ import { codingPromoter } from "../../do-bridge/coding-promoter.js";
19
+ import { RunSpawnerLauncher } from "../../do-bridge/launcher.js";
20
+ import { runPromotionGate } from "../../do-bridge/promote.js";
21
+ import { reconcilePromotionsForRoot } from "../../do-bridge/reconcile.js";
22
+ import { logger } from "../../utils/logger.js";
23
+ // ── Root resolver ─────────────────────────────────────────────────────
24
+ async function resolveRoot() {
25
+ const root = await findProjectRoot();
26
+ return root ?? process.cwd();
27
+ }
28
+ // ── Namespace resolver ────────────────────────────────────────────────
29
+ /**
30
+ * Resolve the active memory namespace from the default team.
31
+ * Falls back to undefined (default .bober/memory/ path) if config is absent.
32
+ * Never throws — config absence is not fatal.
33
+ */
34
+ async function resolveDefaultNamespace(projectRoot) {
35
+ try {
36
+ const config = await loadConfig(projectRoot);
37
+ return loadTeam(config, undefined).memoryNamespace || undefined;
38
+ }
39
+ catch {
40
+ return undefined;
41
+ }
42
+ }
43
+ // ── runDo (DI core) ───────────────────────────────────────────────────
44
+ /**
45
+ * DI core for `bober do` — accepts injected FindingStore + registry so tests
46
+ * can drive it without opening a real DB or spawning anything.
47
+ *
48
+ * Never throws: every failure branch sets process.exitCode=1 and returns.
49
+ *
50
+ * Resolution branches:
51
+ * 1. finding === null → stderr "no finding with id …" + exitCode 1 + return.
52
+ * 2. promoter === undefined → stderr naming the unsupported domain + exitCode 1 + return.
53
+ * 3. --dry-run → print ONE stdout line containing plan.task + "dry-run"; NO writes.
54
+ * 4. non-dry-run → gate (pending → approve/reject) → launch on approve.
55
+ */
56
+ export async function runDo(store, registry, findingId, opts, deps) {
57
+ // Branch 1: look up the finding
58
+ const finding = await store.readFinding(findingId);
59
+ if (finding === null) {
60
+ process.stderr.write(chalk.red(`do: no finding with id '${findingId}'\n`));
61
+ process.exitCode = 1;
62
+ return;
63
+ }
64
+ // Branch 2: resolve the promoter
65
+ const promoter = registry.resolve({ domain: finding.domain, kind: finding.kind });
66
+ if (promoter === undefined) {
67
+ // Name BOTH domain and kind so an operator can tell a missing domain-only
68
+ // registration apart from a missing kind-specific one.
69
+ process.stderr.write(chalk.red(`do: unsupported (${finding.domain}, ${finding.kind}) — no promoter registered for this domain+kind\n`));
70
+ process.exitCode = 1;
71
+ return;
72
+ }
73
+ // Branch 3: build the promotion plan
74
+ // Cast to Finding for the promoter call — DoFinding is compatible except for
75
+ // promotesTo type (object vs string); codingPromoter never reads promotesTo.
76
+ const plan = promoter(finding);
77
+ const teamDisplay = plan.teamId !== undefined ? plan.teamId : "default team";
78
+ if (opts.dryRun) {
79
+ // Dry-run: print the plan and return — NO writes, NO spawns (evaluator checks this)
80
+ process.stdout.write(chalk.green(`[dry-run] would launch: bober run "${plan.task}" (team: ${teamDisplay})\n`));
81
+ return;
82
+ }
83
+ // Branch 4: non-dry-run — gate + launch
84
+ if (deps === undefined) {
85
+ // Safety net: deps are required for the real path
86
+ process.stderr.write(chalk.red(`do: internal error — missing deps for real launch path\n`));
87
+ process.exitCode = 1;
88
+ return;
89
+ }
90
+ const now = deps.now ?? (() => new Date().toISOString());
91
+ const isTTY = deps.isTTY ?? process.stdout.isTTY ?? false;
92
+ process.stdout.write(chalk.cyan(`do: requesting approval to launch bober run "${plan.task}" (team: ${teamDisplay})\n`));
93
+ try {
94
+ const outcome = await runPromotionGate({
95
+ projectRoot: deps.projectRoot,
96
+ findingId,
97
+ plan,
98
+ yes: opts.yes ?? false,
99
+ isTTY,
100
+ confirm: deps.confirm,
101
+ now,
102
+ pollMs: deps.pollMs,
103
+ timeoutMs: deps.timeoutMs,
104
+ });
105
+ if (!outcome.approved) {
106
+ process.stdout.write(chalk.yellow(`do: promotion rejected — no launch, finding unchanged\n`));
107
+ return;
108
+ }
109
+ // Approved: launch and update finding
110
+ const { runId, pid } = await deps.launcher.launch(plan);
111
+ const ref = {
112
+ kind: "bober-run",
113
+ runId,
114
+ launchedAt: now(),
115
+ status: "launched",
116
+ };
117
+ await store.setPromotion(findingId, ref, { now: now() });
118
+ const pidDisplay = pid !== undefined ? ` (pid ${pid})` : "";
119
+ process.stdout.write(chalk.green(`do: launched bober run "${plan.task}" — runId: ${runId}${pidDisplay}\n`));
120
+ }
121
+ catch (err) {
122
+ process.stderr.write(chalk.red(`do: launch failed — ${err instanceof Error ? err.message : String(err)}\n`));
123
+ process.exitCode = 1;
124
+ }
125
+ }
126
+ // ── registerDoCommand ─────────────────────────────────────────────────
127
+ export function registerDoCommand(program) {
128
+ program
129
+ .command("do [findingId]")
130
+ .description("Promote a hub Finding into a bober run task, or reconcile launched promotions")
131
+ .option("--dry-run", "Preview the planned launch without spawning anything", false)
132
+ .option("--yes", "Auto-approve the promotion without prompting", false)
133
+ .option("--reconcile", "Reconcile launched promotions to their run outcome and exit", false)
134
+ .action(async (findingId, opts) => {
135
+ const projectRoot = await resolveRoot();
136
+ try {
137
+ const ns = await resolveDefaultNamespace(projectRoot);
138
+ await ensureFactsDir(projectRoot, ns);
139
+ const store = new FactStore(factsDbPath(projectRoot, ns));
140
+ const findingStore = new FactStoreFindingStore(store);
141
+ // ── reconcile-only path (--reconcile flag) ──────────────────
142
+ if (opts.reconcile === true) {
143
+ try {
144
+ const summary = await reconcilePromotionsForRoot(projectRoot, findingStore, () => new Date().toISOString());
145
+ process.stdout.write(chalk.green(`do --reconcile: completed=${summary.completed} aborted=${summary.aborted} unchanged=${summary.unchanged}\n`));
146
+ }
147
+ finally {
148
+ store.close();
149
+ }
150
+ return;
151
+ }
152
+ // ── normal promote path (bober do <id>) ─────────────────────
153
+ if (findingId === undefined) {
154
+ store.close();
155
+ process.stderr.write(chalk.red(`do: findingId is required (run \`bober do --reconcile\` to reconcile)\n`));
156
+ process.exitCode = 1;
157
+ return;
158
+ }
159
+ // ── Registry: add promoters here to extend the do-bridge ──────
160
+ // See docs/do-bridge.md for the extension point documentation.
161
+ // Call site referenced from docs/do-bridge.md §The Promoter Registry Extension Point.
162
+ const registry = new PromoterRegistry();
163
+ registry.register({ domain: "coding" }, codingPromoter);
164
+ registry.register({ domain: "projects" }, codingPromoter);
165
+ // STUB — not functional; registered here only to prove registry.register
166
+ // accepts a new PromoterKey {domain:'projects', kind:'action'}.
167
+ // Replace with a real projectsActionPromoter in a future sprint.
168
+ // bober: stub promoter; swap for a real implementation when the
169
+ // projects-action use case is defined.
170
+ const projectsActionStub = (_f) => ({
171
+ kind: "bober-run",
172
+ task: "STUB — not functional",
173
+ });
174
+ registry.register({ domain: "projects", kind: "action" }, projectsActionStub);
175
+ // Best-effort start-of-command reconcile — mirrors seedProjectFacts in
176
+ // src/orchestrator/pipeline.ts:981. A reconcile failure MUST NOT abort
177
+ // `bober do`. Missing/corrupt run-state files are handled inside reconcile.
178
+ try {
179
+ await reconcilePromotionsForRoot(projectRoot, findingStore, () => new Date().toISOString());
180
+ }
181
+ catch (err) {
182
+ logger.warn(`Reconcile skipped: ${err instanceof Error ? err.message : String(err)}`);
183
+ }
184
+ // Build the real deps for the launch path
185
+ const launcher = new RunSpawnerLauncher({
186
+ projectRoot,
187
+ findingId,
188
+ });
189
+ const deps = {
190
+ launcher,
191
+ projectRoot,
192
+ confirm: async () => {
193
+ const answer = await prompts({
194
+ type: "confirm",
195
+ name: "value",
196
+ message: `Approve promotion for finding '${findingId}'?`,
197
+ initial: false,
198
+ });
199
+ return answer.value === true;
200
+ },
201
+ isTTY: process.stdout.isTTY,
202
+ };
203
+ try {
204
+ await runDo(findingStore, registry, findingId, opts, deps);
205
+ }
206
+ finally {
207
+ store.close();
208
+ }
209
+ }
210
+ catch (err) {
211
+ process.stderr.write(chalk.red(`do failed: ${err instanceof Error ? err.message : String(err)}\n`));
212
+ process.exitCode = 1;
213
+ }
214
+ });
215
+ }
216
+ //# sourceMappingURL=do.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"do.js","sourceRoot":"","sources":["../../../src/cli/commands/do.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * `bober hub list` — print findings held in the project's own FactStore.
3
+ * `bober hub priority` — rank findings across siblings and write priority.md.
4
+ * `bober hub decide <expr>` — rank findings under decision scope ("X vs Y").
5
+ *
6
+ * Error handling: handlers MUST NOT throw. Set process.exitCode=1 and return.
7
+ * Pattern mirrors src/cli/commands/facts.ts and src/cli/commands/blackboard.ts.
8
+ */
9
+ import type { Command } from "commander";
10
+ import type { FindingSource } from "../../hub/finding-source.js";
11
+ import type { Finding } from "../../hub/finding.js";
12
+ import { type Scope } from "../../hub/scope.js";
13
+ import type { LLMClient } from "../../providers/types.js";
14
+ /**
15
+ * DI core for `hub list` — accepts an injected FindingSource so tests can
16
+ * drive it against an in-memory store without spawning the CLI.
17
+ * Prints one line per finding with title, kind, urgency, and severity.
18
+ */
19
+ export declare function runHubList(source: FindingSource): void;
20
+ /**
21
+ * DI core for `hub priority` / `hub decide`. Injected llm + resolved outVault
22
+ * keep tests offline. Ranks (judge order), renders, writes <outVault>/priority.md,
23
+ * prints ranked summary to stdout.
24
+ *
25
+ * Missing outVault dir → clear stderr + process.exitCode=1, NEVER throws.
26
+ */
27
+ export declare function runHubPriority(findings: Finding[], scope: Scope, llm: LLMClient, outVault: string, now: Date): Promise<void>;
28
+ export declare function registerHubCommand(program: Command): void;
29
+ //# sourceMappingURL=hub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/hub.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,KAAK,KAAK,EAAc,MAAM,oBAAoB,CAAC;AAI5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAsE1D;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAWtD;AAID;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,IAAI,GACR,OAAO,CAAC,IAAI,CAAC,CAqBf;AAID,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuIzD"}