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,127 @@
1
+ /**
2
+ * Treasury Backup — Encrypted daily snapshots (§9.17, §9.19.13).
3
+ *
4
+ * Daily snapshot of ~/.voidforge/treasury/ + growth state.
5
+ * Encrypted with vault password (AES-256-GCM).
6
+ * Retain 30 days. Runs as a heartbeat daemon scheduled job.
7
+ *
8
+ * PRD Reference: §9.17 (Backup Strategy), §9.19.13 (scope extension)
9
+ */
10
+ import { readdir, readFile, mkdir, unlink } from 'node:fs/promises';
11
+ import { createCipheriv, randomBytes, scrypt } from 'node:crypto';
12
+ import { join } from 'node:path';
13
+ import { existsSync } from 'node:fs';
14
+ import { homedir } from 'node:os';
15
+ import { TREASURY_DIR } from './financial-core.js';
16
+ // Backup stays global (backs up all project treasury data)
17
+ const BACKUP_DIR = join(homedir(), '.voidforge', 'backups');
18
+ const RETENTION_DAYS = 30;
19
+ /**
20
+ * Create an encrypted daily backup of the treasury directory.
21
+ * The backup is a gzipped tar-like concatenation of files, encrypted with AES-256-GCM.
22
+ * The vault password is the encryption key (via scrypt).
23
+ */
24
+ export async function createDailyBackup(vaultPassword) {
25
+ const date = new Date().toISOString().split('T')[0]; // YYYY-MM-DD
26
+ const backupPath = join(BACKUP_DIR, `treasury-${date}.backup.enc`);
27
+ await mkdir(BACKUP_DIR, { recursive: true });
28
+ // Skip if today's backup already exists
29
+ if (existsSync(backupPath)) {
30
+ return { path: backupPath, files: 0 };
31
+ }
32
+ // Collect all files from treasury directory
33
+ const files = [];
34
+ if (existsSync(TREASURY_DIR)) {
35
+ await collectFiles(TREASURY_DIR, TREASURY_DIR, files);
36
+ }
37
+ if (files.length === 0) {
38
+ return { path: '', files: 0 };
39
+ }
40
+ // Serialize file manifest
41
+ const manifest = files.map(f => ({
42
+ path: f.relativePath,
43
+ size: f.content.length,
44
+ }));
45
+ // Create a simple archive format: manifest JSON + file contents
46
+ const archiveData = Buffer.concat([
47
+ Buffer.from(JSON.stringify(manifest) + '\n---MANIFEST_END---\n'),
48
+ ...files.map(f => Buffer.concat([
49
+ Buffer.from(`---FILE:${f.relativePath}:${f.content.length}---\n`),
50
+ f.content,
51
+ Buffer.from('\n'),
52
+ ])),
53
+ ]);
54
+ // Encrypt the archive (§9.19.13: encrypted with vault password)
55
+ const salt = randomBytes(32);
56
+ const iv = randomBytes(16);
57
+ const key = await deriveKey(vaultPassword, salt);
58
+ const cipher = createCipheriv('aes-256-gcm', key, iv);
59
+ const encrypted = Buffer.concat([cipher.update(archiveData), cipher.final()]);
60
+ const authTag = cipher.getAuthTag();
61
+ // Format: salt (32) + iv (16) + authTag (16) + ciphertext
62
+ const output = Buffer.concat([salt, iv, authTag, encrypted]);
63
+ // Write atomically
64
+ const tmpPath = backupPath + '.tmp';
65
+ const { writeFile: writeFileAsync, rename: renameAsync } = await import('node:fs/promises');
66
+ await writeFileAsync(tmpPath, output, { mode: 0o600 });
67
+ await renameAsync(tmpPath, backupPath);
68
+ // Prune old backups
69
+ await pruneOldBackups();
70
+ return { path: backupPath, files: files.length };
71
+ }
72
+ async function collectFiles(dir, baseDir, result) {
73
+ const entries = await readdir(dir, { withFileTypes: true });
74
+ for (const entry of entries) {
75
+ const fullPath = join(dir, entry.name);
76
+ if (entry.isDirectory()) {
77
+ await collectFiles(fullPath, baseDir, result);
78
+ }
79
+ else if (entry.isFile()) {
80
+ // v17.0: Size limit to prevent unbounded memory allocation
81
+ const fileStat = await import('node:fs/promises').then(m => m.stat(fullPath));
82
+ if (fileStat.size > 100 * 1024 * 1024) {
83
+ console.warn(`Treasury backup: skipping ${entry.name} (${fileStat.size} bytes > 100MB limit)`);
84
+ continue;
85
+ }
86
+ const relativePath = fullPath.replace(baseDir + '/', '');
87
+ const content = await readFile(fullPath);
88
+ result.push({ relativePath, content });
89
+ }
90
+ }
91
+ }
92
+ async function deriveKey(password, salt) {
93
+ return new Promise((resolve, reject) => {
94
+ scrypt(password.slice(0, 256), salt, 32, { N: 131072, r: 8, p: 1 }, (err, key) => {
95
+ if (err)
96
+ reject(err);
97
+ else
98
+ resolve(key);
99
+ });
100
+ });
101
+ }
102
+ async function pruneOldBackups() {
103
+ if (!existsSync(BACKUP_DIR))
104
+ return;
105
+ const entries = await readdir(BACKUP_DIR);
106
+ const cutoff = Date.now() - RETENTION_DAYS * 24 * 60 * 60 * 1000;
107
+ for (const entry of entries) {
108
+ if (!entry.startsWith('treasury-') || !entry.endsWith('.backup.enc'))
109
+ continue;
110
+ const dateStr = entry.replace('treasury-', '').replace('.backup.enc', '');
111
+ const fileDate = new Date(dateStr).getTime();
112
+ if (fileDate < cutoff) {
113
+ await unlink(join(BACKUP_DIR, entry));
114
+ }
115
+ }
116
+ }
117
+ /**
118
+ * Export all financial data (encrypted with vault password).
119
+ * Used by /treasury --export and uninstall safety.
120
+ */
121
+ export async function exportTreasuryData(vaultPassword, outputPath) {
122
+ const result = await createDailyBackup(vaultPassword);
123
+ if (result.path) {
124
+ const { copyFile } = await import('node:fs/promises');
125
+ await copyFile(result.path, outputPath);
126
+ }
127
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Treasury Circuit Breakers — evaluation logic for funding freeze conditions.
3
+ *
4
+ * Implements PRD S13.2 circuit breakers:
5
+ * CB-1: Provider unavailable for 3 consecutive polls
6
+ * CB-2: Off-ramp pending beyond SLA window (24 hours)
7
+ * CB-3: Reconciliation mismatch for 2 consecutive closes
8
+ * CB-4: Google invoice due soon + insufficient fiat
9
+ * CB-5: Meta debit fails or payment-risk state
10
+ * CB-6: Max daily treasury movement exceeded ($50,000 default)
11
+ */
12
+ import type { TreasuryHeartbeatState, PendingTransfer } from './treasury-io.js';
13
+ export interface CircuitBreakerResult {
14
+ shouldFreeze: boolean;
15
+ reasons: string[];
16
+ }
17
+ export declare function evaluateCircuitBreakers(state: TreasuryHeartbeatState): CircuitBreakerResult;
18
+ /** Evaluate CB-2 specifically for pending transfers beyond SLA. */
19
+ export declare function evaluateTransferSlaBreaker(transfers: PendingTransfer[], slaHours?: number): CircuitBreakerResult;
20
+ /** Evaluate CB-4 and CB-5 from billing adapter state. */
21
+ export declare function evaluateBillingBreakers(opts: {
22
+ googleInvoiceDueSoon: boolean;
23
+ googleInvoiceCents: number;
24
+ bankBalanceCents: number;
25
+ minimumBufferCents: number;
26
+ metaDebitFailed: boolean;
27
+ metaPaymentRisk: boolean;
28
+ }): CircuitBreakerResult;
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Treasury Circuit Breakers — evaluation logic for funding freeze conditions.
3
+ *
4
+ * Implements PRD S13.2 circuit breakers:
5
+ * CB-1: Provider unavailable for 3 consecutive polls
6
+ * CB-2: Off-ramp pending beyond SLA window (24 hours)
7
+ * CB-3: Reconciliation mismatch for 2 consecutive closes
8
+ * CB-4: Google invoice due soon + insufficient fiat
9
+ * CB-5: Meta debit fails or payment-risk state
10
+ * CB-6: Max daily treasury movement exceeded ($50,000 default)
11
+ */
12
+ export function evaluateCircuitBreakers(state) {
13
+ const reasons = [];
14
+ // CB-1: Provider unavailable for 3 consecutive polls
15
+ if (state.consecutiveProviderFailures >= 3) {
16
+ reasons.push(`Stablecoin provider unavailable for ${state.consecutiveProviderFailures} consecutive polls — freeze funding`);
17
+ }
18
+ // CB-2: Off-ramp pending beyond SLA window (24 hours)
19
+ // Checked via pending transfers — caller handles this with transfer data
20
+ // CB-3: Reconciliation mismatch for 2 consecutive closes
21
+ if (state.consecutiveMismatches >= 2) {
22
+ reasons.push(`Reconciliation mismatch for ${state.consecutiveMismatches} consecutive closes — freeze funding`);
23
+ }
24
+ // CB-6: Max daily treasury movement exceeded ($50,000 default)
25
+ const MAX_DAILY_MOVEMENT_CENTS = 5_000_000; // $50,000
26
+ if (state.dailyMovementCents > MAX_DAILY_MOVEMENT_CENTS) {
27
+ reasons.push(`Daily treasury movement $${(state.dailyMovementCents / 100).toFixed(2)} exceeds max $${(MAX_DAILY_MOVEMENT_CENTS / 100).toFixed(2)} — freeze funding`);
28
+ }
29
+ return {
30
+ shouldFreeze: reasons.length > 0,
31
+ reasons,
32
+ };
33
+ }
34
+ /** Evaluate CB-2 specifically for pending transfers beyond SLA. */
35
+ export function evaluateTransferSlaBreaker(transfers, slaHours = 24) {
36
+ const reasons = [];
37
+ const slaMs = slaHours * 60 * 60 * 1000;
38
+ const now = Date.now();
39
+ for (const t of transfers) {
40
+ if (t.status !== 'pending' && t.status !== 'processing')
41
+ continue;
42
+ const age = now - new Date(t.initiatedAt).getTime();
43
+ if (age > slaMs) {
44
+ reasons.push(`Transfer ${t.id} pending for ${Math.round(age / (60 * 60 * 1000))}h — exceeds ${slaHours}h SLA — freeze funding`);
45
+ }
46
+ }
47
+ return {
48
+ shouldFreeze: reasons.length > 0,
49
+ reasons,
50
+ };
51
+ }
52
+ /** Evaluate CB-4 and CB-5 from billing adapter state. */
53
+ export function evaluateBillingBreakers(opts) {
54
+ const reasons = [];
55
+ // CB-4: Google invoice due soon + insufficient fiat
56
+ if (opts.googleInvoiceDueSoon) {
57
+ const availableForInvoice = opts.bankBalanceCents - opts.minimumBufferCents;
58
+ if (availableForInvoice < opts.googleInvoiceCents) {
59
+ reasons.push(`Google invoice $${(opts.googleInvoiceCents / 100).toFixed(2)} due soon but only ` +
60
+ `$${(availableForInvoice / 100).toFixed(2)} available — freeze non-essential funding`);
61
+ }
62
+ }
63
+ // CB-5: Meta debit fails or payment-risk state
64
+ if (opts.metaDebitFailed) {
65
+ reasons.push('Meta direct debit failed — freeze funding until bank balance confirmed');
66
+ }
67
+ if (opts.metaPaymentRisk) {
68
+ reasons.push('Meta account in payment-risk state — freeze funding');
69
+ }
70
+ return {
71
+ shouldFreeze: reasons.length > 0,
72
+ reasons,
73
+ };
74
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Treasury Socket Handlers — HTTP-style request handlers for the treasury API.
3
+ *
4
+ * Handles POST/GET routes over the daemon's Unix socket:
5
+ * POST /treasury/offramp — Initiate off-ramp (vault+TOTP required)
6
+ * POST /treasury/freeze — Manual freeze
7
+ * POST /treasury/unfreeze — Manual unfreeze (vault+TOTP required)
8
+ * GET /treasury/balances — Balance snapshot
9
+ * GET /treasury/funding-status — Funding pipeline status
10
+ * GET /treasury/runway — Runway forecast
11
+ *
12
+ * PRD Reference: S10.4, S16
13
+ */
14
+ import type { Logger, FreezeFn } from './treasury-io.js';
15
+ export declare function handleTreasuryRequest(method: string, path: string, _body: unknown, auth: {
16
+ vaultVerified: boolean;
17
+ totpVerified: boolean;
18
+ }, logger: Logger, triggerFreeze: FreezeFn, vaultKey: string | null): Promise<{
19
+ status: number;
20
+ body: unknown;
21
+ } | null>;
@@ -0,0 +1,281 @@
1
+ /**
2
+ * Treasury Socket Handlers — HTTP-style request handlers for the treasury API.
3
+ *
4
+ * Handles POST/GET routes over the daemon's Unix socket:
5
+ * POST /treasury/offramp — Initiate off-ramp (vault+TOTP required)
6
+ * POST /treasury/freeze — Manual freeze
7
+ * POST /treasury/unfreeze — Manual unfreeze (vault+TOTP required)
8
+ * GET /treasury/balances — Balance snapshot
9
+ * GET /treasury/funding-status — Funding pipeline status
10
+ * GET /treasury/runway — Runway forecast
11
+ *
12
+ * PRD Reference: S10.4, S16
13
+ */
14
+ import { appendFile, mkdir } from 'node:fs/promises';
15
+ import { randomUUID } from 'node:crypto';
16
+ import { TREASURY_DIR } from './financial-core.js';
17
+ import { generateFundingPlan } from './financial/treasury-planner.js';
18
+ import { evaluatePolicy, aggregateDecisions } from './financial/funding-policy.js';
19
+ import { getTreasuryState, saveTreasuryState, isStablecoinConfigured, readPendingTransfers, writePendingTransfers, writeWalEntry, FUNDING_PLANS_LOG, TRANSFERS_LOG, } from './treasury-io.js';
20
+ // ── Treasury Socket Handlers ─────────────────────────
21
+ export async function handleTreasuryRequest(method, path, _body, auth, logger, triggerFreeze, vaultKey) {
22
+ const treasuryState = getTreasuryState();
23
+ // POST /treasury/offramp — vault+TOTP required
24
+ if (method === 'POST' && path === '/treasury/offramp') {
25
+ if (!auth.vaultVerified || !auth.totpVerified) {
26
+ return {
27
+ status: 403,
28
+ body: { ok: false, error: 'Off-ramp requires valid vault password + TOTP code' },
29
+ };
30
+ }
31
+ if (!isStablecoinConfigured()) {
32
+ return {
33
+ status: 400,
34
+ body: { ok: false, error: 'Stablecoin funding not configured' },
35
+ };
36
+ }
37
+ if (treasuryState.fundingFrozen) {
38
+ return {
39
+ status: 423,
40
+ body: { ok: false, error: `Funding frozen: ${treasuryState.freezeReason ?? 'unknown reason'}` },
41
+ };
42
+ }
43
+ logger.log('Off-ramp requested via treasury API');
44
+ // Write WAL entry first (ADR-3)
45
+ const intentId = randomUUID();
46
+ await writeWalEntry({
47
+ intentId,
48
+ operation: 'offramp',
49
+ params: _body,
50
+ status: 'pending',
51
+ createdAt: new Date().toISOString(),
52
+ });
53
+ try {
54
+ const { getStablecoinAdapter } = await import('./financial/adapter-factory.js');
55
+ const adapter = await getStablecoinAdapter(vaultKey, logger);
56
+ // Generate a funding plan using treasury planner
57
+ const bankBalance = treasuryState.bankBalanceCents;
58
+ const source = {
59
+ id: 'default-source',
60
+ provider: 'circle',
61
+ asset: 'USDC',
62
+ network: 'ETH',
63
+ sourceAccountId: 'default',
64
+ whitelistedDestinationBankId: 'default-bank',
65
+ status: 'active',
66
+ };
67
+ const bank = {
68
+ id: 'default-bank',
69
+ provider: 'mercury',
70
+ accountId: 'default',
71
+ currency: 'USD',
72
+ availableBalanceCents: bankBalance,
73
+ reservedBalanceCents: 0,
74
+ minimumBufferCents: 50_000, // $500
75
+ };
76
+ const config = {
77
+ minimumOfframpCents: 10_000, // $100
78
+ bufferTargetCents: 100_000, // $1,000
79
+ maxDailyOfframpCents: 5_000_000, // $50,000
80
+ targetRunwayDays: 30,
81
+ };
82
+ const obligations = [];
83
+ const plan = generateFundingPlan(source, bank, obligations, config, '');
84
+ if (!plan) {
85
+ return {
86
+ status: 200,
87
+ body: { ok: true, message: 'No funding needed — balance sufficient' },
88
+ };
89
+ }
90
+ // Evaluate policy before executing
91
+ const policyState = {
92
+ bankBalanceCents: bank.availableBalanceCents,
93
+ minimumBufferCents: bank.minimumBufferCents,
94
+ reservedCents: bank.reservedBalanceCents,
95
+ proposedOfframpCents: plan.requiredCents,
96
+ maxDailyMovementCents: config.maxDailyOfframpCents,
97
+ googleInvoiceDueSoon: false,
98
+ googleInvoiceCents: 0,
99
+ metaUsesDirectDebit: false,
100
+ metaForecast7DayCents: 0,
101
+ debitProtectionBufferCents: 0,
102
+ discrepancyExists: treasuryState.consecutiveMismatches > 0,
103
+ proposingBudgetRaise: false,
104
+ platformCapability: 'FULLY_FUNDABLE',
105
+ claimingAutonomousFunding: false,
106
+ };
107
+ const decisions = evaluatePolicy(policyState);
108
+ const aggregate = aggregateDecisions(decisions);
109
+ if (aggregate.action === 'freeze') {
110
+ await triggerFreeze(aggregate.blockingRules.map(r => r.reason).join('; '));
111
+ return {
112
+ status: 423,
113
+ body: { ok: false, error: 'Policy freeze triggered', rules: aggregate.blockingRules },
114
+ };
115
+ }
116
+ if (aggregate.action === 'deny') {
117
+ return {
118
+ status: 403,
119
+ body: {
120
+ ok: false,
121
+ error: 'Policy denied off-ramp',
122
+ rules: aggregate.blockingRules,
123
+ },
124
+ };
125
+ }
126
+ // Initiate the off-ramp
127
+ const planRef = {
128
+ id: plan.id,
129
+ sourceFundingId: plan.sourceFundingId,
130
+ destinationBankId: plan.destinationBankId,
131
+ requiredCents: plan.requiredCents,
132
+ idempotencyKey: plan.idempotencyKey,
133
+ };
134
+ const transfer = await adapter.initiateOfframp(planRef, plan.hash);
135
+ // Log the plan and transfer
136
+ await mkdir(TREASURY_DIR, { recursive: true });
137
+ await appendFile(FUNDING_PLANS_LOG, JSON.stringify(plan) + '\n', 'utf-8');
138
+ await appendFile(TRANSFERS_LOG, JSON.stringify(transfer) + '\n', 'utf-8');
139
+ // Track pending transfer
140
+ const pending = await readPendingTransfers();
141
+ pending.push({
142
+ id: transfer.id,
143
+ fundingPlanId: plan.id,
144
+ providerTransferId: transfer.providerTransferId,
145
+ amountCents: transfer.amountCents,
146
+ status: 'pending',
147
+ initiatedAt: transfer.initiatedAt,
148
+ lastPolledAt: transfer.initiatedAt,
149
+ });
150
+ await writePendingTransfers(pending);
151
+ // Update treasury state
152
+ treasuryState.pendingTransferCount += 1;
153
+ treasuryState.lastOfframpAt = new Date().toISOString();
154
+ // Track daily movement for CB-6
155
+ const today = new Date().toISOString().slice(0, 10);
156
+ if (treasuryState.dailyMovementDate !== today) {
157
+ treasuryState.dailyMovementCents = 0;
158
+ treasuryState.dailyMovementDate = today;
159
+ }
160
+ treasuryState.dailyMovementCents += plan.requiredCents;
161
+ // Complete WAL
162
+ await writeWalEntry({
163
+ intentId,
164
+ operation: 'offramp',
165
+ params: { planId: plan.id, transferId: transfer.id },
166
+ status: 'completed',
167
+ createdAt: new Date().toISOString(),
168
+ completedAt: new Date().toISOString(),
169
+ });
170
+ await saveTreasuryState();
171
+ logger.log(`Off-ramp initiated: $${(plan.requiredCents / 100).toFixed(2)} ` +
172
+ `via ${transfer.provider} (transfer ${transfer.id})`);
173
+ return {
174
+ status: 200,
175
+ body: {
176
+ ok: true,
177
+ message: 'Off-ramp initiated',
178
+ plan: { id: plan.id, amountCents: plan.requiredCents, reason: plan.reason },
179
+ transfer: { id: transfer.id, status: transfer.status, provider: transfer.provider },
180
+ },
181
+ };
182
+ }
183
+ catch (err) {
184
+ const msg = err instanceof Error ? err.message : 'Off-ramp failed';
185
+ logger.log(`Off-ramp error: ${msg}`);
186
+ await writeWalEntry({
187
+ intentId,
188
+ operation: 'offramp',
189
+ params: _body,
190
+ status: 'failed',
191
+ createdAt: new Date().toISOString(),
192
+ error: msg,
193
+ });
194
+ return { status: 500, body: { ok: false, error: `Off-ramp failed: ${msg}` } };
195
+ }
196
+ }
197
+ // POST /treasury/freeze — session token only (protective)
198
+ if (method === 'POST' && path === '/treasury/freeze') {
199
+ logger.log('Treasury FREEZE command received');
200
+ treasuryState.fundingFrozen = true;
201
+ treasuryState.freezeReason = 'Manual freeze via treasury API';
202
+ await saveTreasuryState();
203
+ return { status: 200, body: { ok: true, message: 'Funding frozen' } };
204
+ }
205
+ // POST /treasury/unfreeze — vault+TOTP required
206
+ if (method === 'POST' && path === '/treasury/unfreeze') {
207
+ if (!auth.vaultVerified || !auth.totpVerified) {
208
+ return {
209
+ status: 403,
210
+ body: { ok: false, error: 'Unfreeze requires valid vault password + TOTP code' },
211
+ };
212
+ }
213
+ logger.log('Treasury UNFREEZE command received');
214
+ treasuryState.fundingFrozen = false;
215
+ treasuryState.freezeReason = null;
216
+ // Reset circuit breaker counters on unfreeze
217
+ treasuryState.consecutiveMismatches = 0;
218
+ treasuryState.consecutiveProviderFailures = 0;
219
+ await saveTreasuryState();
220
+ return { status: 200, body: { ok: true, message: 'Funding unfrozen' } };
221
+ }
222
+ // GET /treasury/balances — session token only
223
+ if (method === 'GET' && path === '/treasury/balances') {
224
+ return {
225
+ status: 200,
226
+ body: {
227
+ ok: true,
228
+ data: {
229
+ stablecoinBalanceCents: treasuryState.stablecoinBalanceCents,
230
+ bankBalanceCents: treasuryState.bankBalanceCents,
231
+ totalAvailableCents: treasuryState.stablecoinBalanceCents + treasuryState.bankBalanceCents,
232
+ pendingTransferCount: treasuryState.pendingTransferCount,
233
+ fundingFrozen: treasuryState.fundingFrozen,
234
+ },
235
+ },
236
+ };
237
+ }
238
+ // GET /treasury/funding-status — session token only
239
+ if (method === 'GET' && path === '/treasury/funding-status') {
240
+ const pending = await readPendingTransfers();
241
+ const activePending = pending.filter(t => t.status === 'pending' || t.status === 'processing');
242
+ return {
243
+ status: 200,
244
+ body: {
245
+ ok: true,
246
+ data: {
247
+ pendingPlans: activePending.length,
248
+ pendingTransfers: activePending.map(t => ({
249
+ id: t.id,
250
+ amountCents: t.amountCents,
251
+ status: t.status,
252
+ initiatedAt: t.initiatedAt,
253
+ })),
254
+ runwayDays: treasuryState.runwayDays,
255
+ fundingFrozen: treasuryState.fundingFrozen,
256
+ freezeReason: treasuryState.freezeReason,
257
+ lastOfframpAt: treasuryState.lastOfframpAt,
258
+ lastReconciliationAt: treasuryState.lastReconciliationAt,
259
+ consecutiveMismatches: treasuryState.consecutiveMismatches,
260
+ },
261
+ },
262
+ };
263
+ }
264
+ // GET /treasury/runway — session token only
265
+ if (method === 'GET' && path === '/treasury/runway') {
266
+ return {
267
+ status: 200,
268
+ body: {
269
+ ok: true,
270
+ data: {
271
+ runwayDays: treasuryState.runwayDays,
272
+ bankBalanceCents: treasuryState.bankBalanceCents,
273
+ stablecoinBalanceCents: treasuryState.stablecoinBalanceCents,
274
+ fundingFrozen: treasuryState.fundingFrozen,
275
+ },
276
+ },
277
+ };
278
+ }
279
+ // Not a treasury route — return null so the caller falls through
280
+ return null;
281
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Treasury Heartbeat — re-export hub.
3
+ *
4
+ * This file was split into focused modules:
5
+ * - treasury-io.ts — State persistence, WAL, transfers, funding plans
6
+ * - treasury-circuit-breakers.ts — Circuit breaker evaluation (PRD S13.2)
7
+ * - treasury-jobs.ts — 9 scheduled heartbeat jobs + auto-funding executor
8
+ * - treasury-handlers.ts — Socket request handlers (POST/GET routes)
9
+ *
10
+ * All exports are re-exported here for backward compatibility — any file
11
+ * importing from 'treasury-heartbeat.js' continues to work unchanged.
12
+ */
13
+ export { isStablecoinConfigured, getTreasuryStateSnapshot, executeTreasuryFreeze, } from './treasury-io.js';
14
+ export type { TreasuryHeartbeatState, PendingTransfer, Logger, WriteStateFn, FreezeFn, } from './treasury-io.js';
15
+ export { evaluateCircuitBreakers, evaluateTransferSlaBreaker, evaluateBillingBreakers, } from './treasury-circuit-breakers.js';
16
+ export type { CircuitBreakerResult, } from './treasury-circuit-breakers.js';
17
+ export { registerTreasuryJobs, } from './treasury-jobs.js';
18
+ export { handleTreasuryRequest, } from './treasury-handlers.js';
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Treasury Heartbeat — re-export hub.
3
+ *
4
+ * This file was split into focused modules:
5
+ * - treasury-io.ts — State persistence, WAL, transfers, funding plans
6
+ * - treasury-circuit-breakers.ts — Circuit breaker evaluation (PRD S13.2)
7
+ * - treasury-jobs.ts — 9 scheduled heartbeat jobs + auto-funding executor
8
+ * - treasury-handlers.ts — Socket request handlers (POST/GET routes)
9
+ *
10
+ * All exports are re-exported here for backward compatibility — any file
11
+ * importing from 'treasury-heartbeat.js' continues to work unchanged.
12
+ */
13
+ // ── treasury-io.ts ───────────────────────────────────
14
+ export { isStablecoinConfigured, getTreasuryStateSnapshot, executeTreasuryFreeze, } from './treasury-io.js';
15
+ // ── treasury-circuit-breakers.ts ─────────────────────
16
+ export { evaluateCircuitBreakers, evaluateTransferSlaBreaker, evaluateBillingBreakers, } from './treasury-circuit-breakers.js';
17
+ // ── treasury-jobs.ts ─────────────────────────────────
18
+ export { registerTreasuryJobs, } from './treasury-jobs.js';
19
+ // ── treasury-handlers.ts ─────────────────────────────
20
+ export { handleTreasuryRequest, } from './treasury-handlers.js';