agent-bober 0.17.1 → 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 (1109) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/CHANGELOG.md +26 -0
  3. package/README.md +402 -10
  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/answerer.d.ts +17 -0
  48. package/dist/chat/answerer.d.ts.map +1 -0
  49. package/dist/chat/answerer.js +52 -0
  50. package/dist/chat/answerer.js.map +1 -0
  51. package/dist/chat/approval-cursor.d.ts +25 -0
  52. package/dist/chat/approval-cursor.d.ts.map +1 -0
  53. package/dist/chat/approval-cursor.js +61 -0
  54. package/dist/chat/approval-cursor.js.map +1 -0
  55. package/dist/chat/approval-reader.d.ts +11 -0
  56. package/dist/chat/approval-reader.d.ts.map +1 -0
  57. package/dist/chat/approval-reader.js +20 -0
  58. package/dist/chat/approval-reader.js.map +1 -0
  59. package/dist/chat/careful-sidecar.d.ts +15 -0
  60. package/dist/chat/careful-sidecar.d.ts.map +1 -0
  61. package/dist/chat/careful-sidecar.js +39 -0
  62. package/dist/chat/careful-sidecar.js.map +1 -0
  63. package/dist/chat/chat-session.d.ts +156 -0
  64. package/dist/chat/chat-session.d.ts.map +1 -0
  65. package/dist/chat/chat-session.js +570 -0
  66. package/dist/chat/chat-session.js.map +1 -0
  67. package/dist/chat/completion-tailer.d.ts +27 -0
  68. package/dist/chat/completion-tailer.d.ts.map +1 -0
  69. package/dist/chat/completion-tailer.js +187 -0
  70. package/dist/chat/completion-tailer.js.map +1 -0
  71. package/dist/chat/conversation-store.d.ts +22 -0
  72. package/dist/chat/conversation-store.d.ts.map +1 -0
  73. package/dist/chat/conversation-store.js +66 -0
  74. package/dist/chat/conversation-store.js.map +1 -0
  75. package/dist/chat/cursor-store.d.ts +23 -0
  76. package/dist/chat/cursor-store.d.ts.map +1 -0
  77. package/dist/chat/cursor-store.js +42 -0
  78. package/dist/chat/cursor-store.js.map +1 -0
  79. package/dist/chat/pid-sidecar.d.ts +22 -0
  80. package/dist/chat/pid-sidecar.d.ts.map +1 -0
  81. package/dist/chat/pid-sidecar.js +42 -0
  82. package/dist/chat/pid-sidecar.js.map +1 -0
  83. package/dist/chat/roster-reader.d.ts +16 -0
  84. package/dist/chat/roster-reader.d.ts.map +1 -0
  85. package/dist/chat/roster-reader.js +39 -0
  86. package/dist/chat/roster-reader.js.map +1 -0
  87. package/dist/chat/run-spawner.d.ts +71 -0
  88. package/dist/chat/run-spawner.d.ts.map +1 -0
  89. package/dist/chat/run-spawner.js +121 -0
  90. package/dist/chat/run-spawner.js.map +1 -0
  91. package/dist/chat/slash-commands.d.ts +40 -0
  92. package/dist/chat/slash-commands.d.ts.map +1 -0
  93. package/dist/chat/slash-commands.js +153 -0
  94. package/dist/chat/slash-commands.js.map +1 -0
  95. package/dist/chat/steer-cleanup.d.ts +12 -0
  96. package/dist/chat/steer-cleanup.d.ts.map +1 -0
  97. package/dist/chat/steer-cleanup.js +60 -0
  98. package/dist/chat/steer-cleanup.js.map +1 -0
  99. package/dist/chat/turn-classifier.d.ts +46 -0
  100. package/dist/chat/turn-classifier.d.ts.map +1 -0
  101. package/dist/chat/turn-classifier.js +157 -0
  102. package/dist/chat/turn-classifier.js.map +1 -0
  103. package/dist/cli/commands/blackboard.d.ts +33 -0
  104. package/dist/cli/commands/blackboard.d.ts.map +1 -0
  105. package/dist/cli/commands/blackboard.js +114 -0
  106. package/dist/cli/commands/blackboard.js.map +1 -0
  107. package/dist/cli/commands/calendar.d.ts +75 -0
  108. package/dist/cli/commands/calendar.d.ts.map +1 -0
  109. package/dist/cli/commands/calendar.js +203 -0
  110. package/dist/cli/commands/calendar.js.map +1 -0
  111. package/dist/cli/commands/chat.d.ts +13 -0
  112. package/dist/cli/commands/chat.d.ts.map +1 -0
  113. package/dist/cli/commands/chat.js +43 -0
  114. package/dist/cli/commands/chat.js.map +1 -0
  115. package/dist/cli/commands/do.d.ts +52 -0
  116. package/dist/cli/commands/do.d.ts.map +1 -0
  117. package/dist/cli/commands/do.js +216 -0
  118. package/dist/cli/commands/do.js.map +1 -0
  119. package/dist/cli/commands/evolve.d.ts +18 -0
  120. package/dist/cli/commands/evolve.d.ts.map +1 -0
  121. package/dist/cli/commands/evolve.js +72 -0
  122. package/dist/cli/commands/evolve.js.map +1 -0
  123. package/dist/cli/commands/facts.d.ts +15 -0
  124. package/dist/cli/commands/facts.d.ts.map +1 -0
  125. package/dist/cli/commands/facts.js +213 -0
  126. package/dist/cli/commands/facts.js.map +1 -0
  127. package/dist/cli/commands/hub.d.ts +29 -0
  128. package/dist/cli/commands/hub.d.ts.map +1 -0
  129. package/dist/cli/commands/hub.js +233 -0
  130. package/dist/cli/commands/hub.js.map +1 -0
  131. package/dist/cli/commands/medical.d.ts +49 -0
  132. package/dist/cli/commands/medical.d.ts.map +1 -0
  133. package/dist/cli/commands/medical.js +365 -0
  134. package/dist/cli/commands/medical.js.map +1 -0
  135. package/dist/cli/commands/memory.d.ts +2 -1
  136. package/dist/cli/commands/memory.d.ts.map +1 -1
  137. package/dist/cli/commands/memory.js +94 -7
  138. package/dist/cli/commands/memory.js.map +1 -1
  139. package/dist/cli/commands/plan.d.ts.map +1 -1
  140. package/dist/cli/commands/plan.js +29 -3
  141. package/dist/cli/commands/plan.js.map +1 -1
  142. package/dist/cli/commands/replay.d.ts +17 -0
  143. package/dist/cli/commands/replay.d.ts.map +1 -0
  144. package/dist/cli/commands/replay.js +261 -0
  145. package/dist/cli/commands/replay.js.map +1 -0
  146. package/dist/cli/commands/research.d.ts +41 -0
  147. package/dist/cli/commands/research.d.ts.map +1 -0
  148. package/dist/cli/commands/research.js +313 -0
  149. package/dist/cli/commands/research.js.map +1 -0
  150. package/dist/cli/commands/run.d.ts +9 -0
  151. package/dist/cli/commands/run.d.ts.map +1 -1
  152. package/dist/cli/commands/run.js +27 -1
  153. package/dist/cli/commands/run.js.map +1 -1
  154. package/dist/cli/commands/security-audit.d.ts +89 -0
  155. package/dist/cli/commands/security-audit.d.ts.map +1 -0
  156. package/dist/cli/commands/security-audit.js +238 -0
  157. package/dist/cli/commands/security-audit.js.map +1 -0
  158. package/dist/cli/commands/sprint.d.ts.map +1 -1
  159. package/dist/cli/commands/sprint.js +17 -3
  160. package/dist/cli/commands/sprint.js.map +1 -1
  161. package/dist/cli/commands/task.d.ts +64 -0
  162. package/dist/cli/commands/task.d.ts.map +1 -0
  163. package/dist/cli/commands/task.js +422 -0
  164. package/dist/cli/commands/task.js.map +1 -0
  165. package/dist/cli/commands/telegram.d.ts +10 -0
  166. package/dist/cli/commands/telegram.d.ts.map +1 -0
  167. package/dist/cli/commands/telegram.js +44 -0
  168. package/dist/cli/commands/telegram.js.map +1 -0
  169. package/dist/cli/commands/vault.d.ts +40 -0
  170. package/dist/cli/commands/vault.d.ts.map +1 -0
  171. package/dist/cli/commands/vault.js +122 -0
  172. package/dist/cli/commands/vault.js.map +1 -0
  173. package/dist/cli/index.js +45 -0
  174. package/dist/cli/index.js.map +1 -1
  175. package/dist/config/defaults.d.ts.map +1 -1
  176. package/dist/config/defaults.js +8 -0
  177. package/dist/config/defaults.js.map +1 -1
  178. package/dist/config/role-providers.d.ts +16 -1
  179. package/dist/config/role-providers.d.ts.map +1 -1
  180. package/dist/config/role-providers.js +14 -2
  181. package/dist/config/role-providers.js.map +1 -1
  182. package/dist/config/schema.d.ts +4050 -454
  183. package/dist/config/schema.d.ts.map +1 -1
  184. package/dist/config/schema.js +429 -1
  185. package/dist/config/schema.js.map +1 -1
  186. package/dist/contracts/eval-result.d.ts +84 -84
  187. package/dist/contracts/spec.d.ts +28 -28
  188. package/dist/contracts/sprint-contract.d.ts +4 -4
  189. package/dist/do-bridge/coding-promoter.d.ts +19 -0
  190. package/dist/do-bridge/coding-promoter.d.ts.map +1 -0
  191. package/dist/do-bridge/coding-promoter.js +43 -0
  192. package/dist/do-bridge/coding-promoter.js.map +1 -0
  193. package/dist/do-bridge/finding-port.d.ts +88 -0
  194. package/dist/do-bridge/finding-port.d.ts.map +1 -0
  195. package/dist/do-bridge/finding-port.js +95 -0
  196. package/dist/do-bridge/finding-port.js.map +1 -0
  197. package/dist/do-bridge/launcher.d.ts +55 -0
  198. package/dist/do-bridge/launcher.d.ts.map +1 -0
  199. package/dist/do-bridge/launcher.js +37 -0
  200. package/dist/do-bridge/launcher.js.map +1 -0
  201. package/dist/do-bridge/promote.d.ts +50 -0
  202. package/dist/do-bridge/promote.d.ts.map +1 -0
  203. package/dist/do-bridge/promote.js +116 -0
  204. package/dist/do-bridge/promote.js.map +1 -0
  205. package/dist/do-bridge/reconcile.d.ts +50 -0
  206. package/dist/do-bridge/reconcile.d.ts.map +1 -0
  207. package/dist/do-bridge/reconcile.js +70 -0
  208. package/dist/do-bridge/reconcile.js.map +1 -0
  209. package/dist/do-bridge/registry.d.ts +23 -0
  210. package/dist/do-bridge/registry.d.ts.map +1 -0
  211. package/dist/do-bridge/registry.js +42 -0
  212. package/dist/do-bridge/registry.js.map +1 -0
  213. package/dist/do-bridge/types.d.ts +50 -0
  214. package/dist/do-bridge/types.d.ts.map +1 -0
  215. package/dist/do-bridge/types.js +17 -0
  216. package/dist/do-bridge/types.js.map +1 -0
  217. package/dist/fleet/child-config.d.ts.map +1 -1
  218. package/dist/fleet/child-config.js +7 -0
  219. package/dist/fleet/child-config.js.map +1 -1
  220. package/dist/fleet/coordinator.d.ts +27 -1
  221. package/dist/fleet/coordinator.d.ts.map +1 -1
  222. package/dist/fleet/coordinator.js +70 -0
  223. package/dist/fleet/coordinator.js.map +1 -1
  224. package/dist/fleet/critic-deep.d.ts +61 -0
  225. package/dist/fleet/critic-deep.d.ts.map +1 -0
  226. package/dist/fleet/critic-deep.js +202 -0
  227. package/dist/fleet/critic-deep.js.map +1 -0
  228. package/dist/fleet/decomposer-deep-constants.d.ts +4 -0
  229. package/dist/fleet/decomposer-deep-constants.d.ts.map +1 -0
  230. package/dist/fleet/decomposer-deep-constants.js +14 -0
  231. package/dist/fleet/decomposer-deep-constants.js.map +1 -0
  232. package/dist/fleet/decomposer-deep-types.d.ts +8 -0
  233. package/dist/fleet/decomposer-deep-types.d.ts.map +1 -0
  234. package/dist/fleet/decomposer-deep-types.js +9 -0
  235. package/dist/fleet/decomposer-deep-types.js.map +1 -0
  236. package/dist/fleet/decomposer-deep.d.ts +44 -0
  237. package/dist/fleet/decomposer-deep.d.ts.map +1 -0
  238. package/dist/fleet/decomposer-deep.js +261 -0
  239. package/dist/fleet/decomposer-deep.js.map +1 -0
  240. package/dist/fleet/decomposer.d.ts +22 -0
  241. package/dist/fleet/decomposer.d.ts.map +1 -0
  242. package/dist/fleet/decomposer.js +144 -0
  243. package/dist/fleet/decomposer.js.map +1 -0
  244. package/dist/fleet/index.d.ts +102 -0
  245. package/dist/fleet/index.d.ts.map +1 -1
  246. package/dist/fleet/index.js +316 -9
  247. package/dist/fleet/index.js.map +1 -1
  248. package/dist/fleet/manifest-write.d.ts +30 -0
  249. package/dist/fleet/manifest-write.d.ts.map +1 -0
  250. package/dist/fleet/manifest-write.js +90 -0
  251. package/dist/fleet/manifest-write.js.map +1 -0
  252. package/dist/fleet/manifest.d.ts +32 -6
  253. package/dist/fleet/manifest.d.ts.map +1 -1
  254. package/dist/fleet/manifest.js +8 -0
  255. package/dist/fleet/manifest.js.map +1 -1
  256. package/dist/fleet/reporter.d.ts +4 -1
  257. package/dist/fleet/reporter.d.ts.map +1 -1
  258. package/dist/fleet/reporter.js +2 -1
  259. package/dist/fleet/reporter.js.map +1 -1
  260. package/dist/fleet/scaffolder.d.ts +5 -1
  261. package/dist/fleet/scaffolder.d.ts.map +1 -1
  262. package/dist/fleet/scaffolder.js +11 -2
  263. package/dist/fleet/scaffolder.js.map +1 -1
  264. package/dist/fleet/shared-blackboard.d.ts +51 -0
  265. package/dist/fleet/shared-blackboard.d.ts.map +1 -0
  266. package/dist/fleet/shared-blackboard.js +79 -0
  267. package/dist/fleet/shared-blackboard.js.map +1 -0
  268. package/dist/fleet/synthesis.d.ts +16 -0
  269. package/dist/fleet/synthesis.d.ts.map +1 -0
  270. package/dist/fleet/synthesis.js +22 -0
  271. package/dist/fleet/synthesis.js.map +1 -0
  272. package/dist/fleet/tier-policy.d.ts +18 -0
  273. package/dist/fleet/tier-policy.d.ts.map +1 -0
  274. package/dist/fleet/tier-policy.js +53 -0
  275. package/dist/fleet/tier-policy.js.map +1 -0
  276. package/dist/fleet/tool-role-guard.d.ts +24 -0
  277. package/dist/fleet/tool-role-guard.d.ts.map +1 -0
  278. package/dist/fleet/tool-role-guard.js +55 -0
  279. package/dist/fleet/tool-role-guard.js.map +1 -0
  280. package/dist/graph/client.d.ts.map +1 -1
  281. package/dist/graph/client.js +115 -23
  282. package/dist/graph/client.js.map +1 -1
  283. package/dist/graph/mcp-client.d.ts +1 -0
  284. package/dist/graph/mcp-client.d.ts.map +1 -1
  285. package/dist/graph/mcp-client.js +58 -7
  286. package/dist/graph/mcp-client.js.map +1 -1
  287. package/dist/hub/collector.d.ts +12 -0
  288. package/dist/hub/collector.d.ts.map +1 -0
  289. package/dist/hub/collector.js +36 -0
  290. package/dist/hub/collector.js.map +1 -0
  291. package/dist/hub/finding-source.d.ts +22 -0
  292. package/dist/hub/finding-source.d.ts.map +1 -0
  293. package/dist/hub/finding-source.js +41 -0
  294. package/dist/hub/finding-source.js.map +1 -0
  295. package/dist/hub/finding-store.d.ts +68 -0
  296. package/dist/hub/finding-store.d.ts.map +1 -0
  297. package/dist/hub/finding-store.js +122 -0
  298. package/dist/hub/finding-store.js.map +1 -0
  299. package/dist/hub/finding.d.ts +54 -0
  300. package/dist/hub/finding.d.ts.map +1 -0
  301. package/dist/hub/finding.js +24 -0
  302. package/dist/hub/finding.js.map +1 -0
  303. package/dist/hub/gmail-to-task.d.ts +69 -0
  304. package/dist/hub/gmail-to-task.d.ts.map +1 -0
  305. package/dist/hub/gmail-to-task.js +102 -0
  306. package/dist/hub/gmail-to-task.js.map +1 -0
  307. package/dist/hub/hub-config.d.ts +18 -0
  308. package/dist/hub/hub-config.d.ts.map +1 -0
  309. package/dist/hub/hub-config.js +40 -0
  310. package/dist/hub/hub-config.js.map +1 -0
  311. package/dist/hub/judge.d.ts +30 -0
  312. package/dist/hub/judge.d.ts.map +1 -0
  313. package/dist/hub/judge.js +177 -0
  314. package/dist/hub/judge.js.map +1 -0
  315. package/dist/hub/lenses.d.ts +60 -0
  316. package/dist/hub/lenses.d.ts.map +1 -0
  317. package/dist/hub/lenses.js +123 -0
  318. package/dist/hub/lenses.js.map +1 -0
  319. package/dist/hub/priority-md.d.ts +21 -0
  320. package/dist/hub/priority-md.d.ts.map +1 -0
  321. package/dist/hub/priority-md.js +64 -0
  322. package/dist/hub/priority-md.js.map +1 -0
  323. package/dist/hub/repo-resolver.d.ts +11 -0
  324. package/dist/hub/repo-resolver.d.ts.map +1 -0
  325. package/dist/hub/repo-resolver.js +39 -0
  326. package/dist/hub/repo-resolver.js.map +1 -0
  327. package/dist/hub/scope.d.ts +39 -0
  328. package/dist/hub/scope.d.ts.map +1 -0
  329. package/dist/hub/scope.js +62 -0
  330. package/dist/hub/scope.js.map +1 -0
  331. package/dist/hub/task-inbox.d.ts +16 -0
  332. package/dist/hub/task-inbox.d.ts.map +1 -0
  333. package/dist/hub/task-inbox.js +39 -0
  334. package/dist/hub/task-inbox.js.map +1 -0
  335. package/dist/incident/resolution-verify.d.ts +2 -2
  336. package/dist/incident/types.d.ts +8 -8
  337. package/dist/index.d.ts +2 -1
  338. package/dist/index.d.ts.map +1 -1
  339. package/dist/index.js +2 -1
  340. package/dist/index.js.map +1 -1
  341. package/dist/mcp/run-manager.d.ts +9 -1
  342. package/dist/mcp/run-manager.d.ts.map +1 -1
  343. package/dist/mcp/run-manager.js.map +1 -1
  344. package/dist/medical/adapters/apple-health.d.ts +32 -0
  345. package/dist/medical/adapters/apple-health.d.ts.map +1 -0
  346. package/dist/medical/adapters/apple-health.js +100 -0
  347. package/dist/medical/adapters/apple-health.js.map +1 -0
  348. package/dist/medical/analysis/cadence.d.ts +32 -0
  349. package/dist/medical/analysis/cadence.d.ts.map +1 -0
  350. package/dist/medical/analysis/cadence.js +72 -0
  351. package/dist/medical/analysis/cadence.js.map +1 -0
  352. package/dist/medical/analysis/cross-marker.d.ts +33 -0
  353. package/dist/medical/analysis/cross-marker.d.ts.map +1 -0
  354. package/dist/medical/analysis/cross-marker.js +79 -0
  355. package/dist/medical/analysis/cross-marker.js.map +1 -0
  356. package/dist/medical/analysis/finding-writer.d.ts +26 -0
  357. package/dist/medical/analysis/finding-writer.d.ts.map +1 -0
  358. package/dist/medical/analysis/finding-writer.js +60 -0
  359. package/dist/medical/analysis/finding-writer.js.map +1 -0
  360. package/dist/medical/analysis/finding.d.ts +63 -0
  361. package/dist/medical/analysis/finding.d.ts.map +1 -0
  362. package/dist/medical/analysis/finding.js +70 -0
  363. package/dist/medical/analysis/finding.js.map +1 -0
  364. package/dist/medical/analysis/review-pass.d.ts +76 -0
  365. package/dist/medical/analysis/review-pass.d.ts.map +1 -0
  366. package/dist/medical/analysis/review-pass.js +119 -0
  367. package/dist/medical/analysis/review-pass.js.map +1 -0
  368. package/dist/medical/analysis/trends.d.ts +36 -0
  369. package/dist/medical/analysis/trends.d.ts.map +1 -0
  370. package/dist/medical/analysis/trends.js +157 -0
  371. package/dist/medical/analysis/trends.js.map +1 -0
  372. package/dist/medical/audit.d.ts +31 -0
  373. package/dist/medical/audit.d.ts.map +1 -0
  374. package/dist/medical/audit.js +56 -0
  375. package/dist/medical/audit.js.map +1 -0
  376. package/dist/medical/consent.d.ts +37 -0
  377. package/dist/medical/consent.d.ts.map +1 -0
  378. package/dist/medical/consent.js +73 -0
  379. package/dist/medical/consent.js.map +1 -0
  380. package/dist/medical/disclaimer.d.ts +11 -0
  381. package/dist/medical/disclaimer.d.ts.map +1 -0
  382. package/dist/medical/disclaimer.js +21 -0
  383. package/dist/medical/disclaimer.js.map +1 -0
  384. package/dist/medical/egress.d.ts +30 -0
  385. package/dist/medical/egress.d.ts.map +1 -0
  386. package/dist/medical/egress.js +50 -0
  387. package/dist/medical/egress.js.map +1 -0
  388. package/dist/medical/engine.d.ts +73 -0
  389. package/dist/medical/engine.d.ts.map +1 -0
  390. package/dist/medical/engine.js +333 -0
  391. package/dist/medical/engine.js.map +1 -0
  392. package/dist/medical/guardrails.d.ts +47 -0
  393. package/dist/medical/guardrails.d.ts.map +1 -0
  394. package/dist/medical/guardrails.js +92 -0
  395. package/dist/medical/guardrails.js.map +1 -0
  396. package/dist/medical/health-store.d.ts +85 -0
  397. package/dist/medical/health-store.d.ts.map +1 -0
  398. package/dist/medical/health-store.js +214 -0
  399. package/dist/medical/health-store.js.map +1 -0
  400. package/dist/medical/inference.d.ts +22 -0
  401. package/dist/medical/inference.d.ts.map +1 -0
  402. package/dist/medical/inference.js +39 -0
  403. package/dist/medical/inference.js.map +1 -0
  404. package/dist/medical/ingestion.d.ts +33 -0
  405. package/dist/medical/ingestion.d.ts.map +1 -0
  406. package/dist/medical/ingestion.js +52 -0
  407. package/dist/medical/ingestion.js.map +1 -0
  408. package/dist/medical/lab-note.d.ts +72 -0
  409. package/dist/medical/lab-note.d.ts.map +1 -0
  410. package/dist/medical/lab-note.js +161 -0
  411. package/dist/medical/lab-note.js.map +1 -0
  412. package/dist/medical/lab-pdf-parser.d.ts +19 -0
  413. package/dist/medical/lab-pdf-parser.d.ts.map +1 -0
  414. package/dist/medical/lab-pdf-parser.js +57 -0
  415. package/dist/medical/lab-pdf-parser.js.map +1 -0
  416. package/dist/medical/lab-reindex.d.ts +24 -0
  417. package/dist/medical/lab-reindex.d.ts.map +1 -0
  418. package/dist/medical/lab-reindex.js +45 -0
  419. package/dist/medical/lab-reindex.js.map +1 -0
  420. package/dist/medical/lab-types.d.ts +75 -0
  421. package/dist/medical/lab-types.d.ts.map +1 -0
  422. package/dist/medical/lab-types.js +17 -0
  423. package/dist/medical/lab-types.js.map +1 -0
  424. package/dist/medical/numerics.d.ts +66 -0
  425. package/dist/medical/numerics.d.ts.map +1 -0
  426. package/dist/medical/numerics.js +216 -0
  427. package/dist/medical/numerics.js.map +1 -0
  428. package/dist/medical/profile.d.ts +96 -0
  429. package/dist/medical/profile.d.ts.map +1 -0
  430. package/dist/medical/profile.js +273 -0
  431. package/dist/medical/profile.js.map +1 -0
  432. package/dist/medical/recommend/context.d.ts +48 -0
  433. package/dist/medical/recommend/context.d.ts.map +1 -0
  434. package/dist/medical/recommend/context.js +109 -0
  435. package/dist/medical/recommend/context.js.map +1 -0
  436. package/dist/medical/recommend/judge-panel.d.ts +49 -0
  437. package/dist/medical/recommend/judge-panel.d.ts.map +1 -0
  438. package/dist/medical/recommend/judge-panel.js +164 -0
  439. package/dist/medical/recommend/judge-panel.js.map +1 -0
  440. package/dist/medical/recommend/lenses.d.ts +72 -0
  441. package/dist/medical/recommend/lenses.d.ts.map +1 -0
  442. package/dist/medical/recommend/lenses.js +220 -0
  443. package/dist/medical/recommend/lenses.js.map +1 -0
  444. package/dist/medical/recommend/recommend.d.ts +86 -0
  445. package/dist/medical/recommend/recommend.d.ts.map +1 -0
  446. package/dist/medical/recommend/recommend.js +211 -0
  447. package/dist/medical/recommend/recommend.js.map +1 -0
  448. package/dist/medical/recommend/types.d.ts +98 -0
  449. package/dist/medical/recommend/types.d.ts.map +1 -0
  450. package/dist/medical/recommend/types.js +20 -0
  451. package/dist/medical/recommend/types.js.map +1 -0
  452. package/dist/medical/recommend/urgency.d.ts +26 -0
  453. package/dist/medical/recommend/urgency.d.ts.map +1 -0
  454. package/dist/medical/recommend/urgency.js +124 -0
  455. package/dist/medical/recommend/urgency.js.map +1 -0
  456. package/dist/medical/red-flag.d.ts +42 -0
  457. package/dist/medical/red-flag.d.ts.map +1 -0
  458. package/dist/medical/red-flag.js +161 -0
  459. package/dist/medical/red-flag.js.map +1 -0
  460. package/dist/medical/refusal.d.ts +46 -0
  461. package/dist/medical/refusal.d.ts.map +1 -0
  462. package/dist/medical/refusal.js +131 -0
  463. package/dist/medical/refusal.js.map +1 -0
  464. package/dist/medical/research/online-research.d.ts +65 -0
  465. package/dist/medical/research/online-research.d.ts.map +1 -0
  466. package/dist/medical/research/online-research.js +101 -0
  467. package/dist/medical/research/online-research.js.map +1 -0
  468. package/dist/medical/research/research-note.d.ts +32 -0
  469. package/dist/medical/research/research-note.d.ts.map +1 -0
  470. package/dist/medical/research/research-note.js +55 -0
  471. package/dist/medical/research/research-note.js.map +1 -0
  472. package/dist/medical/retrieval/grounding-critic.d.ts +34 -0
  473. package/dist/medical/retrieval/grounding-critic.d.ts.map +1 -0
  474. package/dist/medical/retrieval/grounding-critic.js +153 -0
  475. package/dist/medical/retrieval/grounding-critic.js.map +1 -0
  476. package/dist/medical/retrieval/literature.d.ts +78 -0
  477. package/dist/medical/retrieval/literature.d.ts.map +1 -0
  478. package/dist/medical/retrieval/literature.js +292 -0
  479. package/dist/medical/retrieval/literature.js.map +1 -0
  480. package/dist/medical/retrieval/medline-source.d.ts +72 -0
  481. package/dist/medical/retrieval/medline-source.d.ts.map +1 -0
  482. package/dist/medical/retrieval/medline-source.js +120 -0
  483. package/dist/medical/retrieval/medline-source.js.map +1 -0
  484. package/dist/medical/supplements.d.ts +82 -0
  485. package/dist/medical/supplements.d.ts.map +1 -0
  486. package/dist/medical/supplements.js +173 -0
  487. package/dist/medical/supplements.js.map +1 -0
  488. package/dist/medical/team.d.ts +15 -0
  489. package/dist/medical/team.d.ts.map +1 -0
  490. package/dist/medical/team.js +44 -0
  491. package/dist/medical/team.js.map +1 -0
  492. package/dist/medical/types.d.ts +175 -0
  493. package/dist/medical/types.d.ts.map +1 -0
  494. package/dist/medical/types.js +8 -0
  495. package/dist/medical/types.js.map +1 -0
  496. package/dist/medical/whoop/whoop-client.d.ts +114 -0
  497. package/dist/medical/whoop/whoop-client.d.ts.map +1 -0
  498. package/dist/medical/whoop/whoop-client.js +226 -0
  499. package/dist/medical/whoop/whoop-client.js.map +1 -0
  500. package/dist/medical/whoop/whoop-sync.d.ts +25 -0
  501. package/dist/medical/whoop/whoop-sync.d.ts.map +1 -0
  502. package/dist/medical/whoop/whoop-sync.js +97 -0
  503. package/dist/medical/whoop/whoop-sync.js.map +1 -0
  504. package/dist/medical/whoop/whoop-token.d.ts +44 -0
  505. package/dist/medical/whoop/whoop-token.d.ts.map +1 -0
  506. package/dist/medical/whoop/whoop-token.js +66 -0
  507. package/dist/medical/whoop/whoop-token.js.map +1 -0
  508. package/dist/orchestrator/agentic-loop.d.ts +160 -1
  509. package/dist/orchestrator/agentic-loop.d.ts.map +1 -1
  510. package/dist/orchestrator/agentic-loop.js +350 -41
  511. package/dist/orchestrator/agentic-loop.js.map +1 -1
  512. package/dist/orchestrator/compaction.d.ts +47 -0
  513. package/dist/orchestrator/compaction.d.ts.map +1 -0
  514. package/dist/orchestrator/compaction.js +75 -0
  515. package/dist/orchestrator/compaction.js.map +1 -0
  516. package/dist/orchestrator/context-handoff.d.ts +60 -60
  517. package/dist/orchestrator/contract-materialization.d.ts +33 -0
  518. package/dist/orchestrator/contract-materialization.d.ts.map +1 -0
  519. package/dist/orchestrator/contract-materialization.js +113 -0
  520. package/dist/orchestrator/contract-materialization.js.map +1 -0
  521. package/dist/orchestrator/generator-agent.d.ts +19 -0
  522. package/dist/orchestrator/generator-agent.d.ts.map +1 -1
  523. package/dist/orchestrator/generator-agent.js +27 -1
  524. package/dist/orchestrator/generator-agent.js.map +1 -1
  525. package/dist/orchestrator/loop-events.d.ts +98 -0
  526. package/dist/orchestrator/loop-events.d.ts.map +1 -0
  527. package/dist/orchestrator/loop-events.js +2 -0
  528. package/dist/orchestrator/loop-events.js.map +1 -0
  529. package/dist/orchestrator/memory/distill.d.ts +4 -1
  530. package/dist/orchestrator/memory/distill.d.ts.map +1 -1
  531. package/dist/orchestrator/memory/distill.js +41 -1
  532. package/dist/orchestrator/memory/distill.js.map +1 -1
  533. package/dist/orchestrator/memory/fact-detector.d.ts +61 -0
  534. package/dist/orchestrator/memory/fact-detector.d.ts.map +1 -0
  535. package/dist/orchestrator/memory/fact-detector.js +153 -0
  536. package/dist/orchestrator/memory/fact-detector.js.map +1 -0
  537. package/dist/orchestrator/memory/fact-judge.d.ts +19 -0
  538. package/dist/orchestrator/memory/fact-judge.d.ts.map +1 -0
  539. package/dist/orchestrator/memory/fact-judge.js +121 -0
  540. package/dist/orchestrator/memory/fact-judge.js.map +1 -0
  541. package/dist/orchestrator/memory/fact-retrieve.d.ts +52 -0
  542. package/dist/orchestrator/memory/fact-retrieve.d.ts.map +1 -0
  543. package/dist/orchestrator/memory/fact-retrieve.js +117 -0
  544. package/dist/orchestrator/memory/fact-retrieve.js.map +1 -0
  545. package/dist/orchestrator/memory/hygiene.d.ts +66 -0
  546. package/dist/orchestrator/memory/hygiene.d.ts.map +1 -0
  547. package/dist/orchestrator/memory/hygiene.js +153 -0
  548. package/dist/orchestrator/memory/hygiene.js.map +1 -0
  549. package/dist/orchestrator/memory/reconcile.d.ts +47 -0
  550. package/dist/orchestrator/memory/reconcile.d.ts.map +1 -0
  551. package/dist/orchestrator/memory/reconcile.js +116 -0
  552. package/dist/orchestrator/memory/reconcile.js.map +1 -0
  553. package/dist/orchestrator/memory/retrieve.d.ts +5 -3
  554. package/dist/orchestrator/memory/retrieve.d.ts.map +1 -1
  555. package/dist/orchestrator/memory/retrieve.js +9 -6
  556. package/dist/orchestrator/memory/retrieve.js.map +1 -1
  557. package/dist/orchestrator/model-resolver.d.ts.map +1 -1
  558. package/dist/orchestrator/model-resolver.js +10 -6
  559. package/dist/orchestrator/model-resolver.js.map +1 -1
  560. package/dist/orchestrator/pipeline.d.ts +29 -4
  561. package/dist/orchestrator/pipeline.d.ts.map +1 -1
  562. package/dist/orchestrator/pipeline.js +165 -56
  563. package/dist/orchestrator/pipeline.js.map +1 -1
  564. package/dist/orchestrator/planner-agent.d.ts.map +1 -1
  565. package/dist/orchestrator/planner-agent.js +16 -1
  566. package/dist/orchestrator/planner-agent.js.map +1 -1
  567. package/dist/orchestrator/security-audit-types.d.ts +53 -0
  568. package/dist/orchestrator/security-audit-types.d.ts.map +1 -0
  569. package/dist/orchestrator/security-audit-types.js +10 -0
  570. package/dist/orchestrator/security-audit-types.js.map +1 -0
  571. package/dist/orchestrator/security-auditor-agent.d.ts +68 -0
  572. package/dist/orchestrator/security-auditor-agent.d.ts.map +1 -0
  573. package/dist/orchestrator/security-auditor-agent.js +482 -0
  574. package/dist/orchestrator/security-auditor-agent.js.map +1 -0
  575. package/dist/orchestrator/security-gate.d.ts +73 -0
  576. package/dist/orchestrator/security-gate.d.ts.map +1 -0
  577. package/dist/orchestrator/security-gate.js +174 -0
  578. package/dist/orchestrator/security-gate.js.map +1 -0
  579. package/dist/orchestrator/security-hub.d.ts +45 -0
  580. package/dist/orchestrator/security-hub.d.ts.map +1 -0
  581. package/dist/orchestrator/security-hub.js +147 -0
  582. package/dist/orchestrator/security-hub.js.map +1 -0
  583. package/dist/orchestrator/security-knowledge/benchmark/harness.d.ts +43 -0
  584. package/dist/orchestrator/security-knowledge/benchmark/harness.d.ts.map +1 -0
  585. package/dist/orchestrator/security-knowledge/benchmark/harness.js +13 -0
  586. package/dist/orchestrator/security-knowledge/benchmark/harness.js.map +1 -0
  587. package/dist/orchestrator/security-knowledge/diff-provider.d.ts +79 -0
  588. package/dist/orchestrator/security-knowledge/diff-provider.d.ts.map +1 -0
  589. package/dist/orchestrator/security-knowledge/diff-provider.js +320 -0
  590. package/dist/orchestrator/security-knowledge/diff-provider.js.map +1 -0
  591. package/dist/orchestrator/security-knowledge/index.d.ts +22 -0
  592. package/dist/orchestrator/security-knowledge/index.d.ts.map +1 -0
  593. package/dist/orchestrator/security-knowledge/index.js +66 -0
  594. package/dist/orchestrator/security-knowledge/index.js.map +1 -0
  595. package/dist/orchestrator/security-knowledge/parser.d.ts +9 -0
  596. package/dist/orchestrator/security-knowledge/parser.d.ts.map +1 -0
  597. package/dist/orchestrator/security-knowledge/parser.js +137 -0
  598. package/dist/orchestrator/security-knowledge/parser.js.map +1 -0
  599. package/dist/orchestrator/security-knowledge/registry.d.ts +25 -0
  600. package/dist/orchestrator/security-knowledge/registry.d.ts.map +1 -0
  601. package/dist/orchestrator/security-knowledge/registry.js +114 -0
  602. package/dist/orchestrator/security-knowledge/registry.js.map +1 -0
  603. package/dist/orchestrator/security-knowledge/resolver.d.ts +48 -0
  604. package/dist/orchestrator/security-knowledge/resolver.d.ts.map +1 -0
  605. package/dist/orchestrator/security-knowledge/resolver.js +63 -0
  606. package/dist/orchestrator/security-knowledge/resolver.js.map +1 -0
  607. package/dist/orchestrator/security-knowledge/selector.d.ts +18 -0
  608. package/dist/orchestrator/security-knowledge/selector.d.ts.map +1 -0
  609. package/dist/orchestrator/security-knowledge/selector.js +46 -0
  610. package/dist/orchestrator/security-knowledge/selector.js.map +1 -0
  611. package/dist/orchestrator/security-knowledge/signature.d.ts +37 -0
  612. package/dist/orchestrator/security-knowledge/signature.d.ts.map +1 -0
  613. package/dist/orchestrator/security-knowledge/signature.js +2 -0
  614. package/dist/orchestrator/security-knowledge/signature.js.map +1 -0
  615. package/dist/orchestrator/security-knowledge/supply-chain-inspector.d.ts +29 -0
  616. package/dist/orchestrator/security-knowledge/supply-chain-inspector.d.ts.map +1 -0
  617. package/dist/orchestrator/security-knowledge/supply-chain-inspector.js +211 -0
  618. package/dist/orchestrator/security-knowledge/supply-chain-inspector.js.map +1 -0
  619. package/dist/orchestrator/security-scanners.d.ts +126 -0
  620. package/dist/orchestrator/security-scanners.d.ts.map +1 -0
  621. package/dist/orchestrator/security-scanners.js +501 -0
  622. package/dist/orchestrator/security-scanners.js.map +1 -0
  623. package/dist/orchestrator/security-verifier-agent.d.ts +62 -0
  624. package/dist/orchestrator/security-verifier-agent.d.ts.map +1 -0
  625. package/dist/orchestrator/security-verifier-agent.js +230 -0
  626. package/dist/orchestrator/security-verifier-agent.js.map +1 -0
  627. package/dist/orchestrator/selfimprove/eval-guards.d.ts +51 -0
  628. package/dist/orchestrator/selfimprove/eval-guards.d.ts.map +1 -0
  629. package/dist/orchestrator/selfimprove/eval-guards.js +120 -0
  630. package/dist/orchestrator/selfimprove/eval-guards.js.map +1 -0
  631. package/dist/orchestrator/selfimprove/gepa.d.ts +74 -0
  632. package/dist/orchestrator/selfimprove/gepa.d.ts.map +1 -0
  633. package/dist/orchestrator/selfimprove/gepa.js +227 -0
  634. package/dist/orchestrator/selfimprove/gepa.js.map +1 -0
  635. package/dist/orchestrator/selfimprove/replay-harness.d.ts +65 -0
  636. package/dist/orchestrator/selfimprove/replay-harness.d.ts.map +1 -0
  637. package/dist/orchestrator/selfimprove/replay-harness.js +134 -0
  638. package/dist/orchestrator/selfimprove/replay-harness.js.map +1 -0
  639. package/dist/orchestrator/selfimprove/replay-store.d.ts +45 -0
  640. package/dist/orchestrator/selfimprove/replay-store.d.ts.map +1 -0
  641. package/dist/orchestrator/selfimprove/replay-store.js +119 -0
  642. package/dist/orchestrator/selfimprove/replay-store.js.map +1 -0
  643. package/dist/orchestrator/selfimprove/replay-types.d.ts +32 -0
  644. package/dist/orchestrator/selfimprove/replay-types.d.ts.map +1 -0
  645. package/dist/orchestrator/selfimprove/replay-types.js +15 -0
  646. package/dist/orchestrator/selfimprove/replay-types.js.map +1 -0
  647. package/dist/orchestrator/session-store.d.ts +95 -0
  648. package/dist/orchestrator/session-store.d.ts.map +1 -0
  649. package/dist/orchestrator/session-store.js +186 -0
  650. package/dist/orchestrator/session-store.js.map +1 -0
  651. package/dist/orchestrator/stack-knowledge.d.ts +17 -0
  652. package/dist/orchestrator/stack-knowledge.d.ts.map +1 -0
  653. package/dist/orchestrator/stack-knowledge.js +35 -0
  654. package/dist/orchestrator/stack-knowledge.js.map +1 -0
  655. package/dist/orchestrator/subagents.d.ts +62 -0
  656. package/dist/orchestrator/subagents.d.ts.map +1 -0
  657. package/dist/orchestrator/subagents.js +143 -0
  658. package/dist/orchestrator/subagents.js.map +1 -0
  659. package/dist/orchestrator/tools/executor.d.ts +68 -0
  660. package/dist/orchestrator/tools/executor.d.ts.map +1 -0
  661. package/dist/orchestrator/tools/executor.js +104 -0
  662. package/dist/orchestrator/tools/executor.js.map +1 -0
  663. package/dist/orchestrator/tools/mcp-bridge.d.ts +76 -0
  664. package/dist/orchestrator/tools/mcp-bridge.d.ts.map +1 -0
  665. package/dist/orchestrator/tools/mcp-bridge.js +154 -0
  666. package/dist/orchestrator/tools/mcp-bridge.js.map +1 -0
  667. package/dist/orchestrator/tools/schemas.d.ts.map +1 -1
  668. package/dist/orchestrator/tools/schemas.js +3 -0
  669. package/dist/orchestrator/tools/schemas.js.map +1 -1
  670. package/dist/orchestrator/workflow/budget.d.ts +24 -2
  671. package/dist/orchestrator/workflow/budget.d.ts.map +1 -1
  672. package/dist/orchestrator/workflow/budget.js +39 -1
  673. package/dist/orchestrator/workflow/budget.js.map +1 -1
  674. package/dist/orchestrator/workflow/engine.d.ts +4 -2
  675. package/dist/orchestrator/workflow/engine.d.ts.map +1 -1
  676. package/dist/orchestrator/workflow/selector.d.ts +18 -0
  677. package/dist/orchestrator/workflow/selector.d.ts.map +1 -1
  678. package/dist/orchestrator/workflow/selector.js +51 -0
  679. package/dist/orchestrator/workflow/selector.js.map +1 -1
  680. package/dist/orchestrator/workflow/ts-engine.d.ts +3 -1
  681. package/dist/orchestrator/workflow/ts-engine.d.ts.map +1 -1
  682. package/dist/orchestrator/workflow/ts-engine.js +2 -2
  683. package/dist/orchestrator/workflow/ts-engine.js.map +1 -1
  684. package/dist/orchestrator/workflow/workflow-engine.d.ts +3 -1
  685. package/dist/orchestrator/workflow/workflow-engine.d.ts.map +1 -1
  686. package/dist/orchestrator/workflow/workflow-engine.js +3 -3
  687. package/dist/orchestrator/workflow/workflow-engine.js.map +1 -1
  688. package/dist/providers/anthropic.d.ts.map +1 -1
  689. package/dist/providers/anthropic.js +116 -26
  690. package/dist/providers/anthropic.js.map +1 -1
  691. package/dist/providers/claude-code.d.ts.map +1 -1
  692. package/dist/providers/claude-code.js +17 -0
  693. package/dist/providers/claude-code.js.map +1 -1
  694. package/dist/providers/cost-meter.d.ts +52 -0
  695. package/dist/providers/cost-meter.d.ts.map +1 -0
  696. package/dist/providers/cost-meter.js +81 -0
  697. package/dist/providers/cost-meter.js.map +1 -0
  698. package/dist/providers/factory.d.ts +6 -1
  699. package/dist/providers/factory.d.ts.map +1 -1
  700. package/dist/providers/factory.js +24 -5
  701. package/dist/providers/factory.js.map +1 -1
  702. package/dist/providers/google.d.ts.map +1 -1
  703. package/dist/providers/google.js +29 -0
  704. package/dist/providers/google.js.map +1 -1
  705. package/dist/providers/grounded-search.d.ts +128 -0
  706. package/dist/providers/grounded-search.d.ts.map +1 -0
  707. package/dist/providers/grounded-search.js +160 -0
  708. package/dist/providers/grounded-search.js.map +1 -0
  709. package/dist/providers/openai-compat.d.ts +15 -1
  710. package/dist/providers/openai-compat.d.ts.map +1 -1
  711. package/dist/providers/openai-compat.js +24 -0
  712. package/dist/providers/openai-compat.js.map +1 -1
  713. package/dist/providers/openai.d.ts +7 -0
  714. package/dist/providers/openai.d.ts.map +1 -1
  715. package/dist/providers/openai.js +95 -4
  716. package/dist/providers/openai.js.map +1 -1
  717. package/dist/providers/types.d.ts +88 -0
  718. package/dist/providers/types.d.ts.map +1 -1
  719. package/dist/research/cadence.d.ts +33 -0
  720. package/dist/research/cadence.d.ts.map +1 -0
  721. package/dist/research/cadence.js +55 -0
  722. package/dist/research/cadence.js.map +1 -0
  723. package/dist/research/digest.d.ts +80 -0
  724. package/dist/research/digest.d.ts.map +1 -0
  725. package/dist/research/digest.js +119 -0
  726. package/dist/research/digest.js.map +1 -0
  727. package/dist/research/egress.d.ts +28 -0
  728. package/dist/research/egress.d.ts.map +1 -0
  729. package/dist/research/egress.js +41 -0
  730. package/dist/research/egress.js.map +1 -0
  731. package/dist/research/job-store.d.ts +30 -0
  732. package/dist/research/job-store.d.ts.map +1 -0
  733. package/dist/research/job-store.js +100 -0
  734. package/dist/research/job-store.js.map +1 -0
  735. package/dist/research/model-diversity.d.ts +27 -0
  736. package/dist/research/model-diversity.d.ts.map +1 -0
  737. package/dist/research/model-diversity.js +52 -0
  738. package/dist/research/model-diversity.js.map +1 -0
  739. package/dist/research/note-writer.d.ts +36 -0
  740. package/dist/research/note-writer.d.ts.map +1 -0
  741. package/dist/research/note-writer.js +53 -0
  742. package/dist/research/note-writer.js.map +1 -0
  743. package/dist/research/online-retrieval.d.ts +27 -0
  744. package/dist/research/online-retrieval.d.ts.map +1 -0
  745. package/dist/research/online-retrieval.js +22 -0
  746. package/dist/research/online-retrieval.js.map +1 -0
  747. package/dist/research/runner.d.ts +80 -0
  748. package/dist/research/runner.d.ts.map +1 -0
  749. package/dist/research/runner.js +115 -0
  750. package/dist/research/runner.js.map +1 -0
  751. package/dist/research/scheduler.d.ts +61 -0
  752. package/dist/research/scheduler.d.ts.map +1 -0
  753. package/dist/research/scheduler.js +58 -0
  754. package/dist/research/scheduler.js.map +1 -0
  755. package/dist/research/types.d.ts +81 -0
  756. package/dist/research/types.d.ts.map +1 -0
  757. package/dist/research/types.js +57 -0
  758. package/dist/research/types.js.map +1 -0
  759. package/dist/seo/adapters/http.d.ts +43 -0
  760. package/dist/seo/adapters/http.d.ts.map +1 -0
  761. package/dist/seo/adapters/http.js +35 -0
  762. package/dist/seo/adapters/http.js.map +1 -0
  763. package/dist/seo/ai-visibility-provider.d.ts +171 -0
  764. package/dist/seo/ai-visibility-provider.d.ts.map +1 -0
  765. package/dist/seo/ai-visibility-provider.js +165 -0
  766. package/dist/seo/ai-visibility-provider.js.map +1 -0
  767. package/dist/seo/ai-visibility-scorer.d.ts +43 -0
  768. package/dist/seo/ai-visibility-scorer.d.ts.map +1 -0
  769. package/dist/seo/ai-visibility-scorer.js +102 -0
  770. package/dist/seo/ai-visibility-scorer.js.map +1 -0
  771. package/dist/seo/analyzer.d.ts +58 -0
  772. package/dist/seo/analyzer.d.ts.map +1 -0
  773. package/dist/seo/analyzer.js +265 -0
  774. package/dist/seo/analyzer.js.map +1 -0
  775. package/dist/seo/benchmark/harness.d.ts +56 -0
  776. package/dist/seo/benchmark/harness.d.ts.map +1 -0
  777. package/dist/seo/benchmark/harness.js +172 -0
  778. package/dist/seo/benchmark/harness.js.map +1 -0
  779. package/dist/seo/builder/approved-finding.d.ts +115 -0
  780. package/dist/seo/builder/approved-finding.d.ts.map +1 -0
  781. package/dist/seo/builder/approved-finding.js +145 -0
  782. package/dist/seo/builder/approved-finding.js.map +1 -0
  783. package/dist/seo/builder/build-runner.d.ts +41 -0
  784. package/dist/seo/builder/build-runner.d.ts.map +1 -0
  785. package/dist/seo/builder/build-runner.js +156 -0
  786. package/dist/seo/builder/build-runner.js.map +1 -0
  787. package/dist/seo/builder/draft-generators.d.ts +32 -0
  788. package/dist/seo/builder/draft-generators.d.ts.map +1 -0
  789. package/dist/seo/builder/draft-generators.js +31 -0
  790. package/dist/seo/builder/draft-generators.js.map +1 -0
  791. package/dist/seo/builder/draft-store.d.ts +30 -0
  792. package/dist/seo/builder/draft-store.d.ts.map +1 -0
  793. package/dist/seo/builder/draft-store.js +76 -0
  794. package/dist/seo/builder/draft-store.js.map +1 -0
  795. package/dist/seo/builder/draft-types.d.ts +36 -0
  796. package/dist/seo/builder/draft-types.d.ts.map +1 -0
  797. package/dist/seo/builder/draft-types.js +14 -0
  798. package/dist/seo/builder/draft-types.js.map +1 -0
  799. package/dist/seo/builder/hub-approved-source.d.ts +11 -0
  800. package/dist/seo/builder/hub-approved-source.d.ts.map +1 -0
  801. package/dist/seo/builder/hub-approved-source.js +48 -0
  802. package/dist/seo/builder/hub-approved-source.js.map +1 -0
  803. package/dist/seo/builder/seo-builder.d.ts +72 -0
  804. package/dist/seo/builder/seo-builder.d.ts.map +1 -0
  805. package/dist/seo/builder/seo-builder.js +72 -0
  806. package/dist/seo/builder/seo-builder.js.map +1 -0
  807. package/dist/seo/citation-gate.d.ts +36 -0
  808. package/dist/seo/citation-gate.d.ts.map +1 -0
  809. package/dist/seo/citation-gate.js +59 -0
  810. package/dist/seo/citation-gate.js.map +1 -0
  811. package/dist/seo/command.d.ts +11 -0
  812. package/dist/seo/command.d.ts.map +1 -0
  813. package/dist/seo/command.js +90 -0
  814. package/dist/seo/command.js.map +1 -0
  815. package/dist/seo/content-sanitizer.d.ts +56 -0
  816. package/dist/seo/content-sanitizer.d.ts.map +1 -0
  817. package/dist/seo/content-sanitizer.js +55 -0
  818. package/dist/seo/content-sanitizer.js.map +1 -0
  819. package/dist/seo/crawl-engine.d.ts +35 -0
  820. package/dist/seo/crawl-engine.d.ts.map +1 -0
  821. package/dist/seo/crawl-engine.js +2 -0
  822. package/dist/seo/crawl-engine.js.map +1 -0
  823. package/dist/seo/data-source.d.ts +156 -0
  824. package/dist/seo/data-source.d.ts.map +1 -0
  825. package/dist/seo/data-source.js +2 -0
  826. package/dist/seo/data-source.js.map +1 -0
  827. package/dist/seo/egress.d.ts +39 -0
  828. package/dist/seo/egress.d.ts.map +1 -0
  829. package/dist/seo/egress.js +64 -0
  830. package/dist/seo/egress.js.map +1 -0
  831. package/dist/seo/hub-emitter.d.ts +28 -0
  832. package/dist/seo/hub-emitter.d.ts.map +1 -0
  833. package/dist/seo/hub-emitter.js +95 -0
  834. package/dist/seo/hub-emitter.js.map +1 -0
  835. package/dist/seo/index.d.ts +42 -0
  836. package/dist/seo/index.d.ts.map +1 -0
  837. package/dist/seo/index.js +19 -0
  838. package/dist/seo/index.js.map +1 -0
  839. package/dist/seo/never-encode-filter.d.ts +45 -0
  840. package/dist/seo/never-encode-filter.d.ts.map +1 -0
  841. package/dist/seo/never-encode-filter.js +51 -0
  842. package/dist/seo/never-encode-filter.js.map +1 -0
  843. package/dist/seo/parser.d.ts +46 -0
  844. package/dist/seo/parser.d.ts.map +1 -0
  845. package/dist/seo/parser.js +113 -0
  846. package/dist/seo/parser.js.map +1 -0
  847. package/dist/seo/playbook-index.d.ts +19 -0
  848. package/dist/seo/playbook-index.d.ts.map +1 -0
  849. package/dist/seo/playbook-index.js +74 -0
  850. package/dist/seo/playbook-index.js.map +1 -0
  851. package/dist/seo/quota-governor.d.ts +100 -0
  852. package/dist/seo/quota-governor.d.ts.map +1 -0
  853. package/dist/seo/quota-governor.js +199 -0
  854. package/dist/seo/quota-governor.js.map +1 -0
  855. package/dist/seo/quota-ledger.d.ts +50 -0
  856. package/dist/seo/quota-ledger.d.ts.map +1 -0
  857. package/dist/seo/quota-ledger.js +95 -0
  858. package/dist/seo/quota-ledger.js.map +1 -0
  859. package/dist/seo/report-store.d.ts +30 -0
  860. package/dist/seo/report-store.d.ts.map +1 -0
  861. package/dist/seo/report-store.js +94 -0
  862. package/dist/seo/report-store.js.map +1 -0
  863. package/dist/seo/retriever.d.ts +34 -0
  864. package/dist/seo/retriever.d.ts.map +1 -0
  865. package/dist/seo/retriever.js +95 -0
  866. package/dist/seo/retriever.js.map +1 -0
  867. package/dist/seo/runner.d.ts +108 -0
  868. package/dist/seo/runner.d.ts.map +1 -0
  869. package/dist/seo/runner.js +512 -0
  870. package/dist/seo/runner.js.map +1 -0
  871. package/dist/seo/scrape-throttle.d.ts +84 -0
  872. package/dist/seo/scrape-throttle.d.ts.map +1 -0
  873. package/dist/seo/scrape-throttle.js +149 -0
  874. package/dist/seo/scrape-throttle.js.map +1 -0
  875. package/dist/seo/serp-provider.d.ts +52 -0
  876. package/dist/seo/serp-provider.d.ts.map +1 -0
  877. package/dist/seo/serp-provider.js +17 -0
  878. package/dist/seo/serp-provider.js.map +1 -0
  879. package/dist/seo/sources/ai-visibility-adapter.d.ts +87 -0
  880. package/dist/seo/sources/ai-visibility-adapter.d.ts.map +1 -0
  881. package/dist/seo/sources/ai-visibility-adapter.js +85 -0
  882. package/dist/seo/sources/ai-visibility-adapter.js.map +1 -0
  883. package/dist/seo/sources/api-spine-provider.d.ts +66 -0
  884. package/dist/seo/sources/api-spine-provider.d.ts.map +1 -0
  885. package/dist/seo/sources/api-spine-provider.js +68 -0
  886. package/dist/seo/sources/api-spine-provider.js.map +1 -0
  887. package/dist/seo/sources/citation-verifier.d.ts +95 -0
  888. package/dist/seo/sources/citation-verifier.d.ts.map +1 -0
  889. package/dist/seo/sources/citation-verifier.js +106 -0
  890. package/dist/seo/sources/citation-verifier.js.map +1 -0
  891. package/dist/seo/sources/crawl-source.d.ts +62 -0
  892. package/dist/seo/sources/crawl-source.d.ts.map +1 -0
  893. package/dist/seo/sources/crawl-source.js +87 -0
  894. package/dist/seo/sources/crawl-source.js.map +1 -0
  895. package/dist/seo/sources/damcrawler-crawl-engine.d.ts +151 -0
  896. package/dist/seo/sources/damcrawler-crawl-engine.d.ts.map +1 -0
  897. package/dist/seo/sources/damcrawler-crawl-engine.js +154 -0
  898. package/dist/seo/sources/damcrawler-crawl-engine.js.map +1 -0
  899. package/dist/seo/sources/damcrawler-serp-provider.d.ts +75 -0
  900. package/dist/seo/sources/damcrawler-serp-provider.d.ts.map +1 -0
  901. package/dist/seo/sources/damcrawler-serp-provider.js +60 -0
  902. package/dist/seo/sources/damcrawler-serp-provider.js.map +1 -0
  903. package/dist/seo/sources/dataforseo-adapter.d.ts +46 -0
  904. package/dist/seo/sources/dataforseo-adapter.d.ts.map +1 -0
  905. package/dist/seo/sources/dataforseo-adapter.js +335 -0
  906. package/dist/seo/sources/dataforseo-adapter.js.map +1 -0
  907. package/dist/seo/sources/dataforseo-serp-provider.d.ts +30 -0
  908. package/dist/seo/sources/dataforseo-serp-provider.d.ts.map +1 -0
  909. package/dist/seo/sources/dataforseo-serp-provider.js +20 -0
  910. package/dist/seo/sources/dataforseo-serp-provider.js.map +1 -0
  911. package/dist/seo/sources/engine-scrape-parser-chatgpt.d.ts +62 -0
  912. package/dist/seo/sources/engine-scrape-parser-chatgpt.d.ts.map +1 -0
  913. package/dist/seo/sources/engine-scrape-parser-chatgpt.js +72 -0
  914. package/dist/seo/sources/engine-scrape-parser-chatgpt.js.map +1 -0
  915. package/dist/seo/sources/engine-scrape-parser-perplexity.d.ts +10 -0
  916. package/dist/seo/sources/engine-scrape-parser-perplexity.d.ts.map +1 -0
  917. package/dist/seo/sources/engine-scrape-parser-perplexity.js +72 -0
  918. package/dist/seo/sources/engine-scrape-parser-perplexity.js.map +1 -0
  919. package/dist/seo/sources/gsc-adapter.d.ts +64 -0
  920. package/dist/seo/sources/gsc-adapter.d.ts.map +1 -0
  921. package/dist/seo/sources/gsc-adapter.js +221 -0
  922. package/dist/seo/sources/gsc-adapter.js.map +1 -0
  923. package/dist/seo/sources/local-export.d.ts +53 -0
  924. package/dist/seo/sources/local-export.d.ts.map +1 -0
  925. package/dist/seo/sources/local-export.js +307 -0
  926. package/dist/seo/sources/local-export.js.map +1 -0
  927. package/dist/seo/sources/mention-citation-extractor.d.ts +136 -0
  928. package/dist/seo/sources/mention-citation-extractor.d.ts.map +1 -0
  929. package/dist/seo/sources/mention-citation-extractor.js +272 -0
  930. package/dist/seo/sources/mention-citation-extractor.js.map +1 -0
  931. package/dist/seo/sources/scrape-arm-provider.d.ts +109 -0
  932. package/dist/seo/sources/scrape-arm-provider.d.ts.map +1 -0
  933. package/dist/seo/sources/scrape-arm-provider.js +129 -0
  934. package/dist/seo/sources/scrape-arm-provider.js.map +1 -0
  935. package/dist/seo/tracked-prompt-store.d.ts +33 -0
  936. package/dist/seo/tracked-prompt-store.d.ts.map +1 -0
  937. package/dist/seo/tracked-prompt-store.js +68 -0
  938. package/dist/seo/tracked-prompt-store.js.map +1 -0
  939. package/dist/seo/types.d.ts +128 -0
  940. package/dist/seo/types.d.ts.map +1 -0
  941. package/dist/seo/types.js +14 -0
  942. package/dist/seo/types.js.map +1 -0
  943. package/dist/seo/verifier.d.ts +34 -0
  944. package/dist/seo/verifier.d.ts.map +1 -0
  945. package/dist/seo/verifier.js +204 -0
  946. package/dist/seo/verifier.js.map +1 -0
  947. package/dist/seo/workflow-capabilities.d.ts +26 -0
  948. package/dist/seo/workflow-capabilities.d.ts.map +1 -0
  949. package/dist/seo/workflow-capabilities.js +12 -0
  950. package/dist/seo/workflow-capabilities.js.map +1 -0
  951. package/dist/state/facts.d.ts +114 -0
  952. package/dist/state/facts.d.ts.map +1 -0
  953. package/dist/state/facts.js +218 -0
  954. package/dist/state/facts.js.map +1 -0
  955. package/dist/state/guidance.d.ts +37 -0
  956. package/dist/state/guidance.d.ts.map +1 -0
  957. package/dist/state/guidance.js +144 -0
  958. package/dist/state/guidance.js.map +1 -0
  959. package/dist/state/history.d.ts +2 -2
  960. package/dist/state/index.d.ts +2 -2
  961. package/dist/state/index.d.ts.map +1 -1
  962. package/dist/state/index.js +2 -2
  963. package/dist/state/index.js.map +1 -1
  964. package/dist/state/memory.d.ts +43 -11
  965. package/dist/state/memory.d.ts.map +1 -1
  966. package/dist/state/memory.js +93 -15
  967. package/dist/state/memory.js.map +1 -1
  968. package/dist/state/outline-state.d.ts +0 -12
  969. package/dist/state/outline-state.d.ts.map +1 -1
  970. package/dist/state/outline-state.js +1 -18
  971. package/dist/state/outline-state.js.map +1 -1
  972. package/dist/state/pause.d.ts +47 -0
  973. package/dist/state/pause.d.ts.map +1 -0
  974. package/dist/state/pause.js +146 -0
  975. package/dist/state/pause.js.map +1 -0
  976. package/dist/state/security-audit-state.d.ts +20 -0
  977. package/dist/state/security-audit-state.d.ts.map +1 -0
  978. package/dist/state/security-audit-state.js +59 -0
  979. package/dist/state/security-audit-state.js.map +1 -0
  980. package/dist/state/sprint-state.d.ts +8 -0
  981. package/dist/state/sprint-state.d.ts.map +1 -1
  982. package/dist/state/sprint-state.js +32 -1
  983. package/dist/state/sprint-state.js.map +1 -1
  984. package/dist/teams/registry.d.ts +16 -0
  985. package/dist/teams/registry.d.ts.map +1 -0
  986. package/dist/teams/registry.js +70 -0
  987. package/dist/teams/registry.js.map +1 -0
  988. package/dist/teams/types.d.ts +25 -0
  989. package/dist/teams/types.d.ts.map +1 -0
  990. package/dist/teams/types.js +2 -0
  991. package/dist/teams/types.js.map +1 -0
  992. package/dist/telegram/bot.d.ts +137 -0
  993. package/dist/telegram/bot.d.ts.map +1 -0
  994. package/dist/telegram/bot.js +323 -0
  995. package/dist/telegram/bot.js.map +1 -0
  996. package/dist/telegram/digest.d.ts +19 -0
  997. package/dist/telegram/digest.d.ts.map +1 -0
  998. package/dist/telegram/digest.js +23 -0
  999. package/dist/telegram/digest.js.map +1 -0
  1000. package/dist/telegram/fleet-view.d.ts +38 -0
  1001. package/dist/telegram/fleet-view.d.ts.map +1 -0
  1002. package/dist/telegram/fleet-view.js +98 -0
  1003. package/dist/telegram/fleet-view.js.map +1 -0
  1004. package/dist/telegram/handlers/approvals.d.ts +61 -0
  1005. package/dist/telegram/handlers/approvals.d.ts.map +1 -0
  1006. package/dist/telegram/handlers/approvals.js +122 -0
  1007. package/dist/telegram/handlers/approvals.js.map +1 -0
  1008. package/dist/telegram/handlers/capture.d.ts +43 -0
  1009. package/dist/telegram/handlers/capture.d.ts.map +1 -0
  1010. package/dist/telegram/handlers/capture.js +51 -0
  1011. package/dist/telegram/handlers/capture.js.map +1 -0
  1012. package/dist/telegram/handlers/prioritize.d.ts +50 -0
  1013. package/dist/telegram/handlers/prioritize.d.ts.map +1 -0
  1014. package/dist/telegram/handlers/prioritize.js +99 -0
  1015. package/dist/telegram/handlers/prioritize.js.map +1 -0
  1016. package/dist/telegram/handlers/upload.d.ts +105 -0
  1017. package/dist/telegram/handlers/upload.d.ts.map +1 -0
  1018. package/dist/telegram/handlers/upload.js +149 -0
  1019. package/dist/telegram/handlers/upload.js.map +1 -0
  1020. package/dist/telegram/keyboard.d.ts +48 -0
  1021. package/dist/telegram/keyboard.d.ts.map +1 -0
  1022. package/dist/telegram/keyboard.js +81 -0
  1023. package/dist/telegram/keyboard.js.map +1 -0
  1024. package/dist/telegram/outbound.d.ts +77 -0
  1025. package/dist/telegram/outbound.d.ts.map +1 -0
  1026. package/dist/telegram/outbound.js +45 -0
  1027. package/dist/telegram/outbound.js.map +1 -0
  1028. package/dist/telegram/router.d.ts +46 -0
  1029. package/dist/telegram/router.d.ts.map +1 -0
  1030. package/dist/telegram/router.js +63 -0
  1031. package/dist/telegram/router.js.map +1 -0
  1032. package/dist/telegram/streaming.d.ts +36 -0
  1033. package/dist/telegram/streaming.d.ts.map +1 -0
  1034. package/dist/telegram/streaming.js +55 -0
  1035. package/dist/telegram/streaming.js.map +1 -0
  1036. package/dist/telegram/whitelist.d.ts +20 -0
  1037. package/dist/telegram/whitelist.d.ts.map +1 -0
  1038. package/dist/telegram/whitelist.js +34 -0
  1039. package/dist/telegram/whitelist.js.map +1 -0
  1040. package/dist/utils/git.d.ts +0 -6
  1041. package/dist/utils/git.d.ts.map +1 -1
  1042. package/dist/utils/git.js +0 -19
  1043. package/dist/utils/git.js.map +1 -1
  1044. package/dist/utils/index.d.ts +1 -1
  1045. package/dist/utils/index.d.ts.map +1 -1
  1046. package/dist/utils/index.js +1 -1
  1047. package/dist/utils/index.js.map +1 -1
  1048. package/dist/vault/conventions.d.ts +23 -0
  1049. package/dist/vault/conventions.d.ts.map +1 -0
  1050. package/dist/vault/conventions.js +22 -0
  1051. package/dist/vault/conventions.js.map +1 -0
  1052. package/dist/vault/frontmatter.d.ts +47 -0
  1053. package/dist/vault/frontmatter.d.ts.map +1 -0
  1054. package/dist/vault/frontmatter.js +149 -0
  1055. package/dist/vault/frontmatter.js.map +1 -0
  1056. package/dist/vault/index-map.d.ts +35 -0
  1057. package/dist/vault/index-map.d.ts.map +1 -0
  1058. package/dist/vault/index-map.js +67 -0
  1059. package/dist/vault/index-map.js.map +1 -0
  1060. package/dist/vault/mcp-adapter.d.ts +96 -0
  1061. package/dist/vault/mcp-adapter.d.ts.map +1 -0
  1062. package/dist/vault/mcp-adapter.js +176 -0
  1063. package/dist/vault/mcp-adapter.js.map +1 -0
  1064. package/dist/vault/note-io.d.ts +29 -0
  1065. package/dist/vault/note-io.d.ts.map +1 -0
  1066. package/dist/vault/note-io.js +44 -0
  1067. package/dist/vault/note-io.js.map +1 -0
  1068. package/dist/vault/profile.d.ts +35 -0
  1069. package/dist/vault/profile.d.ts.map +1 -0
  1070. package/dist/vault/profile.js +50 -0
  1071. package/dist/vault/profile.js.map +1 -0
  1072. package/dist/vault/reindex.d.ts +55 -0
  1073. package/dist/vault/reindex.d.ts.map +1 -0
  1074. package/dist/vault/reindex.js +69 -0
  1075. package/dist/vault/reindex.js.map +1 -0
  1076. package/dist/vault/types.d.ts +25 -0
  1077. package/dist/vault/types.d.ts.map +1 -0
  1078. package/dist/vault/types.js +9 -0
  1079. package/dist/vault/types.js.map +1 -0
  1080. package/package.json +22 -4
  1081. package/scripts/sync-targets.json +2 -1
  1082. package/skills/bober.design/SKILL.md +190 -0
  1083. package/skills/bober.design/references/1-anti-slop.md +102 -0
  1084. package/skills/bober.design/references/2-design-brief.md +84 -0
  1085. package/skills/bober.design/references/3-critique-rubric.md +62 -0
  1086. package/skills/bober.design/references/4-copy-guide.md +43 -0
  1087. package/skills/bober.plan/SKILL.md +15 -1
  1088. package/skills/bober.run/SKILL.md +7 -4
  1089. package/skills/bober.security-anchor/SKILL.md +172 -0
  1090. package/skills/bober.security-audit/SKILL.md +288 -0
  1091. package/skills/bober.security-dex-backend/SKILL.md +306 -0
  1092. package/skills/bober.security-generic/SKILL.md +295 -0
  1093. package/skills/bober.security-igaming/SKILL.md +290 -0
  1094. package/skills/bober.security-node/SKILL.md +267 -0
  1095. package/skills/bober.security-payments/SKILL.md +249 -0
  1096. package/skills/bober.security-react/SKILL.md +194 -0
  1097. package/skills/bober.security-solidity/SKILL.md +306 -0
  1098. package/skills/bober.seo/SKILL.md +132 -0
  1099. package/skills/bober.seo-ai-visibility/SKILL.md +110 -0
  1100. package/skills/bober.seo-content-decay/SKILL.md +99 -0
  1101. package/skills/bober.seo-generic/SKILL.md +173 -0
  1102. package/skills/bober.seo-internal-linking/SKILL.md +87 -0
  1103. package/skills/bober.seo-parasite-watch/SKILL.md +121 -0
  1104. package/skills/bober.seo-rank-track/SKILL.md +98 -0
  1105. package/skills/bober.seo-schema-audit/SKILL.md +97 -0
  1106. package/skills/bober.seo-technical-audit/SKILL.md +113 -0
  1107. package/skills/bober.seo-topical-map/SKILL.md +100 -0
  1108. package/skills/bober.seo-verticals/SKILL.md +133 -0
  1109. package/skills/bober.using-bober/SKILL.md +1 -0
