voidforge-build 23.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (772) hide show
  1. package/dist/.claude/agents/adolin-brand.md +40 -0
  2. package/dist/.claude/agents/ahsoka-access-control.md +56 -0
  3. package/dist/.claude/agents/alfred-dependencies.md +43 -0
  4. package/dist/.claude/agents/alia-threat-detect.md +40 -0
  5. package/dist/.claude/agents/anakin-dark-side.md +41 -0
  6. package/dist/.claude/agents/aquaman-deep-dive.md +43 -0
  7. package/dist/.claude/agents/aragorn-orchestration.md +39 -0
  8. package/dist/.claude/agents/archer-greenfield.md +48 -0
  9. package/dist/.claude/agents/armin-clever.md +39 -0
  10. package/dist/.claude/agents/arwen-ui-polish.md +42 -0
  11. package/dist/.claude/agents/ashitaka-tech-debt.md +39 -0
  12. package/dist/.claude/agents/asuka-performance.md +39 -0
  13. package/dist/.claude/agents/bail-organa-governance.md +37 -0
  14. package/dist/.claude/agents/banner-database.md +44 -0
  15. package/dist/.claude/agents/barton-smoke-test.md +59 -0
  16. package/dist/.claude/agents/bashir-field-medic.md +63 -0
  17. package/dist/.claude/agents/batgirl-detail.md +43 -0
  18. package/dist/.claude/agents/batman-qa.md +73 -0
  19. package/dist/.claude/agents/bayta-evals.md +41 -0
  20. package/dist/.claude/agents/beast-boy-cross-env.md +43 -0
  21. package/dist/.claude/agents/beerus-destroyer.md +39 -0
  22. package/dist/.claude/agents/bel-riose-orchestration.md +40 -0
  23. package/dist/.claude/agents/beru-subprocess.md +37 -0
  24. package/dist/.claude/agents/bilbo-microcopy.md +43 -0
  25. package/dist/.claude/agents/black-canary-monitoring.md +43 -0
  26. package/dist/.claude/agents/bliss-ai-safety.md +40 -0
  27. package/dist/.claude/agents/bo-katan-perimeter.md +40 -0
  28. package/dist/.claude/agents/bombadil-forge-sync.md +62 -0
  29. package/dist/.claude/agents/boromir-hubris.md +40 -0
  30. package/dist/.claude/agents/breeze-platform-relations.md +40 -0
  31. package/dist/.claude/agents/bucky-legacy.md +43 -0
  32. package/dist/.claude/agents/bulma-engineering.md +40 -0
  33. package/dist/.claude/agents/calcifer-daemon.md +39 -0
  34. package/dist/.claude/agents/cara-dune-enforcement.md +37 -0
  35. package/dist/.claude/agents/cassian-recon.md +37 -0
  36. package/dist/.claude/agents/cc-persistent-process.md +39 -0
  37. package/dist/.claude/agents/celeborn-design-system.md +40 -0
  38. package/dist/.claude/agents/celebrimbor-forge-artist.md +62 -0
  39. package/dist/.claude/agents/chakotay-bridge.md +47 -0
  40. package/dist/.claude/agents/chani-worm-rider.md +61 -0
  41. package/dist/.claude/agents/chewie-dependency-audit.md +41 -0
  42. package/dist/.claude/agents/chrome-discovery.md +37 -0
  43. package/dist/.claude/agents/constantine-cursed-code.md +59 -0
  44. package/dist/.claude/agents/coulson-release.md +64 -0
  45. package/dist/.claude/agents/crusher-diagnostics.md +48 -0
  46. package/dist/.claude/agents/cyborg-system-integration.md +43 -0
  47. package/dist/.claude/agents/dalinar-positioning.md +40 -0
  48. package/dist/.claude/agents/daneel-model-migration.md +40 -0
  49. package/dist/.claude/agents/data-tech-debt.md +48 -0
  50. package/dist/.claude/agents/dax-legacy-wisdom.md +48 -0
  51. package/dist/.claude/agents/deathstroke-adversarial.md +59 -0
  52. package/dist/.claude/agents/denji-determination.md +39 -0
  53. package/dist/.claude/agents/din-djarin-bounty.md +42 -0
  54. package/dist/.claude/agents/dockson-treasury.md +67 -0
  55. package/dist/.claude/agents/dori-integration-check.md +37 -0
  56. package/dist/.claude/agents/dors-observability.md +40 -0
  57. package/dist/.claude/agents/drax-exact-match.md +42 -0
  58. package/dist/.claude/agents/ducem-token-economics.md +41 -0
  59. package/dist/.claude/agents/duncan-relay.md +40 -0
  60. package/dist/.claude/agents/duo-teardown.md +38 -0
  61. package/dist/.claude/agents/ed-network-scan.md +38 -0
  62. package/dist/.claude/agents/elrond-ux-strategy.md +39 -0
  63. package/dist/.claude/agents/eowyn-delight.md +56 -0
  64. package/dist/.claude/agents/erwin-strategy.md +39 -0
  65. package/dist/.claude/agents/ezra-catches-missed.md +40 -0
  66. package/dist/.claude/agents/ezri-session-analyst.md +45 -0
  67. package/dist/.claude/agents/falcon-migration.md +43 -0
  68. package/dist/.claude/agents/faramir-judgment.md +40 -0
  69. package/dist/.claude/agents/faye-resourceful.md +39 -0
  70. package/dist/.claude/agents/fenring-passive-monitor.md +37 -0
  71. package/dist/.claude/agents/fern-protocol.md +37 -0
  72. package/dist/.claude/agents/feyd-adversarial.md +41 -0
  73. package/dist/.claude/agents/flash-rapid-test.md +43 -0
  74. package/dist/.claude/agents/friday-automation.md +42 -0
  75. package/dist/.claude/agents/frieren-long-term.md +39 -0
  76. package/dist/.claude/agents/frodo-critical-path.md +40 -0
  77. package/dist/.claude/agents/fury-initiative.md +65 -0
  78. package/dist/.claude/agents/gaal-prompt-arch.md +41 -0
  79. package/dist/.claude/agents/galadriel-frontend.md +69 -0
  80. package/dist/.claude/agents/gamora-perf-assassin.md +43 -0
  81. package/dist/.claude/agents/gandalf-setup-wizard.md +63 -0
  82. package/dist/.claude/agents/gen-docs.md +37 -0
  83. package/dist/.claude/agents/ghanima-paired-monitor.md +37 -0
  84. package/dist/.claude/agents/gimli-performance.md +41 -0
  85. package/dist/.claude/agents/giyu-silent-guard.md +39 -0
  86. package/dist/.claude/agents/glorfindel-rendering.md +40 -0
  87. package/dist/.claude/agents/gohan-hidden-power.md +39 -0
  88. package/dist/.claude/agents/gojo-infinite-scale.md +39 -0
  89. package/dist/.claude/agents/goku-scaling.md +39 -0
  90. package/dist/.claude/agents/goldberry-change-detect.md +37 -0
  91. package/dist/.claude/agents/gordon-escalation.md +42 -0
  92. package/dist/.claude/agents/green-arrow-precision.md +43 -0
  93. package/dist/.claude/agents/green-lantern-scenarios.md +43 -0
  94. package/dist/.claude/agents/grogu-tiny-vulns.md +38 -0
  95. package/dist/.claude/agents/groot-caching.md +43 -0
  96. package/dist/.claude/agents/gurney-delivery.md +40 -0
  97. package/dist/.claude/agents/haku-deploy-wizard.md +65 -0
  98. package/dist/.claude/agents/haldir-boundaries.md +40 -0
  99. package/dist/.claude/agents/han-vuln-hunter.md +40 -0
  100. package/dist/.claude/agents/hange-experimentation.md +39 -0
  101. package/dist/.claude/agents/harah-protocol.md +38 -0
  102. package/dist/.claude/agents/hawkgirl-regression-sweep.md +43 -0
  103. package/dist/.claude/agents/heero-mission-deploy.md +39 -0
  104. package/dist/.claude/agents/hera-navigation.md +41 -0
  105. package/dist/.claude/agents/hill-mission-control.md +43 -0
  106. package/dist/.claude/agents/himmel-legacy.md +37 -0
  107. package/dist/.claude/agents/hober-tool-schema.md +40 -0
  108. package/dist/.claude/agents/hoid-copywriting.md +40 -0
  109. package/dist/.claude/agents/howl-migration.md +39 -0
  110. package/dist/.claude/agents/hughes-observability.md +37 -0
  111. package/dist/.claude/agents/huntress-flaky-bugs.md +42 -0
  112. package/dist/.claude/agents/irulan-historian.md +37 -0
  113. package/dist/.claude/agents/jake-reporter.md +45 -0
  114. package/dist/.claude/agents/janeway-novel-arch.md +48 -0
  115. package/dist/.claude/agents/janov-context-eng.md +40 -0
  116. package/dist/.claude/agents/jarvis-status.md +42 -0
  117. package/dist/.claude/agents/jean-pragmatic.md +39 -0
  118. package/dist/.claude/agents/jessica-voice.md +40 -0
  119. package/dist/.claude/agents/jet-maintenance.md +39 -0
  120. package/dist/.claude/agents/jin-disciplined-adv.md +39 -0
  121. package/dist/.claude/agents/kaji-intelligence.md +39 -0
  122. package/dist/.claude/agents/kaladin-organic-growth.md +40 -0
  123. package/dist/.claude/agents/kallen-hard-deploy.md +39 -0
  124. package/dist/.claude/agents/kanan-intuitive.md +41 -0
  125. package/dist/.claude/agents/kaoru-harmony.md +37 -0
  126. package/dist/.claude/agents/kaworu-solver.md +39 -0
  127. package/dist/.claude/agents/kelsier-growth.md +64 -0
  128. package/dist/.claude/agents/kenobi-security.md +70 -0
  129. package/dist/.claude/agents/kim-api-design.md +49 -0
  130. package/dist/.claude/agents/kira-pragmatic.md +48 -0
  131. package/dist/.claude/agents/kishibe-hardening.md +39 -0
  132. package/dist/.claude/agents/kohaku-rapid-response.md +36 -0
  133. package/dist/.claude/agents/krillin-support.md +36 -0
  134. package/dist/.claude/agents/kusanagi-devops.md +70 -0
  135. package/dist/.claude/agents/la-forge-reliability.md +63 -0
  136. package/dist/.claude/agents/lang-micro-changes.md +43 -0
  137. package/dist/.claude/agents/legolas-precision.md +42 -0
  138. package/dist/.claude/agents/leia-secrets.md +41 -0
  139. package/dist/.claude/agents/lelouch-orchestration.md +39 -0
  140. package/dist/.claude/agents/leto-ii-persistence.md +40 -0
  141. package/dist/.claude/agents/leto-protection.md +40 -0
  142. package/dist/.claude/agents/levi-deploy.md +40 -0
  143. package/dist/.claude/agents/liet-kynes-deep-system.md +40 -0
  144. package/dist/.claude/agents/lift-social-media.md +40 -0
  145. package/dist/.claude/agents/loki-chaos.md +58 -0
  146. package/dist/.claude/agents/lucius-config.md +43 -0
  147. package/dist/.claude/agents/luke-audit-journey.md +41 -0
  148. package/dist/.claude/agents/manhunter-shapeshifting.md +43 -0
  149. package/dist/.claude/agents/marsh-competitive-intel.md +41 -0
  150. package/dist/.claude/agents/maul-red-team.md +57 -0
  151. package/dist/.claude/agents/merry-pair-review.md +40 -0
  152. package/dist/.claude/agents/mikasa-protection.md +39 -0
  153. package/dist/.claude/agents/miles-teg-perf.md +40 -0
  154. package/dist/.claude/agents/milim-load-test.md +39 -0
  155. package/dist/.claude/agents/misato-operations.md +39 -0
  156. package/dist/.claude/agents/mob-capacity.md +39 -0
  157. package/dist/.claude/agents/mohiam-authentication.md +40 -0
  158. package/dist/.claude/agents/mon-mothma-security-mgmt.md +41 -0
  159. package/dist/.claude/agents/mugen-chaos.md +39 -0
  160. package/dist/.claude/agents/mule-adversarial-ai.md +41 -0
  161. package/dist/.claude/agents/mustang-cleanup.md +39 -0
  162. package/dist/.claude/agents/nanami-structured-ops.md +39 -0
  163. package/dist/.claude/agents/nausicaa-resources.md +39 -0
  164. package/dist/.claude/agents/navani-technical-seo.md +40 -0
  165. package/dist/.claude/agents/nebula-optimization.md +43 -0
  166. package/dist/.claude/agents/nightwing-regression.md +59 -0
  167. package/dist/.claude/agents/nobara-direct-fix.md +39 -0
  168. package/dist/.claude/agents/nog-solutions.md +48 -0
  169. package/dist/.claude/agents/nori-asset-scanner.md +37 -0
  170. package/dist/.claude/agents/obrien-root-cause.md +48 -0
  171. package/dist/.claude/agents/odo-structural-anomaly.md +48 -0
  172. package/dist/.claude/agents/okoye-data-integrity.md +43 -0
  173. package/dist/.claude/agents/olivier-hardening.md +39 -0
  174. package/dist/.claude/agents/oracle-static-analysis.md +59 -0
  175. package/dist/.claude/agents/ori-prompt-crafter.md +37 -0
  176. package/dist/.claude/agents/padme-data-protection.md +42 -0
  177. package/dist/.claude/agents/paris-route-planner.md +47 -0
  178. package/dist/.claude/agents/parker-connections.md +43 -0
  179. package/dist/.claude/agents/paul-orchestration.md +40 -0
  180. package/dist/.claude/agents/picard-architecture.md +64 -0
  181. package/dist/.claude/agents/piccolo-tactics.md +39 -0
  182. package/dist/.claude/agents/pike-bold-decisions.md +48 -0
  183. package/dist/.claude/agents/pippin-discovery.md +40 -0
  184. package/dist/.claude/agents/plo-koon-edge-cases.md +37 -0
  185. package/dist/.claude/agents/power-chaotic.md +39 -0
  186. package/dist/.claude/agents/qui-gon-subtle-vulns.md +40 -0
  187. package/dist/.claude/agents/radagast-edge-cases.md +41 -0
  188. package/dist/.claude/agents/raoden-conversion.md +41 -0
  189. package/dist/.claude/agents/raven-deep-analysis.md +43 -0
  190. package/dist/.claude/agents/red-hood-aggressive.md +47 -0
  191. package/dist/.claude/agents/rei-dangerous-tasks.md +39 -0
  192. package/dist/.claude/agents/reigen-debugger.md +39 -0
  193. package/dist/.claude/agents/rengoku-intense-monitor.md +39 -0
  194. package/dist/.claude/agents/rex-infrastructure.md +41 -0
  195. package/dist/.claude/agents/rhodes-production.md +43 -0
  196. package/dist/.claude/agents/riker-review.md +62 -0
  197. package/dist/.claude/agents/rimuru-adapter.md +39 -0
  198. package/dist/.claude/agents/riza-backup.md +39 -0
  199. package/dist/.claude/agents/robin-apprentice.md +42 -0
  200. package/dist/.claude/agents/rocket-scrappy.md +43 -0
  201. package/dist/.claude/agents/rogers-api-design.md +43 -0
  202. package/dist/.claude/agents/romanoff-integrations.md +44 -0
  203. package/dist/.claude/agents/sabine-unconventional.md +40 -0
  204. package/dist/.claude/agents/salvor-model-selection.md +42 -0
  205. package/dist/.claude/agents/samwise-accessibility.md +43 -0
  206. package/dist/.claude/agents/sarene-outreach.md +40 -0
  207. package/dist/.claude/agents/sasha-resources.md +37 -0
  208. package/dist/.claude/agents/scotty-infrastructure.md +48 -0
  209. package/dist/.claude/agents/seldon-ai.md +67 -0
  210. package/dist/.claude/agents/senku-provisioning.md +40 -0
  211. package/dist/.claude/agents/sentaro-scheduling.md +37 -0
  212. package/dist/.claude/agents/seven-optimization.md +48 -0
  213. package/dist/.claude/agents/shallan-creative.md +40 -0
  214. package/dist/.claude/agents/sheeana-transport.md +40 -0
  215. package/dist/.claude/agents/shuri-innovation.md +43 -0
  216. package/dist/.claude/agents/silver-surfer-herald.md +90 -0
  217. package/dist/.claude/agents/siona-evasion.md +41 -0
  218. package/dist/.claude/agents/sisko-campaign.md +68 -0
  219. package/dist/.claude/agents/spike-routing.md +40 -0
  220. package/dist/.claude/agents/spock-schema.md +62 -0
  221. package/dist/.claude/agents/starfire-brute-force.md +43 -0
  222. package/dist/.claude/agents/stark-backend.md +71 -0
  223. package/dist/.claude/agents/steris-budget.md +41 -0
  224. package/dist/.claude/agents/stilgar-channel-security.md +40 -0
  225. package/dist/.claude/agents/strange-service-arch.md +44 -0
  226. package/dist/.claude/agents/sung-workers.md +39 -0
  227. package/dist/.claude/agents/superman-strength-test.md +43 -0
  228. package/dist/.claude/agents/suzaku-execution.md +39 -0
  229. package/dist/.claude/agents/szeth-compliance.md +40 -0
  230. package/dist/.claude/agents/tanjiro-persistent.md +39 -0
  231. package/dist/.claude/agents/tchalla-quality.md +43 -0
  232. package/dist/.claude/agents/thanos-gauntlet.md +68 -0
  233. package/dist/.claude/agents/theoden-rally.md +40 -0
  234. package/dist/.claude/agents/thor-queues.md +44 -0
  235. package/dist/.claude/agents/thufir-protocol-parsing.md +40 -0
  236. package/dist/.claude/agents/todo-brute-force.md +39 -0
  237. package/dist/.claude/agents/torres-site-scanner.md +47 -0
  238. package/dist/.claude/agents/totoro-guardian.md +39 -0
  239. package/dist/.claude/agents/tpol-disciplined.md +48 -0
  240. package/dist/.claude/agents/treebeard-deliberation.md +41 -0
  241. package/dist/.claude/agents/troi-prd-compliance.md +64 -0
  242. package/dist/.claude/agents/trunks-rollback.md +39 -0
  243. package/dist/.claude/agents/tuvok-deep-current.md +63 -0
  244. package/dist/.claude/agents/uhura-integration.md +47 -0
  245. package/dist/.claude/agents/valkyrie-recovery.md +43 -0
  246. package/dist/.claude/agents/vegeta-monitoring.md +39 -0
  247. package/dist/.claude/agents/veldora-dormant.md +37 -0
  248. package/dist/.claude/agents/vin-analytics.md +41 -0
  249. package/dist/.claude/agents/vision-data-analysis.md +43 -0
  250. package/dist/.claude/agents/wanda-seldon-validation.md +38 -0
  251. package/dist/.claude/agents/wanda-state.md +43 -0
  252. package/dist/.claude/agents/wax-paid-ads.md +40 -0
  253. package/dist/.claude/agents/wayne-ab-testing.md +40 -0
  254. package/dist/.claude/agents/whis-precision.md +39 -0
  255. package/dist/.claude/agents/windu-input-validation.md +41 -0
  256. package/dist/.claude/agents/winry-maintenance.md +39 -0
  257. package/dist/.claude/agents/wonder-woman-truth.md +43 -0
  258. package/dist/.claude/agents/wong-documentation.md +58 -0
  259. package/dist/.claude/agents/worf-security-arch.md +49 -0
  260. package/dist/.claude/agents/yoda-auth.md +57 -0
  261. package/dist/.claude/agents/yueh-trust-verify.md +40 -0
  262. package/dist/.claude/agents/zatanna-impossible.md +43 -0
  263. package/dist/.claude/agents/zechs-rival.md +39 -0
  264. package/dist/.claude/agents/zenitsu-alerts.md +37 -0
  265. package/dist/.claude/commands/ai.md +84 -0
  266. package/dist/.claude/commands/architect.md +107 -0
  267. package/dist/.claude/commands/assemble.md +223 -0
  268. package/dist/.claude/commands/assess.md +86 -0
  269. package/dist/.claude/commands/blueprint.md +135 -0
  270. package/dist/.claude/commands/build.md +138 -0
  271. package/dist/.claude/commands/campaign.md +224 -0
  272. package/dist/.claude/commands/cultivation.md +184 -0
  273. package/dist/.claude/commands/current.md +128 -0
  274. package/dist/.claude/commands/dangerroom.md +74 -0
  275. package/dist/.claude/commands/debrief.md +180 -0
  276. package/dist/.claude/commands/deploy.md +108 -0
  277. package/dist/.claude/commands/devops.md +160 -0
  278. package/dist/.claude/commands/engage.md +135 -0
  279. package/dist/.claude/commands/gauntlet.md +179 -0
  280. package/dist/.claude/commands/git.md +104 -0
  281. package/dist/.claude/commands/grow.md +160 -0
  282. package/dist/.claude/commands/imagine.md +126 -0
  283. package/dist/.claude/commands/portfolio.md +51 -0
  284. package/dist/.claude/commands/prd.md +113 -0
  285. package/dist/.claude/commands/qa.md +130 -0
  286. package/dist/.claude/commands/review.md +9 -0
  287. package/dist/.claude/commands/security.md +9 -0
  288. package/dist/.claude/commands/sentinel.md +90 -0
  289. package/dist/.claude/commands/test.md +114 -0
  290. package/dist/.claude/commands/thumper.md +116 -0
  291. package/dist/.claude/commands/treasury.md +117 -0
  292. package/dist/.claude/commands/ux.md +132 -0
  293. package/dist/.claude/commands/vault.md +198 -0
  294. package/dist/.claude/commands/void.md +148 -0
  295. package/dist/CHANGELOG.md +2621 -0
  296. package/dist/CLAUDE.md +292 -0
  297. package/dist/HOLOCRON.md +859 -0
  298. package/dist/VERSION.md +149 -0
  299. package/dist/docs/NAMING_REGISTRY.md +479 -0
  300. package/dist/docs/methods/AI_INTELLIGENCE.md +276 -0
  301. package/dist/docs/methods/ASSEMBLER.md +142 -0
  302. package/dist/docs/methods/BACKEND_ENGINEER.md +165 -0
  303. package/dist/docs/methods/BUILD_JOURNAL.md +214 -0
  304. package/dist/docs/methods/BUILD_PROTOCOL.md +436 -0
  305. package/dist/docs/methods/CAMPAIGN.md +569 -0
  306. package/dist/docs/methods/CONTEXT_MANAGEMENT.md +189 -0
  307. package/dist/docs/methods/DEEP_CURRENT.md +184 -0
  308. package/dist/docs/methods/DEVOPS_ENGINEER.md +297 -0
  309. package/dist/docs/methods/FIELD_MEDIC.md +265 -0
  310. package/dist/docs/methods/FORGE_ARTIST.md +108 -0
  311. package/dist/docs/methods/FORGE_KEEPER.md +270 -0
  312. package/dist/docs/methods/GAUNTLET.md +364 -0
  313. package/dist/docs/methods/GROWTH_STRATEGIST.md +466 -0
  314. package/dist/docs/methods/HEARTBEAT.md +168 -0
  315. package/dist/docs/methods/MCP_INTEGRATION.md +139 -0
  316. package/dist/docs/methods/MUSTER.md +152 -0
  317. package/dist/docs/methods/PRD_GENERATOR.md +186 -0
  318. package/dist/docs/methods/PRODUCT_DESIGN_FRONTEND.md +252 -0
  319. package/dist/docs/methods/QA_ENGINEER.md +360 -0
  320. package/dist/docs/methods/RELEASE_MANAGER.md +145 -0
  321. package/dist/docs/methods/SECURITY_AUDITOR.md +328 -0
  322. package/dist/docs/methods/SUB_AGENTS.md +375 -0
  323. package/dist/docs/methods/SYSTEMS_ARCHITECT.md +180 -0
  324. package/dist/docs/methods/TESTING.md +359 -0
  325. package/dist/docs/methods/THUMPER.md +175 -0
  326. package/dist/docs/methods/TIME_VAULT.md +120 -0
  327. package/dist/docs/methods/TREASURY.md +184 -0
  328. package/dist/docs/methods/TROUBLESHOOTING.md +265 -0
  329. package/dist/docs/patterns/README.md +52 -0
  330. package/dist/docs/patterns/ad-billing-adapter.ts +537 -0
  331. package/dist/docs/patterns/ad-platform-adapter.ts +421 -0
  332. package/dist/docs/patterns/ai-classifier.ts +195 -0
  333. package/dist/docs/patterns/ai-eval.ts +272 -0
  334. package/dist/docs/patterns/ai-orchestrator.ts +341 -0
  335. package/dist/docs/patterns/ai-router.ts +194 -0
  336. package/dist/docs/patterns/ai-tool-schema.ts +237 -0
  337. package/dist/docs/patterns/api-route.ts +241 -0
  338. package/dist/docs/patterns/backtest-engine.ts +499 -0
  339. package/dist/docs/patterns/browser-review.ts +292 -0
  340. package/dist/docs/patterns/combobox.tsx +300 -0
  341. package/dist/docs/patterns/component.tsx +262 -0
  342. package/dist/docs/patterns/daemon-process.ts +338 -0
  343. package/dist/docs/patterns/data-pipeline.ts +297 -0
  344. package/dist/docs/patterns/database-migration.ts +466 -0
  345. package/dist/docs/patterns/e2e-test.ts +629 -0
  346. package/dist/docs/patterns/error-handling.ts +312 -0
  347. package/dist/docs/patterns/execution-safety.ts +601 -0
  348. package/dist/docs/patterns/financial-transaction.ts +366 -0
  349. package/dist/docs/patterns/funding-plan.ts +462 -0
  350. package/dist/docs/patterns/game-entity.ts +137 -0
  351. package/dist/docs/patterns/game-loop.ts +113 -0
  352. package/dist/docs/patterns/game-state.ts +143 -0
  353. package/dist/docs/patterns/job-queue.ts +225 -0
  354. package/dist/docs/patterns/kongo-integration.ts +164 -0
  355. package/dist/docs/patterns/middleware.ts +363 -0
  356. package/dist/docs/patterns/mobile-screen.tsx +139 -0
  357. package/dist/docs/patterns/mobile-service.ts +167 -0
  358. package/dist/docs/patterns/multi-tenant.ts +382 -0
  359. package/dist/docs/patterns/oauth-token-lifecycle.ts +223 -0
  360. package/dist/docs/patterns/outbound-rate-limiter.ts +260 -0
  361. package/dist/docs/patterns/prompt-template.ts +195 -0
  362. package/dist/docs/patterns/revenue-source-adapter.ts +311 -0
  363. package/dist/docs/patterns/service.ts +224 -0
  364. package/dist/docs/patterns/sse-endpoint.ts +118 -0
  365. package/dist/docs/patterns/stablecoin-adapter.ts +511 -0
  366. package/dist/docs/patterns/third-party-script.ts +68 -0
  367. package/dist/scripts/thumper/gom-jabbar.sh +241 -0
  368. package/dist/scripts/thumper/relay.sh +610 -0
  369. package/dist/scripts/thumper/scan.sh +359 -0
  370. package/dist/scripts/thumper/thumper.sh +190 -0
  371. package/dist/scripts/thumper/water-rings.sh +76 -0
  372. package/dist/scripts/vault-read.d.ts +11 -0
  373. package/dist/scripts/vault-read.js +89 -0
  374. package/dist/scripts/voidforge.d.ts +21 -0
  375. package/dist/scripts/voidforge.js +614 -0
  376. package/dist/wizard/api/auth.d.ts +5 -0
  377. package/dist/wizard/api/auth.js +139 -0
  378. package/dist/wizard/api/blueprint.d.ts +34 -0
  379. package/dist/wizard/api/blueprint.js +161 -0
  380. package/dist/wizard/api/cloud-providers.d.ts +16 -0
  381. package/dist/wizard/api/cloud-providers.js +363 -0
  382. package/dist/wizard/api/credentials.d.ts +1 -0
  383. package/dist/wizard/api/credentials.js +265 -0
  384. package/dist/wizard/api/danger-room.d.ts +24 -0
  385. package/dist/wizard/api/danger-room.js +274 -0
  386. package/dist/wizard/api/deploy.d.ts +4 -0
  387. package/dist/wizard/api/deploy.js +164 -0
  388. package/dist/wizard/api/prd.d.ts +1 -0
  389. package/dist/wizard/api/prd.js +363 -0
  390. package/dist/wizard/api/project.d.ts +1 -0
  391. package/dist/wizard/api/project.js +241 -0
  392. package/dist/wizard/api/projects-data.d.ts +5 -0
  393. package/dist/wizard/api/projects-data.js +234 -0
  394. package/dist/wizard/api/projects-list.d.ts +5 -0
  395. package/dist/wizard/api/projects-list.js +227 -0
  396. package/dist/wizard/api/projects.d.ts +7 -0
  397. package/dist/wizard/api/projects.js +273 -0
  398. package/dist/wizard/api/provision-status.d.ts +5 -0
  399. package/dist/wizard/api/provision-status.js +47 -0
  400. package/dist/wizard/api/provision-steps.d.ts +21 -0
  401. package/dist/wizard/api/provision-steps.js +44 -0
  402. package/dist/wizard/api/provision-validate.d.ts +22 -0
  403. package/dist/wizard/api/provision-validate.js +164 -0
  404. package/dist/wizard/api/provision.d.ts +2 -0
  405. package/dist/wizard/api/provision.js +239 -0
  406. package/dist/wizard/api/terminal.d.ts +25 -0
  407. package/dist/wizard/api/terminal.js +246 -0
  408. package/dist/wizard/api/users.d.ts +6 -0
  409. package/dist/wizard/api/users.js +244 -0
  410. package/dist/wizard/api/war-room.d.ts +16 -0
  411. package/dist/wizard/api/war-room.js +70 -0
  412. package/dist/wizard/danger-room.config.json +5 -0
  413. package/dist/wizard/lib/ad-platform-core.d.ts +6 -0
  414. package/dist/wizard/lib/ad-platform-core.js +1 -0
  415. package/dist/wizard/lib/adapters/index.d.ts +52 -0
  416. package/dist/wizard/lib/adapters/index.js +38 -0
  417. package/dist/wizard/lib/adapters/sandbox-bank.d.ts +17 -0
  418. package/dist/wizard/lib/adapters/sandbox-bank.js +77 -0
  419. package/dist/wizard/lib/adapters/sandbox.d.ts +39 -0
  420. package/dist/wizard/lib/adapters/sandbox.js +174 -0
  421. package/dist/wizard/lib/adapters/stripe.d.ts +19 -0
  422. package/dist/wizard/lib/adapters/stripe.js +143 -0
  423. package/dist/wizard/lib/adapters/types.d.ts +9 -0
  424. package/dist/wizard/lib/adapters/types.js +10 -0
  425. package/dist/wizard/lib/agent-memory.d.ts +36 -0
  426. package/dist/wizard/lib/agent-memory.js +114 -0
  427. package/dist/wizard/lib/agent-registry.d.ts +21 -0
  428. package/dist/wizard/lib/agent-registry.js +105 -0
  429. package/dist/wizard/lib/anomaly-detection.d.ts +59 -0
  430. package/dist/wizard/lib/anomaly-detection.js +122 -0
  431. package/dist/wizard/lib/anthropic.d.ts +21 -0
  432. package/dist/wizard/lib/anthropic.js +105 -0
  433. package/dist/wizard/lib/asset-scanner.d.ts +23 -0
  434. package/dist/wizard/lib/asset-scanner.js +107 -0
  435. package/dist/wizard/lib/audit-log.d.ts +23 -0
  436. package/dist/wizard/lib/audit-log.js +70 -0
  437. package/dist/wizard/lib/autonomy-controller.d.ts +76 -0
  438. package/dist/wizard/lib/autonomy-controller.js +184 -0
  439. package/dist/wizard/lib/body-parser.d.ts +2 -0
  440. package/dist/wizard/lib/body-parser.js +36 -0
  441. package/dist/wizard/lib/build-analytics.d.ts +39 -0
  442. package/dist/wizard/lib/build-analytics.js +91 -0
  443. package/dist/wizard/lib/build-step.d.ts +21 -0
  444. package/dist/wizard/lib/build-step.js +104 -0
  445. package/dist/wizard/lib/campaign-proposer.d.ts +39 -0
  446. package/dist/wizard/lib/campaign-proposer.js +181 -0
  447. package/dist/wizard/lib/campaign-state-machine.d.ts +63 -0
  448. package/dist/wizard/lib/campaign-state-machine.js +114 -0
  449. package/dist/wizard/lib/ci-generator.d.ts +14 -0
  450. package/dist/wizard/lib/ci-generator.js +187 -0
  451. package/dist/wizard/lib/claude-merge.d.ts +38 -0
  452. package/dist/wizard/lib/claude-merge.js +115 -0
  453. package/dist/wizard/lib/codegen/erd-gen.d.ts +16 -0
  454. package/dist/wizard/lib/codegen/erd-gen.js +98 -0
  455. package/dist/wizard/lib/codegen/integrations.d.ts +18 -0
  456. package/dist/wizard/lib/codegen/integrations.js +189 -0
  457. package/dist/wizard/lib/codegen/openapi-gen.d.ts +15 -0
  458. package/dist/wizard/lib/codegen/openapi-gen.js +79 -0
  459. package/dist/wizard/lib/codegen/prisma-types.d.ts +15 -0
  460. package/dist/wizard/lib/codegen/prisma-types.js +44 -0
  461. package/dist/wizard/lib/codegen/seed-gen.d.ts +16 -0
  462. package/dist/wizard/lib/codegen/seed-gen.js +128 -0
  463. package/dist/wizard/lib/compliance.d.ts +51 -0
  464. package/dist/wizard/lib/compliance.js +112 -0
  465. package/dist/wizard/lib/correlation-engine.d.ts +59 -0
  466. package/dist/wizard/lib/correlation-engine.js +152 -0
  467. package/dist/wizard/lib/cost-estimator.d.ts +22 -0
  468. package/dist/wizard/lib/cost-estimator.js +72 -0
  469. package/dist/wizard/lib/cost-tracker.d.ts +27 -0
  470. package/dist/wizard/lib/cost-tracker.js +37 -0
  471. package/dist/wizard/lib/daemon-aggregator.d.ts +76 -0
  472. package/dist/wizard/lib/daemon-aggregator.js +241 -0
  473. package/dist/wizard/lib/daemon-core.d.ts +16 -0
  474. package/dist/wizard/lib/daemon-core.js +39 -0
  475. package/dist/wizard/lib/dashboard-data.d.ts +123 -0
  476. package/dist/wizard/lib/dashboard-data.js +314 -0
  477. package/dist/wizard/lib/dashboard-ws.d.ts +28 -0
  478. package/dist/wizard/lib/dashboard-ws.js +117 -0
  479. package/dist/wizard/lib/deep-current.d.ts +77 -0
  480. package/dist/wizard/lib/deep-current.js +247 -0
  481. package/dist/wizard/lib/deploy-coordinator.d.ts +40 -0
  482. package/dist/wizard/lib/deploy-coordinator.js +86 -0
  483. package/dist/wizard/lib/deploy-log.d.ts +28 -0
  484. package/dist/wizard/lib/deploy-log.js +52 -0
  485. package/dist/wizard/lib/desktop-notify.d.ts +27 -0
  486. package/dist/wizard/lib/desktop-notify.js +98 -0
  487. package/dist/wizard/lib/dns/cloudflare-dns.d.ts +35 -0
  488. package/dist/wizard/lib/dns/cloudflare-dns.js +216 -0
  489. package/dist/wizard/lib/dns/cloudflare-registrar.d.ts +31 -0
  490. package/dist/wizard/lib/dns/cloudflare-registrar.js +148 -0
  491. package/dist/wizard/lib/dns/types.d.ts +22 -0
  492. package/dist/wizard/lib/dns/types.js +4 -0
  493. package/dist/wizard/lib/document-discovery.d.ts +33 -0
  494. package/dist/wizard/lib/document-discovery.js +145 -0
  495. package/dist/wizard/lib/env-validator.d.ts +14 -0
  496. package/dist/wizard/lib/env-validator.js +205 -0
  497. package/dist/wizard/lib/env-writer.d.ts +13 -0
  498. package/dist/wizard/lib/env-writer.js +26 -0
  499. package/dist/wizard/lib/exec.d.ts +30 -0
  500. package/dist/wizard/lib/exec.js +52 -0
  501. package/dist/wizard/lib/experiment.d.ts +70 -0
  502. package/dist/wizard/lib/experiment.js +169 -0
  503. package/dist/wizard/lib/extensions.d.ts +20 -0
  504. package/dist/wizard/lib/extensions.js +183 -0
  505. package/dist/wizard/lib/financial/adapter-factory.d.ts +47 -0
  506. package/dist/wizard/lib/financial/adapter-factory.js +225 -0
  507. package/dist/wizard/lib/financial/billing/base.d.ts +6 -0
  508. package/dist/wizard/lib/financial/billing/base.js +1 -0
  509. package/dist/wizard/lib/financial/billing/google-billing.d.ts +56 -0
  510. package/dist/wizard/lib/financial/billing/google-billing.js +298 -0
  511. package/dist/wizard/lib/financial/billing/meta-billing.d.ts +54 -0
  512. package/dist/wizard/lib/financial/billing/meta-billing.js +243 -0
  513. package/dist/wizard/lib/financial/billing/tiktok-billing.d.ts +54 -0
  514. package/dist/wizard/lib/financial/billing/tiktok-billing.js +260 -0
  515. package/dist/wizard/lib/financial/campaign/base.d.ts +13 -0
  516. package/dist/wizard/lib/financial/campaign/base.js +1 -0
  517. package/dist/wizard/lib/financial/campaign/campaign-common.d.ts +21 -0
  518. package/dist/wizard/lib/financial/campaign/campaign-common.js +58 -0
  519. package/dist/wizard/lib/financial/campaign/google-api.d.ts +35 -0
  520. package/dist/wizard/lib/financial/campaign/google-api.js +118 -0
  521. package/dist/wizard/lib/financial/campaign/google-campaign.d.ts +38 -0
  522. package/dist/wizard/lib/financial/campaign/google-campaign.js +186 -0
  523. package/dist/wizard/lib/financial/campaign/meta-api.d.ts +28 -0
  524. package/dist/wizard/lib/financial/campaign/meta-api.js +93 -0
  525. package/dist/wizard/lib/financial/campaign/meta-campaign.d.ts +32 -0
  526. package/dist/wizard/lib/financial/campaign/meta-campaign.js +189 -0
  527. package/dist/wizard/lib/financial/campaign/sandbox-campaign.d.ts +45 -0
  528. package/dist/wizard/lib/financial/campaign/sandbox-campaign.js +261 -0
  529. package/dist/wizard/lib/financial/campaign/tiktok-api.d.ts +25 -0
  530. package/dist/wizard/lib/financial/campaign/tiktok-api.js +81 -0
  531. package/dist/wizard/lib/financial/campaign/tiktok-campaign.d.ts +37 -0
  532. package/dist/wizard/lib/financial/campaign/tiktok-campaign.js +155 -0
  533. package/dist/wizard/lib/financial/funding-auto.d.ts +44 -0
  534. package/dist/wizard/lib/financial/funding-auto.js +52 -0
  535. package/dist/wizard/lib/financial/funding-policy.d.ts +60 -0
  536. package/dist/wizard/lib/financial/funding-policy.js +179 -0
  537. package/dist/wizard/lib/financial/platform-planner.d.ts +47 -0
  538. package/dist/wizard/lib/financial/platform-planner.js +134 -0
  539. package/dist/wizard/lib/financial/reconciliation-engine.d.ts +78 -0
  540. package/dist/wizard/lib/financial/reconciliation-engine.js +193 -0
  541. package/dist/wizard/lib/financial/registry.d.ts +22 -0
  542. package/dist/wizard/lib/financial/registry.js +26 -0
  543. package/dist/wizard/lib/financial/reporting.d.ts +96 -0
  544. package/dist/wizard/lib/financial/reporting.js +198 -0
  545. package/dist/wizard/lib/financial/stablecoin/base.d.ts +6 -0
  546. package/dist/wizard/lib/financial/stablecoin/base.js +1 -0
  547. package/dist/wizard/lib/financial/stablecoin/circle.d.ts +54 -0
  548. package/dist/wizard/lib/financial/stablecoin/circle.js +367 -0
  549. package/dist/wizard/lib/financial/stablecoin/mercury.d.ts +24 -0
  550. package/dist/wizard/lib/financial/stablecoin/mercury.js +171 -0
  551. package/dist/wizard/lib/financial/stablecoin/sandbox-stablecoin.d.ts +47 -0
  552. package/dist/wizard/lib/financial/stablecoin/sandbox-stablecoin.js +202 -0
  553. package/dist/wizard/lib/financial/treasury-planner.d.ts +52 -0
  554. package/dist/wizard/lib/financial/treasury-planner.js +128 -0
  555. package/dist/wizard/lib/financial-core.d.ts +6 -0
  556. package/dist/wizard/lib/financial-core.js +5 -0
  557. package/dist/wizard/lib/financial-vault.d.ts +34 -0
  558. package/dist/wizard/lib/financial-vault.js +200 -0
  559. package/dist/wizard/lib/frontmatter.d.ts +30 -0
  560. package/dist/wizard/lib/frontmatter.js +99 -0
  561. package/dist/wizard/lib/gap-analysis.d.ts +37 -0
  562. package/dist/wizard/lib/gap-analysis.js +218 -0
  563. package/dist/wizard/lib/github.d.ts +22 -0
  564. package/dist/wizard/lib/github.js +261 -0
  565. package/dist/wizard/lib/headless-deploy.d.ts +14 -0
  566. package/dist/wizard/lib/headless-deploy.js +452 -0
  567. package/dist/wizard/lib/health-monitor.d.ts +15 -0
  568. package/dist/wizard/lib/health-monitor.js +91 -0
  569. package/dist/wizard/lib/health-poller.d.ts +9 -0
  570. package/dist/wizard/lib/health-poller.js +123 -0
  571. package/dist/wizard/lib/heartbeat-lifecycle.d.ts +71 -0
  572. package/dist/wizard/lib/heartbeat-lifecycle.js +107 -0
  573. package/dist/wizard/lib/heartbeat-scheduler.d.ts +26 -0
  574. package/dist/wizard/lib/heartbeat-scheduler.js +155 -0
  575. package/dist/wizard/lib/heartbeat.d.ts +22 -0
  576. package/dist/wizard/lib/heartbeat.js +538 -0
  577. package/dist/wizard/lib/herald.d.ts +28 -0
  578. package/dist/wizard/lib/herald.js +167 -0
  579. package/dist/wizard/lib/http-helpers.d.ts +9 -0
  580. package/dist/wizard/lib/http-helpers.js +24 -0
  581. package/dist/wizard/lib/image-gen.d.ts +56 -0
  582. package/dist/wizard/lib/image-gen.js +159 -0
  583. package/dist/wizard/lib/instance-sizing.d.ts +26 -0
  584. package/dist/wizard/lib/instance-sizing.js +51 -0
  585. package/dist/wizard/lib/kongo/analytics.d.ts +29 -0
  586. package/dist/wizard/lib/kongo/analytics.js +179 -0
  587. package/dist/wizard/lib/kongo/campaigns.d.ts +52 -0
  588. package/dist/wizard/lib/kongo/campaigns.js +91 -0
  589. package/dist/wizard/lib/kongo/client.d.ts +58 -0
  590. package/dist/wizard/lib/kongo/client.js +221 -0
  591. package/dist/wizard/lib/kongo/jobs.d.ts +57 -0
  592. package/dist/wizard/lib/kongo/jobs.js +122 -0
  593. package/dist/wizard/lib/kongo/pages.d.ts +60 -0
  594. package/dist/wizard/lib/kongo/pages.js +150 -0
  595. package/dist/wizard/lib/kongo/provisioner.d.ts +64 -0
  596. package/dist/wizard/lib/kongo/provisioner.js +116 -0
  597. package/dist/wizard/lib/kongo/seed.d.ts +49 -0
  598. package/dist/wizard/lib/kongo/seed.js +237 -0
  599. package/dist/wizard/lib/kongo/types.d.ts +323 -0
  600. package/dist/wizard/lib/kongo/types.js +11 -0
  601. package/dist/wizard/lib/kongo/variants.d.ts +57 -0
  602. package/dist/wizard/lib/kongo/variants.js +88 -0
  603. package/dist/wizard/lib/kongo/webhooks.d.ts +41 -0
  604. package/dist/wizard/lib/kongo/webhooks.js +112 -0
  605. package/dist/wizard/lib/marker.d.ts +28 -0
  606. package/dist/wizard/lib/marker.js +79 -0
  607. package/dist/wizard/lib/migrator.d.ts +35 -0
  608. package/dist/wizard/lib/migrator.js +190 -0
  609. package/dist/wizard/lib/natural-language-deploy.d.ts +30 -0
  610. package/dist/wizard/lib/natural-language-deploy.js +186 -0
  611. package/dist/wizard/lib/network.d.ts +22 -0
  612. package/dist/wizard/lib/network.js +72 -0
  613. package/dist/wizard/lib/oauth-core.d.ts +6 -0
  614. package/dist/wizard/lib/oauth-core.js +5 -0
  615. package/dist/wizard/lib/open-browser.d.ts +1 -0
  616. package/dist/wizard/lib/open-browser.js +26 -0
  617. package/dist/wizard/lib/patterns/ad-billing-adapter.d.ts +209 -0
  618. package/dist/wizard/lib/patterns/ad-billing-adapter.js +269 -0
  619. package/dist/wizard/lib/patterns/ad-platform-adapter.d.ts +200 -0
  620. package/dist/wizard/lib/patterns/ad-platform-adapter.js +212 -0
  621. package/dist/wizard/lib/patterns/daemon-process.d.ts +88 -0
  622. package/dist/wizard/lib/patterns/daemon-process.js +271 -0
  623. package/dist/wizard/lib/patterns/financial-transaction.d.ts +171 -0
  624. package/dist/wizard/lib/patterns/financial-transaction.js +154 -0
  625. package/dist/wizard/lib/patterns/funding-plan.d.ts +136 -0
  626. package/dist/wizard/lib/patterns/funding-plan.js +200 -0
  627. package/dist/wizard/lib/patterns/oauth-token-lifecycle.d.ts +94 -0
  628. package/dist/wizard/lib/patterns/oauth-token-lifecycle.js +139 -0
  629. package/dist/wizard/lib/patterns/outbound-rate-limiter.d.ts +67 -0
  630. package/dist/wizard/lib/patterns/outbound-rate-limiter.js +216 -0
  631. package/dist/wizard/lib/patterns/revenue-source-adapter.d.ts +96 -0
  632. package/dist/wizard/lib/patterns/revenue-source-adapter.js +182 -0
  633. package/dist/wizard/lib/patterns/stablecoin-adapter.d.ts +218 -0
  634. package/dist/wizard/lib/patterns/stablecoin-adapter.js +264 -0
  635. package/dist/wizard/lib/prd-validator.d.ts +39 -0
  636. package/dist/wizard/lib/prd-validator.js +137 -0
  637. package/dist/wizard/lib/project-init.d.ts +24 -0
  638. package/dist/wizard/lib/project-init.js +228 -0
  639. package/dist/wizard/lib/project-registry.d.ts +86 -0
  640. package/dist/wizard/lib/project-registry.js +359 -0
  641. package/dist/wizard/lib/project-scope.d.ts +64 -0
  642. package/dist/wizard/lib/project-scope.js +96 -0
  643. package/dist/wizard/lib/project-vault.d.ts +47 -0
  644. package/dist/wizard/lib/project-vault.js +221 -0
  645. package/dist/wizard/lib/provision-manifest.d.ts +44 -0
  646. package/dist/wizard/lib/provision-manifest.js +164 -0
  647. package/dist/wizard/lib/provisioner-registry.d.ts +15 -0
  648. package/dist/wizard/lib/provisioner-registry.js +34 -0
  649. package/dist/wizard/lib/provisioners/aws-config.d.ts +36 -0
  650. package/dist/wizard/lib/provisioners/aws-config.js +56 -0
  651. package/dist/wizard/lib/provisioners/aws-ec2.d.ts +19 -0
  652. package/dist/wizard/lib/provisioners/aws-ec2.js +241 -0
  653. package/dist/wizard/lib/provisioners/aws-rds.d.ts +10 -0
  654. package/dist/wizard/lib/provisioners/aws-rds.js +199 -0
  655. package/dist/wizard/lib/provisioners/aws-vps.d.ts +6 -0
  656. package/dist/wizard/lib/provisioners/aws-vps.js +231 -0
  657. package/dist/wizard/lib/provisioners/cloudflare.d.ts +6 -0
  658. package/dist/wizard/lib/provisioners/cloudflare.js +300 -0
  659. package/dist/wizard/lib/provisioners/docker.d.ts +6 -0
  660. package/dist/wizard/lib/provisioners/docker.js +75 -0
  661. package/dist/wizard/lib/provisioners/http-client.d.ts +20 -0
  662. package/dist/wizard/lib/provisioners/http-client.js +79 -0
  663. package/dist/wizard/lib/provisioners/railway-config.d.ts +24 -0
  664. package/dist/wizard/lib/provisioners/railway-config.js +220 -0
  665. package/dist/wizard/lib/provisioners/railway-deploy.d.ts +19 -0
  666. package/dist/wizard/lib/provisioners/railway-deploy.js +205 -0
  667. package/dist/wizard/lib/provisioners/railway.d.ts +6 -0
  668. package/dist/wizard/lib/provisioners/railway.js +45 -0
  669. package/dist/wizard/lib/provisioners/scripts/caddyfile.d.ts +10 -0
  670. package/dist/wizard/lib/provisioners/scripts/caddyfile.js +54 -0
  671. package/dist/wizard/lib/provisioners/scripts/deploy-vps.d.ts +10 -0
  672. package/dist/wizard/lib/provisioners/scripts/deploy-vps.js +112 -0
  673. package/dist/wizard/lib/provisioners/scripts/docker-compose.d.ts +11 -0
  674. package/dist/wizard/lib/provisioners/scripts/docker-compose.js +91 -0
  675. package/dist/wizard/lib/provisioners/scripts/dockerfile.d.ts +5 -0
  676. package/dist/wizard/lib/provisioners/scripts/dockerfile.js +185 -0
  677. package/dist/wizard/lib/provisioners/scripts/ecosystem-config.d.ts +10 -0
  678. package/dist/wizard/lib/provisioners/scripts/ecosystem-config.js +36 -0
  679. package/dist/wizard/lib/provisioners/scripts/provision-vps.d.ts +14 -0
  680. package/dist/wizard/lib/provisioners/scripts/provision-vps.js +202 -0
  681. package/dist/wizard/lib/provisioners/scripts/rollback-vps.d.ts +10 -0
  682. package/dist/wizard/lib/provisioners/scripts/rollback-vps.js +67 -0
  683. package/dist/wizard/lib/provisioners/self-deploy.d.ts +41 -0
  684. package/dist/wizard/lib/provisioners/self-deploy.js +185 -0
  685. package/dist/wizard/lib/provisioners/static-s3.d.ts +6 -0
  686. package/dist/wizard/lib/provisioners/static-s3.js +235 -0
  687. package/dist/wizard/lib/provisioners/types.d.ts +40 -0
  688. package/dist/wizard/lib/provisioners/types.js +4 -0
  689. package/dist/wizard/lib/provisioners/vercel.d.ts +6 -0
  690. package/dist/wizard/lib/provisioners/vercel.js +287 -0
  691. package/dist/wizard/lib/pty-manager.d.ts +42 -0
  692. package/dist/wizard/lib/pty-manager.js +244 -0
  693. package/dist/wizard/lib/rate-limiter-core.d.ts +5 -0
  694. package/dist/wizard/lib/rate-limiter-core.js +5 -0
  695. package/dist/wizard/lib/reconciliation.d.ts +43 -0
  696. package/dist/wizard/lib/reconciliation.js +173 -0
  697. package/dist/wizard/lib/revenue-types.d.ts +5 -0
  698. package/dist/wizard/lib/revenue-types.js +1 -0
  699. package/dist/wizard/lib/route-optimizer.d.ts +28 -0
  700. package/dist/wizard/lib/route-optimizer.js +93 -0
  701. package/dist/wizard/lib/s3-deploy.d.ts +19 -0
  702. package/dist/wizard/lib/s3-deploy.js +156 -0
  703. package/dist/wizard/lib/safety-tiers.d.ts +76 -0
  704. package/dist/wizard/lib/safety-tiers.js +134 -0
  705. package/dist/wizard/lib/sentry-generator.d.ts +15 -0
  706. package/dist/wizard/lib/sentry-generator.js +116 -0
  707. package/dist/wizard/lib/server-config.d.ts +13 -0
  708. package/dist/wizard/lib/server-config.js +23 -0
  709. package/dist/wizard/lib/service-install.d.ts +18 -0
  710. package/dist/wizard/lib/service-install.js +182 -0
  711. package/dist/wizard/lib/site-scanner.d.ts +80 -0
  712. package/dist/wizard/lib/site-scanner.js +262 -0
  713. package/dist/wizard/lib/ssh-deploy.d.ts +25 -0
  714. package/dist/wizard/lib/ssh-deploy.js +225 -0
  715. package/dist/wizard/lib/templates.d.ts +24 -0
  716. package/dist/wizard/lib/templates.js +219 -0
  717. package/dist/wizard/lib/totp.d.ts +35 -0
  718. package/dist/wizard/lib/totp.js +277 -0
  719. package/dist/wizard/lib/tower-auth.d.ts +43 -0
  720. package/dist/wizard/lib/tower-auth.js +352 -0
  721. package/dist/wizard/lib/tower-rate-limit.d.ts +14 -0
  722. package/dist/wizard/lib/tower-rate-limit.js +61 -0
  723. package/dist/wizard/lib/tower-session.d.ts +28 -0
  724. package/dist/wizard/lib/tower-session.js +119 -0
  725. package/dist/wizard/lib/treasury-backup.d.ts +23 -0
  726. package/dist/wizard/lib/treasury-backup.js +127 -0
  727. package/dist/wizard/lib/treasury-circuit-breakers.d.ts +28 -0
  728. package/dist/wizard/lib/treasury-circuit-breakers.js +74 -0
  729. package/dist/wizard/lib/treasury-handlers.d.ts +21 -0
  730. package/dist/wizard/lib/treasury-handlers.js +281 -0
  731. package/dist/wizard/lib/treasury-heartbeat.d.ts +18 -0
  732. package/dist/wizard/lib/treasury-heartbeat.js +20 -0
  733. package/dist/wizard/lib/treasury-io.d.ts +107 -0
  734. package/dist/wizard/lib/treasury-io.js +254 -0
  735. package/dist/wizard/lib/treasury-jobs.d.ts +14 -0
  736. package/dist/wizard/lib/treasury-jobs.js +589 -0
  737. package/dist/wizard/lib/treasury-migrator.d.ts +59 -0
  738. package/dist/wizard/lib/treasury-migrator.js +227 -0
  739. package/dist/wizard/lib/treasury-reader.d.ts +52 -0
  740. package/dist/wizard/lib/treasury-reader.js +235 -0
  741. package/dist/wizard/lib/updater.d.ts +29 -0
  742. package/dist/wizard/lib/updater.js +203 -0
  743. package/dist/wizard/lib/user-manager.d.ts +39 -0
  744. package/dist/wizard/lib/user-manager.js +182 -0
  745. package/dist/wizard/lib/vault.d.ts +26 -0
  746. package/dist/wizard/lib/vault.js +161 -0
  747. package/dist/wizard/router.d.ts +12 -0
  748. package/dist/wizard/router.js +58 -0
  749. package/dist/wizard/server.d.ts +18 -0
  750. package/dist/wizard/server.js +427 -0
  751. package/dist/wizard/ui/app.js +1357 -0
  752. package/dist/wizard/ui/danger-room-prophecy.js +217 -0
  753. package/dist/wizard/ui/danger-room.html +27 -0
  754. package/dist/wizard/ui/danger-room.js +29 -0
  755. package/dist/wizard/ui/deploy.html +181 -0
  756. package/dist/wizard/ui/deploy.js +616 -0
  757. package/dist/wizard/ui/favicon.svg +11 -0
  758. package/dist/wizard/ui/index.html +407 -0
  759. package/dist/wizard/ui/lobby.html +235 -0
  760. package/dist/wizard/ui/lobby.js +843 -0
  761. package/dist/wizard/ui/login.html +111 -0
  762. package/dist/wizard/ui/login.js +199 -0
  763. package/dist/wizard/ui/project.html +285 -0
  764. package/dist/wizard/ui/project.js +324 -0
  765. package/dist/wizard/ui/rollback.js +107 -0
  766. package/dist/wizard/ui/styles.css +1040 -0
  767. package/dist/wizard/ui/tower.html +177 -0
  768. package/dist/wizard/ui/tower.js +445 -0
  769. package/dist/wizard/ui/war-room-prophecy.js +217 -0
  770. package/dist/wizard/ui/war-room.html +27 -0
  771. package/dist/wizard/ui/war-room.js +29 -0
  772. package/package.json +60 -0
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Minimal YAML frontmatter parser for PRD documents.
3
+ * Handles the simple key: value format used in PRD frontmatter blocks.
4
+ */
5
+ export function parseFrontmatter(content) {
6
+ // Try ```yaml ... ``` block first (markdown code fence)
7
+ const yamlBlockMatch = content.match(/```yaml\s*\n([\s\S]*?)```/);
8
+ // Then try --- ... --- block (standard YAML frontmatter)
9
+ const dashBlockMatch = !yamlBlockMatch ? content.match(/^---\s*\n([\s\S]*?)\n---/) : null;
10
+ const match = yamlBlockMatch ?? dashBlockMatch;
11
+ if (!match) {
12
+ return { frontmatter: {}, body: content };
13
+ }
14
+ const yamlStr = match[1];
15
+ const frontmatter = {};
16
+ for (const line of yamlStr.split('\n')) {
17
+ const trimmed = line.trim();
18
+ if (!trimmed || trimmed.startsWith('#'))
19
+ continue;
20
+ const match = trimmed.match(/^(\w+):\s*(.+)$/);
21
+ if (match) {
22
+ const key = match[1];
23
+ let value = match[2].trim();
24
+ // Track whether the original value was quoted
25
+ const wasQuoted = (value.startsWith('"') && value.endsWith('"')) ||
26
+ (value.startsWith("'") && value.endsWith("'"));
27
+ // Strip quotes
28
+ if (wasQuoted) {
29
+ value = value.slice(1, -1);
30
+ }
31
+ // Strip inline comments — but only if the value was NOT quoted
32
+ // (a `#` inside a quoted value is literal, not a comment)
33
+ if (!wasQuoted) {
34
+ const commentIdx = value.indexOf('#');
35
+ if (commentIdx > 0) {
36
+ value = value.slice(0, commentIdx).trim();
37
+ }
38
+ }
39
+ frontmatter[key] = value;
40
+ }
41
+ }
42
+ return { frontmatter, body: content };
43
+ }
44
+ export function generateFrontmatterBlock(fm) {
45
+ const lines = ['```yaml'];
46
+ if (fm.name)
47
+ lines.push(`name: "${fm.name}"`);
48
+ if (fm.type)
49
+ lines.push(`type: "${fm.type}"`);
50
+ lines.push('');
51
+ if (fm.framework)
52
+ lines.push(`framework: "${fm.framework}"`);
53
+ if (fm.database)
54
+ lines.push(`database: "${fm.database}"`);
55
+ if (fm.cache)
56
+ lines.push(`cache: "${fm.cache}"`);
57
+ if (fm.styling)
58
+ lines.push(`styling: "${fm.styling}"`);
59
+ lines.push('');
60
+ if (fm.auth)
61
+ lines.push(`auth: ${fm.auth}`);
62
+ if (fm.payments)
63
+ lines.push(`payments: ${fm.payments}`);
64
+ if (fm.workers)
65
+ lines.push(`workers: ${fm.workers}`);
66
+ if (fm.admin)
67
+ lines.push(`admin: ${fm.admin}`);
68
+ if (fm.marketing)
69
+ lines.push(`marketing: ${fm.marketing}`);
70
+ if (fm.email)
71
+ lines.push(`email: ${fm.email}`);
72
+ lines.push('');
73
+ if (fm.deploy)
74
+ lines.push(`deploy: "${fm.deploy}"`);
75
+ if (fm.instance_type)
76
+ lines.push(`instance_type: "${fm.instance_type}"`);
77
+ if (fm.hostname)
78
+ lines.push(`hostname: "${fm.hostname}"`);
79
+ lines.push('```');
80
+ return lines.join('\n');
81
+ }
82
+ const VALID_TYPES = ['full-stack', 'api-only', 'static-site', 'prototype'];
83
+ const VALID_DEPLOY = ['vps', 'vercel', 'railway', 'cloudflare', 'static', 'docker'];
84
+ const VALID_INSTANCE_TYPES = ['t3.micro', 't3.small', 't3.medium', 't3.large'];
85
+ export function validateFrontmatter(fm) {
86
+ const errors = [];
87
+ if (!fm.name)
88
+ errors.push('Missing required field: name');
89
+ if (fm.type && !VALID_TYPES.includes(fm.type)) {
90
+ errors.push(`Invalid type: "${fm.type}". Must be one of: ${VALID_TYPES.join(', ')}`);
91
+ }
92
+ if (fm.deploy && !VALID_DEPLOY.includes(fm.deploy)) {
93
+ errors.push(`Invalid deploy: "${fm.deploy}". Must be one of: ${VALID_DEPLOY.join(', ')}`);
94
+ }
95
+ if (fm.instance_type && !VALID_INSTANCE_TYPES.includes(fm.instance_type)) {
96
+ errors.push(`Invalid instance_type: "${fm.instance_type}". Must be one of: ${VALID_INSTANCE_TYPES.join(', ')}`);
97
+ }
98
+ return errors;
99
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Seven's Gap Analysis Engine — 5-dimension project scoring (v12.1).
3
+ *
4
+ * Analyzes a project across: feature completeness, quality, performance,
5
+ * growth readiness, and revenue potential. Produces a scored situation model
6
+ * that drives Tuvok's campaign proposals.
7
+ *
8
+ * PRD Reference: ROADMAP v12.1 deliverables, DEEP_CURRENT.md ANALYZE step
9
+ */
10
+ import type { SituationModel, DimensionScore } from './deep-current.js';
11
+ /**
12
+ * Score feature completeness by diffing PRD requirements against codebase.
13
+ * Uses a simplified heuristic: count PRD sections vs implemented routes/components.
14
+ */
15
+ export declare function scoreFeatureCompleteness(projectDir: string): Promise<DimensionScore>;
16
+ /**
17
+ * Score quality from gauntlet findings, field reports, and test presence.
18
+ */
19
+ export declare function scoreQuality(projectDir: string): Promise<DimensionScore>;
20
+ /**
21
+ * Score revenue potential from treasury setup, payment integrations, and pricing presence.
22
+ */
23
+ export declare function scoreRevenuePotential(projectDir: string): Promise<DimensionScore>;
24
+ /**
25
+ * Run Seven's full gap analysis across all 5 dimensions.
26
+ * Performance and growthReadiness come from Torres's site scan (already in the model).
27
+ * Feature completeness, quality, and revenue potential are analyzed here.
28
+ */
29
+ export declare function analyzeGaps(model: SituationModel, projectDir: string): Promise<SituationModel>;
30
+ /**
31
+ * Find the weakest dimension — this drives the next campaign proposal.
32
+ */
33
+ export declare function findWeakestDimension(model: SituationModel): {
34
+ name: string;
35
+ score: number;
36
+ gaps: string[];
37
+ };
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Seven's Gap Analysis Engine — 5-dimension project scoring (v12.1).
3
+ *
4
+ * Analyzes a project across: feature completeness, quality, performance,
5
+ * growth readiness, and revenue potential. Produces a scored situation model
6
+ * that drives Tuvok's campaign proposals.
7
+ *
8
+ * PRD Reference: ROADMAP v12.1 deliverables, DEEP_CURRENT.md ANALYZE step
9
+ */
10
+ import { existsSync } from 'node:fs';
11
+ import { readFile, readdir } from 'node:fs/promises';
12
+ import { join } from 'node:path';
13
+ import { homedir } from 'node:os';
14
+ // ── Feature Completeness Dimension ────────────────────
15
+ /**
16
+ * Score feature completeness by diffing PRD requirements against codebase.
17
+ * Uses a simplified heuristic: count PRD sections vs implemented routes/components.
18
+ */
19
+ export async function scoreFeatureCompleteness(projectDir) {
20
+ const gaps = [];
21
+ let score = 50; // base — assumes halfway done if we can't fully analyze
22
+ // Read PRD if exists
23
+ const prdPaths = [join(projectDir, 'docs', 'PRD.md'), join(projectDir, 'PRD.md')];
24
+ let prdContent = '';
25
+ for (const p of prdPaths) {
26
+ if (existsSync(p)) {
27
+ prdContent = await readFile(p, 'utf-8');
28
+ break;
29
+ }
30
+ }
31
+ if (!prdContent) {
32
+ return { score: 0, gaps: ['No PRD found — cannot assess feature completeness'], lastUpdated: new Date().toISOString() };
33
+ }
34
+ // Count PRD feature sections (## headers that look like features)
35
+ const featureSections = (prdContent.match(/^#{2,3}\s+(?!Frontmatter|Version|Status)/gm) || []).length;
36
+ // Count source files as a proxy for implementation
37
+ let sourceFileCount = 0;
38
+ try {
39
+ const srcDirs = ['src', 'app', 'pages', 'components', 'lib', 'services', 'wizard/lib', 'wizard/ui'];
40
+ for (const dir of srcDirs) {
41
+ const fullDir = join(projectDir, dir);
42
+ if (existsSync(fullDir)) {
43
+ const files = await readdir(fullDir, { recursive: true });
44
+ sourceFileCount += files.filter(f => /\.(ts|tsx|js|jsx|py|rb)$/.test(String(f))).length;
45
+ }
46
+ }
47
+ }
48
+ catch { /* can't read dirs */ }
49
+ // Heuristic scoring
50
+ if (featureSections > 0 && sourceFileCount > 0) {
51
+ const ratio = Math.min(sourceFileCount / featureSections, 3); // cap at 3 files/section
52
+ score = Math.min(100, Math.round(ratio / 3 * 100));
53
+ }
54
+ if (score < 30)
55
+ gaps.push(`Only ${sourceFileCount} source files for ${featureSections} PRD sections`);
56
+ if (score < 60)
57
+ gaps.push('Feature implementation appears incomplete');
58
+ // Check for campaign state — completed campaigns boost the score
59
+ const campaignStatePath = join(projectDir, 'logs', 'campaign-state.md');
60
+ if (existsSync(campaignStatePath)) {
61
+ const campaignContent = await readFile(campaignStatePath, 'utf-8');
62
+ const completedMissions = (campaignContent.match(/COMPLETE/g) || []).length;
63
+ score = Math.min(100, score + completedMissions * 3);
64
+ }
65
+ return { score: Math.min(100, score), gaps, lastUpdated: new Date().toISOString() };
66
+ }
67
+ // ── Quality Dimension ─────────────────────────────────
68
+ /**
69
+ * Score quality from gauntlet findings, field reports, and test presence.
70
+ */
71
+ export async function scoreQuality(projectDir) {
72
+ const gaps = [];
73
+ let score = 50;
74
+ // Check for test files
75
+ let testFileCount = 0;
76
+ const testDirs = ['__tests__', 'tests', 'test', 'spec'];
77
+ for (const dir of testDirs) {
78
+ const fullDir = join(projectDir, dir);
79
+ if (existsSync(fullDir)) {
80
+ const files = await readdir(fullDir, { recursive: true });
81
+ testFileCount += files.filter(f => /\.(test|spec)\.(ts|tsx|js|jsx|py)$/.test(String(f))).length;
82
+ }
83
+ }
84
+ // Also check for test files alongside source
85
+ try {
86
+ const srcDir = join(projectDir, 'src');
87
+ if (existsSync(srcDir)) {
88
+ const files = await readdir(srcDir, { recursive: true });
89
+ testFileCount += files.filter(f => /\.(test|spec)\.(ts|tsx|js|jsx)$/.test(String(f))).length;
90
+ }
91
+ }
92
+ catch { /* can't read */ }
93
+ if (testFileCount === 0) {
94
+ gaps.push('No test files found');
95
+ score -= 20;
96
+ }
97
+ else if (testFileCount < 5) {
98
+ gaps.push(`Only ${testFileCount} test files — coverage likely low`);
99
+ score -= 10;
100
+ }
101
+ else {
102
+ score += 15;
103
+ }
104
+ // Check gauntlet state for unfixed findings
105
+ const gauntletPath = join(projectDir, 'logs', 'gauntlet-state.md');
106
+ if (existsSync(gauntletPath)) {
107
+ const content = await readFile(gauntletPath, 'utf-8');
108
+ if (content.includes('COMPLETE') && content.includes('SIGN OFF')) {
109
+ score += 20;
110
+ }
111
+ const criticalCount = (content.match(/Critical/gi) || []).length;
112
+ if (criticalCount > 5) {
113
+ gaps.push(`${criticalCount} Critical mentions in gauntlet state`);
114
+ score -= 10;
115
+ }
116
+ }
117
+ else {
118
+ gaps.push('No gauntlet history — project has not been reviewed');
119
+ score -= 15;
120
+ }
121
+ // Check for LESSONS.md (learning from mistakes = quality signal)
122
+ if (existsSync(join(projectDir, 'docs', 'LESSONS.md')))
123
+ score += 5;
124
+ return { score: Math.max(0, Math.min(100, score)), gaps, lastUpdated: new Date().toISOString() };
125
+ }
126
+ // ── Revenue Potential Dimension ───────────────────────
127
+ /**
128
+ * Score revenue potential from treasury setup, payment integrations, and pricing presence.
129
+ */
130
+ export async function scoreRevenuePotential(projectDir) {
131
+ const gaps = [];
132
+ let score = 20; // base — most projects start without revenue infrastructure
133
+ // Check for treasury vault (Cultivation installed)
134
+ const treasuryVault = join(homedir(), '.voidforge', 'treasury', 'vault.enc');
135
+ if (existsSync(treasuryVault)) {
136
+ score += 25;
137
+ }
138
+ else {
139
+ gaps.push('No treasury set up — no revenue tracking');
140
+ }
141
+ // Check for payment integration in code
142
+ const paymentIndicators = ['stripe', 'paddle', 'lemon', 'paypal', 'checkout'];
143
+ let paymentFound = false;
144
+ try {
145
+ const envPath = join(projectDir, '.env');
146
+ if (existsSync(envPath)) {
147
+ const envContent = await readFile(envPath, 'utf-8');
148
+ for (const indicator of paymentIndicators) {
149
+ if (envContent.toLowerCase().includes(indicator)) {
150
+ paymentFound = true;
151
+ break;
152
+ }
153
+ }
154
+ }
155
+ }
156
+ catch { /* can't read .env */ }
157
+ if (paymentFound) {
158
+ score += 20;
159
+ }
160
+ else {
161
+ gaps.push('No payment integration detected');
162
+ }
163
+ // Check for pricing page indicators in source
164
+ try {
165
+ const srcDir = join(projectDir, 'src');
166
+ if (existsSync(srcDir)) {
167
+ const files = await readdir(srcDir, { recursive: true });
168
+ const pricingFiles = files.filter(f => /pric/i.test(String(f)));
169
+ if (pricingFiles.length > 0) {
170
+ score += 15;
171
+ }
172
+ else {
173
+ gaps.push('No pricing page or component found');
174
+ }
175
+ }
176
+ }
177
+ catch { /* can't read */ }
178
+ // Check for heartbeat daemon (revenue monitoring)
179
+ if (existsSync(join(homedir(), '.voidforge', 'heartbeat.json'))) {
180
+ score += 15;
181
+ }
182
+ else {
183
+ gaps.push('Heartbeat daemon not running — no revenue monitoring');
184
+ }
185
+ return { score: Math.max(0, Math.min(100, score)), gaps, lastUpdated: new Date().toISOString() };
186
+ }
187
+ // ── Full Analysis ─────────────────────────────────────
188
+ /**
189
+ * Run Seven's full gap analysis across all 5 dimensions.
190
+ * Performance and growthReadiness come from Torres's site scan (already in the model).
191
+ * Feature completeness, quality, and revenue potential are analyzed here.
192
+ */
193
+ export async function analyzeGaps(model, projectDir) {
194
+ // Feature completeness
195
+ model.dimensions.featureCompleteness = await scoreFeatureCompleteness(projectDir);
196
+ // Quality
197
+ model.dimensions.quality = await scoreQuality(projectDir);
198
+ // Revenue potential
199
+ model.dimensions.revenuePotential = await scoreRevenuePotential(projectDir);
200
+ // Performance and growthReadiness are updated by Torres's SENSE step (site scanner)
201
+ // If they haven't been scanned yet, keep their current values
202
+ return model;
203
+ }
204
+ /**
205
+ * Find the weakest dimension — this drives the next campaign proposal.
206
+ */
207
+ export function findWeakestDimension(model) {
208
+ const dims = model.dimensions;
209
+ const entries = [
210
+ { name: 'Feature Completeness', ...dims.featureCompleteness },
211
+ { name: 'Quality', ...dims.quality },
212
+ { name: 'Performance', ...dims.performance },
213
+ { name: 'Growth Readiness', ...dims.growthReadiness },
214
+ { name: 'Revenue Potential', ...dims.revenuePotential },
215
+ ];
216
+ entries.sort((a, b) => a.score - b.score);
217
+ return entries[0];
218
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * GitHub integration — create repo, git init + remote + push.
3
+ * Runs as a pre-provision step (ADR-011) so platforms can link to the repo.
4
+ * Uses exec.ts for git operations (ADR-013). No npm dependencies.
5
+ */
6
+ import type { ProvisionEmitter } from './provisioners/types.js';
7
+ export interface GitHubResult {
8
+ success: boolean;
9
+ repoUrl?: string;
10
+ owner?: string;
11
+ repoName?: string;
12
+ error?: string;
13
+ }
14
+ /**
15
+ * Full GitHub pre-provision flow:
16
+ * 1. Validate git binary exists
17
+ * 2. Determine owner (from vault or token)
18
+ * 3. Create repo via API (or use existing)
19
+ * 4. Ensure .gitignore has .ssh/ and .env
20
+ * 5. git init + remote + push
21
+ */
22
+ export declare function prepareGithub(runId: string, token: string, owner: string | null, projectName: string, projectDir: string, emit: ProvisionEmitter, abortSignal?: AbortSignal, framework?: string, deployTarget?: string): Promise<GitHubResult>;
@@ -0,0 +1,261 @@
1
+ /**
2
+ * GitHub integration — create repo, git init + remote + push.
3
+ * Runs as a pre-provision step (ADR-011) so platforms can link to the repo.
4
+ * Uses exec.ts for git operations (ADR-013). No npm dependencies.
5
+ */
6
+ import { existsSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import { writeFile, readFile } from 'node:fs/promises';
9
+ import { execCommand, validateBinaries } from './exec.js';
10
+ import { httpsPost, httpsGet, safeJsonParse, slugify } from './provisioners/http-client.js';
11
+ import { recordResourcePending, recordResourceCreated } from './provision-manifest.js';
12
+ import { generateCIWorkflows } from './ci-generator.js';
13
+ const GH_API = 'api.github.com';
14
+ const GH_API_VERSION = '2022-11-28';
15
+ function ghHeaders(token) {
16
+ return {
17
+ 'Authorization': `Bearer ${token}`,
18
+ 'User-Agent': 'VoidForge',
19
+ 'X-GitHub-Api-Version': GH_API_VERSION,
20
+ 'Content-Type': 'application/json',
21
+ 'Accept': 'application/vnd.github+json',
22
+ };
23
+ }
24
+ /**
25
+ * Full GitHub pre-provision flow:
26
+ * 1. Validate git binary exists
27
+ * 2. Determine owner (from vault or token)
28
+ * 3. Create repo via API (or use existing)
29
+ * 4. Ensure .gitignore has .ssh/ and .env
30
+ * 5. git init + remote + push
31
+ */
32
+ export async function prepareGithub(runId, token, owner, projectName, projectDir, emit, abortSignal, framework, deployTarget) {
33
+ const repoName = slugify(projectName);
34
+ const headers = ghHeaders(token);
35
+ // Step 1: Validate git binary
36
+ emit({ step: 'github-validate', status: 'started', message: 'Checking for git binary' });
37
+ const missing = await validateBinaries(['git']);
38
+ if (missing.length > 0) {
39
+ emit({ step: 'github-validate', status: 'error', message: 'git is not installed. Install git to enable GitHub integration.' });
40
+ return { success: false, error: 'git binary not found' };
41
+ }
42
+ emit({ step: 'github-validate', status: 'done', message: 'git found' });
43
+ // Step 2: Determine owner
44
+ emit({ step: 'github-owner', status: 'started', message: 'Determining GitHub owner' });
45
+ let resolvedOwner = owner;
46
+ const ownerIsExplicit = !!owner;
47
+ if (!resolvedOwner) {
48
+ try {
49
+ const res = await httpsGet(GH_API, '/user', headers);
50
+ if (res.status !== 200) {
51
+ emit({ step: 'github-owner', status: 'error', message: 'Failed to fetch GitHub user', detail: `API returned ${res.status}` });
52
+ return { success: false, error: `GitHub API returned ${res.status}` };
53
+ }
54
+ const data = safeJsonParse(res.body);
55
+ resolvedOwner = data?.login ?? '';
56
+ if (!resolvedOwner) {
57
+ emit({ step: 'github-owner', status: 'error', message: 'Could not determine GitHub username from token' });
58
+ return { success: false, error: 'No GitHub username in token response' };
59
+ }
60
+ }
61
+ catch (err) {
62
+ emit({ step: 'github-owner', status: 'error', message: 'GitHub API connection failed', detail: err.message });
63
+ return { success: false, error: err.message };
64
+ }
65
+ }
66
+ // Validate owner format (Kenobi: prevent path traversal in API calls)
67
+ if (!/^[a-zA-Z0-9_.-]+$/.test(resolvedOwner)) {
68
+ emit({ step: 'github-owner', status: 'error', message: `Invalid GitHub owner format: "${resolvedOwner}"` });
69
+ return { success: false, error: 'Invalid GitHub owner format' };
70
+ }
71
+ emit({ step: 'github-owner', status: 'done', message: `GitHub owner: ${resolvedOwner}` });
72
+ // Step 3: Create repo (or detect existing)
73
+ emit({ step: 'github-repo', status: 'started', message: `Creating repository ${resolvedOwner}/${repoName}` });
74
+ try {
75
+ await recordResourcePending(runId, 'github-repo', `${resolvedOwner}/${repoName}`, 'global');
76
+ // Check if repo already exists
77
+ const checkRes = await httpsGet(GH_API, `/repos/${resolvedOwner}/${repoName}`, headers);
78
+ if (checkRes.status === 200) {
79
+ emit({ step: 'github-repo', status: 'done', message: `Repository ${resolvedOwner}/${repoName} already exists — will push to it` });
80
+ await recordResourceCreated(runId, 'github-repo', `${resolvedOwner}/${repoName}`, 'global');
81
+ }
82
+ else {
83
+ // Create new repo — use org endpoint if owner was explicitly set (may be an org)
84
+ const body = JSON.stringify({
85
+ name: repoName,
86
+ private: true,
87
+ auto_init: false,
88
+ description: `Created by VoidForge`,
89
+ });
90
+ const createPath = ownerIsExplicit
91
+ ? `/orgs/${resolvedOwner}/repos`
92
+ : '/user/repos';
93
+ let createRes = await httpsPost(GH_API, createPath, headers, body);
94
+ // If org endpoint returned 404, the owner is a user, not an org — fall back
95
+ if (createRes.status === 404 && ownerIsExplicit) {
96
+ createRes = await httpsPost(GH_API, '/user/repos', headers, body);
97
+ }
98
+ if (createRes.status === 201) {
99
+ await recordResourceCreated(runId, 'github-repo', `${resolvedOwner}/${repoName}`, 'global');
100
+ emit({ step: 'github-repo', status: 'done', message: `Repository ${resolvedOwner}/${repoName} created (private)` });
101
+ }
102
+ else if (createRes.status === 422) {
103
+ // Repo already exists (race condition or name conflict)
104
+ const errData = safeJsonParse(createRes.body);
105
+ const detail = errData?.errors?.[0]?.message || errData?.message || 'Repository name already exists';
106
+ emit({ step: 'github-repo', status: 'done', message: `Repository exists — ${detail}` });
107
+ await recordResourceCreated(runId, 'github-repo', `${resolvedOwner}/${repoName}`, 'global');
108
+ }
109
+ else {
110
+ const errData = safeJsonParse(createRes.body);
111
+ throw new Error(errData?.message || `GitHub API returned ${createRes.status}`);
112
+ }
113
+ }
114
+ }
115
+ catch (err) {
116
+ emit({ step: 'github-repo', status: 'error', message: 'Failed to create GitHub repository', detail: err.message });
117
+ return { success: false, error: err.message };
118
+ }
119
+ // Step 4: Ensure .gitignore protects secrets
120
+ emit({ step: 'github-gitignore', status: 'started', message: 'Checking .gitignore' });
121
+ try {
122
+ const gitignorePath = join(projectDir, '.gitignore');
123
+ let gitignore = '';
124
+ try {
125
+ gitignore = await readFile(gitignorePath, 'utf-8');
126
+ }
127
+ catch { /* new file */ }
128
+ const requiredEntries = ['.env', '.env.*', '.ssh/', 'node_modules/'];
129
+ const existingLines = gitignore.split('\n').map(l => l.trim());
130
+ const missing = requiredEntries.filter(entry => !existingLines.includes(entry));
131
+ if (missing.length > 0) {
132
+ const addition = (gitignore ? '\n' : '') + '# VoidForge — protect secrets\n' + missing.join('\n') + '\n';
133
+ await writeFile(gitignorePath, gitignore + addition, 'utf-8');
134
+ emit({ step: 'github-gitignore', status: 'done', message: `Added ${missing.length} entries to .gitignore` });
135
+ }
136
+ else {
137
+ emit({ step: 'github-gitignore', status: 'done', message: '.gitignore already has required entries' });
138
+ }
139
+ }
140
+ catch (err) {
141
+ emit({ step: 'github-gitignore', status: 'error', message: 'Failed to update .gitignore', detail: err.message });
142
+ // Non-fatal
143
+ }
144
+ // Step 5: git init + remote + add + commit + push
145
+ emit({ step: 'github-push', status: 'started', message: 'Pushing code to GitHub' });
146
+ try {
147
+ const gitOpts = { cwd: projectDir, timeout: 30_000, abortSignal };
148
+ const repoUrl = `https://github.com/${resolvedOwner}/${repoName}.git`;
149
+ // Init if needed
150
+ if (!existsSync(join(projectDir, '.git'))) {
151
+ await execCommand('git', ['init'], gitOpts);
152
+ await execCommand('git', ['branch', '-M', 'main'], gitOpts);
153
+ }
154
+ // Set remote (idempotent)
155
+ try {
156
+ await execCommand('git', ['remote', 'add', 'origin', repoUrl], gitOpts);
157
+ }
158
+ catch {
159
+ // Remote exists — update URL
160
+ await execCommand('git', ['remote', 'set-url', 'origin', repoUrl], gitOpts);
161
+ }
162
+ // Verify .gitignore protects secrets before staging (defense in depth)
163
+ try {
164
+ const currentGitignore = await readFile(join(projectDir, '.gitignore'), 'utf-8');
165
+ const lines = currentGitignore.split('\n').map(l => l.trim());
166
+ if (!lines.includes('.env') || !lines.includes('.ssh/')) {
167
+ emit({ step: 'github-push', status: 'error', message: 'Cannot push — .gitignore is missing .env or .ssh/ entries' });
168
+ return { success: false, error: '.gitignore missing required entries' };
169
+ }
170
+ }
171
+ catch {
172
+ emit({ step: 'github-push', status: 'error', message: 'Cannot push — .gitignore not found' });
173
+ return { success: false, error: '.gitignore not found' };
174
+ }
175
+ // Stage all files
176
+ await execCommand('git', ['add', '-A'], gitOpts);
177
+ // Commit (may fail if nothing to commit — that's fine)
178
+ try {
179
+ await execCommand('git', ['commit', '-m', 'Initial commit — VoidForge'], {
180
+ ...gitOpts,
181
+ env: {
182
+ GIT_AUTHOR_NAME: 'VoidForge',
183
+ GIT_AUTHOR_EMAIL: 'voidforge@localhost',
184
+ GIT_COMMITTER_NAME: 'VoidForge',
185
+ GIT_COMMITTER_EMAIL: 'voidforge@localhost',
186
+ },
187
+ });
188
+ }
189
+ catch {
190
+ // Nothing to commit — existing repo with no changes
191
+ }
192
+ // Push using http.extraheader to avoid token in URL/reflog (Kenobi: git reflog token persistence)
193
+ await execCommand('git', ['push', '-u', 'origin', 'main'], {
194
+ ...gitOpts,
195
+ timeout: 120_000, // Longer timeout for push
196
+ env: {
197
+ GIT_TERMINAL_PROMPT: '0',
198
+ GIT_CONFIG_COUNT: '1',
199
+ GIT_CONFIG_KEY_0: 'http.https://github.com/.extraheader',
200
+ GIT_CONFIG_VALUE_0: `Authorization: Basic ${Buffer.from(`x-access-token:${token}`).toString('base64')}`,
201
+ },
202
+ });
203
+ emit({ step: 'github-push', status: 'done', message: `Code pushed to ${resolvedOwner}/${repoName}` });
204
+ // ── CI/CD workflow generation (ADR-017) ────────────────────────
205
+ if (framework && deployTarget) {
206
+ emit({ step: 'github-ci', status: 'started', message: 'Generating GitHub Actions CI/CD workflows' });
207
+ try {
208
+ const ciResult = await generateCIWorkflows(projectDir, framework, deployTarget);
209
+ if (ciResult.success && ciResult.files.length > 0) {
210
+ // Commit and push the workflow files
211
+ await execCommand('git', ['add', ...ciResult.files], gitOpts);
212
+ try {
213
+ await execCommand('git', ['commit', '-m', 'Add CI/CD workflows — VoidForge (ADR-017)'], {
214
+ ...gitOpts,
215
+ env: {
216
+ GIT_AUTHOR_NAME: 'VoidForge',
217
+ GIT_AUTHOR_EMAIL: 'voidforge@localhost',
218
+ GIT_COMMITTER_NAME: 'VoidForge',
219
+ GIT_COMMITTER_EMAIL: 'voidforge@localhost',
220
+ },
221
+ });
222
+ await execCommand('git', ['push', 'origin', 'main'], {
223
+ ...gitOpts,
224
+ timeout: 120_000,
225
+ env: {
226
+ GIT_TERMINAL_PROMPT: '0',
227
+ GIT_CONFIG_COUNT: '1',
228
+ GIT_CONFIG_KEY_0: 'http.https://github.com/.extraheader',
229
+ GIT_CONFIG_VALUE_0: `Authorization: Basic ${Buffer.from(`x-access-token:${token}`).toString('base64')}`,
230
+ },
231
+ });
232
+ emit({ step: 'github-ci', status: 'done', message: `Generated ${ciResult.files.join(', ')} — CI/CD enabled` });
233
+ }
234
+ catch {
235
+ emit({ step: 'github-ci', status: 'done', message: 'Workflows generated locally (push separately if needed)' });
236
+ }
237
+ }
238
+ }
239
+ catch (ciErr) {
240
+ emit({ step: 'github-ci', status: 'error', message: 'Failed to generate CI/CD workflows', detail: ciErr.message });
241
+ // Non-fatal — project was still pushed
242
+ }
243
+ }
244
+ return {
245
+ success: true,
246
+ repoUrl: `https://github.com/${resolvedOwner}/${repoName}`,
247
+ owner: resolvedOwner,
248
+ repoName,
249
+ };
250
+ }
251
+ catch (err) {
252
+ // Sanitize error — strip token from git error messages
253
+ const rawError = err.message;
254
+ const safeError = rawError
255
+ .replace(/x-access-token:[^@]+@/g, 'x-access-token:***@')
256
+ .replace(/Authorization: Basic [A-Za-z0-9+/=]+/g, 'Authorization: Basic ***')
257
+ .replace(/GIT_CONFIG_VALUE_0=[^\s]+/g, 'GIT_CONFIG_VALUE_0=***');
258
+ emit({ step: 'github-push', status: 'error', message: 'Failed to push to GitHub', detail: safeError });
259
+ return { success: false, error: safeError };
260
+ }
261
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Headless deploy — runs the same provisioner pipeline as Haku,
3
+ * but outputs progress to stdout instead of SSE to a browser.
4
+ * Called by: `npx voidforge deploy --headless`
5
+ * Used by: /build Phase 12 (Kusanagi)
6
+ */
7
+ /**
8
+ * Env-only deploy — write vault credentials to .env without provisioning infrastructure.
9
+ * Reads PRD frontmatter to identify required env vars, pulls matching values from the vault,
10
+ * and appends them to the project's .env file.
11
+ * Called by: `npx voidforge deploy --env-only`
12
+ */
13
+ export declare function envOnlyDeploy(projectDir?: string): Promise<void>;
14
+ export declare function headlessDeploy(projectDir?: string): Promise<void>;