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,614 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* VoidForge CLI — v21.0 The Extraction
|
|
4
|
+
*
|
|
5
|
+
* npx voidforge Launch wizard (browser UI at :3141)
|
|
6
|
+
* npx voidforge init Create new project (Gandalf flow)
|
|
7
|
+
* npx voidforge init --headless Create project without browser
|
|
8
|
+
* npx voidforge init --core Minimal methodology (no Holocron, no patterns)
|
|
9
|
+
* npx voidforge update Update project methodology (Bombadil)
|
|
10
|
+
* npx voidforge update --self Update the wizard itself
|
|
11
|
+
* npx voidforge update --extensions Update all installed extensions
|
|
12
|
+
* npx voidforge install <ext> Add extension to current project
|
|
13
|
+
* npx voidforge uninstall <ext> Remove extension from current project
|
|
14
|
+
* npx voidforge deploy Deploy project (Haku)
|
|
15
|
+
* npx voidforge doctor Check versions, compatibility, health
|
|
16
|
+
* npx voidforge migrate Migrate v20.x project to v21.0
|
|
17
|
+
* npx voidforge migrate treasury Migrate global treasury to per-project (v22.1)
|
|
18
|
+
* npx voidforge version Show wizard + methodology versions
|
|
19
|
+
* npx voidforge templates List available project templates
|
|
20
|
+
*/
|
|
21
|
+
import { existsSync } from 'node:fs';
|
|
22
|
+
import { readFile } from 'node:fs/promises';
|
|
23
|
+
import { join, resolve } from 'node:path';
|
|
24
|
+
import { execSync } from 'node:child_process';
|
|
25
|
+
const args = process.argv.slice(2);
|
|
26
|
+
const command = args[0];
|
|
27
|
+
// ── Version ──────────────────────────────────────────────
|
|
28
|
+
async function getPackageVersion() {
|
|
29
|
+
const dir = import.meta.dirname ?? new URL('.', import.meta.url).pathname;
|
|
30
|
+
// Try ../package.json (dev: scripts/) then ../../package.json (dist: dist/scripts/)
|
|
31
|
+
for (const rel of ['..', '../..']) {
|
|
32
|
+
const pkgPath = resolve(dir, rel, 'package.json');
|
|
33
|
+
try {
|
|
34
|
+
const raw = await readFile(pkgPath, 'utf-8');
|
|
35
|
+
const pkg = JSON.parse(raw);
|
|
36
|
+
if ((pkg.name === 'voidforge-build' || pkg.name === '@voidforge/cli' || pkg.name === 'thevoidforge' || pkg.name === 'voidforge') && pkg.version) {
|
|
37
|
+
// Migration banner for legacy installs — printed on every run until user migrates.
|
|
38
|
+
if (pkg.name === 'thevoidforge' || pkg.name === '@voidforge/cli') {
|
|
39
|
+
process.stderr.write(`\n[VoidForge] You are running the legacy \`${pkg.name}\` CLI. Migrate:\n` +
|
|
40
|
+
` npm uninstall -g ${pkg.name}\n` +
|
|
41
|
+
` npm install -g voidforge-build@latest\n\n`);
|
|
42
|
+
}
|
|
43
|
+
return pkg.version;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return 'unknown';
|
|
51
|
+
}
|
|
52
|
+
// ── Commands ─────────────────────────────────────────────
|
|
53
|
+
async function cmdVersion() {
|
|
54
|
+
const ver = await getPackageVersion();
|
|
55
|
+
const nodeVer = process.version;
|
|
56
|
+
console.log(`VoidForge v${ver}`);
|
|
57
|
+
console.log(`Methodology v${ver}`);
|
|
58
|
+
console.log(`Node ${nodeVer}`);
|
|
59
|
+
}
|
|
60
|
+
async function cmdDoctor() {
|
|
61
|
+
const ver = await getPackageVersion();
|
|
62
|
+
const nodeVer = process.version;
|
|
63
|
+
const nodeMajor = parseInt(nodeVer.slice(1), 10);
|
|
64
|
+
const { findProjectRoot, getGlobalDir, getVaultPath, readMarker } = await import('../wizard/lib/marker.js');
|
|
65
|
+
const { readRegistry } = await import('../wizard/lib/project-registry.js');
|
|
66
|
+
console.log('\nVoidForge Doctor\n');
|
|
67
|
+
// Node.js check
|
|
68
|
+
const nodeOk = nodeMajor >= 20 && nodeMajor < 25;
|
|
69
|
+
console.log(`${nodeOk ? '✓' : '✗'} Node.js ${nodeVer} (required: >=20.11.0 <25.0.0)`);
|
|
70
|
+
// Wizard install
|
|
71
|
+
console.log(`✓ Wizard v${ver}`);
|
|
72
|
+
// Global config
|
|
73
|
+
const globalDir = getGlobalDir();
|
|
74
|
+
const globalExists = existsSync(globalDir);
|
|
75
|
+
console.log(`${globalExists ? '✓' : '✗'} Global config at ${globalDir}`);
|
|
76
|
+
if (globalExists) {
|
|
77
|
+
const vaultExists = existsSync(getVaultPath());
|
|
78
|
+
console.log(` - Vault: ${vaultExists ? '✓ (encrypted)' : '✗ not found'}`);
|
|
79
|
+
const projects = await readRegistry();
|
|
80
|
+
console.log(` - Projects: ${projects.length} registered`);
|
|
81
|
+
}
|
|
82
|
+
// Current project
|
|
83
|
+
const projectRoot = findProjectRoot();
|
|
84
|
+
if (projectRoot) {
|
|
85
|
+
const marker = await readMarker(projectRoot);
|
|
86
|
+
console.log(`✓ Current project: ${projectRoot}`);
|
|
87
|
+
if (marker) {
|
|
88
|
+
console.log(` - Marker: v${marker.version} (${marker.tier})`);
|
|
89
|
+
if (marker.extensions.length > 0) {
|
|
90
|
+
console.log(` - Extensions: ${marker.extensions.join(', ')}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log('— No VoidForge project detected in current directory tree');
|
|
96
|
+
}
|
|
97
|
+
console.log('');
|
|
98
|
+
}
|
|
99
|
+
async function cmdTemplates() {
|
|
100
|
+
const { listTemplates } = await import('../wizard/lib/templates.js');
|
|
101
|
+
console.log('\nVoidForge Project Templates\n');
|
|
102
|
+
for (const t of listTemplates()) {
|
|
103
|
+
console.log(` ${t.id.padEnd(12)} ${t.name}`);
|
|
104
|
+
console.log(` ${''.padEnd(12)} ${t.description}\n`);
|
|
105
|
+
}
|
|
106
|
+
console.log('Usage: npx voidforge init --template <id>\n');
|
|
107
|
+
}
|
|
108
|
+
async function cmdDeploy() {
|
|
109
|
+
const isHeadless = args.includes('--headless');
|
|
110
|
+
const isSelfDeploy = args.includes('--self');
|
|
111
|
+
const isEnvOnly = args.includes('--env-only');
|
|
112
|
+
const projectDirFlag = args.find((a, i) => args[i - 1] === '--dir');
|
|
113
|
+
const hostFlag = args.find((a, i) => args[i - 1] === '--host');
|
|
114
|
+
if (isEnvOnly) {
|
|
115
|
+
const { envOnlyDeploy } = await import('../wizard/lib/headless-deploy.js');
|
|
116
|
+
await envOnlyDeploy(projectDirFlag);
|
|
117
|
+
}
|
|
118
|
+
else if (isSelfDeploy) {
|
|
119
|
+
const { generateCaddyTemplate } = await import('../wizard/lib/provisioners/self-deploy.js');
|
|
120
|
+
const domain = hostFlag ?? 'forge.yourdomain.com';
|
|
121
|
+
console.log('\nVoidForge Self-Deploy\n');
|
|
122
|
+
console.log('Generate the Caddy config and provision script with:');
|
|
123
|
+
console.log(' npx voidforge deploy --self --host forge.yourdomain.com\n');
|
|
124
|
+
console.log('Caddy template:\n');
|
|
125
|
+
console.log(generateCaddyTemplate(domain));
|
|
126
|
+
}
|
|
127
|
+
else if (isHeadless) {
|
|
128
|
+
const { headlessDeploy } = await import('../wizard/lib/headless-deploy.js');
|
|
129
|
+
await headlessDeploy(projectDirFlag);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
await launchWizard('deploy');
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
async function launchWizard(mode = 'init') {
|
|
136
|
+
const port = parseInt(process.env['VOIDFORGE_PORT'] ?? '3141', 10);
|
|
137
|
+
const isRemote = args.includes('--remote');
|
|
138
|
+
const isLan = args.includes('--lan');
|
|
139
|
+
const hostFlag = args.find((a, i) => args[i - 1] === '--host');
|
|
140
|
+
const wizardNames = {
|
|
141
|
+
init: { name: 'Gandalf', path: '/' },
|
|
142
|
+
deploy: { name: 'Haku', path: '/deploy.html' },
|
|
143
|
+
};
|
|
144
|
+
const wizard = wizardNames[mode];
|
|
145
|
+
const { startServer } = await import('../wizard/server.js');
|
|
146
|
+
const { openBrowser } = await import('../wizard/lib/open-browser.js');
|
|
147
|
+
const protocol = isRemote ? 'https' : 'http';
|
|
148
|
+
const host = isRemote ? (hostFlag ?? 'localhost') : 'localhost';
|
|
149
|
+
const url = `${protocol}://${host}:${port}${wizard.path}`;
|
|
150
|
+
const modeLabel = isRemote ? ' (Remote Mode)' : isLan ? ' (LAN Mode)' : '';
|
|
151
|
+
console.log('');
|
|
152
|
+
console.log(` VoidForge — ${wizard.name}${modeLabel}`);
|
|
153
|
+
console.log(` Server running at ${url}`);
|
|
154
|
+
if (isLan) {
|
|
155
|
+
console.log(' LAN Mode: Listening on all interfaces (0.0.0.0)');
|
|
156
|
+
console.log(' Access from private network: http://<your-ip>:' + port + wizard.path);
|
|
157
|
+
console.log(' Auth: optional password (no TOTP, no Caddy)');
|
|
158
|
+
}
|
|
159
|
+
if (isRemote)
|
|
160
|
+
console.log(' Authentication: REQUIRED (5-layer security active)');
|
|
161
|
+
console.log(' Press Ctrl+C to stop');
|
|
162
|
+
console.log('');
|
|
163
|
+
const serverOptions = isRemote ? { remote: true, host: hostFlag }
|
|
164
|
+
: isLan ? { lan: true }
|
|
165
|
+
: undefined;
|
|
166
|
+
await startServer(port, serverOptions);
|
|
167
|
+
if (!isRemote && !isLan)
|
|
168
|
+
await openBrowser(url);
|
|
169
|
+
}
|
|
170
|
+
async function cmdInitHeadless() {
|
|
171
|
+
const nameFlag = args.find((a, i) => args[i - 1] === '--name');
|
|
172
|
+
const dirFlag = args.find((a, i) => args[i - 1] === '--dir');
|
|
173
|
+
const onelinerFlag = args.find((a, i) => args[i - 1] === '--oneliner');
|
|
174
|
+
const domainFlag = args.find((a, i) => args[i - 1] === '--domain');
|
|
175
|
+
const repoFlag = args.find((a, i) => args[i - 1] === '--repo');
|
|
176
|
+
const isCore = args.includes('--core');
|
|
177
|
+
if (!nameFlag) {
|
|
178
|
+
console.error('Error: --name is required for headless init.');
|
|
179
|
+
console.error('Usage: npx voidforge init --headless --name "My Project" [--dir path] [--oneliner "..."]');
|
|
180
|
+
process.exit(1);
|
|
181
|
+
}
|
|
182
|
+
const defaultDir = join(process.env['HOME'] ?? process.env['USERPROFILE'] ?? '.', 'Projects', nameFlag.replace(/[^a-zA-Z0-9-_ ]/g, '').replace(/\s+/g, '-').toLowerCase());
|
|
183
|
+
const directory = dirFlag ?? defaultDir;
|
|
184
|
+
const { createProject } = await import('../wizard/lib/project-init.js');
|
|
185
|
+
const result = await createProject({
|
|
186
|
+
name: nameFlag,
|
|
187
|
+
directory,
|
|
188
|
+
oneliner: onelinerFlag,
|
|
189
|
+
domain: domainFlag,
|
|
190
|
+
repoUrl: repoFlag,
|
|
191
|
+
core: isCore,
|
|
192
|
+
});
|
|
193
|
+
console.log('');
|
|
194
|
+
console.log(` VoidForge — Project Created`);
|
|
195
|
+
console.log(` Name: ${nameFlag}`);
|
|
196
|
+
console.log(` Directory: ${result.projectDir}`);
|
|
197
|
+
console.log(` Files: ${result.filesCreated} methodology files`);
|
|
198
|
+
console.log(` Marker: ${result.markerId}`);
|
|
199
|
+
console.log('');
|
|
200
|
+
console.log(' Next: cd into the project and start building with Claude Code.');
|
|
201
|
+
console.log('');
|
|
202
|
+
}
|
|
203
|
+
async function cmdMigrateTreasury() {
|
|
204
|
+
const isDryRun = args.includes('--dry-run');
|
|
205
|
+
// Parse --project=<id> or --project <id>
|
|
206
|
+
let projectId;
|
|
207
|
+
for (let i = 2; i < args.length; i++) {
|
|
208
|
+
if (args[i].startsWith('--project=')) {
|
|
209
|
+
projectId = args[i].slice('--project='.length);
|
|
210
|
+
}
|
|
211
|
+
else if (args[i] === '--project' && args[i + 1]) {
|
|
212
|
+
projectId = args[i + 1];
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (!projectId) {
|
|
216
|
+
console.error('Error: --project=<id> is required.');
|
|
217
|
+
console.error('Usage: npx voidforge migrate treasury --project=<id> [--dry-run]');
|
|
218
|
+
console.error('\nList projects: npx voidforge doctor');
|
|
219
|
+
process.exit(1);
|
|
220
|
+
}
|
|
221
|
+
const { preFlightCheck, migrateTreasury } = await import('../wizard/lib/treasury-migrator.js');
|
|
222
|
+
const preflight = await preFlightCheck(projectId);
|
|
223
|
+
console.log('\n VoidForge v22.1 — Treasury Migration\n');
|
|
224
|
+
console.log(` Project: ${preflight.project?.name ?? projectId}`);
|
|
225
|
+
console.log(` ID: ${projectId}`);
|
|
226
|
+
if (preflight.context) {
|
|
227
|
+
console.log(` Dir: ${preflight.context.directory}`);
|
|
228
|
+
console.log(` Treasury: ${preflight.context.treasuryDir}`);
|
|
229
|
+
}
|
|
230
|
+
console.log(` Global: ${preflight.globalTreasuryDir} (${preflight.globalFileCount} files)`);
|
|
231
|
+
console.log('');
|
|
232
|
+
// Show warnings
|
|
233
|
+
for (const warning of preflight.warnings) {
|
|
234
|
+
console.log(` Warning: ${warning}`);
|
|
235
|
+
}
|
|
236
|
+
// Check for errors
|
|
237
|
+
if (preflight.errors.length > 0) {
|
|
238
|
+
for (const error of preflight.errors) {
|
|
239
|
+
console.error(` Error: ${error}`);
|
|
240
|
+
}
|
|
241
|
+
console.error('\n Migration aborted. Fix the errors above and retry.\n');
|
|
242
|
+
process.exit(1);
|
|
243
|
+
}
|
|
244
|
+
if (!preflight.context) {
|
|
245
|
+
console.error(' Error: Could not create project context.');
|
|
246
|
+
process.exit(1);
|
|
247
|
+
}
|
|
248
|
+
console.log(' Plan:');
|
|
249
|
+
if (preflight.globalTreasuryExists) {
|
|
250
|
+
console.log(' 1. Archive global treasury to ~/.voidforge/treasury-pre-v22/');
|
|
251
|
+
}
|
|
252
|
+
console.log(` ${preflight.globalTreasuryExists ? '2' : '1'}. Create per-project treasury at ${preflight.context.treasuryDir}`);
|
|
253
|
+
console.log(` ${preflight.globalTreasuryExists ? '3' : '2'}. Initialize genesis log files (clean break — no data copy)`);
|
|
254
|
+
console.log(` ${preflight.globalTreasuryExists ? '4' : '3'}. Set 0700 permissions`);
|
|
255
|
+
console.log(` ${preflight.globalTreasuryExists ? '5' : '4'}. Write migration manifest (.migrated)`);
|
|
256
|
+
if (preflight.globalTreasuryExists) {
|
|
257
|
+
console.log(` ${preflight.globalTreasuryExists ? '6' : '5'}. Validate archived hash chains`);
|
|
258
|
+
}
|
|
259
|
+
console.log('');
|
|
260
|
+
if (isDryRun) {
|
|
261
|
+
console.log(' (dry-run — no changes made)\n');
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
const result = await migrateTreasury(preflight.context);
|
|
265
|
+
console.log(' Migration complete.');
|
|
266
|
+
console.log(` Archive: ${result.archiveDir}`);
|
|
267
|
+
console.log(` Treasury: ${result.treasuryDir}`);
|
|
268
|
+
console.log(` Spend log: ${result.manifest.spendLogEntries} archived entries (chain ${result.manifest.spendLogHashValid ? 'valid' : 'BROKEN'})`);
|
|
269
|
+
console.log(` Revenue log: ${result.manifest.revenueLogEntries} archived entries (chain ${result.manifest.revenueLogHashValid ? 'valid' : 'BROKEN'})`);
|
|
270
|
+
console.log(` Source files: ${result.manifest.sourceFileCount}`);
|
|
271
|
+
console.log('');
|
|
272
|
+
console.log(' Per-project logs start fresh (genesis hash). Global data preserved in archive.');
|
|
273
|
+
console.log(' To rollback: move archive back to ~/.voidforge/treasury/\n');
|
|
274
|
+
}
|
|
275
|
+
function showHelp() {
|
|
276
|
+
console.log('VoidForge — From nothing, everything.\n');
|
|
277
|
+
console.log('Usage: npx voidforge <command> [options]\n');
|
|
278
|
+
console.log('Commands:');
|
|
279
|
+
console.log(' (no command) Launch the wizard (browser UI)');
|
|
280
|
+
console.log(' init Create a new project');
|
|
281
|
+
console.log(' update Update project methodology');
|
|
282
|
+
console.log(' update --self Update the wizard itself');
|
|
283
|
+
console.log(' install <ext> Add extension to current project');
|
|
284
|
+
console.log(' uninstall <ext> Remove extension from current project');
|
|
285
|
+
console.log(' deploy Deploy project');
|
|
286
|
+
console.log(' migrate Migrate v20.x project to v21.0');
|
|
287
|
+
console.log(' migrate treasury Migrate global treasury to per-project (v22.1)');
|
|
288
|
+
console.log(' herald Silver Surfer — select optimal agent roster via Haiku');
|
|
289
|
+
console.log(' doctor Check versions, compatibility, health');
|
|
290
|
+
console.log(' version Show version information');
|
|
291
|
+
console.log(' templates List project templates');
|
|
292
|
+
console.log('\nOptions:');
|
|
293
|
+
console.log(' --help, -h Show this help');
|
|
294
|
+
console.log(' --remote Launch in remote mode (0.0.0.0 + auth)');
|
|
295
|
+
console.log(' --lan Launch in LAN mode');
|
|
296
|
+
console.log(' --headless CLI-only (no browser)');
|
|
297
|
+
console.log(' --self Deploy VoidForge itself');
|
|
298
|
+
console.log(' --env-only Write vault credentials to .env');
|
|
299
|
+
console.log('');
|
|
300
|
+
}
|
|
301
|
+
// ── Router ───────────────────────────────────────────────
|
|
302
|
+
async function main() {
|
|
303
|
+
try {
|
|
304
|
+
switch (command) {
|
|
305
|
+
case 'version':
|
|
306
|
+
case '--version':
|
|
307
|
+
case '-v':
|
|
308
|
+
await cmdVersion();
|
|
309
|
+
break;
|
|
310
|
+
case 'doctor':
|
|
311
|
+
await cmdDoctor();
|
|
312
|
+
break;
|
|
313
|
+
case 'templates':
|
|
314
|
+
await cmdTemplates();
|
|
315
|
+
break;
|
|
316
|
+
case 'deploy':
|
|
317
|
+
await cmdDeploy();
|
|
318
|
+
break;
|
|
319
|
+
case 'herald': {
|
|
320
|
+
// Silver Surfer — Herald dispatch: Haiku pre-scan selects optimal agent roster
|
|
321
|
+
const commandFlag = args.find((_a, i) => args[i - 1] === '--command') ?? '';
|
|
322
|
+
const focusFlag = args.find((_a, i) => args[i - 1] === '--focus') ?? undefined;
|
|
323
|
+
const jsonMode = args.includes('--json');
|
|
324
|
+
try {
|
|
325
|
+
const { gatherHeraldContext, runHerald } = await import('../wizard/lib/herald.js');
|
|
326
|
+
const { loadAgentRegistry, getRegistrySummary } = await import('../wizard/lib/agent-registry.js');
|
|
327
|
+
const context = await gatherHeraldContext(commandFlag, '', focusFlag);
|
|
328
|
+
const registry = await loadAgentRegistry();
|
|
329
|
+
const summary = getRegistrySummary(registry);
|
|
330
|
+
const result = await runHerald(context, registry);
|
|
331
|
+
if (jsonMode) {
|
|
332
|
+
console.log(JSON.stringify(result));
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
console.log(`\n Silver Surfer scanned ${registry.length} agents for ${commandFlag || 'unknown command'}`);
|
|
336
|
+
if (focusFlag)
|
|
337
|
+
console.log(` Focus bias: "${focusFlag}"`);
|
|
338
|
+
console.log(` Selected ${result.estimatedAgents} agents: ${result.roster.join(', ')}`);
|
|
339
|
+
console.log(` Reasoning: ${result.reasoning}\n`);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
catch (err) {
|
|
343
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
344
|
+
if (jsonMode) {
|
|
345
|
+
console.log(JSON.stringify({ roster: [], reasoning: `Herald unavailable: ${msg}`, estimatedAgents: 0 }));
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
console.log(`\n Silver Surfer unavailable: ${msg}\n Commands will use their default agent roster.\n`);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
break;
|
|
352
|
+
}
|
|
353
|
+
case 'install': {
|
|
354
|
+
const extName = args[1];
|
|
355
|
+
if (!extName) {
|
|
356
|
+
const { listExtensions } = await import('../wizard/lib/extensions.js');
|
|
357
|
+
console.log('\nAvailable extensions:\n');
|
|
358
|
+
for (const ext of listExtensions()) {
|
|
359
|
+
console.log(` ${ext.name.padEnd(16)} ${ext.description}`);
|
|
360
|
+
}
|
|
361
|
+
console.log('\nUsage: npx voidforge install <extension>\n');
|
|
362
|
+
break;
|
|
363
|
+
}
|
|
364
|
+
const { installExtension } = await import('../wizard/lib/extensions.js');
|
|
365
|
+
const { findProjectRoot } = await import('../wizard/lib/marker.js');
|
|
366
|
+
const projectRoot = findProjectRoot();
|
|
367
|
+
if (!projectRoot) {
|
|
368
|
+
console.error('Not a VoidForge project — run `npx voidforge init` first.');
|
|
369
|
+
process.exit(1);
|
|
370
|
+
}
|
|
371
|
+
const result = await installExtension(projectRoot, extName);
|
|
372
|
+
console.log(`\n Extension "${extName}" installed (${result.filesCreated} files created).\n`);
|
|
373
|
+
break;
|
|
374
|
+
}
|
|
375
|
+
case 'uninstall': {
|
|
376
|
+
const extToRemove = args[1];
|
|
377
|
+
if (!extToRemove) {
|
|
378
|
+
console.error('Usage: npx voidforge uninstall <extension>');
|
|
379
|
+
process.exit(1);
|
|
380
|
+
}
|
|
381
|
+
const { uninstallExtension } = await import('../wizard/lib/extensions.js');
|
|
382
|
+
const { findProjectRoot: findRoot } = await import('../wizard/lib/marker.js');
|
|
383
|
+
const root = findRoot();
|
|
384
|
+
if (!root) {
|
|
385
|
+
console.error('Not a VoidForge project — run `npx voidforge init` first.');
|
|
386
|
+
process.exit(1);
|
|
387
|
+
}
|
|
388
|
+
await uninstallExtension(root, extToRemove);
|
|
389
|
+
console.log(`\n Extension "${extToRemove}" uninstalled.\n`);
|
|
390
|
+
break;
|
|
391
|
+
}
|
|
392
|
+
case 'update': {
|
|
393
|
+
if (args.includes('--self')) {
|
|
394
|
+
const { selfUpdate } = await import('../wizard/lib/updater.js');
|
|
395
|
+
const result = selfUpdate();
|
|
396
|
+
console.log(result.message);
|
|
397
|
+
process.exit(result.success ? 0 : 1);
|
|
398
|
+
}
|
|
399
|
+
// Auto-upgrade CLI if behind npm latest (unless --no-self-update)
|
|
400
|
+
if (!args.includes('--self') && !args.includes('--extensions') && !args.includes('--no-self-update')) {
|
|
401
|
+
try {
|
|
402
|
+
// Strip npm_config_* env — CLI --registry flag doesn't override env vars (SEC-R2-001).
|
|
403
|
+
// Also drop undefined values — execSync stringifies them to "undefined" (R4-CURSED-002).
|
|
404
|
+
const safeEnv = {};
|
|
405
|
+
for (const [k, v] of Object.entries(process.env)) {
|
|
406
|
+
if (v !== undefined && !/^npm_config_/i.test(k))
|
|
407
|
+
safeEnv[k] = v;
|
|
408
|
+
}
|
|
409
|
+
const npmLatest = execSync('npm view voidforge-build version --registry=https://registry.npmjs.org/ 2>/dev/null', { encoding: 'utf-8', env: safeEnv }).trim();
|
|
410
|
+
const localVersion = await getPackageVersion();
|
|
411
|
+
if (npmLatest && localVersion && localVersion !== 'unknown' && npmLatest !== localVersion) {
|
|
412
|
+
const [nMaj, nMin, nPatch] = npmLatest.split('.').map(Number);
|
|
413
|
+
const [lMaj, lMin, lPatch] = localVersion.split('.').map(Number);
|
|
414
|
+
const npmNum = nMaj * 10000 + nMin * 100 + nPatch;
|
|
415
|
+
const localNum = lMaj * 10000 + lMin * 100 + lPatch;
|
|
416
|
+
if (npmNum > localNum) {
|
|
417
|
+
console.log(`\n CLI is v${localVersion}, npm has v${npmLatest}. Upgrading...`);
|
|
418
|
+
const { selfUpdate } = await import('../wizard/lib/updater.js');
|
|
419
|
+
const upgradeResult = selfUpdate();
|
|
420
|
+
if (upgradeResult.success) {
|
|
421
|
+
console.log(` Upgraded to v${npmLatest}. Re-running update with new version...\n`);
|
|
422
|
+
// Re-exec with the new version — the new binary has the updated methodology
|
|
423
|
+
try {
|
|
424
|
+
execSync('npx voidforge-build update --no-self-update', { stdio: 'inherit' });
|
|
425
|
+
}
|
|
426
|
+
catch { /* exit code propagated */ }
|
|
427
|
+
process.exit(0);
|
|
428
|
+
}
|
|
429
|
+
else {
|
|
430
|
+
console.log(` Self-upgrade failed: ${upgradeResult.message}. Continuing with v${localVersion}...`);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
catch {
|
|
436
|
+
// npm view failed — offline or registry issue. Continue with local version.
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
if (args.includes('--extensions')) {
|
|
440
|
+
const { readRegistry } = await import('../wizard/lib/project-registry.js');
|
|
441
|
+
const { readMarker: readMkr } = await import('../wizard/lib/marker.js');
|
|
442
|
+
const { getExtension } = await import('../wizard/lib/extensions.js');
|
|
443
|
+
let updated = 0;
|
|
444
|
+
try {
|
|
445
|
+
const projects = await readRegistry();
|
|
446
|
+
for (const p of projects) {
|
|
447
|
+
const marker = await readMkr(p.directory);
|
|
448
|
+
if (!marker || marker.extensions.length === 0)
|
|
449
|
+
continue;
|
|
450
|
+
for (const extName of marker.extensions) {
|
|
451
|
+
const ext = getExtension(extName);
|
|
452
|
+
if (ext) {
|
|
453
|
+
await ext.install(p.directory);
|
|
454
|
+
updated++;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
catch {
|
|
460
|
+
// Registry read failure — non-fatal
|
|
461
|
+
}
|
|
462
|
+
console.log(`\n Extensions updated across ${updated} project(s).\n`);
|
|
463
|
+
break;
|
|
464
|
+
}
|
|
465
|
+
// Methodology update
|
|
466
|
+
const { findProjectRoot: findProjRoot } = await import('../wizard/lib/marker.js');
|
|
467
|
+
const projRoot = findProjRoot();
|
|
468
|
+
if (!projRoot) {
|
|
469
|
+
console.error('Not a VoidForge project — run `npx voidforge init` first.');
|
|
470
|
+
process.exit(1);
|
|
471
|
+
}
|
|
472
|
+
const { diffMethodology, applyUpdate } = await import('../wizard/lib/updater.js');
|
|
473
|
+
const plan = await diffMethodology(projRoot);
|
|
474
|
+
if (plan.added.length === 0 && plan.modified.length === 0) {
|
|
475
|
+
console.log('\n Methodology is up to date. No changes needed.\n');
|
|
476
|
+
break;
|
|
477
|
+
}
|
|
478
|
+
console.log('\n VoidForge Update Plan (Bombadil)\n');
|
|
479
|
+
if (plan.added.length > 0) {
|
|
480
|
+
console.log(` New files (${plan.added.length}):`);
|
|
481
|
+
for (const f of plan.added)
|
|
482
|
+
console.log(` + ${f}`);
|
|
483
|
+
}
|
|
484
|
+
if (plan.modified.length > 0) {
|
|
485
|
+
console.log(` Modified (${plan.modified.length}):`);
|
|
486
|
+
for (const f of plan.modified)
|
|
487
|
+
console.log(` ~ ${f}`);
|
|
488
|
+
}
|
|
489
|
+
if (plan.removed.length > 0) {
|
|
490
|
+
console.log(` Removed upstream (${plan.removed.length}):`);
|
|
491
|
+
for (const f of plan.removed)
|
|
492
|
+
console.log(` - ${f} (kept locally)`);
|
|
493
|
+
}
|
|
494
|
+
console.log(` Unchanged: ${plan.unchanged} files\n`);
|
|
495
|
+
const result = await applyUpdate(projRoot);
|
|
496
|
+
console.log(` Updated to v${result.newVersion}. ${plan.added.length + plan.modified.length} files changed.\n`);
|
|
497
|
+
break;
|
|
498
|
+
}
|
|
499
|
+
case 'migrate': {
|
|
500
|
+
// Subcommand: migrate treasury --project=<id>
|
|
501
|
+
if (args[1] === 'treasury') {
|
|
502
|
+
await cmdMigrateTreasury();
|
|
503
|
+
break;
|
|
504
|
+
}
|
|
505
|
+
const isDryRun = args.includes('--dry-run');
|
|
506
|
+
const migrateDir = args.find((a, i) => args[i - 1] === '--dir') ?? process.cwd();
|
|
507
|
+
const { detectV20Project, migrateProject } = await import('../wizard/lib/migrator.js');
|
|
508
|
+
const migPlan = await detectV20Project(migrateDir);
|
|
509
|
+
if (!migPlan.hasWizardDir) {
|
|
510
|
+
console.log('\n No wizard/ directory found — this is not a v20.x project.\n');
|
|
511
|
+
break;
|
|
512
|
+
}
|
|
513
|
+
console.log('\n VoidForge v21.0 — Migration\n');
|
|
514
|
+
console.log(' Your project contains an embedded wizard (v20.x model).');
|
|
515
|
+
console.log(' VoidForge now runs as a standalone application.\n');
|
|
516
|
+
console.log(' Plan:');
|
|
517
|
+
console.log(` 1. Backup wizard/ (${migPlan.wizardFileCount} files) to ~/.voidforge/migration-backup/`);
|
|
518
|
+
if (migPlan.voidforgeDeps.length > 0) {
|
|
519
|
+
console.log(` 2. Remove ${migPlan.voidforgeDeps.length} VoidForge deps from package.json`);
|
|
520
|
+
}
|
|
521
|
+
console.log(' 3. Remove wizard/ directory');
|
|
522
|
+
console.log(' 4. Add .voidforge marker file');
|
|
523
|
+
console.log(' 5. Keep all methodology files in place\n');
|
|
524
|
+
if (isDryRun) {
|
|
525
|
+
console.log(' (dry-run — no changes made)\n');
|
|
526
|
+
break;
|
|
527
|
+
}
|
|
528
|
+
const migResult = await migrateProject(migrateDir);
|
|
529
|
+
console.log(` Migration complete.`);
|
|
530
|
+
console.log(` Backup: ${migResult.backupDir}`);
|
|
531
|
+
console.log(` Files removed: ${migResult.wizardFilesRemoved}`);
|
|
532
|
+
if (migResult.depsRemoved.length > 0) {
|
|
533
|
+
console.log(` Deps removed: ${migResult.depsRemoved.join(', ')}`);
|
|
534
|
+
}
|
|
535
|
+
console.log(` Marker created: ${migResult.markerCreated}\n`);
|
|
536
|
+
console.log(' To rollback: restore from the backup directory.\n');
|
|
537
|
+
break;
|
|
538
|
+
}
|
|
539
|
+
case 'init':
|
|
540
|
+
if (args.includes('--headless')) {
|
|
541
|
+
await cmdInitHeadless();
|
|
542
|
+
}
|
|
543
|
+
else {
|
|
544
|
+
await launchWizard('init');
|
|
545
|
+
}
|
|
546
|
+
break;
|
|
547
|
+
case 'heartbeat': {
|
|
548
|
+
const subCmd = args[1]; // start | stop | status
|
|
549
|
+
if (subCmd !== 'start') {
|
|
550
|
+
console.error('Usage: voidforge heartbeat start [--project-dir <path>]');
|
|
551
|
+
process.exit(1);
|
|
552
|
+
}
|
|
553
|
+
// Parse --project-dir for per-project daemon (v22.0 ADR-041 P1-A)
|
|
554
|
+
const projectDirIdx = args.indexOf('--project-dir');
|
|
555
|
+
const projectDir = projectDirIdx >= 0 ? args[projectDirIdx + 1] : undefined;
|
|
556
|
+
if (projectDir) {
|
|
557
|
+
if (!existsSync(projectDir)) {
|
|
558
|
+
console.error(`Project directory does not exist: ${projectDir}`);
|
|
559
|
+
process.exit(1);
|
|
560
|
+
}
|
|
561
|
+
// Configure per-project paths BEFORE daemon starts
|
|
562
|
+
const { configurePaths, checkGlobalDaemon } = await import('../wizard/lib/daemon-core.js');
|
|
563
|
+
configurePaths(projectDir);
|
|
564
|
+
// Dual-daemon guard
|
|
565
|
+
const globalRunning = await checkGlobalDaemon();
|
|
566
|
+
if (globalRunning) {
|
|
567
|
+
console.error('A global heartbeat daemon is running at ~/.voidforge/run/.');
|
|
568
|
+
console.error('Stop it first: kill $(cat ~/.voidforge/run/heartbeat.pid)');
|
|
569
|
+
process.exit(1);
|
|
570
|
+
}
|
|
571
|
+
// Set project ID and dir for financial operations
|
|
572
|
+
const { setDaemonProjectId, setDaemonProjectDir } = await import('../wizard/lib/heartbeat.js');
|
|
573
|
+
setDaemonProjectDir(projectDir);
|
|
574
|
+
// Look up project in registry for ID
|
|
575
|
+
const { findByDirectory } = await import('../wizard/lib/project-registry.js');
|
|
576
|
+
const project = await findByDirectory(resolve(projectDir));
|
|
577
|
+
if (project) {
|
|
578
|
+
setDaemonProjectId(project.id);
|
|
579
|
+
console.log(` Heartbeat daemon starting for project: ${project.name} (${project.id})`);
|
|
580
|
+
}
|
|
581
|
+
else {
|
|
582
|
+
console.log(` Heartbeat daemon starting for directory: ${projectDir} (not in registry)`);
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
// Prompt for vault password
|
|
586
|
+
const { createInterface } = await import('node:readline');
|
|
587
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
588
|
+
const password = await new Promise((res) => {
|
|
589
|
+
rl.question('Vault password: ', (answer) => { rl.close(); res(answer); });
|
|
590
|
+
});
|
|
591
|
+
const { startHeartbeat } = await import('../wizard/lib/heartbeat.js');
|
|
592
|
+
await startHeartbeat(password);
|
|
593
|
+
break;
|
|
594
|
+
}
|
|
595
|
+
case '--help':
|
|
596
|
+
case '-h':
|
|
597
|
+
showHelp();
|
|
598
|
+
break;
|
|
599
|
+
case undefined:
|
|
600
|
+
// No command — launch wizard
|
|
601
|
+
await launchWizard('init');
|
|
602
|
+
break;
|
|
603
|
+
default:
|
|
604
|
+
console.error(`Unknown command: ${command}`);
|
|
605
|
+
showHelp();
|
|
606
|
+
process.exit(1);
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
catch (err) {
|
|
610
|
+
console.error('Error:', err.message);
|
|
611
|
+
process.exit(1);
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
main();
|