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,589 @@
1
+ /**
2
+ * Treasury Jobs — scheduled heartbeat job definitions and auto-funding executor.
3
+ *
4
+ * Contains the 9 scheduled jobs registered with the daemon's JobScheduler
5
+ * and the executeApprovedPlans function that initiates off-ramp transfers
6
+ * for approved funding plans.
7
+ *
8
+ * PRD Reference: S10.4, S12, S15
9
+ */
10
+ import { join } from 'node:path';
11
+ import { existsSync } from 'node:fs';
12
+ import { readFile, appendFile, mkdir } from 'node:fs/promises';
13
+ import { randomUUID } from 'node:crypto';
14
+ import { TREASURY_DIR } from './financial-core.js';
15
+ import { forecastRunway } from './financial/treasury-planner.js';
16
+ import { evaluateAutoFunding } from './financial/funding-auto.js';
17
+ import { reconcileThreeWay, shouldFreeze } from './financial/reconciliation-engine.js';
18
+ import { createDailyBackup } from './treasury-backup.js';
19
+ import { planGoogleInvoiceSettlement, planMetaDebitProtection, } from './financial/platform-planner.js';
20
+ import { getTreasuryState, saveTreasuryState, loadTreasuryState, recoverPendingOps, isStablecoinConfigured, readPendingTransfers, writePendingTransfers, readFundingPlans, writeFundingPlans, writeWalEntry, FUNDING_PLANS_LOG, TRANSFERS_LOG, RECONCILIATION_LOG, } from './treasury-io.js';
21
+ import { evaluateCircuitBreakers, evaluateTransferSlaBreaker, evaluateBillingBreakers, } from './treasury-circuit-breakers.js';
22
+ // ── Auto-Funding Plan Executor ───────────────────────
23
+ /** Execute approved funding plans: initiate offramp, track pending, write WAL. */
24
+ export async function executeApprovedPlans(vaultKey, logger, triggerFreeze) {
25
+ const plans = await readFundingPlans();
26
+ const approvedPlans = plans.filter(p => p.status === 'APPROVED');
27
+ if (approvedPlans.length === 0)
28
+ return;
29
+ logger.log(`Executing ${approvedPlans.length} approved funding plan(s)`);
30
+ const { getStablecoinAdapter } = await import('./financial/adapter-factory.js');
31
+ const adapter = await getStablecoinAdapter(vaultKey, logger);
32
+ const treasuryState = getTreasuryState();
33
+ for (const plan of approvedPlans) {
34
+ const intentId = randomUUID();
35
+ // Write WAL entry before execution (ADR-3)
36
+ await writeWalEntry({
37
+ intentId,
38
+ operation: 'auto-funding-execute',
39
+ params: { planId: plan.id, requiredCents: plan.requiredCents },
40
+ status: 'pending',
41
+ createdAt: new Date().toISOString(),
42
+ });
43
+ try {
44
+ const planRef = {
45
+ id: plan.id ?? randomUUID(),
46
+ sourceFundingId: plan.sourceFundingId ?? 'default-source',
47
+ destinationBankId: plan.destinationBankId ?? 'default-bank',
48
+ requiredCents: (plan.requiredCents ?? 0),
49
+ idempotencyKey: plan.idempotencyKey ?? randomUUID(),
50
+ };
51
+ const transfer = await adapter.initiateOfframp(planRef, plan.hash ?? '');
52
+ // Transition plan to PENDING_SETTLEMENT
53
+ plan.status = 'PENDING_SETTLEMENT';
54
+ plan.updatedAt = new Date().toISOString();
55
+ await writeFundingPlans(plans);
56
+ // Log the transfer
57
+ await mkdir(TREASURY_DIR, { recursive: true });
58
+ await appendFile(TRANSFERS_LOG, JSON.stringify(transfer) + '\n', 'utf-8');
59
+ // Track pending transfer
60
+ const pending = await readPendingTransfers();
61
+ pending.push({
62
+ id: transfer.id,
63
+ fundingPlanId: plan.id,
64
+ providerTransferId: transfer.providerTransferId,
65
+ amountCents: transfer.amountCents,
66
+ status: 'pending',
67
+ initiatedAt: transfer.initiatedAt,
68
+ lastPolledAt: transfer.initiatedAt,
69
+ });
70
+ await writePendingTransfers(pending);
71
+ // Update treasury state
72
+ treasuryState.pendingTransferCount += 1;
73
+ treasuryState.lastOfframpAt = new Date().toISOString();
74
+ // Track daily movement for CB-6
75
+ const today = new Date().toISOString().slice(0, 10);
76
+ if (treasuryState.dailyMovementDate !== today) {
77
+ treasuryState.dailyMovementCents = 0;
78
+ treasuryState.dailyMovementDate = today;
79
+ }
80
+ treasuryState.dailyMovementCents += (plan.requiredCents ?? 0);
81
+ // Complete WAL
82
+ await writeWalEntry({
83
+ intentId,
84
+ operation: 'auto-funding-execute',
85
+ params: { planId: plan.id, transferId: transfer.id, providerTransferId: transfer.providerTransferId },
86
+ status: 'completed',
87
+ createdAt: new Date().toISOString(),
88
+ completedAt: new Date().toISOString(),
89
+ });
90
+ logger.log(`Auto-funding executed: plan ${plan.id}, ` +
91
+ `$${((plan.requiredCents ?? 0) / 100).toFixed(2)} ` +
92
+ `via ${transfer.provider} (transfer ${transfer.id})`);
93
+ // CB-6: Check daily movement limits
94
+ const cb = evaluateCircuitBreakers(treasuryState);
95
+ if (cb.shouldFreeze && !treasuryState.fundingFrozen) {
96
+ await triggerFreeze(cb.reasons.join('; '));
97
+ }
98
+ }
99
+ catch (err) {
100
+ const msg = err instanceof Error ? err.message : 'Unknown error';
101
+ logger.log(`Auto-funding execution failed for plan ${plan.id}: ${msg}`);
102
+ // Mark plan as FAILED
103
+ plan.status = 'FAILED';
104
+ plan.updatedAt = new Date().toISOString();
105
+ await writeFundingPlans(plans);
106
+ // Mark WAL as failed
107
+ await writeWalEntry({
108
+ intentId,
109
+ operation: 'auto-funding-execute',
110
+ params: { planId: plan.id },
111
+ status: 'failed',
112
+ createdAt: new Date().toISOString(),
113
+ error: msg,
114
+ });
115
+ }
116
+ }
117
+ await saveTreasuryState();
118
+ }
119
+ // ── Treasury Heartbeat Jobs (PRD S10.4) ──────────────
120
+ export function registerTreasuryJobs(scheduler, logger, writeCurrentState, triggerFreeze, vaultKey) {
121
+ if (!isStablecoinConfigured()) {
122
+ logger.log('Treasury jobs skipped — stablecoin funding not configured');
123
+ return;
124
+ }
125
+ // Load persisted treasury state on registration
126
+ void loadTreasuryState().catch(() => {
127
+ /* state will use defaults */
128
+ });
129
+ // WAL recovery: resolve pending operations from prior crash/restart
130
+ void recoverPendingOps(vaultKey, logger).catch((err) => {
131
+ const msg = err instanceof Error ? err.message : 'Unknown error';
132
+ logger.log(`WAL recovery failed: ${msg}`);
133
+ });
134
+ // Job 1: stablecoin-balance-check (hourly)
135
+ scheduler.add('stablecoin-balance-check', 3_600_000, async () => {
136
+ logger.log('Stablecoin balance check starting');
137
+ const treasuryState = getTreasuryState();
138
+ try {
139
+ const { getStablecoinAdapter } = await import('./financial/adapter-factory.js');
140
+ const adapter = await getStablecoinAdapter(vaultKey, logger);
141
+ const balances = await adapter.getBalances();
142
+ treasuryState.stablecoinBalanceCents = balances.totalStablecoinCents;
143
+ treasuryState.consecutiveProviderFailures = 0;
144
+ logger.log(`Stablecoin balance: $${(balances.totalStablecoinCents / 100).toFixed(2)} ` +
145
+ `(${balances.stablecoin.length} wallets)`);
146
+ await saveTreasuryState();
147
+ await writeCurrentState();
148
+ }
149
+ catch (err) {
150
+ treasuryState.consecutiveProviderFailures += 1;
151
+ const msg = err instanceof Error ? err.message : 'Unknown error';
152
+ logger.log(`Stablecoin balance check failed (${treasuryState.consecutiveProviderFailures} consecutive): ${msg}`);
153
+ // CB-1: Provider unavailable for 3 consecutive polls
154
+ const cb = evaluateCircuitBreakers(treasuryState);
155
+ if (cb.shouldFreeze && !treasuryState.fundingFrozen) {
156
+ await triggerFreeze(cb.reasons.join('; '));
157
+ }
158
+ await saveTreasuryState();
159
+ }
160
+ });
161
+ // Job 2: offramp-status-poll (15 min)
162
+ scheduler.add('offramp-status-poll', 900_000, async () => {
163
+ const pending = await readPendingTransfers();
164
+ const activePending = pending.filter(t => t.status === 'pending' || t.status === 'processing');
165
+ if (activePending.length === 0)
166
+ return;
167
+ logger.log(`Polling ${activePending.length} pending off-ramp transfers`);
168
+ const treasuryState = getTreasuryState();
169
+ try {
170
+ const { getStablecoinAdapter } = await import('./financial/adapter-factory.js');
171
+ const adapter = await getStablecoinAdapter(vaultKey, logger);
172
+ let updated = false;
173
+ for (const transfer of activePending) {
174
+ try {
175
+ const status = await adapter.getTransferStatus(transfer.providerTransferId);
176
+ if (status.status !== transfer.status) {
177
+ transfer.status = status.status;
178
+ transfer.lastPolledAt = new Date().toISOString();
179
+ updated = true;
180
+ logger.log(`Transfer ${transfer.id} status: ${status.status} ` +
181
+ `($${(status.amountCents / 100).toFixed(2)})`);
182
+ if (status.status === 'completed') {
183
+ treasuryState.pendingTransferCount = Math.max(0, treasuryState.pendingTransferCount - 1);
184
+ // Mark matching funding plan as SETTLED
185
+ if (transfer.fundingPlanId) {
186
+ try {
187
+ const plans = await readFundingPlans();
188
+ const plan = plans.find(p => p.id === transfer.fundingPlanId);
189
+ if (plan && (plan.status === 'PENDING_SETTLEMENT' || plan.status === 'APPROVED')) {
190
+ plan.status = 'SETTLED';
191
+ plan.updatedAt = new Date().toISOString();
192
+ await writeFundingPlans(plans);
193
+ logger.log(`Funding plan ${plan.id} marked SETTLED`);
194
+ }
195
+ }
196
+ catch (planErr) {
197
+ const planMsg = planErr instanceof Error ? planErr.message : 'Unknown error';
198
+ logger.log(`Failed to update funding plan status: ${planMsg}`);
199
+ }
200
+ }
201
+ }
202
+ }
203
+ }
204
+ catch (err) {
205
+ const msg = err instanceof Error ? err.message : 'Unknown error';
206
+ logger.log(`Transfer ${transfer.id} poll failed: ${msg}`);
207
+ }
208
+ }
209
+ if (updated) {
210
+ await writePendingTransfers(pending);
211
+ await saveTreasuryState();
212
+ }
213
+ // CB-2: Check for SLA breach on pending transfers
214
+ const slaCheck = evaluateTransferSlaBreaker(pending);
215
+ if (slaCheck.shouldFreeze && !treasuryState.fundingFrozen) {
216
+ await triggerFreeze(slaCheck.reasons.join('; '));
217
+ }
218
+ }
219
+ catch (err) {
220
+ const msg = err instanceof Error ? err.message : 'Unknown error';
221
+ logger.log(`Off-ramp status poll error: ${msg}`);
222
+ }
223
+ });
224
+ // Job 3: bank-settlement-monitor (hourly)
225
+ scheduler.add('bank-settlement-monitor', 3_600_000, async () => {
226
+ logger.log('Bank settlement monitor starting');
227
+ const treasuryState = getTreasuryState();
228
+ try {
229
+ const { getBankAdapter } = await import('./financial/adapter-factory.js');
230
+ const bankAdapter = await getBankAdapter(vaultKey, logger);
231
+ if (!bankAdapter.getBalance) {
232
+ logger.log('Bank adapter does not support getBalance — skipping');
233
+ await writeCurrentState();
234
+ return;
235
+ }
236
+ const balance = await bankAdapter.getBalance();
237
+ treasuryState.bankBalanceCents = balance.available;
238
+ logger.log(`Bank balance: $${(balance.available / 100).toFixed(2)} available, ` +
239
+ `$${(balance.pending / 100).toFixed(2)} pending`);
240
+ // Check for newly settled transfers
241
+ const pending = await readPendingTransfers();
242
+ const recentlyCompleted = pending.filter(t => t.status === 'completed');
243
+ if (recentlyCompleted.length > 0) {
244
+ logger.log(`${recentlyCompleted.length} transfer(s) settled since last check`);
245
+ }
246
+ await saveTreasuryState();
247
+ await writeCurrentState();
248
+ }
249
+ catch (err) {
250
+ const msg = err instanceof Error ? err.message : 'Unknown error';
251
+ logger.log(`Bank settlement monitor error: ${msg}`);
252
+ }
253
+ });
254
+ // Job 4: google-invoice-scan (daily)
255
+ scheduler.add('google-invoice-scan', 86_400_000, async () => {
256
+ logger.log('Google invoice scan starting');
257
+ const treasuryState = getTreasuryState();
258
+ try {
259
+ const { getBillingAdapter } = await import('./financial/adapter-factory.js');
260
+ const billingAdapter = await getBillingAdapter('google', vaultKey, logger);
261
+ if (!billingAdapter) {
262
+ logger.log('Google invoice scan: no billing adapter available — skipping');
263
+ await writeCurrentState();
264
+ return;
265
+ }
266
+ const now = new Date();
267
+ const thirtyDaysAgo = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);
268
+ const today = now.toISOString().slice(0, 10);
269
+ const start = thirtyDaysAgo.toISOString().slice(0, 10);
270
+ const invoices = await billingAdapter.readInvoices('google', { start, end: today });
271
+ // Identify pending/overdue invoices for obligation tracking
272
+ const pendingInvoices = invoices.filter(i => i.status === 'pending' || i.status === 'overdue');
273
+ const totalInvoiceCents = pendingInvoices.reduce((sum, i) => sum + i.amountCents, 0);
274
+ // Check for invoices due within 7 days
275
+ const sevenDaysFromNow = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000);
276
+ const dueSoon = pendingInvoices.some(i => {
277
+ const dueDate = new Date(i.dueDate);
278
+ return dueDate.getTime() <= sevenDaysFromNow.getTime();
279
+ });
280
+ // Update treasury state with invoice data
281
+ treasuryState.googleInvoiceDueSoon = dueSoon;
282
+ treasuryState.googleInvoiceCents = totalInvoiceCents;
283
+ // Update pending obligations (add google invoices portion)
284
+ // Recalculate: google invoices + meta debits
285
+ treasuryState.pendingObligationsCents =
286
+ totalInvoiceCents + treasuryState.metaForecast7DayCents;
287
+ logger.log(`Google invoice scan: ${invoices.length} invoice(s), ` +
288
+ `${pendingInvoices.length} pending/overdue ` +
289
+ `($${(totalInvoiceCents / 100).toFixed(2)}), ` +
290
+ `due soon: ${dueSoon}`);
291
+ // Settlement planning: prioritize overdue invoices, then nearest due date
292
+ if (pendingInvoices.length > 0) {
293
+ const plans = planGoogleInvoiceSettlement(pendingInvoices.map(i => ({
294
+ invoiceId: i.id,
295
+ amountCents: i.amountCents,
296
+ dueDate: i.dueDate,
297
+ status: i.status,
298
+ })), treasuryState.bankBalanceCents, 50_000);
299
+ logger.log(`Settlement plans: ${plans.length} invoices prioritized for payment`);
300
+ }
301
+ // CB-4: Evaluate billing breakers with invoice data
302
+ const cbResult = evaluateBillingBreakers({
303
+ googleInvoiceDueSoon: dueSoon,
304
+ googleInvoiceCents: totalInvoiceCents,
305
+ bankBalanceCents: treasuryState.bankBalanceCents,
306
+ minimumBufferCents: 50_000, // $500 minimum buffer
307
+ metaDebitFailed: treasuryState.metaDebitFailed,
308
+ metaPaymentRisk: treasuryState.metaPaymentRisk,
309
+ });
310
+ if (cbResult.shouldFreeze && !treasuryState.fundingFrozen) {
311
+ await triggerFreeze(cbResult.reasons.join('; '));
312
+ }
313
+ await saveTreasuryState();
314
+ await writeCurrentState();
315
+ }
316
+ catch (err) {
317
+ const msg = err instanceof Error ? err.message : 'Unknown error';
318
+ logger.log(`Google invoice scan error: ${msg}`);
319
+ }
320
+ });
321
+ // Job 5: meta-debit-monitor (daily)
322
+ scheduler.add('meta-debit-monitor', 86_400_000, async () => {
323
+ logger.log('Meta debit monitor starting');
324
+ const treasuryState = getTreasuryState();
325
+ try {
326
+ const { getBillingAdapter } = await import('./financial/adapter-factory.js');
327
+ const billingAdapter = await getBillingAdapter('meta', vaultKey, logger);
328
+ if (!billingAdapter) {
329
+ logger.log('Meta debit monitor: no billing adapter available — skipping');
330
+ await writeCurrentState();
331
+ return;
332
+ }
333
+ const now = new Date();
334
+ const today = now.toISOString().slice(0, 10);
335
+ const sevenDaysFromNow = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000);
336
+ const end = sevenDaysFromNow.toISOString().slice(0, 10);
337
+ let debits = [];
338
+ let metaDebitFailed = false;
339
+ try {
340
+ debits = await billingAdapter.readExpectedDebits('meta', { start: today, end });
341
+ }
342
+ catch (debitErr) {
343
+ // If we can't read debits, Meta may be in a bad state
344
+ metaDebitFailed = true;
345
+ const msg = debitErr instanceof Error ? debitErr.message : 'Unknown error';
346
+ logger.log(`Meta debit read failed: ${msg}`);
347
+ debits = [];
348
+ }
349
+ // Sum expected debits for obligation tracking
350
+ const totalDebitCents = debits.reduce((sum, d) => sum + d.estimatedAmountCents, 0);
351
+ // Check for failed or risky debits
352
+ const hasFailedDebit = debits.some(d => d.status === 'failed');
353
+ // Meta "payment risk" = debit failed or adapter call failed
354
+ const paymentRisk = metaDebitFailed || hasFailedDebit;
355
+ // Update treasury state with debit data
356
+ treasuryState.metaDebitFailed = metaDebitFailed || hasFailedDebit;
357
+ treasuryState.metaPaymentRisk = paymentRisk;
358
+ treasuryState.metaForecast7DayCents = totalDebitCents;
359
+ // Update pending obligations (google invoices + meta debits)
360
+ treasuryState.pendingObligationsCents =
361
+ treasuryState.googleInvoiceCents + totalDebitCents;
362
+ logger.log(`Meta debit monitor: ${debits.length} expected debit(s) ` +
363
+ `($${(totalDebitCents / 100).toFixed(2)} next 7 days), ` +
364
+ `failed: ${hasFailedDebit}, risk: ${paymentRisk}`);
365
+ // Debit protection: calculate additional buffer needed for upcoming Meta debits
366
+ if (debits.length > 0) {
367
+ const additionalBuffer = planMetaDebitProtection(debits.map(d => ({
368
+ date: d.expectedDate,
369
+ amountCents: d.estimatedAmountCents,
370
+ })), treasuryState.bankBalanceCents, 50_000);
371
+ if (additionalBuffer > 0) {
372
+ logger.log(`Meta debit protection: additional buffer needed $${(additionalBuffer / 100).toFixed(2)}`);
373
+ }
374
+ }
375
+ // CB-5: Evaluate billing breakers with debit data
376
+ const cbResult = evaluateBillingBreakers({
377
+ googleInvoiceDueSoon: treasuryState.googleInvoiceDueSoon,
378
+ googleInvoiceCents: treasuryState.googleInvoiceCents,
379
+ bankBalanceCents: treasuryState.bankBalanceCents,
380
+ minimumBufferCents: 50_000, // $500 minimum buffer
381
+ metaDebitFailed: treasuryState.metaDebitFailed,
382
+ metaPaymentRisk: paymentRisk,
383
+ });
384
+ if (cbResult.shouldFreeze && !treasuryState.fundingFrozen) {
385
+ await triggerFreeze(cbResult.reasons.join('; '));
386
+ }
387
+ await saveTreasuryState();
388
+ await writeCurrentState();
389
+ }
390
+ catch (err) {
391
+ const msg = err instanceof Error ? err.message : 'Unknown error';
392
+ logger.log(`Meta debit monitor error: ${msg}`);
393
+ }
394
+ });
395
+ // Job 6: runway-forecast (every 6 hours)
396
+ scheduler.add('runway-forecast', 21_600_000, async () => {
397
+ logger.log('Runway forecast starting');
398
+ const treasuryState = getTreasuryState();
399
+ try {
400
+ // Read campaign data for spend projection
401
+ const campaignsDir = join(TREASURY_DIR, 'campaigns');
402
+ const campaigns = [];
403
+ if (existsSync(campaignsDir)) {
404
+ const { readdir } = await import('node:fs/promises');
405
+ const files = await readdir(campaignsDir);
406
+ for (const file of files) {
407
+ if (!file.endsWith('.json'))
408
+ continue;
409
+ try {
410
+ const content = await readFile(join(campaignsDir, file), 'utf-8');
411
+ const c = JSON.parse(content);
412
+ campaigns.push({
413
+ campaignId: c.id ?? file,
414
+ platform: c.platform ?? 'google',
415
+ dailyBudgetCents: c.dailyBudgetCents ?? 0,
416
+ status: c.status ?? 'paused',
417
+ });
418
+ }
419
+ catch { /* skip malformed */ }
420
+ }
421
+ }
422
+ const bankBalance = treasuryState.bankBalanceCents;
423
+ const pendingObligations = treasuryState.pendingObligationsCents;
424
+ const forecast = forecastRunway(bankBalance, campaigns, pendingObligations);
425
+ treasuryState.runwayDays = forecast.runwayDays;
426
+ logger.log(`Runway forecast: ${forecast.runwayDays} days ` +
427
+ `(bank $${(bankBalance / 100).toFixed(2)}, ` +
428
+ `daily spend $${(forecast.dailySpendCents / 100).toFixed(2)})`);
429
+ // Auto-funding evaluation: if runway is low, check if we should auto-off-ramp
430
+ if (!treasuryState.fundingFrozen) {
431
+ const autoConfig = {
432
+ source: {
433
+ id: 'default-source',
434
+ provider: 'circle',
435
+ asset: 'USDC',
436
+ network: 'ETH',
437
+ sourceAccountId: 'default',
438
+ whitelistedDestinationBankId: 'default-bank',
439
+ status: 'active',
440
+ },
441
+ bank: {
442
+ id: 'default-bank',
443
+ provider: 'mercury',
444
+ accountId: 'default',
445
+ currency: 'USD',
446
+ availableBalanceCents: bankBalance,
447
+ reservedBalanceCents: 0,
448
+ minimumBufferCents: 50_000, // $500
449
+ },
450
+ planConfig: {
451
+ minimumOfframpCents: 10_000, // $100
452
+ bufferTargetCents: 100_000, // $1,000
453
+ maxDailyOfframpCents: 5_000_000, // $50,000
454
+ targetRunwayDays: 30,
455
+ },
456
+ pendingSpendCents: pendingObligations,
457
+ obligations: [],
458
+ googleInvoiceDueSoon: treasuryState.googleInvoiceDueSoon,
459
+ googleInvoiceCents: treasuryState.googleInvoiceCents,
460
+ metaUsesDirectDebit: treasuryState.metaForecast7DayCents > 0,
461
+ metaForecast7DayCents: treasuryState.metaForecast7DayCents,
462
+ debitProtectionBufferCents: 0,
463
+ discrepancyExists: treasuryState.consecutiveMismatches > 0,
464
+ previousHash: '',
465
+ };
466
+ const autoResult = evaluateAutoFunding(autoConfig);
467
+ if (autoResult) {
468
+ logger.log(`Auto-funding approved: $${(autoResult.plan.requiredCents / 100).toFixed(2)} ` +
469
+ `(reason: ${autoResult.plan.reason}) — queuing for execution`);
470
+ // Log the approved plan
471
+ await mkdir(TREASURY_DIR, { recursive: true });
472
+ await appendFile(FUNDING_PLANS_LOG, JSON.stringify(autoResult.plan) + '\n', 'utf-8');
473
+ }
474
+ else {
475
+ logger.log('Auto-funding: no action needed or policy blocked');
476
+ }
477
+ // Execute approved funding plans
478
+ await executeApprovedPlans(vaultKey, logger, triggerFreeze);
479
+ }
480
+ await saveTreasuryState();
481
+ await writeCurrentState();
482
+ }
483
+ catch (err) {
484
+ const msg = err instanceof Error ? err.message : 'Unknown error';
485
+ logger.log(`Runway forecast error: ${msg}`);
486
+ }
487
+ });
488
+ // Job 7: funding-reconciliation (extends existing reconciliation at midnight+06:00)
489
+ scheduler.add('funding-reconciliation', 3_600_000, async () => {
490
+ const hour = new Date().getUTCHours();
491
+ if (hour !== 0 && hour !== 6)
492
+ return;
493
+ logger.log(`Funding reconciliation (${hour === 0 ? 'preliminary' : 'authoritative'}) starting`);
494
+ const treasuryState = getTreasuryState();
495
+ try {
496
+ // Read provider transfers from transfers log
497
+ const providerTransfers = [];
498
+ if (existsSync(TRANSFERS_LOG)) {
499
+ const content = await readFile(TRANSFERS_LOG, 'utf-8');
500
+ const lines = content.trim().split('\n').filter(Boolean);
501
+ for (const line of lines) {
502
+ try {
503
+ const t = JSON.parse(line);
504
+ providerTransfers.push(t);
505
+ }
506
+ catch { /* skip malformed */ }
507
+ }
508
+ }
509
+ // Bank transactions and platform spend are empty until bank adapter
510
+ // is wired with real credentials
511
+ const bankTransactions = [];
512
+ const platformSpend = [];
513
+ const report = reconcileThreeWay(providerTransfers, bankTransactions, platformSpend);
514
+ // Write report to reconciliation log
515
+ await mkdir(TREASURY_DIR, { recursive: true });
516
+ await appendFile(RECONCILIATION_LOG, JSON.stringify({ ...report, type: hour === 0 ? 'preliminary' : 'authoritative' }) + '\n', 'utf-8');
517
+ treasuryState.lastReconciliationAt = new Date().toISOString();
518
+ // Track consecutive mismatches for CB-3
519
+ if (report.mismatchCount > 0) {
520
+ treasuryState.consecutiveMismatches += 1;
521
+ logger.log(`Reconciliation: ${report.mismatchCount} mismatch(es), ` +
522
+ `${treasuryState.consecutiveMismatches} consecutive`);
523
+ }
524
+ else {
525
+ treasuryState.consecutiveMismatches = 0;
526
+ logger.log(`Reconciliation: clean — ${report.transferMatches.length} transfers matched, ` +
527
+ `variance $${(report.overallVarianceCents / 100).toFixed(2)}`);
528
+ }
529
+ // CB-3: Reconciliation mismatch for 2 consecutive closes
530
+ if (shouldFreeze(report.mismatchCount, treasuryState.consecutiveMismatches, 2)) {
531
+ if (!treasuryState.fundingFrozen) {
532
+ await triggerFreeze(`Reconciliation mismatch for ${treasuryState.consecutiveMismatches} consecutive closes`);
533
+ }
534
+ }
535
+ await saveTreasuryState();
536
+ await writeCurrentState();
537
+ }
538
+ catch (err) {
539
+ const msg = err instanceof Error ? err.message : 'Unknown error';
540
+ logger.log(`Funding reconciliation error: ${msg}`);
541
+ }
542
+ });
543
+ // Job 8: stale-plan-detector (hourly)
544
+ scheduler.add('stale-plan-detector', 3_600_000, async () => {
545
+ try {
546
+ if (!existsSync(FUNDING_PLANS_LOG))
547
+ return;
548
+ const content = await readFile(FUNDING_PLANS_LOG, 'utf-8');
549
+ const lines = content.trim().split('\n').filter(Boolean);
550
+ const STALE_THRESHOLD_MS = 24 * 60 * 60 * 1000; // 24 hours
551
+ const now = Date.now();
552
+ let staleCount = 0;
553
+ for (const line of lines) {
554
+ try {
555
+ const plan = JSON.parse(line);
556
+ if (plan.status !== 'DRAFT' && plan.status !== 'APPROVED')
557
+ continue;
558
+ const age = now - new Date(plan.createdAt ?? '').getTime();
559
+ if (age > STALE_THRESHOLD_MS) {
560
+ staleCount += 1;
561
+ logger.log(`Stale funding plan: ${plan.id} (${plan.status}, ${Math.round(age / (60 * 60 * 1000))}h old)`);
562
+ }
563
+ }
564
+ catch { /* skip malformed */ }
565
+ }
566
+ if (staleCount > 0) {
567
+ logger.log(`${staleCount} stale funding plan(s) detected — plans stuck in PENDING >24h`);
568
+ }
569
+ }
570
+ catch (err) {
571
+ const msg = err instanceof Error ? err.message : 'Unknown error';
572
+ logger.log(`Stale plan detector error: ${msg}`);
573
+ }
574
+ });
575
+ // Job 9: treasury-backup (daily — encrypted AES-256-GCM snapshots, 30-day retention)
576
+ scheduler.add('treasury-backup', 86_400_000, async () => {
577
+ logger.log('Treasury backup starting');
578
+ try {
579
+ const result = await createDailyBackup(vaultKey ?? '');
580
+ logger.log(`Treasury backup: ${result.files} files backed up to ${result.path}`);
581
+ await writeCurrentState();
582
+ }
583
+ catch (err) {
584
+ const msg = err instanceof Error ? err.message : 'Unknown error';
585
+ logger.log(`Treasury backup error: ${msg}`);
586
+ }
587
+ });
588
+ logger.log('Treasury heartbeat jobs registered (9 jobs, WAL recovery active)');
589
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Treasury Migrator — Migrate global treasury data to per-project paths.
3
+ *
4
+ * v22.0 moved financial paths per-project ({project}/cultivation/treasury/)
5
+ * but left no migration tooling. Existing users with global treasury data
6
+ * at ~/.voidforge/treasury/ see empty dashboards after upgrading.
7
+ *
8
+ * Strategy: Clean break. Global data is archived, not copied. Per-project
9
+ * logs start with genesis hash ('0'). Copying would create false provenance
10
+ * (Riker/Spock dissent, ADR-041 decision).
11
+ *
12
+ * v22.1 Mission 1 — Campaign 30
13
+ */
14
+ import { type Project } from './project-registry.js';
15
+ import { type ProjectContext } from './project-scope.js';
16
+ export interface MigrationPreFlight {
17
+ projectId: string;
18
+ project: Project | null;
19
+ context: ProjectContext | null;
20
+ globalTreasuryDir: string;
21
+ globalTreasuryExists: boolean;
22
+ globalFileCount: number;
23
+ cultivationInstalled: boolean;
24
+ daemonRunning: boolean;
25
+ errors: string[];
26
+ warnings: string[];
27
+ }
28
+ export interface MigrationManifest {
29
+ version: '22.1';
30
+ migratedAt: string;
31
+ projectId: string;
32
+ projectName: string;
33
+ projectDir: string;
34
+ sourceDir: string;
35
+ archiveDir: string;
36
+ sourceFileCount: number;
37
+ spendLogEntries: number;
38
+ revenueLogEntries: number;
39
+ spendLogHashValid: boolean;
40
+ revenueLogHashValid: boolean;
41
+ }
42
+ export interface MigrationResult {
43
+ success: boolean;
44
+ manifest: MigrationManifest;
45
+ archiveDir: string;
46
+ treasuryDir: string;
47
+ }
48
+ export declare function preFlightCheck(projectId: string): Promise<MigrationPreFlight>;
49
+ /**
50
+ * Execute treasury migration for a project.
51
+ *
52
+ * Steps:
53
+ * 1. Archive global treasury to ~/.voidforge/treasury-pre-v22/
54
+ * 2. Create per-project cultivation/treasury/ with genesis files
55
+ * 3. Write migration manifest
56
+ * 4. Set 0700 permissions on treasury directory
57
+ * 5. Validate hash chains in archived logs
58
+ */
59
+ export declare function migrateTreasury(context: ProjectContext): Promise<MigrationResult>;