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,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Treasury Migrator — Migrate global treasury data to per-project paths.
|
|
3
|
+
*
|
|
4
|
+
* v22.0 moved financial paths per-project ({project}/cultivation/treasury/)
|
|
5
|
+
* but left no migration tooling. Existing users with global treasury data
|
|
6
|
+
* at ~/.voidforge/treasury/ see empty dashboards after upgrading.
|
|
7
|
+
*
|
|
8
|
+
* Strategy: Clean break. Global data is archived, not copied. Per-project
|
|
9
|
+
* logs start with genesis hash ('0'). Copying would create false provenance
|
|
10
|
+
* (Riker/Spock dissent, ADR-041 decision).
|
|
11
|
+
*
|
|
12
|
+
* v22.1 Mission 1 — Campaign 30
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync } from 'node:fs';
|
|
15
|
+
import { readFile, readdir, mkdir, rename, writeFile, chmod } from 'node:fs/promises';
|
|
16
|
+
import { join } from 'node:path';
|
|
17
|
+
import { homedir } from 'node:os';
|
|
18
|
+
import { getProject } from './project-registry.js';
|
|
19
|
+
import { createProjectContext } from './project-scope.js';
|
|
20
|
+
import { verifyChain } from './patterns/financial-transaction.js';
|
|
21
|
+
// ── Constants ────────────────────────────────────────────
|
|
22
|
+
const GLOBAL_TREASURY_DIR = join(homedir(), '.voidforge', 'treasury');
|
|
23
|
+
const GLOBAL_ARCHIVE_DIR = join(homedir(), '.voidforge', 'treasury-pre-v22');
|
|
24
|
+
const MIGRATION_MARKER = '.migrated';
|
|
25
|
+
// Files that stay global (vault + TOTP are user-scoped, not project-scoped)
|
|
26
|
+
const GLOBAL_ONLY_FILES = new Set(['vault.enc', 'totp.enc']);
|
|
27
|
+
// ── Pre-flight ───────────────────────────────────────────
|
|
28
|
+
export async function preFlightCheck(projectId) {
|
|
29
|
+
const errors = [];
|
|
30
|
+
const warnings = [];
|
|
31
|
+
// Look up project
|
|
32
|
+
const project = await getProject(projectId);
|
|
33
|
+
let context = null;
|
|
34
|
+
if (!project) {
|
|
35
|
+
errors.push(`Project "${projectId}" not found in registry. Register it first with the wizard.`);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
context = createProjectContext(project);
|
|
39
|
+
// Check project directory exists
|
|
40
|
+
if (!existsSync(project.directory)) {
|
|
41
|
+
errors.push(`Project directory does not exist: ${project.directory}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Check global treasury
|
|
45
|
+
const globalTreasuryExists = existsSync(GLOBAL_TREASURY_DIR);
|
|
46
|
+
let globalFileCount = 0;
|
|
47
|
+
if (globalTreasuryExists) {
|
|
48
|
+
try {
|
|
49
|
+
const files = await readdir(GLOBAL_TREASURY_DIR, { recursive: true });
|
|
50
|
+
globalFileCount = files.length;
|
|
51
|
+
}
|
|
52
|
+
catch { /* directory may be unreadable */ }
|
|
53
|
+
}
|
|
54
|
+
if (!globalTreasuryExists) {
|
|
55
|
+
warnings.push('No global treasury directory found. Nothing to archive.');
|
|
56
|
+
}
|
|
57
|
+
// Check daemon is not running
|
|
58
|
+
let daemonRunning = false;
|
|
59
|
+
const pidFile = join(homedir(), '.voidforge', 'run', 'heartbeat.pid');
|
|
60
|
+
if (existsSync(pidFile)) {
|
|
61
|
+
try {
|
|
62
|
+
const pid = parseInt(await readFile(pidFile, 'utf-8'), 10);
|
|
63
|
+
if (!isNaN(pid)) {
|
|
64
|
+
try {
|
|
65
|
+
process.kill(pid, 0); // Check if process exists
|
|
66
|
+
daemonRunning = true;
|
|
67
|
+
errors.push(`Heartbeat daemon is running (PID ${pid}). Stop it before migrating.`);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// PID file is stale — daemon not running
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch { /* can't read PID file */ }
|
|
75
|
+
}
|
|
76
|
+
// Also check per-project daemon
|
|
77
|
+
if (context) {
|
|
78
|
+
if (existsSync(context.pidFile)) {
|
|
79
|
+
try {
|
|
80
|
+
const pid = parseInt(await readFile(context.pidFile, 'utf-8'), 10);
|
|
81
|
+
if (!isNaN(pid)) {
|
|
82
|
+
try {
|
|
83
|
+
process.kill(pid, 0);
|
|
84
|
+
daemonRunning = true;
|
|
85
|
+
errors.push(`Per-project daemon is running (PID ${pid}). Stop it before migrating.`);
|
|
86
|
+
}
|
|
87
|
+
catch { /* stale */ }
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch { /* can't read */ }
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Check cultivation directory
|
|
94
|
+
let cultivationInstalled = false;
|
|
95
|
+
if (context) {
|
|
96
|
+
cultivationInstalled = existsSync(context.cultivationDir);
|
|
97
|
+
if (!cultivationInstalled) {
|
|
98
|
+
warnings.push('Cultivation not yet installed. Treasury directory will be created.');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Check for existing migration
|
|
102
|
+
if (context && existsSync(join(context.treasuryDir, MIGRATION_MARKER))) {
|
|
103
|
+
errors.push('This project has already been migrated. Remove .migrated to force re-migration.');
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
projectId,
|
|
107
|
+
project,
|
|
108
|
+
context,
|
|
109
|
+
globalTreasuryDir: GLOBAL_TREASURY_DIR,
|
|
110
|
+
globalTreasuryExists,
|
|
111
|
+
globalFileCount,
|
|
112
|
+
cultivationInstalled,
|
|
113
|
+
daemonRunning,
|
|
114
|
+
errors,
|
|
115
|
+
warnings,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
// ── Migration ────────────────────────────────────────────
|
|
119
|
+
/**
|
|
120
|
+
* Execute treasury migration for a project.
|
|
121
|
+
*
|
|
122
|
+
* Steps:
|
|
123
|
+
* 1. Archive global treasury to ~/.voidforge/treasury-pre-v22/
|
|
124
|
+
* 2. Create per-project cultivation/treasury/ with genesis files
|
|
125
|
+
* 3. Write migration manifest
|
|
126
|
+
* 4. Set 0700 permissions on treasury directory
|
|
127
|
+
* 5. Validate hash chains in archived logs
|
|
128
|
+
*/
|
|
129
|
+
export async function migrateTreasury(context) {
|
|
130
|
+
const now = new Date().toISOString();
|
|
131
|
+
// Step 1: Archive global treasury (if it exists and hasn't been archived)
|
|
132
|
+
let sourceFileCount = 0;
|
|
133
|
+
if (existsSync(GLOBAL_TREASURY_DIR) && !existsSync(GLOBAL_ARCHIVE_DIR)) {
|
|
134
|
+
await rename(GLOBAL_TREASURY_DIR, GLOBAL_ARCHIVE_DIR);
|
|
135
|
+
try {
|
|
136
|
+
const files = await readdir(GLOBAL_ARCHIVE_DIR, { recursive: true });
|
|
137
|
+
sourceFileCount = files.length;
|
|
138
|
+
}
|
|
139
|
+
catch { /* count is best-effort */ }
|
|
140
|
+
}
|
|
141
|
+
else if (existsSync(GLOBAL_ARCHIVE_DIR)) {
|
|
142
|
+
// Already archived from a previous migration — count existing archive
|
|
143
|
+
try {
|
|
144
|
+
const files = await readdir(GLOBAL_ARCHIVE_DIR, { recursive: true });
|
|
145
|
+
sourceFileCount = files.length;
|
|
146
|
+
}
|
|
147
|
+
catch { /* count is best-effort */ }
|
|
148
|
+
}
|
|
149
|
+
// Step 2: Create per-project treasury directory structure
|
|
150
|
+
const treasuryDir = context.treasuryDir;
|
|
151
|
+
await mkdir(treasuryDir, { recursive: true });
|
|
152
|
+
await mkdir(join(treasuryDir, 'campaigns'), { recursive: true });
|
|
153
|
+
await mkdir(join(treasuryDir, 'reconciliation'), { recursive: true });
|
|
154
|
+
await mkdir(join(treasuryDir, 'reports'), { recursive: true });
|
|
155
|
+
// Genesis files — clean break, no copy (ADR-041 decision)
|
|
156
|
+
// Per-project logs start with hash '0' — the genesis hash
|
|
157
|
+
const genesisFiles = ['spend-log.jsonl', 'revenue-log.jsonl', 'pending-ops.jsonl'];
|
|
158
|
+
for (const file of genesisFiles) {
|
|
159
|
+
const filePath = join(treasuryDir, file);
|
|
160
|
+
if (!existsSync(filePath)) {
|
|
161
|
+
await writeFile(filePath, '', 'utf-8');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Create empty budgets.json if it doesn't exist
|
|
165
|
+
const budgetsPath = join(treasuryDir, 'budgets.json');
|
|
166
|
+
if (!existsSync(budgetsPath)) {
|
|
167
|
+
await writeFile(budgetsPath, JSON.stringify({ totalBudgetCents: 0, allocations: [] }), 'utf-8');
|
|
168
|
+
}
|
|
169
|
+
// Step 3: Validate hash chains in archived logs (informational)
|
|
170
|
+
const spendLogStats = await validateArchivedLog(join(GLOBAL_ARCHIVE_DIR, 'spend-log.jsonl'));
|
|
171
|
+
const revenueLogStats = await validateArchivedLog(join(GLOBAL_ARCHIVE_DIR, 'revenue-log.jsonl'));
|
|
172
|
+
// Step 4: Set 0700 permissions on treasury directory
|
|
173
|
+
await chmod(treasuryDir, 0o700);
|
|
174
|
+
// Step 5: Write migration manifest
|
|
175
|
+
const manifest = {
|
|
176
|
+
version: '22.1',
|
|
177
|
+
migratedAt: now,
|
|
178
|
+
projectId: context.id,
|
|
179
|
+
projectName: context.name,
|
|
180
|
+
projectDir: context.directory,
|
|
181
|
+
sourceDir: GLOBAL_ARCHIVE_DIR,
|
|
182
|
+
archiveDir: GLOBAL_ARCHIVE_DIR,
|
|
183
|
+
sourceFileCount,
|
|
184
|
+
spendLogEntries: spendLogStats.entryCount,
|
|
185
|
+
revenueLogEntries: revenueLogStats.entryCount,
|
|
186
|
+
spendLogHashValid: spendLogStats.valid,
|
|
187
|
+
revenueLogHashValid: revenueLogStats.valid,
|
|
188
|
+
};
|
|
189
|
+
await writeFile(join(treasuryDir, MIGRATION_MARKER), JSON.stringify(manifest, null, 2), 'utf-8');
|
|
190
|
+
return {
|
|
191
|
+
success: true,
|
|
192
|
+
manifest,
|
|
193
|
+
archiveDir: GLOBAL_ARCHIVE_DIR,
|
|
194
|
+
treasuryDir,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
async function validateArchivedLog(logPath) {
|
|
198
|
+
if (!existsSync(logPath)) {
|
|
199
|
+
return { entryCount: 0, valid: true };
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
const raw = await readFile(logPath, 'utf-8');
|
|
203
|
+
const lines = raw.trim().split('\n').filter(Boolean);
|
|
204
|
+
const entries = [];
|
|
205
|
+
for (const line of lines) {
|
|
206
|
+
try {
|
|
207
|
+
entries.push(JSON.parse(line));
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// Non-JSON line — chain is broken
|
|
211
|
+
return { entryCount: lines.length, valid: false, brokenAt: entries.length };
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (entries.length === 0) {
|
|
215
|
+
return { entryCount: 0, valid: true };
|
|
216
|
+
}
|
|
217
|
+
const result = verifyChain(entries);
|
|
218
|
+
return {
|
|
219
|
+
entryCount: entries.length,
|
|
220
|
+
valid: result.valid,
|
|
221
|
+
brokenAt: result.brokenAt,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
return { entryCount: 0, valid: false };
|
|
226
|
+
}
|
|
227
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Treasury Reader — Shared read-only functions for treasury data.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from danger-room.ts heartbeat endpoint (ADR-041 M0.3).
|
|
5
|
+
* Reads treasury files from a given directory path. Used by both the
|
|
6
|
+
* Danger Room API and the Lobby aggregation endpoint.
|
|
7
|
+
*
|
|
8
|
+
* This module is READ-ONLY. The heartbeat daemon is the single writer (ADR-1).
|
|
9
|
+
*/
|
|
10
|
+
export interface TreasurySummary {
|
|
11
|
+
revenue: number;
|
|
12
|
+
spend: number;
|
|
13
|
+
net: number;
|
|
14
|
+
roas: number;
|
|
15
|
+
budgetRemaining: number;
|
|
16
|
+
stablecoinBalance: number | null;
|
|
17
|
+
pendingOfframps: number;
|
|
18
|
+
bankAvailable: number | null;
|
|
19
|
+
bankReserved: number | null;
|
|
20
|
+
runwayDays: number | null;
|
|
21
|
+
fundingState: string | null;
|
|
22
|
+
nextTreasuryEvent: string | null;
|
|
23
|
+
unsettledInvoices: number;
|
|
24
|
+
reconciliationStatus: string | null;
|
|
25
|
+
}
|
|
26
|
+
export interface HeartbeatSnapshot {
|
|
27
|
+
cultivationInstalled: boolean;
|
|
28
|
+
heartbeat: unknown;
|
|
29
|
+
campaigns: unknown[];
|
|
30
|
+
treasury: TreasurySummary;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Read full heartbeat snapshot from a treasury directory.
|
|
34
|
+
*
|
|
35
|
+
* @param treasuryDir — Path to treasury directory (e.g., project/cultivation/treasury/)
|
|
36
|
+
* @param stateFilePath — Path to heartbeat.json state file
|
|
37
|
+
* @param vaultCheckPath — Path to vault.enc (used to detect cultivation installation)
|
|
38
|
+
*/
|
|
39
|
+
export declare function readHeartbeatSnapshot(treasuryDir: string, stateFilePath: string, vaultCheckPath: string): Promise<HeartbeatSnapshot>;
|
|
40
|
+
/** Filename for the cached summary written by the daemon (v22.1 M2). */
|
|
41
|
+
export declare const TREASURY_SUMMARY_FILE = "treasury-summary.json";
|
|
42
|
+
/**
|
|
43
|
+
* Read treasury summary. Tries the O(1) cached summary file first (written by
|
|
44
|
+
* the heartbeat daemon after each financial operation). Falls back to O(n)
|
|
45
|
+
* JSONL log scan if the summary file doesn't exist or is unreadable.
|
|
46
|
+
*/
|
|
47
|
+
export declare function readTreasurySummary(treasuryDir: string, heartbeatData?: unknown): Promise<TreasurySummary>;
|
|
48
|
+
/**
|
|
49
|
+
* O(n) JSONL log scan — the original read path before v22.1.
|
|
50
|
+
* Used as fallback when treasury-summary.json is unavailable.
|
|
51
|
+
*/
|
|
52
|
+
export declare function readTreasurySummaryFromLogs(treasuryDir: string, heartbeatData?: unknown): Promise<TreasurySummary>;
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Treasury Reader — Shared read-only functions for treasury data.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from danger-room.ts heartbeat endpoint (ADR-041 M0.3).
|
|
5
|
+
* Reads treasury files from a given directory path. Used by both the
|
|
6
|
+
* Danger Room API and the Lobby aggregation endpoint.
|
|
7
|
+
*
|
|
8
|
+
* This module is READ-ONLY. The heartbeat daemon is the single writer (ADR-1).
|
|
9
|
+
*/
|
|
10
|
+
import { readFile, readdir } from 'node:fs/promises';
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
import { existsSync } from 'node:fs';
|
|
13
|
+
import { readFileOrNull } from './http-helpers.js';
|
|
14
|
+
const EMPTY_TREASURY = {
|
|
15
|
+
revenue: 0, spend: 0, net: 0, roas: 0, budgetRemaining: 0,
|
|
16
|
+
stablecoinBalance: null, pendingOfframps: 0,
|
|
17
|
+
bankAvailable: null, bankReserved: null,
|
|
18
|
+
runwayDays: null, fundingState: null,
|
|
19
|
+
nextTreasuryEvent: null, unsettledInvoices: 0,
|
|
20
|
+
reconciliationStatus: null,
|
|
21
|
+
};
|
|
22
|
+
// ── Readers ──────────────────────────────────────────
|
|
23
|
+
/**
|
|
24
|
+
* Read full heartbeat snapshot from a treasury directory.
|
|
25
|
+
*
|
|
26
|
+
* @param treasuryDir — Path to treasury directory (e.g., project/cultivation/treasury/)
|
|
27
|
+
* @param stateFilePath — Path to heartbeat.json state file
|
|
28
|
+
* @param vaultCheckPath — Path to vault.enc (used to detect cultivation installation)
|
|
29
|
+
*/
|
|
30
|
+
export async function readHeartbeatSnapshot(treasuryDir, stateFilePath, vaultCheckPath) {
|
|
31
|
+
let cultivationInstalled = false;
|
|
32
|
+
let heartbeatData = null;
|
|
33
|
+
try {
|
|
34
|
+
cultivationInstalled = existsSync(vaultCheckPath);
|
|
35
|
+
const raw = await readFileOrNull(stateFilePath);
|
|
36
|
+
if (raw)
|
|
37
|
+
heartbeatData = JSON.parse(raw);
|
|
38
|
+
}
|
|
39
|
+
catch { /* no heartbeat data */ }
|
|
40
|
+
const campaigns = await readCampaigns(join(treasuryDir, 'campaigns'));
|
|
41
|
+
const treasury = await readTreasurySummary(treasuryDir, heartbeatData);
|
|
42
|
+
return { cultivationInstalled, heartbeat: heartbeatData, campaigns, treasury };
|
|
43
|
+
}
|
|
44
|
+
/** Read campaign JSON files from a campaigns directory. */
|
|
45
|
+
async function readCampaigns(campaignsDir) {
|
|
46
|
+
const campaigns = [];
|
|
47
|
+
try {
|
|
48
|
+
if (!existsSync(campaignsDir))
|
|
49
|
+
return campaigns;
|
|
50
|
+
const files = await readdir(campaignsDir);
|
|
51
|
+
for (const file of files) {
|
|
52
|
+
if (!file.endsWith('.json'))
|
|
53
|
+
continue;
|
|
54
|
+
try {
|
|
55
|
+
const content = await readFile(join(campaignsDir, file), 'utf-8');
|
|
56
|
+
campaigns.push(JSON.parse(content));
|
|
57
|
+
}
|
|
58
|
+
catch { /* skip malformed campaign files */ }
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch { /* no campaigns directory */ }
|
|
62
|
+
return campaigns;
|
|
63
|
+
}
|
|
64
|
+
/** Filename for the cached summary written by the daemon (v22.1 M2). */
|
|
65
|
+
export const TREASURY_SUMMARY_FILE = 'treasury-summary.json';
|
|
66
|
+
/**
|
|
67
|
+
* Read treasury summary. Tries the O(1) cached summary file first (written by
|
|
68
|
+
* the heartbeat daemon after each financial operation). Falls back to O(n)
|
|
69
|
+
* JSONL log scan if the summary file doesn't exist or is unreadable.
|
|
70
|
+
*/
|
|
71
|
+
export async function readTreasurySummary(treasuryDir, heartbeatData) {
|
|
72
|
+
// O(1) path: read cached summary (written by daemon — ADR-1 single writer)
|
|
73
|
+
const summaryPath = join(treasuryDir, TREASURY_SUMMARY_FILE);
|
|
74
|
+
try {
|
|
75
|
+
if (existsSync(summaryPath)) {
|
|
76
|
+
const raw = await readFile(summaryPath, 'utf-8');
|
|
77
|
+
const cached = JSON.parse(raw);
|
|
78
|
+
// Validate it has the required shape (at minimum, spend + revenue)
|
|
79
|
+
if (typeof cached.spend === 'number' && typeof cached.revenue === 'number') {
|
|
80
|
+
return {
|
|
81
|
+
revenue: cached.revenue,
|
|
82
|
+
spend: cached.spend,
|
|
83
|
+
net: cached.net ?? cached.revenue - cached.spend,
|
|
84
|
+
roas: cached.roas ?? (cached.spend > 0 ? cached.revenue / cached.spend : 0),
|
|
85
|
+
budgetRemaining: cached.budgetRemaining ?? 0,
|
|
86
|
+
stablecoinBalance: cached.stablecoinBalance ?? null,
|
|
87
|
+
pendingOfframps: cached.pendingOfframps ?? 0,
|
|
88
|
+
bankAvailable: cached.bankAvailable ?? null,
|
|
89
|
+
bankReserved: cached.bankReserved ?? null,
|
|
90
|
+
runwayDays: cached.runwayDays ?? null,
|
|
91
|
+
fundingState: cached.fundingState ?? null,
|
|
92
|
+
nextTreasuryEvent: cached.nextTreasuryEvent ?? null,
|
|
93
|
+
unsettledInvoices: cached.unsettledInvoices ?? 0,
|
|
94
|
+
reconciliationStatus: cached.reconciliationStatus ?? null,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch { /* summary file missing or corrupt — fall through to JSONL scan */ }
|
|
100
|
+
// O(n) fallback: scan JSONL logs directly
|
|
101
|
+
return readTreasurySummaryFromLogs(treasuryDir, heartbeatData);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* O(n) JSONL log scan — the original read path before v22.1.
|
|
105
|
+
* Used as fallback when treasury-summary.json is unavailable.
|
|
106
|
+
*/
|
|
107
|
+
export async function readTreasurySummaryFromLogs(treasuryDir, heartbeatData) {
|
|
108
|
+
try {
|
|
109
|
+
const spendLogPath = join(treasuryDir, 'spend-log.jsonl');
|
|
110
|
+
const revenueLogPath = join(treasuryDir, 'revenue-log.jsonl');
|
|
111
|
+
let totalSpendCents = 0;
|
|
112
|
+
let totalRevenueCents = 0;
|
|
113
|
+
if (existsSync(spendLogPath)) {
|
|
114
|
+
const lines = (await readFile(spendLogPath, 'utf-8')).trim().split('\n').filter(Boolean);
|
|
115
|
+
for (const line of lines) {
|
|
116
|
+
try {
|
|
117
|
+
const entry = JSON.parse(line);
|
|
118
|
+
totalSpendCents += Math.max(0, entry.amountCents ?? 0);
|
|
119
|
+
}
|
|
120
|
+
catch { /* skip malformed lines */ }
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (existsSync(revenueLogPath)) {
|
|
124
|
+
const lines = (await readFile(revenueLogPath, 'utf-8')).trim().split('\n').filter(Boolean);
|
|
125
|
+
for (const line of lines) {
|
|
126
|
+
try {
|
|
127
|
+
const entry = JSON.parse(line);
|
|
128
|
+
totalRevenueCents += entry.amountCents ?? 0;
|
|
129
|
+
}
|
|
130
|
+
catch { /* skip malformed lines */ }
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const net = totalRevenueCents - totalSpendCents;
|
|
134
|
+
const roas = totalSpendCents > 0 ? totalRevenueCents / totalSpendCents : 0;
|
|
135
|
+
let budgetRemaining = 0;
|
|
136
|
+
const budgetsFile = join(treasuryDir, 'budgets.json');
|
|
137
|
+
if (existsSync(budgetsFile)) {
|
|
138
|
+
try {
|
|
139
|
+
const budgetData = JSON.parse(await readFile(budgetsFile, 'utf-8'));
|
|
140
|
+
budgetRemaining = (budgetData.totalBudgetCents ?? 0) - totalSpendCents;
|
|
141
|
+
}
|
|
142
|
+
catch { /* skip malformed budgets */ }
|
|
143
|
+
}
|
|
144
|
+
// ── Stablecoin funding data ──
|
|
145
|
+
let stablecoinBalance = null;
|
|
146
|
+
let pendingOfframps = 0;
|
|
147
|
+
let bankAvailable = null;
|
|
148
|
+
let bankReserved = null;
|
|
149
|
+
let runwayDays = null;
|
|
150
|
+
let fundingState = null;
|
|
151
|
+
let nextTreasuryEvent = null;
|
|
152
|
+
let unsettledInvoices = 0;
|
|
153
|
+
let reconciliationStatus = null;
|
|
154
|
+
const fundingConfigPath = join(treasuryDir, 'funding-config.json.enc');
|
|
155
|
+
if (existsSync(fundingConfigPath) && heartbeatData) {
|
|
156
|
+
const hb = heartbeatData;
|
|
157
|
+
if (typeof hb.stablecoinBalanceCents === 'number')
|
|
158
|
+
stablecoinBalance = hb.stablecoinBalanceCents;
|
|
159
|
+
if (typeof hb.bankAvailableCents === 'number')
|
|
160
|
+
bankAvailable = hb.bankAvailableCents;
|
|
161
|
+
if (typeof hb.bankReservedCents === 'number')
|
|
162
|
+
bankReserved = hb.bankReservedCents;
|
|
163
|
+
if (typeof hb.runwayDays === 'number')
|
|
164
|
+
runwayDays = hb.runwayDays;
|
|
165
|
+
if (typeof hb.fundingState === 'string')
|
|
166
|
+
fundingState = hb.fundingState;
|
|
167
|
+
if (typeof hb.nextTreasuryEvent === 'string')
|
|
168
|
+
nextTreasuryEvent = hb.nextTreasuryEvent;
|
|
169
|
+
}
|
|
170
|
+
const fundingPlansLog = join(treasuryDir, 'funding-plans.jsonl');
|
|
171
|
+
if (existsSync(fundingPlansLog)) {
|
|
172
|
+
try {
|
|
173
|
+
const lines = (await readFile(fundingPlansLog, 'utf-8')).trim().split('\n').filter(Boolean);
|
|
174
|
+
for (const line of lines) {
|
|
175
|
+
try {
|
|
176
|
+
const plan = JSON.parse(line);
|
|
177
|
+
if (plan.status === 'PENDING_SETTLEMENT' || plan.status === 'APPROVED')
|
|
178
|
+
unsettledInvoices++;
|
|
179
|
+
}
|
|
180
|
+
catch { /* skip malformed lines */ }
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch { /* skip read errors */ }
|
|
184
|
+
}
|
|
185
|
+
const transfersLog = join(treasuryDir, 'transfers.jsonl');
|
|
186
|
+
if (existsSync(transfersLog)) {
|
|
187
|
+
try {
|
|
188
|
+
const lines = (await readFile(transfersLog, 'utf-8')).trim().split('\n').filter(Boolean);
|
|
189
|
+
for (const line of lines) {
|
|
190
|
+
try {
|
|
191
|
+
const transfer = JSON.parse(line);
|
|
192
|
+
if ((transfer.status === 'pending' || transfer.status === 'processing')
|
|
193
|
+
&& transfer.direction === 'crypto_to_fiat')
|
|
194
|
+
pendingOfframps++;
|
|
195
|
+
}
|
|
196
|
+
catch { /* skip malformed lines */ }
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch { /* skip read errors */ }
|
|
200
|
+
}
|
|
201
|
+
const reconciliationLog = join(treasuryDir, 'reconciliation.jsonl');
|
|
202
|
+
if (existsSync(reconciliationLog)) {
|
|
203
|
+
try {
|
|
204
|
+
const lines = (await readFile(reconciliationLog, 'utf-8')).trim().split('\n').filter(Boolean);
|
|
205
|
+
if (lines.length > 0) {
|
|
206
|
+
const last = JSON.parse(lines[lines.length - 1]);
|
|
207
|
+
if (last.result === 'MATCHED' || last.result === 'WITHIN_THRESHOLD')
|
|
208
|
+
reconciliationStatus = 'matched';
|
|
209
|
+
else if (last.result === 'MISMATCH')
|
|
210
|
+
reconciliationStatus = 'mismatch';
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
catch { /* skip read errors */ }
|
|
214
|
+
}
|
|
215
|
+
if (fundingState === null && (stablecoinBalance !== null || bankAvailable !== null)) {
|
|
216
|
+
if (runwayDays !== null && runwayDays < 3)
|
|
217
|
+
fundingState = 'frozen';
|
|
218
|
+
else if (runwayDays !== null && runwayDays < 7)
|
|
219
|
+
fundingState = 'degraded';
|
|
220
|
+
else
|
|
221
|
+
fundingState = 'healthy';
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
revenue: totalRevenueCents, spend: totalSpendCents, net, roas, budgetRemaining,
|
|
225
|
+
stablecoinBalance, pendingOfframps,
|
|
226
|
+
bankAvailable, bankReserved,
|
|
227
|
+
runwayDays, fundingState,
|
|
228
|
+
nextTreasuryEvent, unsettledInvoices,
|
|
229
|
+
reconciliationStatus,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
return { ...EMPTY_TREASURY };
|
|
234
|
+
}
|
|
235
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update mechanisms — methodology update (replaces /void git-fetch),
|
|
3
|
+
* self-update, and extension update.
|
|
4
|
+
*/
|
|
5
|
+
export interface UpdatePlan {
|
|
6
|
+
added: string[];
|
|
7
|
+
modified: string[];
|
|
8
|
+
removed: string[];
|
|
9
|
+
unchanged: number;
|
|
10
|
+
}
|
|
11
|
+
export interface UpdateResult {
|
|
12
|
+
applied: boolean;
|
|
13
|
+
plan: UpdatePlan;
|
|
14
|
+
newVersion: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Diff methodology source against project files.
|
|
18
|
+
* Returns a plan showing what would change.
|
|
19
|
+
*/
|
|
20
|
+
export declare function diffMethodology(projectDir: string): Promise<UpdatePlan>;
|
|
21
|
+
/**
|
|
22
|
+
* Apply the update plan — copy new/modified files from source to project.
|
|
23
|
+
* Does NOT delete removed files (user may have customizations).
|
|
24
|
+
*/
|
|
25
|
+
export declare function applyUpdate(projectDir: string): Promise<UpdateResult>;
|
|
26
|
+
export declare function selfUpdate(): {
|
|
27
|
+
success: boolean;
|
|
28
|
+
message: string;
|
|
29
|
+
};
|