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,202 @@
1
+ /**
2
+ * Sandbox Stablecoin Adapter — full implementation for development/demo.
3
+ *
4
+ * Returns realistic fake data matching the StablecoinSetup + StablecoinAdapter
5
+ * interfaces. Every method returns valid-shaped data. No throws.
6
+ * This IS a full implementation for a sandbox provider (No Stubs Doctrine).
7
+ *
8
+ * Simulates a USDC wallet with ~$50,000 starting balance, realistic off-ramp
9
+ * lifecycle (pending -> processing -> completed over 3 polls), and deterministic
10
+ * fee estimates.
11
+ */
12
+ import { randomUUID } from 'node:crypto';
13
+ import { toCents, computeTransferHash } from './base.js';
14
+ // ── Setup Implementation ─────────────────────────────
15
+ export class SandboxStablecoinSetup {
16
+ async authenticate(_credentials) {
17
+ return {
18
+ valid: true,
19
+ accountId: `sandbox_wallet_${randomUUID().slice(0, 8)}`,
20
+ permissions: ['read_balances', 'initiate_payouts', 'read_payouts'],
21
+ };
22
+ }
23
+ async verifySupportedAssets(_credentials) {
24
+ return [
25
+ {
26
+ asset: 'USDC',
27
+ network: 'ETH',
28
+ contractAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
29
+ minRedemption: toCents(100),
30
+ },
31
+ {
32
+ asset: 'USDC',
33
+ network: 'SOL',
34
+ contractAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
35
+ minRedemption: toCents(50),
36
+ },
37
+ ];
38
+ }
39
+ async verifyLinkedBank(_credentials) {
40
+ return {
41
+ linked: true,
42
+ bankId: 'sandbox_bank_001',
43
+ bankName: 'Sandbox Mercury Account',
44
+ accountLast4: '4242',
45
+ };
46
+ }
47
+ async getInitialBalances(_credentials) {
48
+ return [
49
+ {
50
+ provider: 'circle',
51
+ asset: 'USDC',
52
+ network: 'ETH',
53
+ balanceCents: toCents(50_000),
54
+ lastUpdated: new Date().toISOString(),
55
+ },
56
+ ];
57
+ }
58
+ }
59
+ // ── Runtime Adapter Implementation ───────────────────
60
+ export class SandboxStablecoinAdapter {
61
+ balanceCents;
62
+ transfers = new Map();
63
+ constructor(initialBalanceDollars = 50_000) {
64
+ this.balanceCents = toCents(initialBalanceDollars);
65
+ }
66
+ async getBalances() {
67
+ const now = new Date().toISOString();
68
+ const stablecoin = [
69
+ {
70
+ provider: 'circle',
71
+ asset: 'USDC',
72
+ network: 'ETH',
73
+ balanceCents: this.balanceCents,
74
+ lastUpdated: now,
75
+ },
76
+ ];
77
+ return {
78
+ stablecoin,
79
+ fiat: [],
80
+ totalStablecoinCents: this.balanceCents,
81
+ totalFiatAvailableCents: 0,
82
+ };
83
+ }
84
+ async quoteRedemption(amountCents) {
85
+ // Sandbox fee: flat $10 per off-ramp
86
+ const feeCents = toCents(10);
87
+ return {
88
+ provider: 'circle',
89
+ sourceAsset: 'USDC',
90
+ sourceNetwork: 'ETH',
91
+ requestedCents: amountCents,
92
+ estimatedFeeCents: feeCents,
93
+ estimatedNetCents: (amountCents - feeCents),
94
+ estimatedSettlementMinutes: 60,
95
+ expiresAt: new Date(Date.now() + 10 * 60 * 1000).toISOString(),
96
+ };
97
+ }
98
+ async initiateOfframp(plan, previousHash) {
99
+ const feeCents = toCents(10);
100
+ const netCents = (plan.requiredCents - feeCents);
101
+ const now = new Date().toISOString();
102
+ const id = randomUUID();
103
+ const providerTransferId = `sandbox_xfer_${randomUUID().slice(0, 12)}`;
104
+ // Deduct from simulated balance
105
+ this.balanceCents = (this.balanceCents - plan.requiredCents);
106
+ const record = {
107
+ id,
108
+ fundingPlanId: plan.id,
109
+ providerTransferId,
110
+ provider: 'circle',
111
+ direction: 'crypto_to_fiat',
112
+ sourceAsset: 'USDC',
113
+ sourceNetwork: 'ETH',
114
+ amountCents: plan.requiredCents,
115
+ feesCents: feeCents,
116
+ netAmountCents: netCents,
117
+ destinationBankId: plan.destinationBankId,
118
+ status: 'pending',
119
+ initiatedAt: now,
120
+ idempotencyKey: plan.idempotencyKey,
121
+ previousHash,
122
+ };
123
+ const hash = computeTransferHash(record, previousHash);
124
+ const fullRecord = { ...record, hash };
125
+ this.transfers.set(id, { record: fullRecord, pollCount: 0 });
126
+ return fullRecord;
127
+ }
128
+ async getTransferStatus(transferId) {
129
+ const state = this.transfers.get(transferId);
130
+ if (!state) {
131
+ // Return failed status for unknown IDs — unknown transfers should not
132
+ // be reported as completed (could cause false settlement in reconciliation).
133
+ return {
134
+ transferId,
135
+ providerTransferId: 'unknown',
136
+ status: 'failed',
137
+ amountCents: 0,
138
+ feesCents: 0,
139
+ initiatedAt: new Date().toISOString(),
140
+ providerRawStatus: 'not_found',
141
+ };
142
+ }
143
+ // Simulate lifecycle: pending (poll 0) -> processing (poll 1) -> completed (poll 2+)
144
+ state.pollCount += 1;
145
+ let status;
146
+ let rawStatus;
147
+ let completedAt;
148
+ if (state.pollCount <= 1) {
149
+ status = 'pending';
150
+ rawStatus = 'pending';
151
+ }
152
+ else if (state.pollCount === 2) {
153
+ status = 'processing';
154
+ rawStatus = 'processing';
155
+ }
156
+ else {
157
+ status = 'completed';
158
+ rawStatus = 'complete';
159
+ completedAt = new Date().toISOString();
160
+ // Update stored record status
161
+ state.record = { ...state.record, status: 'completed', completedAt };
162
+ }
163
+ return {
164
+ transferId: state.record.id,
165
+ providerTransferId: state.record.providerTransferId,
166
+ status,
167
+ amountCents: state.record.amountCents,
168
+ feesCents: state.record.feesCents,
169
+ initiatedAt: state.record.initiatedAt,
170
+ completedAt,
171
+ estimatedCompletionAt: status !== 'completed'
172
+ ? new Date(Date.now() + 60 * 60 * 1000).toISOString()
173
+ : undefined,
174
+ providerRawStatus: rawStatus,
175
+ };
176
+ }
177
+ async cancelTransfer(transferId) {
178
+ const state = this.transfers.get(transferId);
179
+ if (!state) {
180
+ return { cancelled: false, reason: 'Transfer not found' };
181
+ }
182
+ if (state.record.status === 'completed') {
183
+ return { cancelled: false, reason: 'Transfer already completed' };
184
+ }
185
+ if (state.record.status === 'processing') {
186
+ return { cancelled: false, reason: 'Transfer is processing — cannot cancel' };
187
+ }
188
+ // Refund the balance and mark cancelled
189
+ this.balanceCents = (this.balanceCents + state.record.amountCents);
190
+ state.record = { ...state.record, status: 'cancelled' };
191
+ return { cancelled: true };
192
+ }
193
+ async listCompletedTransfers(_dateRange) {
194
+ const completed = [];
195
+ for (const state of this.transfers.values()) {
196
+ if (state.record.status === 'completed') {
197
+ completed.push(state.record);
198
+ }
199
+ }
200
+ return completed;
201
+ }
202
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Treasury Planner — pure logic module for runway forecasting and plan generation.
3
+ *
4
+ * No API calls, no file I/O — fully testable deterministic functions.
5
+ * All monetary values use branded integer cents (Cents type).
6
+ *
7
+ * PRD Reference: §12.4 (FundingPlan), §12.5 (TransferRecord), §15 (Rules Engine)
8
+ * Agents: Dockson (treasury), Heartbeat daemon
9
+ */
10
+ import type { Cents, FundingPlan, OperatingBankAccount, StablecoinFundingSource, PendingObligation } from '../patterns/funding-plan.js';
11
+ interface CampaignSpendProjection {
12
+ campaignId: string;
13
+ platform: 'google' | 'meta';
14
+ dailyBudgetCents: Cents;
15
+ status: 'active' | 'paused';
16
+ }
17
+ interface FundingPlanConfig {
18
+ /** Minimum off-ramp amount (provider-enforced) */
19
+ minimumOfframpCents: Cents;
20
+ /** Target buffer above minimum — the "comfort zone" */
21
+ bufferTargetCents: Cents;
22
+ /** Maximum single off-ramp amount per day */
23
+ maxDailyOfframpCents: Cents;
24
+ /** Days of runway to maintain as target */
25
+ targetRunwayDays: number;
26
+ }
27
+ interface OfframpDecision {
28
+ shouldOfframp: boolean;
29
+ reason: string;
30
+ amountCents: Cents;
31
+ }
32
+ interface ObligationInput {
33
+ id: string;
34
+ platform: 'google' | 'meta';
35
+ type: 'invoice' | 'debit' | 'buffer';
36
+ amountCents: Cents;
37
+ dueDate: string;
38
+ overdue: boolean;
39
+ }
40
+ export declare function calculateRunway(bankBalanceCents: Cents, dailySpendRateCents: Cents): number;
41
+ export declare function forecastSpend(campaigns: CampaignSpendProjection[], days: number): Cents;
42
+ export declare function shouldTriggerOfframp(bankBalanceCents: Cents, bufferThresholdCents: Cents, pendingSpendCents: Cents): OfframpDecision;
43
+ export declare function calculateRequiredOfframp(bankBalanceCents: Cents, bufferTargetCents: Cents, pendingObligationsCents: Cents, feeEstimateCents: Cents): Cents;
44
+ export declare function prioritizeAllObligations(invoices: ObligationInput[], debits: ObligationInput[], bufferNeeds: ObligationInput[]): PendingObligation[];
45
+ export declare function generateFundingPlan(source: StablecoinFundingSource, bank: OperatingBankAccount, obligations: ObligationInput[], config: FundingPlanConfig, previousHash: string): FundingPlan | null;
46
+ export declare function calculateDailySpendRate(campaigns: CampaignSpendProjection[]): Cents;
47
+ export declare function forecastRunway(bankBalanceCents: Cents, campaigns: CampaignSpendProjection[], pendingObligationsCents: Cents): {
48
+ runwayDays: number;
49
+ dailySpendCents: Cents;
50
+ effectiveBalanceCents: Cents;
51
+ };
52
+ export type { CampaignSpendProjection, FundingPlanConfig, OfframpDecision, ObligationInput, };
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Treasury Planner — pure logic module for runway forecasting and plan generation.
3
+ *
4
+ * No API calls, no file I/O — fully testable deterministic functions.
5
+ * All monetary values use branded integer cents (Cents type).
6
+ *
7
+ * PRD Reference: §12.4 (FundingPlan), §12.5 (TransferRecord), §15 (Rules Engine)
8
+ * Agents: Dockson (treasury), Heartbeat daemon
9
+ */
10
+ import { toCents, createFundingPlan, prioritizeObligations, } from '../patterns/funding-plan.js';
11
+ // ── Runway Calculation ───────────────────────────────
12
+ // Returns the number of days the current bank balance can sustain spend.
13
+ export function calculateRunway(bankBalanceCents, dailySpendRateCents) {
14
+ if (dailySpendRateCents <= 0)
15
+ return Infinity;
16
+ return Math.floor(bankBalanceCents / dailySpendRateCents);
17
+ }
18
+ // ── Spend Forecast ───────────────────────────────────
19
+ // Projects total spend over N days based on active campaign budgets.
20
+ export function forecastSpend(campaigns, days) {
21
+ if (days <= 0)
22
+ return 0;
23
+ const dailyTotal = campaigns
24
+ .filter(c => c.status === 'active')
25
+ .reduce((sum, c) => sum + c.dailyBudgetCents, 0);
26
+ return Math.round(dailyTotal * days);
27
+ }
28
+ // ── Off-ramp Trigger Decision ────────────────────────
29
+ // Determines whether an off-ramp should be triggered and why.
30
+ export function shouldTriggerOfframp(bankBalanceCents, bufferThresholdCents, pendingSpendCents) {
31
+ const effectiveBalance = (bankBalanceCents - pendingSpendCents);
32
+ if (effectiveBalance < bufferThresholdCents) {
33
+ const deficit = (bufferThresholdCents - effectiveBalance);
34
+ return {
35
+ shouldOfframp: true,
36
+ reason: `Effective balance $${(effectiveBalance / 100).toFixed(2)} below buffer threshold $${(bufferThresholdCents / 100).toFixed(2)} — deficit $${(deficit / 100).toFixed(2)}`,
37
+ amountCents: deficit,
38
+ };
39
+ }
40
+ return {
41
+ shouldOfframp: false,
42
+ reason: `Effective balance $${(effectiveBalance / 100).toFixed(2)} above buffer threshold $${(bufferThresholdCents / 100).toFixed(2)}`,
43
+ amountCents: 0,
44
+ };
45
+ }
46
+ // ── Required Off-ramp Amount ─────────────────────────
47
+ // Calculates the exact off-ramp amount needed, clamped to provider constraints.
48
+ export function calculateRequiredOfframp(bankBalanceCents, bufferTargetCents, pendingObligationsCents, feeEstimateCents) {
49
+ // How much fiat we need: buffer + obligations + fees - current balance
50
+ const required = (bufferTargetCents + pendingObligationsCents + feeEstimateCents - bankBalanceCents);
51
+ if (required <= 0)
52
+ return 0;
53
+ return required;
54
+ }
55
+ // ── Obligation Prioritization ────────────────────────
56
+ // Sorts obligations by urgency: overdue first, then by due date.
57
+ export function prioritizeAllObligations(invoices, debits, bufferNeeds) {
58
+ const all = [...invoices, ...debits, ...bufferNeeds].map(o => ({
59
+ id: o.id,
60
+ platform: o.platform,
61
+ amountCents: o.amountCents,
62
+ dueDate: o.dueDate,
63
+ overdue: o.overdue,
64
+ }));
65
+ return prioritizeObligations(all);
66
+ }
67
+ // ── Funding Plan Generation ──────────────────────────
68
+ // Creates a FundingPlan based on current treasury state and obligations.
69
+ export function generateFundingPlan(source, bank, obligations, config, previousHash) {
70
+ // Sum all pending obligation amounts
71
+ const totalObligationsCents = obligations.reduce((sum, o) => sum + o.amountCents, 0);
72
+ // Calculate how much additional fiat we need
73
+ const requiredCents = calculateRequiredOfframp(bank.availableBalanceCents, config.bufferTargetCents, totalObligationsCents, toCents(10));
74
+ // No funding needed
75
+ if (requiredCents <= 0)
76
+ return null;
77
+ // Clamp to maximum daily off-ramp
78
+ const clampedCents = Math.min(requiredCents, config.maxDailyOfframpCents);
79
+ // Enforce minimum off-ramp amount
80
+ if (clampedCents < config.minimumOfframpCents) {
81
+ // If the required amount is below provider minimum but > 0, round up to minimum
82
+ const finalCents = config.minimumOfframpCents;
83
+ return createFundingPlan(determineFundingReason(obligations, bank), source.id, bank.id, determinePlatformTarget(obligations), finalCents, previousHash);
84
+ }
85
+ return createFundingPlan(determineFundingReason(obligations, bank), source.id, bank.id, determinePlatformTarget(obligations), clampedCents, previousHash);
86
+ }
87
+ // ── Daily Spend Rate ─────────────────────────────────
88
+ // Calculates the average daily spend rate from active campaigns.
89
+ export function calculateDailySpendRate(campaigns) {
90
+ return campaigns
91
+ .filter(c => c.status === 'active')
92
+ .reduce((sum, c) => (sum + c.dailyBudgetCents), 0);
93
+ }
94
+ // ── Runway Forecast ──────────────────────────────────
95
+ // Combines balance, spend rate, and pending obligations into a runway projection.
96
+ export function forecastRunway(bankBalanceCents, campaigns, pendingObligationsCents) {
97
+ const dailySpendCents = calculateDailySpendRate(campaigns);
98
+ const effectiveBalanceCents = (bankBalanceCents - pendingObligationsCents);
99
+ const runwayDays = calculateRunway(Math.max(effectiveBalanceCents, 0), dailySpendCents);
100
+ return { runwayDays, dailySpendCents, effectiveBalanceCents };
101
+ }
102
+ // ── Private Helpers ──────────────────────────────────
103
+ function determineFundingReason(obligations, bank) {
104
+ // Check for overdue invoices first
105
+ const hasOverdue = obligations.some(o => o.overdue);
106
+ if (hasOverdue)
107
+ return 'INVOICE_DUE';
108
+ // Check for upcoming invoices within 7 days
109
+ const sevenDaysOut = Date.now() + 7 * 24 * 60 * 60 * 1000;
110
+ const hasUpcoming = obligations.some(o => o.type === 'invoice' && new Date(o.dueDate).getTime() <= sevenDaysOut);
111
+ if (hasUpcoming)
112
+ return 'INVOICE_DUE';
113
+ // Check if bank is below minimum buffer
114
+ if (bank.availableBalanceCents < bank.minimumBufferCents)
115
+ return 'LOW_BUFFER';
116
+ // Default: runway shortfall
117
+ return 'RUNWAY_SHORTFALL';
118
+ }
119
+ function determinePlatformTarget(obligations) {
120
+ // If all obligations are for one platform, target that platform
121
+ const platforms = new Set(obligations.map(o => o.platform));
122
+ if (platforms.size === 1) {
123
+ const platform = [...platforms][0];
124
+ return platform;
125
+ }
126
+ // Mixed or no obligations: shared buffer
127
+ return 'shared_buffer';
128
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Financial core — re-exports from the financial-transaction pattern for wizard runtime use.
3
+ * ARCH-R2-012: Production code should not import from docs/patterns/ directly.
4
+ */
5
+ export { atomicWrite, appendToLog, idempotentAppend, toCents, toDollars, formatCurrency, formatRoas, formatPercentage, SPEND_LOG, REVENUE_LOG, TREASURY_DIR, getTreasuryDir, getSpendLog, getRevenueLog, getPendingOps, getBudgetsFile } from './patterns/financial-transaction.js';
6
+ export type { Cents, ReconciliationReport, Transaction, Budget, GrowthCampaign, RevenueEvent } from './patterns/financial-transaction.js';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Financial core — re-exports from the financial-transaction pattern for wizard runtime use.
3
+ * ARCH-R2-012: Production code should not import from docs/patterns/ directly.
4
+ */
5
+ export { atomicWrite, appendToLog, idempotentAppend, toCents, toDollars, formatCurrency, formatRoas, formatPercentage, SPEND_LOG, REVENUE_LOG, TREASURY_DIR, getTreasuryDir, getSpendLog, getRevenueLog, getPendingOps, getBudgetsFile } from './patterns/financial-transaction.js';
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Financial Vault — Separate encrypted storage for ad platform and bank credentials.
3
+ *
4
+ * Key differences from the infrastructure vault (vault.ts):
5
+ * - Stored at ~/.voidforge/treasury/vault.enc (not ~/.voidforge/vault.enc)
6
+ * - Uses scrypt key derivation (memory-hard, unlike PBKDF2 in the infra vault)
7
+ * Note: PRD specifies Argon2id but Node.js has no built-in Argon2id.
8
+ * scrypt is the closest built-in memory-hard KDF. Zero-dependency constraint wins.
9
+ * - Separate password from the infrastructure vault
10
+ * - TOTP 2FA required for write operations (see totp.ts)
11
+ *
12
+ * PRD Reference: §9.11 (Financial Security), ADR-4 (TOTP storage), §9.18 (macOS fsync)
13
+ *
14
+ * Threat model: compromise of the infrastructure vault should NOT automatically
15
+ * compromise the financial vault. Different password, different file, different KDF.
16
+ */
17
+ /** Store a financial credential */
18
+ export declare function financialVaultSet(password: string, key: string, value: string): Promise<void>;
19
+ /** Retrieve a financial credential */
20
+ export declare function financialVaultGet(password: string, key: string): Promise<string | null>;
21
+ /** Delete a financial credential */
22
+ export declare function financialVaultDelete(password: string, key: string): Promise<void>;
23
+ /** Check if the financial vault exists */
24
+ export declare function financialVaultExists(): boolean;
25
+ /** Verify password can decrypt the vault */
26
+ export declare function financialVaultUnlock(password: string): Promise<boolean>;
27
+ /** List stored keys (requires password) */
28
+ export declare function financialVaultKeys(password: string): Promise<string[]>;
29
+ /** Zero the in-memory cache — call on SIGTERM, vault timeout, or manual lock */
30
+ export declare function financialVaultLock(): void;
31
+ /** Return the vault file path */
32
+ export declare function financialVaultPath(): string;
33
+ /** Return the treasury directory path */
34
+ export declare function treasuryDir(): string;
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Financial Vault — Separate encrypted storage for ad platform and bank credentials.
3
+ *
4
+ * Key differences from the infrastructure vault (vault.ts):
5
+ * - Stored at ~/.voidforge/treasury/vault.enc (not ~/.voidforge/vault.enc)
6
+ * - Uses scrypt key derivation (memory-hard, unlike PBKDF2 in the infra vault)
7
+ * Note: PRD specifies Argon2id but Node.js has no built-in Argon2id.
8
+ * scrypt is the closest built-in memory-hard KDF. Zero-dependency constraint wins.
9
+ * - Separate password from the infrastructure vault
10
+ * - TOTP 2FA required for write operations (see totp.ts)
11
+ *
12
+ * PRD Reference: §9.11 (Financial Security), ADR-4 (TOTP storage), §9.18 (macOS fsync)
13
+ *
14
+ * Threat model: compromise of the infrastructure vault should NOT automatically
15
+ * compromise the financial vault. Different password, different file, different KDF.
16
+ */
17
+ import { createCipheriv, createDecipheriv, scrypt, randomBytes, timingSafeEqual } from 'node:crypto';
18
+ import { readFile, mkdir, open, rename } from 'node:fs/promises';
19
+ import { join } from 'node:path';
20
+ import { existsSync } from 'node:fs';
21
+ import { platform } from 'node:os';
22
+ import { TREASURY_DIR } from './financial-core.js';
23
+ // Vault stays global (user-scoped credentials, ADR-040 §4)
24
+ const VAULT_PATH = join(TREASURY_DIR, 'vault.enc');
25
+ const ALGORITHM = 'aes-256-gcm';
26
+ const KEY_LENGTH = 32;
27
+ const IV_LENGTH = 16;
28
+ const SALT_LENGTH = 32;
29
+ const AUTH_TAG_LENGTH = 16;
30
+ const MAX_PASSWORD_LENGTH = 256;
31
+ // scrypt parameters — memory-hard to resist brute force
32
+ // N=2^17 (131072), r=8, p=1 — ~128MB memory, ~1s on modern hardware
33
+ const SCRYPT_N = 131072;
34
+ const SCRYPT_R = 8;
35
+ const SCRYPT_P = 1;
36
+ /** In-memory cache — zeroed on lock or vault timeout */
37
+ let sessionCache = null;
38
+ /** Write queue to serialize vault operations */
39
+ let writeQueue = Promise.resolve();
40
+ function serialized(fn) {
41
+ const result = writeQueue.then(fn, () => fn());
42
+ writeQueue = result.then(() => { }, () => { });
43
+ return result;
44
+ }
45
+ async function deriveKey(password, salt) {
46
+ const capped = password.slice(0, MAX_PASSWORD_LENGTH);
47
+ return new Promise((resolve, reject) => {
48
+ scrypt(capped, salt, KEY_LENGTH, { N: SCRYPT_N, r: SCRYPT_R, p: SCRYPT_P }, (err, key) => {
49
+ if (err)
50
+ reject(err);
51
+ else
52
+ resolve(key);
53
+ });
54
+ });
55
+ }
56
+ async function encrypt(plaintext, password) {
57
+ const salt = randomBytes(SALT_LENGTH);
58
+ const iv = randomBytes(IV_LENGTH);
59
+ const key = await deriveKey(password, salt);
60
+ const cipher = createCipheriv(ALGORITHM, key, iv);
61
+ const encrypted = Buffer.concat([cipher.update(plaintext, 'utf-8'), cipher.final()]);
62
+ const authTag = cipher.getAuthTag();
63
+ // Format: salt (32) + iv (16) + authTag (16) + ciphertext
64
+ return Buffer.concat([salt, iv, authTag, encrypted]);
65
+ }
66
+ async function decrypt(data, password) {
67
+ if (data.length < SALT_LENGTH + IV_LENGTH + AUTH_TAG_LENGTH + 1) {
68
+ throw new Error('Financial vault data is corrupted or empty');
69
+ }
70
+ const salt = data.subarray(0, SALT_LENGTH);
71
+ const iv = data.subarray(SALT_LENGTH, SALT_LENGTH + IV_LENGTH);
72
+ const authTag = data.subarray(SALT_LENGTH + IV_LENGTH, SALT_LENGTH + IV_LENGTH + AUTH_TAG_LENGTH);
73
+ const ciphertext = data.subarray(SALT_LENGTH + IV_LENGTH + AUTH_TAG_LENGTH);
74
+ const key = await deriveKey(password, salt);
75
+ const decipher = createDecipheriv(ALGORITHM, key, iv);
76
+ decipher.setAuthTag(authTag);
77
+ const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
78
+ return decrypted.toString('utf-8');
79
+ }
80
+ async function readVault(password) {
81
+ if (sessionCache) {
82
+ const a = Buffer.from(sessionCache.password, 'utf-8');
83
+ const b = Buffer.from(password, 'utf-8');
84
+ if (a.length === b.length && timingSafeEqual(a, b)) {
85
+ return { ...sessionCache.data }; // Return copy to prevent mutation
86
+ }
87
+ }
88
+ if (!existsSync(VAULT_PATH)) {
89
+ return {};
90
+ }
91
+ const raw = await readFile(VAULT_PATH);
92
+ const json = await decrypt(raw, password);
93
+ const data = JSON.parse(json);
94
+ sessionCache = { password, data };
95
+ return { ...data };
96
+ }
97
+ async function writeVault(password, data) {
98
+ await mkdir(TREASURY_DIR, { recursive: true });
99
+ const json = JSON.stringify(data);
100
+ const encrypted = await encrypt(json, password);
101
+ // Atomic write: temp → fsync → rename (per ADR-1)
102
+ const tmpPath = VAULT_PATH + '.tmp.' + process.pid;
103
+ const fh = await open(tmpPath, 'w', 0o600);
104
+ try {
105
+ await fh.writeFile(encrypted);
106
+ // macOS: fsync() doesn't guarantee physical durability (§9.18)
107
+ // F_FULLFSYNC (fcntl flag 51) is required for financial files
108
+ // Node.js datasync is the closest built-in; document the gap
109
+ if (platform() === 'darwin') {
110
+ await fh.datasync();
111
+ }
112
+ else {
113
+ await fh.sync();
114
+ }
115
+ }
116
+ finally {
117
+ await fh.close();
118
+ }
119
+ await rename(tmpPath, VAULT_PATH);
120
+ sessionCache = { password, data: { ...data } };
121
+ }
122
+ // ── Public API ────────────────────────────────────────
123
+ const MIN_PASSWORD_LENGTH = 12;
124
+ function validatePassword(password) {
125
+ if (password.length < MIN_PASSWORD_LENGTH) {
126
+ throw new Error(`Financial vault password must be at least ${MIN_PASSWORD_LENGTH} characters`);
127
+ }
128
+ }
129
+ /** Store a financial credential */
130
+ export function financialVaultSet(password, key, value) {
131
+ validatePassword(password);
132
+ return serialized(async () => {
133
+ const data = await readVault(password);
134
+ data[key] = value;
135
+ await writeVault(password, data);
136
+ });
137
+ }
138
+ /** Retrieve a financial credential */
139
+ export function financialVaultGet(password, key) {
140
+ return serialized(async () => {
141
+ const data = await readVault(password);
142
+ return data[key] ?? null;
143
+ });
144
+ }
145
+ /** Delete a financial credential */
146
+ export function financialVaultDelete(password, key) {
147
+ return serialized(async () => {
148
+ const data = await readVault(password);
149
+ delete data[key];
150
+ await writeVault(password, data);
151
+ });
152
+ }
153
+ /** Check if the financial vault exists */
154
+ export function financialVaultExists() {
155
+ return existsSync(VAULT_PATH);
156
+ }
157
+ /** Verify password can decrypt the vault */
158
+ export function financialVaultUnlock(password) {
159
+ if (!existsSync(VAULT_PATH)) {
160
+ return Promise.resolve(true); // No vault yet = password is for creation
161
+ }
162
+ return serialized(async () => {
163
+ try {
164
+ await readVault(password);
165
+ return true;
166
+ }
167
+ catch {
168
+ return false;
169
+ }
170
+ });
171
+ }
172
+ /** List stored keys (requires password) */
173
+ export function financialVaultKeys(password) {
174
+ return serialized(async () => {
175
+ const data = await readVault(password);
176
+ return Object.keys(data);
177
+ });
178
+ }
179
+ /** Zero the in-memory cache — call on SIGTERM, vault timeout, or manual lock */
180
+ export function financialVaultLock() {
181
+ if (sessionCache) {
182
+ // Best-effort memory zeroing — V8 doesn't guarantee this but it's defense in depth
183
+ sessionCache.password = '\0'.repeat(sessionCache.password.length);
184
+ sessionCache = null;
185
+ }
186
+ // VG-004: Also invalidate TOTP session when vault is locked
187
+ try {
188
+ // Dynamic import to avoid circular dependency — totp.ts is a sibling module
189
+ import('./totp.js').then(m => m.totpSessionInvalidate()).catch(() => { });
190
+ }
191
+ catch { /* totp module may not be loaded */ }
192
+ }
193
+ /** Return the vault file path */
194
+ export function financialVaultPath() {
195
+ return VAULT_PATH;
196
+ }
197
+ /** Return the treasury directory path */
198
+ export function treasuryDir() {
199
+ return TREASURY_DIR;
200
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Minimal YAML frontmatter parser for PRD documents.
3
+ * Handles the simple key: value format used in PRD frontmatter blocks.
4
+ */
5
+ export interface PrdFrontmatter {
6
+ name?: string;
7
+ type?: string;
8
+ framework?: string;
9
+ database?: string;
10
+ cache?: string;
11
+ styling?: string;
12
+ auth?: string;
13
+ payments?: string;
14
+ workers?: string;
15
+ admin?: string;
16
+ marketing?: string;
17
+ email?: string;
18
+ deploy?: string;
19
+ instance_type?: string;
20
+ hostname?: string;
21
+ language?: string;
22
+ description?: string;
23
+ [key: string]: string | undefined;
24
+ }
25
+ export declare function parseFrontmatter(content: string): {
26
+ frontmatter: PrdFrontmatter;
27
+ body: string;
28
+ };
29
+ export declare function generateFrontmatterBlock(fm: PrdFrontmatter): string;
30
+ export declare function validateFrontmatter(fm: PrdFrontmatter): string[];