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,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kongo Heartbeat Jobs — Daemon-registered background jobs for Kongo integration.
|
|
3
|
+
*
|
|
4
|
+
* Three jobs that run when Kongo is connected:
|
|
5
|
+
* - kongo-signal: Hourly poll of growth signal for all active campaigns
|
|
6
|
+
* - kongo-seed: Triggered when a variant wins — pushes winning copy back
|
|
7
|
+
* - kongo-webhook: Event-driven handler for Kongo webhook events
|
|
8
|
+
*
|
|
9
|
+
* Jobs are only registered when Kongo is connected (API key in vault).
|
|
10
|
+
* All jobs skip cleanly when Kongo is not connected.
|
|
11
|
+
*
|
|
12
|
+
* PRD Reference: PRD-kongo-integration.md §4.6
|
|
13
|
+
*/
|
|
14
|
+
import { getGrowthSignal } from './analytics.js';
|
|
15
|
+
import { batchGetCampaignStatuses } from './campaigns.js';
|
|
16
|
+
import { getVariant } from './variants.js';
|
|
17
|
+
import { createWebhookRouter } from './webhooks.js';
|
|
18
|
+
/**
|
|
19
|
+
* Create Kongo job handlers for the heartbeat daemon.
|
|
20
|
+
*
|
|
21
|
+
* Usage in heartbeat.ts:
|
|
22
|
+
* ```
|
|
23
|
+
* const kongoJobs = createKongoJobs(context);
|
|
24
|
+
* scheduler.add('kongo-signal', 3_600_000, kongoJobs.signalPoll); // 1 hour
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function createKongoJobs(ctx) {
|
|
28
|
+
// Set up webhook router
|
|
29
|
+
const router = createWebhookRouter();
|
|
30
|
+
router.on('page.completed', async (payload) => {
|
|
31
|
+
ctx.logger(`Kongo page completed: ${payload.pageId}`);
|
|
32
|
+
if (ctx.onPageCompleted) {
|
|
33
|
+
await ctx.onPageCompleted(payload.pageId);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
router.on('page.failed', async (payload) => {
|
|
37
|
+
ctx.logger(`Kongo page failed: ${payload.pageId} — ${payload.data.error ?? 'Unknown error'}`);
|
|
38
|
+
if (ctx.onPageFailed) {
|
|
39
|
+
await ctx.onPageFailed(payload.pageId, payload.data.error);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
return {
|
|
43
|
+
/**
|
|
44
|
+
* kongo-signal: Poll growth signal for all active campaigns.
|
|
45
|
+
* Runs hourly. Results logged and forwarded to onSignal callback.
|
|
46
|
+
*/
|
|
47
|
+
async signalPoll() {
|
|
48
|
+
const campaigns = await batchGetCampaignStatuses(ctx.client);
|
|
49
|
+
const activeCampaigns = campaigns.filter(c => c.isPublished);
|
|
50
|
+
const signals = [];
|
|
51
|
+
for (const campaign of activeCampaigns) {
|
|
52
|
+
try {
|
|
53
|
+
const signal = await getGrowthSignal(ctx.client, campaign.campaignId, '30d');
|
|
54
|
+
// Self-marketing mode: Kongo's built-in analytics can't track /lp/ pages
|
|
55
|
+
// (served via direct render, not iframe). Merge external analytics (GA4/PostHog)
|
|
56
|
+
// for the complete picture. Subdomain analytics still come from Kongo.
|
|
57
|
+
if (ctx.selfMarketing && ctx.getExternalAnalytics && campaign.name) {
|
|
58
|
+
const slug = campaign.name.toLowerCase().replace(/[^a-z0-9-]/g, '-');
|
|
59
|
+
const external = await ctx.getExternalAnalytics(slug, '30d');
|
|
60
|
+
if (external) {
|
|
61
|
+
ctx.logger(`Kongo signal [${campaign.name}]: merging external analytics ` +
|
|
62
|
+
`(${external.views} views, ${external.conversions} conversions from /lp/ path)`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
signals.push(signal);
|
|
66
|
+
ctx.logger(`Kongo signal [${campaign.name}]: ${signal.recommendation}` +
|
|
67
|
+
(signal.winningVariantId ? ` (winner: ${signal.winningVariantId})` : ''));
|
|
68
|
+
if (ctx.onSignal) {
|
|
69
|
+
await ctx.onSignal(signal);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
ctx.logger(`Kongo signal poll failed for ${campaign.campaignId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
signals,
|
|
78
|
+
polledAt: new Date().toISOString(),
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
/**
|
|
82
|
+
* kongo-seed: Push winning variant copy back to Kongo as seed for next iteration.
|
|
83
|
+
* Triggered externally when Wayne's A/B evaluation declares a winner.
|
|
84
|
+
*/
|
|
85
|
+
async seedPush(campaignId, winningVariantId) {
|
|
86
|
+
ctx.logger(`Kongo seed push: campaign=${campaignId}, winner=${winningVariantId}`);
|
|
87
|
+
const variant = await getVariant(ctx.client, campaignId, winningVariantId);
|
|
88
|
+
if (!variant.slotValues) {
|
|
89
|
+
ctx.logger(`Kongo seed push: no slot values on variant ${winningVariantId}, skipping`);
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
ctx.logger(`Kongo seed push: extracted ${Object.keys(variant.slotValues).length} slot values from winner "${variant.label}"`);
|
|
93
|
+
// Return winning copy for the orchestrator to persist and use in next cycle.
|
|
94
|
+
// The caller (heartbeat daemon or /grow Phase 3.5) stores this in heartbeat state
|
|
95
|
+
// and feeds it into the next createPageFromPrd() cycle.
|
|
96
|
+
return variant.slotValues;
|
|
97
|
+
},
|
|
98
|
+
/**
|
|
99
|
+
* kongo-webhook: Handle incoming Kongo webhook events.
|
|
100
|
+
* Called by the daemon's HTTP callback route.
|
|
101
|
+
*/
|
|
102
|
+
async webhookHandle(rawBody, signature) {
|
|
103
|
+
if (!ctx.webhookSecret) {
|
|
104
|
+
ctx.logger('Kongo webhook received but no signing secret configured — rejecting');
|
|
105
|
+
throw new Error('Webhook signing secret not configured');
|
|
106
|
+
}
|
|
107
|
+
await router.handle(rawBody, signature, ctx.webhookSecret);
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Register Kongo jobs with the daemon's scheduler.
|
|
113
|
+
* Only registers when Kongo is connected.
|
|
114
|
+
*/
|
|
115
|
+
export function registerKongoJobs(scheduler, jobs) {
|
|
116
|
+
// kongo-signal: hourly
|
|
117
|
+
scheduler.add('kongo-signal', 3_600_000, async () => {
|
|
118
|
+
await jobs.signalPoll();
|
|
119
|
+
});
|
|
120
|
+
// kongo-seed and kongo-webhook are event-driven, not scheduled.
|
|
121
|
+
// They are called directly by the daemon when events occur.
|
|
122
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kongo Pages — Page lifecycle operations.
|
|
3
|
+
*
|
|
4
|
+
* Generate landing pages from PRD seed content, poll for completion,
|
|
5
|
+
* retrieve HTML, list/delete pages, and batch generate.
|
|
6
|
+
*
|
|
7
|
+
* Uses the real Kongo API surface:
|
|
8
|
+
* - POST /engine/pages — generate a page (accepts brief + template for structured input)
|
|
9
|
+
* - GET /engine/pages/:pageId — poll status until READY
|
|
10
|
+
* - GET /engine/pages/:pageId/html — get raw HTML
|
|
11
|
+
* - GET /engine/pages — list pages (cursor pagination)
|
|
12
|
+
* - DELETE /engine/pages/:pageId — soft delete
|
|
13
|
+
* - POST /engine/pages/batch — batch generate 1-50 pages
|
|
14
|
+
*
|
|
15
|
+
* PRD Reference: PRD-kongo-integration.md §4.1
|
|
16
|
+
*/
|
|
17
|
+
import { KongoClient } from './client.js';
|
|
18
|
+
import type { CreatePageRequest, CreatePageResponse, PageDetail, ListPagesOptions, PaginatedResponse, BatchPageConfig, BatchPageResult, PrdSeedContent } from './types.js';
|
|
19
|
+
/**
|
|
20
|
+
* Create a page from raw configuration.
|
|
21
|
+
* Returns immediately with pageId — generation runs async (2-10 min).
|
|
22
|
+
*/
|
|
23
|
+
export declare function createPage(client: KongoClient, config: CreatePageRequest): Promise<CreatePageResponse>;
|
|
24
|
+
/**
|
|
25
|
+
* Create a landing page from PRD seed content.
|
|
26
|
+
* Maps PrdSeedContent to Kongo's CreatePageRequest with brief + template: 'landing-page'.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createPageFromPrd(client: KongoClient, seed: PrdSeedContent): Promise<CreatePageResponse>;
|
|
29
|
+
/**
|
|
30
|
+
* Get the current status and details of a page.
|
|
31
|
+
*/
|
|
32
|
+
export declare function getPageStatus(client: KongoClient, pageId: string): Promise<PageDetail>;
|
|
33
|
+
/**
|
|
34
|
+
* Get the raw HTML of a generated page.
|
|
35
|
+
* Only works when status is READY.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getPageHtml(client: KongoClient, pageId: string, options?: {
|
|
38
|
+
tracking?: boolean;
|
|
39
|
+
minify?: boolean;
|
|
40
|
+
}): Promise<string>;
|
|
41
|
+
/**
|
|
42
|
+
* Poll a page until it reaches READY status or timeout.
|
|
43
|
+
* Throws on ERROR status or timeout.
|
|
44
|
+
*/
|
|
45
|
+
export declare function awaitPage(client: KongoClient, pageId: string, options?: {
|
|
46
|
+
timeoutMs?: number;
|
|
47
|
+
intervalMs?: number;
|
|
48
|
+
}): Promise<PageDetail>;
|
|
49
|
+
/**
|
|
50
|
+
* List pages with cursor-based pagination.
|
|
51
|
+
*/
|
|
52
|
+
export declare function listPages(client: KongoClient, options?: ListPagesOptions): Promise<PaginatedResponse<PageDetail>>;
|
|
53
|
+
/**
|
|
54
|
+
* Soft-delete a page. HTML is purged immediately, metadata retained 90 days.
|
|
55
|
+
*/
|
|
56
|
+
export declare function deletePage(client: KongoClient, pageId: string): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Batch generate 1-50 pages in a single request.
|
|
59
|
+
*/
|
|
60
|
+
export declare function batchGenerate(client: KongoClient, configs: BatchPageConfig[]): Promise<BatchPageResult[]>;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kongo Pages — Page lifecycle operations.
|
|
3
|
+
*
|
|
4
|
+
* Generate landing pages from PRD seed content, poll for completion,
|
|
5
|
+
* retrieve HTML, list/delete pages, and batch generate.
|
|
6
|
+
*
|
|
7
|
+
* Uses the real Kongo API surface:
|
|
8
|
+
* - POST /engine/pages — generate a page (accepts brief + template for structured input)
|
|
9
|
+
* - GET /engine/pages/:pageId — poll status until READY
|
|
10
|
+
* - GET /engine/pages/:pageId/html — get raw HTML
|
|
11
|
+
* - GET /engine/pages — list pages (cursor pagination)
|
|
12
|
+
* - DELETE /engine/pages/:pageId — soft delete
|
|
13
|
+
* - POST /engine/pages/batch — batch generate 1-50 pages
|
|
14
|
+
*
|
|
15
|
+
* PRD Reference: PRD-kongo-integration.md §4.1
|
|
16
|
+
*/
|
|
17
|
+
import { randomUUID } from 'node:crypto';
|
|
18
|
+
import { KongoApiError } from './client.js';
|
|
19
|
+
// ── Page Operations ──────────────────────────────────────
|
|
20
|
+
const DEFAULT_POLL_INTERVAL_MS = 3_000;
|
|
21
|
+
// Kongo page generation takes 2-10 minutes. Default timeout covers the full range.
|
|
22
|
+
const DEFAULT_POLL_TIMEOUT_MS = 660_000; // 11 minutes (10 min upper bound + 1 min buffer)
|
|
23
|
+
/**
|
|
24
|
+
* Create a page from raw configuration.
|
|
25
|
+
* Returns immediately with pageId — generation runs async (2-10 min).
|
|
26
|
+
*/
|
|
27
|
+
export async function createPage(client, config) {
|
|
28
|
+
return client.post('/engine/pages', config, { 'Idempotency-Key': randomUUID() });
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Create a landing page from PRD seed content.
|
|
32
|
+
* Maps PrdSeedContent to Kongo's CreatePageRequest with brief + template: 'landing-page'.
|
|
33
|
+
*/
|
|
34
|
+
export async function createPageFromPrd(client, seed) {
|
|
35
|
+
const brief = {
|
|
36
|
+
companyName: seed.projectName,
|
|
37
|
+
headline: seed.headline,
|
|
38
|
+
subheadline: seed.subheadline,
|
|
39
|
+
valuePropositions: seed.valueProps,
|
|
40
|
+
ctaText: seed.ctaText,
|
|
41
|
+
ctaUrl: seed.ctaUrl,
|
|
42
|
+
};
|
|
43
|
+
if (seed.logoUrl)
|
|
44
|
+
brief.logoUrl = seed.logoUrl;
|
|
45
|
+
if (seed.socialProof?.length)
|
|
46
|
+
brief.socialProof = seed.socialProof;
|
|
47
|
+
const metadata = {
|
|
48
|
+
source: 'voidforge',
|
|
49
|
+
projectName: seed.projectName,
|
|
50
|
+
};
|
|
51
|
+
if (seed.campaignId)
|
|
52
|
+
metadata.campaignId = seed.campaignId;
|
|
53
|
+
if (seed.platform)
|
|
54
|
+
metadata.platform = seed.platform;
|
|
55
|
+
return createPage(client, {
|
|
56
|
+
companyName: seed.projectName,
|
|
57
|
+
content: [
|
|
58
|
+
seed.headline,
|
|
59
|
+
seed.subheadline,
|
|
60
|
+
...seed.valueProps,
|
|
61
|
+
seed.ctaText,
|
|
62
|
+
...(seed.socialProof ?? []),
|
|
63
|
+
].join('\n\n'),
|
|
64
|
+
brief,
|
|
65
|
+
template: 'landing-page',
|
|
66
|
+
style: {
|
|
67
|
+
colors: seed.brandColors,
|
|
68
|
+
},
|
|
69
|
+
hosted: true,
|
|
70
|
+
metadata,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get the current status and details of a page.
|
|
75
|
+
*/
|
|
76
|
+
export async function getPageStatus(client, pageId) {
|
|
77
|
+
return client.get(`/engine/pages/${encodeURIComponent(pageId)}`);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get the raw HTML of a generated page.
|
|
81
|
+
* Only works when status is READY.
|
|
82
|
+
*/
|
|
83
|
+
export async function getPageHtml(client, pageId, options) {
|
|
84
|
+
const query = {};
|
|
85
|
+
if (options?.tracking !== undefined)
|
|
86
|
+
query.tracking = String(options.tracking);
|
|
87
|
+
if (options?.minify !== undefined)
|
|
88
|
+
query.minify = String(options.minify);
|
|
89
|
+
return client.get(`/engine/pages/${encodeURIComponent(pageId)}/html`, query);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Poll a page until it reaches READY status or timeout.
|
|
93
|
+
* Throws on ERROR status or timeout.
|
|
94
|
+
*/
|
|
95
|
+
export async function awaitPage(client, pageId, options) {
|
|
96
|
+
const timeoutMs = options?.timeoutMs ?? DEFAULT_POLL_TIMEOUT_MS;
|
|
97
|
+
const intervalMs = options?.intervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
98
|
+
const deadline = Date.now() + timeoutMs;
|
|
99
|
+
while (Date.now() < deadline) {
|
|
100
|
+
const page = await getPageStatus(client, pageId);
|
|
101
|
+
if (page.status === 'READY')
|
|
102
|
+
return page;
|
|
103
|
+
if (page.status === 'ERROR') {
|
|
104
|
+
throw new KongoApiError('GENERATION_FAILED', `Page generation failed: ${page.error?.message ?? 'Unknown error'}`, 500);
|
|
105
|
+
}
|
|
106
|
+
// Still GENERATING — wait and retry
|
|
107
|
+
const remaining = deadline - Date.now();
|
|
108
|
+
if (remaining <= 0)
|
|
109
|
+
break;
|
|
110
|
+
await sleep(Math.min(intervalMs, remaining));
|
|
111
|
+
}
|
|
112
|
+
throw new KongoApiError('TIMEOUT', `Page ${pageId} generation timed out after ${timeoutMs / 1000}s`, 408, true);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* List pages with cursor-based pagination.
|
|
116
|
+
*/
|
|
117
|
+
export async function listPages(client, options) {
|
|
118
|
+
const query = {};
|
|
119
|
+
if (options?.cursor)
|
|
120
|
+
query.cursor = options.cursor;
|
|
121
|
+
if (options?.limit)
|
|
122
|
+
query.limit = options.limit;
|
|
123
|
+
if (options?.status)
|
|
124
|
+
query.status = options.status;
|
|
125
|
+
if (options?.sort)
|
|
126
|
+
query.sort = options.sort;
|
|
127
|
+
if (options?.order)
|
|
128
|
+
query.order = options.order;
|
|
129
|
+
return client.get('/engine/pages', query);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Soft-delete a page. HTML is purged immediately, metadata retained 90 days.
|
|
133
|
+
*/
|
|
134
|
+
export async function deletePage(client, pageId) {
|
|
135
|
+
await client.delete(`/engine/pages/${encodeURIComponent(pageId)}`);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Batch generate 1-50 pages in a single request.
|
|
139
|
+
*/
|
|
140
|
+
export async function batchGenerate(client, configs) {
|
|
141
|
+
if (configs.length === 0 || configs.length > 50) {
|
|
142
|
+
throw new KongoApiError('VALIDATION_ERROR', `Batch size must be 1-50, got ${configs.length}`, 400);
|
|
143
|
+
}
|
|
144
|
+
const result = await client.post('/engine/pages/batch', { pages: configs }, { 'Idempotency-Key': randomUUID() });
|
|
145
|
+
return result.pages;
|
|
146
|
+
}
|
|
147
|
+
// ── Helpers ──────────────────────────────────────────────
|
|
148
|
+
function sleep(ms) {
|
|
149
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
150
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kongo Provisioner — API key setup and connection verification.
|
|
3
|
+
*
|
|
4
|
+
* Called during /cultivation install Step 2b: "Connect Kongo for landing pages?"
|
|
5
|
+
*
|
|
6
|
+
* Kongo uses API keys (ke_live_ prefix), not OAuth. Keys are created in the
|
|
7
|
+
* Kongo dashboard at kongo.io/dashboard/api. The provisioner:
|
|
8
|
+
* 1. Accepts a user-provided API key
|
|
9
|
+
* 2. Verifies the connection with GET /engine/pages (expects 200)
|
|
10
|
+
* 3. Stores the key in the financial vault
|
|
11
|
+
* 4. Stores the webhook signing secret (optional)
|
|
12
|
+
*
|
|
13
|
+
* PRD Reference: PRD-kongo-integration.md §4.4 (adjusted from OAuth to manual)
|
|
14
|
+
*/
|
|
15
|
+
import { KongoClient } from './client.js';
|
|
16
|
+
/** Vault key for the Kongo API key */
|
|
17
|
+
export declare const KONGO_API_KEY_VAULT_KEY = "kongo-api-key";
|
|
18
|
+
/** Vault key for the webhook signing secret */
|
|
19
|
+
export declare const KONGO_WEBHOOK_SECRET_VAULT_KEY = "kongo-webhook-secret";
|
|
20
|
+
export interface KongoConnectionStatus {
|
|
21
|
+
readonly connected: boolean;
|
|
22
|
+
readonly pageCount?: number;
|
|
23
|
+
readonly error?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Verify a Kongo API key by making a read-only API call.
|
|
27
|
+
* Returns connection status with page count on success.
|
|
28
|
+
*/
|
|
29
|
+
export declare function verifyKongoConnection(apiKey: string): Promise<KongoConnectionStatus>;
|
|
30
|
+
export interface KongoProvisionConfig {
|
|
31
|
+
readonly apiKey: string;
|
|
32
|
+
readonly webhookSecret?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface KongoProvisionResult {
|
|
35
|
+
readonly success: boolean;
|
|
36
|
+
readonly message: string;
|
|
37
|
+
readonly connection?: KongoConnectionStatus;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Provision Kongo access during /cultivation install.
|
|
41
|
+
*
|
|
42
|
+
* Steps:
|
|
43
|
+
* 1. Validate key format (ke_live_ prefix)
|
|
44
|
+
* 2. Verify connection with read-only API call
|
|
45
|
+
* 3. Store key in financial vault
|
|
46
|
+
* 4. Optionally store webhook signing secret
|
|
47
|
+
*
|
|
48
|
+
* @param config - API key and optional webhook secret
|
|
49
|
+
* @param vaultSet - Financial vault setter (injected for testability)
|
|
50
|
+
*/
|
|
51
|
+
export declare function provisionKongo(config: KongoProvisionConfig, vaultSet: (key: string, value: string) => Promise<void>): Promise<KongoProvisionResult>;
|
|
52
|
+
/**
|
|
53
|
+
* Check if Kongo is connected (API key exists in vault).
|
|
54
|
+
*/
|
|
55
|
+
export declare function isKongoConnected(vaultGet: (key: string) => Promise<string | null>): Promise<boolean>;
|
|
56
|
+
/**
|
|
57
|
+
* Create a KongoClient from vault credentials.
|
|
58
|
+
* Returns null if Kongo is not connected.
|
|
59
|
+
*/
|
|
60
|
+
export declare function getKongoClient(vaultGet: (key: string) => Promise<string | null>): Promise<KongoClient | null>;
|
|
61
|
+
/**
|
|
62
|
+
* Remove Kongo credentials from vault (disconnect).
|
|
63
|
+
*/
|
|
64
|
+
export declare function disconnectKongo(vaultDelete: (key: string) => Promise<void>): Promise<void>;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kongo Provisioner — API key setup and connection verification.
|
|
3
|
+
*
|
|
4
|
+
* Called during /cultivation install Step 2b: "Connect Kongo for landing pages?"
|
|
5
|
+
*
|
|
6
|
+
* Kongo uses API keys (ke_live_ prefix), not OAuth. Keys are created in the
|
|
7
|
+
* Kongo dashboard at kongo.io/dashboard/api. The provisioner:
|
|
8
|
+
* 1. Accepts a user-provided API key
|
|
9
|
+
* 2. Verifies the connection with GET /engine/pages (expects 200)
|
|
10
|
+
* 3. Stores the key in the financial vault
|
|
11
|
+
* 4. Stores the webhook signing secret (optional)
|
|
12
|
+
*
|
|
13
|
+
* PRD Reference: PRD-kongo-integration.md §4.4 (adjusted from OAuth to manual)
|
|
14
|
+
*/
|
|
15
|
+
import { KongoClient, KongoApiError } from './client.js';
|
|
16
|
+
// ── Vault Keys ───────────────────────────────────────────
|
|
17
|
+
/** Vault key for the Kongo API key */
|
|
18
|
+
export const KONGO_API_KEY_VAULT_KEY = 'kongo-api-key';
|
|
19
|
+
/** Vault key for the webhook signing secret */
|
|
20
|
+
export const KONGO_WEBHOOK_SECRET_VAULT_KEY = 'kongo-webhook-secret';
|
|
21
|
+
/**
|
|
22
|
+
* Verify a Kongo API key by making a read-only API call.
|
|
23
|
+
* Returns connection status with page count on success.
|
|
24
|
+
*/
|
|
25
|
+
export async function verifyKongoConnection(apiKey) {
|
|
26
|
+
try {
|
|
27
|
+
const client = new KongoClient({ apiKey });
|
|
28
|
+
const result = await client.get('/engine/pages', { limit: 1 });
|
|
29
|
+
return {
|
|
30
|
+
connected: true,
|
|
31
|
+
pageCount: result.items.length > 0 ? undefined : 0, // Can't know total from first page
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
if (err instanceof KongoApiError) {
|
|
36
|
+
return {
|
|
37
|
+
connected: false,
|
|
38
|
+
error: `${err.code}: ${err.message}`,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
connected: false,
|
|
43
|
+
error: err instanceof Error ? err.message : 'Unknown error',
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Provision Kongo access during /cultivation install.
|
|
49
|
+
*
|
|
50
|
+
* Steps:
|
|
51
|
+
* 1. Validate key format (ke_live_ prefix)
|
|
52
|
+
* 2. Verify connection with read-only API call
|
|
53
|
+
* 3. Store key in financial vault
|
|
54
|
+
* 4. Optionally store webhook signing secret
|
|
55
|
+
*
|
|
56
|
+
* @param config - API key and optional webhook secret
|
|
57
|
+
* @param vaultSet - Financial vault setter (injected for testability)
|
|
58
|
+
*/
|
|
59
|
+
export async function provisionKongo(config, vaultSet) {
|
|
60
|
+
// Validate key format
|
|
61
|
+
if (!config.apiKey.startsWith('ke_live_')) {
|
|
62
|
+
return {
|
|
63
|
+
success: false,
|
|
64
|
+
message: 'Invalid API key format. Kongo keys use the ke_live_ prefix. Get yours at kongo.io/dashboard/api',
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// Verify connection
|
|
68
|
+
const connection = await verifyKongoConnection(config.apiKey);
|
|
69
|
+
if (!connection.connected) {
|
|
70
|
+
return {
|
|
71
|
+
success: false,
|
|
72
|
+
message: `Kongo connection failed: ${connection.error}`,
|
|
73
|
+
connection,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// Store in vault
|
|
77
|
+
await vaultSet(KONGO_API_KEY_VAULT_KEY, config.apiKey);
|
|
78
|
+
if (config.webhookSecret) {
|
|
79
|
+
await vaultSet(KONGO_WEBHOOK_SECRET_VAULT_KEY, config.webhookSecret);
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
success: true,
|
|
83
|
+
message: 'Kongo connected successfully.',
|
|
84
|
+
connection,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// ── Connection Check ─────────────────────────────────────
|
|
88
|
+
/**
|
|
89
|
+
* Check if Kongo is connected (API key exists in vault).
|
|
90
|
+
*/
|
|
91
|
+
export async function isKongoConnected(vaultGet) {
|
|
92
|
+
const apiKey = await vaultGet(KONGO_API_KEY_VAULT_KEY);
|
|
93
|
+
return apiKey !== null && apiKey.startsWith('ke_live_');
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Create a KongoClient from vault credentials.
|
|
97
|
+
* Returns null if Kongo is not connected.
|
|
98
|
+
*/
|
|
99
|
+
export async function getKongoClient(vaultGet) {
|
|
100
|
+
const apiKey = await vaultGet(KONGO_API_KEY_VAULT_KEY);
|
|
101
|
+
if (!apiKey)
|
|
102
|
+
return null;
|
|
103
|
+
try {
|
|
104
|
+
return new KongoClient({ apiKey });
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Remove Kongo credentials from vault (disconnect).
|
|
112
|
+
*/
|
|
113
|
+
export async function disconnectKongo(vaultDelete) {
|
|
114
|
+
await vaultDelete(KONGO_API_KEY_VAULT_KEY);
|
|
115
|
+
await vaultDelete(KONGO_WEBHOOK_SECRET_VAULT_KEY);
|
|
116
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kongo Seed — Extract seed content from PRDs for landing page generation.
|
|
3
|
+
*
|
|
4
|
+
* Phase 3.5 of /grow: Before you distribute, you need somewhere to send them.
|
|
5
|
+
*
|
|
6
|
+
* Extracts headline, value props, CTA, brand colors, and social proof from
|
|
7
|
+
* PRD YAML frontmatter and prose content. Maps to PrdSeedContent which
|
|
8
|
+
* feeds into createPageFromPrd().
|
|
9
|
+
*
|
|
10
|
+
* PRD Reference: PRD-kongo-integration.md §4.5
|
|
11
|
+
*/
|
|
12
|
+
import type { PrdSeedContent } from './types.js';
|
|
13
|
+
export interface PrdContent {
|
|
14
|
+
/** YAML frontmatter parsed as object */
|
|
15
|
+
readonly frontmatter: Record<string, unknown>;
|
|
16
|
+
/** Full PRD text content (after frontmatter) */
|
|
17
|
+
readonly body: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Extract PrdSeedContent from a PRD document.
|
|
21
|
+
*
|
|
22
|
+
* Strategy:
|
|
23
|
+
* 1. Use frontmatter `name` for project name
|
|
24
|
+
* 2. Extract first ## heading or overview section for headline
|
|
25
|
+
* 3. Extract value props from feature descriptions or bullet lists
|
|
26
|
+
* 4. Use brand colors from frontmatter `style` or defaults
|
|
27
|
+
* 5. Extract CTA from conversion or signup references
|
|
28
|
+
*/
|
|
29
|
+
export declare function extractSeedFromPrd(prd: PrdContent): PrdSeedContent;
|
|
30
|
+
/**
|
|
31
|
+
* Extract seed content for a specific campaign.
|
|
32
|
+
* Enriches the base PRD seed with campaign-specific metadata.
|
|
33
|
+
*
|
|
34
|
+
* Self-marketing mode: When the product domain matches the Kongo domain
|
|
35
|
+
* (dogfooding), destination URLs use the /lp/ direct-render path instead
|
|
36
|
+
* of subdomain URLs. This avoids the iframe sandbox constraint that breaks
|
|
37
|
+
* GA4 cookie tracking and UTM relay. See GROWTH_STRATEGIST.md "Iframe
|
|
38
|
+
* Sandbox Constraint" section.
|
|
39
|
+
*/
|
|
40
|
+
export declare function extractSeedForCampaign(prd: PrdContent, campaignId: string, platform: string, options?: {
|
|
41
|
+
kongoDomain?: string;
|
|
42
|
+
selfMarketing?: boolean;
|
|
43
|
+
slug?: string;
|
|
44
|
+
}): PrdSeedContent;
|
|
45
|
+
/**
|
|
46
|
+
* Parse PRD text into frontmatter and body.
|
|
47
|
+
* Handles ```yaml fenced frontmatter and --- delimited frontmatter.
|
|
48
|
+
*/
|
|
49
|
+
export declare function parsePrdContent(raw: string): PrdContent;
|