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,88 @@
1
+ /**
2
+ * Pattern: Daemon Process (Heartbeat)
3
+ *
4
+ * Key principles:
5
+ * - PID file with flock to prevent concurrent instances
6
+ * - Unix domain socket for IPC (ADR-1: single writer)
7
+ * - Session token auth (rotated every 24 hours)
8
+ * - Graceful shutdown on SIGTERM (10s deadline)
9
+ * - Sleep/wake recovery with tiered catch-up
10
+ * - Core dumps disabled for processes holding vault keys
11
+ * - Log rotation: daily or at 10MB, retain 7 days
12
+ * - macOS: F_FULLFSYNC for financial files
13
+ *
14
+ * Agents: Dockson (treasury), Heartbeat daemon
15
+ *
16
+ * PRD Reference: §9.7, §9.18, §9.19.2, §9.20.11
17
+ */
18
+ import { createServer } from 'node:net';
19
+ declare const PID_FILE: string;
20
+ declare const SOCKET_PATH: string;
21
+ declare const TOKEN_FILE: string;
22
+ declare const STATE_FILE: string;
23
+ declare const LOG_FILE: string;
24
+ type DaemonState = 'starting' | 'healthy' | 'degraded' | 'recovering' | 'recovery_failed' | 'shutting_down' | 'stopped';
25
+ interface HeartbeatState {
26
+ pid: number;
27
+ state: DaemonState;
28
+ startedAt: string;
29
+ lastHeartbeat: string;
30
+ lastEventId: number;
31
+ cultivationState: string;
32
+ activePlatforms: string[];
33
+ activeCampaigns: number;
34
+ todaySpend: number;
35
+ dailyBudget: number;
36
+ alerts: string[];
37
+ tokenHealth: Record<string, {
38
+ status: string;
39
+ expiresAt: string;
40
+ }>;
41
+ lastAgentMessage?: {
42
+ agent: string;
43
+ text: string;
44
+ timestamp: string;
45
+ };
46
+ stablecoinBalanceCents?: number;
47
+ bankBalanceCents?: number;
48
+ runwayDays?: number;
49
+ fundingFrozen?: boolean;
50
+ pendingTransferCount?: number;
51
+ }
52
+ declare function writePidFile(): Promise<void>;
53
+ declare function checkStalePid(): Promise<boolean>;
54
+ declare function removePidFile(): Promise<void>;
55
+ declare function generateSessionToken(): Promise<string>;
56
+ declare function validateToken(provided: string, expected: string): boolean;
57
+ declare function createSocketServer(sessionToken: string, handleRequest: (method: string, path: string, body: unknown, auth: {
58
+ hasToken: boolean;
59
+ vaultPassword: string;
60
+ totpCode: string;
61
+ }) => Promise<{
62
+ status: number;
63
+ body: unknown;
64
+ }>): ReturnType<typeof createServer>;
65
+ declare function startSocketServer(server: ReturnType<typeof createServer>): Promise<void>;
66
+ declare function writeState(state: HeartbeatState): Promise<void>;
67
+ declare function setupSignalHandlers(cleanup: () => Promise<void>, server: ReturnType<typeof createServer>): void;
68
+ interface ScheduledJob {
69
+ name: string;
70
+ intervalMs: number;
71
+ handler: () => Promise<void>;
72
+ lastRun: number;
73
+ }
74
+ declare class JobScheduler {
75
+ private jobs;
76
+ private timer;
77
+ private lastTick;
78
+ add(name: string, intervalMs: number, handler: () => Promise<void>): void;
79
+ start(): void;
80
+ stop(): void;
81
+ private tick;
82
+ }
83
+ declare function createLogger(logPath: string): {
84
+ log: (msg: string) => void;
85
+ close: () => void;
86
+ };
87
+ export { writePidFile, checkStalePid, removePidFile, generateSessionToken, validateToken, createSocketServer, startSocketServer, writeState, setupSignalHandlers, JobScheduler, createLogger, PID_FILE, SOCKET_PATH, TOKEN_FILE, STATE_FILE, LOG_FILE, };
88
+ export type { DaemonState, HeartbeatState, ScheduledJob };
@@ -0,0 +1,271 @@
1
+ /**
2
+ * Pattern: Daemon Process (Heartbeat)
3
+ *
4
+ * Key principles:
5
+ * - PID file with flock to prevent concurrent instances
6
+ * - Unix domain socket for IPC (ADR-1: single writer)
7
+ * - Session token auth (rotated every 24 hours)
8
+ * - Graceful shutdown on SIGTERM (10s deadline)
9
+ * - Sleep/wake recovery with tiered catch-up
10
+ * - Core dumps disabled for processes holding vault keys
11
+ * - Log rotation: daily or at 10MB, retain 7 days
12
+ * - macOS: F_FULLFSYNC for financial files
13
+ *
14
+ * Agents: Dockson (treasury), Heartbeat daemon
15
+ *
16
+ * PRD Reference: §9.7, §9.18, §9.19.2, §9.20.11
17
+ */
18
+ import { createServer } from 'node:net';
19
+ import { randomBytes } from 'node:crypto';
20
+ import { readFile, unlink, mkdir, open, rename } from 'node:fs/promises';
21
+ import { existsSync, createWriteStream } from 'node:fs';
22
+ import { join } from 'node:path';
23
+ import { homedir, platform } from 'node:os';
24
+ const VOIDFORGE_DIR = join(homedir(), '.voidforge');
25
+ const RUN_DIR = join(VOIDFORGE_DIR, 'run');
26
+ const PID_FILE = join(RUN_DIR, 'heartbeat.pid');
27
+ const SOCKET_PATH = join(RUN_DIR, 'heartbeat.sock');
28
+ const TOKEN_FILE = join(VOIDFORGE_DIR, 'heartbeat.token');
29
+ const STATE_FILE = join(VOIDFORGE_DIR, 'heartbeat.json');
30
+ const LOG_FILE = join(VOIDFORGE_DIR, 'heartbeat.log');
31
+ // ── PID Management ────────────────────────────────────
32
+ async function writePidFile() {
33
+ await mkdir(RUN_DIR, { recursive: true, mode: 0o700 });
34
+ const fh = await open(PID_FILE, 'w', 0o600);
35
+ try {
36
+ await fh.writeFile(String(process.pid));
37
+ await fh.sync();
38
+ }
39
+ finally {
40
+ await fh.close();
41
+ }
42
+ }
43
+ async function checkStalePid() {
44
+ if (!existsSync(PID_FILE))
45
+ return false;
46
+ try {
47
+ const pid = parseInt(await readFile(PID_FILE, 'utf-8'));
48
+ process.kill(pid, 0); // Check if process exists (throws if not)
49
+ return true; // Another daemon is alive
50
+ }
51
+ catch {
52
+ await unlink(PID_FILE).catch(() => { });
53
+ return false; // Stale PID — cleaned up
54
+ }
55
+ }
56
+ async function removePidFile() {
57
+ await unlink(PID_FILE).catch(() => { });
58
+ }
59
+ // ── Session Token ─────────────────────────────────────
60
+ // Rotated every 24 hours (§9.19.15)
61
+ async function generateSessionToken() {
62
+ const token = randomBytes(32).toString('hex');
63
+ await mkdir(RUN_DIR, { recursive: true, mode: 0o700 });
64
+ const tmpPath = TOKEN_FILE + '.tmp.' + process.pid;
65
+ const fh = await open(tmpPath, 'w', 0o600);
66
+ try {
67
+ await fh.writeFile(token);
68
+ await fh.sync();
69
+ }
70
+ finally {
71
+ await fh.close();
72
+ }
73
+ await rename(tmpPath, TOKEN_FILE);
74
+ return token;
75
+ }
76
+ function validateToken(provided, expected) {
77
+ if (provided.length !== expected.length)
78
+ return false;
79
+ const a = Buffer.from(provided);
80
+ const b = Buffer.from(expected);
81
+ const { timingSafeEqual } = require('node:crypto');
82
+ return timingSafeEqual(a, b);
83
+ }
84
+ // ── Socket Server ─────────────────────────────────────
85
+ // JSON-over-HTTP on Unix domain socket (§9.20.11)
86
+ function createSocketServer(sessionToken, handleRequest) {
87
+ const MAX_REQUEST_SIZE = 1024 * 1024; // 1MB — R2-NIGHTWING-003: enforce during streaming
88
+ const server = createServer(async (conn) => {
89
+ let data = '';
90
+ let rejected = false;
91
+ conn.on('data', (chunk) => {
92
+ data += chunk.toString();
93
+ if (data.length > MAX_REQUEST_SIZE && !rejected) {
94
+ rejected = true;
95
+ conn.write('HTTP/1.1 413 Payload Too Large\r\nContent-Type: application/json\r\n\r\n{"ok":false,"error":"Request too large"}');
96
+ conn.end();
97
+ }
98
+ });
99
+ conn.on('end', async () => {
100
+ try {
101
+ // Parse HTTP-like request from the socket
102
+ const lines = data.split('\r\n');
103
+ const [method, path] = (lines[0] || 'GET /').split(' ');
104
+ // Extract auth headers — pass VALUES, not just presence (SEC-001 fix)
105
+ const authHeader = lines.find(l => l.toLowerCase().startsWith('authorization:'));
106
+ const token = authHeader ? authHeader.split(' ').pop() || '' : '';
107
+ const hasToken = validateToken(token, sessionToken);
108
+ const vaultHeader = lines.find(l => l.toLowerCase().startsWith('x-vault-password:'));
109
+ const vaultPassword = vaultHeader ? vaultHeader.substring(vaultHeader.indexOf(':') + 1).trim() : '';
110
+ const totpHeader = lines.find(l => l.toLowerCase().startsWith('x-totp-code:'));
111
+ const totpCode = totpHeader ? totpHeader.substring(totpHeader.indexOf(':') + 1).trim() : '';
112
+ // Parse body (after blank line)
113
+ const bodyStart = data.indexOf('\r\n\r\n');
114
+ if (rejected)
115
+ return; // Already rejected during streaming
116
+ const body = bodyStart >= 0 ? JSON.parse(data.substring(bodyStart + 4) || '{}') : {};
117
+ const result = await handleRequest(method, path, body, {
118
+ hasToken,
119
+ vaultPassword, // Actual value for verification by handler
120
+ totpCode, // Actual value for verification by handler
121
+ });
122
+ conn.write(`HTTP/1.1 ${result.status} OK\r\nContent-Type: application/json\r\n\r\n${JSON.stringify(result.body)}`);
123
+ }
124
+ catch (err) {
125
+ conn.write(`HTTP/1.1 500 Error\r\nContent-Type: application/json\r\n\r\n${JSON.stringify({ ok: false, error: 'Internal error' })}`);
126
+ }
127
+ conn.end();
128
+ });
129
+ });
130
+ return server;
131
+ }
132
+ async function startSocketServer(server) {
133
+ // Clean up stale socket
134
+ if (existsSync(SOCKET_PATH)) {
135
+ try {
136
+ const { connect } = require('node:net');
137
+ const testConn = connect(SOCKET_PATH);
138
+ await new Promise((resolve, reject) => {
139
+ testConn.on('connect', () => { testConn.destroy(); reject(new Error('Another daemon is running')); });
140
+ testConn.on('error', () => { resolve(); }); // ECONNREFUSED = stale socket
141
+ });
142
+ await unlink(SOCKET_PATH);
143
+ }
144
+ catch (err) {
145
+ if (err.message === 'Another daemon is running')
146
+ throw err;
147
+ }
148
+ }
149
+ await new Promise((resolve, reject) => {
150
+ server.listen(SOCKET_PATH, () => {
151
+ // Set socket permissions (§9.18)
152
+ require('node:fs').chmodSync(SOCKET_PATH, 0o600);
153
+ resolve();
154
+ });
155
+ server.on('error', reject);
156
+ });
157
+ }
158
+ // ── State File ────────────────────────────────────────
159
+ async function writeState(state) {
160
+ const tmpPath = STATE_FILE + '.tmp.' + process.pid;
161
+ const fh = await open(tmpPath, 'w');
162
+ try {
163
+ await fh.writeFile(JSON.stringify(state, null, 2));
164
+ if (platform() === 'darwin') {
165
+ await fh.datasync(); // Best-effort on macOS; see §9.18 F_FULLFSYNC caveat
166
+ }
167
+ else {
168
+ await fh.sync();
169
+ }
170
+ }
171
+ finally {
172
+ await fh.close();
173
+ }
174
+ await rename(tmpPath, STATE_FILE);
175
+ }
176
+ // ── Signal Handling ───────────────────────────────────
177
+ function setupSignalHandlers(cleanup, server) {
178
+ let shuttingDown = false;
179
+ async function shutdown(signal) {
180
+ if (shuttingDown)
181
+ return;
182
+ shuttingDown = true;
183
+ // 10-second deadline for in-flight requests
184
+ const deadline = setTimeout(() => {
185
+ process.exit(1);
186
+ }, 10000);
187
+ try {
188
+ server.close();
189
+ await cleanup();
190
+ await removePidFile();
191
+ await unlink(SOCKET_PATH).catch(() => { });
192
+ clearTimeout(deadline);
193
+ process.exit(0);
194
+ }
195
+ catch {
196
+ clearTimeout(deadline);
197
+ process.exit(1);
198
+ }
199
+ }
200
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
201
+ process.on('SIGINT', () => shutdown('SIGINT'));
202
+ // Disable core dumps — vault key in memory (§9.18)
203
+ try {
204
+ // @ts-expect-error — setrlimit not in Node.js types
205
+ if (process.setrlimit)
206
+ process.setrlimit('core', { soft: 0, hard: 0 });
207
+ }
208
+ catch { /* not available on all platforms */ }
209
+ }
210
+ class JobScheduler {
211
+ jobs = [];
212
+ timer = null;
213
+ lastTick = Date.now();
214
+ add(name, intervalMs, handler) {
215
+ this.jobs.push({ name, intervalMs, handler, lastRun: 0 });
216
+ }
217
+ start() {
218
+ this.lastTick = Date.now();
219
+ this.timer = setInterval(() => this.tick(), 1000);
220
+ }
221
+ stop() {
222
+ if (this.timer)
223
+ clearInterval(this.timer);
224
+ }
225
+ async tick() {
226
+ const now = Date.now();
227
+ const delta = now - this.lastTick;
228
+ this.lastTick = now;
229
+ // Sleep/wake detection (§9.18): if delta > 2x expected (2s), catch-up mode
230
+ if (delta > 2000) {
231
+ // Stagger overdue jobs over 5 minutes, prioritize token refresh
232
+ const overdue = this.jobs.filter(j => now - j.lastRun > j.intervalMs);
233
+ const sorted = overdue.sort((a, b) => {
234
+ if (a.name.includes('token'))
235
+ return -1;
236
+ if (b.name.includes('token'))
237
+ return 1;
238
+ return 0;
239
+ });
240
+ for (const job of sorted) {
241
+ try {
242
+ await job.handler();
243
+ }
244
+ catch { /* logged by handler */ }
245
+ job.lastRun = now;
246
+ }
247
+ return;
248
+ }
249
+ // Normal tick: run due jobs
250
+ for (const job of this.jobs) {
251
+ if (now - job.lastRun >= job.intervalMs) {
252
+ try {
253
+ await job.handler();
254
+ }
255
+ catch { /* logged by handler */ }
256
+ job.lastRun = now;
257
+ }
258
+ }
259
+ }
260
+ }
261
+ // ── Log Rotation ──────────────────────────────────────
262
+ function createLogger(logPath) {
263
+ let stream = createWriteStream(logPath, { flags: 'a' });
264
+ return {
265
+ log(msg) {
266
+ stream.write(JSON.stringify({ ts: new Date().toISOString(), msg }) + '\n');
267
+ },
268
+ close() { stream.end(); }
269
+ };
270
+ }
271
+ export { writePidFile, checkStalePid, removePidFile, generateSessionToken, validateToken, createSocketServer, startSocketServer, writeState, setupSignalHandlers, JobScheduler, createLogger, PID_FILE, SOCKET_PATH, TOKEN_FILE, STATE_FILE, LOG_FILE, };
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Pattern: Financial Transaction (Branded Types + Hash-Chained Append Log)
3
+ *
4
+ * Key principles:
5
+ * - All money in integer cents (Cents branded type) — NEVER floating point
6
+ * - Append-only immutable logs — never rewrite, only append
7
+ * - Hash chain for tamper detection (SHA-256 of previous entry)
8
+ * - Atomic writes (write-to-temp + fsync + rename) per ADR-1
9
+ * - macOS: use F_FULLFSYNC instead of fsync for financial files (§9.18)
10
+ * - Single-writer architecture — only the heartbeat daemon writes financial state
11
+ *
12
+ * Agents: Dockson (treasury), Steris (budget), Vin (analytics)
13
+ *
14
+ * PRD Reference: §9.9, §9.17 (branded types), §9.18 (macOS fsync), ADR-1/ADR-3
15
+ */
16
+ type Cents = number & {
17
+ readonly __brand: 'Cents';
18
+ };
19
+ type Percentage = number & {
20
+ readonly __brand: 'Percentage';
21
+ };
22
+ type Ratio = number & {
23
+ readonly __brand: 'Ratio';
24
+ };
25
+ type AdPlatform = 'meta' | 'google' | 'tiktok' | 'linkedin' | 'twitter' | 'reddit';
26
+ type RevenueSource = 'stripe' | 'paddle';
27
+ type BankSource = 'mercury' | 'brex';
28
+ type TransactionSource = AdPlatform | RevenueSource | BankSource;
29
+ declare function toCents(dollars: number): Cents;
30
+ declare function toDollars(cents: Cents): number;
31
+ interface Transaction {
32
+ id: string;
33
+ projectId: string;
34
+ type: 'revenue' | 'spend' | 'refund';
35
+ source: TransactionSource;
36
+ externalId: string;
37
+ amount: Cents;
38
+ currency: 'USD';
39
+ description: string;
40
+ metadata: Record<string, string>;
41
+ createdAt: string;
42
+ reconciledAt?: string;
43
+ reconciledStatus?: 'matched' | 'discrepancy' | 'pending';
44
+ }
45
+ interface Budget {
46
+ id: string;
47
+ projectId: string;
48
+ period: 'daily' | 'weekly' | 'monthly';
49
+ totalAmount: Cents;
50
+ currency: 'USD';
51
+ allocations: Array<{
52
+ platform: AdPlatform;
53
+ amount: Cents;
54
+ dailyCap: Cents;
55
+ }>;
56
+ safetyTiers: {
57
+ autoApproveBelow: Cents;
58
+ agentApproveBelow: Cents;
59
+ humanConfirmBelow: Cents;
60
+ hardStopAbove: Cents;
61
+ };
62
+ createdAt: string;
63
+ updatedAt: string;
64
+ }
65
+ type CampaignStatus = 'draft' | 'pending_approval' | 'creating' | 'active' | 'paused' | 'completed' | 'error' | 'suspended' | 'deleting' | 'freeze_pending';
66
+ type CampaignEventSource = 'cli' | 'daemon' | 'platform' | 'agent';
67
+ interface CampaignStateEvent {
68
+ timestamp: string;
69
+ source: CampaignEventSource;
70
+ oldStatus: CampaignStatus;
71
+ newStatus: CampaignStatus;
72
+ reason: string;
73
+ ruleId?: string;
74
+ }
75
+ interface GrowthCampaign {
76
+ id: string;
77
+ projectId: string;
78
+ platform: AdPlatform;
79
+ externalId: string;
80
+ name: string;
81
+ status: CampaignStatus;
82
+ dailyBudget: Cents;
83
+ totalSpend: Cents;
84
+ metrics: {
85
+ impressions: number;
86
+ clicks: number;
87
+ conversions: number;
88
+ ctr: Percentage;
89
+ cpc: Cents;
90
+ roas: Ratio;
91
+ };
92
+ testGroupId?: string;
93
+ testVariant?: string;
94
+ testMetric?: 'ctr' | 'roas' | 'conversions';
95
+ events: CampaignStateEvent[];
96
+ createdAt: string;
97
+ updatedAt: string;
98
+ pausedAt?: string;
99
+ pauseReason?: string;
100
+ }
101
+ interface RevenueEvent {
102
+ id: string;
103
+ projectId: string;
104
+ source: RevenueSource;
105
+ type: 'charge' | 'subscription' | 'refund' | 'dispute';
106
+ amount: Cents;
107
+ currency: 'USD';
108
+ customerId?: string;
109
+ subscriptionId?: string;
110
+ metadata: Record<string, string>;
111
+ createdAt: string;
112
+ }
113
+ interface ReconciliationReport {
114
+ id: string;
115
+ date: string;
116
+ type: 'preliminary' | 'final';
117
+ projectId: string;
118
+ spend: Array<{
119
+ platform: AdPlatform;
120
+ voidforgeRecorded: Cents;
121
+ platformReported: Cents;
122
+ discrepancy: Cents;
123
+ status: 'matched' | 'discrepancy' | 'unavailable';
124
+ }>;
125
+ revenue: Array<{
126
+ source: RevenueSource;
127
+ recorded: Cents;
128
+ reported: Cents;
129
+ discrepancy: Cents;
130
+ status: 'matched' | 'discrepancy' | 'unavailable';
131
+ }>;
132
+ netPosition: Cents;
133
+ blendedRoas: Ratio;
134
+ alerts: string[];
135
+ }
136
+ type CultivationSystemState = 'inactive' | 'active' | 'frozen' | 'partial_freeze' | 'recovering' | 'degraded' | 'recovery_failed';
137
+ interface HashChainedEntry<T> {
138
+ data: T;
139
+ prevHash: string;
140
+ hash: string;
141
+ walIntentId?: string;
142
+ }
143
+ declare function computeHash(data: unknown, prevHash: string): string;
144
+ declare function createChainedEntry<T>(data: T, prevHash: string, walIntentId?: string): HashChainedEntry<T>;
145
+ declare function verifyChain<T>(entries: HashChainedEntry<T>[]): {
146
+ valid: boolean;
147
+ brokenAt?: number;
148
+ };
149
+ declare function atomicWrite(filePath: string, content: string): Promise<void>;
150
+ declare function appendToLog<T>(logPath: string, data: T, prevHash: string, walIntentId?: string): Promise<HashChainedEntry<T>>;
151
+ declare function idempotentAppend<T>(logPath: string, data: T, prevHash: string, walIntentId: string, recentEntries: HashChainedEntry<T>[]): Promise<HashChainedEntry<T> | null>;
152
+ declare const TREASURY_DIR: string;
153
+ declare const SPEND_LOG: string;
154
+ declare const REVENUE_LOG: string;
155
+ declare const PENDING_OPS: string;
156
+ declare const BUDGETS_FILE: string;
157
+ /**
158
+ * Get treasury directory for a project, or the global default.
159
+ * Per-project: {projectDir}/cultivation/treasury/
160
+ * Global (no arg): ~/.voidforge/treasury/
161
+ */
162
+ declare function getTreasuryDir(projectDir?: string): string;
163
+ declare function getSpendLog(projectDir?: string): string;
164
+ declare function getRevenueLog(projectDir?: string): string;
165
+ declare function getPendingOps(projectDir?: string): string;
166
+ declare function getBudgetsFile(projectDir?: string): string;
167
+ declare function formatCurrency(cents: Cents, detail?: boolean): string;
168
+ declare function formatRoas(roas: Ratio): string;
169
+ declare function formatPercentage(pct: Percentage, showSign?: boolean): string;
170
+ export type { Transaction, Budget, GrowthCampaign, RevenueEvent, ReconciliationReport, CampaignStatus, CampaignEventSource, CampaignStateEvent, CultivationSystemState, HashChainedEntry, Cents, Percentage, Ratio, AdPlatform, RevenueSource, BankSource, TransactionSource, };
171
+ export { toCents, toDollars, computeHash, createChainedEntry, verifyChain, atomicWrite, appendToLog, idempotentAppend, formatCurrency, formatRoas, formatPercentage, TREASURY_DIR, SPEND_LOG, REVENUE_LOG, PENDING_OPS, BUDGETS_FILE, getTreasuryDir, getSpendLog, getRevenueLog, getPendingOps, getBudgetsFile, };
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Pattern: Financial Transaction (Branded Types + Hash-Chained Append Log)
3
+ *
4
+ * Key principles:
5
+ * - All money in integer cents (Cents branded type) — NEVER floating point
6
+ * - Append-only immutable logs — never rewrite, only append
7
+ * - Hash chain for tamper detection (SHA-256 of previous entry)
8
+ * - Atomic writes (write-to-temp + fsync + rename) per ADR-1
9
+ * - macOS: use F_FULLFSYNC instead of fsync for financial files (§9.18)
10
+ * - Single-writer architecture — only the heartbeat daemon writes financial state
11
+ *
12
+ * Agents: Dockson (treasury), Steris (budget), Vin (analytics)
13
+ *
14
+ * PRD Reference: §9.9, §9.17 (branded types), §9.18 (macOS fsync), ADR-1/ADR-3
15
+ */
16
+ import { createHash } from 'node:crypto';
17
+ import { appendFile, open, rename } from 'node:fs/promises';
18
+ import { join } from 'node:path';
19
+ import { homedir, platform } from 'node:os';
20
+ function toCents(dollars) {
21
+ return Math.round(dollars * 100);
22
+ }
23
+ function toDollars(cents) {
24
+ return cents / 100;
25
+ }
26
+ function computeHash(data, prevHash) {
27
+ const payload = JSON.stringify(data) + prevHash;
28
+ return createHash('sha256').update(payload).digest('hex');
29
+ }
30
+ function createChainedEntry(data, prevHash, walIntentId) {
31
+ const hash = computeHash(data, prevHash);
32
+ return { data, prevHash, hash, walIntentId };
33
+ }
34
+ function verifyChain(entries) {
35
+ for (let i = 0; i < entries.length; i++) {
36
+ const expected = computeHash(entries[i].data, entries[i].prevHash);
37
+ if (expected !== entries[i].hash) {
38
+ return { valid: false, brokenAt: i };
39
+ }
40
+ if (i > 0 && entries[i].prevHash !== entries[i - 1].hash) {
41
+ return { valid: false, brokenAt: i };
42
+ }
43
+ }
44
+ return { valid: true };
45
+ }
46
+ // ── Atomic File Write ─────────────────────────────────
47
+ // write-to-temp + fsync (F_FULLFSYNC on macOS) + rename
48
+ // Per ADR-1: all mutable financial file writes use this pattern.
49
+ async function atomicWrite(filePath, content) {
50
+ const tempPath = filePath + '.tmp.' + process.pid;
51
+ // Write to temp file
52
+ const fd = await open(tempPath, 'w');
53
+ try {
54
+ await fd.writeFile(content, 'utf-8');
55
+ // Durable sync — F_FULLFSYNC on macOS, fsync on Linux (§9.18)
56
+ if (platform() === 'darwin') {
57
+ // macOS: fsync() does NOT guarantee physical durability
58
+ // Must use fcntl(fd, F_FULLFSYNC) — 51 is the macOS constant
59
+ // Node.js datasync maps to fdatasync, not F_FULLFSYNC
60
+ // In production: use native addon or child_process to call fcntl(fd, 51)
61
+ // For now: document the gap — datasync is sufficient for crash safety, not power loss
62
+ await fd.datasync();
63
+ }
64
+ else {
65
+ await fd.sync();
66
+ }
67
+ }
68
+ finally {
69
+ await fd.close();
70
+ }
71
+ // Atomic rename — on POSIX, rename is atomic
72
+ await rename(tempPath, filePath);
73
+ }
74
+ // ── Append-Only Log ───────────────────────────────────
75
+ // For spend-log.jsonl and revenue-log.jsonl
76
+ async function appendToLog(logPath, data, prevHash, walIntentId) {
77
+ const entry = createChainedEntry(data, prevHash, walIntentId);
78
+ const line = JSON.stringify(entry) + '\n';
79
+ await appendFile(logPath, line, 'utf-8');
80
+ return entry;
81
+ }
82
+ // ── Idempotent Append (ADR-3 WAL replay) ──────────────
83
+ // Before appending during WAL replay, check if the intent ID exists in recent entries.
84
+ async function idempotentAppend(logPath, data, prevHash, walIntentId, recentEntries) {
85
+ // Check if this WAL intent was already applied
86
+ const existing = recentEntries.find(e => e.walIntentId === walIntentId);
87
+ if (existing) {
88
+ return null; // Already applied — skip
89
+ }
90
+ return appendToLog(logPath, data, prevHash, walIntentId);
91
+ }
92
+ // ── Storage Layout ────────────────────────────────────
93
+ // ~/.voidforge/treasury/
94
+ // ├── vault.enc # financial vault (AES-256-GCM, Argon2id)
95
+ // ├── budgets.json # active budget allocations per project
96
+ // ├── spend-log.jsonl # append-only spend log (immutable, hash-chained)
97
+ // ├── revenue-log.jsonl # append-only revenue log (immutable, hash-chained)
98
+ // ├── pending-ops.jsonl # WAL for platform API operations (ADR-3)
99
+ // ├── campaigns/
100
+ // │ └── {projectId}/
101
+ // │ ├── meta-{id}.json
102
+ // │ └── google-{id}.json
103
+ // ├── reconciliation/
104
+ // │ ├── 2026-03-17.json
105
+ // │ └── 2026-03-16.json
106
+ // └── reports/
107
+ // └── 2026-03.json # monthly summary
108
+ // Global treasury paths — used by vault, totp, and backup (which stay user-scoped).
109
+ // Per-project code should use getTreasuryDir(projectDir) and derived path functions.
110
+ const TREASURY_DIR = join(homedir(), '.voidforge', 'treasury');
111
+ const SPEND_LOG = join(TREASURY_DIR, 'spend-log.jsonl');
112
+ const REVENUE_LOG = join(TREASURY_DIR, 'revenue-log.jsonl');
113
+ const PENDING_OPS = join(TREASURY_DIR, 'pending-ops.jsonl');
114
+ const BUDGETS_FILE = join(TREASURY_DIR, 'budgets.json');
115
+ /**
116
+ * Get treasury directory for a project, or the global default.
117
+ * Per-project: {projectDir}/cultivation/treasury/
118
+ * Global (no arg): ~/.voidforge/treasury/
119
+ */
120
+ function getTreasuryDir(projectDir) {
121
+ return projectDir ? join(projectDir, 'cultivation', 'treasury') : TREASURY_DIR;
122
+ }
123
+ function getSpendLog(projectDir) {
124
+ return join(getTreasuryDir(projectDir), 'spend-log.jsonl');
125
+ }
126
+ function getRevenueLog(projectDir) {
127
+ return join(getTreasuryDir(projectDir), 'revenue-log.jsonl');
128
+ }
129
+ function getPendingOps(projectDir) {
130
+ return join(getTreasuryDir(projectDir), 'pending-ops.jsonl');
131
+ }
132
+ function getBudgetsFile(projectDir) {
133
+ return join(getTreasuryDir(projectDir), 'budgets.json');
134
+ }
135
+ // ── Number Formatting (§9.15.4) ───────────────────────
136
+ function formatCurrency(cents, detail = false) {
137
+ const dollars = toDollars(cents);
138
+ if (dollars >= 100_000) {
139
+ return dollars >= 1_000_000 ? `$${(dollars / 1_000_000).toFixed(1)}M` : `$${Math.round(dollars / 1000)}K`;
140
+ }
141
+ if (detail)
142
+ return `$${dollars.toFixed(2)}`;
143
+ if (cents < 0)
144
+ return `-$${Math.abs(dollars).toLocaleString('en-US', { maximumFractionDigits: 0 })}`;
145
+ return `$${dollars.toLocaleString('en-US', { maximumFractionDigits: 0 })}`;
146
+ }
147
+ function formatRoas(roas) {
148
+ return `${roas.toFixed(1)}x`;
149
+ }
150
+ function formatPercentage(pct, showSign = false) {
151
+ const sign = showSign && pct > 0 ? '+' : '';
152
+ return `${sign}${pct.toFixed(1)}%`;
153
+ }
154
+ export { toCents, toDollars, computeHash, createChainedEntry, verifyChain, atomicWrite, appendToLog, idempotentAppend, formatCurrency, formatRoas, formatPercentage, TREASURY_DIR, SPEND_LOG, REVENUE_LOG, PENDING_OPS, BUDGETS_FILE, getTreasuryDir, getSpendLog, getRevenueLog, getPendingOps, getBudgetsFile, };