@@ -0,0 +1,68 @@
1
+ import type { BoberConfig } from "../config/schema.js";
2
+ import type { SprintContract } from "../contracts/sprint-contract.js";
3
+ import type { EvaluationRunResult } from "../evaluators/registry.js";
4
+ import type { ReviewResult } from "./code-reviewer-agent.js";
5
+ import type { SecurityAuditResult, SecurityFinding } from "./security-audit-types.js";
6
+ import type { SecurityDiffProvider } from "./security-knowledge/diff-provider.js";
7
+ import type { SecurityVerifier } from "./security-verifier-agent.js";
8
+ /**
9
+ * Injectable dependencies for `runSecurityAudit`. `diffProvider` (sprint 6)
10
+ * and `verifier` (sprint 8) so tests never shell real git or spawn a second
11
+ * real LLM loop; both default to the real implementations. Appended so all
12
+ * existing positional callers stay byte-compatible.
13
+ */
14
+ export interface SecurityAuditDeps {
15
+ diffProvider?: SecurityDiffProvider;
16
+ verifier?: SecurityVerifier;
17
+ }
18
+ /**
19
+ * Run the bober-security-auditor subagent for a stack-aware security audit.
20
+ *
21
+ * Mirrors runCodeReviewer's structure (prompt build → runAgenticLoop with
22
+ * read-only tools → parse → persist) but the parse is FAIL-CLOSED: an
23
+ * unparseable auditor response resolves with `parsed:false` and a forced
24
+ * `verdict:'blocked'` — it never silently degrades to a clean pass the way
25
+ * the advisory code reviewer's fallback does.
26
+ *
27
+ * Two distinct failure modes (per arch-20260712-security-audit-agent-team
28
+ * API contracts):
29
+ * - Provider/network/budget error → THROWS (propagates to the caller).
30
+ * - Unparseable auditor output → RESOLVES with `parsed:false`, `verdict:'blocked'`.
31
+ *
32
+ * @param contract The sprint contract to audit.
33
+ * @param evaluation The evaluation result when running in-pipeline (post-evaluation),
34
+ * or `null` for standalone mode — the evaluation-context section of
35
+ * the prompt is omitted entirely when null.
36
+ * @param projectRoot Absolute path to the project root.
37
+ * @param config The resolved bober configuration (reads `config.security` and
38
+ * `config.project.stack`; both optional).
39
+ * @param priors Deterministic scanner findings supplied directly by the caller.
40
+ * Combined with any findings produced internally by
41
+ * `runScannerPreFilter` when `config.security.scanners` is
42
+ * non-empty; the combined list is rendered into a "ground
43
+ * truth priors" prompt section when non-empty. Defaults to [].
44
+ * @param deps Injectable dependencies — the diff provider (sprint 6,
45
+ * defaults to `securityDiffProvider`) and the verifier
46
+ * (sprint 8, defaults to `runSecurityVerifier`). Appended
47
+ * last so all existing positional callers stay byte-compatible.
48
+ * @returns A SecurityAuditResult, already persisted via saveSecurityAudit.
49
+ */
50
+ export declare function runSecurityAudit(contract: SprintContract, evaluation: EvaluationRunResult | null, projectRoot: string, config: BoberConfig, priors?: SecurityFinding[], deps?: SecurityAuditDeps): Promise<SecurityAuditResult>;
51
+ /**
52
+ * Parse the security auditor's response into a ReviewResult.
53
+ *
54
+ * Reuses the same resilient extraction ladder as
55
+ * code-reviewer-agent.ts:parseReviewResult (direct parse → markdown-fence →
56
+ * first-`{`-to-last-`}` slice), but INVERTS its fallback: on any parse
57
+ * failure (garbage text, truncated JSON, non-object shape), this returns
58
+ * `parsed:false` with an empty review — never a silently "clean" result.
59
+ * The caller forces `verdict:'blocked'` whenever `parsed` is false.
60
+ *
61
+ * A genuinely clean audit (empty critical, well-formed JSON) is
62
+ * `parsed:true` — distinguishable from the parse-failure case.
63
+ */
64
+ export declare function parseSecurityAuditResult(text: string, contractId: string, specId: string): {
65
+ review: ReviewResult;
66
+ parsed: boolean;
67
+ };
68
+ //# sourceMappingURL=security-auditor-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-auditor-agent.d.ts","sourceRoot":"","sources":["../../src/orchestrator/security-auditor-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAa,MAAM,2BAA2B,CAAC;AAajG,OAAO,KAAK,EAAa,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAG7F,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,8BAA8B,CAAC;AAIrF;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAeD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,mBAAmB,GAAG,IAAI,EACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,MAAM,GAAE,eAAe,EAAO,EAC9B,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,mBAAmB,CAAC,CAmO9B;AAsKD;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAuE3C"}
@@ -0,0 +1,482 @@
1
+ import { deriveVerdict } from "./security-audit-types.js";
2
+ import { createClient } from "../providers/factory.js";
3
+ import { resolveModel } from "./model-resolver.js";
4
+ import { assembleSystemPrompt } from "./agent-loader.js";
5
+ import { resolveRoleTools, getGraphState, getGraphDeps } from "./tools/index.js";
6
+ import { runAgenticLoop } from "./agentic-loop.js";
7
+ import { budgetFromMaxUsd } from "./workflow/budget.js";
8
+ import { saveSecurityAudit } from "../state/security-audit-state.js";
9
+ import { ALL_VULN_CLASSES } from "./stack-knowledge.js";
10
+ import { resolveStackSecurityContext } from "./security-knowledge/resolver.js";
11
+ import { SecurityKnowledgeIndex } from "./security-knowledge/index.js";
12
+ import { runScannerPreFilter, isNetworkScanner } from "./security-scanners.js";
13
+ import { securityDiffProvider, extractDiffKeywords } from "./security-knowledge/diff-provider.js";
14
+ import { inspectSupplyChain } from "./security-knowledge/supply-chain-inspector.js";
15
+ import { runSecurityVerifier } from "./security-verifier-agent.js";
16
+ import { logger } from "../utils/logger.js";
17
+ // bober: one memoised index per process (ADR-7, no runtime invalidation) —
18
+ // swap for an injectable dependency if per-request skill reloading is ever needed.
19
+ let sharedSecurityKnowledgeIndex = null;
20
+ function getSecurityKnowledgeIndex() {
21
+ if (!sharedSecurityKnowledgeIndex) {
22
+ sharedSecurityKnowledgeIndex = new SecurityKnowledgeIndex();
23
+ }
24
+ return sharedSecurityKnowledgeIndex;
25
+ }
26
+ // ── Main ───────────────────────────────────────────────────────────
27
+ /**
28
+ * Run the bober-security-auditor subagent for a stack-aware security audit.
29
+ *
30
+ * Mirrors runCodeReviewer's structure (prompt build → runAgenticLoop with
31
+ * read-only tools → parse → persist) but the parse is FAIL-CLOSED: an
32
+ * unparseable auditor response resolves with `parsed:false` and a forced
33
+ * `verdict:'blocked'` — it never silently degrades to a clean pass the way
34
+ * the advisory code reviewer's fallback does.
35
+ *
36
+ * Two distinct failure modes (per arch-20260712-security-audit-agent-team
37
+ * API contracts):
38
+ * - Provider/network/budget error → THROWS (propagates to the caller).
39
+ * - Unparseable auditor output → RESOLVES with `parsed:false`, `verdict:'blocked'`.
40
+ *
41
+ * @param contract The sprint contract to audit.
42
+ * @param evaluation The evaluation result when running in-pipeline (post-evaluation),
43
+ * or `null` for standalone mode — the evaluation-context section of
44
+ * the prompt is omitted entirely when null.
45
+ * @param projectRoot Absolute path to the project root.
46
+ * @param config The resolved bober configuration (reads `config.security` and
47
+ * `config.project.stack`; both optional).
48
+ * @param priors Deterministic scanner findings supplied directly by the caller.
49
+ * Combined with any findings produced internally by
50
+ * `runScannerPreFilter` when `config.security.scanners` is
51
+ * non-empty; the combined list is rendered into a "ground
52
+ * truth priors" prompt section when non-empty. Defaults to [].
53
+ * @param deps Injectable dependencies — the diff provider (sprint 6,
54
+ * defaults to `securityDiffProvider`) and the verifier
55
+ * (sprint 8, defaults to `runSecurityVerifier`). Appended
56
+ * last so all existing positional callers stay byte-compatible.
57
+ * @returns A SecurityAuditResult, already persisted via saveSecurityAudit.
58
+ */
59
+ export async function runSecurityAudit(contract, evaluation, projectRoot, config, priors = [], deps = {}) {
60
+ const contractId = contract.contractId;
61
+ logger.sprint(contractId, `Security audit: ${contract.title}`);
62
+ const securityModel = config.security?.model ?? "opus";
63
+ const model = resolveModel(securityModel);
64
+ const maxTurns = config.security?.maxTurns ?? 20;
65
+ // Security auditor reuses the "curator" role's tool set — read-only,
66
+ // no execution (read_file, glob, grep). It never gets bash, write, or
67
+ // edit tools (nonGoals[3]): unlike the evaluator/code-reviewer roles,
68
+ // the auditor must not be able to run shell commands at all.
69
+ const graphState = getGraphState(config);
70
+ const graphDeps = graphState.engineHealth === "ready" ? getGraphDeps() : undefined;
71
+ const toolSet = resolveRoleTools("curator", projectRoot, graphState, graphDeps ?? undefined);
72
+ const systemPrompt = await assembleSystemPrompt("curator", "bober-security-auditor", projectRoot, graphState);
73
+ const client = createClient(config.security?.provider ?? null, config.security?.endpoint ?? null, config.security?.providerConfig, securityModel, "SecurityAuditor");
74
+ const knowledgeIndex = getSecurityKnowledgeIndex();
75
+ await knowledgeIndex.load();
76
+ // Sprint-6: compute the real diff ONCE (opt-in via config.security.diff.mode
77
+ // === 'git-diff'; default 'estimated-files' keeps today's exact behavior).
78
+ // The diff is read-only input to the resolver/selector/finder — git runs
79
+ // ONLY here, in orchestrator Node, never as an auditor tool (ADR-5).
80
+ let changedPaths = contract.estimatedFiles;
81
+ let diffKeywords = [];
82
+ let auditDiff;
83
+ if (config.security?.diff?.mode === "git-diff") {
84
+ const provider = deps.diffProvider ?? securityDiffProvider;
85
+ const diffAbort = new AbortController();
86
+ const diffTimer = setTimeout(() => diffAbort.abort(), config.security?.timeoutMs ?? 300_000);
87
+ try {
88
+ auditDiff = await provider.compute({
89
+ projectRoot,
90
+ baseRef: config.security.diff.baseRef,
91
+ expandWithGraph: config.security.diff.expandWithGraph,
92
+ signal: diffAbort.signal,
93
+ config,
94
+ });
95
+ }
96
+ finally {
97
+ clearTimeout(diffTimer);
98
+ }
99
+ // Empty diff (no changes / provider failure) falls back to estimatedFiles
100
+ // — no regression from today's behavior (sc-6-5).
101
+ const files = auditDiff.changedFiles.map((f) => f.path);
102
+ if (files.length > 0) {
103
+ changedPaths = files;
104
+ diffKeywords = extractDiffKeywords(auditDiff.changedFiles);
105
+ }
106
+ }
107
+ const ctx = await resolveStackSecurityContext({
108
+ stack: config.project.stack,
109
+ changedPaths,
110
+ diffKeywords,
111
+ index: knowledgeIndex,
112
+ });
113
+ // Sprint-5 seam: when scanners are configured, run the deterministic
114
+ // pre-filter INSIDE the audit path (under its own AbortController keyed to
115
+ // the same timeout the gate time-boxes the whole audit against — ADR-4)
116
+ // and fold its findings in as additional priors. Absent scanners config,
117
+ // this is a pure no-op: zero child processes spawned.
118
+ const configuredScanners = config.security?.scanners ?? [];
119
+ let effectivePriors = priors;
120
+ if (configuredScanners.length > 0) {
121
+ const scannerAbort = new AbortController();
122
+ const scannerTimer = setTimeout(() => scannerAbort.abort(), config.security?.timeoutMs ?? 300_000);
123
+ try {
124
+ const scannerPriors = await runScannerPreFilter({
125
+ scanners: configuredScanners,
126
+ projectRoot,
127
+ signal: scannerAbort.signal,
128
+ });
129
+ effectivePriors = [...priors, ...scannerPriors];
130
+ }
131
+ finally {
132
+ clearTimeout(scannerTimer);
133
+ }
134
+ }
135
+ // Sprint-7 seam (supply-chain axis, ADR-4): when supplyChain.enabled, fold
136
+ // both the (network-gated) scanner pre-filter and the always-available
137
+ // OFFLINE diff inspector into effectivePriors. Network-capable scanner
138
+ // kinds (npm-audit/osv-scanner) only run when egress.onlineResearch is
139
+ // explicitly true (default false); gitleaks and the offline inspector run
140
+ // regardless of egress — neither one touches the network. The offline
141
+ // inspector runs even when zero external scanners are configured; it is
142
+ // itself the "always-available" half of the axis.
143
+ const supplyChain = config.security?.supplyChain;
144
+ if (supplyChain?.enabled) {
145
+ const scAbort = new AbortController();
146
+ const scTimer = setTimeout(() => scAbort.abort(), config.security?.timeoutMs ?? 300_000);
147
+ try {
148
+ const onlineOk = config.security?.egress?.onlineResearch === true;
149
+ const scScanners = onlineOk
150
+ ? (supplyChain.scanners ?? [])
151
+ : (supplyChain.scanners ?? []).filter((s) => !isNetworkScanner(s));
152
+ const scannerPriors = scScanners.length > 0
153
+ ? await runScannerPreFilter({ scanners: scScanners, projectRoot, signal: scAbort.signal })
154
+ : [];
155
+ const inspectorPriors = auditDiff
156
+ ? await inspectSupplyChain({ projectRoot, diff: auditDiff, signal: scAbort.signal })
157
+ : [];
158
+ effectivePriors = [...effectivePriors, ...scannerPriors, ...inspectorPriors];
159
+ }
160
+ finally {
161
+ clearTimeout(scTimer);
162
+ }
163
+ }
164
+ const userMessage = buildUserMessage(contract, evaluation, projectRoot, ctx.stackLabel, ctx.skillName, ctx.promptFragment, effectivePriors, auditDiff);
165
+ logger.info(`Calling security auditor model (${securityModel} → ${model})...`);
166
+ const budget = budgetFromMaxUsd(config.security?.budget?.maxUsd);
167
+ const result = await runAgenticLoop({
168
+ client,
169
+ model,
170
+ systemPrompt,
171
+ userMessage,
172
+ tools: toolSet.schemas,
173
+ toolHandlers: toolSet.handlers,
174
+ maxTurns,
175
+ maxTokens: 16384,
176
+ ...(budget !== undefined ? { budget } : {}),
177
+ onToolUse: (name, input) => {
178
+ const inp = input;
179
+ const inputStr = JSON.stringify(inp).slice(0, 120);
180
+ logger.debug(` [security-auditor] ${name}(${inputStr})`);
181
+ },
182
+ });
183
+ logger.debug(`Security auditor completed in ${result.turnsUsed} turns (${result.toolsCalled.length} tool calls)`);
184
+ const { review: finderReview, parsed } = parseSecurityAuditResult(result.finalText, contractId, contract.specId);
185
+ // Sprint-8 seam (adversarial finder->verifier stage, ADR-2/ADR-6
186
+ // default-off): when enabled, a SECOND read-only LLM pass in a fresh,
187
+ // contract-free context is fed ONLY finderReview.critical+important and
188
+ // told to disprove each one. It may only downgrade/drop — never promote.
189
+ // The verifier owns its OWN AbortController keyed to the same
190
+ // config.security.timeoutMs the rest of this audit's sub-stages use —
191
+ // that is the "shared time-box" in practice (both live inside the gate's
192
+ // own Promise.race). A parse-failure/error/abort in the verifier is
193
+ // fail-closed: `review` stays `finderReview`, criticals unchanged.
194
+ let review = finderReview;
195
+ if (parsed && config.security?.verifier?.enabled === true) {
196
+ const verifier = deps.verifier ?? runSecurityVerifier;
197
+ const verifierAbort = new AbortController();
198
+ const verifierTimer = setTimeout(() => verifierAbort.abort(), config.security?.timeoutMs ?? 300_000);
199
+ try {
200
+ const verifierResult = await verifier.verify({
201
+ findings: [...finderReview.critical, ...finderReview.important],
202
+ diff: auditDiff,
203
+ projectRoot,
204
+ config,
205
+ signal: verifierAbort.signal,
206
+ });
207
+ review = foldVerifierResult(finderReview, verifierResult);
208
+ }
209
+ finally {
210
+ clearTimeout(verifierTimer);
211
+ }
212
+ }
213
+ // THE inversion (sc-2-2): verdict is only ever derived from a genuinely
214
+ // parsed review. A parse failure forces 'blocked' — never a silent pass
215
+ // from an empty fallback review. Derived on the (possibly verifier-folded)
216
+ // review — deriveVerdict itself is UNCHANGED.
217
+ const verdict = parsed ? deriveVerdict(review) : "blocked";
218
+ const auditResult = {
219
+ review,
220
+ stack: ctx.stackLabel,
221
+ // True when scanners were configured (even if they all yielded [], the
222
+ // deterministic pre-filter genuinely ran) OR when the caller-supplied
223
+ // `priors` were non-empty (sprint-2 formula — priors passed directly with
224
+ // no scanners configured still counts as "a scanner ran" from the
225
+ // caller's perspective).
226
+ scannerRan: configuredScanners.length > 0 || effectivePriors.length > 0,
227
+ parsed,
228
+ verdict,
229
+ };
230
+ await saveSecurityAudit(projectRoot, contractId, auditResult);
231
+ logger.info(`Security audit complete: verdict=${verdict}, parsed=${parsed}, ${review.critical.length} critical finding(s)`);
232
+ return auditResult;
233
+ }
234
+ // ── Sprint-8: verifier fold (downgrade-only, fail-closed) ──────────
235
+ /**
236
+ * Folds a `VerifierResult` into the finder's `ReviewResult`.
237
+ *
238
+ * Fail-closed: `v.ran === false` (parse-failure/error/refusal/abort) returns
239
+ * `finderReview` completely UNCHANGED — the finder's criticals are kept.
240
+ *
241
+ * Downgrade-only on success: `verified` findings stay at their original
242
+ * severity; `downgraded` findings move `critical`->`important`; `dropped`
243
+ * findings are removed from wherever they were (critical or important). The
244
+ * new `critical` set is therefore always a strict SUBSET of the finder's
245
+ * `critical` — nothing is ever promoted or added. `minor` and
246
+ * `approvedAreas` pass through byte-untouched: the verifier is never shown
247
+ * them, so an `approvedArea` can never be re-opened (sc-8-4).
248
+ *
249
+ * Matches by object identity: `verifier.verify` is fed and returns the SAME
250
+ * `SecurityFinding` object references it was given (see
251
+ * `security-verifier-agent.ts:resolveFindingRef`), so a `Set` membership
252
+ * check against `finderReview.critical`/`.important` is exact.
253
+ */
254
+ function foldVerifierResult(finderReview, v) {
255
+ if (!v.ran)
256
+ return finderReview;
257
+ const dropped = new Set(v.dropped);
258
+ const downgraded = new Set(v.downgraded);
259
+ return {
260
+ ...finderReview,
261
+ critical: finderReview.critical.filter((c) => !dropped.has(c) && !downgraded.has(c)),
262
+ important: [
263
+ ...finderReview.important.filter((i) => !dropped.has(i)),
264
+ ...finderReview.critical.filter((c) => downgraded.has(c)),
265
+ ],
266
+ minor: finderReview.minor,
267
+ approvedAreas: finderReview.approvedAreas,
268
+ };
269
+ }
270
+ // ── Prompt assembly ────────────────────────────────────────────────
271
+ /**
272
+ * Renders the "# Changed files (real diff)" section (Pattern D — empty
273
+ * string when there's no diff, so git-diff-mode-with-no-changes produces a
274
+ * prompt byte-identical to estimated-files mode, sc-6-5).
275
+ */
276
+ function renderChangedFilesSection(auditDiff) {
277
+ if (!auditDiff || auditDiff.changedFiles.length === 0)
278
+ return "";
279
+ const filesText = auditDiff.changedFiles
280
+ .map((f) => {
281
+ const hunksText = f.hunks.length > 0 ? f.hunks.map((h) => h.content).join("\n\n") : "(no hunks captured)";
282
+ return `## ${f.path} (${f.status})\n\n${hunksText}`;
283
+ })
284
+ .join("\n\n");
285
+ const neighborhoodText = auditDiff.neighborhoodFiles.length > 0
286
+ ? `\n\nCall-graph neighborhood (files affected by the changes above):\n${auditDiff.neighborhoodFiles.join("\n")}`
287
+ : "";
288
+ const truncatedText = auditDiff.truncated
289
+ ? "\n\n(diff truncated — showing a bounded subset of changed files/hunks)"
290
+ : "";
291
+ return `# Changed files (real diff)\n\n${filesText}${neighborhoodText}${truncatedText}\n\n`;
292
+ }
293
+ function buildUserMessage(contract, evaluation, projectRoot, stackLabel, skillName, promptFragment, priors, auditDiff) {
294
+ const contractId = contract.contractId;
295
+ const contractJson = JSON.stringify(contract, null, 2);
296
+ // Standalone mode (evaluation === null) omits the evaluation-context
297
+ // section entirely — sc-2-5.
298
+ const evalSection = evaluation !== null
299
+ ? `# Evaluation Result (Already Passed)\n\n${JSON.stringify({
300
+ passed: evaluation.passed,
301
+ score: evaluation.score,
302
+ summary: evaluation.summary,
303
+ timestamp: evaluation.timestamp,
304
+ }, null, 2)}\n\n`
305
+ : "";
306
+ // Sprint-5 seam: deterministic scanner priors, rendered only when present.
307
+ const priorsSection = priors.length > 0
308
+ ? `# Deterministic scanner findings (ground truth priors)\n\n${JSON.stringify(priors, null, 2)}\n\n`
309
+ : "";
310
+ // Sprint-6 seam: real changed files/hunks, rendered only when present.
311
+ const changedFilesSection = renderChangedFilesSection(auditDiff);
312
+ const hasRealDiff = (auditDiff?.changedFiles.length ?? 0) > 0;
313
+ const scopeInstruction = hasRealDiff
314
+ ? 'Use the "# Changed files (real diff)" section above — it lists the ACTUAL changed files/hunks for ' +
315
+ "this sprint; Read each changed file in full for surrounding context, and ground findings in the " +
316
+ "real diff rather than guessing from `estimatedFiles`"
317
+ : "Use Glob to enumerate the in-scope files (the `estimatedFiles` patterns, or the relevant\n" +
318
+ " project directories when that list is empty) and Read each one in full; there is no diff\n" +
319
+ " available without Bash, so audit the CURRENT content of each in-scope file";
320
+ return `# Sprint Contract
321
+
322
+ ${contractJson}
323
+
324
+ ${evalSection}${priorsSection}${changedFilesSection}# Stack Security Context
325
+
326
+ Stack: ${stackLabel}
327
+ Skill: ${skillName ?? "none (generic taxonomy only)"}
328
+
329
+ ${promptFragment}
330
+
331
+ # Project Root
332
+
333
+ ${projectRoot}
334
+
335
+ # Context
336
+
337
+ - Contract ID: ${contractId}
338
+ - Spec ID: ${contract.specId}
339
+ - Mode: ${evaluation === null ? "standalone (no prior evaluation context)" : "in-pipeline (post-evaluation)"}
340
+
341
+ # Your Task
342
+
343
+ Audit the sprint's changes for exploitable security vulnerabilities. You have Read/Grep/Glob
344
+ only (no Bash, no git)${hasRealDiff ? ' — a real diff IS provided inline above ("# Changed files (real diff)" section)' : ""} — use them to:
345
+ 1. Read .bober/contracts/${contractId}.json for scope, including its \`estimatedFiles\` list
346
+ 2. ${scopeInstruction}
347
+ 3. Use Grep to search across the codebase for suspicious patterns (hardcoded secrets, unsafe
348
+ string interpolation into a query/shell/template, missing auth checks) that Read alone
349
+ might miss
350
+ 4. Review each file against the vulnerability taxonomy and stack-specific checklist above
351
+ 5. Produce a ReviewResult JSON, findings organised by VulnClass, cited with path+line+snippet
352
+
353
+ Output ONLY a JSON object (no markdown fences, no surrounding prose):
354
+ {
355
+ "reviewId": "security-audit-${contractId}-<ISO-timestamp>",
356
+ "contractId": "${contractId}",
357
+ "specId": "${contract.specId}",
358
+ "timestamp": "<ISO-8601>",
359
+ "summary": "<2-3 sentence overall assessment>",
360
+ "critical": [],
361
+ "important": [],
362
+ "minor": [],
363
+ "approvedAreas": []
364
+ }`;
365
+ }
366
+ // ── Fail-closed JSON parser ────────────────────────────────────────
367
+ /**
368
+ * Parse the security auditor's response into a ReviewResult.
369
+ *
370
+ * Reuses the same resilient extraction ladder as
371
+ * code-reviewer-agent.ts:parseReviewResult (direct parse → markdown-fence →
372
+ * first-`{`-to-last-`}` slice), but INVERTS its fallback: on any parse
373
+ * failure (garbage text, truncated JSON, non-object shape), this returns
374
+ * `parsed:false` with an empty review — never a silently "clean" result.
375
+ * The caller forces `verdict:'blocked'` whenever `parsed` is false.
376
+ *
377
+ * A genuinely clean audit (empty critical, well-formed JSON) is
378
+ * `parsed:true` — distinguishable from the parse-failure case.
379
+ */
380
+ export function parseSecurityAuditResult(text, contractId, specId) {
381
+ const timestamp = new Date().toISOString();
382
+ let parsedJson;
383
+ // Try direct parse
384
+ try {
385
+ parsedJson = JSON.parse(text.trim());
386
+ }
387
+ catch {
388
+ // Try extracting from markdown fences
389
+ const fenceMatch = /```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/.exec(text);
390
+ if (fenceMatch) {
391
+ try {
392
+ parsedJson = JSON.parse(fenceMatch[1].trim());
393
+ }
394
+ catch {
395
+ // Fall through
396
+ }
397
+ }
398
+ // Try finding { ... }
399
+ if (parsedJson === undefined) {
400
+ const braceStart = text.indexOf("{");
401
+ const braceEnd = text.lastIndexOf("}");
402
+ if (braceStart !== -1 && braceEnd > braceStart) {
403
+ try {
404
+ parsedJson = JSON.parse(text.slice(braceStart, braceEnd + 1));
405
+ }
406
+ catch {
407
+ // Fall through to fail-closed default below
408
+ }
409
+ }
410
+ }
411
+ }
412
+ // A JSON array is technically valid JSON but not a ReviewResult shape —
413
+ // treating it as "parsed" would manufacture a fake clean review out of the
414
+ // wrong shape. Fail-closed requires an actual object, never an array.
415
+ if (parsedJson && typeof parsedJson === "object" && !Array.isArray(parsedJson)) {
416
+ const obj = parsedJson;
417
+ const review = {
418
+ reviewId: typeof obj.reviewId === "string" ? obj.reviewId : `security-audit-${contractId}-${timestamp}`,
419
+ contractId: typeof obj.contractId === "string" ? obj.contractId : contractId,
420
+ specId: typeof obj.specId === "string" ? obj.specId : specId,
421
+ timestamp: typeof obj.timestamp === "string" ? obj.timestamp : timestamp,
422
+ summary: typeof obj.summary === "string" ? obj.summary : "No summary provided.",
423
+ critical: parseSecurityFindingArray(obj.critical),
424
+ important: parseSecurityFindingArray(obj.important),
425
+ minor: parseSecurityFindingArray(obj.minor),
426
+ approvedAreas: parseStringArray(obj.approvedAreas),
427
+ };
428
+ return { review, parsed: true };
429
+ }
430
+ // Fail-closed fallback — auditor ran but the response was NOT parseable.
431
+ // Unlike parseReviewResult's fallback, this is a signal the caller MUST
432
+ // act on: parsed:false forces verdict:'blocked', never a silent pass.
433
+ return {
434
+ review: {
435
+ reviewId: `security-audit-${contractId}-${timestamp}`,
436
+ contractId,
437
+ specId,
438
+ timestamp,
439
+ summary: "Security auditor output could not be parsed.",
440
+ critical: [],
441
+ important: [],
442
+ minor: [],
443
+ approvedAreas: [],
444
+ },
445
+ parsed: false,
446
+ };
447
+ }
448
+ function isVulnClass(value) {
449
+ return ALL_VULN_CLASSES.includes(value);
450
+ }
451
+ function parseSecurityFindingArray(raw) {
452
+ if (!Array.isArray(raw))
453
+ return [];
454
+ return raw
455
+ .filter((item) => typeof item === "object" && item !== null)
456
+ .map((item) => ({
457
+ description: typeof item.description === "string" ? item.description : "Unknown finding",
458
+ evidence: parseEvidenceArray(item.evidence),
459
+ ...(typeof item.antiPattern === "string" ? { antiPattern: item.antiPattern } : {}),
460
+ ...(typeof item.source === "string" ? { source: item.source } : {}),
461
+ ...(typeof item.vulnClass === "string" && isVulnClass(item.vulnClass)
462
+ ? { vulnClass: item.vulnClass }
463
+ : {}),
464
+ }));
465
+ }
466
+ function parseEvidenceArray(raw) {
467
+ if (!Array.isArray(raw))
468
+ return [];
469
+ return raw
470
+ .filter((item) => typeof item === "object" && item !== null)
471
+ .map((item) => ({
472
+ path: typeof item.path === "string" ? item.path : "unknown",
473
+ line: typeof item.line === "number" ? item.line : 0,
474
+ snippet: typeof item.snippet === "string" ? item.snippet : "",
475
+ }));
476
+ }
477
+ function parseStringArray(raw) {
478
+ if (!Array.isArray(raw))
479
+ return [];
480
+ return raw.filter((item) => typeof item === "string");
481
+ }
482
+ //# sourceMappingURL=security-auditor-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-auditor-agent.js","sourceRoot":"","sources":["../../src/orchestrator/security-auditor-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * The fail-closed SecurityAuditGate (spec-20260712-security-audit-agent-team,
3
+ * sprint 3, ADR-2).
4
+ *
5
+ * Thin wrapper over runSecurityAudit (sprint 2): the gate owns the
6
+ * Promise.race time-box, the rejection→'audit-error'/'timeout' mapping, the
7
+ * parsed:false→'audit-error' elevation, and the best-effort store guard
8
+ * (sc-3-6). It does NOT re-run or re-derive any auditor logic — the verdict
9
+ * comes straight from `result.verdict` (already computed via deriveVerdict
10
+ * inside runSecurityAudit).
11
+ *
12
+ * evaluateSecurityGate NEVER throws. Every failure mode (timeout, thrown
13
+ * audit error, unparseable output) resolves to `blocked:true` — an
14
+ * incomplete audit is never treated as clean (fail-closed).
15
+ *
16
+ * Sprint 6 additionally emits critical/important findings into the priority
17
+ * hub AFTER the verdict is computed and OUTSIDE the Promise.race time-box
18
+ * below, so a slow or failing hub ingest can never flip the verdict or
19
+ * manufacture a false timeout (see emitFindingsToHub).
20
+ */
21
+ import type { BoberConfig } from "../config/schema.js";
22
+ import type { SprintContract } from "../contracts/sprint-contract.js";
23
+ import type { EvaluationRunResult } from "../evaluators/registry.js";
24
+ import type { SecurityAuditResult } from "./security-audit-types.js";
25
+ import type { SecurityFindingSink } from "./security-hub.js";
26
+ export interface SecurityGateInput {
27
+ contract: SprintContract;
28
+ evaluation: EvaluationRunResult;
29
+ projectRoot: string;
30
+ config: BoberConfig;
31
+ /** Injected hub sink (tests only) — default binds ingestFinding to a real FactStore. */
32
+ findingSink?: SecurityFindingSink;
33
+ }
34
+ export type SecurityGateReason = "critical-finding" | "timeout" | "audit-error" | "clean" | "disabled";
35
+ export interface SecurityGateVerdict {
36
+ blocked: boolean;
37
+ reason: SecurityGateReason;
38
+ result?: SecurityAuditResult;
39
+ }
40
+ /**
41
+ * Evaluate the security gate for a sprint that just passed evaluation.
42
+ *
43
+ * Never throws. Resolution mapping:
44
+ * - `config.security` absent or `enabled !== true` → `{blocked:false, reason:'disabled'}`
45
+ * WITHOUT invoking the audit at all.
46
+ * - `runSecurityAudit` rejects (any error) → `{blocked:true, reason:'audit-error'}`.
47
+ * - The Promise.race timeout (`config.security.timeoutMs`) fires first →
48
+ * `{blocked:true, reason:'timeout'}`.
49
+ * - `result.parsed === false` (unparseable auditor output) →
50
+ * `{blocked:true, reason:'audit-error', result}` — checked BEFORE
51
+ * `result.verdict` so a parse failure is never mistaken for a genuine
52
+ * critical finding.
53
+ * - `result.verdict === 'blocked'` (a real critical finding) →
54
+ * `{blocked:true, reason:'critical-finding', result}`.
55
+ * - Otherwise → `{blocked:false, reason:'clean', result}`.
56
+ *
57
+ * A `saveSecurityAudit` persistence failure is caught, logged, and never
58
+ * changes the already-computed verdict in either direction (sc-3-6).
59
+ */
60
+ export declare function evaluateSecurityGate(input: SecurityGateInput): Promise<SecurityGateVerdict>;
61
+ /**
62
+ * Render a blocked SecurityGateVerdict into feedback strings for the
63
+ * generator's next retry iteration (ADR-5), phrased for a fixer. Pure
64
+ * function — no side effects, no I/O.
65
+ *
66
+ * Returns `[]` for a non-blocked verdict. Returns a single generic message
67
+ * when there is no `result` to enumerate findings from (a `timeout` or a
68
+ * rejected `audit-error` never resolves a SecurityAuditResult). Otherwise
69
+ * returns a summary line followed by one line per critical finding, capped
70
+ * to MAX_RENDERED_FINDINGS.
71
+ */
72
+ export declare function renderSecurityFeedback(verdict: SecurityGateVerdict): string[];
73
+ //# sourceMappingURL=security-gate.d.ts.map