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,126 @@
1
+ import type { EvalStrategy } from "../config/schema.js";
2
+ import type { SecurityFinding } from "./security-audit-types.js";
3
+ /**
4
+ * Deterministic scanner pre-filter (arch-20260712 ADR-4).
5
+ *
6
+ * Runs each `config.security.scanners` command under the shared audit
7
+ * AbortSignal, parses known scanner output (slither, semgrep) into
8
+ * SecurityFinding[] priors, and degrades unknown scanners to a bounded
9
+ * raw-text excerpt finding. Every scanner is isolated: a missing binary,
10
+ * nonzero exit, or thrown error yields `[]` for that scanner only — the
11
+ * pre-filter itself NEVER rejects (runSecurityAudit's Promise.race time-box
12
+ * must be able to trust that this always settles).
13
+ */
14
+ /** The minimal result shape runScannerPreFilter needs from a child process. */
15
+ export interface ScannerRunResult {
16
+ exitCode: number | undefined;
17
+ stdout: string;
18
+ failed: boolean;
19
+ }
20
+ /**
21
+ * Runs one scanner command and resolves with its outcome. NEVER expected to
22
+ * reject in production (the default implementation uses execa's `reject:
23
+ * false`); the caller wraps every invocation in try/catch anyway as a
24
+ * defensive backstop (mirrors src/fleet/runner.ts's "reject:false plus
25
+ * try/catch" belt-and-suspenders pattern).
26
+ */
27
+ export type ScannerRunner = (cmd: string, args: string[], opts: {
28
+ cwd: string;
29
+ signal: AbortSignal;
30
+ }) => Promise<ScannerRunResult>;
31
+ /**
32
+ * Parse slither `--json` output into SecurityFinding[].
33
+ *
34
+ * Real shape: `{ success, error, results: { detectors: [...] } }`. Each
35
+ * detector: `{ check, impact, confidence, description, elements: [{ type,
36
+ * name, source_mapping: { filename_relative, filename_absolute, lines[],
37
+ * starting_column } }] }`.
38
+ *
39
+ * SecurityFinding has no top-level severity field (ReviewFinding locks
40
+ * description + evidence[]) — the impact bucket is encoded as a `[High]`
41
+ * style prefix on `description`, and `source: "slither"` marks provenance.
42
+ *
43
+ * Defensive narrowing at every level (Pattern A / medline-source.ts style):
44
+ * any structural mismatch returns `[]` rather than throwing. Accepts a raw
45
+ * (non-object) value too — e.g. a truncated JSON string passed directly —
46
+ * so callers never need to guard before calling this.
47
+ */
48
+ export declare function parseSlitherOutput(json: unknown): SecurityFinding[];
49
+ /**
50
+ * Parse semgrep `--json` output into SecurityFinding[].
51
+ *
52
+ * Real shape: `{ results: [...], errors: [], paths: {...} }`. Each result:
53
+ * `{ check_id, path, start: { line, col }, end: {...}, extra: { severity,
54
+ * message, lines } }`.
55
+ *
56
+ * Same severity-in-description convention as the slither parser
57
+ * (`[ERROR]`/`[WARNING]`/`[INFO]` prefix + `source: "semgrep"`); same
58
+ * defensive narrowing (malformed input → `[]`, never throws).
59
+ */
60
+ export declare function parseSemgrepOutput(json: unknown): SecurityFinding[];
61
+ /**
62
+ * Parse `npm audit --json` output into SecurityFinding[].
63
+ *
64
+ * v7+ shape: `{ vulnerabilities: { <pkgName>: { name, severity, via: [...],
65
+ * range, nodes: [...], fixAvailable } }, metadata: {...} }`. `via` entries
66
+ * mix plain advisory-source strings and objects `{ title, url, severity }`
67
+ * in the same array — real npm output does this.
68
+ *
69
+ * v6 fallback shape: `{ advisories: { <id>: { module_name, severity, title,
70
+ * url } } }`. Both shapes are supported (whichever key is a well-formed
71
+ * object wins); neither present, or malformed -> [].
72
+ *
73
+ * All findings map to `vulnClass: "supply-chain"` (sc-7-2). Defensive
74
+ * narrowing at every level (Pattern A) — never throws.
75
+ */
76
+ export declare function parseNpmAuditOutput(json: unknown): SecurityFinding[];
77
+ /**
78
+ * Parse `osv-scanner --format json` output into SecurityFinding[].
79
+ *
80
+ * Real shape: `{ results: [ { source: { path, type }, packages: [ {
81
+ * package: { name, ecosystem, version }, vulnerabilities: [ { id, summary,
82
+ * severity } ] } ] } ] }`. Every finding maps to `vulnClass: "supply-chain"`
83
+ * (sc-7-2). Defensive narrowing at every level (Pattern A) — never throws.
84
+ */
85
+ export declare function parseOsvOutput(json: unknown): SecurityFinding[];
86
+ /**
87
+ * Parse `gitleaks --report-format json` output into SecurityFinding[]. Its
88
+ * report is a TOP-LEVEL ARRAY (unlike npm-audit/osv-scanner's object root)
89
+ * of `{ Description, File, StartLine, EndLine, RuleID, Secret, Match,
90
+ * Commit }`.
91
+ *
92
+ * The raw `Secret` field is a live credential — it is NEVER echoed into a
93
+ * finding; `Match` (or a redacted placeholder) is used for the evidence
94
+ * snippet instead. Every finding maps to `vulnClass: "secret-handling"`
95
+ * (sc-7-2). Defensive narrowing at every level (Pattern A) — never throws.
96
+ */
97
+ export declare function parseGitleaksOutput(json: unknown): SecurityFinding[];
98
+ /**
99
+ * Whether a configured scanner requires network access to run (hits a
100
+ * remote registry or vulnerability database). Used by the supply-chain axis
101
+ * (sprint 7, security-auditor-agent.ts) to gate network-capable scanner
102
+ * kinds behind `config.security.egress.onlineResearch` — `gitleaks` is a
103
+ * purely local secret scan and is NOT gated.
104
+ */
105
+ export declare function isNetworkScanner(scanner: EvalStrategy): boolean;
106
+ export interface ScannerPreFilterInput {
107
+ scanners: EvalStrategy[];
108
+ projectRoot: string;
109
+ signal: AbortSignal;
110
+ /** Injected runner — default wraps execa. Tests inject a fake for CI-offline coverage. */
111
+ runner?: ScannerRunner;
112
+ }
113
+ /**
114
+ * Run every configured scanner and return the combined SecurityFinding
115
+ * priors. `scanners: []` is a pure no-op — no runner is invoked and zero
116
+ * child processes are spawned (ADR-4, sc-5-4).
117
+ *
118
+ * Per-scanner isolation: each scanner is wrapped in its own try/catch and
119
+ * contributes `[]` on any failure (missing binary, nonzero exit, thrown
120
+ * error) without affecting the others (sc-5-2). The whole function NEVER
121
+ * rejects — even when the shared AbortSignal fires mid-scan, the killed
122
+ * scanner simply contributes `[]` while already-finished scanners' findings
123
+ * are preserved (sc-5-3).
124
+ */
125
+ export declare function runScannerPreFilter(input: ScannerPreFilterInput): Promise<SecurityFinding[]>;
126
+ //# sourceMappingURL=security-scanners.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-scanners.d.ts","sourceRoot":"","sources":["../../src/orchestrator/security-scanners.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAa,MAAM,2BAA2B,CAAC;AAI5E;;;;;;;;;;GAUG;AAIH,+EAA+E;AAC/E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,KACvC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAuF/B;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,EAAE,CAyDnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,EAAE,CAoCnE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,EAAE,CAgEpE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,EAAE,CA0C/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,EAAE,CA0BpE;AAqGD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAG/D;AAID,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAUlG"}
@@ -0,0 +1,501 @@
1
+ import { execa } from "execa";
2
+ import { ALL_VULN_CLASSES } from "./stack-knowledge.js";
3
+ import { logger } from "../utils/logger.js";
4
+ // bober: 10 MB cap on captured stdout — a pathological scanner (infinite
5
+ // output loop, huge repo dump) cannot exhaust memory or blow the prompt.
6
+ const MAX_SCANNER_BUFFER = 1024 * 1024 * 10;
7
+ /**
8
+ * Default runner: wraps execa. `cancelSignal` ties the child's lifetime to
9
+ * the shared audit AbortSignal; `killSignal: "SIGKILL"` makes both a normal
10
+ * `.kill()` and a cancelSignal-triggered termination send SIGKILL directly
11
+ * (no SIGTERM grace period) so an aborted scan cannot linger (sc-5-3).
12
+ * `reject: false` means a missing binary (ENOENT) or nonzero exit resolves
13
+ * normally instead of throwing (sc-5-2).
14
+ */
15
+ const defaultRunner = async (cmd, args, opts) => {
16
+ const result = await execa(cmd, args, {
17
+ cwd: opts.cwd,
18
+ cancelSignal: opts.signal,
19
+ killSignal: "SIGKILL",
20
+ reject: false,
21
+ all: true,
22
+ maxBuffer: MAX_SCANNER_BUFFER,
23
+ env: { ...process.env, FORCE_COLOR: "0" },
24
+ });
25
+ return {
26
+ exitCode: result.exitCode,
27
+ stdout: result.all ?? result.stdout ?? "",
28
+ failed: result.failed,
29
+ };
30
+ };
31
+ // ── vulnClass heuristic (shared by both parsers) ─────────────────────
32
+ function isVulnClass(value) {
33
+ return ALL_VULN_CLASSES.includes(value);
34
+ }
35
+ /**
36
+ * Heuristically infer a VulnClass from a scanner check/rule id, by matching
37
+ * well-known keyword tokens. Returns undefined (never a guess) when nothing
38
+ * matches — per generatorNotes[1], forcing a wrong class is worse than
39
+ * leaving vulnClass unset. e.g. slither's "reentrancy-eth" has no clean
40
+ * VulnClass home and correctly stays undefined; "tx-origin" cleanly maps to
41
+ * authn-authz (tx.origin-based authorization is exactly that bug class).
42
+ *
43
+ * bober: substring/keyword matching, not a per-scanner mapping table — good
44
+ * enough to ground the advisory priors; if this proves noisy, replace with
45
+ * an explicit per-check-id map keyed by scanner name.
46
+ */
47
+ function inferVulnClass(checkId) {
48
+ const id = checkId.toLowerCase();
49
+ const candidate = /sql-?injection|sqli|command-injection|code-injection|\binjection\b/.test(id)
50
+ ? "injection"
51
+ : /\bxss\b|cross-site-scripting/.test(id)
52
+ ? "xss"
53
+ : /path-traversal|directory-traversal/.test(id)
54
+ ? "path-traversal"
55
+ : /hardcoded|secret|credential|api-key/.test(id)
56
+ ? "secret-handling"
57
+ : /tx-origin|access-control|\bauth\b|authn|authz|authentication|authorization|privilege/.test(id)
58
+ ? "authn-authz"
59
+ : /unvalidated|input-validation|missing-validation|sanitiz/.test(id)
60
+ ? "input-validation"
61
+ : /\brace\b|toctou|time-of-check/.test(id)
62
+ ? "race-condition"
63
+ : /\bssrf\b|server-side-request/.test(id)
64
+ ? "ssrf"
65
+ : /weak-random|insecure-random|predictable-random/.test(id)
66
+ ? "insecure-randomness"
67
+ : /\bmd5\b|\bsha1\b|weak-crypto|weak-hash|weak-cipher/.test(id)
68
+ ? "crypto-weakness"
69
+ : /deserial|unmarshal|pickle/.test(id)
70
+ ? "deserialization"
71
+ : /\bidor\b|\bbola\b|broken-object-level/.test(id)
72
+ ? "idor-bola"
73
+ : /\bdos\b|denial-of-service|resource-exhaustion/.test(id)
74
+ ? "denial-of-service"
75
+ : undefined;
76
+ return candidate !== undefined && isVulnClass(candidate) ? candidate : undefined;
77
+ }
78
+ // ── Pure parsers (unknown → SecurityFinding[]; never throw) ──────────
79
+ /**
80
+ * Parse slither `--json` output into SecurityFinding[].
81
+ *
82
+ * Real shape: `{ success, error, results: { detectors: [...] } }`. Each
83
+ * detector: `{ check, impact, confidence, description, elements: [{ type,
84
+ * name, source_mapping: { filename_relative, filename_absolute, lines[],
85
+ * starting_column } }] }`.
86
+ *
87
+ * SecurityFinding has no top-level severity field (ReviewFinding locks
88
+ * description + evidence[]) — the impact bucket is encoded as a `[High]`
89
+ * style prefix on `description`, and `source: "slither"` marks provenance.
90
+ *
91
+ * Defensive narrowing at every level (Pattern A / medline-source.ts style):
92
+ * any structural mismatch returns `[]` rather than throwing. Accepts a raw
93
+ * (non-object) value too — e.g. a truncated JSON string passed directly —
94
+ * so callers never need to guard before calling this.
95
+ */
96
+ export function parseSlitherOutput(json) {
97
+ if (!json || typeof json !== "object" || Array.isArray(json))
98
+ return [];
99
+ const root = json;
100
+ const results = root.results;
101
+ if (!results || typeof results !== "object" || Array.isArray(results))
102
+ return [];
103
+ const detectors = results.detectors;
104
+ if (!Array.isArray(detectors))
105
+ return [];
106
+ const findings = [];
107
+ for (const detector of detectors) {
108
+ if (!detector || typeof detector !== "object")
109
+ continue;
110
+ const d = detector;
111
+ const check = typeof d.check === "string" ? d.check : "unknown-check";
112
+ const impact = typeof d.impact === "string" ? d.impact : "Informational";
113
+ const description = typeof d.description === "string" ? d.description.trim() : check;
114
+ const elements = Array.isArray(d.elements) ? d.elements : [];
115
+ const evidence = [];
116
+ for (const el of elements) {
117
+ if (!el || typeof el !== "object")
118
+ continue;
119
+ const e = el;
120
+ const sourceMapping = e.source_mapping;
121
+ if (!sourceMapping || typeof sourceMapping !== "object")
122
+ continue;
123
+ const sm = sourceMapping;
124
+ const path = typeof sm.filename_relative === "string"
125
+ ? sm.filename_relative
126
+ : typeof sm.filename_absolute === "string"
127
+ ? sm.filename_absolute
128
+ : "unknown";
129
+ const lines = Array.isArray(sm.lines) ? sm.lines : [];
130
+ const line = typeof lines[0] === "number" ? lines[0] : 0;
131
+ const elName = typeof e.name === "string" ? e.name : "";
132
+ const elType = typeof e.type === "string" ? e.type : "";
133
+ const snippet = [elType, elName].filter(Boolean).join(" ") || check;
134
+ evidence.push({ path, line, snippet });
135
+ }
136
+ findings.push({
137
+ description: `[${impact}] ${check}: ${description}`,
138
+ evidence,
139
+ source: "slither",
140
+ ...(inferVulnClass(check) !== undefined ? { vulnClass: inferVulnClass(check) } : {}),
141
+ });
142
+ }
143
+ return findings;
144
+ }
145
+ /**
146
+ * Parse semgrep `--json` output into SecurityFinding[].
147
+ *
148
+ * Real shape: `{ results: [...], errors: [], paths: {...} }`. Each result:
149
+ * `{ check_id, path, start: { line, col }, end: {...}, extra: { severity,
150
+ * message, lines } }`.
151
+ *
152
+ * Same severity-in-description convention as the slither parser
153
+ * (`[ERROR]`/`[WARNING]`/`[INFO]` prefix + `source: "semgrep"`); same
154
+ * defensive narrowing (malformed input → `[]`, never throws).
155
+ */
156
+ export function parseSemgrepOutput(json) {
157
+ if (!json || typeof json !== "object" || Array.isArray(json))
158
+ return [];
159
+ const root = json;
160
+ const results = root.results;
161
+ if (!Array.isArray(results))
162
+ return [];
163
+ const findings = [];
164
+ for (const r of results) {
165
+ if (!r || typeof r !== "object")
166
+ continue;
167
+ const item = r;
168
+ const checkId = typeof item.check_id === "string" ? item.check_id : "unknown-rule";
169
+ const path = typeof item.path === "string" ? item.path : "unknown";
170
+ const start = item.start;
171
+ const line = start && typeof start === "object" && typeof start.line === "number"
172
+ ? start.line
173
+ : 0;
174
+ const extra = item.extra && typeof item.extra === "object" ? item.extra : {};
175
+ const severity = typeof extra.severity === "string" ? extra.severity : "INFO";
176
+ const message = typeof extra.message === "string" ? extra.message.trim() : checkId;
177
+ const snippet = typeof extra.lines === "string" ? extra.lines : "";
178
+ findings.push({
179
+ description: `[${severity}] ${checkId}: ${message}`,
180
+ evidence: [{ path, line, snippet }],
181
+ source: "semgrep",
182
+ ...(inferVulnClass(checkId) !== undefined ? { vulnClass: inferVulnClass(checkId) } : {}),
183
+ });
184
+ }
185
+ return findings;
186
+ }
187
+ /**
188
+ * Parse `npm audit --json` output into SecurityFinding[].
189
+ *
190
+ * v7+ shape: `{ vulnerabilities: { <pkgName>: { name, severity, via: [...],
191
+ * range, nodes: [...], fixAvailable } }, metadata: {...} }`. `via` entries
192
+ * mix plain advisory-source strings and objects `{ title, url, severity }`
193
+ * in the same array — real npm output does this.
194
+ *
195
+ * v6 fallback shape: `{ advisories: { <id>: { module_name, severity, title,
196
+ * url } } }`. Both shapes are supported (whichever key is a well-formed
197
+ * object wins); neither present, or malformed -> [].
198
+ *
199
+ * All findings map to `vulnClass: "supply-chain"` (sc-7-2). Defensive
200
+ * narrowing at every level (Pattern A) — never throws.
201
+ */
202
+ export function parseNpmAuditOutput(json) {
203
+ if (!json || typeof json !== "object" || Array.isArray(json))
204
+ return [];
205
+ const root = json;
206
+ const vulnerabilities = root.vulnerabilities;
207
+ if (vulnerabilities && typeof vulnerabilities === "object" && !Array.isArray(vulnerabilities)) {
208
+ const findings = [];
209
+ for (const [pkgName, raw] of Object.entries(vulnerabilities)) {
210
+ if (!raw || typeof raw !== "object")
211
+ continue;
212
+ const v = raw;
213
+ const name = typeof v.name === "string" ? v.name : pkgName;
214
+ const severity = typeof v.severity === "string" ? v.severity : "unknown";
215
+ const range = typeof v.range === "string" ? v.range : "";
216
+ const via = Array.isArray(v.via) ? v.via : [];
217
+ const titles = via
218
+ .map((entry) => {
219
+ if (typeof entry === "string")
220
+ return entry;
221
+ if (entry && typeof entry === "object" && typeof entry.title === "string") {
222
+ return entry.title;
223
+ }
224
+ return undefined;
225
+ })
226
+ .filter((t) => typeof t === "string");
227
+ const summary = titles.length > 0 ? titles.join("; ") : `vulnerable range ${range || "unknown"}`;
228
+ const nodes = Array.isArray(v.nodes)
229
+ ? v.nodes.filter((n) => typeof n === "string")
230
+ : [];
231
+ const path = nodes[0] ?? "package.json";
232
+ findings.push({
233
+ description: `[${severity}] ${name}: ${summary}`,
234
+ evidence: [{ path, line: 0, snippet: range || name }],
235
+ source: "npm-audit",
236
+ vulnClass: "supply-chain",
237
+ });
238
+ }
239
+ return findings;
240
+ }
241
+ const advisories = root.advisories;
242
+ if (advisories && typeof advisories === "object" && !Array.isArray(advisories)) {
243
+ const findings = [];
244
+ for (const raw of Object.values(advisories)) {
245
+ if (!raw || typeof raw !== "object")
246
+ continue;
247
+ const a = raw;
248
+ const name = typeof a.module_name === "string" ? a.module_name : "unknown-package";
249
+ const severity = typeof a.severity === "string" ? a.severity : "unknown";
250
+ const title = typeof a.title === "string" ? a.title : "vulnerability";
251
+ findings.push({
252
+ description: `[${severity}] ${name}: ${title}`,
253
+ evidence: [{ path: "package.json", line: 0, snippet: name }],
254
+ source: "npm-audit",
255
+ vulnClass: "supply-chain",
256
+ });
257
+ }
258
+ return findings;
259
+ }
260
+ return [];
261
+ }
262
+ /**
263
+ * Parse `osv-scanner --format json` output into SecurityFinding[].
264
+ *
265
+ * Real shape: `{ results: [ { source: { path, type }, packages: [ {
266
+ * package: { name, ecosystem, version }, vulnerabilities: [ { id, summary,
267
+ * severity } ] } ] } ] }`. Every finding maps to `vulnClass: "supply-chain"`
268
+ * (sc-7-2). Defensive narrowing at every level (Pattern A) — never throws.
269
+ */
270
+ export function parseOsvOutput(json) {
271
+ if (!json || typeof json !== "object" || Array.isArray(json))
272
+ return [];
273
+ const root = json;
274
+ const results = root.results;
275
+ if (!Array.isArray(results))
276
+ return [];
277
+ const findings = [];
278
+ for (const result of results) {
279
+ if (!result || typeof result !== "object")
280
+ continue;
281
+ const r = result;
282
+ const source = r.source && typeof r.source === "object" ? r.source : {};
283
+ const path = typeof source.path === "string" ? source.path : "unknown";
284
+ const packages = Array.isArray(r.packages) ? r.packages : [];
285
+ for (const pkg of packages) {
286
+ if (!pkg || typeof pkg !== "object")
287
+ continue;
288
+ const p = pkg;
289
+ const pkgInfo = p.package && typeof p.package === "object" ? p.package : {};
290
+ const pkgName = typeof pkgInfo.name === "string" ? pkgInfo.name : "unknown-package";
291
+ const vulns = Array.isArray(p.vulnerabilities) ? p.vulnerabilities : [];
292
+ for (const vuln of vulns) {
293
+ if (!vuln || typeof vuln !== "object")
294
+ continue;
295
+ const vv = vuln;
296
+ const id = typeof vv.id === "string" ? vv.id : "unknown-id";
297
+ const summary = typeof vv.summary === "string" ? vv.summary : "no summary";
298
+ findings.push({
299
+ description: `[${id}] ${pkgName}: ${summary}`,
300
+ evidence: [{ path, line: 0, snippet: pkgName }],
301
+ source: "osv-scanner",
302
+ vulnClass: "supply-chain",
303
+ });
304
+ }
305
+ }
306
+ }
307
+ return findings;
308
+ }
309
+ /**
310
+ * Parse `gitleaks --report-format json` output into SecurityFinding[]. Its
311
+ * report is a TOP-LEVEL ARRAY (unlike npm-audit/osv-scanner's object root)
312
+ * of `{ Description, File, StartLine, EndLine, RuleID, Secret, Match,
313
+ * Commit }`.
314
+ *
315
+ * The raw `Secret` field is a live credential — it is NEVER echoed into a
316
+ * finding; `Match` (or a redacted placeholder) is used for the evidence
317
+ * snippet instead. Every finding maps to `vulnClass: "secret-handling"`
318
+ * (sc-7-2). Defensive narrowing at every level (Pattern A) — never throws.
319
+ */
320
+ export function parseGitleaksOutput(json) {
321
+ if (!Array.isArray(json))
322
+ return [];
323
+ const findings = [];
324
+ for (const item of json) {
325
+ if (!item || typeof item !== "object")
326
+ continue;
327
+ const g = item;
328
+ const description = typeof g.Description === "string" ? g.Description : "Secret detected";
329
+ const ruleId = typeof g.RuleID === "string" ? g.RuleID : "unknown-rule";
330
+ const path = typeof g.File === "string" ? g.File : "unknown";
331
+ const line = typeof g.StartLine === "number" ? g.StartLine : 0;
332
+ // Never the raw `Secret` — `Match` is the closest thing to a redacted
333
+ // excerpt gitleaks provides; fall back to a placeholder if absent.
334
+ const snippet = typeof g.Match === "string" ? g.Match : "(redacted)";
335
+ findings.push({
336
+ description: `[${ruleId}] ${description}`,
337
+ evidence: [{ path, line, snippet }],
338
+ source: "gitleaks",
339
+ vulnClass: "secret-handling",
340
+ });
341
+ }
342
+ return findings;
343
+ }
344
+ /**
345
+ * Fallback for unrecognized scanners: a single finding carrying a bounded
346
+ * excerpt of the raw stdout, so an unmapped tool still contributes SOME
347
+ * ground truth to the auditor prompt instead of being silently dropped.
348
+ * Truncated to ~2000 chars (generatorNotes[2]) to keep the prompt bounded.
349
+ * Returns `[]` for blank output — no point manufacturing an empty finding.
350
+ */
351
+ function rawTextFallback(name, output) {
352
+ const trimmed = output.trim();
353
+ if (!trimmed)
354
+ return [];
355
+ const excerpt = trimmed.length > 2000 ? `${trimmed.slice(0, 2000)}…` : trimmed;
356
+ return [
357
+ {
358
+ description: `Raw output from scanner "${name}" (no dedicated parser; showing excerpt)`,
359
+ evidence: [{ path: "unknown", line: 0, snippet: excerpt }],
360
+ source: name,
361
+ },
362
+ ];
363
+ }
364
+ /**
365
+ * Name/command-based parser selection (sc-5-4, widened sc-7-2): a
366
+ * "slither"/"semgrep"/"npm audit"/"npm-audit"/"osv-scanner"/"gitleaks"
367
+ * substring anywhere in the strategy's type/label/command selects the
368
+ * matching parser; anything else falls back to raw-text excerpting. The
369
+ * longer "osv-scanner" literal is checked before the bare "osv" substring
370
+ * so a command like `osv-scanner --format json` matches unambiguously.
371
+ */
372
+ function detectScannerKind(scanner) {
373
+ const haystack = [scanner.type, scanner.label, scanner.command]
374
+ .filter((v) => typeof v === "string")
375
+ .join(" ")
376
+ .toLowerCase();
377
+ if (haystack.includes("slither"))
378
+ return "slither";
379
+ if (haystack.includes("semgrep"))
380
+ return "semgrep";
381
+ if (haystack.includes("npm audit") || haystack.includes("npm-audit"))
382
+ return "npm-audit";
383
+ if (haystack.includes("osv-scanner") || haystack.includes("osv"))
384
+ return "osv-scanner";
385
+ if (haystack.includes("gitleaks"))
386
+ return "gitleaks";
387
+ return "unknown";
388
+ }
389
+ function parseScannerStdout(kind, label, stdout) {
390
+ if (kind === "unknown")
391
+ return rawTextFallback(label, stdout);
392
+ let json;
393
+ try {
394
+ json = JSON.parse(stdout);
395
+ }
396
+ catch {
397
+ // A scanner with a recognized kind that didn't emit valid JSON (e.g.
398
+ // --json flag omitted, or a banner printed before the payload) degrades
399
+ // to the raw-text fallback rather than silently dropping its output.
400
+ return rawTextFallback(label, stdout);
401
+ }
402
+ switch (kind) {
403
+ case "slither":
404
+ return parseSlitherOutput(json);
405
+ case "npm-audit":
406
+ return parseNpmAuditOutput(json);
407
+ case "osv-scanner":
408
+ return parseOsvOutput(json);
409
+ case "gitleaks":
410
+ return parseGitleaksOutput(json);
411
+ case "semgrep":
412
+ default:
413
+ return parseSemgrepOutput(json);
414
+ }
415
+ }
416
+ /**
417
+ * Exit-code convention for a given scanner kind (G9). Most scanners (the
418
+ * default semgrep invocation, and unknown kinds) exit 0 on a clean run and
419
+ * nonzero on an internal error — nonzero legitimately means "discard, don't
420
+ * trust the output" (`'zero-clean'`). `npm-audit`/`osv-scanner`/`gitleaks`
421
+ * invert this: their OWN convention is to exit nonzero precisely WHEN they
422
+ * find something (vulnerabilities/secrets present), so a nonzero exit with
423
+ * valid stdout must still be parsed (`'nonzero-means-findings'`). semgrep
424
+ * has an optional `--error` flag with the same nonzero-on-findings
425
+ * convention, but it stays `'zero-clean'` by default here — flipping it
426
+ * would break the existing sc-5-2 isolation test, which asserts a nonzero
427
+ * semgrep exit yields no findings.
428
+ */
429
+ function scannerExitPolicy(kind) {
430
+ return kind === "npm-audit" || kind === "osv-scanner" || kind === "gitleaks"
431
+ ? "nonzero-means-findings"
432
+ : "zero-clean";
433
+ }
434
+ /**
435
+ * Whether a configured scanner requires network access to run (hits a
436
+ * remote registry or vulnerability database). Used by the supply-chain axis
437
+ * (sprint 7, security-auditor-agent.ts) to gate network-capable scanner
438
+ * kinds behind `config.security.egress.onlineResearch` — `gitleaks` is a
439
+ * purely local secret scan and is NOT gated.
440
+ */
441
+ export function isNetworkScanner(scanner) {
442
+ const kind = detectScannerKind(scanner);
443
+ return kind === "npm-audit" || kind === "osv-scanner";
444
+ }
445
+ /**
446
+ * Run every configured scanner and return the combined SecurityFinding
447
+ * priors. `scanners: []` is a pure no-op — no runner is invoked and zero
448
+ * child processes are spawned (ADR-4, sc-5-4).
449
+ *
450
+ * Per-scanner isolation: each scanner is wrapped in its own try/catch and
451
+ * contributes `[]` on any failure (missing binary, nonzero exit, thrown
452
+ * error) without affecting the others (sc-5-2). The whole function NEVER
453
+ * rejects — even when the shared AbortSignal fires mid-scan, the killed
454
+ * scanner simply contributes `[]` while already-finished scanners' findings
455
+ * are preserved (sc-5-3).
456
+ */
457
+ export async function runScannerPreFilter(input) {
458
+ const { scanners, projectRoot, signal, runner = defaultRunner } = input;
459
+ if (scanners.length === 0)
460
+ return [];
461
+ const perScanner = await Promise.all(scanners.map((scanner) => runOneScanner(scanner, projectRoot, signal, runner)));
462
+ return perScanner.flat();
463
+ }
464
+ async function runOneScanner(scanner, projectRoot, signal, runner) {
465
+ const label = scanner.label ?? scanner.type;
466
+ const command = scanner.command;
467
+ if (!command) {
468
+ logger.debug(`[security-scanners] scanner "${label}" has no command configured — skipping`);
469
+ return [];
470
+ }
471
+ const parts = command.split(/\s+/).filter(Boolean);
472
+ const cmd = parts[0];
473
+ const args = parts.slice(1);
474
+ const kind = detectScannerKind(scanner);
475
+ try {
476
+ const result = await runner(cmd, args, { cwd: projectRoot, signal });
477
+ // G9 fix: distinguish "the process could not even be spawned"
478
+ // (exitCode undefined -- ENOENT/spawn failure) from "the process ran
479
+ // and exited nonzero". Only the former is unconditionally discarded.
480
+ const spawnFailed = result.exitCode === undefined;
481
+ if (spawnFailed) {
482
+ logger.debug(`[security-scanners] scanner "${label}" failed to spawn — no findings contributed`);
483
+ return [];
484
+ }
485
+ // Scanners whose OWN convention treats nonzero as "findings present"
486
+ // (npm-audit/osv-scanner/gitleaks — scannerExitPolicy) still have their
487
+ // stdout parsed on a nonzero-but-defined exit code; everything else
488
+ // (including semgrep's default 0-clean convention) is discarded on any
489
+ // nonzero/failed exit, exactly as before.
490
+ if (scannerExitPolicy(kind) === "zero-clean" && (result.exitCode !== 0 || result.failed)) {
491
+ logger.debug(`[security-scanners] scanner "${label}" exited ${result.exitCode} (failed=${result.failed}) — no findings contributed`);
492
+ return [];
493
+ }
494
+ return parseScannerStdout(kind, label, result.stdout);
495
+ }
496
+ catch (err) {
497
+ logger.debug(`[security-scanners] scanner "${label}" threw: ${err instanceof Error ? err.message : String(err)} — no findings contributed`);
498
+ return [];
499
+ }
500
+ }
501
+ //# sourceMappingURL=security-scanners.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-scanners.js","sourceRoot":"","sources":["../../src/orchestrator/security-scanners.ts"],"names":[],"mappings":"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"}