thevoidforge 21.0.0

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 (328) hide show
  1. package/dist/scripts/vault-read.d.ts +11 -0
  2. package/dist/scripts/vault-read.js +89 -0
  3. package/dist/scripts/voidforge.d.ts +20 -0
  4. package/dist/scripts/voidforge.js +404 -0
  5. package/dist/tsconfig.tsbuildinfo +1 -0
  6. package/dist/wizard/api/auth.d.ts +5 -0
  7. package/dist/wizard/api/auth.js +133 -0
  8. package/dist/wizard/api/blueprint.d.ts +45 -0
  9. package/dist/wizard/api/blueprint.js +184 -0
  10. package/dist/wizard/api/cloud-providers.d.ts +16 -0
  11. package/dist/wizard/api/cloud-providers.js +363 -0
  12. package/dist/wizard/api/credentials.d.ts +1 -0
  13. package/dist/wizard/api/credentials.js +258 -0
  14. package/dist/wizard/api/danger-room.d.ts +18 -0
  15. package/dist/wizard/api/danger-room.js +401 -0
  16. package/dist/wizard/api/deploy.d.ts +4 -0
  17. package/dist/wizard/api/deploy.js +164 -0
  18. package/dist/wizard/api/prd.d.ts +1 -0
  19. package/dist/wizard/api/prd.js +363 -0
  20. package/dist/wizard/api/project.d.ts +1 -0
  21. package/dist/wizard/api/project.js +239 -0
  22. package/dist/wizard/api/projects.d.ts +6 -0
  23. package/dist/wizard/api/projects.js +648 -0
  24. package/dist/wizard/api/provision.d.ts +4 -0
  25. package/dist/wizard/api/provision.js +535 -0
  26. package/dist/wizard/api/terminal.d.ts +25 -0
  27. package/dist/wizard/api/terminal.js +241 -0
  28. package/dist/wizard/api/users.d.ts +6 -0
  29. package/dist/wizard/api/users.js +244 -0
  30. package/dist/wizard/api/war-room.d.ts +14 -0
  31. package/dist/wizard/api/war-room.js +45 -0
  32. package/dist/wizard/lib/ad-platform-core.d.ts +6 -0
  33. package/dist/wizard/lib/ad-platform-core.js +1 -0
  34. package/dist/wizard/lib/adapters/index.d.ts +52 -0
  35. package/dist/wizard/lib/adapters/index.js +38 -0
  36. package/dist/wizard/lib/adapters/sandbox-bank.d.ts +17 -0
  37. package/dist/wizard/lib/adapters/sandbox-bank.js +77 -0
  38. package/dist/wizard/lib/adapters/sandbox.d.ts +39 -0
  39. package/dist/wizard/lib/adapters/sandbox.js +174 -0
  40. package/dist/wizard/lib/adapters/stripe.d.ts +19 -0
  41. package/dist/wizard/lib/adapters/stripe.js +143 -0
  42. package/dist/wizard/lib/adapters/types.d.ts +9 -0
  43. package/dist/wizard/lib/adapters/types.js +10 -0
  44. package/dist/wizard/lib/agent-memory.d.ts +36 -0
  45. package/dist/wizard/lib/agent-memory.js +114 -0
  46. package/dist/wizard/lib/anomaly-detection.d.ts +59 -0
  47. package/dist/wizard/lib/anomaly-detection.js +122 -0
  48. package/dist/wizard/lib/anthropic.d.ts +21 -0
  49. package/dist/wizard/lib/anthropic.js +105 -0
  50. package/dist/wizard/lib/asset-scanner.d.ts +23 -0
  51. package/dist/wizard/lib/asset-scanner.js +107 -0
  52. package/dist/wizard/lib/audit-log.d.ts +23 -0
  53. package/dist/wizard/lib/audit-log.js +70 -0
  54. package/dist/wizard/lib/autonomy-controller.d.ts +76 -0
  55. package/dist/wizard/lib/autonomy-controller.js +183 -0
  56. package/dist/wizard/lib/body-parser.d.ts +2 -0
  57. package/dist/wizard/lib/body-parser.js +36 -0
  58. package/dist/wizard/lib/build-analytics.d.ts +39 -0
  59. package/dist/wizard/lib/build-analytics.js +91 -0
  60. package/dist/wizard/lib/build-step.d.ts +21 -0
  61. package/dist/wizard/lib/build-step.js +104 -0
  62. package/dist/wizard/lib/campaign-proposer.d.ts +39 -0
  63. package/dist/wizard/lib/campaign-proposer.js +180 -0
  64. package/dist/wizard/lib/campaign-state-machine.d.ts +63 -0
  65. package/dist/wizard/lib/campaign-state-machine.js +114 -0
  66. package/dist/wizard/lib/ci-generator.d.ts +14 -0
  67. package/dist/wizard/lib/ci-generator.js +187 -0
  68. package/dist/wizard/lib/claude-merge.d.ts +38 -0
  69. package/dist/wizard/lib/claude-merge.js +115 -0
  70. package/dist/wizard/lib/codegen/erd-gen.d.ts +16 -0
  71. package/dist/wizard/lib/codegen/erd-gen.js +98 -0
  72. package/dist/wizard/lib/codegen/integrations.d.ts +18 -0
  73. package/dist/wizard/lib/codegen/integrations.js +189 -0
  74. package/dist/wizard/lib/codegen/openapi-gen.d.ts +15 -0
  75. package/dist/wizard/lib/codegen/openapi-gen.js +79 -0
  76. package/dist/wizard/lib/codegen/prisma-types.d.ts +15 -0
  77. package/dist/wizard/lib/codegen/prisma-types.js +44 -0
  78. package/dist/wizard/lib/codegen/seed-gen.d.ts +16 -0
  79. package/dist/wizard/lib/codegen/seed-gen.js +128 -0
  80. package/dist/wizard/lib/compliance.d.ts +51 -0
  81. package/dist/wizard/lib/compliance.js +112 -0
  82. package/dist/wizard/lib/correlation-engine.d.ts +59 -0
  83. package/dist/wizard/lib/correlation-engine.js +151 -0
  84. package/dist/wizard/lib/cost-estimator.d.ts +22 -0
  85. package/dist/wizard/lib/cost-estimator.js +72 -0
  86. package/dist/wizard/lib/cost-tracker.d.ts +27 -0
  87. package/dist/wizard/lib/cost-tracker.js +37 -0
  88. package/dist/wizard/lib/daemon-aggregator.d.ts +71 -0
  89. package/dist/wizard/lib/daemon-aggregator.js +204 -0
  90. package/dist/wizard/lib/daemon-core.d.ts +6 -0
  91. package/dist/wizard/lib/daemon-core.js +5 -0
  92. package/dist/wizard/lib/dashboard-data.d.ts +132 -0
  93. package/dist/wizard/lib/dashboard-data.js +336 -0
  94. package/dist/wizard/lib/dashboard-ws.d.ts +25 -0
  95. package/dist/wizard/lib/dashboard-ws.js +91 -0
  96. package/dist/wizard/lib/deep-current.d.ts +77 -0
  97. package/dist/wizard/lib/deep-current.js +234 -0
  98. package/dist/wizard/lib/deploy-coordinator.d.ts +40 -0
  99. package/dist/wizard/lib/deploy-coordinator.js +86 -0
  100. package/dist/wizard/lib/deploy-log.d.ts +28 -0
  101. package/dist/wizard/lib/deploy-log.js +52 -0
  102. package/dist/wizard/lib/desktop-notify.d.ts +27 -0
  103. package/dist/wizard/lib/desktop-notify.js +98 -0
  104. package/dist/wizard/lib/dns/cloudflare-dns.d.ts +35 -0
  105. package/dist/wizard/lib/dns/cloudflare-dns.js +216 -0
  106. package/dist/wizard/lib/dns/cloudflare-registrar.d.ts +31 -0
  107. package/dist/wizard/lib/dns/cloudflare-registrar.js +148 -0
  108. package/dist/wizard/lib/dns/types.d.ts +22 -0
  109. package/dist/wizard/lib/dns/types.js +4 -0
  110. package/dist/wizard/lib/document-discovery.d.ts +33 -0
  111. package/dist/wizard/lib/document-discovery.js +145 -0
  112. package/dist/wizard/lib/env-validator.d.ts +14 -0
  113. package/dist/wizard/lib/env-validator.js +205 -0
  114. package/dist/wizard/lib/env-writer.d.ts +13 -0
  115. package/dist/wizard/lib/env-writer.js +26 -0
  116. package/dist/wizard/lib/exec.d.ts +30 -0
  117. package/dist/wizard/lib/exec.js +52 -0
  118. package/dist/wizard/lib/experiment.d.ts +70 -0
  119. package/dist/wizard/lib/experiment.js +169 -0
  120. package/dist/wizard/lib/extensions.d.ts +20 -0
  121. package/dist/wizard/lib/extensions.js +183 -0
  122. package/dist/wizard/lib/financial/adapter-factory.d.ts +47 -0
  123. package/dist/wizard/lib/financial/adapter-factory.js +225 -0
  124. package/dist/wizard/lib/financial/billing/base.d.ts +6 -0
  125. package/dist/wizard/lib/financial/billing/base.js +1 -0
  126. package/dist/wizard/lib/financial/billing/google-billing.d.ts +56 -0
  127. package/dist/wizard/lib/financial/billing/google-billing.js +298 -0
  128. package/dist/wizard/lib/financial/billing/meta-billing.d.ts +54 -0
  129. package/dist/wizard/lib/financial/billing/meta-billing.js +243 -0
  130. package/dist/wizard/lib/financial/billing/tiktok-billing.d.ts +54 -0
  131. package/dist/wizard/lib/financial/billing/tiktok-billing.js +260 -0
  132. package/dist/wizard/lib/financial/campaign/base.d.ts +13 -0
  133. package/dist/wizard/lib/financial/campaign/base.js +1 -0
  134. package/dist/wizard/lib/financial/campaign/google-campaign.d.ts +42 -0
  135. package/dist/wizard/lib/financial/campaign/google-campaign.js +388 -0
  136. package/dist/wizard/lib/financial/campaign/meta-campaign.d.ts +41 -0
  137. package/dist/wizard/lib/financial/campaign/meta-campaign.js +311 -0
  138. package/dist/wizard/lib/financial/campaign/sandbox-campaign.d.ts +45 -0
  139. package/dist/wizard/lib/financial/campaign/sandbox-campaign.js +261 -0
  140. package/dist/wizard/lib/financial/campaign/tiktok-campaign.d.ts +40 -0
  141. package/dist/wizard/lib/financial/campaign/tiktok-campaign.js +350 -0
  142. package/dist/wizard/lib/financial/funding-auto.d.ts +44 -0
  143. package/dist/wizard/lib/financial/funding-auto.js +52 -0
  144. package/dist/wizard/lib/financial/funding-policy.d.ts +60 -0
  145. package/dist/wizard/lib/financial/funding-policy.js +179 -0
  146. package/dist/wizard/lib/financial/platform-planner.d.ts +47 -0
  147. package/dist/wizard/lib/financial/platform-planner.js +134 -0
  148. package/dist/wizard/lib/financial/reconciliation-engine.d.ts +78 -0
  149. package/dist/wizard/lib/financial/reconciliation-engine.js +193 -0
  150. package/dist/wizard/lib/financial/registry.d.ts +22 -0
  151. package/dist/wizard/lib/financial/registry.js +26 -0
  152. package/dist/wizard/lib/financial/reporting.d.ts +96 -0
  153. package/dist/wizard/lib/financial/reporting.js +198 -0
  154. package/dist/wizard/lib/financial/stablecoin/base.d.ts +6 -0
  155. package/dist/wizard/lib/financial/stablecoin/base.js +1 -0
  156. package/dist/wizard/lib/financial/stablecoin/circle.d.ts +54 -0
  157. package/dist/wizard/lib/financial/stablecoin/circle.js +367 -0
  158. package/dist/wizard/lib/financial/stablecoin/mercury.d.ts +24 -0
  159. package/dist/wizard/lib/financial/stablecoin/mercury.js +171 -0
  160. package/dist/wizard/lib/financial/stablecoin/sandbox-stablecoin.d.ts +47 -0
  161. package/dist/wizard/lib/financial/stablecoin/sandbox-stablecoin.js +202 -0
  162. package/dist/wizard/lib/financial/treasury-planner.d.ts +52 -0
  163. package/dist/wizard/lib/financial/treasury-planner.js +128 -0
  164. package/dist/wizard/lib/financial-core.d.ts +6 -0
  165. package/dist/wizard/lib/financial-core.js +5 -0
  166. package/dist/wizard/lib/financial-vault.d.ts +34 -0
  167. package/dist/wizard/lib/financial-vault.js +199 -0
  168. package/dist/wizard/lib/frontmatter.d.ts +30 -0
  169. package/dist/wizard/lib/frontmatter.js +96 -0
  170. package/dist/wizard/lib/gap-analysis.d.ts +37 -0
  171. package/dist/wizard/lib/gap-analysis.js +218 -0
  172. package/dist/wizard/lib/github.d.ts +22 -0
  173. package/dist/wizard/lib/github.js +261 -0
  174. package/dist/wizard/lib/headless-deploy.d.ts +14 -0
  175. package/dist/wizard/lib/headless-deploy.js +452 -0
  176. package/dist/wizard/lib/health-monitor.d.ts +15 -0
  177. package/dist/wizard/lib/health-monitor.js +91 -0
  178. package/dist/wizard/lib/health-poller.d.ts +9 -0
  179. package/dist/wizard/lib/health-poller.js +123 -0
  180. package/dist/wizard/lib/heartbeat.d.ts +15 -0
  181. package/dist/wizard/lib/heartbeat.js +827 -0
  182. package/dist/wizard/lib/http-helpers.d.ts +9 -0
  183. package/dist/wizard/lib/http-helpers.js +24 -0
  184. package/dist/wizard/lib/image-gen.d.ts +56 -0
  185. package/dist/wizard/lib/image-gen.js +159 -0
  186. package/dist/wizard/lib/instance-sizing.d.ts +26 -0
  187. package/dist/wizard/lib/instance-sizing.js +51 -0
  188. package/dist/wizard/lib/kongo/analytics.d.ts +29 -0
  189. package/dist/wizard/lib/kongo/analytics.js +179 -0
  190. package/dist/wizard/lib/kongo/campaigns.d.ts +52 -0
  191. package/dist/wizard/lib/kongo/campaigns.js +91 -0
  192. package/dist/wizard/lib/kongo/client.d.ts +58 -0
  193. package/dist/wizard/lib/kongo/client.js +221 -0
  194. package/dist/wizard/lib/kongo/jobs.d.ts +57 -0
  195. package/dist/wizard/lib/kongo/jobs.js +122 -0
  196. package/dist/wizard/lib/kongo/pages.d.ts +60 -0
  197. package/dist/wizard/lib/kongo/pages.js +150 -0
  198. package/dist/wizard/lib/kongo/provisioner.d.ts +64 -0
  199. package/dist/wizard/lib/kongo/provisioner.js +116 -0
  200. package/dist/wizard/lib/kongo/seed.d.ts +49 -0
  201. package/dist/wizard/lib/kongo/seed.js +237 -0
  202. package/dist/wizard/lib/kongo/types.d.ts +323 -0
  203. package/dist/wizard/lib/kongo/types.js +11 -0
  204. package/dist/wizard/lib/kongo/variants.d.ts +57 -0
  205. package/dist/wizard/lib/kongo/variants.js +88 -0
  206. package/dist/wizard/lib/kongo/webhooks.d.ts +41 -0
  207. package/dist/wizard/lib/kongo/webhooks.js +112 -0
  208. package/dist/wizard/lib/marker.d.ts +28 -0
  209. package/dist/wizard/lib/marker.js +79 -0
  210. package/dist/wizard/lib/migrator.d.ts +35 -0
  211. package/dist/wizard/lib/migrator.js +190 -0
  212. package/dist/wizard/lib/natural-language-deploy.d.ts +30 -0
  213. package/dist/wizard/lib/natural-language-deploy.js +186 -0
  214. package/dist/wizard/lib/network.d.ts +22 -0
  215. package/dist/wizard/lib/network.js +72 -0
  216. package/dist/wizard/lib/oauth-core.d.ts +6 -0
  217. package/dist/wizard/lib/oauth-core.js +5 -0
  218. package/dist/wizard/lib/open-browser.d.ts +1 -0
  219. package/dist/wizard/lib/open-browser.js +26 -0
  220. package/dist/wizard/lib/patterns/ad-billing-adapter.d.ts +209 -0
  221. package/dist/wizard/lib/patterns/ad-billing-adapter.js +269 -0
  222. package/dist/wizard/lib/patterns/ad-platform-adapter.d.ts +200 -0
  223. package/dist/wizard/lib/patterns/ad-platform-adapter.js +212 -0
  224. package/dist/wizard/lib/patterns/daemon-process.d.ts +88 -0
  225. package/dist/wizard/lib/patterns/daemon-process.js +271 -0
  226. package/dist/wizard/lib/patterns/financial-transaction.d.ts +161 -0
  227. package/dist/wizard/lib/patterns/financial-transaction.js +132 -0
  228. package/dist/wizard/lib/patterns/funding-plan.d.ts +136 -0
  229. package/dist/wizard/lib/patterns/funding-plan.js +200 -0
  230. package/dist/wizard/lib/patterns/oauth-token-lifecycle.d.ts +94 -0
  231. package/dist/wizard/lib/patterns/oauth-token-lifecycle.js +139 -0
  232. package/dist/wizard/lib/patterns/outbound-rate-limiter.d.ts +67 -0
  233. package/dist/wizard/lib/patterns/outbound-rate-limiter.js +216 -0
  234. package/dist/wizard/lib/patterns/revenue-source-adapter.d.ts +96 -0
  235. package/dist/wizard/lib/patterns/revenue-source-adapter.js +182 -0
  236. package/dist/wizard/lib/patterns/stablecoin-adapter.d.ts +218 -0
  237. package/dist/wizard/lib/patterns/stablecoin-adapter.js +264 -0
  238. package/dist/wizard/lib/prd-validator.d.ts +39 -0
  239. package/dist/wizard/lib/prd-validator.js +137 -0
  240. package/dist/wizard/lib/project-init.d.ts +24 -0
  241. package/dist/wizard/lib/project-init.js +193 -0
  242. package/dist/wizard/lib/project-registry.d.ts +86 -0
  243. package/dist/wizard/lib/project-registry.js +359 -0
  244. package/dist/wizard/lib/provision-manifest.d.ts +44 -0
  245. package/dist/wizard/lib/provision-manifest.js +164 -0
  246. package/dist/wizard/lib/provisioner-registry.d.ts +15 -0
  247. package/dist/wizard/lib/provisioner-registry.js +34 -0
  248. package/dist/wizard/lib/provisioners/aws-vps.d.ts +6 -0
  249. package/dist/wizard/lib/provisioners/aws-vps.js +643 -0
  250. package/dist/wizard/lib/provisioners/cloudflare.d.ts +6 -0
  251. package/dist/wizard/lib/provisioners/cloudflare.js +300 -0
  252. package/dist/wizard/lib/provisioners/docker.d.ts +6 -0
  253. package/dist/wizard/lib/provisioners/docker.js +75 -0
  254. package/dist/wizard/lib/provisioners/http-client.d.ts +20 -0
  255. package/dist/wizard/lib/provisioners/http-client.js +79 -0
  256. package/dist/wizard/lib/provisioners/railway.d.ts +6 -0
  257. package/dist/wizard/lib/provisioners/railway.js +413 -0
  258. package/dist/wizard/lib/provisioners/scripts/caddyfile.d.ts +10 -0
  259. package/dist/wizard/lib/provisioners/scripts/caddyfile.js +54 -0
  260. package/dist/wizard/lib/provisioners/scripts/deploy-vps.d.ts +10 -0
  261. package/dist/wizard/lib/provisioners/scripts/deploy-vps.js +112 -0
  262. package/dist/wizard/lib/provisioners/scripts/docker-compose.d.ts +11 -0
  263. package/dist/wizard/lib/provisioners/scripts/docker-compose.js +91 -0
  264. package/dist/wizard/lib/provisioners/scripts/dockerfile.d.ts +5 -0
  265. package/dist/wizard/lib/provisioners/scripts/dockerfile.js +185 -0
  266. package/dist/wizard/lib/provisioners/scripts/ecosystem-config.d.ts +10 -0
  267. package/dist/wizard/lib/provisioners/scripts/ecosystem-config.js +36 -0
  268. package/dist/wizard/lib/provisioners/scripts/provision-vps.d.ts +14 -0
  269. package/dist/wizard/lib/provisioners/scripts/provision-vps.js +202 -0
  270. package/dist/wizard/lib/provisioners/scripts/rollback-vps.d.ts +10 -0
  271. package/dist/wizard/lib/provisioners/scripts/rollback-vps.js +67 -0
  272. package/dist/wizard/lib/provisioners/self-deploy.d.ts +41 -0
  273. package/dist/wizard/lib/provisioners/self-deploy.js +185 -0
  274. package/dist/wizard/lib/provisioners/static-s3.d.ts +6 -0
  275. package/dist/wizard/lib/provisioners/static-s3.js +235 -0
  276. package/dist/wizard/lib/provisioners/types.d.ts +40 -0
  277. package/dist/wizard/lib/provisioners/types.js +4 -0
  278. package/dist/wizard/lib/provisioners/vercel.d.ts +6 -0
  279. package/dist/wizard/lib/provisioners/vercel.js +287 -0
  280. package/dist/wizard/lib/pty-manager.d.ts +42 -0
  281. package/dist/wizard/lib/pty-manager.js +231 -0
  282. package/dist/wizard/lib/rate-limiter-core.d.ts +5 -0
  283. package/dist/wizard/lib/rate-limiter-core.js +5 -0
  284. package/dist/wizard/lib/reconciliation.d.ts +43 -0
  285. package/dist/wizard/lib/reconciliation.js +173 -0
  286. package/dist/wizard/lib/revenue-types.d.ts +5 -0
  287. package/dist/wizard/lib/revenue-types.js +1 -0
  288. package/dist/wizard/lib/route-optimizer.d.ts +28 -0
  289. package/dist/wizard/lib/route-optimizer.js +93 -0
  290. package/dist/wizard/lib/s3-deploy.d.ts +19 -0
  291. package/dist/wizard/lib/s3-deploy.js +156 -0
  292. package/dist/wizard/lib/safety-tiers.d.ts +76 -0
  293. package/dist/wizard/lib/safety-tiers.js +134 -0
  294. package/dist/wizard/lib/sentry-generator.d.ts +15 -0
  295. package/dist/wizard/lib/sentry-generator.js +116 -0
  296. package/dist/wizard/lib/server-config.d.ts +13 -0
  297. package/dist/wizard/lib/server-config.js +23 -0
  298. package/dist/wizard/lib/service-install.d.ts +18 -0
  299. package/dist/wizard/lib/service-install.js +182 -0
  300. package/dist/wizard/lib/site-scanner.d.ts +80 -0
  301. package/dist/wizard/lib/site-scanner.js +262 -0
  302. package/dist/wizard/lib/ssh-deploy.d.ts +25 -0
  303. package/dist/wizard/lib/ssh-deploy.js +225 -0
  304. package/dist/wizard/lib/templates.d.ts +24 -0
  305. package/dist/wizard/lib/templates.js +219 -0
  306. package/dist/wizard/lib/totp.d.ts +35 -0
  307. package/dist/wizard/lib/totp.js +276 -0
  308. package/dist/wizard/lib/tower-auth.d.ts +43 -0
  309. package/dist/wizard/lib/tower-auth.js +352 -0
  310. package/dist/wizard/lib/tower-rate-limit.d.ts +14 -0
  311. package/dist/wizard/lib/tower-rate-limit.js +61 -0
  312. package/dist/wizard/lib/tower-session.d.ts +28 -0
  313. package/dist/wizard/lib/tower-session.js +119 -0
  314. package/dist/wizard/lib/treasury-backup.d.ts +23 -0
  315. package/dist/wizard/lib/treasury-backup.js +126 -0
  316. package/dist/wizard/lib/treasury-heartbeat.d.ts +82 -0
  317. package/dist/wizard/lib/treasury-heartbeat.js +1104 -0
  318. package/dist/wizard/lib/updater.d.ts +29 -0
  319. package/dist/wizard/lib/updater.js +190 -0
  320. package/dist/wizard/lib/user-manager.d.ts +39 -0
  321. package/dist/wizard/lib/user-manager.js +182 -0
  322. package/dist/wizard/lib/vault.d.ts +26 -0
  323. package/dist/wizard/lib/vault.js +161 -0
  324. package/dist/wizard/router.d.ts +5 -0
  325. package/dist/wizard/router.js +15 -0
  326. package/dist/wizard/server.d.ts +18 -0
  327. package/dist/wizard/server.js +436 -0
  328. package/package.json +59 -0
@@ -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>;