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,233 @@
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 { writeFile } from "node:fs/promises";
10
+ import { join, dirname } from "node:path";
11
+ import chalk from "chalk";
12
+ import { findProjectRoot, readJson, fileExists, ensureDir } from "../../utils/fs.js";
13
+ import { loadConfig } from "../../config/loader.js";
14
+ import { resolveRoleProviders } from "../../config/role-providers.js";
15
+ import { createClient } from "../../providers/factory.js";
16
+ import { loadTeam } from "../../teams/registry.js";
17
+ import { FactStore, factsDbPath, ensureFactsDir } from "../../state/facts.js";
18
+ import { FactStoreFindingSource, HUB_SCOPE } from "../../hub/finding-source.js";
19
+ import { resolveSiblingRepos } from "../../hub/repo-resolver.js";
20
+ import { collectFindings } from "../../hub/collector.js";
21
+ import { parseScope } from "../../hub/scope.js";
22
+ import { rankFindings } from "../../hub/judge.js";
23
+ import { renderPriorityMd } from "../../hub/priority-md.js";
24
+ import { resolveOutVault, priorityMdPath } from "../../hub/hub-config.js";
25
+ // ── Config candidates ─────────────────────────────────────────────────
26
+ const CONFIG_CANDIDATES = ["bober.config.json", ".bober/config.json"];
27
+ // ── Root resolver ─────────────────────────────────────────────────────
28
+ async function resolveRoot() {
29
+ const root = await findProjectRoot();
30
+ return root ?? process.cwd();
31
+ }
32
+ // ── Namespace resolver ────────────────────────────────────────────────
33
+ /**
34
+ * Resolve the active memory namespace from the default team.
35
+ * Falls back to undefined (current .bober/memory/ path) if config is missing.
36
+ * Never throws — config absence is not fatal for hub commands.
37
+ */
38
+ async function resolveDefaultNamespace(projectRoot) {
39
+ try {
40
+ const config = await loadConfig(projectRoot);
41
+ return loadTeam(config, undefined).memoryNamespace || undefined;
42
+ }
43
+ catch {
44
+ return undefined;
45
+ }
46
+ }
47
+ // ── Configured repos resolver ─────────────────────────────────────────
48
+ /**
49
+ * Read the raw config file (bypassing Zod which strips unknown keys) and
50
+ * extract hub.repos if present. Falls back to undefined so the resolver
51
+ * can discover kb-* siblings instead. Never throws.
52
+ * schema.ts is NOT edited in this sprint — hub is not yet a typed field.
53
+ */
54
+ async function resolveConfiguredRepos(projectRoot) {
55
+ for (const candidate of CONFIG_CANDIDATES) {
56
+ try {
57
+ const raw = await readJson(join(projectRoot, candidate));
58
+ const repos = raw.hub?.repos;
59
+ if (Array.isArray(repos)) {
60
+ return repos.filter((r) => typeof r === "string");
61
+ }
62
+ return undefined;
63
+ }
64
+ catch {
65
+ // file not found, not valid JSON, or no hub section — try next
66
+ }
67
+ }
68
+ return undefined;
69
+ }
70
+ // ── Scope label helper ────────────────────────────────────────────────
71
+ function buildScopeLabel(scope) {
72
+ if (scope.mode === "general")
73
+ return "general";
74
+ if (scope.mode === "decision")
75
+ return `decide: ${scope.optionA} vs ${scope.optionB}`;
76
+ // filtered
77
+ const parts = ["filtered"];
78
+ if (scope.domain !== undefined)
79
+ parts.push(`domain=${scope.domain}`);
80
+ if (scope.tag !== undefined)
81
+ parts.push(`tag=${scope.tag}`);
82
+ if (scope.dueWithinDays !== undefined)
83
+ parts.push(`due<=${scope.dueWithinDays}d`);
84
+ return parts.join(", ");
85
+ }
86
+ // ── runHubList ────────────────────────────────────────────────────────
87
+ /**
88
+ * DI core for `hub list` — accepts an injected FindingSource so tests can
89
+ * drive it against an in-memory store without spawning the CLI.
90
+ * Prints one line per finding with title, kind, urgency, and severity.
91
+ */
92
+ export function runHubList(source) {
93
+ const findings = source.read();
94
+ if (findings.length === 0) {
95
+ process.stdout.write(chalk.gray("No findings found.\n"));
96
+ return;
97
+ }
98
+ for (const f of findings) {
99
+ process.stdout.write(`${f.title} [${f.kind}] urgency=${f.urgency} severity=${f.severity}\n`);
100
+ }
101
+ }
102
+ // ── runHubPriority ────────────────────────────────────────────────────
103
+ /**
104
+ * DI core for `hub priority` / `hub decide`. Injected llm + resolved outVault
105
+ * keep tests offline. Ranks (judge order), renders, writes <outVault>/priority.md,
106
+ * prints ranked summary to stdout.
107
+ *
108
+ * Missing outVault dir → clear stderr + process.exitCode=1, NEVER throws.
109
+ */
110
+ export async function runHubPriority(findings, scope, llm, outVault, now) {
111
+ if (!(await fileExists(outVault))) {
112
+ process.stderr.write(chalk.red(`kb-hub vault not found at ${outVault} — create it or set hub.outVault in bober.config.json\n`));
113
+ process.exitCode = 1;
114
+ return;
115
+ }
116
+ const ranked = await rankFindings(findings, scope, llm, now);
117
+ const label = buildScopeLabel(scope);
118
+ const md = renderPriorityMd(ranked, label, now);
119
+ const target = priorityMdPath(outVault);
120
+ // dirname(target) === outVault (already exists) — ensureDir is a harmless no-op
121
+ // kept for symmetry with writeLabNote (lab-note.ts:232) and defensive safety.
122
+ await ensureDir(dirname(target));
123
+ await writeFile(target, md, "utf-8");
124
+ for (let i = 0; i < ranked.length; i++) {
125
+ process.stdout.write(`${i + 1}. ${ranked[i].title}\n`);
126
+ }
127
+ }
128
+ // ── registerHubCommand ────────────────────────────────────────────────
129
+ export function registerHubCommand(program) {
130
+ const hubCmd = program
131
+ .command("hub")
132
+ .description("Unified cross-domain priority hub");
133
+ // ── list ────────────────────────────────────────────────────────
134
+ hubCmd
135
+ .command("list")
136
+ .description("Print findings held in the project's own FactStore")
137
+ .action(async () => {
138
+ const projectRoot = await resolveRoot();
139
+ try {
140
+ const ns = await resolveDefaultNamespace(projectRoot);
141
+ await ensureFactsDir(projectRoot, ns);
142
+ const store = new FactStore(factsDbPath(projectRoot, ns));
143
+ try {
144
+ // own findings come first (own store takes priority in dedup)
145
+ const own = new FactStoreFindingSource(store, HUB_SCOPE).read();
146
+ const configuredRepos = await resolveConfiguredRepos(projectRoot);
147
+ const siblings = await resolveSiblingRepos(projectRoot, configuredRepos);
148
+ const sibFindings = collectFindings(siblings, HUB_SCOPE);
149
+ // merge: own first, then sibling findings not already seen
150
+ const seen = new Set(own.map((f) => f.id));
151
+ const merged = [...own];
152
+ for (const f of sibFindings) {
153
+ if (!seen.has(f.id)) {
154
+ seen.add(f.id);
155
+ merged.push(f);
156
+ }
157
+ }
158
+ runHubList({ read: () => merged });
159
+ }
160
+ finally {
161
+ store.close();
162
+ }
163
+ }
164
+ catch (err) {
165
+ process.stderr.write(chalk.red(`Failed to list findings: ${err instanceof Error ? err.message : String(err)}\n`));
166
+ process.exitCode = 1;
167
+ }
168
+ });
169
+ // ── priority ─────────────────────────────────────────────────────
170
+ hubCmd
171
+ .command("priority")
172
+ .description("Rank findings across siblings and write priority.md to the kb-hub vault")
173
+ .option("--domain <domain>", "filter to one domain")
174
+ .option("--due <days>", "filter to findings due within N days")
175
+ .option("--tag <tag>", "filter to a tag")
176
+ .action(async (opts) => {
177
+ const projectRoot = await resolveRoot();
178
+ try {
179
+ const config = await loadConfig(projectRoot);
180
+ const providers = resolveRoleProviders(config);
181
+ const client = createClient(providers.chat, config.chat?.endpoint ?? null, config.chat?.providerConfig, config.chat?.model, "chat");
182
+ const configuredRepos = await resolveConfiguredRepos(projectRoot);
183
+ const siblings = await resolveSiblingRepos(projectRoot, configuredRepos);
184
+ const findings = collectFindings(siblings, HUB_SCOPE);
185
+ const scope = opts.domain !== undefined || opts.due !== undefined || opts.tag !== undefined
186
+ ? parseScope({
187
+ mode: "filtered",
188
+ domain: opts.domain,
189
+ tag: opts.tag,
190
+ dueWithinDays: opts.due !== undefined ? Number(opts.due) : undefined,
191
+ })
192
+ : parseScope({ mode: "general" });
193
+ const outVault = await resolveOutVault(projectRoot);
194
+ await runHubPriority(findings, scope, client, outVault, new Date());
195
+ }
196
+ catch (err) {
197
+ process.stderr.write(chalk.red(`hub priority failed: ${err instanceof Error ? err.message : String(err)}\n`));
198
+ process.exitCode = 1;
199
+ }
200
+ });
201
+ // ── decide <expr> ─────────────────────────────────────────────────
202
+ hubCmd
203
+ .command("decide <expr>")
204
+ .description("Rank findings under decision scope (e.g. 'X vs Y') and write priority.md")
205
+ .action(async (expr) => {
206
+ const projectRoot = await resolveRoot();
207
+ try {
208
+ const parts = expr.split(/\s+vs\s+/i);
209
+ if (parts.length !== 2 || !parts[0].trim() || !parts[1].trim()) {
210
+ process.stderr.write(chalk.red(`hub decide: expected 'X vs Y' expression, got: ${expr}\n` +
211
+ `Usage: bober hub decide "option A vs option B"\n`));
212
+ process.exitCode = 1;
213
+ return;
214
+ }
215
+ const optionA = parts[0].trim();
216
+ const optionB = parts[1].trim();
217
+ const config = await loadConfig(projectRoot);
218
+ const providers = resolveRoleProviders(config);
219
+ const client = createClient(providers.chat, config.chat?.endpoint ?? null, config.chat?.providerConfig, config.chat?.model, "chat");
220
+ const configuredRepos = await resolveConfiguredRepos(projectRoot);
221
+ const siblings = await resolveSiblingRepos(projectRoot, configuredRepos);
222
+ const findings = collectFindings(siblings, HUB_SCOPE);
223
+ const scope = parseScope({ mode: "decision", optionA, optionB });
224
+ const outVault = await resolveOutVault(projectRoot);
225
+ await runHubPriority(findings, scope, client, outVault, new Date());
226
+ }
227
+ catch (err) {
228
+ process.stderr.write(chalk.red(`hub decide failed: ${err instanceof Error ? err.message : String(err)}\n`));
229
+ process.exitCode = 1;
230
+ }
231
+ });
232
+ }
233
+ //# sourceMappingURL=hub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub.js","sourceRoot":"","sources":["../../../src/cli/commands/hub.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { Command } from "commander";
2
2
  import { WhoopClient } from "../../medical/whoop/whoop-client.js";
