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,86 @@
1
+ /**
2
+ * generateRecommendation — recommendation generation end-to-end.
3
+ *
4
+ * Wires the sprint-2 judge loop into a real recommendation path:
5
+ * 1. Assemble profile context from FactStore + medical profile
6
+ * 2. Build four per-lens LLM clients (tier-diverse when cloud ON, all local when cloud OFF)
7
+ * 3. Generate a candidate + gate through runJudgeLoop
8
+ * 4. Emit a Finding:
9
+ * - accepted → kind="action" (LLM-assigned urgency/severity/confidence, NO refer-out hedging)
10
+ * - rejected → kind="question" flagged for review (per-lens dissent)
11
+ * - short-circuit/refuse → canned escalation, NO finding
12
+ * 5. Append AuditLog entry (IDs/enums only — NonGoal #3)
13
+ *
14
+ * engine.ts is NO-TOUCH: patterns are COPIED (not imported) from engine.ts:250-410.
15
+ * runJudgeLoop is IMPORTED — do NOT re-implement (NonGoal #5).
16
+ *
17
+ * sc-3-5 (fail-closed model selection): when egress.isAllowed("cloud-inference") is FALSE,
18
+ * EVERY client (all four lenses + the generator) resolves via buildMedicalInferenceClient.
19
+ * deps.clientFactory is threaded through both paths so tests can spy without network.
20
+ */
21
+ import type { BoberConfig } from "../../config/schema.js";
22
+ import type { LLMClient } from "../../providers/types.js";
23
+ import { EgressGuard } from "../egress.js";
24
+ import type { GuardrailSet } from "../types.js";
25
+ import type { ClientFactory } from "../inference.js";
26
+ import { AuditLog } from "../audit.js";
27
+ import type { FactStore } from "../../state/facts.js";
28
+ import type { ProfileCipher } from "../profile.js";
29
+ import { writeFinding } from "../analysis/finding-writer.js";
30
+ import type { LensClients } from "./types.js";
31
+ import type { UrgencyResult } from "./urgency.js";
32
+ /** Discriminated outcome of generateRecommendation. */
33
+ export type RecommendOutcomeKind = "accepted" | "question" | "escalated" | "refused";
34
+ export interface RecommendOutcome {
35
+ kind: RecommendOutcomeKind;
36
+ /** Absolute path to the written Finding note (accepted + question paths). */
37
+ findingPath?: string;
38
+ /** Canned escalation response (escalated path). */
39
+ cannedResponse?: string;
40
+ /** Refusal reason (refused path). */
41
+ reason?: string;
42
+ }
43
+ /**
44
+ * Injectable dependencies for generateRecommendation.
45
+ * Production callers pass no deps. Tests inject everything to avoid real network/fs.
46
+ */
47
+ export interface RecommendDeps {
48
+ /** Pre-built lens clients (tests inject fake ScriptedClients). */
49
+ lensClients?: LensClients;
50
+ /** Override the candidate generator (tests inject a deterministic fn). */
51
+ generateCandidate?: (prevFeedback?: string) => Promise<string>;
52
+ /** Override the guardrail set (tests inject shortCircuitGuard / allowGuard). */
53
+ redFlag?: GuardrailSet;
54
+ /** Override the urgency assigner (tests inject a fn returning fixed values). */
55
+ assignUrgency?: (llm: LLMClient, model: string, candidate: string, context: string) => Promise<UrgencyResult>;
56
+ /** Override writeFinding (tests inject a fn that writes to a temp vault). */
57
+ writeFindingFn?: typeof writeFinding;
58
+ /** Injected FactStore (tests pass :memory:; caller owns lifecycle). */
59
+ facts?: FactStore;
60
+ /** Override the EgressGuard (tests inject a fixed allow/deny guard). */
61
+ egress?: EgressGuard;
62
+ /**
63
+ * Injectable ClientFactory for cloud-OFF spy test (sc-3-5).
64
+ * Threaded into BOTH buildMedicalInferenceClient AND the tier createClient calls
65
+ * so tests can assert no cloud provider was constructed.
66
+ */
67
+ clientFactory?: ClientFactory;
68
+ /** Override the AuditLog (tests inject a no-op or in-memory log). */
69
+ auditLog?: AuditLog;
70
+ /** Override ProfileCipher (tests inject a reversible fake). */
71
+ profileCipher?: ProfileCipher;
72
+ }
73
+ /**
74
+ * Run the recommendation pipeline end-to-end.
75
+ *
76
+ * @param projectRoot Absolute project root path
77
+ * @param config Loaded BoberConfig
78
+ * @param opts { question, goal?, now } — clock is read ONLY at the CLI boundary
79
+ * @param deps Optional injectable dependencies for tests
80
+ */
81
+ export declare function generateRecommendation(projectRoot: string, config: BoberConfig, opts: {
82
+ question: string;
83
+ goal?: string;
84
+ now: string;
85
+ }, deps?: RecommendDeps): Promise<RecommendOutcome>;
86
+ //# sourceMappingURL=recommend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../../../src/medical/recommend/recommend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIlD,uDAAuD;AACvD,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAErF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/D,gFAAgF;IAChF,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,gFAAgF;IAChF,aAAa,CAAC,EAAE,CACd,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5B,6EAA6E;IAC7E,cAAc,CAAC,EAAE,OAAO,YAAY,CAAC;IACrC,uEAAuE;IACvE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,wEAAwE;IACxE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAID;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACtD,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAoO3B"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * generateRecommendation — recommendation generation end-to-end.
3
+ *
4
+ * Wires the sprint-2 judge loop into a real recommendation path:
5
+ * 1. Assemble profile context from FactStore + medical profile
6
+ * 2. Build four per-lens LLM clients (tier-diverse when cloud ON, all local when cloud OFF)
7
+ * 3. Generate a candidate + gate through runJudgeLoop
8
+ * 4. Emit a Finding:
9
+ * - accepted → kind="action" (LLM-assigned urgency/severity/confidence, NO refer-out hedging)
10
+ * - rejected → kind="question" flagged for review (per-lens dissent)
11
+ * - short-circuit/refuse → canned escalation, NO finding
12
+ * 5. Append AuditLog entry (IDs/enums only — NonGoal #3)
13
+ *
14
+ * engine.ts is NO-TOUCH: patterns are COPIED (not imported) from engine.ts:250-410.
15
+ * runJudgeLoop is IMPORTED — do NOT re-implement (NonGoal #5).
16
+ *
17
+ * sc-3-5 (fail-closed model selection): when egress.isAllowed("cloud-inference") is FALSE,
18
+ * EVERY client (all four lenses + the generator) resolves via buildMedicalInferenceClient.
19
+ * deps.clientFactory is threaded through both paths so tests can spy without network.
20
+ */
21
+ import { join } from "node:path";
22
+ import { EgressGuard } from "../egress.js";
23
+ import { MedicalGuardrails } from "../guardrails.js";
24
+ import { buildMedicalInferenceClient } from "../inference.js";
25
+ import { createClient } from "../../providers/factory.js";
26
+ import { tierPolicy } from "../../fleet/tier-policy.js";
27
+ import { AuditLog } from "../audit.js";
28
+ import { findingId } from "../analysis/finding.js";
29
+ import { writeFinding } from "../analysis/finding-writer.js";
30
+ import { runJudgeLoop } from "./judge-panel.js";
31
+ import { assembleRecommendationContext, contextToString } from "./context.js";
32
+ import { assignUrgencySeverity } from "./urgency.js";
33
+ // -- generateRecommendation ----------------------------------------------
34
+ /**
35
+ * Run the recommendation pipeline end-to-end.
36
+ *
37
+ * @param projectRoot Absolute project root path
38
+ * @param config Loaded BoberConfig
39
+ * @param opts { question, goal?, now } — clock is read ONLY at the CLI boundary
40
+ * @param deps Optional injectable dependencies for tests
41
+ */
42
+ export async function generateRecommendation(projectRoot, config, opts, deps = {}) {
43
+ const { question, goal, now } = opts;
44
+ // 1. Egress guard + factory
45
+ const egress = deps.egress ?? EgressGuard.fromConfig(config);
46
+ const factory = deps.clientFactory ?? createClient;
47
+ // 2. Vault dir for findings (mirrors review-pass.ts:51-52)
48
+ const vaultDir = config.medical?.vaultDir ?? join(projectRoot, ".bober", "medical", "vault");
49
+ // 3. Audit log
50
+ const auditLog = deps.auditLog ?? new AuditLog(projectRoot);
51
+ // 4. Red-flag guard
52
+ const redFlag = deps.redFlag ?? new MedicalGuardrails();
53
+ // 5. Build four lens clients + generator client
54
+ // CRITICAL (sc-3-5): gate the ENTIRE tier branch behind isAllowed("cloud-inference").
55
+ // When cloud is OFF, ALL four lenses + the generator resolve via buildMedicalInferenceClient
56
+ // using the injected factory so tests can spy.
57
+ let lensClients;
58
+ let generatorSpec;
59
+ if (deps.lensClients !== undefined) {
60
+ // Test-injected lens clients; build a local generator unless generateCandidate is also injected
61
+ lensClients = deps.lensClients;
62
+ generatorSpec = buildMedicalInferenceClient(config, egress, factory);
63
+ }
64
+ else if (egress.isAllowed("cloud-inference")) {
65
+ // Cloud ON: use tier diversity (briefing §E)
66
+ // evidenceGrader → cheap (deepseek)
67
+ // contraindicationChecker → standard (grok)
68
+ // conservativeClinician → hard (sonnet)
69
+ // optimizationLens → frontier (opus)
70
+ // generator → hard (sonnet)
71
+ const cheapBlock = tierPolicy.resolveTier("cheap").generator; // openai-compat deepseek
72
+ const standardBlock = tierPolicy.resolveTier("standard").generator; // openai-compat grok
73
+ const hardBlock = tierPolicy.resolveTier("hard").generator; // anthropic sonnet
74
+ const frontierBlock = tierPolicy.resolveTier("frontier").generator; // anthropic opus
75
+ lensClients = {
76
+ evidenceGrader: {
77
+ client: factory(cheapBlock.provider, cheapBlock.endpoint ?? undefined, undefined, cheapBlock.model),
78
+ model: cheapBlock.model,
79
+ },
80
+ contraindicationChecker: {
81
+ client: factory(standardBlock.provider, standardBlock.endpoint ?? undefined, undefined, standardBlock.model),
82
+ model: standardBlock.model,
83
+ },
84
+ conservativeClinician: {
85
+ client: factory(hardBlock.provider, hardBlock.endpoint ?? undefined, undefined, hardBlock.model),
86
+ model: hardBlock.model,
87
+ },
88
+ optimizationLens: {
89
+ client: factory(frontierBlock.provider, frontierBlock.endpoint ?? undefined, undefined, frontierBlock.model),
90
+ model: frontierBlock.model,
91
+ },
92
+ };
93
+ generatorSpec = {
94
+ client: factory(hardBlock.provider, hardBlock.endpoint ?? undefined, undefined, hardBlock.model),
95
+ model: hardBlock.model,
96
+ };
97
+ }
98
+ else {
99
+ // Cloud OFF: ALL four lenses + generator resolve via buildMedicalInferenceClient (fail-closed)
100
+ // bober: all local when cloud-inference off; swap for per-lens routing if cloud is opt-in.
101
+ const localSpec = buildMedicalInferenceClient(config, egress, factory);
102
+ lensClients = {
103
+ evidenceGrader: localSpec,
104
+ contraindicationChecker: localSpec,
105
+ conservativeClinician: localSpec,
106
+ optimizationLens: localSpec,
107
+ };
108
+ generatorSpec = localSpec;
109
+ }
110
+ // 6. Assemble profile context
111
+ const ctx = await assembleRecommendationContext(projectRoot, config, { goal }, { facts: deps.facts, profileCipher: deps.profileCipher });
112
+ // runJudgeLoop.context is a STRING — must be serialized (judge-panel.ts:92)
113
+ const contextString = contextToString(ctx);
114
+ // 7. Build generateCandidate (or use injected one)
115
+ const generateCandidate = deps.generateCandidate ??
116
+ (async (prevFeedback) => {
117
+ const systemPrompt = `You are a medical advisor. Given a patient question and their profile context, ` +
118
+ `provide a clear and specific recommendation. Be direct and actionable.` +
119
+ (prevFeedback !== undefined ? `\n\nPanel feedback to incorporate:\n${prevFeedback}` : "");
120
+ const response = await generatorSpec.client.chat({
121
+ model: generatorSpec.model,
122
+ system: systemPrompt,
123
+ messages: [{ role: "user", content: `Question: ${question}\n\nContext:\n${contextString}` }],
124
+ });
125
+ return response.text;
126
+ });
127
+ // 8. Run judge loop (IMPORT — do NOT re-implement)
128
+ const panelOutcome = await runJudgeLoop({
129
+ question,
130
+ generateCandidate,
131
+ lensClients,
132
+ context: contextString,
133
+ redFlag,
134
+ now,
135
+ });
136
+ // 9. Handle outcome — switch on outcome.outcome (types.ts:84-133)
137
+ if (panelOutcome.outcome === "short-circuit") {
138
+ // Red-flag matched: canned escalation, NO finding, short-circuit audit entry
139
+ // Pattern from engine.ts:250-289 (copied, not imported)
140
+ await auditLog.append({
141
+ tIso: now,
142
+ event: "short-circuit",
143
+ ruleId: panelOutcome.rule,
144
+ rulesetVersion: redFlag.rulesetVersion,
145
+ });
146
+ return { kind: "escalated", cannedResponse: panelOutcome.cannedResponse };
147
+ }
148
+ if (panelOutcome.outcome === "refuse") {
149
+ // Content-policy refusal: NO finding
150
+ await auditLog.append({
151
+ tIso: now,
152
+ event: "refuse",
153
+ ruleId: panelOutcome.rule,
154
+ rulesetVersion: redFlag.rulesetVersion,
155
+ });
156
+ return { kind: "refused", reason: panelOutcome.reason };
157
+ }
158
+ if (panelOutcome.outcome === "accepted") {
159
+ // Accepted: assign urgency/severity, write kind="action" Finding
160
+ const urgencyFn = deps.assignUrgency ?? assignUrgencySeverity;
161
+ const { urgency, severity, confidence } = await urgencyFn(generatorSpec.client, generatorSpec.model, panelOutcome.recommendation, contextString);
162
+ // id is deterministic — re-runs with the same question overwrite the same file (sc-1-4 pattern)
163
+ const id = findingId("medical", question, "recommend-action");
164
+ const finding = {
165
+ id,
166
+ domain: "medical",
167
+ // sc-3-2: title states the recommendation DIRECTLY — NO refer-out hedging
168
+ title: panelOutcome.recommendation.slice(0, 120).trimEnd(),
169
+ kind: "action",
170
+ urgency,
171
+ severity,
172
+ // evidence contains the full recommendation text (direct; no hedging added)
173
+ evidence: [panelOutcome.recommendation],
174
+ surfacedAt: now,
175
+ // sc-3-6: confidence recorded in tags (confidence:X.XX)
176
+ tags: [`confidence:${confidence.toFixed(2)}`],
177
+ status: "open",
178
+ };
179
+ const writeFindingFn = deps.writeFindingFn ?? writeFinding;
180
+ const findingPath = await writeFindingFn(vaultDir, finding);
181
+ // IDs/enums only (NonGoal #3) — no recommendation text, no health values
182
+ await auditLog.append({ tIso: now, event: "answer" });
183
+ return { kind: "accepted", findingPath };
184
+ }
185
+ // outcome === "rejected" (no-consensus or contraindication-veto)
186
+ // Write kind="question" Finding with per-lens dissent; NO kind="action" finding (sc-3-3)
187
+ const dissentLines = Object.entries(panelOutcome.dissent)
188
+ .filter(([, text]) => text.length > 0)
189
+ .map(([lens, text]) => `[${lens}] ${text}`);
190
+ const id = findingId("medical", question, "recommend-question");
191
+ const finding = {
192
+ id,
193
+ domain: "medical",
194
+ // sc-3-3: title must contain "flagged for your review" (lowercase per contract criterion)
195
+ title: `flagged for your review — panel disagreed on: ${question.slice(0, 80).trimEnd()}`,
196
+ kind: "question",
197
+ urgency: 2,
198
+ severity: 2,
199
+ // evidence = per-lens dissent strings (sc-3-3)
200
+ evidence: dissentLines.length > 0 ? dissentLines : ["Panel could not reach consensus"],
201
+ surfacedAt: now,
202
+ tags: ["no-consensus"],
203
+ status: "open",
204
+ };
205
+ const writeFindingFn = deps.writeFindingFn ?? writeFinding;
206
+ const findingPath = await writeFindingFn(vaultDir, finding);
207
+ // IDs/enums only — no recommendation text, no health values
208
+ await auditLog.append({ tIso: now, event: "abstain" });
209
+ return { kind: "question", findingPath };
210
+ }
211
+ //# sourceMappingURL=recommend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommend.js","sourceRoot":"","sources":["../../../src/medical/recommend/recommend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Recommendation judge-panel shared types.
3
+ *
4
+ * PURE orchestration over injected fns — NO fs / NO network / NO real provider / NO FactStore.
5
+ * All execution logic lives in lenses.ts and judge-panel.ts.
6
+ */
7
+ import type { LLMClient } from "../../providers/types.js";
8
+ /** Number of parse-retry attempts per lens call (mirrors GROUNDING_PARSE_MAX_RETRIES). */
9
+ export declare const LENS_PARSE_MAX_RETRIES = 1;
10
+ /** Total LLM calls per lens per round: 1 initial + parse retries (mirrors GROUNDING_MAX_LLM_CALLS). */
11
+ export declare const LENS_MAX_LLM_CALLS: number;
12
+ /** Default maximum judge rounds before fail-closed (research §4a:192). */
13
+ export declare const MEDICAL_PANEL_MAX_ROUNDS = 3;
14
+ /**
15
+ * Worst-case LLM call budget for the full judge loop.
16
+ * Per round = 1 generateCandidate + 4 lenses × LENS_MAX_LLM_CALLS.
17
+ * Total = MEDICAL_PANEL_MAX_ROUNDS × (1 + 4 × LENS_MAX_LLM_CALLS) = 3 × 9 = 27.
18
+ */
19
+ export declare const MEDICAL_PANEL_MAX_TOTAL_CALLS: number;
20
+ /**
21
+ * Four lens names (research §4a:186-191).
22
+ * Only contraindication-checker may carry a veto.
23
+ */
24
+ export type LensName = "evidence-grader" | "contraindication-checker" | "conservative-clinician" | "optimization-lens";
25
+ /**
26
+ * Verdict returned by each lens.
27
+ * Only the contraindication-checker populates veto; other lenses always have veto===false.
28
+ */
29
+ export interface LensVerdict {
30
+ verdict: "approve" | "reject";
31
+ feedback: string;
32
+ /** True only when contraindication-checker finds an absolute contraindication. */
33
+ veto?: boolean;
34
+ }
35
+ /** An injected LLM client + model identifier for a single lens. */
36
+ export interface LensSpec {
37
+ client: LLMClient;
38
+ model: string;
39
+ }
40
+ /** One LensSpec per lens — each may use a different model (sprint 3 wires tier-policy). */
41
+ export interface LensClients {
42
+ evidenceGrader: LensSpec;
43
+ contraindicationChecker: LensSpec;
44
+ conservativeClinician: LensSpec;
45
+ optimizationLens: LensSpec;
46
+ }
47
+ /** Internal reconciliation outcome; not exported as part of the public API. */
48
+ export interface PanelDecision {
49
+ accepted: boolean;
50
+ /** Present only when accepted is false. */
51
+ reason?: "contraindication-veto" | "no-consensus";
52
+ }
53
+ /**
54
+ * Accepted recommendation: all four lenses approved (strict majority) and no veto was present.
55
+ */
56
+ export interface AcceptedOutcome {
57
+ outcome: "accepted";
58
+ accepted: true;
59
+ /** The raw candidate returned by generateCandidate — NOT a Finding (sprint 3 emits Findings). */
60
+ recommendation: string;
61
+ /** Per-lens verdict map for the winning round. */
62
+ verdicts: Record<LensName, LensVerdict>;
63
+ /** Round number in which consensus was reached (1-indexed). */
64
+ rounds: number;
65
+ }
66
+ /**
67
+ * Rejected after maxRounds — no consensus was reached.
68
+ */
69
+ export interface RejectedOutcome {
70
+ outcome: "rejected";
71
+ accepted: false;
72
+ reason: "contraindication-veto" | "no-consensus";
73
+ /** Per-lens feedback strings collected on the final round. */
74
+ dissent: Record<LensName, string>;
75
+ /** Per-lens verdict map from the final round. */
76
+ verdicts: Record<LensName, LensVerdict>;
77
+ /** Number of rounds executed before giving up. */
78
+ rounds: number;
79
+ }
80
+ /**
81
+ * Guard short-circuited the loop — red-flag matched, emergency escalation required.
82
+ */
83
+ export interface ShortCircuitOutcome {
84
+ outcome: "short-circuit";
85
+ rule: string;
86
+ cannedResponse: string;
87
+ }
88
+ /**
89
+ * Guard refused the request — policy-based refusal (not an emergency).
90
+ */
91
+ export interface RefuseOutcome {
92
+ outcome: "refuse";
93
+ rule: string;
94
+ reason: string;
95
+ }
96
+ /** Discriminated union of all possible outcomes from runJudgeLoop. */
97
+ export type PanelOutcome = AcceptedOutcome | RejectedOutcome | ShortCircuitOutcome | RefuseOutcome;
98
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/medical/recommend/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAI1D,0FAA0F;AAC1F,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,uGAAuG;AACvG,eAAO,MAAM,kBAAkB,QAA6B,CAAC;AAE7D,0EAA0E;AAC1E,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,QACe,CAAC;AAI1D;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAChB,iBAAiB,GACjB,0BAA0B,GAC1B,wBAAwB,GACxB,mBAAmB,CAAC;AAIxB;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAID,mEAAmE;AACnE,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,2FAA2F;AAC3F,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,QAAQ,CAAC;IACzB,uBAAuB,EAAE,QAAQ,CAAC;IAClC,qBAAqB,EAAE,QAAQ,CAAC;IAChC,gBAAgB,EAAE,QAAQ,CAAC;CAC5B;AAID,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,uBAAuB,GAAG,cAAc,CAAC;CACnD;AAID;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,IAAI,CAAC;IACf,iGAAiG;IACjG,cAAc,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACxC,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC;IAChB,MAAM,EAAE,uBAAuB,GAAG,cAAc,CAAC;IACjD,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClC,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACxC,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,QAAQ,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sEAAsE;AACtE,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,eAAe,GACf,mBAAmB,GACnB,aAAa,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Recommendation judge-panel shared types.
3
+ *
4
+ * PURE orchestration over injected fns — NO fs / NO network / NO real provider / NO FactStore.
5
+ * All execution logic lives in lenses.ts and judge-panel.ts.
6
+ */
7
+ // ── Budget constants ──────────────────────────────────────────────────
8
+ /** Number of parse-retry attempts per lens call (mirrors GROUNDING_PARSE_MAX_RETRIES). */
9
+ export const LENS_PARSE_MAX_RETRIES = 1;
10
+ /** Total LLM calls per lens per round: 1 initial + parse retries (mirrors GROUNDING_MAX_LLM_CALLS). */
11
+ export const LENS_MAX_LLM_CALLS = 1 + LENS_PARSE_MAX_RETRIES; // = 2
12
+ /** Default maximum judge rounds before fail-closed (research §4a:192). */
13
+ export const MEDICAL_PANEL_MAX_ROUNDS = 3;
14
+ /**
15
+ * Worst-case LLM call budget for the full judge loop.
16
+ * Per round = 1 generateCandidate + 4 lenses × LENS_MAX_LLM_CALLS.
17
+ * Total = MEDICAL_PANEL_MAX_ROUNDS × (1 + 4 × LENS_MAX_LLM_CALLS) = 3 × 9 = 27.
18
+ */
19
+ export const MEDICAL_PANEL_MAX_TOTAL_CALLS = MEDICAL_PANEL_MAX_ROUNDS * (1 + 4 * LENS_MAX_LLM_CALLS); // = 27
20
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/medical/recommend/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,yEAAyE;AAEzE,0FAA0F;AAC1F,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC,uGAAuG;AACvG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,sBAAsB,CAAC,CAAC,MAAM;AAEpE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C;;;;GAIG;AACH,MAAM,CAAC,MAAM,6BAA6B,GACxC,wBAAwB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,OAAO"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Urgency/severity/confidence assigner — one bounded LLM call with a NEVER-throwing validator.
3
+ *
4
+ * PURE: NO fs / NO FactStore / NO network beyond the injected LLMClient.
5
+ * All timestamps are injected; wall clock is read ONLY at the CLI boundary.
6
+ *
7
+ * By design OUTSIDE the ADR-3 deterministic-numerics boundary:
8
+ * urgency/severity/confidence are INTERPRETATION, not arithmetic (contract assumption 3).
9
+ *
10
+ * Most similar: src/medical/recommend/lenses.ts:65-113 (validateLensVerdict pattern).
11
+ */
12
+ import type { LLMClient } from "../../providers/types.js";
13
+ export interface UrgencyResult {
14
+ /** Urgency level 1..5 (5 = most urgent). */
15
+ urgency: number;
16
+ /** Severity level 1..5 (5 = most severe). */
17
+ severity: number;
18
+ /** Confidence in the assessment (0..1). */
19
+ confidence: number;
20
+ }
21
+ /**
22
+ * Assign urgency, severity, and confidence via ONE bounded LLM call.
23
+ * NEVER throws — returns DEFAULT_URGENCY on any error or parse failure.
24
+ */
25
+ export declare function assignUrgencySeverity(llm: LLMClient, model: string, candidate: string, context: string): Promise<UrgencyResult>;
26
+ //# sourceMappingURL=urgency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urgency.d.ts","sourceRoot":"","sources":["../../../src/medical/recommend/urgency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAgB1D,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;CACpB;AAwFD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,CAqBxB"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Urgency/severity/confidence assigner — one bounded LLM call with a NEVER-throwing validator.
3
+ *
4
+ * PURE: NO fs / NO FactStore / NO network beyond the injected LLMClient.
5
+ * All timestamps are injected; wall clock is read ONLY at the CLI boundary.
6
+ *
7
+ * By design OUTSIDE the ADR-3 deterministic-numerics boundary:
8
+ * urgency/severity/confidence are INTERPRETATION, not arithmetic (contract assumption 3).
9
+ *
10
+ * Most similar: src/medical/recommend/lenses.ts:65-113 (validateLensVerdict pattern).
11
+ */
12
+ import { z } from "zod";
13
+ // -- Schema --------------------------------------------------------------
14
+ /**
15
+ * Raw schema for the urgency response.
16
+ * Values are parsed as raw numbers; clamping is applied after validation.
17
+ */
18
+ const UrgencyResponseSchema = z.object({
19
+ urgency: z.number(),
20
+ severity: z.number(),
21
+ confidence: z.number(),
22
+ });
23
+ // -- Conservative defaults -----------------------------------------------
24
+ /**
25
+ * Conservative default returned on parse failure — never throws.
26
+ * Represents moderate urgency/severity; confidence reflects uncertainty.
27
+ */
28
+ const DEFAULT_URGENCY = { urgency: 3, severity: 3, confidence: 0.5 };
29
+ // -- Clamp helper --------------------------------------------------------
30
+ /** Clamp a number to the integer range [1, 5]. */
31
+ function clampInt(n) {
32
+ return Math.min(5, Math.max(1, Math.round(n)));
33
+ }
34
+ // -- validateUrgencyResponse (NEVER throws) ------------------------------
35
+ /**
36
+ * Four-tier JSON extraction strategy — mirrors validateLensVerdict (lenses.ts:65-113).
37
+ * Returns null on any failure so the caller can fall back to DEFAULT_URGENCY.
38
+ */
39
+ function validateUrgencyResponse(rawText) {
40
+ let parsed;
41
+ // Tier 1: direct parse
42
+ try {
43
+ parsed = JSON.parse(rawText.trim());
44
+ }
45
+ catch {
46
+ // Tier 2: fenced JSON block
47
+ const fenceMatch = /```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/.exec(rawText);
48
+ if (fenceMatch) {
49
+ try {
50
+ parsed = JSON.parse(fenceMatch[1].trim());
51
+ }
52
+ catch {
53
+ // Fall through to tier 3
54
+ }
55
+ }
56
+ // Tier 3: first { ... } block
57
+ if (!parsed) {
58
+ const braceStart = rawText.indexOf("{");
59
+ const braceEnd = rawText.lastIndexOf("}");
60
+ if (braceStart !== -1 && braceEnd > braceStart) {
61
+ try {
62
+ parsed = JSON.parse(rawText.slice(braceStart, braceEnd + 1));
63
+ }
64
+ catch {
65
+ // Tier 4: fail
66
+ return null;
67
+ }
68
+ }
69
+ else {
70
+ return null;
71
+ }
72
+ }
73
+ }
74
+ const result = UrgencyResponseSchema.safeParse(parsed);
75
+ if (!result.success) {
76
+ return null;
77
+ }
78
+ return {
79
+ urgency: clampInt(result.data.urgency),
80
+ severity: clampInt(result.data.severity),
81
+ confidence: result.data.confidence,
82
+ };
83
+ }
84
+ // -- System prompt -------------------------------------------------------
85
+ const URGENCY_SYSTEM_PROMPT = `You are a medical urgency assessor. Given a candidate recommendation and patient context, assess the urgency, severity, and your confidence in the assessment.
86
+
87
+ Output ONLY a JSON object with EXACTLY this shape:
88
+ {
89
+ "urgency": <integer 1..5>,
90
+ "severity": <integer 1..5>,
91
+ "confidence": <float 0..1>
92
+ }
93
+
94
+ Rules:
95
+ - urgency: how soon action is needed (1=routine/months, 5=immediate/today)
96
+ - severity: impact on health if not addressed (1=minimal, 5=critical)
97
+ - confidence: your confidence in this assessment (0=uncertain, 1=certain)
98
+ - Output the JSON object and nothing else.`;
99
+ // -- assignUrgencySeverity -----------------------------------------------
100
+ /**
101
+ * Assign urgency, severity, and confidence via ONE bounded LLM call.
102
+ * NEVER throws — returns DEFAULT_URGENCY on any error or parse failure.
103
+ */
104
+ export async function assignUrgencySeverity(llm, model, candidate, context) {
105
+ const userContent = `Candidate recommendation:\n${candidate}\n\nPatient context:\n${context}`;
106
+ let rawText;
107
+ try {
108
+ const response = await llm.chat({
109
+ model,
110
+ system: URGENCY_SYSTEM_PROMPT,
111
+ messages: [{ role: "user", content: userContent }],
112
+ jsonObjectMode: true,
113
+ });
114
+ rawText = response.text;
115
+ }
116
+ catch {
117
+ // Transport failure — conservative default
118
+ return DEFAULT_URGENCY;
119
+ }
120
+ const result = validateUrgencyResponse(rawText);
121
+ // bober: fall back to DEFAULT_URGENCY on parse failure; intentional conservative default.
122
+ return result ?? DEFAULT_URGENCY;
123
+ }
124
+ //# sourceMappingURL=urgency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urgency.js","sourceRoot":"","sources":["../../../src/medical/recommend/urgency.ts"],"names":[],"mappings":"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"}