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.
- package/dist/.claude/agents/adolin-brand.md +40 -0
- package/dist/.claude/agents/ahsoka-access-control.md +56 -0
- package/dist/.claude/agents/alfred-dependencies.md +43 -0
- package/dist/.claude/agents/alia-threat-detect.md +40 -0
- package/dist/.claude/agents/anakin-dark-side.md +41 -0
- package/dist/.claude/agents/aquaman-deep-dive.md +43 -0
- package/dist/.claude/agents/aragorn-orchestration.md +39 -0
- package/dist/.claude/agents/archer-greenfield.md +48 -0
- package/dist/.claude/agents/armin-clever.md +39 -0
- package/dist/.claude/agents/arwen-ui-polish.md +42 -0
- package/dist/.claude/agents/ashitaka-tech-debt.md +39 -0
- package/dist/.claude/agents/asuka-performance.md +39 -0
- package/dist/.claude/agents/bail-organa-governance.md +37 -0
- package/dist/.claude/agents/banner-database.md +44 -0
- package/dist/.claude/agents/barton-smoke-test.md +59 -0
- package/dist/.claude/agents/bashir-field-medic.md +63 -0
- package/dist/.claude/agents/batgirl-detail.md +43 -0
- package/dist/.claude/agents/batman-qa.md +73 -0
- package/dist/.claude/agents/bayta-evals.md +41 -0
- package/dist/.claude/agents/beast-boy-cross-env.md +43 -0
- package/dist/.claude/agents/beerus-destroyer.md +39 -0
- package/dist/.claude/agents/bel-riose-orchestration.md +40 -0
- package/dist/.claude/agents/beru-subprocess.md +37 -0
- package/dist/.claude/agents/bilbo-microcopy.md +43 -0
- package/dist/.claude/agents/black-canary-monitoring.md +43 -0
- package/dist/.claude/agents/bliss-ai-safety.md +40 -0
- package/dist/.claude/agents/bo-katan-perimeter.md +40 -0
- package/dist/.claude/agents/bombadil-forge-sync.md +62 -0
- package/dist/.claude/agents/boromir-hubris.md +40 -0
- package/dist/.claude/agents/breeze-platform-relations.md +40 -0
- package/dist/.claude/agents/bucky-legacy.md +43 -0
- package/dist/.claude/agents/bulma-engineering.md +40 -0
- package/dist/.claude/agents/calcifer-daemon.md +39 -0
- package/dist/.claude/agents/cara-dune-enforcement.md +37 -0
- package/dist/.claude/agents/cassian-recon.md +37 -0
- package/dist/.claude/agents/cc-persistent-process.md +39 -0
- package/dist/.claude/agents/celeborn-design-system.md +40 -0
- package/dist/.claude/agents/celebrimbor-forge-artist.md +62 -0
- package/dist/.claude/agents/chakotay-bridge.md +47 -0
- package/dist/.claude/agents/chani-worm-rider.md +61 -0
- package/dist/.claude/agents/chewie-dependency-audit.md +41 -0
- package/dist/.claude/agents/chrome-discovery.md +37 -0
- package/dist/.claude/agents/constantine-cursed-code.md +59 -0
- package/dist/.claude/agents/coulson-release.md +64 -0
- package/dist/.claude/agents/crusher-diagnostics.md +48 -0
- package/dist/.claude/agents/cyborg-system-integration.md +43 -0
- package/dist/.claude/agents/dalinar-positioning.md +40 -0
- package/dist/.claude/agents/daneel-model-migration.md +40 -0
- package/dist/.claude/agents/data-tech-debt.md +48 -0
- package/dist/.claude/agents/dax-legacy-wisdom.md +48 -0
- package/dist/.claude/agents/deathstroke-adversarial.md +59 -0
- package/dist/.claude/agents/denji-determination.md +39 -0
- package/dist/.claude/agents/din-djarin-bounty.md +42 -0
- package/dist/.claude/agents/dockson-treasury.md +67 -0
- package/dist/.claude/agents/dori-integration-check.md +37 -0
- package/dist/.claude/agents/dors-observability.md +40 -0
- package/dist/.claude/agents/drax-exact-match.md +42 -0
- package/dist/.claude/agents/ducem-token-economics.md +41 -0
- package/dist/.claude/agents/duncan-relay.md +40 -0
- package/dist/.claude/agents/duo-teardown.md +38 -0
- package/dist/.claude/agents/ed-network-scan.md +38 -0
- package/dist/.claude/agents/elrond-ux-strategy.md +39 -0
- package/dist/.claude/agents/eowyn-delight.md +56 -0
- package/dist/.claude/agents/erwin-strategy.md +39 -0
- package/dist/.claude/agents/ezra-catches-missed.md +40 -0
- package/dist/.claude/agents/ezri-session-analyst.md +45 -0
- package/dist/.claude/agents/falcon-migration.md +43 -0
- package/dist/.claude/agents/faramir-judgment.md +40 -0
- package/dist/.claude/agents/faye-resourceful.md +39 -0
- package/dist/.claude/agents/fenring-passive-monitor.md +37 -0
- package/dist/.claude/agents/fern-protocol.md +37 -0
- package/dist/.claude/agents/feyd-adversarial.md +41 -0
- package/dist/.claude/agents/flash-rapid-test.md +43 -0
- package/dist/.claude/agents/friday-automation.md +42 -0
- package/dist/.claude/agents/frieren-long-term.md +39 -0
- package/dist/.claude/agents/frodo-critical-path.md +40 -0
- package/dist/.claude/agents/fury-initiative.md +65 -0
- package/dist/.claude/agents/gaal-prompt-arch.md +41 -0
- package/dist/.claude/agents/galadriel-frontend.md +69 -0
- package/dist/.claude/agents/gamora-perf-assassin.md +43 -0
- package/dist/.claude/agents/gandalf-setup-wizard.md +63 -0
- package/dist/.claude/agents/gen-docs.md +37 -0
- package/dist/.claude/agents/ghanima-paired-monitor.md +37 -0
- package/dist/.claude/agents/gimli-performance.md +41 -0
- package/dist/.claude/agents/giyu-silent-guard.md +39 -0
- package/dist/.claude/agents/glorfindel-rendering.md +40 -0
- package/dist/.claude/agents/gohan-hidden-power.md +39 -0
- package/dist/.claude/agents/gojo-infinite-scale.md +39 -0
- package/dist/.claude/agents/goku-scaling.md +39 -0
- package/dist/.claude/agents/goldberry-change-detect.md +37 -0
- package/dist/.claude/agents/gordon-escalation.md +42 -0
- package/dist/.claude/agents/green-arrow-precision.md +43 -0
- package/dist/.claude/agents/green-lantern-scenarios.md +43 -0
- package/dist/.claude/agents/grogu-tiny-vulns.md +38 -0
- package/dist/.claude/agents/groot-caching.md +43 -0
- package/dist/.claude/agents/gurney-delivery.md +40 -0
- package/dist/.claude/agents/haku-deploy-wizard.md +65 -0
- package/dist/.claude/agents/haldir-boundaries.md +40 -0
- package/dist/.claude/agents/han-vuln-hunter.md +40 -0
- package/dist/.claude/agents/hange-experimentation.md +39 -0
- package/dist/.claude/agents/harah-protocol.md +38 -0
- package/dist/.claude/agents/hawkgirl-regression-sweep.md +43 -0
- package/dist/.claude/agents/heero-mission-deploy.md +39 -0
- package/dist/.claude/agents/hera-navigation.md +41 -0
- package/dist/.claude/agents/hill-mission-control.md +43 -0
- package/dist/.claude/agents/himmel-legacy.md +37 -0
- package/dist/.claude/agents/hober-tool-schema.md +40 -0
- package/dist/.claude/agents/hoid-copywriting.md +40 -0
- package/dist/.claude/agents/howl-migration.md +39 -0
- package/dist/.claude/agents/hughes-observability.md +37 -0
- package/dist/.claude/agents/huntress-flaky-bugs.md +42 -0
- package/dist/.claude/agents/irulan-historian.md +37 -0
- package/dist/.claude/agents/jake-reporter.md +45 -0
- package/dist/.claude/agents/janeway-novel-arch.md +48 -0
- package/dist/.claude/agents/janov-context-eng.md +40 -0
- package/dist/.claude/agents/jarvis-status.md +42 -0
- package/dist/.claude/agents/jean-pragmatic.md +39 -0
- package/dist/.claude/agents/jessica-voice.md +40 -0
- package/dist/.claude/agents/jet-maintenance.md +39 -0
- package/dist/.claude/agents/jin-disciplined-adv.md +39 -0
- package/dist/.claude/agents/kaji-intelligence.md +39 -0
- package/dist/.claude/agents/kaladin-organic-growth.md +40 -0
- package/dist/.claude/agents/kallen-hard-deploy.md +39 -0
- package/dist/.claude/agents/kanan-intuitive.md +41 -0
- package/dist/.claude/agents/kaoru-harmony.md +37 -0
- package/dist/.claude/agents/kaworu-solver.md +39 -0
- package/dist/.claude/agents/kelsier-growth.md +64 -0
- package/dist/.claude/agents/kenobi-security.md +70 -0
- package/dist/.claude/agents/kim-api-design.md +49 -0
- package/dist/.claude/agents/kira-pragmatic.md +48 -0
- package/dist/.claude/agents/kishibe-hardening.md +39 -0
- package/dist/.claude/agents/kohaku-rapid-response.md +36 -0
- package/dist/.claude/agents/krillin-support.md +36 -0
- package/dist/.claude/agents/kusanagi-devops.md +70 -0
- package/dist/.claude/agents/la-forge-reliability.md +63 -0
- package/dist/.claude/agents/lang-micro-changes.md +43 -0
- package/dist/.claude/agents/legolas-precision.md +42 -0
- package/dist/.claude/agents/leia-secrets.md +41 -0
- package/dist/.claude/agents/lelouch-orchestration.md +39 -0
- package/dist/.claude/agents/leto-ii-persistence.md +40 -0
- package/dist/.claude/agents/leto-protection.md +40 -0
- package/dist/.claude/agents/levi-deploy.md +40 -0
- package/dist/.claude/agents/liet-kynes-deep-system.md +40 -0
- package/dist/.claude/agents/lift-social-media.md +40 -0
- package/dist/.claude/agents/loki-chaos.md +58 -0
- package/dist/.claude/agents/lucius-config.md +43 -0
- package/dist/.claude/agents/luke-audit-journey.md +41 -0
- package/dist/.claude/agents/manhunter-shapeshifting.md +43 -0
- package/dist/.claude/agents/marsh-competitive-intel.md +41 -0
- package/dist/.claude/agents/maul-red-team.md +57 -0
- package/dist/.claude/agents/merry-pair-review.md +40 -0
- package/dist/.claude/agents/mikasa-protection.md +39 -0
- package/dist/.claude/agents/miles-teg-perf.md +40 -0
- package/dist/.claude/agents/milim-load-test.md +39 -0
- package/dist/.claude/agents/misato-operations.md +39 -0
- package/dist/.claude/agents/mob-capacity.md +39 -0
- package/dist/.claude/agents/mohiam-authentication.md +40 -0
- package/dist/.claude/agents/mon-mothma-security-mgmt.md +41 -0
- package/dist/.claude/agents/mugen-chaos.md +39 -0
- package/dist/.claude/agents/mule-adversarial-ai.md +41 -0
- package/dist/.claude/agents/mustang-cleanup.md +39 -0
- package/dist/.claude/agents/nanami-structured-ops.md +39 -0
- package/dist/.claude/agents/nausicaa-resources.md +39 -0
- package/dist/.claude/agents/navani-technical-seo.md +40 -0
- package/dist/.claude/agents/nebula-optimization.md +43 -0
- package/dist/.claude/agents/nightwing-regression.md +59 -0
- package/dist/.claude/agents/nobara-direct-fix.md +39 -0
- package/dist/.claude/agents/nog-solutions.md +48 -0
- package/dist/.claude/agents/nori-asset-scanner.md +37 -0
- package/dist/.claude/agents/obrien-root-cause.md +48 -0
- package/dist/.claude/agents/odo-structural-anomaly.md +48 -0
- package/dist/.claude/agents/okoye-data-integrity.md +43 -0
- package/dist/.claude/agents/olivier-hardening.md +39 -0
- package/dist/.claude/agents/oracle-static-analysis.md +59 -0
- package/dist/.claude/agents/ori-prompt-crafter.md +37 -0
- package/dist/.claude/agents/padme-data-protection.md +42 -0
- package/dist/.claude/agents/paris-route-planner.md +47 -0
- package/dist/.claude/agents/parker-connections.md +43 -0
- package/dist/.claude/agents/paul-orchestration.md +40 -0
- package/dist/.claude/agents/picard-architecture.md +64 -0
- package/dist/.claude/agents/piccolo-tactics.md +39 -0
- package/dist/.claude/agents/pike-bold-decisions.md +48 -0
- package/dist/.claude/agents/pippin-discovery.md +40 -0
- package/dist/.claude/agents/plo-koon-edge-cases.md +37 -0
- package/dist/.claude/agents/power-chaotic.md +39 -0
- package/dist/.claude/agents/qui-gon-subtle-vulns.md +40 -0
- package/dist/.claude/agents/radagast-edge-cases.md +41 -0
- package/dist/.claude/agents/raoden-conversion.md +41 -0
- package/dist/.claude/agents/raven-deep-analysis.md +43 -0
- package/dist/.claude/agents/red-hood-aggressive.md +47 -0
- package/dist/.claude/agents/rei-dangerous-tasks.md +39 -0
- package/dist/.claude/agents/reigen-debugger.md +39 -0
- package/dist/.claude/agents/rengoku-intense-monitor.md +39 -0
- package/dist/.claude/agents/rex-infrastructure.md +41 -0
- package/dist/.claude/agents/rhodes-production.md +43 -0
- package/dist/.claude/agents/riker-review.md +62 -0
- package/dist/.claude/agents/rimuru-adapter.md +39 -0
- package/dist/.claude/agents/riza-backup.md +39 -0
- package/dist/.claude/agents/robin-apprentice.md +42 -0
- package/dist/.claude/agents/rocket-scrappy.md +43 -0
- package/dist/.claude/agents/rogers-api-design.md +43 -0
- package/dist/.claude/agents/romanoff-integrations.md +44 -0
- package/dist/.claude/agents/sabine-unconventional.md +40 -0
- package/dist/.claude/agents/salvor-model-selection.md +42 -0
- package/dist/.claude/agents/samwise-accessibility.md +43 -0
- package/dist/.claude/agents/sarene-outreach.md +40 -0
- package/dist/.claude/agents/sasha-resources.md +37 -0
- package/dist/.claude/agents/scotty-infrastructure.md +48 -0
- package/dist/.claude/agents/seldon-ai.md +67 -0
- package/dist/.claude/agents/senku-provisioning.md +40 -0
- package/dist/.claude/agents/sentaro-scheduling.md +37 -0
- package/dist/.claude/agents/seven-optimization.md +48 -0
- package/dist/.claude/agents/shallan-creative.md +40 -0
- package/dist/.claude/agents/sheeana-transport.md +40 -0
- package/dist/.claude/agents/shuri-innovation.md +43 -0
- package/dist/.claude/agents/silver-surfer-herald.md +90 -0
- package/dist/.claude/agents/siona-evasion.md +41 -0
- package/dist/.claude/agents/sisko-campaign.md +68 -0
- package/dist/.claude/agents/spike-routing.md +40 -0
- package/dist/.claude/agents/spock-schema.md +62 -0
- package/dist/.claude/agents/starfire-brute-force.md +43 -0
- package/dist/.claude/agents/stark-backend.md +71 -0
- package/dist/.claude/agents/steris-budget.md +41 -0
- package/dist/.claude/agents/stilgar-channel-security.md +40 -0
- package/dist/.claude/agents/strange-service-arch.md +44 -0
- package/dist/.claude/agents/sung-workers.md +39 -0
- package/dist/.claude/agents/superman-strength-test.md +43 -0
- package/dist/.claude/agents/suzaku-execution.md +39 -0
- package/dist/.claude/agents/szeth-compliance.md +40 -0
- package/dist/.claude/agents/tanjiro-persistent.md +39 -0
- package/dist/.claude/agents/tchalla-quality.md +43 -0
- package/dist/.claude/agents/thanos-gauntlet.md +68 -0
- package/dist/.claude/agents/theoden-rally.md +40 -0
- package/dist/.claude/agents/thor-queues.md +44 -0
- package/dist/.claude/agents/thufir-protocol-parsing.md +40 -0
- package/dist/.claude/agents/todo-brute-force.md +39 -0
- package/dist/.claude/agents/torres-site-scanner.md +47 -0
- package/dist/.claude/agents/totoro-guardian.md +39 -0
- package/dist/.claude/agents/tpol-disciplined.md +48 -0
- package/dist/.claude/agents/treebeard-deliberation.md +41 -0
- package/dist/.claude/agents/troi-prd-compliance.md +64 -0
- package/dist/.claude/agents/trunks-rollback.md +39 -0
- package/dist/.claude/agents/tuvok-deep-current.md +63 -0
- package/dist/.claude/agents/uhura-integration.md +47 -0
- package/dist/.claude/agents/valkyrie-recovery.md +43 -0
- package/dist/.claude/agents/vegeta-monitoring.md +39 -0
- package/dist/.claude/agents/veldora-dormant.md +37 -0
- package/dist/.claude/agents/vin-analytics.md +41 -0
- package/dist/.claude/agents/vision-data-analysis.md +43 -0
- package/dist/.claude/agents/wanda-seldon-validation.md +38 -0
- package/dist/.claude/agents/wanda-state.md +43 -0
- package/dist/.claude/agents/wax-paid-ads.md +40 -0
- package/dist/.claude/agents/wayne-ab-testing.md +40 -0
- package/dist/.claude/agents/whis-precision.md +39 -0
- package/dist/.claude/agents/windu-input-validation.md +41 -0
- package/dist/.claude/agents/winry-maintenance.md +39 -0
- package/dist/.claude/agents/wonder-woman-truth.md +43 -0
- package/dist/.claude/agents/wong-documentation.md +58 -0
- package/dist/.claude/agents/worf-security-arch.md +49 -0
- package/dist/.claude/agents/yoda-auth.md +57 -0
- package/dist/.claude/agents/yueh-trust-verify.md +40 -0
- package/dist/.claude/agents/zatanna-impossible.md +43 -0
- package/dist/.claude/agents/zechs-rival.md +39 -0
- package/dist/.claude/agents/zenitsu-alerts.md +37 -0
- package/dist/.claude/commands/ai.md +84 -0
- package/dist/.claude/commands/architect.md +107 -0
- package/dist/.claude/commands/assemble.md +223 -0
- package/dist/.claude/commands/assess.md +86 -0
- package/dist/.claude/commands/blueprint.md +135 -0
- package/dist/.claude/commands/build.md +138 -0
- package/dist/.claude/commands/campaign.md +224 -0
- package/dist/.claude/commands/cultivation.md +184 -0
- package/dist/.claude/commands/current.md +128 -0
- package/dist/.claude/commands/dangerroom.md +74 -0
- package/dist/.claude/commands/debrief.md +180 -0
- package/dist/.claude/commands/deploy.md +108 -0
- package/dist/.claude/commands/devops.md +160 -0
- package/dist/.claude/commands/engage.md +135 -0
- package/dist/.claude/commands/gauntlet.md +179 -0
- package/dist/.claude/commands/git.md +104 -0
- package/dist/.claude/commands/grow.md +160 -0
- package/dist/.claude/commands/imagine.md +126 -0
- package/dist/.claude/commands/portfolio.md +51 -0
- package/dist/.claude/commands/prd.md +113 -0
- package/dist/.claude/commands/qa.md +130 -0
- package/dist/.claude/commands/review.md +9 -0
- package/dist/.claude/commands/security.md +9 -0
- package/dist/.claude/commands/sentinel.md +90 -0
- package/dist/.claude/commands/test.md +114 -0
- package/dist/.claude/commands/thumper.md +116 -0
- package/dist/.claude/commands/treasury.md +117 -0
- package/dist/.claude/commands/ux.md +132 -0
- package/dist/.claude/commands/vault.md +198 -0
- package/dist/.claude/commands/void.md +148 -0
- package/dist/CHANGELOG.md +2621 -0
- package/dist/CLAUDE.md +292 -0
- package/dist/HOLOCRON.md +859 -0
- package/dist/VERSION.md +149 -0
- package/dist/docs/NAMING_REGISTRY.md +479 -0
- package/dist/docs/methods/AI_INTELLIGENCE.md +276 -0
- package/dist/docs/methods/ASSEMBLER.md +142 -0
- package/dist/docs/methods/BACKEND_ENGINEER.md +165 -0
- package/dist/docs/methods/BUILD_JOURNAL.md +214 -0
- package/dist/docs/methods/BUILD_PROTOCOL.md +436 -0
- package/dist/docs/methods/CAMPAIGN.md +569 -0
- package/dist/docs/methods/CONTEXT_MANAGEMENT.md +189 -0
- package/dist/docs/methods/DEEP_CURRENT.md +184 -0
- package/dist/docs/methods/DEVOPS_ENGINEER.md +297 -0
- package/dist/docs/methods/FIELD_MEDIC.md +265 -0
- package/dist/docs/methods/FORGE_ARTIST.md +108 -0
- package/dist/docs/methods/FORGE_KEEPER.md +270 -0
- package/dist/docs/methods/GAUNTLET.md +364 -0
- package/dist/docs/methods/GROWTH_STRATEGIST.md +466 -0
- package/dist/docs/methods/HEARTBEAT.md +168 -0
- package/dist/docs/methods/MCP_INTEGRATION.md +139 -0
- package/dist/docs/methods/MUSTER.md +152 -0
- package/dist/docs/methods/PRD_GENERATOR.md +186 -0
- package/dist/docs/methods/PRODUCT_DESIGN_FRONTEND.md +252 -0
- package/dist/docs/methods/QA_ENGINEER.md +360 -0
- package/dist/docs/methods/RELEASE_MANAGER.md +145 -0
- package/dist/docs/methods/SECURITY_AUDITOR.md +328 -0
- package/dist/docs/methods/SUB_AGENTS.md +375 -0
- package/dist/docs/methods/SYSTEMS_ARCHITECT.md +180 -0
- package/dist/docs/methods/TESTING.md +359 -0
- package/dist/docs/methods/THUMPER.md +175 -0
- package/dist/docs/methods/TIME_VAULT.md +120 -0
- package/dist/docs/methods/TREASURY.md +184 -0
- package/dist/docs/methods/TROUBLESHOOTING.md +265 -0
- package/dist/docs/patterns/README.md +52 -0
- package/dist/docs/patterns/ad-billing-adapter.ts +537 -0
- package/dist/docs/patterns/ad-platform-adapter.ts +421 -0
- package/dist/docs/patterns/ai-classifier.ts +195 -0
- package/dist/docs/patterns/ai-eval.ts +272 -0
- package/dist/docs/patterns/ai-orchestrator.ts +341 -0
- package/dist/docs/patterns/ai-router.ts +194 -0
- package/dist/docs/patterns/ai-tool-schema.ts +237 -0
- package/dist/docs/patterns/api-route.ts +241 -0
- package/dist/docs/patterns/backtest-engine.ts +499 -0
- package/dist/docs/patterns/browser-review.ts +292 -0
- package/dist/docs/patterns/combobox.tsx +300 -0
- package/dist/docs/patterns/component.tsx +262 -0
- package/dist/docs/patterns/daemon-process.ts +338 -0
- package/dist/docs/patterns/data-pipeline.ts +297 -0
- package/dist/docs/patterns/database-migration.ts +466 -0
- package/dist/docs/patterns/e2e-test.ts +629 -0
- package/dist/docs/patterns/error-handling.ts +312 -0
- package/dist/docs/patterns/execution-safety.ts +601 -0
- package/dist/docs/patterns/financial-transaction.ts +366 -0
- package/dist/docs/patterns/funding-plan.ts +462 -0
- package/dist/docs/patterns/game-entity.ts +137 -0
- package/dist/docs/patterns/game-loop.ts +113 -0
- package/dist/docs/patterns/game-state.ts +143 -0
- package/dist/docs/patterns/job-queue.ts +225 -0
- package/dist/docs/patterns/kongo-integration.ts +164 -0
- package/dist/docs/patterns/middleware.ts +363 -0
- package/dist/docs/patterns/mobile-screen.tsx +139 -0
- package/dist/docs/patterns/mobile-service.ts +167 -0
- package/dist/docs/patterns/multi-tenant.ts +382 -0
- package/dist/docs/patterns/oauth-token-lifecycle.ts +223 -0
- package/dist/docs/patterns/outbound-rate-limiter.ts +260 -0
- package/dist/docs/patterns/prompt-template.ts +195 -0
- package/dist/docs/patterns/revenue-source-adapter.ts +311 -0
- package/dist/docs/patterns/service.ts +224 -0
- package/dist/docs/patterns/sse-endpoint.ts +118 -0
- package/dist/docs/patterns/stablecoin-adapter.ts +511 -0
- package/dist/docs/patterns/third-party-script.ts +68 -0
- package/dist/scripts/thumper/gom-jabbar.sh +241 -0
- package/dist/scripts/thumper/relay.sh +610 -0
- package/dist/scripts/thumper/scan.sh +359 -0
- package/dist/scripts/thumper/thumper.sh +190 -0
- package/dist/scripts/thumper/water-rings.sh +76 -0
- package/dist/scripts/vault-read.d.ts +11 -0
- package/dist/scripts/vault-read.js +89 -0
- package/dist/scripts/voidforge.d.ts +21 -0
- package/dist/scripts/voidforge.js +614 -0
- package/dist/wizard/api/auth.d.ts +5 -0
- package/dist/wizard/api/auth.js +139 -0
- package/dist/wizard/api/blueprint.d.ts +34 -0
- package/dist/wizard/api/blueprint.js +161 -0
- package/dist/wizard/api/cloud-providers.d.ts +16 -0
- package/dist/wizard/api/cloud-providers.js +363 -0
- package/dist/wizard/api/credentials.d.ts +1 -0
- package/dist/wizard/api/credentials.js +265 -0
- package/dist/wizard/api/danger-room.d.ts +24 -0
- package/dist/wizard/api/danger-room.js +274 -0
- package/dist/wizard/api/deploy.d.ts +4 -0
- package/dist/wizard/api/deploy.js +164 -0
- package/dist/wizard/api/prd.d.ts +1 -0
- package/dist/wizard/api/prd.js +363 -0
- package/dist/wizard/api/project.d.ts +1 -0
- package/dist/wizard/api/project.js +241 -0
- package/dist/wizard/api/projects-data.d.ts +5 -0
- package/dist/wizard/api/projects-data.js +234 -0
- package/dist/wizard/api/projects-list.d.ts +5 -0
- package/dist/wizard/api/projects-list.js +227 -0
- package/dist/wizard/api/projects.d.ts +7 -0
- package/dist/wizard/api/projects.js +273 -0
- package/dist/wizard/api/provision-status.d.ts +5 -0
- package/dist/wizard/api/provision-status.js +47 -0
- package/dist/wizard/api/provision-steps.d.ts +21 -0
- package/dist/wizard/api/provision-steps.js +44 -0
- package/dist/wizard/api/provision-validate.d.ts +22 -0
- package/dist/wizard/api/provision-validate.js +164 -0
- package/dist/wizard/api/provision.d.ts +2 -0
- package/dist/wizard/api/provision.js +239 -0
- package/dist/wizard/api/terminal.d.ts +25 -0
- package/dist/wizard/api/terminal.js +246 -0
- package/dist/wizard/api/users.d.ts +6 -0
- package/dist/wizard/api/users.js +244 -0
- package/dist/wizard/api/war-room.d.ts +16 -0
- package/dist/wizard/api/war-room.js +70 -0
- package/dist/wizard/danger-room.config.json +5 -0
- package/dist/wizard/lib/ad-platform-core.d.ts +6 -0
- package/dist/wizard/lib/ad-platform-core.js +1 -0
- package/dist/wizard/lib/adapters/index.d.ts +52 -0
- package/dist/wizard/lib/adapters/index.js +38 -0
- package/dist/wizard/lib/adapters/sandbox-bank.d.ts +17 -0
- package/dist/wizard/lib/adapters/sandbox-bank.js +77 -0
- package/dist/wizard/lib/adapters/sandbox.d.ts +39 -0
- package/dist/wizard/lib/adapters/sandbox.js +174 -0
- package/dist/wizard/lib/adapters/stripe.d.ts +19 -0
- package/dist/wizard/lib/adapters/stripe.js +143 -0
- package/dist/wizard/lib/adapters/types.d.ts +9 -0
- package/dist/wizard/lib/adapters/types.js +10 -0
- package/dist/wizard/lib/agent-memory.d.ts +36 -0
- package/dist/wizard/lib/agent-memory.js +114 -0
- package/dist/wizard/lib/agent-registry.d.ts +21 -0
- package/dist/wizard/lib/agent-registry.js +105 -0
- package/dist/wizard/lib/anomaly-detection.d.ts +59 -0
- package/dist/wizard/lib/anomaly-detection.js +122 -0
- package/dist/wizard/lib/anthropic.d.ts +21 -0
- package/dist/wizard/lib/anthropic.js +105 -0
- package/dist/wizard/lib/asset-scanner.d.ts +23 -0
- package/dist/wizard/lib/asset-scanner.js +107 -0
- package/dist/wizard/lib/audit-log.d.ts +23 -0
- package/dist/wizard/lib/audit-log.js +70 -0
- package/dist/wizard/lib/autonomy-controller.d.ts +76 -0
- package/dist/wizard/lib/autonomy-controller.js +184 -0
- package/dist/wizard/lib/body-parser.d.ts +2 -0
- package/dist/wizard/lib/body-parser.js +36 -0
- package/dist/wizard/lib/build-analytics.d.ts +39 -0
- package/dist/wizard/lib/build-analytics.js +91 -0
- package/dist/wizard/lib/build-step.d.ts +21 -0
- package/dist/wizard/lib/build-step.js +104 -0
- package/dist/wizard/lib/campaign-proposer.d.ts +39 -0
- package/dist/wizard/lib/campaign-proposer.js +181 -0
- package/dist/wizard/lib/campaign-state-machine.d.ts +63 -0
- package/dist/wizard/lib/campaign-state-machine.js +114 -0
- package/dist/wizard/lib/ci-generator.d.ts +14 -0
- package/dist/wizard/lib/ci-generator.js +187 -0
- package/dist/wizard/lib/claude-merge.d.ts +38 -0
- package/dist/wizard/lib/claude-merge.js +115 -0
- package/dist/wizard/lib/codegen/erd-gen.d.ts +16 -0
- package/dist/wizard/lib/codegen/erd-gen.js +98 -0
- package/dist/wizard/lib/codegen/integrations.d.ts +18 -0
- package/dist/wizard/lib/codegen/integrations.js +189 -0
- package/dist/wizard/lib/codegen/openapi-gen.d.ts +15 -0
- package/dist/wizard/lib/codegen/openapi-gen.js +79 -0
- package/dist/wizard/lib/codegen/prisma-types.d.ts +15 -0
- package/dist/wizard/lib/codegen/prisma-types.js +44 -0
- package/dist/wizard/lib/codegen/seed-gen.d.ts +16 -0
- package/dist/wizard/lib/codegen/seed-gen.js +128 -0
- package/dist/wizard/lib/compliance.d.ts +51 -0
- package/dist/wizard/lib/compliance.js +112 -0
- package/dist/wizard/lib/correlation-engine.d.ts +59 -0
- package/dist/wizard/lib/correlation-engine.js +152 -0
- package/dist/wizard/lib/cost-estimator.d.ts +22 -0
- package/dist/wizard/lib/cost-estimator.js +72 -0
- package/dist/wizard/lib/cost-tracker.d.ts +27 -0
- package/dist/wizard/lib/cost-tracker.js +37 -0
- package/dist/wizard/lib/daemon-aggregator.d.ts +76 -0
- package/dist/wizard/lib/daemon-aggregator.js +241 -0
- package/dist/wizard/lib/daemon-core.d.ts +16 -0
- package/dist/wizard/lib/daemon-core.js +39 -0
- package/dist/wizard/lib/dashboard-data.d.ts +123 -0
- package/dist/wizard/lib/dashboard-data.js +314 -0
- package/dist/wizard/lib/dashboard-ws.d.ts +28 -0
- package/dist/wizard/lib/dashboard-ws.js +117 -0
- package/dist/wizard/lib/deep-current.d.ts +77 -0
- package/dist/wizard/lib/deep-current.js +247 -0
- package/dist/wizard/lib/deploy-coordinator.d.ts +40 -0
- package/dist/wizard/lib/deploy-coordinator.js +86 -0
- package/dist/wizard/lib/deploy-log.d.ts +28 -0
- package/dist/wizard/lib/deploy-log.js +52 -0
- package/dist/wizard/lib/desktop-notify.d.ts +27 -0
- package/dist/wizard/lib/desktop-notify.js +98 -0
- package/dist/wizard/lib/dns/cloudflare-dns.d.ts +35 -0
- package/dist/wizard/lib/dns/cloudflare-dns.js +216 -0
- package/dist/wizard/lib/dns/cloudflare-registrar.d.ts +31 -0
- package/dist/wizard/lib/dns/cloudflare-registrar.js +148 -0
- package/dist/wizard/lib/dns/types.d.ts +22 -0
- package/dist/wizard/lib/dns/types.js +4 -0
- package/dist/wizard/lib/document-discovery.d.ts +33 -0
- package/dist/wizard/lib/document-discovery.js +145 -0
- package/dist/wizard/lib/env-validator.d.ts +14 -0
- package/dist/wizard/lib/env-validator.js +205 -0
- package/dist/wizard/lib/env-writer.d.ts +13 -0
- package/dist/wizard/lib/env-writer.js +26 -0
- package/dist/wizard/lib/exec.d.ts +30 -0
- package/dist/wizard/lib/exec.js +52 -0
- package/dist/wizard/lib/experiment.d.ts +70 -0
- package/dist/wizard/lib/experiment.js +169 -0
- package/dist/wizard/lib/extensions.d.ts +20 -0
- package/dist/wizard/lib/extensions.js +183 -0
- package/dist/wizard/lib/financial/adapter-factory.d.ts +47 -0
- package/dist/wizard/lib/financial/adapter-factory.js +225 -0
- package/dist/wizard/lib/financial/billing/base.d.ts +6 -0
- package/dist/wizard/lib/financial/billing/base.js +1 -0
- package/dist/wizard/lib/financial/billing/google-billing.d.ts +56 -0
- package/dist/wizard/lib/financial/billing/google-billing.js +298 -0
- package/dist/wizard/lib/financial/billing/meta-billing.d.ts +54 -0
- package/dist/wizard/lib/financial/billing/meta-billing.js +243 -0
- package/dist/wizard/lib/financial/billing/tiktok-billing.d.ts +54 -0
- package/dist/wizard/lib/financial/billing/tiktok-billing.js +260 -0
- package/dist/wizard/lib/financial/campaign/base.d.ts +13 -0
- package/dist/wizard/lib/financial/campaign/base.js +1 -0
- package/dist/wizard/lib/financial/campaign/campaign-common.d.ts +21 -0
- package/dist/wizard/lib/financial/campaign/campaign-common.js +58 -0
- package/dist/wizard/lib/financial/campaign/google-api.d.ts +35 -0
- package/dist/wizard/lib/financial/campaign/google-api.js +118 -0
- package/dist/wizard/lib/financial/campaign/google-campaign.d.ts +38 -0
- package/dist/wizard/lib/financial/campaign/google-campaign.js +186 -0
- package/dist/wizard/lib/financial/campaign/meta-api.d.ts +28 -0
- package/dist/wizard/lib/financial/campaign/meta-api.js +93 -0
- package/dist/wizard/lib/financial/campaign/meta-campaign.d.ts +32 -0
- package/dist/wizard/lib/financial/campaign/meta-campaign.js +189 -0
- package/dist/wizard/lib/financial/campaign/sandbox-campaign.d.ts +45 -0
- package/dist/wizard/lib/financial/campaign/sandbox-campaign.js +261 -0
- package/dist/wizard/lib/financial/campaign/tiktok-api.d.ts +25 -0
- package/dist/wizard/lib/financial/campaign/tiktok-api.js +81 -0
- package/dist/wizard/lib/financial/campaign/tiktok-campaign.d.ts +37 -0
- package/dist/wizard/lib/financial/campaign/tiktok-campaign.js +155 -0
- package/dist/wizard/lib/financial/funding-auto.d.ts +44 -0
- package/dist/wizard/lib/financial/funding-auto.js +52 -0
- package/dist/wizard/lib/financial/funding-policy.d.ts +60 -0
- package/dist/wizard/lib/financial/funding-policy.js +179 -0
- package/dist/wizard/lib/financial/platform-planner.d.ts +47 -0
- package/dist/wizard/lib/financial/platform-planner.js +134 -0
- package/dist/wizard/lib/financial/reconciliation-engine.d.ts +78 -0
- package/dist/wizard/lib/financial/reconciliation-engine.js +193 -0
- package/dist/wizard/lib/financial/registry.d.ts +22 -0
- package/dist/wizard/lib/financial/registry.js +26 -0
- package/dist/wizard/lib/financial/reporting.d.ts +96 -0
- package/dist/wizard/lib/financial/reporting.js +198 -0
- package/dist/wizard/lib/financial/stablecoin/base.d.ts +6 -0
- package/dist/wizard/lib/financial/stablecoin/base.js +1 -0
- package/dist/wizard/lib/financial/stablecoin/circle.d.ts +54 -0
- package/dist/wizard/lib/financial/stablecoin/circle.js +367 -0
- package/dist/wizard/lib/financial/stablecoin/mercury.d.ts +24 -0
- package/dist/wizard/lib/financial/stablecoin/mercury.js +171 -0
- package/dist/wizard/lib/financial/stablecoin/sandbox-stablecoin.d.ts +47 -0
- package/dist/wizard/lib/financial/stablecoin/sandbox-stablecoin.js +202 -0
- package/dist/wizard/lib/financial/treasury-planner.d.ts +52 -0
- package/dist/wizard/lib/financial/treasury-planner.js +128 -0
- package/dist/wizard/lib/financial-core.d.ts +6 -0
- package/dist/wizard/lib/financial-core.js +5 -0
- package/dist/wizard/lib/financial-vault.d.ts +34 -0
- package/dist/wizard/lib/financial-vault.js +200 -0
- package/dist/wizard/lib/frontmatter.d.ts +30 -0
- package/dist/wizard/lib/frontmatter.js +99 -0
- package/dist/wizard/lib/gap-analysis.d.ts +37 -0
- package/dist/wizard/lib/gap-analysis.js +218 -0
- package/dist/wizard/lib/github.d.ts +22 -0
- package/dist/wizard/lib/github.js +261 -0
- package/dist/wizard/lib/headless-deploy.d.ts +14 -0
- package/dist/wizard/lib/headless-deploy.js +452 -0
- package/dist/wizard/lib/health-monitor.d.ts +15 -0
- package/dist/wizard/lib/health-monitor.js +91 -0
- package/dist/wizard/lib/health-poller.d.ts +9 -0
- package/dist/wizard/lib/health-poller.js +123 -0
- package/dist/wizard/lib/heartbeat-lifecycle.d.ts +71 -0
- package/dist/wizard/lib/heartbeat-lifecycle.js +107 -0
- package/dist/wizard/lib/heartbeat-scheduler.d.ts +26 -0
- package/dist/wizard/lib/heartbeat-scheduler.js +155 -0
- package/dist/wizard/lib/heartbeat.d.ts +22 -0
- package/dist/wizard/lib/heartbeat.js +538 -0
- package/dist/wizard/lib/herald.d.ts +28 -0
- package/dist/wizard/lib/herald.js +167 -0
- package/dist/wizard/lib/http-helpers.d.ts +9 -0
- package/dist/wizard/lib/http-helpers.js +24 -0
- package/dist/wizard/lib/image-gen.d.ts +56 -0
- package/dist/wizard/lib/image-gen.js +159 -0
- package/dist/wizard/lib/instance-sizing.d.ts +26 -0
- package/dist/wizard/lib/instance-sizing.js +51 -0
- package/dist/wizard/lib/kongo/analytics.d.ts +29 -0
- package/dist/wizard/lib/kongo/analytics.js +179 -0
- package/dist/wizard/lib/kongo/campaigns.d.ts +52 -0
- package/dist/wizard/lib/kongo/campaigns.js +91 -0
- package/dist/wizard/lib/kongo/client.d.ts +58 -0
- package/dist/wizard/lib/kongo/client.js +221 -0
- package/dist/wizard/lib/kongo/jobs.d.ts +57 -0
- package/dist/wizard/lib/kongo/jobs.js +122 -0
- package/dist/wizard/lib/kongo/pages.d.ts +60 -0
- package/dist/wizard/lib/kongo/pages.js +150 -0
- package/dist/wizard/lib/kongo/provisioner.d.ts +64 -0
- package/dist/wizard/lib/kongo/provisioner.js +116 -0
- package/dist/wizard/lib/kongo/seed.d.ts +49 -0
- package/dist/wizard/lib/kongo/seed.js +237 -0
- package/dist/wizard/lib/kongo/types.d.ts +323 -0
- package/dist/wizard/lib/kongo/types.js +11 -0
- package/dist/wizard/lib/kongo/variants.d.ts +57 -0
- package/dist/wizard/lib/kongo/variants.js +88 -0
- package/dist/wizard/lib/kongo/webhooks.d.ts +41 -0
- package/dist/wizard/lib/kongo/webhooks.js +112 -0
- package/dist/wizard/lib/marker.d.ts +28 -0
- package/dist/wizard/lib/marker.js +79 -0
- package/dist/wizard/lib/migrator.d.ts +35 -0
- package/dist/wizard/lib/migrator.js +190 -0
- package/dist/wizard/lib/natural-language-deploy.d.ts +30 -0
- package/dist/wizard/lib/natural-language-deploy.js +186 -0
- package/dist/wizard/lib/network.d.ts +22 -0
- package/dist/wizard/lib/network.js +72 -0
- package/dist/wizard/lib/oauth-core.d.ts +6 -0
- package/dist/wizard/lib/oauth-core.js +5 -0
- package/dist/wizard/lib/open-browser.d.ts +1 -0
- package/dist/wizard/lib/open-browser.js +26 -0
- package/dist/wizard/lib/patterns/ad-billing-adapter.d.ts +209 -0
- package/dist/wizard/lib/patterns/ad-billing-adapter.js +269 -0
- package/dist/wizard/lib/patterns/ad-platform-adapter.d.ts +200 -0
- package/dist/wizard/lib/patterns/ad-platform-adapter.js +212 -0
- package/dist/wizard/lib/patterns/daemon-process.d.ts +88 -0
- package/dist/wizard/lib/patterns/daemon-process.js +271 -0
- package/dist/wizard/lib/patterns/financial-transaction.d.ts +171 -0
- package/dist/wizard/lib/patterns/financial-transaction.js +154 -0
- package/dist/wizard/lib/patterns/funding-plan.d.ts +136 -0
- package/dist/wizard/lib/patterns/funding-plan.js +200 -0
- package/dist/wizard/lib/patterns/oauth-token-lifecycle.d.ts +94 -0
- package/dist/wizard/lib/patterns/oauth-token-lifecycle.js +139 -0
- package/dist/wizard/lib/patterns/outbound-rate-limiter.d.ts +67 -0
- package/dist/wizard/lib/patterns/outbound-rate-limiter.js +216 -0
- package/dist/wizard/lib/patterns/revenue-source-adapter.d.ts +96 -0
- package/dist/wizard/lib/patterns/revenue-source-adapter.js +182 -0
- package/dist/wizard/lib/patterns/stablecoin-adapter.d.ts +218 -0
- package/dist/wizard/lib/patterns/stablecoin-adapter.js +264 -0
- package/dist/wizard/lib/prd-validator.d.ts +39 -0
- package/dist/wizard/lib/prd-validator.js +137 -0
- package/dist/wizard/lib/project-init.d.ts +24 -0
- package/dist/wizard/lib/project-init.js +228 -0
- package/dist/wizard/lib/project-registry.d.ts +86 -0
- package/dist/wizard/lib/project-registry.js +359 -0
- package/dist/wizard/lib/project-scope.d.ts +64 -0
- package/dist/wizard/lib/project-scope.js +96 -0
- package/dist/wizard/lib/project-vault.d.ts +47 -0
- package/dist/wizard/lib/project-vault.js +221 -0
- package/dist/wizard/lib/provision-manifest.d.ts +44 -0
- package/dist/wizard/lib/provision-manifest.js +164 -0
- package/dist/wizard/lib/provisioner-registry.d.ts +15 -0
- package/dist/wizard/lib/provisioner-registry.js +34 -0
- package/dist/wizard/lib/provisioners/aws-config.d.ts +36 -0
- package/dist/wizard/lib/provisioners/aws-config.js +56 -0
- package/dist/wizard/lib/provisioners/aws-ec2.d.ts +19 -0
- package/dist/wizard/lib/provisioners/aws-ec2.js +241 -0
- package/dist/wizard/lib/provisioners/aws-rds.d.ts +10 -0
- package/dist/wizard/lib/provisioners/aws-rds.js +199 -0
- package/dist/wizard/lib/provisioners/aws-vps.d.ts +6 -0
- package/dist/wizard/lib/provisioners/aws-vps.js +231 -0
- package/dist/wizard/lib/provisioners/cloudflare.d.ts +6 -0
- package/dist/wizard/lib/provisioners/cloudflare.js +300 -0
- package/dist/wizard/lib/provisioners/docker.d.ts +6 -0
- package/dist/wizard/lib/provisioners/docker.js +75 -0
- package/dist/wizard/lib/provisioners/http-client.d.ts +20 -0
- package/dist/wizard/lib/provisioners/http-client.js +79 -0
- package/dist/wizard/lib/provisioners/railway-config.d.ts +24 -0
- package/dist/wizard/lib/provisioners/railway-config.js +220 -0
- package/dist/wizard/lib/provisioners/railway-deploy.d.ts +19 -0
- package/dist/wizard/lib/provisioners/railway-deploy.js +205 -0
- package/dist/wizard/lib/provisioners/railway.d.ts +6 -0
- package/dist/wizard/lib/provisioners/railway.js +45 -0
- package/dist/wizard/lib/provisioners/scripts/caddyfile.d.ts +10 -0
- package/dist/wizard/lib/provisioners/scripts/caddyfile.js +54 -0
- package/dist/wizard/lib/provisioners/scripts/deploy-vps.d.ts +10 -0
- package/dist/wizard/lib/provisioners/scripts/deploy-vps.js +112 -0
- package/dist/wizard/lib/provisioners/scripts/docker-compose.d.ts +11 -0
- package/dist/wizard/lib/provisioners/scripts/docker-compose.js +91 -0
- package/dist/wizard/lib/provisioners/scripts/dockerfile.d.ts +5 -0
- package/dist/wizard/lib/provisioners/scripts/dockerfile.js +185 -0
- package/dist/wizard/lib/provisioners/scripts/ecosystem-config.d.ts +10 -0
- package/dist/wizard/lib/provisioners/scripts/ecosystem-config.js +36 -0
- package/dist/wizard/lib/provisioners/scripts/provision-vps.d.ts +14 -0
- package/dist/wizard/lib/provisioners/scripts/provision-vps.js +202 -0
- package/dist/wizard/lib/provisioners/scripts/rollback-vps.d.ts +10 -0
- package/dist/wizard/lib/provisioners/scripts/rollback-vps.js +67 -0
- package/dist/wizard/lib/provisioners/self-deploy.d.ts +41 -0
- package/dist/wizard/lib/provisioners/self-deploy.js +185 -0
- package/dist/wizard/lib/provisioners/static-s3.d.ts +6 -0
- package/dist/wizard/lib/provisioners/static-s3.js +235 -0
- package/dist/wizard/lib/provisioners/types.d.ts +40 -0
- package/dist/wizard/lib/provisioners/types.js +4 -0
- package/dist/wizard/lib/provisioners/vercel.d.ts +6 -0
- package/dist/wizard/lib/provisioners/vercel.js +287 -0
- package/dist/wizard/lib/pty-manager.d.ts +42 -0
- package/dist/wizard/lib/pty-manager.js +244 -0
- package/dist/wizard/lib/rate-limiter-core.d.ts +5 -0
- package/dist/wizard/lib/rate-limiter-core.js +5 -0
- package/dist/wizard/lib/reconciliation.d.ts +43 -0
- package/dist/wizard/lib/reconciliation.js +173 -0
- package/dist/wizard/lib/revenue-types.d.ts +5 -0
- package/dist/wizard/lib/revenue-types.js +1 -0
- package/dist/wizard/lib/route-optimizer.d.ts +28 -0
- package/dist/wizard/lib/route-optimizer.js +93 -0
- package/dist/wizard/lib/s3-deploy.d.ts +19 -0
- package/dist/wizard/lib/s3-deploy.js +156 -0
- package/dist/wizard/lib/safety-tiers.d.ts +76 -0
- package/dist/wizard/lib/safety-tiers.js +134 -0
- package/dist/wizard/lib/sentry-generator.d.ts +15 -0
- package/dist/wizard/lib/sentry-generator.js +116 -0
- package/dist/wizard/lib/server-config.d.ts +13 -0
- package/dist/wizard/lib/server-config.js +23 -0
- package/dist/wizard/lib/service-install.d.ts +18 -0
- package/dist/wizard/lib/service-install.js +182 -0
- package/dist/wizard/lib/site-scanner.d.ts +80 -0
- package/dist/wizard/lib/site-scanner.js +262 -0
- package/dist/wizard/lib/ssh-deploy.d.ts +25 -0
- package/dist/wizard/lib/ssh-deploy.js +225 -0
- package/dist/wizard/lib/templates.d.ts +24 -0
- package/dist/wizard/lib/templates.js +219 -0
- package/dist/wizard/lib/totp.d.ts +35 -0
- package/dist/wizard/lib/totp.js +277 -0
- package/dist/wizard/lib/tower-auth.d.ts +43 -0
- package/dist/wizard/lib/tower-auth.js +352 -0
- package/dist/wizard/lib/tower-rate-limit.d.ts +14 -0
- package/dist/wizard/lib/tower-rate-limit.js +61 -0
- package/dist/wizard/lib/tower-session.d.ts +28 -0
- package/dist/wizard/lib/tower-session.js +119 -0
- package/dist/wizard/lib/treasury-backup.d.ts +23 -0
- package/dist/wizard/lib/treasury-backup.js +127 -0
- package/dist/wizard/lib/treasury-circuit-breakers.d.ts +28 -0
- package/dist/wizard/lib/treasury-circuit-breakers.js +74 -0
- package/dist/wizard/lib/treasury-handlers.d.ts +21 -0
- package/dist/wizard/lib/treasury-handlers.js +281 -0
- package/dist/wizard/lib/treasury-heartbeat.d.ts +18 -0
- package/dist/wizard/lib/treasury-heartbeat.js +20 -0
- package/dist/wizard/lib/treasury-io.d.ts +107 -0
- package/dist/wizard/lib/treasury-io.js +254 -0
- package/dist/wizard/lib/treasury-jobs.d.ts +14 -0
- package/dist/wizard/lib/treasury-jobs.js +589 -0
- package/dist/wizard/lib/treasury-migrator.d.ts +59 -0
- package/dist/wizard/lib/treasury-migrator.js +227 -0
- package/dist/wizard/lib/treasury-reader.d.ts +52 -0
- package/dist/wizard/lib/treasury-reader.js +235 -0
- package/dist/wizard/lib/updater.d.ts +29 -0
- package/dist/wizard/lib/updater.js +203 -0
- package/dist/wizard/lib/user-manager.d.ts +39 -0
- package/dist/wizard/lib/user-manager.js +182 -0
- package/dist/wizard/lib/vault.d.ts +26 -0
- package/dist/wizard/lib/vault.js +161 -0
- package/dist/wizard/router.d.ts +12 -0
- package/dist/wizard/router.js +58 -0
- package/dist/wizard/server.d.ts +18 -0
- package/dist/wizard/server.js +427 -0
- package/dist/wizard/ui/app.js +1357 -0
- package/dist/wizard/ui/danger-room-prophecy.js +217 -0
- package/dist/wizard/ui/danger-room.html +27 -0
- package/dist/wizard/ui/danger-room.js +29 -0
- package/dist/wizard/ui/deploy.html +181 -0
- package/dist/wizard/ui/deploy.js +616 -0
- package/dist/wizard/ui/favicon.svg +11 -0
- package/dist/wizard/ui/index.html +407 -0
- package/dist/wizard/ui/lobby.html +235 -0
- package/dist/wizard/ui/lobby.js +843 -0
- package/dist/wizard/ui/login.html +111 -0
- package/dist/wizard/ui/login.js +199 -0
- package/dist/wizard/ui/project.html +285 -0
- package/dist/wizard/ui/project.js +324 -0
- package/dist/wizard/ui/rollback.js +107 -0
- package/dist/wizard/ui/styles.css +1040 -0
- package/dist/wizard/ui/tower.html +177 -0
- package/dist/wizard/ui/tower.js +445 -0
- package/dist/wizard/ui/war-room-prophecy.js +217 -0
- package/dist/wizard/ui/war-room.html +27 -0
- package/dist/wizard/ui/war-room.js +29 -0
- package/package.json +60 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern: Stablecoin Treasury Adapter (Split Interface)
|
|
3
|
+
*
|
|
4
|
+
* Key principles:
|
|
5
|
+
* - Split interface: StablecoinSetup (interactive CLI/Danger Room) + StablecoinAdapter (daemon runtime)
|
|
6
|
+
* - Single-writer constraint: only Heartbeat daemon calls the runtime adapter
|
|
7
|
+
* - Funding lifecycle: USDC held at provider → off-ramp instruction → fiat settlement at linked bank
|
|
8
|
+
* - All amounts in branded integer cents (Cents type from financial-transaction.ts)
|
|
9
|
+
* - Hash-chained TransferRecord for tamper-evident audit trail
|
|
10
|
+
* - Idempotency keys on all write operations (off-ramp, cancel)
|
|
11
|
+
* - Provider abstraction: Circle first-class, Bridge secondary, manual fallback
|
|
12
|
+
* - The adapter does NOT move money between bank and ad platform — that is ad-billing-adapter.ts
|
|
13
|
+
*
|
|
14
|
+
* Agents: Dockson (treasury), Heartbeat daemon
|
|
15
|
+
*
|
|
16
|
+
* PRD Reference: §11.1A, §12.1, §12.4, §12.5
|
|
17
|
+
*
|
|
18
|
+
* Circle API reference (v1):
|
|
19
|
+
* Auth: Bearer token via API key — header `Authorization: Bearer {apiKey}`
|
|
20
|
+
* Base URL: https://api.circle.com/v1
|
|
21
|
+
* GET /wallets → list wallets
|
|
22
|
+
* GET /wallets/{id}/balances → wallet balances (amount, currency, chain)
|
|
23
|
+
* GET /configuration → supported chains and assets
|
|
24
|
+
* GET /banks/wires → linked bank accounts
|
|
25
|
+
* POST /payouts → initiate wire payout (off-ramp)
|
|
26
|
+
* GET /payouts/{id} → transfer status
|
|
27
|
+
* GET /payouts?destination={bankId} → list completed payouts for reconciliation
|
|
28
|
+
*
|
|
29
|
+
* Response shape (balance):
|
|
30
|
+
* { data: { available: [{ amount: "1000.00", currency: "USD" }] } }
|
|
31
|
+
* Response shape (payout):
|
|
32
|
+
* { data: { id, status, amount: { amount, currency }, destination, createDate, updateDate } }
|
|
33
|
+
* Payout statuses: pending → processing → complete | failed
|
|
34
|
+
*
|
|
35
|
+
* Bridge API reference:
|
|
36
|
+
* Auth: API key header `Api-Key: {apiKey}`
|
|
37
|
+
* Base URL: https://api.bridge.xyz/v0
|
|
38
|
+
* POST /customers/{id}/liquidation_addresses → create liquidation address
|
|
39
|
+
* GET /customers/{id}/liquidation_addresses → list addresses
|
|
40
|
+
* GET /liquidation_addresses/{id} → transfer status
|
|
41
|
+
* Transfers settle via ACH to linked bank — status polling required
|
|
42
|
+
*/
|
|
43
|
+
type Cents = number & {
|
|
44
|
+
readonly __brand: 'Cents';
|
|
45
|
+
};
|
|
46
|
+
declare function toCents(dollars: number): Cents;
|
|
47
|
+
declare function toDollars(cents: Cents): number;
|
|
48
|
+
type StablecoinProvider = 'circle' | 'bridge';
|
|
49
|
+
interface SupportedAsset {
|
|
50
|
+
asset: string;
|
|
51
|
+
network: string;
|
|
52
|
+
contractAddress: string;
|
|
53
|
+
minRedemption: Cents;
|
|
54
|
+
}
|
|
55
|
+
interface ProviderCredentials {
|
|
56
|
+
provider: StablecoinProvider;
|
|
57
|
+
apiKey: string;
|
|
58
|
+
environment: 'sandbox' | 'production';
|
|
59
|
+
}
|
|
60
|
+
interface StablecoinBalance {
|
|
61
|
+
provider: StablecoinProvider;
|
|
62
|
+
asset: string;
|
|
63
|
+
network: string;
|
|
64
|
+
balanceCents: Cents;
|
|
65
|
+
lastUpdated: string;
|
|
66
|
+
}
|
|
67
|
+
interface FiatBalance {
|
|
68
|
+
provider: 'mercury' | 'external';
|
|
69
|
+
accountId: string;
|
|
70
|
+
availableCents: Cents;
|
|
71
|
+
pendingCents: Cents;
|
|
72
|
+
currency: 'USD';
|
|
73
|
+
lastUpdated: string;
|
|
74
|
+
}
|
|
75
|
+
interface CombinedBalances {
|
|
76
|
+
stablecoin: StablecoinBalance[];
|
|
77
|
+
fiat: FiatBalance[];
|
|
78
|
+
totalStablecoinCents: Cents;
|
|
79
|
+
totalFiatAvailableCents: Cents;
|
|
80
|
+
}
|
|
81
|
+
interface OfframpQuote {
|
|
82
|
+
provider: StablecoinProvider;
|
|
83
|
+
sourceAsset: string;
|
|
84
|
+
sourceNetwork: string;
|
|
85
|
+
requestedCents: Cents;
|
|
86
|
+
estimatedFeeCents: Cents;
|
|
87
|
+
estimatedNetCents: Cents;
|
|
88
|
+
estimatedSettlementMinutes: number;
|
|
89
|
+
expiresAt: string;
|
|
90
|
+
quoteId?: string;
|
|
91
|
+
}
|
|
92
|
+
type TransferStatus = 'pending' | 'processing' | 'completed' | 'failed' | 'cancelled';
|
|
93
|
+
interface TransferRecord {
|
|
94
|
+
id: string;
|
|
95
|
+
fundingPlanId: string;
|
|
96
|
+
providerTransferId: string;
|
|
97
|
+
bankTransactionId?: string;
|
|
98
|
+
provider: StablecoinProvider;
|
|
99
|
+
direction: 'crypto_to_fiat';
|
|
100
|
+
sourceAsset: string;
|
|
101
|
+
sourceNetwork: string;
|
|
102
|
+
amountCents: Cents;
|
|
103
|
+
feesCents: Cents;
|
|
104
|
+
netAmountCents: Cents;
|
|
105
|
+
destinationBankId: string;
|
|
106
|
+
status: TransferStatus;
|
|
107
|
+
statusReason?: string;
|
|
108
|
+
initiatedAt: string;
|
|
109
|
+
completedAt?: string;
|
|
110
|
+
idempotencyKey: string;
|
|
111
|
+
previousHash: string;
|
|
112
|
+
hash: string;
|
|
113
|
+
}
|
|
114
|
+
interface TransferStatusDetail {
|
|
115
|
+
transferId: string;
|
|
116
|
+
providerTransferId: string;
|
|
117
|
+
status: TransferStatus;
|
|
118
|
+
amountCents: Cents;
|
|
119
|
+
feesCents: Cents;
|
|
120
|
+
initiatedAt: string;
|
|
121
|
+
completedAt?: string;
|
|
122
|
+
estimatedCompletionAt?: string;
|
|
123
|
+
providerRawStatus: string;
|
|
124
|
+
}
|
|
125
|
+
interface DateRange {
|
|
126
|
+
start: string;
|
|
127
|
+
end: string;
|
|
128
|
+
}
|
|
129
|
+
interface StablecoinSetup {
|
|
130
|
+
/** Verify provider API key is valid and has required permissions */
|
|
131
|
+
authenticate(credentials: ProviderCredentials): Promise<{
|
|
132
|
+
valid: boolean;
|
|
133
|
+
accountId?: string;
|
|
134
|
+
permissions?: string[];
|
|
135
|
+
error?: string;
|
|
136
|
+
}>;
|
|
137
|
+
/** List stablecoins and networks the provider supports for off-ramp */
|
|
138
|
+
verifySupportedAssets(credentials: ProviderCredentials): Promise<SupportedAsset[]>;
|
|
139
|
+
/** Confirm the provider has a linked bank destination for wire/ACH payouts */
|
|
140
|
+
verifyLinkedBank(credentials: ProviderCredentials): Promise<{
|
|
141
|
+
linked: boolean;
|
|
142
|
+
bankId?: string;
|
|
143
|
+
bankName?: string;
|
|
144
|
+
accountLast4?: string;
|
|
145
|
+
error?: string;
|
|
146
|
+
}>;
|
|
147
|
+
/** Fetch current stablecoin balances for initial state snapshot */
|
|
148
|
+
getInitialBalances(credentials: ProviderCredentials): Promise<StablecoinBalance[]>;
|
|
149
|
+
}
|
|
150
|
+
interface StablecoinAdapter {
|
|
151
|
+
/** Current stablecoin + fiat balances across all connected accounts */
|
|
152
|
+
getBalances(): Promise<CombinedBalances>;
|
|
153
|
+
/** Estimate fees, settlement time, and net proceeds for an off-ramp */
|
|
154
|
+
quoteRedemption(amountCents: Cents): Promise<OfframpQuote>;
|
|
155
|
+
/**
|
|
156
|
+
* Create an off-ramp instruction with the provider.
|
|
157
|
+
* Requires an idempotencyKey on the FundingPlan to prevent duplicate transfers.
|
|
158
|
+
* Returns the created TransferRecord (with hash chain linking).
|
|
159
|
+
*/
|
|
160
|
+
initiateOfframp(plan: FundingPlanRef, previousHash: string): Promise<TransferRecord>;
|
|
161
|
+
/** Poll provider for transfer status updates */
|
|
162
|
+
getTransferStatus(transferId: string): Promise<TransferStatusDetail>;
|
|
163
|
+
/** Cancel a pending transfer if the provider supports cancellation */
|
|
164
|
+
cancelTransfer(transferId: string): Promise<{
|
|
165
|
+
cancelled: boolean;
|
|
166
|
+
reason?: string;
|
|
167
|
+
}>;
|
|
168
|
+
/** List completed transfers in a date range for reconciliation */
|
|
169
|
+
listCompletedTransfers(dateRange: DateRange): Promise<TransferRecord[]>;
|
|
170
|
+
}
|
|
171
|
+
interface FundingPlanRef {
|
|
172
|
+
id: string;
|
|
173
|
+
sourceFundingId: string;
|
|
174
|
+
destinationBankId: string;
|
|
175
|
+
requiredCents: Cents;
|
|
176
|
+
idempotencyKey: string;
|
|
177
|
+
}
|
|
178
|
+
declare function computeTransferHash(record: Omit<TransferRecord, 'hash'>, previousHash: string): string;
|
|
179
|
+
declare class CircleAdapter implements StablecoinSetup, StablecoinAdapter {
|
|
180
|
+
private config;
|
|
181
|
+
private readonly baseUrl;
|
|
182
|
+
private apiKey;
|
|
183
|
+
private bankId;
|
|
184
|
+
constructor(config: {
|
|
185
|
+
apiKey: string;
|
|
186
|
+
bankId: string;
|
|
187
|
+
environment: 'sandbox' | 'production';
|
|
188
|
+
});
|
|
189
|
+
authenticate(credentials: ProviderCredentials): Promise<{
|
|
190
|
+
valid: boolean;
|
|
191
|
+
accountId?: string;
|
|
192
|
+
permissions?: string[];
|
|
193
|
+
error?: string;
|
|
194
|
+
}>;
|
|
195
|
+
verifySupportedAssets(_credentials: ProviderCredentials): Promise<SupportedAsset[]>;
|
|
196
|
+
verifyLinkedBank(_credentials: ProviderCredentials): Promise<{
|
|
197
|
+
linked: boolean;
|
|
198
|
+
bankId?: string;
|
|
199
|
+
bankName?: string;
|
|
200
|
+
accountLast4?: string;
|
|
201
|
+
error?: string;
|
|
202
|
+
}>;
|
|
203
|
+
getInitialBalances(_credentials: ProviderCredentials): Promise<StablecoinBalance[]>;
|
|
204
|
+
getBalances(): Promise<CombinedBalances>;
|
|
205
|
+
quoteRedemption(amountCents: Cents): Promise<OfframpQuote>;
|
|
206
|
+
initiateOfframp(plan: FundingPlanRef, previousHash: string): Promise<TransferRecord>;
|
|
207
|
+
getTransferStatus(transferId: string): Promise<TransferStatusDetail>;
|
|
208
|
+
cancelTransfer(transferId: string): Promise<{
|
|
209
|
+
cancelled: boolean;
|
|
210
|
+
reason?: string;
|
|
211
|
+
}>;
|
|
212
|
+
listCompletedTransfers(dateRange: DateRange): Promise<TransferRecord[]>;
|
|
213
|
+
private fetchStablecoinBalances;
|
|
214
|
+
private apiCall;
|
|
215
|
+
}
|
|
216
|
+
declare function mapCircleStatus(circleStatus: string): TransferStatus;
|
|
217
|
+
export type { StablecoinSetup, StablecoinAdapter, StablecoinProvider, SupportedAsset, ProviderCredentials, StablecoinBalance, FiatBalance, CombinedBalances, OfframpQuote, TransferStatus, TransferRecord, TransferStatusDetail, FundingPlanRef, DateRange, };
|
|
218
|
+
export { toCents, toDollars, computeTransferHash, mapCircleStatus, CircleAdapter };
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern: Stablecoin Treasury Adapter (Split Interface)
|
|
3
|
+
*
|
|
4
|
+
* Key principles:
|
|
5
|
+
* - Split interface: StablecoinSetup (interactive CLI/Danger Room) + StablecoinAdapter (daemon runtime)
|
|
6
|
+
* - Single-writer constraint: only Heartbeat daemon calls the runtime adapter
|
|
7
|
+
* - Funding lifecycle: USDC held at provider → off-ramp instruction → fiat settlement at linked bank
|
|
8
|
+
* - All amounts in branded integer cents (Cents type from financial-transaction.ts)
|
|
9
|
+
* - Hash-chained TransferRecord for tamper-evident audit trail
|
|
10
|
+
* - Idempotency keys on all write operations (off-ramp, cancel)
|
|
11
|
+
* - Provider abstraction: Circle first-class, Bridge secondary, manual fallback
|
|
12
|
+
* - The adapter does NOT move money between bank and ad platform — that is ad-billing-adapter.ts
|
|
13
|
+
*
|
|
14
|
+
* Agents: Dockson (treasury), Heartbeat daemon
|
|
15
|
+
*
|
|
16
|
+
* PRD Reference: §11.1A, §12.1, §12.4, §12.5
|
|
17
|
+
*
|
|
18
|
+
* Circle API reference (v1):
|
|
19
|
+
* Auth: Bearer token via API key — header `Authorization: Bearer {apiKey}`
|
|
20
|
+
* Base URL: https://api.circle.com/v1
|
|
21
|
+
* GET /wallets → list wallets
|
|
22
|
+
* GET /wallets/{id}/balances → wallet balances (amount, currency, chain)
|
|
23
|
+
* GET /configuration → supported chains and assets
|
|
24
|
+
* GET /banks/wires → linked bank accounts
|
|
25
|
+
* POST /payouts → initiate wire payout (off-ramp)
|
|
26
|
+
* GET /payouts/{id} → transfer status
|
|
27
|
+
* GET /payouts?destination={bankId} → list completed payouts for reconciliation
|
|
28
|
+
*
|
|
29
|
+
* Response shape (balance):
|
|
30
|
+
* { data: { available: [{ amount: "1000.00", currency: "USD" }] } }
|
|
31
|
+
* Response shape (payout):
|
|
32
|
+
* { data: { id, status, amount: { amount, currency }, destination, createDate, updateDate } }
|
|
33
|
+
* Payout statuses: pending → processing → complete | failed
|
|
34
|
+
*
|
|
35
|
+
* Bridge API reference:
|
|
36
|
+
* Auth: API key header `Api-Key: {apiKey}`
|
|
37
|
+
* Base URL: https://api.bridge.xyz/v0
|
|
38
|
+
* POST /customers/{id}/liquidation_addresses → create liquidation address
|
|
39
|
+
* GET /customers/{id}/liquidation_addresses → list addresses
|
|
40
|
+
* GET /liquidation_addresses/{id} → transfer status
|
|
41
|
+
* Transfers settle via ACH to linked bank — status polling required
|
|
42
|
+
*/
|
|
43
|
+
import { createHash } from 'node:crypto';
|
|
44
|
+
function toCents(dollars) {
|
|
45
|
+
return Math.round(dollars * 100);
|
|
46
|
+
}
|
|
47
|
+
function toDollars(cents) {
|
|
48
|
+
return cents / 100;
|
|
49
|
+
}
|
|
50
|
+
// ── Hash Chain Helper ───────────────────────────────
|
|
51
|
+
function computeTransferHash(record, previousHash) {
|
|
52
|
+
const payload = JSON.stringify({
|
|
53
|
+
id: record.id,
|
|
54
|
+
fundingPlanId: record.fundingPlanId,
|
|
55
|
+
providerTransferId: record.providerTransferId,
|
|
56
|
+
amountCents: record.amountCents,
|
|
57
|
+
feesCents: record.feesCents,
|
|
58
|
+
status: record.status,
|
|
59
|
+
initiatedAt: record.initiatedAt,
|
|
60
|
+
}) + previousHash;
|
|
61
|
+
return createHash('sha256').update(payload).digest('hex');
|
|
62
|
+
}
|
|
63
|
+
// ── Reference Implementation Sketch: Circle ─────────
|
|
64
|
+
// Production implementation would live in wizard/lib/financial/stablecoin/circle.ts
|
|
65
|
+
class CircleAdapter {
|
|
66
|
+
config;
|
|
67
|
+
baseUrl = 'https://api.circle.com/v1';
|
|
68
|
+
apiKey = '';
|
|
69
|
+
bankId = '';
|
|
70
|
+
constructor(config) {
|
|
71
|
+
this.config = config;
|
|
72
|
+
this.apiKey = config.apiKey;
|
|
73
|
+
this.bankId = config.bankId;
|
|
74
|
+
if (config.environment === 'sandbox') {
|
|
75
|
+
// Circle sandbox base URL is the same but uses sandbox API keys
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// ── Setup (interactive) ──────────
|
|
79
|
+
async authenticate(credentials) {
|
|
80
|
+
// GET /configuration — verifies API key works
|
|
81
|
+
// Circle returns { data: { payments: { masterWalletId } } }
|
|
82
|
+
const res = await this.apiCall('GET', '/configuration');
|
|
83
|
+
const data = res.data;
|
|
84
|
+
const payments = data?.payments;
|
|
85
|
+
return {
|
|
86
|
+
valid: true,
|
|
87
|
+
accountId: payments?.masterWalletId,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
async verifySupportedAssets(_credentials) {
|
|
91
|
+
// Circle supports USDC on ETH, SOL, MATIC, AVAX, etc.
|
|
92
|
+
// GET /configuration → data.payments.supportedCurrencies
|
|
93
|
+
// Hardcoded for pattern — real implementation queries the API
|
|
94
|
+
return [
|
|
95
|
+
{ asset: 'USDC', network: 'ETH', contractAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', minRedemption: toCents(100) },
|
|
96
|
+
{ asset: 'USDC', network: 'SOL', contractAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', minRedemption: toCents(100) },
|
|
97
|
+
{ asset: 'USDC', network: 'MATIC', contractAddress: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359', minRedemption: toCents(100) },
|
|
98
|
+
];
|
|
99
|
+
}
|
|
100
|
+
async verifyLinkedBank(_credentials) {
|
|
101
|
+
// GET /banks/wires — lists linked wire destinations
|
|
102
|
+
// Response: { data: [{ id, description, trackingRef, bankAddress, billingDetails, status }] }
|
|
103
|
+
const res = await this.apiCall('GET', '/banks/wires');
|
|
104
|
+
const banks = res.data;
|
|
105
|
+
if (!banks || banks.length === 0) {
|
|
106
|
+
return { linked: false, error: 'No linked bank accounts found in Circle' };
|
|
107
|
+
}
|
|
108
|
+
const primary = banks[0];
|
|
109
|
+
return {
|
|
110
|
+
linked: true,
|
|
111
|
+
bankId: primary.id,
|
|
112
|
+
bankName: primary.billingDetails?.name,
|
|
113
|
+
accountLast4: primary.trackingRef
|
|
114
|
+
? primary.trackingRef.slice(-4)
|
|
115
|
+
: undefined,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
async getInitialBalances(_credentials) {
|
|
119
|
+
return this.fetchStablecoinBalances();
|
|
120
|
+
}
|
|
121
|
+
// ── Runtime (daemon) ──────────
|
|
122
|
+
async getBalances() {
|
|
123
|
+
const stablecoin = await this.fetchStablecoinBalances();
|
|
124
|
+
const totalStablecoinCents = stablecoin.reduce((sum, b) => (sum + b.balanceCents), 0);
|
|
125
|
+
// Fiat balances come from the bank adapter, not the stablecoin provider.
|
|
126
|
+
// The caller (Treasury Planner) combines stablecoin + bank balances.
|
|
127
|
+
return {
|
|
128
|
+
stablecoin,
|
|
129
|
+
fiat: [],
|
|
130
|
+
totalStablecoinCents,
|
|
131
|
+
totalFiatAvailableCents: 0,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
async quoteRedemption(amountCents) {
|
|
135
|
+
// Circle payout fees vary by destination and amount.
|
|
136
|
+
// For wire payouts: typically $25 flat fee.
|
|
137
|
+
// Settlement: 1-2 business days for domestic wire.
|
|
138
|
+
const feeCents = toCents(25);
|
|
139
|
+
return {
|
|
140
|
+
provider: 'circle',
|
|
141
|
+
sourceAsset: 'USDC',
|
|
142
|
+
sourceNetwork: 'ETH',
|
|
143
|
+
requestedCents: amountCents,
|
|
144
|
+
estimatedFeeCents: feeCents,
|
|
145
|
+
estimatedNetCents: (amountCents - feeCents),
|
|
146
|
+
estimatedSettlementMinutes: 24 * 60, // 1 business day estimate
|
|
147
|
+
expiresAt: new Date(Date.now() + 5 * 60 * 1000).toISOString(),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
async initiateOfframp(plan, previousHash) {
|
|
151
|
+
// POST /payouts
|
|
152
|
+
// Body: { idempotencyKey, source: { type: "wallet", id: "master" },
|
|
153
|
+
// destination: { type: "wire", id: bankId },
|
|
154
|
+
// amount: { amount: "1000.00", currency: "USD" },
|
|
155
|
+
// metadata: { beneficiaryEmail: "..." } }
|
|
156
|
+
const res = await this.apiCall('POST', '/payouts', {
|
|
157
|
+
idempotencyKey: plan.idempotencyKey,
|
|
158
|
+
source: { type: 'wallet', id: 'master' },
|
|
159
|
+
destination: { type: 'wire', id: this.bankId },
|
|
160
|
+
amount: { amount: toDollars(plan.requiredCents).toFixed(2), currency: 'USD' },
|
|
161
|
+
});
|
|
162
|
+
const payout = res.data;
|
|
163
|
+
const now = new Date().toISOString();
|
|
164
|
+
const id = crypto.randomUUID();
|
|
165
|
+
const record = {
|
|
166
|
+
id,
|
|
167
|
+
fundingPlanId: plan.id,
|
|
168
|
+
providerTransferId: payout.id,
|
|
169
|
+
provider: 'circle',
|
|
170
|
+
direction: 'crypto_to_fiat',
|
|
171
|
+
sourceAsset: 'USDC',
|
|
172
|
+
sourceNetwork: 'ETH',
|
|
173
|
+
amountCents: plan.requiredCents,
|
|
174
|
+
feesCents: toCents(25),
|
|
175
|
+
netAmountCents: (plan.requiredCents - toCents(25)),
|
|
176
|
+
destinationBankId: plan.destinationBankId,
|
|
177
|
+
status: 'pending',
|
|
178
|
+
initiatedAt: now,
|
|
179
|
+
idempotencyKey: plan.idempotencyKey,
|
|
180
|
+
previousHash,
|
|
181
|
+
};
|
|
182
|
+
const hash = computeTransferHash(record, previousHash);
|
|
183
|
+
return { ...record, hash };
|
|
184
|
+
}
|
|
185
|
+
async getTransferStatus(transferId) {
|
|
186
|
+
// GET /payouts/{id}
|
|
187
|
+
// Response: { data: { id, status, amount, fees, createDate, updateDate } }
|
|
188
|
+
// Circle statuses: pending → processing → complete | failed
|
|
189
|
+
const res = await this.apiCall('GET', `/payouts/${transferId}`);
|
|
190
|
+
const payout = res.data;
|
|
191
|
+
const amount = payout.amount;
|
|
192
|
+
const fees = payout.fees;
|
|
193
|
+
return {
|
|
194
|
+
transferId,
|
|
195
|
+
providerTransferId: payout.id,
|
|
196
|
+
status: mapCircleStatus(payout.status),
|
|
197
|
+
amountCents: toCents(parseFloat(amount.amount)),
|
|
198
|
+
feesCents: fees ? toCents(parseFloat(fees.amount)) : 0,
|
|
199
|
+
initiatedAt: payout.createDate,
|
|
200
|
+
completedAt: payout.status === 'complete' ? payout.updateDate : undefined,
|
|
201
|
+
providerRawStatus: payout.status,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
async cancelTransfer(transferId) {
|
|
205
|
+
// Circle does not support cancellation of payouts once processing begins.
|
|
206
|
+
// Only pending payouts may be cancellable via support — no direct API.
|
|
207
|
+
return {
|
|
208
|
+
cancelled: false,
|
|
209
|
+
reason: 'Circle does not support programmatic payout cancellation. Contact support for pending payouts.',
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
async listCompletedTransfers(dateRange) {
|
|
213
|
+
// GET /payouts?destination={bankId}&status=complete
|
|
214
|
+
// &pageBefore=...&pageAfter=...
|
|
215
|
+
// Filter by createDate within dateRange on the client side.
|
|
216
|
+
// Returns array of TransferRecords for reconciliation.
|
|
217
|
+
// In production: paginate and filter by date.
|
|
218
|
+
throw new Error('HTTP implementation — use node:https, no SDK dependencies');
|
|
219
|
+
}
|
|
220
|
+
// ── Private helpers ──────────
|
|
221
|
+
async fetchStablecoinBalances() {
|
|
222
|
+
// GET /wallets/master/balances (or /wallets → pick master → /ballets/{id}/balances)
|
|
223
|
+
// Response: { data: { available: [{ amount: "1500.50", currency: "USD" }] } }
|
|
224
|
+
const res = await this.apiCall('GET', '/wallets');
|
|
225
|
+
const wallets = res.data;
|
|
226
|
+
const now = new Date().toISOString();
|
|
227
|
+
const balances = [];
|
|
228
|
+
for (const wallet of wallets) {
|
|
229
|
+
const available = wallet.balances ?? [];
|
|
230
|
+
for (const bal of available) {
|
|
231
|
+
if (bal.currency === 'USD') {
|
|
232
|
+
balances.push({
|
|
233
|
+
provider: 'circle',
|
|
234
|
+
asset: 'USDC',
|
|
235
|
+
network: 'ETH', // Circle aggregates across chains for USD balance
|
|
236
|
+
balanceCents: toCents(parseFloat(bal.amount)),
|
|
237
|
+
lastUpdated: now,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return balances;
|
|
243
|
+
}
|
|
244
|
+
async apiCall(method, path, body) {
|
|
245
|
+
// Implementation: raw HTTPS (no SDK — zero dependency principle)
|
|
246
|
+
// Headers:
|
|
247
|
+
// Authorization: Bearer {this.apiKey}
|
|
248
|
+
// Content-Type: application/json
|
|
249
|
+
// Accept: application/json
|
|
250
|
+
// Sanitize response strings per §9.19.16 before returning
|
|
251
|
+
throw new Error('HTTP implementation — use node:https, no SDK dependencies');
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// ── Status Mapping ──────────────────────────────────
|
|
255
|
+
function mapCircleStatus(circleStatus) {
|
|
256
|
+
switch (circleStatus) {
|
|
257
|
+
case 'pending': return 'pending';
|
|
258
|
+
case 'processing': return 'processing';
|
|
259
|
+
case 'complete': return 'completed';
|
|
260
|
+
case 'failed': return 'failed';
|
|
261
|
+
default: return 'pending';
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
export { toCents, toDollars, computeTransferHash, mapCircleStatus, CircleAdapter };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD Structural Validator — Troi's compliance checks.
|
|
3
|
+
*
|
|
4
|
+
* Validates that a PRD document has the expected sections and
|
|
5
|
+
* cross-references based on its frontmatter configuration.
|
|
6
|
+
* Produces warnings (not errors) — the user can proceed with gaps.
|
|
7
|
+
*
|
|
8
|
+
* PRD Reference: RFC-blueprint-path.md
|
|
9
|
+
*/
|
|
10
|
+
import type { PrdFrontmatter } from './frontmatter.js';
|
|
11
|
+
export interface ValidationResult {
|
|
12
|
+
errors: string[];
|
|
13
|
+
warnings: string[];
|
|
14
|
+
sections: string[];
|
|
15
|
+
valid: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Extract all markdown heading sections from PRD content.
|
|
19
|
+
* Returns lowercase heading text for case-insensitive matching.
|
|
20
|
+
*/
|
|
21
|
+
export declare function extractSections(content: string): string[];
|
|
22
|
+
/**
|
|
23
|
+
* Validate PRD structure against frontmatter configuration.
|
|
24
|
+
*
|
|
25
|
+
* Rules (warnings, not blockers):
|
|
26
|
+
* - PRD must have an OVERVIEW or SUMMARY section
|
|
27
|
+
* - PRD must have at least one feature section
|
|
28
|
+
* - If database is configured, should have DATA MODELS section
|
|
29
|
+
* - If deploy target is set, should have DEPLOYMENT section
|
|
30
|
+
* - If auth is enabled, should mention authentication
|
|
31
|
+
* - If workers are enabled, should define background workers
|
|
32
|
+
* - If payments are configured, should have a payments/billing section
|
|
33
|
+
*/
|
|
34
|
+
export declare function validatePrdStructure(content: string, frontmatter: PrdFrontmatter): ValidationResult;
|
|
35
|
+
/**
|
|
36
|
+
* Run conflict scan between frontmatter fields.
|
|
37
|
+
* Checks for contradictions that cost hours if caught late.
|
|
38
|
+
*/
|
|
39
|
+
export declare function scanConflicts(frontmatter: PrdFrontmatter): string[];
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD Structural Validator — Troi's compliance checks.
|
|
3
|
+
*
|
|
4
|
+
* Validates that a PRD document has the expected sections and
|
|
5
|
+
* cross-references based on its frontmatter configuration.
|
|
6
|
+
* Produces warnings (not errors) — the user can proceed with gaps.
|
|
7
|
+
*
|
|
8
|
+
* PRD Reference: RFC-blueprint-path.md
|
|
9
|
+
*/
|
|
10
|
+
// ── Section Detection ───────────────────────────────
|
|
11
|
+
/**
|
|
12
|
+
* Extract all markdown heading sections from PRD content.
|
|
13
|
+
* Returns lowercase heading text for case-insensitive matching.
|
|
14
|
+
*/
|
|
15
|
+
export function extractSections(content) {
|
|
16
|
+
const headingPattern = /^#{1,3}\s+(.+)$/gm;
|
|
17
|
+
const sections = [];
|
|
18
|
+
let match;
|
|
19
|
+
while ((match = headingPattern.exec(content)) !== null) {
|
|
20
|
+
sections.push(match[1].trim().toLowerCase());
|
|
21
|
+
}
|
|
22
|
+
return sections;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Check if any section heading contains a given keyword.
|
|
26
|
+
*/
|
|
27
|
+
function hasSection(sections, keyword) {
|
|
28
|
+
const lower = keyword.toLowerCase();
|
|
29
|
+
return sections.some(s => s.includes(lower));
|
|
30
|
+
}
|
|
31
|
+
// ── Structural Validation ───────────────────────────
|
|
32
|
+
/**
|
|
33
|
+
* Validate PRD structure against frontmatter configuration.
|
|
34
|
+
*
|
|
35
|
+
* Rules (warnings, not blockers):
|
|
36
|
+
* - PRD must have an OVERVIEW or SUMMARY section
|
|
37
|
+
* - PRD must have at least one feature section
|
|
38
|
+
* - If database is configured, should have DATA MODELS section
|
|
39
|
+
* - If deploy target is set, should have DEPLOYMENT section
|
|
40
|
+
* - If auth is enabled, should mention authentication
|
|
41
|
+
* - If workers are enabled, should define background workers
|
|
42
|
+
* - If payments are configured, should have a payments/billing section
|
|
43
|
+
*/
|
|
44
|
+
export function validatePrdStructure(content, frontmatter) {
|
|
45
|
+
const sections = extractSections(content);
|
|
46
|
+
const errors = [];
|
|
47
|
+
const warnings = [];
|
|
48
|
+
const contentLower = content.toLowerCase();
|
|
49
|
+
// Required: Overview or Summary section
|
|
50
|
+
if (!hasSection(sections, 'overview') && !hasSection(sections, 'summary') && !hasSection(sections, 'introduction')) {
|
|
51
|
+
warnings.push('Missing OVERVIEW or SUMMARY section — add a high-level description of the product');
|
|
52
|
+
}
|
|
53
|
+
// Required: At least one feature section
|
|
54
|
+
if (!hasSection(sections, 'feature') && !hasSection(sections, 'core') && !hasSection(sections, 'functionality')) {
|
|
55
|
+
warnings.push('No feature sections found — add sections describing what the product does');
|
|
56
|
+
}
|
|
57
|
+
// Conditional: Database → Data Models
|
|
58
|
+
if (frontmatter.database && frontmatter.database !== 'no' && frontmatter.database !== 'none') {
|
|
59
|
+
if (!hasSection(sections, 'data model') && !hasSection(sections, 'schema') && !hasSection(sections, 'database')) {
|
|
60
|
+
warnings.push(`Database "${frontmatter.database}" configured but no DATA MODELS or SCHEMA section found`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Conditional: Deploy → Deployment section
|
|
64
|
+
if (frontmatter.deploy && frontmatter.deploy !== 'no' && frontmatter.deploy !== 'none') {
|
|
65
|
+
if (!hasSection(sections, 'deploy') && !hasSection(sections, 'infrastructure') && !hasSection(sections, 'hosting')) {
|
|
66
|
+
warnings.push(`Deploy target "${frontmatter.deploy}" configured but no DEPLOYMENT section found`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Conditional: Auth → Authentication mentioned
|
|
70
|
+
if (frontmatter.auth && frontmatter.auth !== 'no' && frontmatter.auth !== 'none' && frontmatter.auth !== 'false') {
|
|
71
|
+
if (!contentLower.includes('auth') && !contentLower.includes('login') && !contentLower.includes('sign in')) {
|
|
72
|
+
warnings.push('Auth is enabled but PRD does not mention authentication, login, or sign-in');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Conditional: Workers → Background jobs defined
|
|
76
|
+
if (frontmatter.workers && frontmatter.workers !== 'no' && frontmatter.workers !== 'none' && frontmatter.workers !== 'false') {
|
|
77
|
+
if (!contentLower.includes('worker') && !contentLower.includes('background') && !contentLower.includes('queue') && !contentLower.includes('cron')) {
|
|
78
|
+
warnings.push('Workers enabled but PRD does not mention workers, background jobs, queues, or cron');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Conditional: Payments → Billing section
|
|
82
|
+
if (frontmatter.payments && frontmatter.payments !== 'no' && frontmatter.payments !== 'none' && frontmatter.payments !== 'false') {
|
|
83
|
+
if (!contentLower.includes('payment') && !contentLower.includes('billing') && !contentLower.includes('subscription') && !contentLower.includes('pricing')) {
|
|
84
|
+
warnings.push(`Payments "${frontmatter.payments}" configured but PRD does not mention payments, billing, or pricing`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Conditional: Email → Email section or mentions
|
|
88
|
+
if (frontmatter.email && frontmatter.email !== 'no' && frontmatter.email !== 'none' && frontmatter.email !== 'false') {
|
|
89
|
+
if (!contentLower.includes('email') && !contentLower.includes('notification') && !contentLower.includes('mail')) {
|
|
90
|
+
warnings.push(`Email "${frontmatter.email}" configured but PRD does not mention email or notifications`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
errors,
|
|
95
|
+
warnings,
|
|
96
|
+
sections,
|
|
97
|
+
valid: errors.length === 0,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Run conflict scan between frontmatter fields.
|
|
102
|
+
* Checks for contradictions that cost hours if caught late.
|
|
103
|
+
*/
|
|
104
|
+
export function scanConflicts(frontmatter) {
|
|
105
|
+
const conflicts = [];
|
|
106
|
+
// Auth + Database: auth usually needs a database
|
|
107
|
+
if (frontmatter.auth && frontmatter.auth !== 'no' && frontmatter.auth !== 'none') {
|
|
108
|
+
if (!frontmatter.database || frontmatter.database === 'none') {
|
|
109
|
+
conflicts.push('Auth is enabled but no database configured — auth needs persistent storage for users/sessions');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Payments + Auth: payments need auth
|
|
113
|
+
if (frontmatter.payments && frontmatter.payments !== 'no' && frontmatter.payments !== 'none') {
|
|
114
|
+
if (!frontmatter.auth || frontmatter.auth === 'no' || frontmatter.auth === 'none') {
|
|
115
|
+
conflicts.push('Payments configured but auth is disabled — payments require authenticated users');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Workers + Deploy: workers need persistent hosting
|
|
119
|
+
if (frontmatter.workers && frontmatter.workers !== 'no' && frontmatter.workers !== 'none' && frontmatter.workers !== 'false') {
|
|
120
|
+
if (frontmatter.deploy === 'static' || frontmatter.deploy === 'cloudflare') {
|
|
121
|
+
conflicts.push(`Workers enabled but deploy target "${frontmatter.deploy}" does not support background processes`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Cache + Deploy: Redis needs a host
|
|
125
|
+
if (frontmatter.cache && frontmatter.cache !== 'none' && frontmatter.cache !== 'no') {
|
|
126
|
+
if (frontmatter.deploy === 'static' || frontmatter.deploy === 'cloudflare') {
|
|
127
|
+
conflicts.push(`Cache "${frontmatter.cache}" configured but deploy target "${frontmatter.deploy}" does not support cache services`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Admin + Auth: admin panel needs auth
|
|
131
|
+
if (frontmatter.admin && frontmatter.admin !== 'no' && frontmatter.admin !== 'none' && frontmatter.admin !== 'false') {
|
|
132
|
+
if (!frontmatter.auth || frontmatter.auth === 'no' || frontmatter.auth === 'none') {
|
|
133
|
+
conflicts.push('Admin panel enabled but auth is disabled — admin requires authenticated access');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return conflicts;
|
|
137
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project creation — headless and browser init flows.
|
|
3
|
+
*
|
|
4
|
+
* Creates a new VoidForge project by copying methodology files,
|
|
5
|
+
* injecting project identity, writing the marker, and registering.
|
|
6
|
+
*/
|
|
7
|
+
import { type VoidForgeMarker } from './marker.js';
|
|
8
|
+
export interface ProjectConfig {
|
|
9
|
+
name: string;
|
|
10
|
+
directory: string;
|
|
11
|
+
oneliner?: string;
|
|
12
|
+
domain?: string;
|
|
13
|
+
repoUrl?: string;
|
|
14
|
+
tier?: VoidForgeMarker['tier'];
|
|
15
|
+
extensions?: string[];
|
|
16
|
+
core?: boolean;
|
|
17
|
+
skipGit?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface ProjectResult {
|
|
20
|
+
projectDir: string;
|
|
21
|
+
markerId: string;
|
|
22
|
+
filesCreated: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function createProject(config: ProjectConfig): Promise<ProjectResult>;
|