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,80 @@
1
+ /**
2
+ * runResearchJob — deterministic multi-model research runner.
3
+ *
4
+ * Flow:
5
+ * 1. Resolve >=2 distinct provider/model blocks via model-diversity.
6
+ * 2. Query each block via the injected queryModel dep (no SDK imports here).
7
+ * 3. Collect labelled contributions.
8
+ * 4. Serialize into a markdown vault note and write it to disk.
9
+ * 5. Build one Finding and emit it via the injected findingSink EXACTLY once.
10
+ * 6. Return { notePath, models, finding }.
11
+ *
12
+ * PURE deps-injection contract:
13
+ * - queryModel — provider-agnostic; CLI binds to createClient().chat()
14
+ * - findingSink — hub writer; CLI binds to ingestFinding(store, f, {now})
15
+ * - now — injected ISO timestamp; never call new Date() in this module
16
+ * - vaultRoot — target vault dir; must be writable by the caller
17
+ *
18
+ * Clock discipline: `now` is always stamped at the CLI .action() boundary.
19
+ * This module never calls new Date() or Date.now().
20
+ */
21
+ import type { Finding } from "../hub/finding.js";
22
+ import type { RoleProviderBlock } from "../fleet/tier-policy.js";
23
+ import type { ResearchJob } from "./types.js";
24
+ import { type ModelContribution } from "./note-writer.js";
25
+ import { type RetrievalClient } from "./online-retrieval.js";
26
+ import type { ResearchEgressGuard } from "./egress.js";
27
+ /** Provider-agnostic query function — wraps a single LLM chat call. */
28
+ export type QueryModel = (block: RoleProviderBlock, prompt: string) => Promise<string>;
29
+ /** Hub Finding emitter — called exactly once after the note is written. */
30
+ export type FindingSink = (finding: Finding) => Promise<void>;
31
+ /** Injected dependencies for runResearchJob. */
32
+ export interface RunDeps {
33
+ /** Provider-agnostic query fn — NO SDK import; CLI binds to createClient(). */
34
+ queryModel: QueryModel;
35
+ /** Finding sink — CLI binds to ingestFinding(store, f, { now }). */
36
+ findingSink: FindingSink;
37
+ /** Injected ISO timestamp — stamped at the CLI boundary; never read the clock here. */
38
+ now: string;
39
+ /** Writable vault root directory. */
40
+ vaultRoot: string;
41
+ /** Research egress guard — when absent, retrieval is skipped entirely (zero outbound). */
42
+ egress?: ResearchEgressGuard;
43
+ /** Injected retrieval client — when absent, retrieval is skipped entirely. */
44
+ retrievalClient?: RetrievalClient;
45
+ }
46
+ /** Result returned by runResearchJob. */
47
+ export interface RunResult {
48
+ /** Absolute path of the written vault note. */
49
+ notePath: string;
50
+ /** Canonical model labels queried (e.g. ["openai-compat/deepseek", "openai-compat/grok"]). */
51
+ models: string[];
52
+ /** The Finding emitted to the hub. */
53
+ finding: Finding;
54
+ }
55
+ /**
56
+ * A domain-specific analyzer can post-process contributions to produce a
57
+ * custom Finding. If no analyzer is registered for a domain, the generic
58
+ * default is used (multi-model synthesis with neutral defaults).
59
+ *
60
+ * bober: registry is a simple Map; swap for a plugin loader if the number of
61
+ * domains grows beyond ~5 (the current set is research/medical/coding).
62
+ * Do NOT register src/medical/ analyzers here — that is a future sprint.
63
+ */
64
+ export type DomainAnalyzer = (job: ResearchJob, contributions: ModelContribution[], now: string) => Finding;
65
+ /**
66
+ * Register a domain-specific analyzer. The key is the domain string
67
+ * (e.g. "medical"). Overwrites any existing registration for that domain.
68
+ * Called by domain modules (never by src/medical/ in this sprint).
69
+ */
70
+ export declare function registerAnalyzer(domain: string, analyzer: DomainAnalyzer): void;
71
+ /**
72
+ * Execute one research job: query >=2 distinct model blocks, write a vault
73
+ * note, and emit exactly ONE Finding to the injected sink.
74
+ *
75
+ * @param job - The stored ResearchJob definition.
76
+ * @param deps - Injected dependencies (queryModel, findingSink, now, vaultRoot).
77
+ * @returns RunResult with the note path, model labels, and the emitted Finding.
78
+ */
79
+ export declare function runResearchJob(job: ResearchJob, deps: RunDeps): Promise<RunResult>;
80
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/research/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIvD,uEAAuE;AACvE,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEvF,2EAA2E;AAC3E,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9D,gDAAgD;AAChD,MAAM,WAAW,OAAO;IACtB,+EAA+E;IAC/E,UAAU,EAAE,UAAU,CAAC;IACvB,oEAAoE;IACpE,WAAW,EAAE,WAAW,CAAC;IACzB,uFAAuF;IACvF,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAElB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,8EAA8E;IAC9E,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,yCAAyC;AACzC,MAAM,WAAW,SAAS;IACxB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,8FAA8F;IAC9F,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;CAClB;AAID;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,GAAG,EAAE,WAAW,EAChB,aAAa,EAAE,iBAAiB,EAAE,EAClC,GAAG,EAAE,MAAM,KACR,OAAO,CAAC;AAIb;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAE/E;AA0CD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,SAAS,CAAC,CAmDpB"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * runResearchJob — deterministic multi-model research runner.
3
+ *
4
+ * Flow:
5
+ * 1. Resolve >=2 distinct provider/model blocks via model-diversity.
6
+ * 2. Query each block via the injected queryModel dep (no SDK imports here).
7
+ * 3. Collect labelled contributions.
8
+ * 4. Serialize into a markdown vault note and write it to disk.
9
+ * 5. Build one Finding and emit it via the injected findingSink EXACTLY once.
10
+ * 6. Return { notePath, models, finding }.
11
+ *
12
+ * PURE deps-injection contract:
13
+ * - queryModel — provider-agnostic; CLI binds to createClient().chat()
14
+ * - findingSink — hub writer; CLI binds to ingestFinding(store, f, {now})
15
+ * - now — injected ISO timestamp; never call new Date() in this module
16
+ * - vaultRoot — target vault dir; must be writable by the caller
17
+ *
18
+ * Clock discipline: `now` is always stamped at the CLI .action() boundary.
19
+ * This module never calls new Date() or Date.now().
20
+ */
21
+ import { mkdir, writeFile } from "node:fs/promises";
22
+ import { dirname } from "node:path";
23
+ import { createHash } from "node:crypto";
24
+ import { diverseBlocks, modelLabel } from "./model-diversity.js";
25
+ import { researchNotePath, serializeResearchNote, } from "./note-writer.js";
26
+ import { retrieve } from "./online-retrieval.js";
27
+ const analyzerRegistry = new Map();
28
+ /**
29
+ * Register a domain-specific analyzer. The key is the domain string
30
+ * (e.g. "medical"). Overwrites any existing registration for that domain.
31
+ * Called by domain modules (never by src/medical/ in this sprint).
32
+ */
33
+ export function registerAnalyzer(domain, analyzer) {
34
+ analyzerRegistry.set(domain, analyzer);
35
+ }
36
+ // ── Helpers ───────────────────────────────────────────────────────────
37
+ /** Derive a content-stable Finding id from domain|title|kind. */
38
+ function deriveFindingId(domain, title, kind) {
39
+ return createHash("sha256")
40
+ .update(`${domain}|${title}|${kind}`)
41
+ .digest("hex")
42
+ .slice(0, 16);
43
+ }
44
+ /** Build the generic Finding for a completed research run. */
45
+ function buildFinding(job, contributions, now) {
46
+ const domain = job.domain ?? "research";
47
+ const title = `Research: ${job.question}`;
48
+ const kind = "watch";
49
+ const id = deriveFindingId(domain, title, kind);
50
+ // evidence = per-model contribution labels (cited sources)
51
+ const evidence = contributions.map((c) => `${c.label}: ${c.text.slice(0, 120)}`);
52
+ return {
53
+ id,
54
+ domain,
55
+ title,
56
+ kind,
57
+ urgency: 2,
58
+ severity: 2,
59
+ evidence,
60
+ surfacedAt: now,
61
+ tags: ["research", ...(job.domain !== undefined ? [`domain:${job.domain}`] : [])],
62
+ status: "open",
63
+ };
64
+ }
65
+ // ── Runner ────────────────────────────────────────────────────────────
66
+ /**
67
+ * Execute one research job: query >=2 distinct model blocks, write a vault
68
+ * note, and emit exactly ONE Finding to the injected sink.
69
+ *
70
+ * @param job - The stored ResearchJob definition.
71
+ * @param deps - Injected dependencies (queryModel, findingSink, now, vaultRoot).
72
+ * @returns RunResult with the note path, model labels, and the emitted Finding.
73
+ */
74
+ export async function runResearchJob(job, deps) {
75
+ const { queryModel, findingSink, now, vaultRoot } = deps;
76
+ // 1. Resolve >=2 distinct provider/model blocks (sc-2-1)
77
+ const blocks = diverseBlocks(job.tier);
78
+ // Guard: need at least 2 distinct blocks to satisfy sc-2-1
79
+ if (blocks.length < 2) {
80
+ throw new Error(`model-diversity returned ${blocks.length} block(s); need >=2 for a multi-model run`);
81
+ }
82
+ // 2. Query each block with a research prompt
83
+ const prompt = `Answer the following research question concisely and accurately:\n\n${job.question}`;
84
+ const contributions = [];
85
+ for (const block of blocks) {
86
+ const text = await queryModel(block, prompt);
87
+ contributions.push({ label: modelLabel(block), text });
88
+ }
89
+ // ── Sprint 3: gated online-research retrieval (axis OFF default => skipped entirely) ──
90
+ // When egress is absent or axis is off: sourceUrls stays [] and the retrieval client
91
+ // is NEVER constructed or invoked — zero outbound requests (sc-3-3 off-path proof).
92
+ let sourceUrls = [];
93
+ if (deps.egress?.isAllowed("online-research") === true && deps.retrievalClient !== undefined) {
94
+ const sources = await retrieve(job.question, deps.retrievalClient);
95
+ sourceUrls = sources.map((s) => s.url);
96
+ }
97
+ // 3. Build the note content (PURE — no fs)
98
+ const labels = contributions.map((c) => c.label);
99
+ const noteContent = serializeResearchNote(job, labels, contributions, now, sourceUrls);
100
+ // 4. Write the note to disk (sc-2-2)
101
+ // Marker = first 12 chars of job id (stable slug for the filename)
102
+ const marker = job.id.slice(0, 12);
103
+ const notePath = researchNotePath(vaultRoot, marker, now);
104
+ await mkdir(dirname(notePath), { recursive: true });
105
+ await writeFile(notePath, noteContent, "utf-8");
106
+ // 5. Build and emit exactly ONE Finding (sc-2-3)
107
+ const domain = job.domain ?? "research";
108
+ const analyzer = analyzerRegistry.get(domain);
109
+ const finding = analyzer !== undefined
110
+ ? analyzer(job, contributions, now)
111
+ : buildFinding(job, contributions, now);
112
+ await findingSink(finding);
113
+ return { notePath, models: labels, finding };
114
+ }
115
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/research/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GAEtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAwB,MAAM,uBAAuB,CAAC;AAuDvE,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA0B,CAAC;AAE3D;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,QAAwB;IACvE,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,yEAAyE;AAEzE,iEAAiE;AACjE,SAAS,eAAe,CAAC,MAAc,EAAE,KAAa,EAAE,IAAY;IAClE,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,GAAG,MAAM,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;SACpC,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,8DAA8D;AAC9D,SAAS,YAAY,CACnB,GAAgB,EAChB,aAAkC,EAClC,GAAW;IAEX,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,UAAU,CAAC;IACxC,MAAM,KAAK,GAAG,aAAa,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAgB,CAAC;IAC9B,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAEhD,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAEjF,OAAO;QACL,EAAE;QACF,MAAM;QACN,KAAK;QACL,IAAI;QACJ,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,CAAC;QACX,QAAQ;QACR,UAAU,EAAE,GAAG;QACf,IAAI,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjF,MAAM,EAAE,MAAM;KACf,CAAC;AACJ,CAAC;AAED,yEAAyE;AAEzE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAgB,EAChB,IAAa;IAEb,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAEzD,yDAAyD;IACzD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,2DAA2D;IAC3D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,CAAC,MAAM,2CAA2C,CACrF,CAAC;IACJ,CAAC;IAED,6CAA6C;IAC7C,MAAM,MAAM,GAAG,uEAAuE,GAAG,CAAC,QAAQ,EAAE,CAAC;IACrG,MAAM,aAAa,GAAwB,EAAE,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7C,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,yFAAyF;IACzF,qFAAqF;IACrF,oFAAoF;IACpF,IAAI,UAAU,GAAa,EAAE,CAAC;IAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,iBAAiB,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC7F,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACnE,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,2CAA2C;IAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IAEvF,qCAAqC;IACrC,mEAAmE;IACnE,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAEhD,iDAAiD;IACjD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,UAAU,CAAC;IACxC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,OAAO,GACX,QAAQ,KAAK,SAAS;QACpB,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,CAAC;QACnC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;IAE5C,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAE3B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * tick — idempotent recurring research scheduler (Sprint 4).
3
+ *
4
+ * Clock discipline: `now` is always injected — never call new Date() or Date.now()
5
+ * inside this module. The wall clock is read ONLY at the CLI .action() boundary
6
+ * (mirrors src/research/runner.ts:18-19 and src/state/facts.ts:18-21).
7
+ *
8
+ * Idempotency: after a job runs, its nextDueAt is advanced to
9
+ * computeNextDue(cadence, now) which is strictly > now, so a second tick at
10
+ * the same now evaluates due === false for that job (sc-4-3).
11
+ *
12
+ * Concurrency: single-process, no lock needed (two-person personal use case;
13
+ * contract assumption L50).
14
+ */
15
+ import type { ResearchJob } from "./types.js";
16
+ /**
17
+ * Injected dependencies for tick.
18
+ * All I/O and the clock are injected so unit tests can bypass real providers
19
+ * and SQLite (mirrors RunDeps in src/research/runner.ts:46-61).
20
+ */
21
+ export interface TickDeps {
22
+ /** Injected ISO-8601 instant — stamped at the CLI boundary; never read the clock here. */
23
+ now: string;
24
+ /** Load all stored jobs. CLI binds to () => listJobs(projectRoot). */
25
+ listJobs: () => Promise<ResearchJob[]>;
26
+ /**
27
+ * Persist an advanced job.
28
+ * CLI binds to (j) => addJob(projectRoot, j) which is an in-place upsert by id
29
+ * (briefing Finding B — jobId hashes only question|createdAt, so id is stable
30
+ * even after nextDueAt/lastRunAt are set).
31
+ */
32
+ saveJob: (job: ResearchJob) => Promise<void>;
33
+ /**
34
+ * Execute one due job.
35
+ * CLI binds runResearchJob with queryModel/findingSink/now/vaultRoot already
36
+ * bound (Sprint 2 runner, invoked UNCHANGED).
37
+ */
38
+ runJob: (job: ResearchJob) => Promise<void>;
39
+ }
40
+ /** Summary of a tick invocation — which jobs ran and which were skipped. */
41
+ export interface TickResult {
42
+ /** ids of jobs that were due and ran. */
43
+ ran: string[];
44
+ /** ids of jobs skipped because nextDueAt > now. */
45
+ skipped: string[];
46
+ }
47
+ /**
48
+ * Run every due job once, advance its nextDueAt, record lastRunAt, and persist.
49
+ *
50
+ * Selection rule: a job is due when
51
+ * - nextDueAt is undefined (never scheduled → due on first tick), OR
52
+ * - Date.parse(nextDueAt) <= Date.parse(now)
53
+ *
54
+ * Order: run FIRST, then advance + persist. If runJob throws, the job is NOT
55
+ * persisted so it remains due on the next tick.
56
+ *
57
+ * Idempotency: on a second tick at the same now, all previously-run jobs have
58
+ * nextDueAt > now (computeNextDue always advances by >= 1 day), so they are skipped.
59
+ */
60
+ export declare function tick(deps: TickDeps): Promise<TickResult>;
61
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/research/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,0FAA0F;IAC1F,GAAG,EAAE,MAAM,CAAC;IACZ,sEAAsE;IACtE,QAAQ,EAAE,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACvC;;;;;OAKG;IACH,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C;;;;OAIG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,mDAAmD;IACnD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAID;;;;;;;;;;;;GAYG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAqC9D"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * tick — idempotent recurring research scheduler (Sprint 4).
3
+ *
4
+ * Clock discipline: `now` is always injected — never call new Date() or Date.now()
5
+ * inside this module. The wall clock is read ONLY at the CLI .action() boundary
6
+ * (mirrors src/research/runner.ts:18-19 and src/state/facts.ts:18-21).
7
+ *
8
+ * Idempotency: after a job runs, its nextDueAt is advanced to
9
+ * computeNextDue(cadence, now) which is strictly > now, so a second tick at
10
+ * the same now evaluates due === false for that job (sc-4-3).
11
+ *
12
+ * Concurrency: single-process, no lock needed (two-person personal use case;
13
+ * contract assumption L50).
14
+ */
15
+ import { computeNextDue } from "./cadence.js";
16
+ // ── tick ──────────────────────────────────────────────────────────────
17
+ /**
18
+ * Run every due job once, advance its nextDueAt, record lastRunAt, and persist.
19
+ *
20
+ * Selection rule: a job is due when
21
+ * - nextDueAt is undefined (never scheduled → due on first tick), OR
22
+ * - Date.parse(nextDueAt) <= Date.parse(now)
23
+ *
24
+ * Order: run FIRST, then advance + persist. If runJob throws, the job is NOT
25
+ * persisted so it remains due on the next tick.
26
+ *
27
+ * Idempotency: on a second tick at the same now, all previously-run jobs have
28
+ * nextDueAt > now (computeNextDue always advances by >= 1 day), so they are skipped.
29
+ */
30
+ export async function tick(deps) {
31
+ const { now, listJobs, saveJob, runJob } = deps;
32
+ const jobs = await listJobs();
33
+ const ran = [];
34
+ const skipped = [];
35
+ const nowMs = Date.parse(now);
36
+ for (const job of jobs) {
37
+ // A job with no nextDueAt is due immediately on first tick.
38
+ const isDue = job.nextDueAt === undefined ||
39
+ Date.parse(job.nextDueAt) <= nowMs;
40
+ if (!isDue) {
41
+ skipped.push(job.id);
42
+ continue;
43
+ }
44
+ // Run first — if runJob throws, we do not advance or persist.
45
+ await runJob(job);
46
+ // Advance scheduling fields using the injected now (no wall clock).
47
+ const advanced = {
48
+ ...job,
49
+ lastRunAt: now,
50
+ nextDueAt: computeNextDue(job.cadence, now),
51
+ };
52
+ // Persist via the injected saveJob (= addJob upsert; same id → same file).
53
+ await saveJob(advanced);
54
+ ran.push(job.id);
55
+ }
56
+ return { ran, skipped };
57
+ }
58
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/research/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAsC9C,yEAAyE;AAEzE;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAc;IACvC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAEhD,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,4DAA4D;QAC5D,MAAM,KAAK,GACT,GAAG,CAAC,SAAS,KAAK,SAAS;YAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;QAErC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,8DAA8D;QAC9D,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAElB,oEAAoE;QACpE,MAAM,QAAQ,GAAgB;YAC5B,GAAG,GAAG;YACN,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;SAC5C,CAAC;QAEF,2EAA2E;QAC3E,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;QAExB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,81 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Recurrence cadence for a research job.
4
+ *
5
+ * Representation choice: a closed string-literal enum (`"daily" | "weekly" | "monthly"`).
6
+ * This is simpler and safer than a free-form cron string for the current use-cases;
7
+ * next-due computation (Sprint 4) will map these to concrete intervals without
8
+ * requiring a cron parser. Do NOT compute next-due dates in this module — that is
9
+ * Sprint 4 (contract outOfScope L55).
10
+ */
11
+ export declare const CadenceSchema: z.ZodEnum<["daily", "weekly", "monthly"]>;
12
+ export type Cadence = z.infer<typeof CadenceSchema>;
13
+ /**
14
+ * A recurring research job definition stored as a JSON file under
15
+ * `.bober/research/jobs/<jobId>.json`.
16
+ *
17
+ * All timestamps are ISO-8601 strings; this module never reads the clock
18
+ * (mirrors src/state/facts.ts:18-21 — clock is stamped at the CLI boundary).
19
+ *
20
+ * tier vs modelSet: both are optional; the executor (Sprint 2) resolves
21
+ * which to use at runtime. Storing both allows flexible scheduling without
22
+ * commitment to either axis in Sprint 1.
23
+ *
24
+ * onlineResearch defaults to false — the online-research egress axis is not
25
+ * enabled until Sprint 3. The field is stored verbatim for forward-compatibility.
26
+ */
27
+ export declare const ResearchJobSchema: z.ZodObject<{
28
+ id: z.ZodString;
29
+ /** The research question to answer. Must be non-empty (sc-1-1). */
30
+ question: z.ZodString;
31
+ /** How often the job runs. See CadenceSchema for allowed values. */
32
+ cadence: z.ZodEnum<["daily", "weekly", "monthly"]>;
33
+ /** Difficulty tier hint (e.g. "hard") — optional, resolved at execution time. */
34
+ tier: z.ZodOptional<z.ZodString>;
35
+ /** Explicit model set override — optional, resolved at execution time. */
36
+ modelSet: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
37
+ /** Repository slug to scope the research against, if any. */
38
+ targetRepo: z.ZodOptional<z.ZodString>;
39
+ /** Domain tag (e.g. "medical", "coding") for priority-hub routing. */
40
+ domain: z.ZodOptional<z.ZodString>;
41
+ /**
42
+ * Whether online retrieval is enabled for this job.
43
+ * Defaults to false — online-research egress is not active until Sprint 3.
44
+ */
45
+ onlineResearch: z.ZodDefault<z.ZodBoolean>;
46
+ /** ISO-8601 creation timestamp — set once at CLI boundary, never mutated. */
47
+ createdAt: z.ZodString;
48
+ /**
49
+ * ISO-8601 next-due instant (Sprint 4). Unset => due immediately on first tick.
50
+ * Advanced by computeNextDue(cadence, now) after each run. Never read from the wall clock.
51
+ */
52
+ nextDueAt: z.ZodOptional<z.ZodString>;
53
+ /** ISO-8601 timestamp of the most recent successful run (Sprint 4). Unset until first run. */
54
+ lastRunAt: z.ZodOptional<z.ZodString>;
55
+ }, "strip", z.ZodTypeAny, {
56
+ id: string;
57
+ question: string;
58
+ cadence: "daily" | "weekly" | "monthly";
59
+ onlineResearch: boolean;
60
+ createdAt: string;
61
+ tier?: string | undefined;
62
+ modelSet?: string[] | undefined;
63
+ targetRepo?: string | undefined;
64
+ domain?: string | undefined;
65
+ nextDueAt?: string | undefined;
66
+ lastRunAt?: string | undefined;
67
+ }, {
68
+ id: string;
69
+ question: string;
70
+ cadence: "daily" | "weekly" | "monthly";
71
+ createdAt: string;
72
+ tier?: string | undefined;
73
+ modelSet?: string[] | undefined;
74
+ targetRepo?: string | undefined;
75
+ domain?: string | undefined;
76
+ onlineResearch?: boolean | undefined;
77
+ nextDueAt?: string | undefined;
78
+ lastRunAt?: string | undefined;
79
+ }>;
80
+ export type ResearchJob = z.infer<typeof ResearchJobSchema>;
81
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/research/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,2CAAyC,CAAC;AACpE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAIpD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB;;IAE5B,mEAAmE;;IAEnE,oEAAoE;;IAEpE,iFAAiF;;IAEjF,0EAA0E;;IAE1E,6DAA6D;;IAE7D,sEAAsE;;IAEtE;;;OAGG;;IAEH,6EAA6E;;IAE7E;;;OAGG;;IAEH,8FAA8F;;;;;;;;;;;;;;;;;;;;;;;;;;EAE9F,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { z } from "zod";
2
+ // ── Cadence ───────────────────────────────────────────────────────────
3
+ /**
4
+ * Recurrence cadence for a research job.
5
+ *
6
+ * Representation choice: a closed string-literal enum (`"daily" | "weekly" | "monthly"`).
7
+ * This is simpler and safer than a free-form cron string for the current use-cases;
8
+ * next-due computation (Sprint 4) will map these to concrete intervals without
9
+ * requiring a cron parser. Do NOT compute next-due dates in this module — that is
10
+ * Sprint 4 (contract outOfScope L55).
11
+ */
12
+ export const CadenceSchema = z.enum(["daily", "weekly", "monthly"]);
13
+ // ── ResearchJob ───────────────────────────────────────────────────────
14
+ /**
15
+ * A recurring research job definition stored as a JSON file under
16
+ * `.bober/research/jobs/<jobId>.json`.
17
+ *
18
+ * All timestamps are ISO-8601 strings; this module never reads the clock
19
+ * (mirrors src/state/facts.ts:18-21 — clock is stamped at the CLI boundary).
20
+ *
21
+ * tier vs modelSet: both are optional; the executor (Sprint 2) resolves
22
+ * which to use at runtime. Storing both allows flexible scheduling without
23
+ * commitment to either axis in Sprint 1.
24
+ *
25
+ * onlineResearch defaults to false — the online-research egress axis is not
26
+ * enabled until Sprint 3. The field is stored verbatim for forward-compatibility.
27
+ */
28
+ export const ResearchJobSchema = z.object({
29
+ id: z.string().min(1),
30
+ /** The research question to answer. Must be non-empty (sc-1-1). */
31
+ question: z.string().min(1),
32
+ /** How often the job runs. See CadenceSchema for allowed values. */
33
+ cadence: CadenceSchema,
34
+ /** Difficulty tier hint (e.g. "hard") — optional, resolved at execution time. */
35
+ tier: z.string().optional(),
36
+ /** Explicit model set override — optional, resolved at execution time. */
37
+ modelSet: z.array(z.string()).optional(),
38
+ /** Repository slug to scope the research against, if any. */
39
+ targetRepo: z.string().optional(),
40
+ /** Domain tag (e.g. "medical", "coding") for priority-hub routing. */
41
+ domain: z.string().optional(),
42
+ /**
43
+ * Whether online retrieval is enabled for this job.
44
+ * Defaults to false — online-research egress is not active until Sprint 3.
45
+ */
46
+ onlineResearch: z.boolean().default(false),
47
+ /** ISO-8601 creation timestamp — set once at CLI boundary, never mutated. */
48
+ createdAt: z.string().datetime(),
49
+ /**
50
+ * ISO-8601 next-due instant (Sprint 4). Unset => due immediately on first tick.
51
+ * Advanced by computeNextDue(cadence, now) after each run. Never read from the wall clock.
52
+ */
53
+ nextDueAt: z.string().datetime().optional(),
54
+ /** ISO-8601 timestamp of the most recent successful run (Sprint 4). Unset until first run. */
55
+ lastRunAt: z.string().datetime().optional(),
56
+ });
57
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/research/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,yEAAyE;AAEzE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAGpE,yEAAyE;AAEzE;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,mEAAmE;IACnE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,oEAAoE;IACpE,OAAO,EAAE,aAAa;IACtB,iFAAiF;IACjF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,0EAA0E;IAC1E,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxC,6DAA6D;IAC7D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,sEAAsE;IACtE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B;;;OAGG;IACH,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC1C,6EAA6E;IAC7E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC;;;OAGG;IACH,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC3C,8FAA8F;IAC9F,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * HttpClient — the SOLE provider-agnostic HTTP transport seam under
3
+ * `src/seo/` (spec-20260715-ultimate-seo-suite, Sprint 8; ADR-5).
4
+ *
5
+ * `src/seo/adapters/http.ts` is the ONLY file under `src/seo/` allowed to
6
+ * reference the global `fetch`. Every live adapter (`GscAdapter` this
7
+ * sprint, `DataForSeoAdapter` in Sprint 9) takes an injectable `HttpClient`
8
+ * constructor param defaulting to `defaultHttpClient`; tests inject a fake
9
+ * so no socket ever opens in CI. Mirrors the injectable-transport pattern
10
+ * in `src/medical/retrieval/medline-source.ts:37-39` and
11
+ * `src/medical/whoop/whoop-client.ts:40-52`, generalised to a
12
+ * `{method, headers, body}` request shape shared by both GSC and
13
+ * DataForSEO (both are plain JSON-over-HTTPS POST APIs).
14
+ *
15
+ * bober: no retry/backoff here — a thin request/response shim only. Each
16
+ * adapter owns its own error handling (429/5xx -> abstain) per
17
+ * ADR-5. Add shared retry logic only if a second adapter needs the
18
+ * exact same policy.
19
+ */
20
+ /** Duck-typed response — deliberately NOT the global `Response` type, so
21
+ * tests can construct fakes without touching the real fetch API. */
22
+ export interface HttpResponse {
23
+ ok: boolean;
24
+ status: number;
25
+ json(): Promise<unknown>;
26
+ }
27
+ /** One outbound request's method/headers/body. */
28
+ export interface HttpRequestInit {
29
+ method: string;
30
+ headers?: Record<string, string>;
31
+ body?: string;
32
+ }
33
+ /** Provider-agnostic injectable HTTP transport. */
34
+ export interface HttpClient {
35
+ request(url: string, init: HttpRequestInit): Promise<HttpResponse>;
36
+ }
37
+ /**
38
+ * Default transport = global fetch. The sole global-fetch reference under
39
+ * `src/seo/`. Adapters take this as their default `http` constructor param;
40
+ * tests always inject a fake `HttpClient` instead.
41
+ */
42
+ export declare const defaultHttpClient: HttpClient;
43
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/seo/adapters/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;qEACqE;AACrE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B;AAED,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,mDAAmD;AACnD,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACpE;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,UAS/B,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * HttpClient — the SOLE provider-agnostic HTTP transport seam under
3
+ * `src/seo/` (spec-20260715-ultimate-seo-suite, Sprint 8; ADR-5).
4
+ *
5
+ * `src/seo/adapters/http.ts` is the ONLY file under `src/seo/` allowed to
6
+ * reference the global `fetch`. Every live adapter (`GscAdapter` this
7
+ * sprint, `DataForSeoAdapter` in Sprint 9) takes an injectable `HttpClient`
8
+ * constructor param defaulting to `defaultHttpClient`; tests inject a fake
9
+ * so no socket ever opens in CI. Mirrors the injectable-transport pattern
10
+ * in `src/medical/retrieval/medline-source.ts:37-39` and
11
+ * `src/medical/whoop/whoop-client.ts:40-52`, generalised to a
12
+ * `{method, headers, body}` request shape shared by both GSC and
13
+ * DataForSEO (both are plain JSON-over-HTTPS POST APIs).
14
+ *
15
+ * bober: no retry/backoff here — a thin request/response shim only. Each
16
+ * adapter owns its own error handling (429/5xx -> abstain) per
17
+ * ADR-5. Add shared retry logic only if a second adapter needs the
18
+ * exact same policy.
19
+ */
20
+ /**
21
+ * Default transport = global fetch. The sole global-fetch reference under
22
+ * `src/seo/`. Adapters take this as their default `http` constructor param;
23
+ * tests always inject a fake `HttpClient` instead.
24
+ */
25
+ export const defaultHttpClient = {
26
+ async request(url, init) {
27
+ const res = await fetch(url, {
28
+ method: init.method,
29
+ headers: init.headers,
30
+ body: init.body,
31
+ });
32
+ return { ok: res.ok, status: res.status, json: () => res.json() };
33
+ },
34
+ };
35
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/seo/adapters/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAsBH;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAe;IAC3C,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI;QACrB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;IACpE,CAAC;CACF,CAAC"}