3
+ import { parseLabPdf } from "../../medical/lab-pdf-parser.js";
3
4
  /** Injectable dependencies for runWhoopSync — production callers pass undefined. */
4
5
  export interface WhoopSyncDeps {
5
6
  /** Override the WhoopClient (e.g. fixture client in tests). */
@@ -15,6 +16,30 @@ export interface WhoopSyncDeps {
15
16
  export declare function runWhoopSync(projectRoot: string, opts: {
16
17
  since?: string;
17
18
  }, deps?: WhoopSyncDeps): Promise<void>;
19
+ /** Injectable dependencies for runImportLabs — production callers pass undefined. */
20
+ export interface ImportLabsDeps {
21
+ /** Override the PDF parser (e.g. fixture parser in tests). */
22
+ parse?: typeof parseLabPdf;
23
+ /** Override the current time ISO string (default: new Date().toISOString()). */
24
+ nowIso?: string;
25
+ }
26
+ /**
27
+ * Core logic for `bober medical import-labs <pdf>`.
28
+ * Extracted so tests can inject fixture deps without module-level mocking.
29
+ * The CLI .action() calls this with no deps (production).
30
+ *
31
+ * LOAD-BEARING ORDER (ADR-6 / sc-3-3):
32
+ * 1. loadConfig + EgressGuard.fromConfig
33
+ * 2. cloud-inference axis check — exits 1 BEFORE any readFile or client build
34
+ * 3. buildMedicalInferenceClient
35
+ * 4. readFile(pdfPath) + parse(pdfBytes)
36
+ * 5. writeLabNote per marker + reindexLabNotes into HealthDataStore (dedup)
37
+ * 6. AuditLog.append (IDs/enums only — PHI rule)
38
+ * 7. finally: store?.close()
39
+ */
40
+ export declare function runImportLabs(projectRoot: string, pdfPath: string, deps?: ImportLabsDeps, opts?: {
41
+ vault?: string;
42
+ }): Promise<void>;
18
43
  /**
19
44
  * Register the `bober medical` command tree.
20
45
  * Provides `medical import <file>` and `medical whoop sync [--since <iso>]`.
@@ -1 +1 @@
1
- {"version":3,"file":"medical.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/medical.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAalE,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACxB,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,IAAI,CAAC,CA0Ef;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2D7D"}
1
+ {"version":3,"file":"medical.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/medical.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAGlE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAmB9D,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACxB,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,IAAI,CAAC,CA0Ef;AAID,qFAAqF;AACrF,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,WAAW,CAAC;IAC3B,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,cAAmB,EACzB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5B,OAAO,CAAC,IAAI,CAAC,CAuDf;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqQ7D"}
@@ -1,5 +1,9 @@
1
1
  /** `bober medical import <file>` — stream-ingest a health export (Phase 6, Sprint 5). */
2
2
  /** `bober medical whoop sync` — WHOOP device-connection sync (Phase 6, Sprint 3). */
3
+ /** `bober medical import-labs <pdf>` — lab PDF ingest: fail-closed cloud-inference gate + vault + audit (Sprint 3). */
4
+ /** `bober medical review` — deterministic proactive trend review pass (spec-20260628-medical-analysis Sprint 1). */
5
+ /** `bober medical research` — egress-gated online research job (spec-20260628-medical-analysis Sprint 5). */
6
+ import { readFile } from "node:fs/promises";
3
7
  import { join } from "node:path";
4
8
  import chalk from "chalk";
5
9
  import { findProjectRoot, ensureDir } from "../../utils/fs.js";
@@ -12,6 +16,15 @@ import { WhoopTokenStore } from "../../medical/whoop/whoop-token.js";
12
16
  import { WhoopClient } from "../../medical/whoop/whoop-client.js";
13
17
  import { WhoopSyncAdapter } from "../../medical/whoop/whoop-sync.js";
14
18
  import { AuditLog } from "../../medical/audit.js";
19
+ import { parseLabPdf } from "../../medical/lab-pdf-parser.js";
20
+ import { writeLabNote } from "../../medical/lab-note.js";
21
+ import { reindexLabNotes } from "../../medical/lab-reindex.js";
22
+ import { buildMedicalInferenceClient } from "../../medical/inference.js";
23
+ import { runSupplementAdd, runSupplementList } from "../../medical/supplements.js";
24
+ import { runProfileShow, runProfileSet } from "../../medical/profile.js";
25
+ import { runProactiveReview, digDeeper } from "../../medical/analysis/review-pass.js";
26
+ import { generateRecommendation } from "../../medical/recommend/recommend.js";
27
+ import { runResearchJob } from "../../medical/research/online-research.js";
15
28
  // ── Root resolver ─────────────────────────────────────────────────────
16
29
  async function resolveRoot() {
17
30
  const root = await findProjectRoot();
@@ -75,6 +88,62 @@ export async function runWhoopSync(projectRoot, opts, deps = {}) {
75
88
  store?.close(); // always close — even if sync threw mid-pagination (sc-3-8)
76
89
  }
77
90
  }
91
+ /**
92
+ * Core logic for `bober medical import-labs <pdf>`.
93
+ * Extracted so tests can inject fixture deps without module-level mocking.
94
+ * The CLI .action() calls this with no deps (production).
95
+ *
96
+ * LOAD-BEARING ORDER (ADR-6 / sc-3-3):
97
+ * 1. loadConfig + EgressGuard.fromConfig
98
+ * 2. cloud-inference axis check — exits 1 BEFORE any readFile or client build
99
+ * 3. buildMedicalInferenceClient
100
+ * 4. readFile(pdfPath) + parse(pdfBytes)
101
+ * 5. writeLabNote per marker + reindexLabNotes into HealthDataStore (dedup)
102
+ * 6. AuditLog.append (IDs/enums only — PHI rule)
103
+ * 7. finally: store?.close()
104
+ */
105
+ export async function runImportLabs(projectRoot, pdfPath, deps = {}, opts = {}) {
106
+ let store;
107
+ try {
108
+ const config = await loadConfig(projectRoot);
109
+ const egress = EgressGuard.fromConfig(config);
110
+ // axis-off branch: clear message, exit 1, NEVER read the PDF or build any client (FAIL CLOSED — sc-3-3)
111
+ if (!egress.isAllowed("cloud-inference")) {
112
+ process.stderr.write(chalk.red("cloud-inference egress not enabled — set medical.egress.cloudInference: true in bober.config.json\n"));
113
+ process.exitCode = 1;
114
+ return;
115
+ }
116
+ const { client, model } = buildMedicalInferenceClient(config, egress);
117
+ const pdfBytes = await readFile(pdfPath);
118
+ const parse = deps.parse ?? parseLabPdf;
119
+ const report = await parse(pdfBytes, { client, model });
120
+ const nowIso = deps.nowIso ?? new Date().toISOString();
121
+ const medicalDir = join(projectRoot, ".bober", "medical");
122
+ await ensureDir(medicalDir);
123
+ const vaultDir = opts.vault ?? medicalDir;
124
+ store = new HealthDataStore(join(medicalDir, "health.db"));
125
+ for (const marker of report.markers) {
126
+ await writeLabNote(vaultDir, marker, {
127
+ panel: report.panel,
128
+ collectedAtIso: report.collectedAtIso,
129
+ source: "lab-pdf",
130
+ });
131
+ }
132
+ const newRows = await reindexLabNotes(vaultDir, store);
133
+ // Audit entry — IDs/enums only (no values, panel names, counts, or PHI — audit.ts:1)
134
+ await new AuditLog(projectRoot).append({ tIso: nowIso, event: "ingest" });
135
+ process.stdout.write(chalk.green("Lab import complete\n"));
136
+ process.stdout.write(` records parsed: ${report.markers.length}\n`);
137
+ process.stdout.write(` new rows: ${newRows}\n`);
138
+ }
139
+ catch (err) {
140
+ process.stderr.write(chalk.red(`Failed to import labs: ${err instanceof Error ? err.message : String(err)}\n`));
141
+ process.exitCode = 1;
142
+ }
143
+ finally {
144
+ store?.close();
145
+ }
146
+ }
78
147
  // ── registerMedicalCommand ────────────────────────────────────────────
79
148
  /**
80
149
  * Register the `bober medical` command tree.
@@ -116,6 +185,15 @@ export function registerMedicalCommand(program) {
116
185
  process.exitCode = 1;
117
186
  }
118
187
  });
188
+ // ── medical import-labs ──────────────────────────────────────────
189
+ medicalCmd
190
+ .command("import-labs <pdf>")
191
+ .description("Parse a lab PDF and ingest results into the medical health store")
192
+ .option("--vault <dir>", "vault dir (default: under .bober/medical)")
193
+ .action(async (pdf, opts) => {
194
+ const projectRoot = await resolveRoot();
195
+ await runImportLabs(projectRoot, pdf, {}, opts);
196
+ });
119
197
  // ── medical whoop sync ────────────────────────────────────────────
120
198
  const whoopCmd = medicalCmd
121
199
  .command("whoop")
@@ -128,5 +206,160 @@ export function registerMedicalCommand(program) {
128
206
  const projectRoot = await resolveRoot();
129
207
  await runWhoopSync(projectRoot, opts);
130
208
  });
209
+ // ── medical supplements ───────────────────────────────────────────────
210
+ const suppCmd = medicalCmd
211
+ .command("supplements")
212
+ .description("Manage supplements list in FactStore (scope: medical)");
213
+ suppCmd
214
+ .command("add <name>")
215
+ .description("Reconcile a supplement into FactStore (creates or noops on duplicate)")
216
+ .option("--dose <d>", "dose string (default: unspecified)")
217
+ .action(async (name, opts) => {
218
+ const projectRoot = await resolveRoot();
219
+ await runSupplementAdd(projectRoot, name, opts);
220
+ });
221
+ suppCmd
222
+ .command("list")
223
+ .description("Print supplements from the markdown-frontmatter file")
224
+ .option("--file <path>", "supplements markdown file (default: .bober/medical/supplements.md)")
225
+ .action(async (opts) => {
226
+ const projectRoot = await resolveRoot();
227
+ await runSupplementList(projectRoot, opts);
228
+ });
229
+ // ── medical profile ───────────────────────────────────────────────────
230
+ const profileCmd = medicalCmd
231
+ .command("profile")
232
+ .description("Manage personalization profile (SOPS-encrypted profile.yaml)");
233
+ profileCmd
234
+ .command("show")
235
+ .description("Decrypt and display the current personalization profile")
236
+ .option("--vault <dir>", "vault dir (default: .bober/medical under project root)")
237
+ .action(async (opts) => {
238
+ const projectRoot = await resolveRoot();
239
+ await runProfileShow(projectRoot, opts);
240
+ });
241
+ profileCmd
242
+ .command("set <key> <value>")
243
+ .description("Update one profile field after Zod validation")
244
+ .option("--vault <dir>", "vault dir (default: .bober/medical under project root)")
245
+ .action(async (key, value, opts) => {
246
+ const projectRoot = await resolveRoot();
247
+ await runProfileSet(projectRoot, key, value, opts);
248
+ });
249
+ // ── medical review ────────────────────────────────────────────────────
250
+ medicalCmd
251
+ .command("review")
252
+ .description("Run the deterministic proactive trend review pass and write Finding notes + dashboard")
253
+ .option("--dig-deeper <id>", "run deeper cross-marker analysis for the given offer finding id (gated LLM path)")
254
+ .action(async (opts) => {
255
+ const projectRoot = await resolveRoot();
256
+ try {
257
+ const config = await loadConfig(projectRoot);
258
+ // Clock read ONLY here at the CLI boundary (mirrors medical.ts:97)
259
+ const now = new Date().toISOString();
260
+ if (opts.digDeeper !== undefined) {
261
+ // -- dig-deeper path (gated LLM) --
262
+ const result = await digDeeper(projectRoot, config, opts.digDeeper, { now });
263
+ if (result.kind === "accepted") {
264
+ process.stdout.write(chalk.green(`Deep analysis accepted\n`));
265
+ if (result.findingPath !== undefined) {
266
+ process.stdout.write(` finding: ${result.findingPath}\n`);
267
+ }
268
+ }
269
+ else if (result.kind === "question") {
270
+ process.stdout.write(chalk.yellow(`Deep analysis flagged for review\n`));
271
+ if (result.findingPath !== undefined) {
272
+ process.stdout.write(` finding: ${result.findingPath}\n`);
273
+ }
274
+ }
275
+ else if (result.kind === "escalated") {
276
+ process.stdout.write(chalk.red(`Escalated: ${result.cannedResponse ?? ""}\n`));
277
+ }
278
+ else {
279
+ // refused
280
+ process.stdout.write(chalk.yellow(`Deep analysis refused: ${result.reason ?? ""}\n`));
281
+ }
282
+ return;
283
+ }
284
+ // -- standard review path (offline, deterministic) --
285
+ // counts now include gap + offer findings from sprint-4 analyzers (sc-4-7)
286
+ const result = await runProactiveReview(projectRoot, config, { now });
287
+ process.stdout.write(chalk.green(`Proactive review complete\n`));
288
+ process.stdout.write(` findings written: ${result.findingsWritten}\n`);
289
+ process.stdout.write(` dashboard: ${result.dashboardPath}\n`);
290
+ }
291
+ catch (err) {
292
+ process.stderr.write(chalk.red(`Failed to run review: ${err instanceof Error ? err.message : String(err)}\n`));
293
+ process.exitCode = 1; // MUST NOT throw (mirrors import action pattern at line 257-265)
294
+ }
295
+ });
296
+ // ── medical recommend ─────────────────────────────────────────────────
297
+ medicalCmd
298
+ .command("recommend <question>")
299
+ .description("Generate a medical recommendation through the 4-lens judge panel and write a Finding note")
300
+ .option("--goal <g>", "optional health goal to include in the recommendation context")
301
+ .action(async (question, opts) => {
302
+ const projectRoot = await resolveRoot();
303
+ try {
304
+ const config = await loadConfig(projectRoot);
305
+ // Clock read ONLY here at the CLI boundary (sc-3-7)
306
+ const now = new Date().toISOString();
307
+ const result = await generateRecommendation(projectRoot, config, {
308
+ question,
309
+ goal: opts.goal,
310
+ now,
311
+ });
312
+ if (result.kind === "accepted") {
313
+ process.stdout.write(chalk.green(`Recommendation accepted\n`));
314
+ if (result.findingPath !== undefined) {
315
+ process.stdout.write(` finding: ${result.findingPath}\n`);
316
+ }
317
+ }
318
+ else if (result.kind === "question") {
319
+ process.stdout.write(chalk.yellow(`Recommendation flagged for review\n`));
320
+ if (result.findingPath !== undefined) {
321
+ process.stdout.write(` finding: ${result.findingPath}\n`);
322
+ }
323
+ }
324
+ else if (result.kind === "escalated") {
325
+ process.stdout.write(chalk.red(`Escalated: ${result.cannedResponse ?? ""}\n`));
326
+ }
327
+ else {
328
+ // refused
329
+ process.stdout.write(chalk.yellow(`Recommendation refused: ${result.reason ?? ""}\n`));
330
+ }
331
+ }
332
+ catch (err) {
333
+ process.stderr.write(chalk.red(`Failed to generate recommendation: ${err instanceof Error ? err.message : String(err)}\n`));
334
+ process.exitCode = 1; // MUST NOT throw — sc-3-7 exit 0 on normal outcomes
335
+ }
336
+ });
337
+ // ── medical research ──────────────────────────────────────────────────
338
+ medicalCmd
339
+ .command("research")
340
+ .description("Retrieve latest MedlinePlus evidence for markers and write vault research notes (egress-gated)")
341
+ .option("--marker <m>", "marker to research (default: ldl, hdl, a1c)")
342
+ .action(async (opts) => {
343
+ const projectRoot = await resolveRoot();
344
+ try {
345
+ const config = await loadConfig(projectRoot);
346
+ // Clock read ONLY here at the CLI boundary (sc-5-7)
347
+ const now = new Date().toISOString();
348
+ const markers = opts.marker !== undefined ? [opts.marker] : ["ldl", "hdl", "a1c"];
349
+ const summary = await runResearchJob(projectRoot, config, { markers, now });
350
+ if (summary.disabled) {
351
+ process.stdout.write(chalk.yellow("literature-retrieval egress not enabled — research skipped (zero egress)\n"));
352
+ }
353
+ else {
354
+ process.stdout.write(chalk.green("Research complete\n"));
355
+ process.stdout.write(` notes written: ${summary.notesWritten}\n`);
356
+ process.stdout.write(` findings written: ${summary.findingsWritten}\n`);
357
+ }
358
+ }
359
+ catch (err) {
360
+ process.stderr.write(chalk.red(`Failed to run research: ${err instanceof Error ? err.message : String(err)}\n`));
361
+ process.exitCode = 1; // MUST NOT throw (sc-5-7: exit 0 on both ran and disabled)
362
+ }
363
+ });
131
364
  }
132
365
  //# sourceMappingURL=medical.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"medical.js","sourceRoot":"","sources":["../../../src/cli/commands/medical.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"medical.js","sourceRoot":"","sources":["../../../src/cli/commands/medical.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * `agent-bober research job add|list|remove` — manage recurring multi-model research jobs.
3
+ * `agent-bober research run <jobId>` — execute a stored research job.
4
+ * `agent-bober research tick [--watch]` — run every due job (idempotent).
5
+ *
6
+ * Subcommands:
7
+ * research job add --question "..." [--cadence daily|weekly|monthly] [--tier <t>]
8
+ * [--domain <d>] [--target-repo <r>] [--online-research]
9
+ * research job list
10
+ * research job remove <jobId>
11
+ * research run <jobId>
12
+ * research tick [--watch] [--interval <ms>]
13
+ *
14
+ * Error handling: CLI handlers MUST NOT throw. They set process.exitCode=1 and
15
+ * return on all errors. Pattern mirrors src/cli/commands/task.ts:360-367.
16
+ *
17
+ * Clock discipline: new Date().toISOString() is called ONLY at the .action()
18
+ * boundary — never inside the store (mirrors task.ts:352 "stamp wall-clock time
19
+ * at handler boundary").
20
+ *
21
+ * fs boundary: ALL direct fs work (ensureDir, writeFile) happens inside runner.ts
22
+ * and note-writer.ts. This file only calls readJob (JSON read) and opens FactStore.
23
+ * This keeps the utils/fs.js import surface minimal (only findProjectRoot) so that
24
+ * the research.test.ts whole-module vi.mock of utils/fs.js stays stable.
25
+ */
26
+ import type { Command } from "commander";
27
+ import type { DigestRun } from "../../research/digest.js";
28
+ import type { QueryModel, FindingSink } from "../../research/runner.js";
29
+ /**
30
+ * Optional overrides injected at registration time.
31
+ * Allows tests to bypass the real LLM provider and hub store without
32
+ * mocking additional modules beyond utils/fs.js.
33
+ */
34
+ export interface ResearchRunOverrides {
35
+ queryModel?: QueryModel;
36
+ findingSink?: FindingSink;
37
+ /** Injected collector for `research digest` — skips real vault I/O in tests. */
38
+ digestCollectRuns?: (since: string, now: string) => Promise<DigestRun[]>;
39
+ }
40
+ export declare function registerResearchCommand(program: Command, overrides?: ResearchRunOverrides): void;
41
+ //# sourceMappingURL=research.d.ts.map