voidforge-build 23.9.1

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 (772) hide show
  1. package/dist/.claude/agents/adolin-brand.md +40 -0
  2. package/dist/.claude/agents/ahsoka-access-control.md +56 -0
  3. package/dist/.claude/agents/alfred-dependencies.md +43 -0
  4. package/dist/.claude/agents/alia-threat-detect.md +40 -0
  5. package/dist/.claude/agents/anakin-dark-side.md +41 -0
  6. package/dist/.claude/agents/aquaman-deep-dive.md +43 -0
  7. package/dist/.claude/agents/aragorn-orchestration.md +39 -0
  8. package/dist/.claude/agents/archer-greenfield.md +48 -0
  9. package/dist/.claude/agents/armin-clever.md +39 -0
  10. package/dist/.claude/agents/arwen-ui-polish.md +42 -0
  11. package/dist/.claude/agents/ashitaka-tech-debt.md +39 -0
  12. package/dist/.claude/agents/asuka-performance.md +39 -0
  13. package/dist/.claude/agents/bail-organa-governance.md +37 -0
  14. package/dist/.claude/agents/banner-database.md +44 -0
  15. package/dist/.claude/agents/barton-smoke-test.md +59 -0
  16. package/dist/.claude/agents/bashir-field-medic.md +63 -0
  17. package/dist/.claude/agents/batgirl-detail.md +43 -0
  18. package/dist/.claude/agents/batman-qa.md +73 -0
  19. package/dist/.claude/agents/bayta-evals.md +41 -0
  20. package/dist/.claude/agents/beast-boy-cross-env.md +43 -0
  21. package/dist/.claude/agents/beerus-destroyer.md +39 -0
  22. package/dist/.claude/agents/bel-riose-orchestration.md +40 -0
  23. package/dist/.claude/agents/beru-subprocess.md +37 -0
  24. package/dist/.claude/agents/bilbo-microcopy.md +43 -0
  25. package/dist/.claude/agents/black-canary-monitoring.md +43 -0
  26. package/dist/.claude/agents/bliss-ai-safety.md +40 -0
  27. package/dist/.claude/agents/bo-katan-perimeter.md +40 -0
  28. package/dist/.claude/agents/bombadil-forge-sync.md +62 -0
  29. package/dist/.claude/agents/boromir-hubris.md +40 -0
  30. package/dist/.claude/agents/breeze-platform-relations.md +40 -0
  31. package/dist/.claude/agents/bucky-legacy.md +43 -0
  32. package/dist/.claude/agents/bulma-engineering.md +40 -0
  33. package/dist/.claude/agents/calcifer-daemon.md +39 -0
  34. package/dist/.claude/agents/cara-dune-enforcement.md +37 -0
  35. package/dist/.claude/agents/cassian-recon.md +37 -0
  36. package/dist/.claude/agents/cc-persistent-process.md +39 -0
  37. package/dist/.claude/agents/celeborn-design-system.md +40 -0
  38. package/dist/.claude/agents/celebrimbor-forge-artist.md +62 -0
  39. package/dist/.claude/agents/chakotay-bridge.md +47 -0
  40. package/dist/.claude/agents/chani-worm-rider.md +61 -0
  41. package/dist/.claude/agents/chewie-dependency-audit.md +41 -0
  42. package/dist/.claude/agents/chrome-discovery.md +37 -0
  43. package/dist/.claude/agents/constantine-cursed-code.md +59 -0
  44. package/dist/.claude/agents/coulson-release.md +64 -0
  45. package/dist/.claude/agents/crusher-diagnostics.md +48 -0
  46. package/dist/.claude/agents/cyborg-system-integration.md +43 -0
  47. package/dist/.claude/agents/dalinar-positioning.md +40 -0
  48. package/dist/.claude/agents/daneel-model-migration.md +40 -0
  49. package/dist/.claude/agents/data-tech-debt.md +48 -0
  50. package/dist/.claude/agents/dax-legacy-wisdom.md +48 -0
  51. package/dist/.claude/agents/deathstroke-adversarial.md +59 -0
  52. package/dist/.claude/agents/denji-determination.md +39 -0
  53. package/dist/.claude/agents/din-djarin-bounty.md +42 -0
  54. package/dist/.claude/agents/dockson-treasury.md +67 -0
  55. package/dist/.claude/agents/dori-integration-check.md +37 -0
  56. package/dist/.claude/agents/dors-observability.md +40 -0
  57. package/dist/.claude/agents/drax-exact-match.md +42 -0
  58. package/dist/.claude/agents/ducem-token-economics.md +41 -0
  59. package/dist/.claude/agents/duncan-relay.md +40 -0
  60. package/dist/.claude/agents/duo-teardown.md +38 -0
  61. package/dist/.claude/agents/ed-network-scan.md +38 -0
  62. package/dist/.claude/agents/elrond-ux-strategy.md +39 -0
  63. package/dist/.claude/agents/eowyn-delight.md +56 -0
  64. package/dist/.claude/agents/erwin-strategy.md +39 -0
  65. package/dist/.claude/agents/ezra-catches-missed.md +40 -0
  66. package/dist/.claude/agents/ezri-session-analyst.md +45 -0
  67. package/dist/.claude/agents/falcon-migration.md +43 -0
  68. package/dist/.claude/agents/faramir-judgment.md +40 -0
  69. package/dist/.claude/agents/faye-resourceful.md +39 -0
  70. package/dist/.claude/agents/fenring-passive-monitor.md +37 -0
  71. package/dist/.claude/agents/fern-protocol.md +37 -0
  72. package/dist/.claude/agents/feyd-adversarial.md +41 -0
  73. package/dist/.claude/agents/flash-rapid-test.md +43 -0
  74. package/dist/.claude/agents/friday-automation.md +42 -0
  75. package/dist/.claude/agents/frieren-long-term.md +39 -0
  76. package/dist/.claude/agents/frodo-critical-path.md +40 -0
  77. package/dist/.claude/agents/fury-initiative.md +65 -0
  78. package/dist/.claude/agents/gaal-prompt-arch.md +41 -0
  79. package/dist/.claude/agents/galadriel-frontend.md +69 -0
  80. package/dist/.claude/agents/gamora-perf-assassin.md +43 -0
  81. package/dist/.claude/agents/gandalf-setup-wizard.md +63 -0
  82. package/dist/.claude/agents/gen-docs.md +37 -0
  83. package/dist/.claude/agents/ghanima-paired-monitor.md +37 -0
  84. package/dist/.claude/agents/gimli-performance.md +41 -0
  85. package/dist/.claude/agents/giyu-silent-guard.md +39 -0
  86. package/dist/.claude/agents/glorfindel-rendering.md +40 -0
  87. package/dist/.claude/agents/gohan-hidden-power.md +39 -0
  88. package/dist/.claude/agents/gojo-infinite-scale.md +39 -0
  89. package/dist/.claude/agents/goku-scaling.md +39 -0
  90. package/dist/.claude/agents/goldberry-change-detect.md +37 -0
  91. package/dist/.claude/agents/gordon-escalation.md +42 -0
  92. package/dist/.claude/agents/green-arrow-precision.md +43 -0
  93. package/dist/.claude/agents/green-lantern-scenarios.md +43 -0
  94. package/dist/.claude/agents/grogu-tiny-vulns.md +38 -0
  95. package/dist/.claude/agents/groot-caching.md +43 -0
  96. package/dist/.claude/agents/gurney-delivery.md +40 -0
  97. package/dist/.claude/agents/haku-deploy-wizard.md +65 -0
  98. package/dist/.claude/agents/haldir-boundaries.md +40 -0
  99. package/dist/.claude/agents/han-vuln-hunter.md +40 -0
  100. package/dist/.claude/agents/hange-experimentation.md +39 -0
  101. package/dist/.claude/agents/harah-protocol.md +38 -0
  102. package/dist/.claude/agents/hawkgirl-regression-sweep.md +43 -0
  103. package/dist/.claude/agents/heero-mission-deploy.md +39 -0
  104. package/dist/.claude/agents/hera-navigation.md +41 -0
  105. package/dist/.claude/agents/hill-mission-control.md +43 -0
  106. package/dist/.claude/agents/himmel-legacy.md +37 -0
  107. package/dist/.claude/agents/hober-tool-schema.md +40 -0
  108. package/dist/.claude/agents/hoid-copywriting.md +40 -0
  109. package/dist/.claude/agents/howl-migration.md +39 -0
  110. package/dist/.claude/agents/hughes-observability.md +37 -0
  111. package/dist/.claude/agents/huntress-flaky-bugs.md +42 -0
  112. package/dist/.claude/agents/irulan-historian.md +37 -0
  113. package/dist/.claude/agents/jake-reporter.md +45 -0
  114. package/dist/.claude/agents/janeway-novel-arch.md +48 -0
  115. package/dist/.claude/agents/janov-context-eng.md +40 -0
  116. package/dist/.claude/agents/jarvis-status.md +42 -0
  117. package/dist/.claude/agents/jean-pragmatic.md +39 -0
  118. package/dist/.claude/agents/jessica-voice.md +40 -0
  119. package/dist/.claude/agents/jet-maintenance.md +39 -0
  120. package/dist/.claude/agents/jin-disciplined-adv.md +39 -0
  121. package/dist/.claude/agents/kaji-intelligence.md +39 -0
  122. package/dist/.claude/agents/kaladin-organic-growth.md +40 -0
  123. package/dist/.claude/agents/kallen-hard-deploy.md +39 -0
  124. package/dist/.claude/agents/kanan-intuitive.md +41 -0
  125. package/dist/.claude/agents/kaoru-harmony.md +37 -0
  126. package/dist/.claude/agents/kaworu-solver.md +39 -0
  127. package/dist/.claude/agents/kelsier-growth.md +64 -0
  128. package/dist/.claude/agents/kenobi-security.md +70 -0
  129. package/dist/.claude/agents/kim-api-design.md +49 -0
  130. package/dist/.claude/agents/kira-pragmatic.md +48 -0
  131. package/dist/.claude/agents/kishibe-hardening.md +39 -0
  132. package/dist/.claude/agents/kohaku-rapid-response.md +36 -0
  133. package/dist/.claude/agents/krillin-support.md +36 -0
  134. package/dist/.claude/agents/kusanagi-devops.md +70 -0
  135. package/dist/.claude/agents/la-forge-reliability.md +63 -0
  136. package/dist/.claude/agents/lang-micro-changes.md +43 -0
  137. package/dist/.claude/agents/legolas-precision.md +42 -0
  138. package/dist/.claude/agents/leia-secrets.md +41 -0
  139. package/dist/.claude/agents/lelouch-orchestration.md +39 -0
  140. package/dist/.claude/agents/leto-ii-persistence.md +40 -0
  141. package/dist/.claude/agents/leto-protection.md +40 -0
  142. package/dist/.claude/agents/levi-deploy.md +40 -0
  143. package/dist/.claude/agents/liet-kynes-deep-system.md +40 -0
  144. package/dist/.claude/agents/lift-social-media.md +40 -0
  145. package/dist/.claude/agents/loki-chaos.md +58 -0
  146. package/dist/.claude/agents/lucius-config.md +43 -0
  147. package/dist/.claude/agents/luke-audit-journey.md +41 -0
  148. package/dist/.claude/agents/manhunter-shapeshifting.md +43 -0
  149. package/dist/.claude/agents/marsh-competitive-intel.md +41 -0
  150. package/dist/.claude/agents/maul-red-team.md +57 -0
  151. package/dist/.claude/agents/merry-pair-review.md +40 -0
  152. package/dist/.claude/agents/mikasa-protection.md +39 -0
  153. package/dist/.claude/agents/miles-teg-perf.md +40 -0
  154. package/dist/.claude/agents/milim-load-test.md +39 -0
  155. package/dist/.claude/agents/misato-operations.md +39 -0
  156. package/dist/.claude/agents/mob-capacity.md +39 -0
  157. package/dist/.claude/agents/mohiam-authentication.md +40 -0
  158. package/dist/.claude/agents/mon-mothma-security-mgmt.md +41 -0
  159. package/dist/.claude/agents/mugen-chaos.md +39 -0
  160. package/dist/.claude/agents/mule-adversarial-ai.md +41 -0
  161. package/dist/.claude/agents/mustang-cleanup.md +39 -0
  162. package/dist/.claude/agents/nanami-structured-ops.md +39 -0
  163. package/dist/.claude/agents/nausicaa-resources.md +39 -0
  164. package/dist/.claude/agents/navani-technical-seo.md +40 -0
  165. package/dist/.claude/agents/nebula-optimization.md +43 -0
  166. package/dist/.claude/agents/nightwing-regression.md +59 -0
  167. package/dist/.claude/agents/nobara-direct-fix.md +39 -0
  168. package/dist/.claude/agents/nog-solutions.md +48 -0
  169. package/dist/.claude/agents/nori-asset-scanner.md +37 -0
  170. package/dist/.claude/agents/obrien-root-cause.md +48 -0
  171. package/dist/.claude/agents/odo-structural-anomaly.md +48 -0
  172. package/dist/.claude/agents/okoye-data-integrity.md +43 -0
  173. package/dist/.claude/agents/olivier-hardening.md +39 -0
  174. package/dist/.claude/agents/oracle-static-analysis.md +59 -0
  175. package/dist/.claude/agents/ori-prompt-crafter.md +37 -0
  176. package/dist/.claude/agents/padme-data-protection.md +42 -0
  177. package/dist/.claude/agents/paris-route-planner.md +47 -0
  178. package/dist/.claude/agents/parker-connections.md +43 -0
  179. package/dist/.claude/agents/paul-orchestration.md +40 -0
  180. package/dist/.claude/agents/picard-architecture.md +64 -0
  181. package/dist/.claude/agents/piccolo-tactics.md +39 -0
  182. package/dist/.claude/agents/pike-bold-decisions.md +48 -0
  183. package/dist/.claude/agents/pippin-discovery.md +40 -0
  184. package/dist/.claude/agents/plo-koon-edge-cases.md +37 -0
  185. package/dist/.claude/agents/power-chaotic.md +39 -0
  186. package/dist/.claude/agents/qui-gon-subtle-vulns.md +40 -0
  187. package/dist/.claude/agents/radagast-edge-cases.md +41 -0
  188. package/dist/.claude/agents/raoden-conversion.md +41 -0
  189. package/dist/.claude/agents/raven-deep-analysis.md +43 -0
  190. package/dist/.claude/agents/red-hood-aggressive.md +47 -0
  191. package/dist/.claude/agents/rei-dangerous-tasks.md +39 -0
  192. package/dist/.claude/agents/reigen-debugger.md +39 -0
  193. package/dist/.claude/agents/rengoku-intense-monitor.md +39 -0
  194. package/dist/.claude/agents/rex-infrastructure.md +41 -0
  195. package/dist/.claude/agents/rhodes-production.md +43 -0
  196. package/dist/.claude/agents/riker-review.md +62 -0
  197. package/dist/.claude/agents/rimuru-adapter.md +39 -0
  198. package/dist/.claude/agents/riza-backup.md +39 -0
  199. package/dist/.claude/agents/robin-apprentice.md +42 -0
  200. package/dist/.claude/agents/rocket-scrappy.md +43 -0
  201. package/dist/.claude/agents/rogers-api-design.md +43 -0
  202. package/dist/.claude/agents/romanoff-integrations.md +44 -0
  203. package/dist/.claude/agents/sabine-unconventional.md +40 -0
  204. package/dist/.claude/agents/salvor-model-selection.md +42 -0
  205. package/dist/.claude/agents/samwise-accessibility.md +43 -0
  206. package/dist/.claude/agents/sarene-outreach.md +40 -0
  207. package/dist/.claude/agents/sasha-resources.md +37 -0
  208. package/dist/.claude/agents/scotty-infrastructure.md +48 -0
  209. package/dist/.claude/agents/seldon-ai.md +67 -0
  210. package/dist/.claude/agents/senku-provisioning.md +40 -0
  211. package/dist/.claude/agents/sentaro-scheduling.md +37 -0
  212. package/dist/.claude/agents/seven-optimization.md +48 -0
  213. package/dist/.claude/agents/shallan-creative.md +40 -0
  214. package/dist/.claude/agents/sheeana-transport.md +40 -0
  215. package/dist/.claude/agents/shuri-innovation.md +43 -0
  216. package/dist/.claude/agents/silver-surfer-herald.md +90 -0
  217. package/dist/.claude/agents/siona-evasion.md +41 -0
  218. package/dist/.claude/agents/sisko-campaign.md +68 -0
  219. package/dist/.claude/agents/spike-routing.md +40 -0
  220. package/dist/.claude/agents/spock-schema.md +62 -0
  221. package/dist/.claude/agents/starfire-brute-force.md +43 -0
  222. package/dist/.claude/agents/stark-backend.md +71 -0
  223. package/dist/.claude/agents/steris-budget.md +41 -0
  224. package/dist/.claude/agents/stilgar-channel-security.md +40 -0
  225. package/dist/.claude/agents/strange-service-arch.md +44 -0
  226. package/dist/.claude/agents/sung-workers.md +39 -0
  227. package/dist/.claude/agents/superman-strength-test.md +43 -0
  228. package/dist/.claude/agents/suzaku-execution.md +39 -0
  229. package/dist/.claude/agents/szeth-compliance.md +40 -0
  230. package/dist/.claude/agents/tanjiro-persistent.md +39 -0
  231. package/dist/.claude/agents/tchalla-quality.md +43 -0
  232. package/dist/.claude/agents/thanos-gauntlet.md +68 -0
  233. package/dist/.claude/agents/theoden-rally.md +40 -0
  234. package/dist/.claude/agents/thor-queues.md +44 -0
  235. package/dist/.claude/agents/thufir-protocol-parsing.md +40 -0
  236. package/dist/.claude/agents/todo-brute-force.md +39 -0
  237. package/dist/.claude/agents/torres-site-scanner.md +47 -0
  238. package/dist/.claude/agents/totoro-guardian.md +39 -0
  239. package/dist/.claude/agents/tpol-disciplined.md +48 -0
  240. package/dist/.claude/agents/treebeard-deliberation.md +41 -0
  241. package/dist/.claude/agents/troi-prd-compliance.md +64 -0
  242. package/dist/.claude/agents/trunks-rollback.md +39 -0
  243. package/dist/.claude/agents/tuvok-deep-current.md +63 -0
  244. package/dist/.claude/agents/uhura-integration.md +47 -0
  245. package/dist/.claude/agents/valkyrie-recovery.md +43 -0
  246. package/dist/.claude/agents/vegeta-monitoring.md +39 -0
  247. package/dist/.claude/agents/veldora-dormant.md +37 -0
  248. package/dist/.claude/agents/vin-analytics.md +41 -0
  249. package/dist/.claude/agents/vision-data-analysis.md +43 -0
  250. package/dist/.claude/agents/wanda-seldon-validation.md +38 -0
  251. package/dist/.claude/agents/wanda-state.md +43 -0
  252. package/dist/.claude/agents/wax-paid-ads.md +40 -0
  253. package/dist/.claude/agents/wayne-ab-testing.md +40 -0
  254. package/dist/.claude/agents/whis-precision.md +39 -0
  255. package/dist/.claude/agents/windu-input-validation.md +41 -0
  256. package/dist/.claude/agents/winry-maintenance.md +39 -0
  257. package/dist/.claude/agents/wonder-woman-truth.md +43 -0
  258. package/dist/.claude/agents/wong-documentation.md +58 -0
  259. package/dist/.claude/agents/worf-security-arch.md +49 -0
  260. package/dist/.claude/agents/yoda-auth.md +57 -0
  261. package/dist/.claude/agents/yueh-trust-verify.md +40 -0
  262. package/dist/.claude/agents/zatanna-impossible.md +43 -0
  263. package/dist/.claude/agents/zechs-rival.md +39 -0
  264. package/dist/.claude/agents/zenitsu-alerts.md +37 -0
  265. package/dist/.claude/commands/ai.md +84 -0
  266. package/dist/.claude/commands/architect.md +107 -0
  267. package/dist/.claude/commands/assemble.md +223 -0
  268. package/dist/.claude/commands/assess.md +86 -0
  269. package/dist/.claude/commands/blueprint.md +135 -0
  270. package/dist/.claude/commands/build.md +138 -0
  271. package/dist/.claude/commands/campaign.md +224 -0
  272. package/dist/.claude/commands/cultivation.md +184 -0
  273. package/dist/.claude/commands/current.md +128 -0
  274. package/dist/.claude/commands/dangerroom.md +74 -0
  275. package/dist/.claude/commands/debrief.md +180 -0
  276. package/dist/.claude/commands/deploy.md +108 -0
  277. package/dist/.claude/commands/devops.md +160 -0
  278. package/dist/.claude/commands/engage.md +135 -0
  279. package/dist/.claude/commands/gauntlet.md +179 -0
  280. package/dist/.claude/commands/git.md +104 -0
  281. package/dist/.claude/commands/grow.md +160 -0
  282. package/dist/.claude/commands/imagine.md +126 -0
  283. package/dist/.claude/commands/portfolio.md +51 -0
  284. package/dist/.claude/commands/prd.md +113 -0
  285. package/dist/.claude/commands/qa.md +130 -0
  286. package/dist/.claude/commands/review.md +9 -0
  287. package/dist/.claude/commands/security.md +9 -0
  288. package/dist/.claude/commands/sentinel.md +90 -0
  289. package/dist/.claude/commands/test.md +114 -0
  290. package/dist/.claude/commands/thumper.md +116 -0
  291. package/dist/.claude/commands/treasury.md +117 -0
  292. package/dist/.claude/commands/ux.md +132 -0
  293. package/dist/.claude/commands/vault.md +198 -0
  294. package/dist/.claude/commands/void.md +148 -0
  295. package/dist/CHANGELOG.md +2621 -0
  296. package/dist/CLAUDE.md +292 -0
  297. package/dist/HOLOCRON.md +859 -0
  298. package/dist/VERSION.md +149 -0
  299. package/dist/docs/NAMING_REGISTRY.md +479 -0
  300. package/dist/docs/methods/AI_INTELLIGENCE.md +276 -0
  301. package/dist/docs/methods/ASSEMBLER.md +142 -0
  302. package/dist/docs/methods/BACKEND_ENGINEER.md +165 -0
  303. package/dist/docs/methods/BUILD_JOURNAL.md +214 -0
  304. package/dist/docs/methods/BUILD_PROTOCOL.md +436 -0
  305. package/dist/docs/methods/CAMPAIGN.md +569 -0
  306. package/dist/docs/methods/CONTEXT_MANAGEMENT.md +189 -0
  307. package/dist/docs/methods/DEEP_CURRENT.md +184 -0
  308. package/dist/docs/methods/DEVOPS_ENGINEER.md +297 -0
  309. package/dist/docs/methods/FIELD_MEDIC.md +265 -0
  310. package/dist/docs/methods/FORGE_ARTIST.md +108 -0
  311. package/dist/docs/methods/FORGE_KEEPER.md +270 -0
  312. package/dist/docs/methods/GAUNTLET.md +364 -0
  313. package/dist/docs/methods/GROWTH_STRATEGIST.md +466 -0
  314. package/dist/docs/methods/HEARTBEAT.md +168 -0
  315. package/dist/docs/methods/MCP_INTEGRATION.md +139 -0
  316. package/dist/docs/methods/MUSTER.md +152 -0
  317. package/dist/docs/methods/PRD_GENERATOR.md +186 -0
  318. package/dist/docs/methods/PRODUCT_DESIGN_FRONTEND.md +252 -0
  319. package/dist/docs/methods/QA_ENGINEER.md +360 -0
  320. package/dist/docs/methods/RELEASE_MANAGER.md +145 -0
  321. package/dist/docs/methods/SECURITY_AUDITOR.md +328 -0
  322. package/dist/docs/methods/SUB_AGENTS.md +375 -0
  323. package/dist/docs/methods/SYSTEMS_ARCHITECT.md +180 -0
  324. package/dist/docs/methods/TESTING.md +359 -0
  325. package/dist/docs/methods/THUMPER.md +175 -0
  326. package/dist/docs/methods/TIME_VAULT.md +120 -0
  327. package/dist/docs/methods/TREASURY.md +184 -0
  328. package/dist/docs/methods/TROUBLESHOOTING.md +265 -0
  329. package/dist/docs/patterns/README.md +52 -0
  330. package/dist/docs/patterns/ad-billing-adapter.ts +537 -0
  331. package/dist/docs/patterns/ad-platform-adapter.ts +421 -0
  332. package/dist/docs/patterns/ai-classifier.ts +195 -0
  333. package/dist/docs/patterns/ai-eval.ts +272 -0
  334. package/dist/docs/patterns/ai-orchestrator.ts +341 -0
  335. package/dist/docs/patterns/ai-router.ts +194 -0
  336. package/dist/docs/patterns/ai-tool-schema.ts +237 -0
  337. package/dist/docs/patterns/api-route.ts +241 -0
  338. package/dist/docs/patterns/backtest-engine.ts +499 -0
  339. package/dist/docs/patterns/browser-review.ts +292 -0
  340. package/dist/docs/patterns/combobox.tsx +300 -0
  341. package/dist/docs/patterns/component.tsx +262 -0
  342. package/dist/docs/patterns/daemon-process.ts +338 -0
  343. package/dist/docs/patterns/data-pipeline.ts +297 -0
  344. package/dist/docs/patterns/database-migration.ts +466 -0
  345. package/dist/docs/patterns/e2e-test.ts +629 -0
  346. package/dist/docs/patterns/error-handling.ts +312 -0
  347. package/dist/docs/patterns/execution-safety.ts +601 -0
  348. package/dist/docs/patterns/financial-transaction.ts +366 -0
  349. package/dist/docs/patterns/funding-plan.ts +462 -0
  350. package/dist/docs/patterns/game-entity.ts +137 -0
  351. package/dist/docs/patterns/game-loop.ts +113 -0
  352. package/dist/docs/patterns/game-state.ts +143 -0
  353. package/dist/docs/patterns/job-queue.ts +225 -0
  354. package/dist/docs/patterns/kongo-integration.ts +164 -0
  355. package/dist/docs/patterns/middleware.ts +363 -0
  356. package/dist/docs/patterns/mobile-screen.tsx +139 -0
  357. package/dist/docs/patterns/mobile-service.ts +167 -0
  358. package/dist/docs/patterns/multi-tenant.ts +382 -0
  359. package/dist/docs/patterns/oauth-token-lifecycle.ts +223 -0
  360. package/dist/docs/patterns/outbound-rate-limiter.ts +260 -0
  361. package/dist/docs/patterns/prompt-template.ts +195 -0
  362. package/dist/docs/patterns/revenue-source-adapter.ts +311 -0
  363. package/dist/docs/patterns/service.ts +224 -0
  364. package/dist/docs/patterns/sse-endpoint.ts +118 -0
  365. package/dist/docs/patterns/stablecoin-adapter.ts +511 -0
  366. package/dist/docs/patterns/third-party-script.ts +68 -0
  367. package/dist/scripts/thumper/gom-jabbar.sh +241 -0
  368. package/dist/scripts/thumper/relay.sh +610 -0
  369. package/dist/scripts/thumper/scan.sh +359 -0
  370. package/dist/scripts/thumper/thumper.sh +190 -0
  371. package/dist/scripts/thumper/water-rings.sh +76 -0
  372. package/dist/scripts/vault-read.d.ts +11 -0
  373. package/dist/scripts/vault-read.js +89 -0
  374. package/dist/scripts/voidforge.d.ts +21 -0
  375. package/dist/scripts/voidforge.js +614 -0
  376. package/dist/wizard/api/auth.d.ts +5 -0
  377. package/dist/wizard/api/auth.js +139 -0
  378. package/dist/wizard/api/blueprint.d.ts +34 -0
  379. package/dist/wizard/api/blueprint.js +161 -0
  380. package/dist/wizard/api/cloud-providers.d.ts +16 -0
  381. package/dist/wizard/api/cloud-providers.js +363 -0
  382. package/dist/wizard/api/credentials.d.ts +1 -0
  383. package/dist/wizard/api/credentials.js +265 -0
  384. package/dist/wizard/api/danger-room.d.ts +24 -0
  385. package/dist/wizard/api/danger-room.js +274 -0
  386. package/dist/wizard/api/deploy.d.ts +4 -0
  387. package/dist/wizard/api/deploy.js +164 -0
  388. package/dist/wizard/api/prd.d.ts +1 -0
  389. package/dist/wizard/api/prd.js +363 -0
  390. package/dist/wizard/api/project.d.ts +1 -0
  391. package/dist/wizard/api/project.js +241 -0
  392. package/dist/wizard/api/projects-data.d.ts +5 -0
  393. package/dist/wizard/api/projects-data.js +234 -0
  394. package/dist/wizard/api/projects-list.d.ts +5 -0
  395. package/dist/wizard/api/projects-list.js +227 -0
  396. package/dist/wizard/api/projects.d.ts +7 -0
  397. package/dist/wizard/api/projects.js +273 -0
  398. package/dist/wizard/api/provision-status.d.ts +5 -0
  399. package/dist/wizard/api/provision-status.js +47 -0
  400. package/dist/wizard/api/provision-steps.d.ts +21 -0
  401. package/dist/wizard/api/provision-steps.js +44 -0
  402. package/dist/wizard/api/provision-validate.d.ts +22 -0
  403. package/dist/wizard/api/provision-validate.js +164 -0
  404. package/dist/wizard/api/provision.d.ts +2 -0
  405. package/dist/wizard/api/provision.js +239 -0
  406. package/dist/wizard/api/terminal.d.ts +25 -0
  407. package/dist/wizard/api/terminal.js +246 -0
  408. package/dist/wizard/api/users.d.ts +6 -0
  409. package/dist/wizard/api/users.js +244 -0
  410. package/dist/wizard/api/war-room.d.ts +16 -0
  411. package/dist/wizard/api/war-room.js +70 -0
  412. package/dist/wizard/danger-room.config.json +5 -0
  413. package/dist/wizard/lib/ad-platform-core.d.ts +6 -0
  414. package/dist/wizard/lib/ad-platform-core.js +1 -0
  415. package/dist/wizard/lib/adapters/index.d.ts +52 -0
  416. package/dist/wizard/lib/adapters/index.js +38 -0
  417. package/dist/wizard/lib/adapters/sandbox-bank.d.ts +17 -0
  418. package/dist/wizard/lib/adapters/sandbox-bank.js +77 -0
  419. package/dist/wizard/lib/adapters/sandbox.d.ts +39 -0
  420. package/dist/wizard/lib/adapters/sandbox.js +174 -0
  421. package/dist/wizard/lib/adapters/stripe.d.ts +19 -0
  422. package/dist/wizard/lib/adapters/stripe.js +143 -0
  423. package/dist/wizard/lib/adapters/types.d.ts +9 -0
  424. package/dist/wizard/lib/adapters/types.js +10 -0
  425. package/dist/wizard/lib/agent-memory.d.ts +36 -0
  426. package/dist/wizard/lib/agent-memory.js +114 -0
  427. package/dist/wizard/lib/agent-registry.d.ts +21 -0
  428. package/dist/wizard/lib/agent-registry.js +105 -0
  429. package/dist/wizard/lib/anomaly-detection.d.ts +59 -0
  430. package/dist/wizard/lib/anomaly-detection.js +122 -0
  431. package/dist/wizard/lib/anthropic.d.ts +21 -0
  432. package/dist/wizard/lib/anthropic.js +105 -0
  433. package/dist/wizard/lib/asset-scanner.d.ts +23 -0
  434. package/dist/wizard/lib/asset-scanner.js +107 -0
  435. package/dist/wizard/lib/audit-log.d.ts +23 -0
  436. package/dist/wizard/lib/audit-log.js +70 -0
  437. package/dist/wizard/lib/autonomy-controller.d.ts +76 -0
  438. package/dist/wizard/lib/autonomy-controller.js +184 -0
  439. package/dist/wizard/lib/body-parser.d.ts +2 -0
  440. package/dist/wizard/lib/body-parser.js +36 -0
  441. package/dist/wizard/lib/build-analytics.d.ts +39 -0
  442. package/dist/wizard/lib/build-analytics.js +91 -0
  443. package/dist/wizard/lib/build-step.d.ts +21 -0
  444. package/dist/wizard/lib/build-step.js +104 -0
  445. package/dist/wizard/lib/campaign-proposer.d.ts +39 -0
  446. package/dist/wizard/lib/campaign-proposer.js +181 -0
  447. package/dist/wizard/lib/campaign-state-machine.d.ts +63 -0
  448. package/dist/wizard/lib/campaign-state-machine.js +114 -0
  449. package/dist/wizard/lib/ci-generator.d.ts +14 -0
  450. package/dist/wizard/lib/ci-generator.js +187 -0
  451. package/dist/wizard/lib/claude-merge.d.ts +38 -0
  452. package/dist/wizard/lib/claude-merge.js +115 -0
  453. package/dist/wizard/lib/codegen/erd-gen.d.ts +16 -0
  454. package/dist/wizard/lib/codegen/erd-gen.js +98 -0
  455. package/dist/wizard/lib/codegen/integrations.d.ts +18 -0
  456. package/dist/wizard/lib/codegen/integrations.js +189 -0
  457. package/dist/wizard/lib/codegen/openapi-gen.d.ts +15 -0
  458. package/dist/wizard/lib/codegen/openapi-gen.js +79 -0
  459. package/dist/wizard/lib/codegen/prisma-types.d.ts +15 -0
  460. package/dist/wizard/lib/codegen/prisma-types.js +44 -0
  461. package/dist/wizard/lib/codegen/seed-gen.d.ts +16 -0
  462. package/dist/wizard/lib/codegen/seed-gen.js +128 -0
  463. package/dist/wizard/lib/compliance.d.ts +51 -0
  464. package/dist/wizard/lib/compliance.js +112 -0
  465. package/dist/wizard/lib/correlation-engine.d.ts +59 -0
  466. package/dist/wizard/lib/correlation-engine.js +152 -0
  467. package/dist/wizard/lib/cost-estimator.d.ts +22 -0
  468. package/dist/wizard/lib/cost-estimator.js +72 -0
  469. package/dist/wizard/lib/cost-tracker.d.ts +27 -0
  470. package/dist/wizard/lib/cost-tracker.js +37 -0
  471. package/dist/wizard/lib/daemon-aggregator.d.ts +76 -0
  472. package/dist/wizard/lib/daemon-aggregator.js +241 -0
  473. package/dist/wizard/lib/daemon-core.d.ts +16 -0
  474. package/dist/wizard/lib/daemon-core.js +39 -0
  475. package/dist/wizard/lib/dashboard-data.d.ts +123 -0
  476. package/dist/wizard/lib/dashboard-data.js +314 -0
  477. package/dist/wizard/lib/dashboard-ws.d.ts +28 -0
  478. package/dist/wizard/lib/dashboard-ws.js +117 -0
  479. package/dist/wizard/lib/deep-current.d.ts +77 -0
  480. package/dist/wizard/lib/deep-current.js +247 -0
  481. package/dist/wizard/lib/deploy-coordinator.d.ts +40 -0
  482. package/dist/wizard/lib/deploy-coordinator.js +86 -0
  483. package/dist/wizard/lib/deploy-log.d.ts +28 -0
  484. package/dist/wizard/lib/deploy-log.js +52 -0
  485. package/dist/wizard/lib/desktop-notify.d.ts +27 -0
  486. package/dist/wizard/lib/desktop-notify.js +98 -0
  487. package/dist/wizard/lib/dns/cloudflare-dns.d.ts +35 -0
  488. package/dist/wizard/lib/dns/cloudflare-dns.js +216 -0
  489. package/dist/wizard/lib/dns/cloudflare-registrar.d.ts +31 -0
  490. package/dist/wizard/lib/dns/cloudflare-registrar.js +148 -0
  491. package/dist/wizard/lib/dns/types.d.ts +22 -0
  492. package/dist/wizard/lib/dns/types.js +4 -0
  493. package/dist/wizard/lib/document-discovery.d.ts +33 -0
  494. package/dist/wizard/lib/document-discovery.js +145 -0
  495. package/dist/wizard/lib/env-validator.d.ts +14 -0
  496. package/dist/wizard/lib/env-validator.js +205 -0
  497. package/dist/wizard/lib/env-writer.d.ts +13 -0
  498. package/dist/wizard/lib/env-writer.js +26 -0
  499. package/dist/wizard/lib/exec.d.ts +30 -0
  500. package/dist/wizard/lib/exec.js +52 -0
  501. package/dist/wizard/lib/experiment.d.ts +70 -0
  502. package/dist/wizard/lib/experiment.js +169 -0
  503. package/dist/wizard/lib/extensions.d.ts +20 -0
  504. package/dist/wizard/lib/extensions.js +183 -0
  505. package/dist/wizard/lib/financial/adapter-factory.d.ts +47 -0
  506. package/dist/wizard/lib/financial/adapter-factory.js +225 -0
  507. package/dist/wizard/lib/financial/billing/base.d.ts +6 -0
  508. package/dist/wizard/lib/financial/billing/base.js +1 -0
  509. package/dist/wizard/lib/financial/billing/google-billing.d.ts +56 -0
  510. package/dist/wizard/lib/financial/billing/google-billing.js +298 -0
  511. package/dist/wizard/lib/financial/billing/meta-billing.d.ts +54 -0
  512. package/dist/wizard/lib/financial/billing/meta-billing.js +243 -0
  513. package/dist/wizard/lib/financial/billing/tiktok-billing.d.ts +54 -0
  514. package/dist/wizard/lib/financial/billing/tiktok-billing.js +260 -0
  515. package/dist/wizard/lib/financial/campaign/base.d.ts +13 -0
  516. package/dist/wizard/lib/financial/campaign/base.js +1 -0
  517. package/dist/wizard/lib/financial/campaign/campaign-common.d.ts +21 -0
  518. package/dist/wizard/lib/financial/campaign/campaign-common.js +58 -0
  519. package/dist/wizard/lib/financial/campaign/google-api.d.ts +35 -0
  520. package/dist/wizard/lib/financial/campaign/google-api.js +118 -0
  521. package/dist/wizard/lib/financial/campaign/google-campaign.d.ts +38 -0
  522. package/dist/wizard/lib/financial/campaign/google-campaign.js +186 -0
  523. package/dist/wizard/lib/financial/campaign/meta-api.d.ts +28 -0
  524. package/dist/wizard/lib/financial/campaign/meta-api.js +93 -0
  525. package/dist/wizard/lib/financial/campaign/meta-campaign.d.ts +32 -0
  526. package/dist/wizard/lib/financial/campaign/meta-campaign.js +189 -0
  527. package/dist/wizard/lib/financial/campaign/sandbox-campaign.d.ts +45 -0
  528. package/dist/wizard/lib/financial/campaign/sandbox-campaign.js +261 -0
  529. package/dist/wizard/lib/financial/campaign/tiktok-api.d.ts +25 -0
  530. package/dist/wizard/lib/financial/campaign/tiktok-api.js +81 -0
  531. package/dist/wizard/lib/financial/campaign/tiktok-campaign.d.ts +37 -0
  532. package/dist/wizard/lib/financial/campaign/tiktok-campaign.js +155 -0
  533. package/dist/wizard/lib/financial/funding-auto.d.ts +44 -0
  534. package/dist/wizard/lib/financial/funding-auto.js +52 -0
  535. package/dist/wizard/lib/financial/funding-policy.d.ts +60 -0
  536. package/dist/wizard/lib/financial/funding-policy.js +179 -0
  537. package/dist/wizard/lib/financial/platform-planner.d.ts +47 -0
  538. package/dist/wizard/lib/financial/platform-planner.js +134 -0
  539. package/dist/wizard/lib/financial/reconciliation-engine.d.ts +78 -0
  540. package/dist/wizard/lib/financial/reconciliation-engine.js +193 -0
  541. package/dist/wizard/lib/financial/registry.d.ts +22 -0
  542. package/dist/wizard/lib/financial/registry.js +26 -0
  543. package/dist/wizard/lib/financial/reporting.d.ts +96 -0
  544. package/dist/wizard/lib/financial/reporting.js +198 -0
  545. package/dist/wizard/lib/financial/stablecoin/base.d.ts +6 -0
  546. package/dist/wizard/lib/financial/stablecoin/base.js +1 -0
  547. package/dist/wizard/lib/financial/stablecoin/circle.d.ts +54 -0
  548. package/dist/wizard/lib/financial/stablecoin/circle.js +367 -0
  549. package/dist/wizard/lib/financial/stablecoin/mercury.d.ts +24 -0
  550. package/dist/wizard/lib/financial/stablecoin/mercury.js +171 -0
  551. package/dist/wizard/lib/financial/stablecoin/sandbox-stablecoin.d.ts +47 -0
  552. package/dist/wizard/lib/financial/stablecoin/sandbox-stablecoin.js +202 -0
  553. package/dist/wizard/lib/financial/treasury-planner.d.ts +52 -0
  554. package/dist/wizard/lib/financial/treasury-planner.js +128 -0
  555. package/dist/wizard/lib/financial-core.d.ts +6 -0
  556. package/dist/wizard/lib/financial-core.js +5 -0
  557. package/dist/wizard/lib/financial-vault.d.ts +34 -0
  558. package/dist/wizard/lib/financial-vault.js +200 -0
  559. package/dist/wizard/lib/frontmatter.d.ts +30 -0
  560. package/dist/wizard/lib/frontmatter.js +99 -0
  561. package/dist/wizard/lib/gap-analysis.d.ts +37 -0
  562. package/dist/wizard/lib/gap-analysis.js +218 -0
  563. package/dist/wizard/lib/github.d.ts +22 -0
  564. package/dist/wizard/lib/github.js +261 -0
  565. package/dist/wizard/lib/headless-deploy.d.ts +14 -0
  566. package/dist/wizard/lib/headless-deploy.js +452 -0
  567. package/dist/wizard/lib/health-monitor.d.ts +15 -0
  568. package/dist/wizard/lib/health-monitor.js +91 -0
  569. package/dist/wizard/lib/health-poller.d.ts +9 -0
  570. package/dist/wizard/lib/health-poller.js +123 -0
  571. package/dist/wizard/lib/heartbeat-lifecycle.d.ts +71 -0
  572. package/dist/wizard/lib/heartbeat-lifecycle.js +107 -0
  573. package/dist/wizard/lib/heartbeat-scheduler.d.ts +26 -0
  574. package/dist/wizard/lib/heartbeat-scheduler.js +155 -0
  575. package/dist/wizard/lib/heartbeat.d.ts +22 -0
  576. package/dist/wizard/lib/heartbeat.js +538 -0
  577. package/dist/wizard/lib/herald.d.ts +28 -0
  578. package/dist/wizard/lib/herald.js +167 -0
  579. package/dist/wizard/lib/http-helpers.d.ts +9 -0
  580. package/dist/wizard/lib/http-helpers.js +24 -0
  581. package/dist/wizard/lib/image-gen.d.ts +56 -0
  582. package/dist/wizard/lib/image-gen.js +159 -0
  583. package/dist/wizard/lib/instance-sizing.d.ts +26 -0
  584. package/dist/wizard/lib/instance-sizing.js +51 -0
  585. package/dist/wizard/lib/kongo/analytics.d.ts +29 -0
  586. package/dist/wizard/lib/kongo/analytics.js +179 -0
  587. package/dist/wizard/lib/kongo/campaigns.d.ts +52 -0
  588. package/dist/wizard/lib/kongo/campaigns.js +91 -0
  589. package/dist/wizard/lib/kongo/client.d.ts +58 -0
  590. package/dist/wizard/lib/kongo/client.js +221 -0
  591. package/dist/wizard/lib/kongo/jobs.d.ts +57 -0
  592. package/dist/wizard/lib/kongo/jobs.js +122 -0
  593. package/dist/wizard/lib/kongo/pages.d.ts +60 -0
  594. package/dist/wizard/lib/kongo/pages.js +150 -0
  595. package/dist/wizard/lib/kongo/provisioner.d.ts +64 -0
  596. package/dist/wizard/lib/kongo/provisioner.js +116 -0
  597. package/dist/wizard/lib/kongo/seed.d.ts +49 -0
  598. package/dist/wizard/lib/kongo/seed.js +237 -0
  599. package/dist/wizard/lib/kongo/types.d.ts +323 -0
  600. package/dist/wizard/lib/kongo/types.js +11 -0
  601. package/dist/wizard/lib/kongo/variants.d.ts +57 -0
  602. package/dist/wizard/lib/kongo/variants.js +88 -0
  603. package/dist/wizard/lib/kongo/webhooks.d.ts +41 -0
  604. package/dist/wizard/lib/kongo/webhooks.js +112 -0
  605. package/dist/wizard/lib/marker.d.ts +28 -0
  606. package/dist/wizard/lib/marker.js +79 -0
  607. package/dist/wizard/lib/migrator.d.ts +35 -0
  608. package/dist/wizard/lib/migrator.js +190 -0
  609. package/dist/wizard/lib/natural-language-deploy.d.ts +30 -0
  610. package/dist/wizard/lib/natural-language-deploy.js +186 -0
  611. package/dist/wizard/lib/network.d.ts +22 -0
  612. package/dist/wizard/lib/network.js +72 -0
  613. package/dist/wizard/lib/oauth-core.d.ts +6 -0
  614. package/dist/wizard/lib/oauth-core.js +5 -0
  615. package/dist/wizard/lib/open-browser.d.ts +1 -0
  616. package/dist/wizard/lib/open-browser.js +26 -0
  617. package/dist/wizard/lib/patterns/ad-billing-adapter.d.ts +209 -0
  618. package/dist/wizard/lib/patterns/ad-billing-adapter.js +269 -0
  619. package/dist/wizard/lib/patterns/ad-platform-adapter.d.ts +200 -0
  620. package/dist/wizard/lib/patterns/ad-platform-adapter.js +212 -0
  621. package/dist/wizard/lib/patterns/daemon-process.d.ts +88 -0
  622. package/dist/wizard/lib/patterns/daemon-process.js +271 -0
  623. package/dist/wizard/lib/patterns/financial-transaction.d.ts +171 -0
  624. package/dist/wizard/lib/patterns/financial-transaction.js +154 -0
  625. package/dist/wizard/lib/patterns/funding-plan.d.ts +136 -0
  626. package/dist/wizard/lib/patterns/funding-plan.js +200 -0
  627. package/dist/wizard/lib/patterns/oauth-token-lifecycle.d.ts +94 -0
  628. package/dist/wizard/lib/patterns/oauth-token-lifecycle.js +139 -0
  629. package/dist/wizard/lib/patterns/outbound-rate-limiter.d.ts +67 -0
  630. package/dist/wizard/lib/patterns/outbound-rate-limiter.js +216 -0
  631. package/dist/wizard/lib/patterns/revenue-source-adapter.d.ts +96 -0
  632. package/dist/wizard/lib/patterns/revenue-source-adapter.js +182 -0
  633. package/dist/wizard/lib/patterns/stablecoin-adapter.d.ts +218 -0
  634. package/dist/wizard/lib/patterns/stablecoin-adapter.js +264 -0
  635. package/dist/wizard/lib/prd-validator.d.ts +39 -0
  636. package/dist/wizard/lib/prd-validator.js +137 -0
  637. package/dist/wizard/lib/project-init.d.ts +24 -0
  638. package/dist/wizard/lib/project-init.js +228 -0
  639. package/dist/wizard/lib/project-registry.d.ts +86 -0
  640. package/dist/wizard/lib/project-registry.js +359 -0
  641. package/dist/wizard/lib/project-scope.d.ts +64 -0
  642. package/dist/wizard/lib/project-scope.js +96 -0
  643. package/dist/wizard/lib/project-vault.d.ts +47 -0
  644. package/dist/wizard/lib/project-vault.js +221 -0
  645. package/dist/wizard/lib/provision-manifest.d.ts +44 -0
  646. package/dist/wizard/lib/provision-manifest.js +164 -0
  647. package/dist/wizard/lib/provisioner-registry.d.ts +15 -0
  648. package/dist/wizard/lib/provisioner-registry.js +34 -0
  649. package/dist/wizard/lib/provisioners/aws-config.d.ts +36 -0
  650. package/dist/wizard/lib/provisioners/aws-config.js +56 -0
  651. package/dist/wizard/lib/provisioners/aws-ec2.d.ts +19 -0
  652. package/dist/wizard/lib/provisioners/aws-ec2.js +241 -0
  653. package/dist/wizard/lib/provisioners/aws-rds.d.ts +10 -0
  654. package/dist/wizard/lib/provisioners/aws-rds.js +199 -0
  655. package/dist/wizard/lib/provisioners/aws-vps.d.ts +6 -0
  656. package/dist/wizard/lib/provisioners/aws-vps.js +231 -0
  657. package/dist/wizard/lib/provisioners/cloudflare.d.ts +6 -0
  658. package/dist/wizard/lib/provisioners/cloudflare.js +300 -0
  659. package/dist/wizard/lib/provisioners/docker.d.ts +6 -0
  660. package/dist/wizard/lib/provisioners/docker.js +75 -0
  661. package/dist/wizard/lib/provisioners/http-client.d.ts +20 -0
  662. package/dist/wizard/lib/provisioners/http-client.js +79 -0
  663. package/dist/wizard/lib/provisioners/railway-config.d.ts +24 -0
  664. package/dist/wizard/lib/provisioners/railway-config.js +220 -0
  665. package/dist/wizard/lib/provisioners/railway-deploy.d.ts +19 -0
  666. package/dist/wizard/lib/provisioners/railway-deploy.js +205 -0
  667. package/dist/wizard/lib/provisioners/railway.d.ts +6 -0
  668. package/dist/wizard/lib/provisioners/railway.js +45 -0
  669. package/dist/wizard/lib/provisioners/scripts/caddyfile.d.ts +10 -0
  670. package/dist/wizard/lib/provisioners/scripts/caddyfile.js +54 -0
  671. package/dist/wizard/lib/provisioners/scripts/deploy-vps.d.ts +10 -0
  672. package/dist/wizard/lib/provisioners/scripts/deploy-vps.js +112 -0
  673. package/dist/wizard/lib/provisioners/scripts/docker-compose.d.ts +11 -0
  674. package/dist/wizard/lib/provisioners/scripts/docker-compose.js +91 -0
  675. package/dist/wizard/lib/provisioners/scripts/dockerfile.d.ts +5 -0
  676. package/dist/wizard/lib/provisioners/scripts/dockerfile.js +185 -0
  677. package/dist/wizard/lib/provisioners/scripts/ecosystem-config.d.ts +10 -0
  678. package/dist/wizard/lib/provisioners/scripts/ecosystem-config.js +36 -0
  679. package/dist/wizard/lib/provisioners/scripts/provision-vps.d.ts +14 -0
  680. package/dist/wizard/lib/provisioners/scripts/provision-vps.js +202 -0
  681. package/dist/wizard/lib/provisioners/scripts/rollback-vps.d.ts +10 -0
  682. package/dist/wizard/lib/provisioners/scripts/rollback-vps.js +67 -0
  683. package/dist/wizard/lib/provisioners/self-deploy.d.ts +41 -0
  684. package/dist/wizard/lib/provisioners/self-deploy.js +185 -0
  685. package/dist/wizard/lib/provisioners/static-s3.d.ts +6 -0
  686. package/dist/wizard/lib/provisioners/static-s3.js +235 -0
  687. package/dist/wizard/lib/provisioners/types.d.ts +40 -0
  688. package/dist/wizard/lib/provisioners/types.js +4 -0
  689. package/dist/wizard/lib/provisioners/vercel.d.ts +6 -0
  690. package/dist/wizard/lib/provisioners/vercel.js +287 -0
  691. package/dist/wizard/lib/pty-manager.d.ts +42 -0
  692. package/dist/wizard/lib/pty-manager.js +244 -0
  693. package/dist/wizard/lib/rate-limiter-core.d.ts +5 -0
  694. package/dist/wizard/lib/rate-limiter-core.js +5 -0
  695. package/dist/wizard/lib/reconciliation.d.ts +43 -0
  696. package/dist/wizard/lib/reconciliation.js +173 -0
  697. package/dist/wizard/lib/revenue-types.d.ts +5 -0
  698. package/dist/wizard/lib/revenue-types.js +1 -0
  699. package/dist/wizard/lib/route-optimizer.d.ts +28 -0
  700. package/dist/wizard/lib/route-optimizer.js +93 -0
  701. package/dist/wizard/lib/s3-deploy.d.ts +19 -0
  702. package/dist/wizard/lib/s3-deploy.js +156 -0
  703. package/dist/wizard/lib/safety-tiers.d.ts +76 -0
  704. package/dist/wizard/lib/safety-tiers.js +134 -0
  705. package/dist/wizard/lib/sentry-generator.d.ts +15 -0
  706. package/dist/wizard/lib/sentry-generator.js +116 -0
  707. package/dist/wizard/lib/server-config.d.ts +13 -0
  708. package/dist/wizard/lib/server-config.js +23 -0
  709. package/dist/wizard/lib/service-install.d.ts +18 -0
  710. package/dist/wizard/lib/service-install.js +182 -0
  711. package/dist/wizard/lib/site-scanner.d.ts +80 -0
  712. package/dist/wizard/lib/site-scanner.js +262 -0
  713. package/dist/wizard/lib/ssh-deploy.d.ts +25 -0
  714. package/dist/wizard/lib/ssh-deploy.js +225 -0
  715. package/dist/wizard/lib/templates.d.ts +24 -0
  716. package/dist/wizard/lib/templates.js +219 -0
  717. package/dist/wizard/lib/totp.d.ts +35 -0
  718. package/dist/wizard/lib/totp.js +277 -0
  719. package/dist/wizard/lib/tower-auth.d.ts +43 -0
  720. package/dist/wizard/lib/tower-auth.js +352 -0
  721. package/dist/wizard/lib/tower-rate-limit.d.ts +14 -0
  722. package/dist/wizard/lib/tower-rate-limit.js +61 -0
  723. package/dist/wizard/lib/tower-session.d.ts +28 -0
  724. package/dist/wizard/lib/tower-session.js +119 -0
  725. package/dist/wizard/lib/treasury-backup.d.ts +23 -0
  726. package/dist/wizard/lib/treasury-backup.js +127 -0
  727. package/dist/wizard/lib/treasury-circuit-breakers.d.ts +28 -0
  728. package/dist/wizard/lib/treasury-circuit-breakers.js +74 -0
  729. package/dist/wizard/lib/treasury-handlers.d.ts +21 -0
  730. package/dist/wizard/lib/treasury-handlers.js +281 -0
  731. package/dist/wizard/lib/treasury-heartbeat.d.ts +18 -0
  732. package/dist/wizard/lib/treasury-heartbeat.js +20 -0
  733. package/dist/wizard/lib/treasury-io.d.ts +107 -0
  734. package/dist/wizard/lib/treasury-io.js +254 -0
  735. package/dist/wizard/lib/treasury-jobs.d.ts +14 -0
  736. package/dist/wizard/lib/treasury-jobs.js +589 -0
  737. package/dist/wizard/lib/treasury-migrator.d.ts +59 -0
  738. package/dist/wizard/lib/treasury-migrator.js +227 -0
  739. package/dist/wizard/lib/treasury-reader.d.ts +52 -0
  740. package/dist/wizard/lib/treasury-reader.js +235 -0
  741. package/dist/wizard/lib/updater.d.ts +29 -0
  742. package/dist/wizard/lib/updater.js +203 -0
  743. package/dist/wizard/lib/user-manager.d.ts +39 -0
  744. package/dist/wizard/lib/user-manager.js +182 -0
  745. package/dist/wizard/lib/vault.d.ts +26 -0
  746. package/dist/wizard/lib/vault.js +161 -0
  747. package/dist/wizard/router.d.ts +12 -0
  748. package/dist/wizard/router.js +58 -0
  749. package/dist/wizard/server.d.ts +18 -0
  750. package/dist/wizard/server.js +427 -0
  751. package/dist/wizard/ui/app.js +1357 -0
  752. package/dist/wizard/ui/danger-room-prophecy.js +217 -0
  753. package/dist/wizard/ui/danger-room.html +27 -0
  754. package/dist/wizard/ui/danger-room.js +29 -0
  755. package/dist/wizard/ui/deploy.html +181 -0
  756. package/dist/wizard/ui/deploy.js +616 -0
  757. package/dist/wizard/ui/favicon.svg +11 -0
  758. package/dist/wizard/ui/index.html +407 -0
  759. package/dist/wizard/ui/lobby.html +235 -0
  760. package/dist/wizard/ui/lobby.js +843 -0
  761. package/dist/wizard/ui/login.html +111 -0
  762. package/dist/wizard/ui/login.js +199 -0
  763. package/dist/wizard/ui/project.html +285 -0
  764. package/dist/wizard/ui/project.js +324 -0
  765. package/dist/wizard/ui/rollback.js +107 -0
  766. package/dist/wizard/ui/styles.css +1040 -0
  767. package/dist/wizard/ui/tower.html +177 -0
  768. package/dist/wizard/ui/tower.js +445 -0
  769. package/dist/wizard/ui/war-room-prophecy.js +217 -0
  770. package/dist/wizard/ui/war-room.html +27 -0
  771. package/dist/wizard/ui/war-room.js +29 -0
  772. package/package.json +60 -0
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Kongo Analytics — Campaign analytics and computed growth signal.
3
+ *
4
+ * Kongo doesn't have a dedicated growth-signal endpoint, so we compute it
5
+ * client-side from the campaign analytics data using statistical analysis.
6
+ *
7
+ * Real Kongo API endpoint:
8
+ * - GET /engine/campaigns/:campaignId/analytics — per-variant breakdown
9
+ *
10
+ * PRD Reference: PRD-kongo-integration.md §4.3
11
+ */
12
+ // ── Analytics Operations ─────────────────────────────────
13
+ /**
14
+ * Get campaign analytics with per-variant, per-source, and daily breakdown.
15
+ */
16
+ export async function getCampaignAnalytics(client, campaignId, period) {
17
+ const query = {};
18
+ if (period)
19
+ query.period = period;
20
+ return client.get(`/engine/campaigns/${encodeURIComponent(campaignId)}/analytics`, query);
21
+ }
22
+ // ── Computed Growth Signal ───────────────────────────────
23
+ // Minimum sample size per variant before making recommendations
24
+ const MIN_SAMPLE_SIZE = 100;
25
+ // Minimum total views before any signal is meaningful
26
+ const MIN_TOTAL_VIEWS = 200;
27
+ // Z-score threshold for 95% confidence
28
+ const Z_95 = 1.96;
29
+ /**
30
+ * Compute a growth signal from campaign analytics.
31
+ *
32
+ * This replaces the hypothetical /growth-signal endpoint from the PRD.
33
+ * Uses two-proportion z-test to determine if any variant significantly
34
+ * outperforms the control (first variant by order).
35
+ */
36
+ export function computeGrowthSignal(campaignId, analytics) {
37
+ const timestamp = new Date().toISOString();
38
+ const variants = analytics.byVariant;
39
+ // Not enough data yet
40
+ if (analytics.summary.totalViews < MIN_TOTAL_VIEWS || variants.length < 2) {
41
+ return {
42
+ campaignId,
43
+ timestamp,
44
+ winningVariantId: null,
45
+ confidence: 0,
46
+ conversionRateDelta: 0,
47
+ recommendation: 'wait',
48
+ reasoning: variants.length < 2
49
+ ? 'Need at least 2 variants to evaluate'
50
+ : `Insufficient data: ${analytics.summary.totalViews} views (need ${MIN_TOTAL_VIEWS})`,
51
+ sampleSize: { control: variants[0]?.views ?? 0, variant: 0 },
52
+ };
53
+ }
54
+ // Control = first variant by creation order (the original, pre-variation baseline).
55
+ // NOT the worst performer — using worst inflates z-scores and causes false positives.
56
+ // Tiebreaker by variantId for deterministic selection across JS engines.
57
+ const control = [...variants].sort((a, b) => a.order - b.order || a.variantId.localeCompare(b.variantId))[0];
58
+ const challengers = variants.filter(v => v.variantId !== control.variantId);
59
+ if (challengers.length === 0) {
60
+ return {
61
+ campaignId,
62
+ timestamp,
63
+ winningVariantId: null,
64
+ confidence: 0,
65
+ conversionRateDelta: 0,
66
+ recommendation: 'wait',
67
+ reasoning: 'Only the control variant exists — need at least one challenger',
68
+ sampleSize: { control: control.views, variant: 0 },
69
+ };
70
+ }
71
+ // Find best challenger by CVR (guard against NaN from 0-view variants)
72
+ const best = challengers
73
+ .filter(v => v.views > 0)
74
+ .sort((a, b) => b.cvr - a.cvr)[0];
75
+ if (!best) {
76
+ return {
77
+ campaignId,
78
+ timestamp,
79
+ winningVariantId: null,
80
+ confidence: 0,
81
+ conversionRateDelta: 0,
82
+ recommendation: 'wait',
83
+ reasoning: 'No challengers with traffic data yet',
84
+ sampleSize: { control: control.views, variant: 0 },
85
+ };
86
+ }
87
+ // Check minimum sample sizes
88
+ if (best.views < MIN_SAMPLE_SIZE || control.views < MIN_SAMPLE_SIZE) {
89
+ return {
90
+ campaignId,
91
+ timestamp,
92
+ winningVariantId: null,
93
+ confidence: 0,
94
+ conversionRateDelta: 0,
95
+ recommendation: 'wait',
96
+ reasoning: `Insufficient per-variant data: best=${best.views}, control=${control.views} views (need ${MIN_SAMPLE_SIZE} each)`,
97
+ sampleSize: { control: control.views, variant: best.views },
98
+ };
99
+ }
100
+ // Two-proportion z-test (one-tailed: is best better than control?)
101
+ const { zScore, pValue } = twoProportionZTest(best.conversions, best.views, control.conversions, control.views);
102
+ // Confidence = 1 - p_value (one-tailed). For two-tailed 95%, need p < 0.025.
103
+ // We use one-tailed because we have a directional hypothesis (best > control).
104
+ const confidence = 1 - pValue;
105
+ const conversionRateDelta = best.cvr - control.cvr;
106
+ const recommendation = computeRecommendation(confidence, conversionRateDelta, analytics.summary.totalViews);
107
+ return {
108
+ campaignId,
109
+ timestamp,
110
+ winningVariantId: confidence >= 0.95 ? best.variantId : null,
111
+ confidence,
112
+ conversionRateDelta,
113
+ recommendation,
114
+ reasoning: formatReasoning(best, control, confidence, recommendation),
115
+ sampleSize: { control: control.views, variant: best.views },
116
+ };
117
+ }
118
+ /**
119
+ * Fetch analytics and compute growth signal in one call.
120
+ */
121
+ export async function getGrowthSignal(client, campaignId, period) {
122
+ const analytics = await getCampaignAnalytics(client, campaignId, period);
123
+ return computeGrowthSignal(campaignId, analytics);
124
+ }
125
+ // ── Statistical Helpers ──────────────────────────────────
126
+ function twoProportionZTest(successA, nA, successB, nB) {
127
+ const pA = successA / nA;
128
+ const pB = successB / nB;
129
+ const pPooled = (successA + successB) / (nA + nB);
130
+ const se = Math.sqrt(pPooled * (1 - pPooled) * (1 / nA + 1 / nB));
131
+ if (nA === 0 || nB === 0 || !(se > 0))
132
+ return { zScore: 0, pValue: 1 };
133
+ const zScore = (pA - pB) / se;
134
+ // One-tailed p-value: P(Z >= z) = 1 - CDF(z)
135
+ const pValue = 1 - normalCdf(zScore);
136
+ return { zScore, pValue };
137
+ }
138
+ /**
139
+ * Approximate normal CDF using Abramowitz and Stegun formula.
140
+ * Returns P(Z <= z) for standard normal distribution.
141
+ */
142
+ function normalCdf(z) {
143
+ if (z < -6)
144
+ return 0;
145
+ if (z > 6)
146
+ return 1;
147
+ const absZ = Math.abs(z);
148
+ const t = 1 / (1 + 0.2316419 * absZ);
149
+ const d = 0.3989422804014327; // 1/sqrt(2*PI)
150
+ const p = d * Math.exp(-absZ * absZ / 2) *
151
+ (t * (0.3193815 + t * (-0.3565638 + t * (1.781478 + t * (-1.8212560 + t * 1.3302744)))));
152
+ return z > 0 ? 1 - p : p;
153
+ }
154
+ function computeRecommendation(confidence, conversionRateDelta, totalViews) {
155
+ // High confidence winner
156
+ if (confidence >= 0.95 && conversionRateDelta > 0)
157
+ return 'scale';
158
+ // Moderate confidence, positive trend — keep iterating
159
+ if (confidence >= 0.80 && conversionRateDelta > 0)
160
+ return 'iterate';
161
+ // High confidence that all challengers underperform the control
162
+ if (confidence >= 0.95 && conversionRateDelta < 0 && totalViews > 500)
163
+ return 'kill';
164
+ // Not enough signal yet
165
+ return 'wait';
166
+ }
167
+ function formatReasoning(best, control, confidence, recommendation) {
168
+ const delta = (best.cvr - control.cvr).toFixed(2);
169
+ switch (recommendation) {
170
+ case 'scale':
171
+ return `Variant "${best.label}" outperforms control by ${delta}pp CVR with ${(confidence * 100).toFixed(1)}% confidence. Scale this variant.`;
172
+ case 'iterate':
173
+ return `Variant "${best.label}" shows +${delta}pp CVR lift at ${(confidence * 100).toFixed(1)}% confidence. Continue testing for stronger signal.`;
174
+ case 'kill':
175
+ return `No variant shows significant improvement. Consider killing this campaign.`;
176
+ case 'wait':
177
+ return `Insufficient data for recommendation. Current best: "${best.label}" at ${best.cvr.toFixed(2)}% CVR.`;
178
+ }
179
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Kongo Campaigns — Campaign lifecycle operations.
3
+ *
4
+ * Create, list, update, publish/unpublish, and delete campaigns.
5
+ * Campaigns group pages + variants for A/B testing with rotation strategies.
6
+ *
7
+ * Real Kongo API endpoints:
8
+ * - POST /engine/campaigns — create
9
+ * - GET /engine/campaigns — list (cursor pagination)
10
+ * - GET /engine/campaigns/:campaignId — get detail
11
+ * - PUT /engine/campaigns/:campaignId — update
12
+ * - DELETE /engine/campaigns/:campaignId — archive (soft delete)
13
+ * - POST /engine/campaigns/:campaignId/publish — publish
14
+ * - DELETE /engine/campaigns/:campaignId/publish — unpublish
15
+ *
16
+ * PRD Reference: PRD-kongo-integration.md §4.2
17
+ */
18
+ import { KongoClient } from './client.js';
19
+ import type { CreateCampaignRequest, CampaignDetail, UpdateCampaignRequest, PublishResult, ListCampaignsOptions, PaginatedResponse } from './types.js';
20
+ /**
21
+ * Create a new campaign.
22
+ * Requires a templateId (page ID) to base variants on.
23
+ */
24
+ export declare function createCampaign(client: KongoClient, config: CreateCampaignRequest): Promise<CampaignDetail>;
25
+ /**
26
+ * Get a single campaign by ID.
27
+ * Returns full details including template info, variants, and stats.
28
+ */
29
+ export declare function getCampaign(client: KongoClient, campaignId: string): Promise<CampaignDetail>;
30
+ /**
31
+ * List campaigns with cursor-based pagination.
32
+ */
33
+ export declare function listCampaigns(client: KongoClient, options?: ListCampaignsOptions): Promise<PaginatedResponse<CampaignDetail>>;
34
+ /**
35
+ * Update a campaign's rotation strategy, tracking, access gate, or metadata.
36
+ * Slug and template cannot be changed after creation.
37
+ */
38
+ export declare function updateCampaign(client: KongoClient, campaignId: string, updates: UpdateCampaignRequest): Promise<CampaignDetail>;
39
+ /**
40
+ * Archive a campaign (soft delete). Unpublishes automatically.
41
+ */
42
+ export declare function deleteCampaign(client: KongoClient, campaignId: string): Promise<void>;
43
+ /**
44
+ * Publish a campaign — provisions DNS CNAME at {slug}.kongo.io.
45
+ * Requires at least 1 active variant. Idempotent.
46
+ */
47
+ export declare function publishCampaign(client: KongoClient, campaignId: string): Promise<PublishResult>;
48
+ /**
49
+ * Unpublish a campaign — removes DNS record.
50
+ */
51
+ export declare function unpublishCampaign(client: KongoClient, campaignId: string): Promise<void>;
52
+ export declare function batchGetCampaignStatuses(client: KongoClient): Promise<CampaignDetail[]>;
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Kongo Campaigns — Campaign lifecycle operations.
3
+ *
4
+ * Create, list, update, publish/unpublish, and delete campaigns.
5
+ * Campaigns group pages + variants for A/B testing with rotation strategies.
6
+ *
7
+ * Real Kongo API endpoints:
8
+ * - POST /engine/campaigns — create
9
+ * - GET /engine/campaigns — list (cursor pagination)
10
+ * - GET /engine/campaigns/:campaignId — get detail
11
+ * - PUT /engine/campaigns/:campaignId — update
12
+ * - DELETE /engine/campaigns/:campaignId — archive (soft delete)
13
+ * - POST /engine/campaigns/:campaignId/publish — publish
14
+ * - DELETE /engine/campaigns/:campaignId/publish — unpublish
15
+ *
16
+ * PRD Reference: PRD-kongo-integration.md §4.2
17
+ */
18
+ // ── Campaign Operations ──────────────────────────────────
19
+ /**
20
+ * Create a new campaign.
21
+ * Requires a templateId (page ID) to base variants on.
22
+ */
23
+ export async function createCampaign(client, config) {
24
+ return client.post('/engine/campaigns', config);
25
+ }
26
+ /**
27
+ * Get a single campaign by ID.
28
+ * Returns full details including template info, variants, and stats.
29
+ */
30
+ export async function getCampaign(client, campaignId) {
31
+ return client.get(`/engine/campaigns/${encodeURIComponent(campaignId)}`);
32
+ }
33
+ /**
34
+ * List campaigns with cursor-based pagination.
35
+ */
36
+ export async function listCampaigns(client, options) {
37
+ const query = {};
38
+ if (options?.cursor)
39
+ query.cursor = options.cursor;
40
+ if (options?.limit)
41
+ query.limit = options.limit;
42
+ if (options?.published !== undefined)
43
+ query.published = options.published;
44
+ if (options?.search)
45
+ query.search = options.search;
46
+ return client.get('/engine/campaigns', query);
47
+ }
48
+ /**
49
+ * Update a campaign's rotation strategy, tracking, access gate, or metadata.
50
+ * Slug and template cannot be changed after creation.
51
+ */
52
+ export async function updateCampaign(client, campaignId, updates) {
53
+ return client.put(`/engine/campaigns/${encodeURIComponent(campaignId)}`, updates);
54
+ }
55
+ /**
56
+ * Archive a campaign (soft delete). Unpublishes automatically.
57
+ */
58
+ export async function deleteCampaign(client, campaignId) {
59
+ await client.delete(`/engine/campaigns/${encodeURIComponent(campaignId)}`);
60
+ }
61
+ /**
62
+ * Publish a campaign — provisions DNS CNAME at {slug}.kongo.io.
63
+ * Requires at least 1 active variant. Idempotent.
64
+ */
65
+ export async function publishCampaign(client, campaignId) {
66
+ return client.post(`/engine/campaigns/${encodeURIComponent(campaignId)}/publish`);
67
+ }
68
+ /**
69
+ * Unpublish a campaign — removes DNS record.
70
+ */
71
+ export async function unpublishCampaign(client, campaignId) {
72
+ await client.delete(`/engine/campaigns/${encodeURIComponent(campaignId)}/publish`);
73
+ }
74
+ /**
75
+ * Get statuses for all active campaigns.
76
+ * Uses the list endpoint since Kongo doesn't have a batch-status endpoint.
77
+ */
78
+ const MAX_BATCH_PAGES = 20;
79
+ export async function batchGetCampaignStatuses(client) {
80
+ const results = [];
81
+ let cursor;
82
+ let pageCount = 0;
83
+ do {
84
+ if (++pageCount > MAX_BATCH_PAGES)
85
+ break;
86
+ const page = await listCampaigns(client, { cursor, limit: 100 });
87
+ results.push(...page.items);
88
+ cursor = page.hasMore ? page.cursor : undefined;
89
+ } while (cursor);
90
+ return results;
91
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * KongoClient — Authenticated HTTP client for the Kongo Engine API.
3
+ *
4
+ * First-party integration (ADR-036): Kongo is owned by the same user.
5
+ * No adapter abstraction — direct typed client.
6
+ *
7
+ * Credentials: API key (ke_live_ prefix) stored in financial vault.
8
+ * Rate limiting: 60 requests/minute sliding window (client-side safety).
9
+ * Retries: Exponential backoff on 429, 3 attempts max.
10
+ * No external dependencies: uses node:https only.
11
+ *
12
+ * PRD Reference: PRD-kongo-integration.md §4.1, §8
13
+ */
14
+ import type { KongoClientConfig, KongoErrorCode } from './types.js';
15
+ export declare class KongoApiError extends Error {
16
+ readonly code: KongoErrorCode | string;
17
+ readonly status: number;
18
+ readonly retryable: boolean;
19
+ readonly retryAfterMs?: number;
20
+ constructor(code: KongoErrorCode | string, message: string, status: number, retryable?: boolean, retryAfterMs?: number);
21
+ }
22
+ export declare class SlidingWindowLimiter {
23
+ private readonly timestamps;
24
+ private readonly windowMs;
25
+ private readonly maxRequests;
26
+ constructor(maxRequestsPerMinute: number);
27
+ acquire(): void;
28
+ getStatus(): {
29
+ available: number;
30
+ total: number;
31
+ windowMs: number;
32
+ };
33
+ }
34
+ export declare class KongoClient {
35
+ private readonly apiKey;
36
+ private readonly baseUrl;
37
+ private readonly timeoutMs;
38
+ private readonly limiter;
39
+ constructor(config: KongoClientConfig);
40
+ /** GET request */
41
+ get<T>(path: string, query?: Record<string, string | number | boolean | undefined>): Promise<T>;
42
+ /** POST request */
43
+ post<T>(path: string, body?: unknown, headers?: Record<string, string>): Promise<T>;
44
+ /** PUT request */
45
+ put<T>(path: string, body?: unknown): Promise<T>;
46
+ /** PATCH request */
47
+ patch<T>(path: string, body?: unknown): Promise<T>;
48
+ /** DELETE request */
49
+ delete<T>(path: string): Promise<T>;
50
+ /** Rate limiter status for monitoring */
51
+ getRateLimitStatus(): {
52
+ available: number;
53
+ total: number;
54
+ windowMs: number;
55
+ };
56
+ private requestWithRetry;
57
+ private rawRequest;
58
+ }
@@ -0,0 +1,221 @@
1
+ /**
2
+ * KongoClient — Authenticated HTTP client for the Kongo Engine API.
3
+ *
4
+ * First-party integration (ADR-036): Kongo is owned by the same user.
5
+ * No adapter abstraction — direct typed client.
6
+ *
7
+ * Credentials: API key (ke_live_ prefix) stored in financial vault.
8
+ * Rate limiting: 60 requests/minute sliding window (client-side safety).
9
+ * Retries: Exponential backoff on 429, 3 attempts max.
10
+ * No external dependencies: uses node:https only.
11
+ *
12
+ * PRD Reference: PRD-kongo-integration.md §4.1, §8
13
+ */
14
+ import { request as httpsRequest } from 'node:https';
15
+ import { URL } from 'node:url';
16
+ // ── KongoApiError ────────────────────────────────────────
17
+ export class KongoApiError extends Error {
18
+ code;
19
+ status;
20
+ retryable;
21
+ retryAfterMs;
22
+ constructor(code, message, status, retryable = false, retryAfterMs) {
23
+ super(message);
24
+ this.name = 'KongoApiError';
25
+ this.code = code;
26
+ this.status = status;
27
+ this.retryable = retryable;
28
+ this.retryAfterMs = retryAfterMs;
29
+ }
30
+ }
31
+ // ── Sliding Window Rate Limiter ──────────────────────────
32
+ export class SlidingWindowLimiter {
33
+ timestamps = [];
34
+ windowMs;
35
+ maxRequests;
36
+ constructor(maxRequestsPerMinute) {
37
+ this.windowMs = 60_000;
38
+ this.maxRequests = maxRequestsPerMinute;
39
+ }
40
+ acquire() {
41
+ const now = Date.now();
42
+ // Evict timestamps outside the window
43
+ while (this.timestamps.length > 0 && this.timestamps[0] <= now - this.windowMs) {
44
+ this.timestamps.shift();
45
+ }
46
+ if (this.timestamps.length >= this.maxRequests) {
47
+ const waitMs = this.timestamps[0] + this.windowMs - now;
48
+ throw new KongoApiError('RATE_LIMITED', `Client-side rate limit exceeded. Retry in ${Math.ceil(waitMs / 1000)}s.`, 429, true, waitMs);
49
+ }
50
+ this.timestamps.push(now);
51
+ }
52
+ getStatus() {
53
+ const now = Date.now();
54
+ while (this.timestamps.length > 0 && this.timestamps[0] <= now - this.windowMs) {
55
+ this.timestamps.shift();
56
+ }
57
+ return {
58
+ available: this.maxRequests - this.timestamps.length,
59
+ total: this.maxRequests,
60
+ windowMs: this.windowMs,
61
+ };
62
+ }
63
+ }
64
+ // ── KongoClient ──────────────────────────────────────────
65
+ const DEFAULT_BASE_URL = 'https://kongo.io/api/v1';
66
+ const DEFAULT_TIMEOUT_MS = 30_000;
67
+ const DEFAULT_RATE_LIMIT = 60;
68
+ const MAX_RETRIES = 3;
69
+ const BACKOFF_BASE_MS = 1_000;
70
+ export class KongoClient {
71
+ apiKey;
72
+ baseUrl;
73
+ timeoutMs;
74
+ limiter;
75
+ constructor(config) {
76
+ if (!config.apiKey || !config.apiKey.startsWith('ke_live_')) {
77
+ throw new KongoApiError('UNAUTHORIZED', 'Invalid API key format. Kongo keys use the ke_live_ prefix.', 401);
78
+ }
79
+ this.apiKey = config.apiKey;
80
+ this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;
81
+ this.timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
82
+ this.limiter = new SlidingWindowLimiter(config.rateLimitPerMinute ?? DEFAULT_RATE_LIMIT);
83
+ }
84
+ /** GET request */
85
+ async get(path, query) {
86
+ return this.requestWithRetry('GET', path, undefined, query);
87
+ }
88
+ /** POST request */
89
+ async post(path, body, headers) {
90
+ return this.requestWithRetry('POST', path, body, undefined, headers);
91
+ }
92
+ /** PUT request */
93
+ async put(path, body) {
94
+ return this.requestWithRetry('PUT', path, body);
95
+ }
96
+ /** PATCH request */
97
+ async patch(path, body) {
98
+ return this.requestWithRetry('PATCH', path, body);
99
+ }
100
+ /** DELETE request */
101
+ async delete(path) {
102
+ return this.requestWithRetry('DELETE', path);
103
+ }
104
+ /** Rate limiter status for monitoring */
105
+ getRateLimitStatus() {
106
+ return this.limiter.getStatus();
107
+ }
108
+ // ── Internal ─────────────────────────────────────────
109
+ async requestWithRetry(method, path, body, query, extraHeaders) {
110
+ let lastError;
111
+ for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
112
+ try {
113
+ this.limiter.acquire();
114
+ return await this.rawRequest(method, path, body, query, extraHeaders);
115
+ }
116
+ catch (err) {
117
+ if (!(err instanceof KongoApiError))
118
+ throw err;
119
+ lastError = err;
120
+ if (!err.retryable || attempt === MAX_RETRIES - 1)
121
+ throw err;
122
+ const backoffMs = err.retryAfterMs ?? BACKOFF_BASE_MS * Math.pow(2, attempt);
123
+ await sleep(backoffMs);
124
+ }
125
+ }
126
+ throw lastError ?? new KongoApiError('UNKNOWN', 'Request failed', 500);
127
+ }
128
+ rawRequest(method, path, body, query, extraHeaders) {
129
+ return new Promise((resolve, reject) => {
130
+ // Concatenate base URL path with request path (URL constructor replaces path on leading /)
131
+ const base = this.baseUrl.replace(/\/$/, '');
132
+ const cleanPath = path.startsWith('/') ? path : `/${path}`;
133
+ const url = new URL(`${base}${cleanPath}`);
134
+ if (query) {
135
+ for (const [key, val] of Object.entries(query)) {
136
+ if (val !== undefined)
137
+ url.searchParams.set(key, String(val));
138
+ }
139
+ }
140
+ const payload = body ? JSON.stringify(body) : undefined;
141
+ // Sanitize extraHeaders: strip any auth-related keys (case-insensitive)
142
+ const safeExtra = {};
143
+ if (extraHeaders) {
144
+ for (const [key, val] of Object.entries(extraHeaders)) {
145
+ if (key.toLowerCase() !== 'authorization') {
146
+ safeExtra[key] = val;
147
+ }
148
+ }
149
+ }
150
+ const headers = {
151
+ ...safeExtra,
152
+ 'Authorization': `Bearer ${this.apiKey}`,
153
+ 'Accept': 'application/json',
154
+ };
155
+ if (payload) {
156
+ headers['Content-Type'] = 'application/json';
157
+ headers['Content-Length'] = String(Buffer.byteLength(payload));
158
+ }
159
+ const MAX_RESPONSE_BYTES = 10 * 1024 * 1024; // 10 MB
160
+ const req = httpsRequest(url, { method, headers, timeout: this.timeoutMs }, (res) => {
161
+ const chunks = [];
162
+ let totalBytes = 0;
163
+ let settled = false;
164
+ res.on('data', (chunk) => {
165
+ if (settled)
166
+ return;
167
+ totalBytes += chunk.length;
168
+ if (totalBytes > MAX_RESPONSE_BYTES) {
169
+ settled = true;
170
+ req.destroy();
171
+ reject(new KongoApiError('RESPONSE_TOO_LARGE', 'Response exceeded 10 MB limit', 502));
172
+ return;
173
+ }
174
+ chunks.push(chunk);
175
+ });
176
+ res.on('end', () => {
177
+ if (settled)
178
+ return;
179
+ const raw = Buffer.concat(chunks).toString('utf-8');
180
+ // HTML endpoint returns raw HTML, not JSON
181
+ if (res.headers['content-type']?.includes('text/html')) {
182
+ resolve(raw);
183
+ return;
184
+ }
185
+ let parsed;
186
+ try {
187
+ parsed = JSON.parse(raw);
188
+ }
189
+ catch {
190
+ reject(new KongoApiError('UNKNOWN', `Failed to parse Kongo response (status=${res.statusCode}, content-type=${res.headers['content-type'] ?? 'unknown'})`, res.statusCode ?? 500));
191
+ return;
192
+ }
193
+ if (!parsed.success) {
194
+ const status = res.statusCode ?? 500;
195
+ const retryable = status === 429 || status === 503;
196
+ const retryAfterMs = res.headers['retry-after']
197
+ ? parseInt(res.headers['retry-after'], 10) * 1000
198
+ : undefined;
199
+ reject(new KongoApiError(parsed.error.code, parsed.error.message, status, retryable, retryAfterMs));
200
+ return;
201
+ }
202
+ resolve(parsed.data);
203
+ });
204
+ });
205
+ req.on('error', (err) => {
206
+ reject(new KongoApiError('NETWORK_ERROR', err.message, 0, true));
207
+ });
208
+ req.on('timeout', () => {
209
+ req.destroy();
210
+ reject(new KongoApiError('TIMEOUT', `Request timed out after ${this.timeoutMs}ms`, 408, true));
211
+ });
212
+ if (payload)
213
+ req.write(payload);
214
+ req.end();
215
+ });
216
+ }
217
+ }
218
+ // ── Helpers ──────────────────────────────────────────────
219
+ function sleep(ms) {
220
+ return new Promise((resolve) => setTimeout(resolve, ms));
221
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Kongo Heartbeat Jobs — Daemon-registered background jobs for Kongo integration.
3
+ *
4
+ * Three jobs that run when Kongo is connected:
5
+ * - kongo-signal: Hourly poll of growth signal for all active campaigns
6
+ * - kongo-seed: Triggered when a variant wins — pushes winning copy back
7
+ * - kongo-webhook: Event-driven handler for Kongo webhook events
8
+ *
9
+ * Jobs are only registered when Kongo is connected (API key in vault).
10
+ * All jobs skip cleanly when Kongo is not connected.
11
+ *
12
+ * PRD Reference: PRD-kongo-integration.md §4.6
13
+ */
14
+ import { KongoClient } from './client.js';
15
+ import type { ComputedGrowthSignal } from './types.js';
16
+ export interface KongoJobContext {
17
+ readonly client: KongoClient;
18
+ readonly webhookSecret: string | null;
19
+ readonly logger: (msg: string) => void;
20
+ readonly onSignal?: (signal: ComputedGrowthSignal) => Promise<void>;
21
+ readonly onPageCompleted?: (pageId: string) => Promise<void>;
22
+ readonly onPageFailed?: (pageId: string, error?: string) => Promise<void>;
23
+ /** Self-marketing mode: product domain matches Kongo domain (iframe sandbox workaround) */
24
+ readonly selfMarketing?: boolean;
25
+ /** Optional external analytics source for /lp/ pages in self-marketing mode (GA4 Data API / PostHog) */
26
+ readonly getExternalAnalytics?: (pageSlug: string, period: string) => Promise<{
27
+ views: number;
28
+ conversions: number;
29
+ } | null>;
30
+ }
31
+ export interface KongoJobHandlers {
32
+ readonly signalPoll: () => Promise<KongoSignalResult>;
33
+ readonly seedPush: (campaignId: string, winningVariantId: string) => Promise<Record<string, string> | null>;
34
+ readonly webhookHandle: (rawBody: string, signature: string) => Promise<void>;
35
+ }
36
+ export interface KongoSignalResult {
37
+ readonly signals: ComputedGrowthSignal[];
38
+ readonly polledAt: string;
39
+ }
40
+ /**
41
+ * Create Kongo job handlers for the heartbeat daemon.
42
+ *
43
+ * Usage in heartbeat.ts:
44
+ * ```
45
+ * const kongoJobs = createKongoJobs(context);
46
+ * scheduler.add('kongo-signal', 3_600_000, kongoJobs.signalPoll); // 1 hour
47
+ * ```
48
+ */
49
+ export declare function createKongoJobs(ctx: KongoJobContext): KongoJobHandlers;
50
+ export interface JobScheduler {
51
+ add(name: string, intervalMs: number, handler: () => Promise<void>): void;
52
+ }
53
+ /**
54
+ * Register Kongo jobs with the daemon's scheduler.
55
+ * Only registers when Kongo is connected.
56
+ */
57
+ export declare function registerKongoJobs(scheduler: JobScheduler, jobs: KongoJobHandlers): void;