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,306 @@
1
+ ---
2
+ name: bober.security-solidity
3
+ description: "Solidity/EVM smart-contract security signature library. Not a workflow skill -- a data file of discrete vulnerable/safe code signature blocks read by SecuritySignatureParser. Covers reentrancy (single-function, cross-function, read-only), spot-price oracle manipulation, missing access control, unprotected initializers, unchecked arithmetic, ERC-4626 inflation, unsafe ERC20, tx.origin auth, missing slippage/deadline, DoS via unbounded loops, and signature replay."
4
+ ---
5
+
6
+ # bober.security-solidity — Solidity/EVM Security Signature Library
7
+
8
+ This skill is a **signature-library** file, not a workflow skill. It is read (as raw
9
+ markdown text) by `SecuritySignatureParser.parse()`
10
+ (`src/orchestrator/security-knowledge/parser.ts`) and turned into typed
11
+ `SecuritySignature[]` records used by the security-audit agent team. Do not confuse this
12
+ with `bober.solidity`, which is the general Solidity development skill, or
13
+ `bober.security-audit`, which is the audit *workflow* skill.
14
+
15
+ ## Signature Block Format
16
+
17
+ Each signature is a level-3 heading (three `#` characters, a space, then the
18
+ `signatureId`) followed by labelled fields and two fenced code examples. This file and
19
+ `SecuritySignatureParser` are one executable spec — keep them in sync.
20
+
21
+ Required fields per block:
22
+ - The heading text itself is the `signatureId` (must be non-empty).
23
+ - `- **Title:** <human-readable title>`
24
+ - `- **CWE:** CWE-xx` (optional — omit the line entirely for `cwe: null`)
25
+ - `- **Severity:** critical|high|medium|low|info`
26
+ - `- **VulnClass:** <a VulnClass union member, verbatim — see security-audit-types.ts>`
27
+ - `- **Invariant:** <the safety invariant this signature protects>`
28
+ - `- **Keywords:** comma, separated, keywords`
29
+
30
+ Then two labelled fenced code examples:
31
+ - `**Unsafe:**` followed by a fenced `ts` block with the vulnerable example.
32
+ - `**Safe:**` followed by a fenced `ts` block with the fixed example.
33
+
34
+ A block missing `Title`, a valid `VulnClass`, a valid `Severity`, or a non-empty
35
+ unsafe/safe example is dropped by the parser — never a fatal error.
36
+
37
+ ## Signatures
38
+
39
+ ### solidity.reentrancy-single-function
40
+ - **Title:** Single-function reentrancy: external call before state update
41
+ - **CWE:** SWC-107
42
+ - **Severity:** critical
43
+ - **VulnClass:** race-condition
44
+ - **Invariant:** All state that a function depends on is finalized (checks-effects-interactions) before any external call that could re-enter the same function.
45
+ - **Keywords:** reentrancy, call, checks-effects-interactions, nonReentrant
46
+
47
+ **Unsafe:**
48
+ ```ts
49
+ (bool ok, ) = msg.sender.call{value: balances[msg.sender]}("");
50
+ require(ok);
51
+ balances[msg.sender] = 0;
52
+ ```
53
+
54
+ **Safe:**
55
+ ```ts
56
+ uint256 amount = balances[msg.sender];
57
+ balances[msg.sender] = 0;
58
+ (bool ok, ) = msg.sender.call{value: amount}("");
59
+ require(ok);
60
+ ```
61
+
62
+ ### solidity.reentrancy-readonly
63
+ - **Title:** Read-only reentrancy via view function during callback
64
+ - **CWE:** SWC-107
65
+ - **Severity:** high
66
+ - **VulnClass:** race-condition
67
+ - **Invariant:** A view function's return value must never be trusted mid-callback while a caller's external hook (e.g. an ERC777/ERC721 receiver hook) can still mutate the same pool state.
68
+ - **Keywords:** read-only reentrancy, view, getReserves, callback
69
+
70
+ **Unsafe:**
71
+ ```ts
72
+ function price() external view returns (uint256) {
73
+ (uint112 r0, uint112 r1, ) = pair.getReserves(); // stale mid-callback
74
+ return r1 * 1e18 / r0;
75
+ }
76
+ ```
77
+
78
+ **Safe:**
79
+ ```ts
80
+ function price() external view returns (uint256) {
81
+ require(!pair.locked(), "reentrant read"); // reentrancy-guard-aware getter
82
+ (uint112 r0, uint112 r1, ) = pair.getReserves();
83
+ return r1 * 1e18 / r0;
84
+ }
85
+ ```
86
+
87
+ ### solidity.spot-price-oracle-flashloan
88
+ - **Title:** Spot AMM price used as oracle (flash-loan manipulable)
89
+ - **Severity:** critical
90
+ - **VulnClass:** money-integrity
91
+ - **Invariant:** A price used for liquidation/collateral/settlement math is never a single-block spot reserve ratio — it comes from a manipulation-resistant source with a staleness bound.
92
+ - **Keywords:** oracle, spot price, getReserves, TWAP, flash loan
93
+
94
+ **Unsafe:**
95
+ ```ts
96
+ (uint112 r0, uint112 r1, ) = pair.getReserves();
97
+ uint256 price = r1 * 1e18 / r0; // manipulable within one flash-loaned tx
98
+ ```
99
+
100
+ **Safe:**
101
+ ```ts
102
+ uint256 price = chainlinkFeed.latestAnswer();
103
+ require(block.timestamp - chainlinkFeed.updatedAt() < MAX_STALENESS, "stale price");
104
+ ```
105
+
106
+ ### solidity.missing-onlyowner
107
+ - **Title:** Missing onlyOwner/role modifier on a privileged function
108
+ - **CWE:** SWC-105
109
+ - **Severity:** critical
110
+ - **VulnClass:** authn-authz
111
+ - **Invariant:** Every function that mutates protocol-critical state (fees, admin addresses, pausing, minting) is gated by an explicit ownership or role check.
112
+ - **Keywords:** onlyOwner, AccessControl, modifier, privileged
113
+
114
+ **Unsafe:**
115
+ ```ts
116
+ function setFee(uint256 newFee) public {
117
+ fee = newFee; // callable by anyone
118
+ }
119
+ ```
120
+
121
+ **Safe:**
122
+ ```ts
123
+ function setFee(uint256 newFee) public onlyRole(FEE_ADMIN_ROLE) {
124
+ fee = newFee;
125
+ }
126
+ ```
127
+
128
+ ### solidity.unprotected-initializer
129
+ - **Title:** Unprotected initializer / uninitialized proxy implementation (Parity-style)
130
+ - **CWE:** CWE-665
131
+ - **Severity:** critical
132
+ - **VulnClass:** privilege-escalation
133
+ - **Invariant:** An upgradeable contract's `initialize()` can only ever run once, and the logic-contract instance itself is never left in an initializable state.
134
+ - **Keywords:** initializer, initialize, proxy, _disableInitializers
135
+
136
+ **Unsafe:**
137
+ ```ts
138
+ function initialize(address _owner) public {
139
+ owner = _owner; // callable repeatedly by anyone on the implementation contract
140
+ }
141
+ ```
142
+
143
+ **Safe:**
144
+ ```ts
145
+ constructor() { _disableInitializers(); }
146
+
147
+ function initialize(address _owner) public initializer {
148
+ owner = _owner;
149
+ }
150
+ ```
151
+
152
+ ### solidity.unchecked-arithmetic
153
+ - **Title:** unchecked{} block underflows a balance
154
+ - **CWE:** SWC-101
155
+ - **Severity:** critical
156
+ - **VulnClass:** money-integrity
157
+ - **Invariant:** A balance or supply subtraction never wraps — the subtrahend is bounds-checked before entering an unchecked block, or the block is dropped in favor of checked arithmetic.
158
+ - **Keywords:** unchecked, overflow, underflow, arithmetic
159
+
160
+ **Unsafe:**
161
+ ```ts
162
+ unchecked {
163
+ balances[msg.sender] -= amount; // wraps to a huge balance if amount > balance
164
+ }
165
+ ```
166
+
167
+ **Safe:**
168
+ ```ts
169
+ require(balances[msg.sender] >= amount, "insufficient balance");
170
+ balances[msg.sender] -= amount;
171
+ ```
172
+
173
+ ### solidity.erc4626-inflation
174
+ - **Title:** ERC-4626 first-depositor / share-inflation attack
175
+ - **Severity:** critical
176
+ - **VulnClass:** money-integrity
177
+ - **Invariant:** Share-price math (assets-per-share) can never be driven to an attacker-favorable rounding extreme by a first depositor donating raw assets directly to the vault.
178
+ - **Keywords:** ERC4626, first depositor, inflation, virtual shares, dead shares
179
+
180
+ **Unsafe:**
181
+ ```ts
182
+ function deposit(uint256 assets) external returns (uint256 shares) {
183
+ shares = totalSupply == 0 ? assets : assets * totalSupply / totalAssets();
184
+ _mint(msg.sender, shares); // attacker mints 1 share then donates assets to inflate price
185
+ }
186
+ ```
187
+
188
+ **Safe:**
189
+ ```ts
190
+ function deposit(uint256 assets) external returns (uint256 shares) {
191
+ shares = assets * (totalSupply + 10 ** decimalsOffset) / (totalAssets() + 1); // virtual shares/assets offset
192
+ _mint(msg.sender, shares);
193
+ }
194
+ ```
195
+
196
+ ### solidity.unsafe-erc20
197
+ - **Title:** Unsafe ERC20 usage (no SafeERC20 / fee-on-transfer / rebasing)
198
+ - **CWE:** SWC-104
199
+ - **Severity:** high
200
+ - **VulnClass:** money-integrity
201
+ - **Invariant:** Every ERC20 transfer's return value is checked, and any accounting derived from a transfer uses the measured balance delta, not the nominal amount passed in.
202
+ - **Keywords:** transfer, SafeERC20, fee-on-transfer, rebasing, return value
203
+
204
+ **Unsafe:**
205
+ ```ts
206
+ token.transfer(recipient, amount); // return value ignored; assumes amount fully received
207
+ credited[recipient] += amount;
208
+ ```
209
+
210
+ **Safe:**
211
+ ```ts
212
+ uint256 before = token.balanceOf(address(this));
213
+ token.safeTransfer(recipient, amount);
214
+ uint256 received = before - token.balanceOf(address(this));
215
+ credited[recipient] += received;
216
+ ```
217
+
218
+ ### solidity.txorigin-auth
219
+ - **Title:** tx.origin used for authorization (phishable)
220
+ - **CWE:** SWC-115
221
+ - **Severity:** high
222
+ - **VulnClass:** authn-authz
223
+ - **Invariant:** Authorization checks compare against `msg.sender`, never `tx.origin`, so a malicious intermediate contract cannot impersonate the original caller.
224
+ - **Keywords:** tx.origin, msg.sender, phishing
225
+
226
+ **Unsafe:**
227
+ ```ts
228
+ function withdraw() external {
229
+ require(tx.origin == owner); // phishable via a malicious contract the owner interacts with
230
+ payable(owner).transfer(address(this).balance);
231
+ }
232
+ ```
233
+
234
+ **Safe:**
235
+ ```ts
236
+ function withdraw() external {
237
+ require(msg.sender == owner);
238
+ payable(owner).transfer(address(this).balance);
239
+ }
240
+ ```
241
+
242
+ ### solidity.missing-slippage-deadline
243
+ - **Title:** Swap missing amountOutMin / deadline (sandwich-attack surface)
244
+ - **Severity:** high
245
+ - **VulnClass:** money-integrity
246
+ - **Invariant:** Every swap specifies a caller-supplied minimum output and a real expiry deadline, so a sandwiching attacker cannot extract unbounded slippage.
247
+ - **Keywords:** amountOutMin, deadline, slippage, swap, sandwich
248
+
249
+ **Unsafe:**
250
+ ```ts
251
+ router.swapExactTokensForTokens(amountIn, 0, path, msg.sender, block.timestamp);
252
+ ```
253
+
254
+ **Safe:**
255
+ ```ts
256
+ router.swapExactTokensForTokens(amountIn, minAmountOut, path, msg.sender, userSuppliedDeadline);
257
+ ```
258
+
259
+ ### solidity.dos-unbounded-loop
260
+ - **Title:** DoS via unbounded loop over a growable array
261
+ - **CWE:** SWC-128
262
+ - **Severity:** high
263
+ - **VulnClass:** denial-of-service
264
+ - **Invariant:** No externally-triggerable function iterates over a collection whose size is controlled by untrusted users within a single transaction's gas budget.
265
+ - **Keywords:** unbounded loop, gas limit, pull-over-push, DoS
266
+
267
+ **Unsafe:**
268
+ ```ts
269
+ function distribute() external {
270
+ for (uint256 i = 0; i < holders.length; i++) { // holders.length grows unbounded
271
+ payable(holders[i]).transfer(shares[holders[i]]);
272
+ }
273
+ }
274
+ ```
275
+
276
+ **Safe:**
277
+ ```ts
278
+ function claim() external { // pull-over-push, one holder per call, bounded gas
279
+ uint256 amount = shares[msg.sender];
280
+ shares[msg.sender] = 0;
281
+ payable(msg.sender).transfer(amount);
282
+ }
283
+ ```
284
+
285
+ ### solidity.signature-replay
286
+ - **Title:** Missing nonce/chainId/EIP-712 domain; ecrecover==0 malleability
287
+ - **CWE:** SWC-117
288
+ - **Severity:** critical
289
+ - **VulnClass:** crypto-weakness
290
+ - **Invariant:** A recovered signer address is checked against the zero address, and the signed payload binds a single-use nonce, the chain id, and an EIP-712 domain so a signature cannot be replayed across calls or chains.
291
+ - **Keywords:** ecrecover, nonce, chainId, EIP-712, replay, malleability
292
+
293
+ **Unsafe:**
294
+ ```ts
295
+ address signer = ecrecover(hash, v, r, s); // no domain, no nonce, no zero-address check
296
+ require(signer == expectedSigner);
297
+ ```
298
+
299
+ **Safe:**
300
+ ```ts
301
+ bytes32 digest = _hashTypedDataV4(structHash); // EIP-712 domain-bound, includes nonce + chainId
302
+ address signer = ecrecover(digest, v, r, s);
303
+ require(signer != address(0) && signer == expectedSigner);
304
+ require(!usedNonces[nonce]);
305
+ usedNonces[nonce] = true;
306
+ ```
@@ -0,0 +1,132 @@
1
+ ---
2
+ name: bober.seo
3
+ description: >-
4
+ Orchestration skill for the Bober SEO/GEO suite — routes to the 8 workflows
5
+ (technical-audit, rank-track, content-decay, topical-map, ai-visibility,
6
+ parasite-watch, internal-linking, schema-audit) run via `bober seo <workflow>
7
+ [target]`. Offline by default; live data is behind two default-false egress
8
+ axes (seo.egress.search-console, seo.egress.serp-provider). Use when you want
9
+ an SEO audit, rank/decay analysis, topical map, AI-visibility check, schema
10
+ audit, internal-linking pass, or parasite-SEO watch.
11
+ argument-hint: "<workflow> [target]"
12
+ ---
13
+
14
+ # bober.seo — SEO/GEO Suite Orchestrator
15
+
16
+ You are the **orchestrator** for an SEO/GEO run. You do NOT analyze data yourself —
17
+ you route to the `bober seo <workflow> [target]` CLI (scriptable/CI-friendly, exit-code
18
+ driven) or spawn the `bober-seo-strategist` subagent (conversational, findings woven
19
+ into this session), optionally followed by the `bober-seo-verifier` subagent, then
20
+ present the result. The whole suite is **offline by construction**: the default data
21
+ source reads local exports under `.bober/seo/imports/`; live Google Search Console or
22
+ DataForSEO data only flows when the matching egress axis is explicitly opted in.
23
+
24
+ ## The 8 workflows
25
+
26
+ | Workflow | What it analyzes |
27
+ |---|---|
28
+ | `technical-audit` | Crawlability, indexing state, robots/sitemap, technical health (URL inspection + search-analytics data) |
29
+ | `rank-track` | Ranking position movement and SERP presence for tracked keywords |
30
+ | `content-decay` | Pages/queries losing clicks or position over time — candidates for a refresh |
31
+ | `topical-map` | Topical coverage and site-focus/site-radius gaps against a target topic |
32
+ | `ai-visibility` | Brand/citation presence in AI answers (AI Overviews, ChatGPT, Perplexity, etc.) |
33
+ | `parasite-watch` | Third-party-host placement risk — **detect-only**, never recommends the tactic itself (see Guardrails) |
34
+ | `internal-linking` | Internal link structure, orphan pages, anchor-text distribution |
35
+ | `schema-audit` | Structured-data / entity markup coverage and validity |
36
+
37
+ Name these 8 verbatim when discussing the suite — this is the canonical list
38
+ (`src/seo/command.ts:27-36`); do not invent a 9th workflow or rename one.
39
+
40
+ ## How to run
41
+
42
+ **CLI (scriptable / CI-friendly):**
43
+
44
+ ```bash
45
+ bober seo <workflow> [target]
46
+ # or: agent-bober seo <workflow> [target]
47
+ ```
48
+
49
+ - `[target]` is a URL, domain, or local path; when omitted the runner falls back to
50
+ `config.seo.defaultTarget` if set.
51
+ - Prints one summary line: `SEO report <id>: verdict=…, findings=…, droppedUncited=…`.
52
+ - **Exit codes:** `0` = pass, `2` = blocked (citation-gate threshold tripped) or
53
+ fail-closed (an unknown workflow, or the run threw). `1` is reserved for Commander's
54
+ own usage errors, never an audit outcome.
55
+ - An unrecognized `<workflow>` prints the valid list and exits `2` immediately — no
56
+ partial run.
57
+
58
+ **Conversational (spawn the subagent):** use when the user wants findings discussed,
59
+ iterated on, or woven into this conversation rather than piped through CI.
60
+
61
+ ## When to spawn which agent
62
+
63
+ - **`bober-seo-strategist`** (`agents/bober-seo-strategist.md`, read-only: Read/Grep/Glob
64
+ only) — the analysis role. Feed it the workflow, target, a retrieved playbook context
65
+ (`SeoSignature` blocks selected from `skills/bober.seo-*/SKILL.md` for the declared
66
+ workflow), and a gathered SEO data bundle. It returns evidence-cited findings; it
67
+ cannot write, edit, or call a live API itself.
68
+ - **`bober-seo-verifier`** (`agents/bober-seo-verifier.md`, no tools, fresh contract-free
69
+ context) — the adversarial false-positive control. Spawn it **after** the strategist,
70
+ only when `config.seo.verifier.enabled` is `true`, feeding it ONLY the strategist's
71
+ findings (never the sprint contract or any "already reviewed" framing). It can only
72
+ confirm, downgrade, or drop a finding — never promote or add one.
73
+ - Route the CLI path instead of spawning either agent when the user wants a scriptable,
74
+ exit-code-driven result (CI, a script, a quick pass/fail check).
75
+
76
+ ## Offline vs. live data
77
+
78
+ **Offline by default.** The default `LocalExportSource` reads one file per capability
79
+ from `.bober/seo/imports/`: `search-analytics`, `url-inspection`, `serp`, `keywords`,
80
+ `backlinks`, each as `<capability>.csv` or `<capability>.json`. A missing file for a
81
+ capability degrades to `disabled` for that capability alone — it never blocks the rest
82
+ of the run, and it requires no API key.
83
+
84
+ **Live data is opt-in, per source, and default-false** — two independent egress axes
85
+ (`SeoEgressGuard`, `src/seo/egress.ts`):
86
+
87
+ | Axis | Config key | Gates |
88
+ |---|---|---|
89
+ | Google Search Console | `seo.egress.search-console` | Live search-analytics / URL-inspection API calls |
90
+ | DataForSEO | `seo.egress.serp-provider` | Live SERP / keyword / backlink API calls |
91
+
92
+ Both default `false`; the whole `seo.egress` object is optional and omitting it keeps
93
+ every workflow fully offline. Opting into one axis does **not** opt into the other.
94
+ Live credentials come from environment variables, not config: `GSC_OAUTH_TOKEN` for
95
+ `search-console`, `DATAFORSEO_LOGIN` / `DATAFORSEO_PASSWORD` for `serp-provider`.
96
+
97
+ ## Config knobs
98
+
99
+ - `seo.budget.maxUsd` — per-run USD spend ceiling for PAYG DataForSEO calls (absent =
100
+ uncapped).
101
+ - `seo.verifier.enabled` — turns on the adversarial `bober-seo-verifier` pass (default
102
+ `false`).
103
+ - `seo.defaultTarget` — used when the CLI's `[target]` argument is omitted.
104
+ - `seo.blockThreshold` — `never | any-uncited | critical-uncited` (default
105
+ `critical-uncited`) — the citation gate's exit-code-2 threshold.
106
+
107
+ ## Guardrails to restate
108
+
109
+ - **Never-encode tactics are dropped at parse, never surfaced.** Any playbook block
110
+ tagged `PolicyClass: never-encode` (e.g. parasite-SEO placement on a third-party host)
111
+ is dropped by `SeoPlaybookParser` before it ever reaches an analysis prompt — this is
112
+ why `parasite-watch` is detect-only: it can flag exposure, never recommend the tactic.
113
+ - **`humanApprovalRequired` findings need a human.** Any recommendation touching policy
114
+ compliance (paid links, cloaking, structured-data misuse) or spend (ad budget, paid
115
+ placements, metered live-API calls) is flagged for manual review before acting on it.
116
+ - **Citation discipline.** Every finding the strategist emits must carry a primary-source
117
+ `citationUrl`; an uncited finding is dropped by the deterministic `SeoCitationGate`
118
+ before it reaches a report or the hub — the LLM's judgment never bypasses this gate.
119
+
120
+ For the full reference (CLI exit codes, config schema, import file format, per-workflow
121
+ detail), see [`docs/seo.md`](../../docs/seo.md).
122
+
123
+ ## Report
124
+
125
+ After a run (CLI or subagent), summarize for the user: the workflow + target, the
126
+ verdict (`pass`/`blocked`), the finding count and how many were dropped for missing
127
+ citations (`droppedUncited`), and — for any `humanApprovalRequired` finding — call it out
128
+ explicitly rather than folding it into the general list. The CLI path persists the
129
+ report to `.bober/seo/reports/<reportId>.json` (`SeoReportStore`) and best-effort emits
130
+ critical/notable findings into the priority hub — point the user there. When you spawn
131
+ the subagent(s) directly instead of the CLI, you own persisting the returned JSON
132
+ yourself if the user wants it kept; the subagents have no Write tool.
@@ -0,0 +1,110 @@
1
+ ---
2
+ name: bober.seo-ai-visibility
3
+ description: "Per-workflow SEO signature library for the ai-visibility workflow. A data file of discrete, cited SEO/GEO tactics read by SeoPlaybookParser (src/seo/parser.ts), not a workflow skill. Encodes VERIFIED 2025-2026 AI-visibility correlations (Ahrefs 75k-brand study, Semrush ghost-citations study, Profound platform-citation study) with per-platform GEO divergence marked perishable."
4
+ ---
5
+
6
+ # bober.seo-ai-visibility — AI-Visibility (GEO) Signature Library
7
+
8
+ This skill is a **signature-library** file for the `ai-visibility` workflow, not a
9
+ workflow skill in its own right. It is read (as raw markdown text) by
10
+ `SeoPlaybookParser.parse()` (`src/seo/parser.ts`) and turned into typed
11
+ `SeoSignature[]` records consumed by the SEO agent team's retriever
12
+ (`SeoPlaybookRetriever`). It follows the identical block format defined and
13
+ documented in `skills/bober.seo-generic/SKILL.md` ("Signature Block Format") --
14
+ the two files are one executable spec; a block missing `Title` or
15
+ `PrimarySourceUrl`, or tagged `PolicyClass: never-encode`, is DROPPED by the
16
+ parser at load time.
17
+
18
+ The signatures below encode VERIFIED generative-engine-optimization (GEO)
19
+ correlations from three independent 2025-2026 studies -- Ahrefs' 75,000-brand
20
+ correlation analysis, Semrush's ghost-citations study, and Profound's
21
+ 680-million-citation platform analysis -- plus one deliberate `never-encode`
22
+ boundary block for AI-recommendation poisoning. Per-platform citation-mix
23
+ figures are explicitly marked **PERISHABLE** below: platform algorithms and
24
+ source-weighting change fast, so treat those specific percentages as
25
+ dated-as-of-measurement, not durable constants. See
26
+ `.bober/research/research-20260715-ultimate-seo-agents-skills-research.md`
27
+ §1/§7 for the underlying evidence and the two REFUTED claims that must never
28
+ be encoded here (ChatGPT-Wikipedia dominance, Reddit-leading-AI-Overviews).
29
+
30
+ ## Signatures
31
+
32
+ ### ai-visibility-youtube-presence-audit
33
+ - **Title:** Audit and grow YouTube presence -- the strongest single AI-visibility correlate
34
+ - **Workflows:** ai-visibility
35
+ - **Tactic:** Include YouTube brand presence (owned-channel content, creator partnerships, video PR, transcript/caption quality) as a first-class line item in every AI-visibility audit, not an afterthought to written-content SEO. Report current YouTube mention volume as a baseline metric alongside branded web mentions.
36
+ - **Invariant:** Across ChatGPT, Google AI Mode, and AI Overviews, YouTube mentions show the single highest correlation (~0.737 Spearman) with brand visibility in AI answers, in a 75,000-brand Ahrefs correlation study -- stronger than any other measured signal, including backlinks.
37
+ - **PrimarySourceUrl:** https://ahrefs.com/blog/ai-brand-visibility-correlations/
38
+ - **PolicyClass:** auto-safe
39
+ - **EvidenceGrade:** verified
40
+ - **Keywords:** youtube, ai-visibility, geo, correlation, audit
41
+
42
+ ### ai-visibility-branded-mention-audit
43
+ - **Title:** Audit branded web-mention volume (linked or unlinked) -- the strongest non-video AI-visibility signal
44
+ - **Workflows:** ai-visibility
45
+ - **Tactic:** Track and report branded web-mention volume across the open web as a distinct AI-visibility metric, counting unlinked mentions equally with linked ones; do not discount coverage that omits a hyperlink when assessing AI-visibility health.
46
+ - **Invariant:** Branded web mentions (linked or unlinked) correlate at 0.66-0.71 with brand visibility in AI answers -- the strongest non-YouTube signal, and dramatically stronger than classic backlink volume (~0.218), in the same 75,000-brand Ahrefs study.
47
+ - **PrimarySourceUrl:** https://ahrefs.com/blog/ai-brand-visibility-correlations/
48
+ - **PolicyClass:** auto-safe
49
+ - **EvidenceGrade:** verified
50
+ - **Keywords:** brand-mention, ai-visibility, geo, correlation, backlinks-weak
51
+
52
+ ### ai-visibility-ghost-citation-mention-split
53
+ - **Title:** Track citation rate and mention rate as two distinct AI-visibility metrics
54
+ - **Workflows:** ai-visibility
55
+ - **Tactic:** Report AI-citation rate and AI-mention rate as separate audit metrics for every tracked brand/page; do not conflate "the page is linked as a source" with "the brand is named in the answer text" -- they measure different things and a gap between them is itself a finding.
56
+ - **Invariant:** 61.7% of AI citations are "ghost citations" -- the source page is linked but the brand is never named in the AI-generated answer -- across 3,981 domain appearances / 115 prompts / 4 platforms / 14 countries in the Semrush/Kevin Indig ghost-citations study.
57
+ - **PrimarySourceUrl:** https://www.semrush.com/blog/the-ghost-citations-study/
58
+ - **PolicyClass:** auto-safe
59
+ - **EvidenceGrade:** verified
60
+ - **Keywords:** ghost-citation, citation-rate, mention-rate, ai-visibility
61
+
62
+ ### ai-visibility-per-platform-geo-divergence
63
+ - **Title:** [PERISHABLE, dated 2026] Audit per-platform citation/mention mix separately -- platforms diverge sharply and the mix will shift over time
64
+ - **Workflows:** ai-visibility
65
+ - **Tactic:** Do not optimize AI-visibility as a single undifferentiated target; audit and report citation-vs-mention behavior per platform (ChatGPT, Gemini, Perplexity, AI Overviews), because a page can be heavily mentioned on one platform and heavily cited-but-unnamed on another. Re-measure this split on a recurring cadence -- the specific percentages below are a point-in-time snapshot, not a stable baseline.
66
+ - **Invariant:** [PERISHABLE] The Semrush ghost-citations study documents sharp per-platform divergence in citation-vs-mention behavior (e.g. platforms differ materially in how often a cited source page is also named as the brand in the answer text); this mix is measured as of the 2025-2026 study window and should be treated as dated, not durable, given known platform-algorithm churn.
67
+ - **PrimarySourceUrl:** https://www.semrush.com/blog/the-ghost-citations-study/
68
+ - **PolicyClass:** auto-safe
69
+ - **EvidenceGrade:** single-source
70
+ - **Keywords:** per-platform, geo-divergence, perishable, citation-mix, dated-2026
71
+
72
+ ### ai-visibility-comparative-query-mention-lift
73
+ - **Title:** Build comparison ("vs") content to capture the comparative-query mention lift
74
+ - **Workflows:** ai-visibility, topical-map
75
+ - **Tactic:** Prioritise comparative/"X vs Y" content in the AI-visibility content plan -- comparison-framed queries earn a measurably higher brand-mention rate than single-entity queries, so this is a specific, evidence-backed content type to invest in, not a generic content-marketing suggestion.
76
+ - **Invariant:** Comparative queries generate 2.4x more brand mentions than single-entity queries (43.3% vs 18% mention rate) in the Semrush ghost-citations study's query-type breakdown.
77
+ - **PrimarySourceUrl:** https://www.semrush.com/blog/the-ghost-citations-study/
78
+ - **PolicyClass:** human-approve
79
+ - **EvidenceGrade:** single-source
80
+ - **Keywords:** comparative-query, mention-lift, content-plan, ai-visibility
81
+
82
+ ### ai-visibility-aio-citation-rank-decouple
83
+ - **Title:** Audit AI Overview citation coverage separately from organic rank -- most cited pages no longer rank top-10
84
+ - **Workflows:** ai-visibility, rank-track
85
+ - **Tactic:** Do not treat organic top-10 ranking as a prerequisite for AIO citation in the audit methodology; run a dedicated AIO-citation crawl/check independent of rank-tracking, since a majority of currently-cited pages rank outside the top 10.
86
+ - **Invariant:** Only 38% of AIO-cited pages ranked in the organic top-10 as of Jan 2026 (down from ~76% in Jul 2025); 31.2% of cited pages ranked 11-100 and 31.0% ranked beyond top-100, per an Ahrefs analysis of 863K SERPs / 4M AIO URLs.
87
+ - **PrimarySourceUrl:** https://ahrefs.com/blog/ai-overview-citations-top-10/
88
+ - **PolicyClass:** auto-safe
89
+ - **EvidenceGrade:** verified
90
+ - **Keywords:** aio, citations, rank-decouple, ai-visibility
91
+
92
+ ### ai-visibility-perplexity-community-weighted
93
+ - **Title:** [PERISHABLE, dated 2026] For Perplexity-specific work, weight community presence over publisher-style placement
94
+ - **Workflows:** ai-visibility
95
+ - **Tactic:** When auditing or building Perplexity-specific AI-visibility, prioritise genuine community presence and discussion (Reddit and similar forums) as one input among several platform-mix signals, alongside publisher-style content; re-check this platform mix periodically since platform citation-source weighting is known to shift.
96
+ - **Invariant:** [PERISHABLE] In a 680-million-citation Profound study, Perplexity showed the most community-weighted citation mix of the platforms measured, with community-forum sources forming a materially larger share of Perplexity's citations than of other platforms' citation mixes; this mix is a point-in-time measurement, not a durable constant.
97
+ - **PrimarySourceUrl:** https://www.tryprofound.com/blog/ai-platform-citation-patterns
98
+ - **PolicyClass:** auto-safe
99
+ - **EvidenceGrade:** single-source
100
+ - **Keywords:** perplexity, community, platform-specific, perishable, dated-2026
101
+
102
+ ### ai-recommendation-poisoning-boundary
103
+ - **Title:** AI-recommendation poisoning via prompt injection -- NEVER encode as a tactic
104
+ - **Workflows:** ai-visibility
105
+ - **Tactic:** NEVER encode as actionable. Injecting hidden prompts into page content, browser-extension "Summarize with AI" surfaces, or other AI-consumed channels to manipulate an AI assistant's recommendation or citation behavior toward a brand is prompt injection / AI-recommendation poisoning, a security and trust violation, not a legitimate GEO tactic. Documented here only to mark the automation boundary; the parser DROPS this block so it can never reach an analyzer prompt.
106
+ - **Invariant:** AI-recommendation poisoning (prompt-injection attacks against AI-summarization and AI-assistant surfaces) is a documented 2025-2026 attack class against AI-consumed content; it must never be surfaced as an option, even human-approval-gated -- it is a manipulation technique, not a judgment call.
107
+ - **PrimarySourceUrl:** https://developers.google.com/search/docs/essentials/spam-policies
108
+ - **PolicyClass:** never-encode
109
+ - **EvidenceGrade:** primary-unverified
110
+ - **Keywords:** ai-recommendation-poisoning, prompt-injection, never-encode, policy-violation
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: bober.seo-content-decay
3
+ description: "Per-workflow SEO signature library for the content-decay workflow. A data file of discrete, cited SEO tactics read by SeoPlaybookParser (src/seo/parser.ts), not a workflow skill. Encodes the leak's NavBoost click-decay mechanism, the rolling 13-month refresh window, and the HCU-era content-decay baseline (522 sites, 64% traffic-lost) for the content-decay workflow."
4
+ ---
5
+
6
+ # bober.seo-content-decay — Content Decay Signature Library
7
+
8
+ This skill is a **signature-library** file for the `content-decay` workflow, not a
9
+ workflow skill in its own right. It is read (as raw markdown text) by
10
+ `SeoPlaybookParser.parse()` (`src/seo/parser.ts`) and turned into typed
11
+ `SeoSignature[]` records consumed by the SEO agent team's retriever
12
+ (`SeoPlaybookRetriever`). It follows the identical block format defined and
13
+ documented in `skills/bober.seo-generic/SKILL.md` ("Signature Block Format") --
14
+ the two files are one executable spec; a block missing `Title` or
15
+ `PrimarySourceUrl`, or tagged `PolicyClass: never-encode`, is DROPPED by the
16
+ parser at load time -- see
17
+ `.bober/research/research-20260715-ultimate-seo-agents-skills-research.md`
18
+ for the underlying evidence.
19
+
20
+ The signatures below encode the leaked Google Content Warehouse API's
21
+ NavBoost click-decay mechanism (decay as a failure to keep driving a page's
22
+ expected click share over a rolling 13-month window) and Detailed's
23
+ 522-content-site post-HCU study, which found 64% of content-first sites lost
24
+ traffic with a median loss of -471K visits / -17.8%. Most signatures here are
25
+ **read-only detection/monitoring** (auto-safe); the one signature that would
26
+ execute a large-scale rewrite or page consolidation that changes the live
27
+ site is `human-approve` -- consistent with research §6's automation boundary.
28
+
29
+ ## Signatures
30
+
31
+ ### navboost-decay-expected-clicks
32
+ - **Title:** Content decay is partly a NavBoost failure to keep driving a page's expected click share
33
+ - **Workflows:** content-decay
34
+ - **Tactic:** Detect decay by comparing a page's current click share against the click share its rank would predict, not by watching raw rank alone; flag pages whose click-share is sliding relative to their rank as decaying even before the rank itself drops.
35
+ - **Invariant:** The leaked Google Content Warehouse API documents NavBoost as a click-based re-ranking system tracking goodClicks, badClicks, lastLongestClicks, and unsquashedClicks over a rolling 13-month window; a page's ranking position and its actual click performance can diverge, and a sustained failure to drive the clicks NavBoost expects for that position is a mechanical decay signal.
36
+ - **PrimarySourceUrl:** https://ipullrank.com/google-algo-leak
37
+ - **PolicyClass:** auto-safe
38
+ - **EvidenceGrade:** single-source
39
+ - **Keywords:** navboost, decay, expected-clicks, click-share
40
+
41
+ ### navboost-13month-refresh-window
42
+ - **Title:** Set refresh cadence inside NavBoost's rolling 13-month click window, not annually
43
+ - **Workflows:** content-decay
44
+ - **Tactic:** Schedule content-refresh review cycles to land within the 13-month click-history window NavBoost scores over, rather than on a slower annual cadence that lets a page's click history fully roll past its refresh.
45
+ - **Invariant:** The leak documents NavBoost as scoring goodClicks/badClicks/lastLongestClicks/unsquashedClicks on a rolling 13-month window at the URL, subdomain, and root-domain level; a refresh cadence slower than that window lets decayed click history persist uncorrected for a full scoring cycle.
46
+ - **PrimarySourceUrl:** https://ipullrank.com/google-algo-leak
47
+ - **PolicyClass:** auto-safe
48
+ - **EvidenceGrade:** single-source
49
+ - **Keywords:** navboost, 13-month-window, refresh-cadence, click-history
50
+
51
+ ### content-decay-hcu-baseline
52
+ - **Title:** Post-HCU decay is the norm, not the exception -- run a standing decay-detection pass on every site
53
+ - **Workflows:** content-decay
54
+ - **Tactic:** Treat decay detection as a standing, recurring audit line item for every content-first site rather than a one-off diagnostic run only when traffic visibly craters; the base rate of decay is high enough that absence of a detection pass is itself a risk.
55
+ - **Invariant:** A study of 522 content-first sites post-Helpful Content Update found 64% lost organic traffic, with a median loss of -471K visits (-17.8%) among the sites that declined, per Detailed's Q3 analysis (Glen Allsopp).
56
+ - **PrimarySourceUrl:** https://detailed.com/q3/
57
+ - **PolicyClass:** auto-safe
58
+ - **EvidenceGrade:** single-source
59
+ - **Keywords:** hcu, decay-baseline, 64-percent, detailed-q3
60
+
61
+ ### goodclicks-badclicks-early-warning
62
+ - **Title:** Audit good/bad-click proxies as a leading indicator of decay before rank drops
63
+ - **Workflows:** content-decay
64
+ - **Tactic:** Pull bounce-back behavior and dwell/engagement proxies for at-risk pages as a leading-indicator audit line item; a rising badClicks-to-goodClicks proxy ratio is a decay early warning worth flagging before the page's rank actually falls.
65
+ - **Invariant:** The leak documents goodClicks and badClicks as tracked NavBoost inputs distinguishing navDemotion (on-site UX causes) from serpDemotion (SERP-behavior causes); a shift in that ratio precedes and helps cause the rank movement decay is ultimately measured by.
66
+ - **PrimarySourceUrl:** https://ipullrank.com/google-algo-leak
67
+ - **PolicyClass:** auto-safe
68
+ - **EvidenceGrade:** single-source
69
+ - **Keywords:** goodclicks, badclicks, early-warning, navdemotion
70
+
71
+ ### refresh-cadence-monitoring
72
+ - **Title:** Re-measure decaying pages on a recurring cadence, not a one-shot report
73
+ - **Workflows:** content-decay
74
+ - **Tactic:** Build decay monitoring as a recurring, read-only re-measurement pass over previously-flagged pages rather than a single diagnostic snapshot; re-check decay status on each cadence run so a page's trajectory (worsening, stabilizing, recovering) is visible over time.
75
+ - **Invariant:** Both the 64%-decayed HCU baseline and the underlying NavBoost rolling-window mechanism argue that decay is an ongoing, shifting condition rather than a fixed state -- a single audit snapshot cannot capture trajectory, only recurring monitoring can.
76
+ - **PrimarySourceUrl:** https://detailed.com/q3/
77
+ - **PolicyClass:** auto-safe
78
+ - **EvidenceGrade:** single-source
79
+ - **Keywords:** refresh-cadence, monitoring, recurring-audit, trajectory
80
+
81
+ ### content-refresh-genuine-effort
82
+ - **Title:** Refresh decaying pages with genuine substantiation, not scaled regeneration
83
+ - **Workflows:** content-decay
84
+ - **Tactic:** When recommending a refresh for a decaying page, recommend adding genuine original substantiation (new data, analysis, first-hand detail) rather than a scaled/templated rewrite pass; a low-effort regeneration risks tripping the same low-effort signal that contributes to decay in the first place.
85
+ - **Invariant:** Mike King's technical analysis of the leak documents contentEffort as an LLM-based effort-estimation signal Google runs on article pages; refreshing a decaying page with low-effort scaled output risks reinforcing, not reversing, the mechanical signal associated with decline.
86
+ - **PrimarySourceUrl:** https://ipullrank.com/google-algo-leak
87
+ - **PolicyClass:** auto-safe
88
+ - **EvidenceGrade:** single-source
89
+ - **Keywords:** content-refresh, genuine-effort, contenteffort, scaled-regeneration
90
+
91
+ ### large-scale-rewrite-consolidation-approval
92
+ - **Title:** Mass rewrite or consolidation of decayed pages changes the live site -- requires human sign-off
93
+ - **Workflows:** content-decay
94
+ - **Tactic:** When decay analysis surfaces a large batch of decayed pages warranting mass rewrite or consolidation/merging into fewer stronger URLs, propose the plan as a report but do not execute the rewrite, redirect, or merge without explicit human approval, since it is a structural change to the live site.
95
+ - **Invariant:** The 522-site/64%-decayed HCU baseline shows decay clusters at scale across many pages at once; executing a large-scale rewrite or consolidation response to that scale of finding involves redirects and content replacement that a human must own the execution decision for, mirroring the internal-linking workflow's authority-consolidation-merge boundary.
96
+ - **PrimarySourceUrl:** https://detailed.com/q3/
97
+ - **PolicyClass:** human-approve
98
+ - **EvidenceGrade:** single-source
99
+ - **Keywords:** large-scale-rewrite, consolidation, human-approve, live-site-change