@zaip-ai/cli 1.3.7 → 1.4.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 (332) hide show
  1. package/README.md +86 -1
  2. package/dist/commands/init.d.ts +1 -0
  3. package/dist/commands/init.d.ts.map +1 -1
  4. package/dist/commands/init.js +26 -0
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +3 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/services/adapters.js +4 -4
  11. package/dist/services/adapters.js.map +1 -1
  12. package/dist/services/codex-config-template.d.ts +2 -2
  13. package/dist/services/codex-config-template.d.ts.map +1 -1
  14. package/dist/services/codex-config-template.js +3 -3
  15. package/dist/services/codex-config-template.js.map +1 -1
  16. package/dist/services/codex-rules.d.ts +1 -1
  17. package/dist/services/codex-rules.d.ts.map +1 -1
  18. package/dist/services/codex-rules.js +9 -24
  19. package/dist/services/codex-rules.js.map +1 -1
  20. package/dist/services/delivery-git-preflight.d.ts +23 -0
  21. package/dist/services/delivery-git-preflight.d.ts.map +1 -0
  22. package/dist/services/delivery-git-preflight.js +69 -0
  23. package/dist/services/delivery-git-preflight.js.map +1 -0
  24. package/dist/services/doctor.d.ts.map +1 -1
  25. package/dist/services/doctor.js +13 -1
  26. package/dist/services/doctor.js.map +1 -1
  27. package/dist/services/install-agents-template.d.ts.map +1 -1
  28. package/dist/services/install-agents-template.js +22 -28
  29. package/dist/services/install-agents-template.js.map +1 -1
  30. package/dist/services/install-profile.d.ts +8 -0
  31. package/dist/services/install-profile.d.ts.map +1 -0
  32. package/dist/services/install-profile.js +56 -0
  33. package/dist/services/install-profile.js.map +1 -0
  34. package/dist/services/logger.d.ts.map +1 -1
  35. package/dist/services/logger.js +6 -5
  36. package/dist/services/logger.js.map +1 -1
  37. package/dist/services/stack-git.d.ts +9 -0
  38. package/dist/services/stack-git.d.ts.map +1 -0
  39. package/dist/services/stack-git.js +188 -0
  40. package/dist/services/stack-git.js.map +1 -0
  41. package/dist/services/stack-install.d.ts +14 -0
  42. package/dist/services/stack-install.d.ts.map +1 -0
  43. package/dist/services/stack-install.js +176 -0
  44. package/dist/services/stack-install.js.map +1 -0
  45. package/dist/services/stack-node.d.ts +12 -0
  46. package/dist/services/stack-node.d.ts.map +1 -0
  47. package/dist/services/stack-node.js +150 -0
  48. package/dist/services/stack-node.js.map +1 -0
  49. package/dist/services/stack-package-manager.d.ts +12 -0
  50. package/dist/services/stack-package-manager.d.ts.map +1 -0
  51. package/dist/services/stack-package-manager.js +178 -0
  52. package/dist/services/stack-package-manager.js.map +1 -0
  53. package/dist/services/stack-plan.d.ts +35 -0
  54. package/dist/services/stack-plan.d.ts.map +1 -0
  55. package/dist/services/stack-plan.js +130 -0
  56. package/dist/services/stack-plan.js.map +1 -0
  57. package/dist/services/stack-terraform.d.ts +13 -0
  58. package/dist/services/stack-terraform.d.ts.map +1 -0
  59. package/dist/services/stack-terraform.js +274 -0
  60. package/dist/services/stack-terraform.js.map +1 -0
  61. package/dist/services/template-manifest.d.ts.map +1 -1
  62. package/dist/services/template-manifest.js +14 -1
  63. package/dist/services/template-manifest.js.map +1 -1
  64. package/dist/types.d.ts +4 -0
  65. package/dist/types.d.ts.map +1 -1
  66. package/package.json +1 -1
  67. package/templates/.agents/.env.example +34 -0
  68. package/templates/{README.md → .agents/README.md} +124 -60
  69. package/templates/.agents/config/agents/catalog.yaml +23 -23
  70. package/templates/.agents/config/clients/codex/agents/zaip-agent-analyst.toml +1 -0
  71. package/templates/.agents/config/clients/codex/agents/zaip-agent-auditor.toml +1 -0
  72. package/templates/.agents/config/clients/codex/agents/zaip-agent-backend.toml +5 -4
  73. package/templates/.agents/config/clients/codex/agents/zaip-agent-brand-strategist.toml +1 -0
  74. package/templates/.agents/config/clients/codex/agents/zaip-agent-builder.toml +1 -0
  75. package/templates/.agents/config/clients/codex/agents/zaip-agent-cloud-engineer.toml +10 -7
  76. package/templates/.agents/config/clients/codex/agents/zaip-agent-data-analyst.toml +1 -0
  77. package/templates/.agents/config/clients/codex/agents/zaip-agent-designer.toml +1 -0
  78. package/templates/.agents/config/clients/codex/agents/zaip-agent-finalizer.toml +1 -0
  79. package/templates/.agents/config/clients/codex/agents/zaip-agent-frontend.toml +5 -4
  80. package/templates/.agents/config/clients/codex/agents/zaip-agent-general-operations.toml +1 -0
  81. package/templates/.agents/config/clients/codex/agents/zaip-agent-governance-compliance.toml +1 -0
  82. package/templates/.agents/config/clients/codex/agents/zaip-agent-growth-strategist.toml +1 -0
  83. package/templates/.agents/config/clients/codex/agents/zaip-agent-integrator.toml +1 -0
  84. package/templates/.agents/config/clients/codex/agents/zaip-agent-marketing-analyst.toml +5 -4
  85. package/templates/.agents/config/clients/codex/agents/zaip-agent-orchestrator.toml +1 -0
  86. package/templates/.agents/config/clients/codex/agents/zaip-agent-refactoring-specialist.toml +1 -0
  87. package/templates/.agents/config/clients/codex/agents/zaip-agent-reviewer.toml +1 -0
  88. package/templates/.agents/config/clients/codex/agents/zaip-agent-sales-specialist.toml +1 -0
  89. package/templates/.agents/config/clients/codex/agents/zaip-agent-security-auditor.toml +1 -0
  90. package/templates/.agents/config/clients/codex/agents/zaip-agent-task-executor.toml +1 -0
  91. package/templates/.agents/config/clients/codex/agents/zaip-agent-website-developer.toml +5 -4
  92. package/templates/.agents/config/clients/codex/agents/zaip-agent-writer.toml +1 -0
  93. package/templates/.agents/config/pricing/models.json +25 -1
  94. package/templates/.agents/config/project.yaml +2 -0
  95. package/templates/.agents/dashboard/.zaip-managed.json +214 -94
  96. package/templates/.agents/dashboard/DATA-DICTIONARY.md +1 -1
  97. package/templates/.agents/dashboard/README.md +58 -19
  98. package/templates/.agents/dashboard/apps/frontend/dist/assets/{CostCalculationGuidePage-DwVZOmMV.js → CostCalculationGuidePage-snUCQYTC.js} +1 -1
  99. package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog--czwAlcH.js → DashboardHelpDialog-oZVlf-l5.js} +787 -723
  100. package/templates/.agents/dashboard/apps/frontend/dist/assets/{PricingSettingsDialog-CyjMXkm8.js → PricingSettingsDialog-BPtVUGgs.js} +1 -1
  101. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-3Awyaovx.js +3 -0
  102. package/templates/.agents/dashboard/apps/frontend/dist/assets/{ProjectSettingsPage-BomxqCBU.css → ProjectSettingsPage-GgzpZ_PY.css} +1 -1
  103. package/templates/.agents/dashboard/apps/frontend/dist/assets/{TraceabilityWorkspace-CAqYVin1.js → TraceabilityWorkspace-BYjVOHI_.js} +1 -1
  104. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-DbaLbU2q.js +68 -0
  105. package/templates/.agents/dashboard/apps/frontend/dist/assets/{icons-vendor-DXBOtWNI.js → icons-vendor-TPUT2IUt.js} +1 -1
  106. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-Cmlx8OYH.css +1 -0
  107. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-ZJFXmK7m.js +2 -0
  108. package/templates/.agents/dashboard/apps/frontend/dist/assets/{react-vendor-DaNXQPyk.js → react-vendor-Ct48XHGL.js} +1 -1
  109. package/templates/.agents/dashboard/apps/frontend/dist/assets/{traceability-I4AKqVDX.js → traceability-BDe4_Ubl.js} +1 -1
  110. package/templates/.agents/dashboard/apps/frontend/dist/index.html +6 -6
  111. package/templates/.agents/dashboard/apps/frontend/src/App.tsx +73 -67
  112. package/templates/.agents/dashboard/apps/frontend/src/AppLoadingBoundary.tsx +35 -7
  113. package/templates/.agents/dashboard/apps/frontend/src/AppWorkBoard.ts +55 -0
  114. package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +15 -2
  115. package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +33 -6
  116. package/templates/.agents/dashboard/apps/frontend/src/app-loading-boundary.css +98 -0
  117. package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +5 -5
  118. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api-reconciliation.ts +33 -0
  119. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.test.ts +75 -0
  120. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +9 -8
  121. package/templates/.agents/dashboard/apps/frontend/src/project-settings-model.ts +15 -3
  122. package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +0 -104
  123. package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +61 -0
  124. package/templates/.agents/dashboard/apps/frontend/src/project-stack-versions.css +117 -0
  125. package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +78 -2
  126. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.test.ts +28 -0
  127. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.ts +8 -5
  128. package/templates/.agents/dashboard/apps/frontend/src/use-app-effects.ts +180 -1
  129. package/templates/.agents/dashboard/modules/cost-monitor/src/contracts.ts +7 -4
  130. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorContent.tsx +13 -7
  131. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +14 -0
  132. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTableDisplay.ts +211 -0
  133. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +152 -157
  134. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.tsx +155 -142
  135. package/templates/.agents/dashboard/modules/cost-monitor/src/react/InvocationManifestQuery.test.ts +145 -0
  136. package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.ts +7 -5
  137. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-compact-cost-page.ts +4 -1
  138. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.ts +4 -1
  139. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-run-page.ts +4 -1
  140. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +4 -4
  141. package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.test.ts +79 -1
  142. package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.tsx +105 -11
  143. package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +477 -327
  144. package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +430 -285
  145. package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +14 -2
  146. package/templates/.agents/dashboard/packages/local-runtime/scripts/rebuild-sqlite-read-model.mjs +6 -26
  147. package/templates/.agents/dashboard/packages/local-runtime/scripts/validate-sqlite-read-model.mjs +1 -1
  148. package/templates/.agents/dashboard/packages/local-runtime/scripts/verify-persistent-launch.mjs +268 -0
  149. package/templates/.agents/dashboard/packages/local-runtime/server.mjs +482 -332
  150. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +243 -1
  151. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +252 -41
  152. package/templates/.agents/dashboard/packages/local-runtime/src/server-agent-assets.ts +39 -0
  153. package/templates/.agents/dashboard/packages/local-runtime/src/server-browser-lease.ts +33 -0
  154. package/templates/.agents/dashboard/packages/local-runtime/src/server-reconciliation-refresh.test.ts +148 -11
  155. package/templates/.agents/dashboard/packages/local-runtime/src/server-reconciliation-result.test.ts +68 -0
  156. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.test.ts +19 -0
  157. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.ts +39 -43
  158. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-revision.test.ts +42 -0
  159. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-revision.ts +26 -0
  160. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.ts +34 -0
  161. package/templates/.agents/dashboard/packages/local-runtime/src/server-startup.ts +30 -0
  162. package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.test.ts +89 -0
  163. package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.ts +88 -0
  164. package/templates/.agents/dashboard/packages/local-runtime/src/server-workspace.ts +68 -7
  165. package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +11 -5
  166. package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +129 -99
  167. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-agent-productivity.test.ts +111 -0
  168. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-agent-productivity.ts +140 -0
  169. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-agent-page.test.ts +127 -4
  170. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-agent-page.ts +145 -5
  171. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-aggregates.ts +156 -23
  172. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-group-projection.ts +18 -9
  173. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-invocation-projection.ts +52 -0
  174. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-first-fold-persistence.ts +35 -13
  175. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-force-canonical.test.ts +56 -0
  176. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-incremental-cache.test.ts +29 -0
  177. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-incremental-cache.ts +136 -0
  178. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-incremental-refresh.test.ts +251 -0
  179. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-operations-projection.ts +22 -7
  180. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-cache.test-support.ts +1 -1
  181. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-canonical-parsing.ts +42 -0
  182. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-canonical.ts +793 -0
  183. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-multi-provider-duration.test.ts +270 -0
  184. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-multi-provider-fixture.ts +3 -2
  185. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-multi-provider.test.ts +18 -4
  186. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-source-fingerprint.test.ts +87 -0
  187. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-source-fingerprint.ts +105 -16
  188. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +131 -59
  189. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.ts +1000 -1115
  190. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-snapshot-cache.ts +13 -92
  191. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-launch-claims.test.mjs +79 -0
  192. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-launch-page.mjs +27 -0
  193. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-lifecycle.mjs +6 -6
  194. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-prerequisites.mjs +1 -1
  195. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-refresh.mjs +2 -10
  196. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-server.mjs +142 -0
  197. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +231 -239
  198. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +18 -29
  199. package/templates/.agents/dashboard/packages/windows-launcher/Program.cs +6 -0
  200. package/templates/.agents/dashboard/stack-dependencies.json +14 -0
  201. package/templates/.agents/dashboard/zaip-dashboard-windows.exe +0 -0
  202. package/templates/.agents/requirements/autonomous-assurance.md +1 -1
  203. package/templates/.agents/requirements/cloud-hostinger-autonomy.md +47 -0
  204. package/templates/.agents/requirements/comparative-audit.md +1 -1
  205. package/templates/.agents/requirements/context-engine.md +1 -1
  206. package/templates/.agents/requirements/cost-observability.md +1 -1
  207. package/templates/.agents/requirements/dashboard-launch.md +2 -2
  208. package/templates/.agents/requirements/data-export.md +1 -1
  209. package/templates/.agents/requirements/design-system.md +1 -1
  210. package/templates/.agents/requirements/execution-engine.md +1 -1
  211. package/templates/.agents/requirements/kanban-dashboard.md +1 -1
  212. package/templates/.agents/requirements/model-orchestration.md +1 -1
  213. package/templates/.agents/requirements/public-distribution.md +1 -1
  214. package/templates/.agents/requirements/software-architecture.md +1 -1
  215. package/templates/.agents/requirements/strategic-improvements.md +1 -1
  216. package/templates/.agents/requirements/work-lifecycle.md +1 -1
  217. package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
  218. package/templates/.agents/rules/autonomy-decision.md +1 -1
  219. package/templates/.agents/rules/cloud-hostinger-autonomy.md +21 -0
  220. package/templates/.agents/rules/core.md +5 -4
  221. package/templates/.agents/rules/local-sqlite-storage.md +18 -0
  222. package/templates/.agents/rules/meta-mcp.md +21 -0
  223. package/templates/.agents/rules/workflow.md +1 -0
  224. package/templates/.agents/runtime/bin/zaip.mjs +305 -137
  225. package/templates/.agents/runtime/checksums.sha256 +2 -2
  226. package/templates/.agents/runtime/provenance.json +2 -2
  227. package/templates/.agents/skills/zaip-skill-api-to-mcp/SKILL.md +4 -0
  228. package/templates/.agents/skills/zaip-skill-brand-governance/SKILL.md +25 -9
  229. package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-framework.md +2 -2
  230. package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-standards.md +2 -2
  231. package/templates/.agents/skills/zaip-skill-change/references/observable-evidence.md +15 -0
  232. package/templates/.agents/skills/zaip-skill-dashboard-sqlite/SKILL.md +13 -5
  233. package/templates/.agents/skills/zaip-skill-data-analyst/SKILL.md +10 -5
  234. package/templates/.agents/skills/zaip-skill-execution/SKILL.md +5 -4
  235. package/templates/.agents/skills/zaip-skill-frontend-launcher/SKILL.md +4 -3
  236. package/templates/.agents/skills/zaip-skill-frontend-launcher/references/launcher-contract.md +5 -3
  237. package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +5 -5
  238. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs +78 -13
  239. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.test.mjs +59 -0
  240. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/yaml-parser.mjs +157 -0
  241. package/templates/.agents/skills/zaip-skill-growth-strategy-revops/SKILL.md +11 -6
  242. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/SKILL.md +17 -0
  243. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/agents/openai.yaml +7 -0
  244. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/autonomous-cloud-inputs.example.json +41 -0
  245. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/autonomous-runner.md +84 -0
  246. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/operational-contract.md +19 -0
  247. package/templates/.agents/skills/zaip-skill-local-credentials/SKILL.md +43 -0
  248. package/templates/.agents/skills/zaip-skill-local-credentials/agents/openai.yaml +6 -0
  249. package/templates/.agents/skills/zaip-skill-local-credentials/references/dotenv-resolution.md +47 -0
  250. package/templates/.agents/skills/zaip-skill-marketing/SKILL.md +8 -3
  251. package/templates/.agents/skills/zaip-skill-meta-ads/SKILL.md +16 -0
  252. package/templates/.agents/skills/zaip-skill-meta-ads/agents/openai.yaml +4 -0
  253. package/templates/.agents/skills/zaip-skill-meta-ads/references/setup.md +3 -0
  254. package/templates/.agents/skills/zaip-skill-meta-ads-setup/SKILL.md +24 -0
  255. package/templates/.agents/skills/zaip-skill-meta-ads-setup/agents/openai.yaml +4 -0
  256. package/templates/.agents/skills/zaip-skill-meta-ads-setup/references/diagnostics.md +13 -0
  257. package/templates/.agents/skills/zaip-skill-meta-ads-setup/references/official-sources.md +10 -0
  258. package/templates/.agents/skills/zaip-skill-meta-devtools-api-health/SKILL.md +12 -0
  259. package/templates/.agents/skills/zaip-skill-meta-devtools-api-health/agents/openai.yaml +4 -0
  260. package/templates/.agents/skills/zaip-skill-meta-devtools-api-health/references/LICENSE +21 -0
  261. package/templates/.agents/skills/zaip-skill-meta-devtools-api-health/references/upstream.md +77 -0
  262. package/templates/.agents/skills/zaip-skill-meta-devtools-api-integration/SKILL.md +12 -0
  263. package/templates/.agents/skills/zaip-skill-meta-devtools-api-integration/agents/openai.yaml +4 -0
  264. package/templates/.agents/skills/zaip-skill-meta-devtools-api-integration/references/LICENSE +21 -0
  265. package/templates/.agents/skills/zaip-skill-meta-devtools-api-integration/references/upstream.md +126 -0
  266. package/templates/.agents/skills/zaip-skill-meta-devtools-app-health-check/SKILL.md +12 -0
  267. package/templates/.agents/skills/zaip-skill-meta-devtools-app-health-check/agents/openai.yaml +4 -0
  268. package/templates/.agents/skills/zaip-skill-meta-devtools-app-health-check/references/LICENSE +21 -0
  269. package/templates/.agents/skills/zaip-skill-meta-devtools-app-health-check/references/upstream.md +67 -0
  270. package/templates/.agents/skills/zaip-skill-meta-devtools-app-review-prep/SKILL.md +12 -0
  271. package/templates/.agents/skills/zaip-skill-meta-devtools-app-review-prep/agents/openai.yaml +4 -0
  272. package/templates/.agents/skills/zaip-skill-meta-devtools-app-review-prep/references/LICENSE +21 -0
  273. package/templates/.agents/skills/zaip-skill-meta-devtools-app-review-prep/references/upstream.md +69 -0
  274. package/templates/.agents/skills/zaip-skill-meta-devtools-compliance-check/SKILL.md +12 -0
  275. package/templates/.agents/skills/zaip-skill-meta-devtools-compliance-check/agents/openai.yaml +4 -0
  276. package/templates/.agents/skills/zaip-skill-meta-devtools-compliance-check/references/LICENSE +21 -0
  277. package/templates/.agents/skills/zaip-skill-meta-devtools-compliance-check/references/upstream.md +79 -0
  278. package/templates/.agents/skills/zaip-skill-meta-devtools-debug-access-token/SKILL.md +14 -0
  279. package/templates/.agents/skills/zaip-skill-meta-devtools-debug-access-token/agents/openai.yaml +4 -0
  280. package/templates/.agents/skills/zaip-skill-meta-devtools-debug-access-token/references/LICENSE +21 -0
  281. package/templates/.agents/skills/zaip-skill-meta-devtools-debug-access-token/references/upstream.md +144 -0
  282. package/templates/.agents/skills/zaip-skill-meta-devtools-debug-webhooks/SKILL.md +12 -0
  283. package/templates/.agents/skills/zaip-skill-meta-devtools-debug-webhooks/agents/openai.yaml +4 -0
  284. package/templates/.agents/skills/zaip-skill-meta-devtools-debug-webhooks/references/LICENSE +21 -0
  285. package/templates/.agents/skills/zaip-skill-meta-devtools-debug-webhooks/references/upstream.md +83 -0
  286. package/templates/.agents/skills/zaip-skill-meta-devtools-search-docs/SKILL.md +10 -0
  287. package/templates/.agents/skills/zaip-skill-meta-devtools-search-docs/agents/openai.yaml +4 -0
  288. package/templates/.agents/skills/zaip-skill-meta-devtools-search-docs/references/LICENSE +21 -0
  289. package/templates/.agents/skills/zaip-skill-meta-devtools-search-docs/references/setup.md +11 -0
  290. package/templates/.agents/skills/zaip-skill-meta-devtools-search-docs/references/upstream.md +55 -0
  291. package/templates/.agents/skills/zaip-skill-meta-devtools-webhook-setup/SKILL.md +12 -0
  292. package/templates/.agents/skills/zaip-skill-meta-devtools-webhook-setup/agents/openai.yaml +4 -0
  293. package/templates/.agents/skills/zaip-skill-meta-devtools-webhook-setup/references/LICENSE +21 -0
  294. package/templates/.agents/skills/zaip-skill-meta-devtools-webhook-setup/references/upstream.md +56 -0
  295. package/templates/.agents/skills/zaip-skill-sales-methodology/SKILL.md +12 -7
  296. package/templates/.agents/skills/zaip-skill-sqlite-read-model/SKILL.md +11 -4
  297. package/templates/.agents/skills/zaip-skill-tool-setup/SKILL.md +6 -4
  298. package/templates/.agents/skills/zaip-skill-tool-setup/references/codex-config.md +4 -2
  299. package/templates/.agents/skills/zaip-skill-tool-setup/references/secrets.md +1 -0
  300. package/templates/.agents/tools/catalog.yaml +6 -0
  301. package/templates/.agents/tools/cloud-runner-dns.mjs +28 -0
  302. package/templates/.agents/tools/cloud-runner-terraform.mjs +212 -0
  303. package/templates/.agents/tools/cloud-runner.integration.test.mjs +239 -0
  304. package/templates/.agents/tools/cloud-runner.mjs +786 -0
  305. package/templates/.agents/tools/cloud-runner.test.mjs +534 -0
  306. package/templates/.agents/tools/cloud-terraform-plan-policy.mjs +262 -0
  307. package/templates/.agents/tools/mcp/development/meta-devtools/README.md +14 -0
  308. package/templates/.agents/tools/mcp/development/meta-devtools/manifest.yaml +28 -0
  309. package/templates/.agents/tools/mcp/infra/cloudflare/manifest.yaml +2 -3
  310. package/templates/.agents/tools/mcp/infra/hostinger/manifest.yaml +1 -3
  311. package/templates/.agents/tools/mcp/marketing/meta-ads/README.md +15 -13
  312. package/templates/.agents/tools/mcp/marketing/meta-ads/manifest.yaml +15 -10
  313. package/templates/.agents/tools/profiles/development.yaml +3 -0
  314. package/templates/infra/terraform/.terraform.lock.hcl +42 -0
  315. package/templates/infra/terraform/README.md +31 -0
  316. package/templates/infra/terraform/backend.tf.json +13 -0
  317. package/templates/infra/terraform/deployment-inputs.example.yaml +22 -0
  318. package/templates/infra/terraform/fixtures/approved-targets.json +32 -0
  319. package/templates/infra/terraform/fixtures/plan-approved.json +67 -0
  320. package/templates/infra/terraform/main.tf +77 -0
  321. package/templates/infra/terraform/outputs.tf +20 -0
  322. package/templates/infra/terraform/terraform.tfvars.example +26 -0
  323. package/templates/infra/terraform/variables.tf +91 -0
  324. package/templates/infra/terraform/versions.tf +18 -0
  325. package/templates/scripts/validate-cloud-hostinger-contract.mjs +89 -0
  326. package/templates/scripts/validate-cloud-terraform-plan.mjs +1 -0
  327. package/templates/template-manifest.json +613 -173
  328. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-B_Oj6Dlf.js +0 -3
  329. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-C09KmlSw.js +0 -68
  330. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-CblPpexd.js +0 -2
  331. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-hPPfVGQv.css +0 -1
  332. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-stale-seed.ts +0 -50
@@ -0,0 +1,188 @@
1
+ import { execFile } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import { mkdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
4
+ import { dirname, join, relative } from "node:path";
5
+ import { promisify } from "node:util";
6
+ import { inflateRawSync } from "node:zlib";
7
+ import { assertSafeDestination } from "./transactional-files.js";
8
+ const exec = promisify(execFile);
9
+ const API = "https://api.github.com/repos/git-for-windows/git/releases/latest";
10
+ const KNOWN_DIGESTS = {
11
+ "v2.55.0.windows.5:MinGit-2.55.0.5-64-bit.zip": "56d7b226b7693196cfc71fef26568f536c4a021ab6c37ff2db4287bed908e96e",
12
+ };
13
+ export function resolveGitForWindowsRelease(value, arch = process.arch) {
14
+ const release = value;
15
+ const tag = typeof release.tag_name === "string" ? release.tag_name : null;
16
+ const suffix = arch === "x64" ? "64-bit" : arch === "arm64" ? "arm64" : null;
17
+ if (tag === null || suffix === null || !Array.isArray(release.assets))
18
+ throw new Error("Release oficial do Git for Windows sem archive compatível.");
19
+ const asset = release.assets.find((item) => typeof item.name === "string" &&
20
+ new RegExp(`^MinGit-.+-${suffix}\\.zip$`, "i").test(item.name) &&
21
+ typeof item.browser_download_url === "string");
22
+ if (!asset || typeof asset.name !== "string" || typeof asset.browser_download_url !== "string")
23
+ throw new Error("Release oficial do Git for Windows sem archive portátil esperado.");
24
+ const declared = typeof asset.digest === "string"
25
+ ? /^sha256:([a-f0-9]{64})$/i.exec(asset.digest)?.[1]?.toLowerCase()
26
+ : undefined;
27
+ const sha256 = declared ?? KNOWN_DIGESTS[`${tag}:${asset.name}`];
28
+ if (sha256 === undefined)
29
+ throw new Error("Release oficial do Git for Windows não publicou SHA-256 verificável.");
30
+ return { tag, name: asset.name, url: asset.browser_download_url, sha256 };
31
+ }
32
+ export async function prepareStackGit(root, log) {
33
+ if (process.platform !== "win32") {
34
+ try {
35
+ const version = (await exec("git", ["--version"], { timeout: 10_000 })).stdout.trim();
36
+ if (!/^git version \d+\.\d+\.\d+/.test(version))
37
+ throw new Error("invalid");
38
+ log(`Git do sistema verificado: ${version}.\n`);
39
+ return;
40
+ }
41
+ catch {
42
+ throw new Error("Git é necessário para hooks ZAIP. Instale Git pelo gerenciador do seu sistema e repita init.");
43
+ }
44
+ }
45
+ const release = await latestRelease();
46
+ const local = join(root, ".local"), gitRoot = join(local, "git"), git = join(gitRoot, "cmd", "git.exe"), receipt = join(gitRoot, "verified.json");
47
+ if (await validGit(git, receipt, release)) {
48
+ log("Git for Windows local reutilizado em .local/git.\n");
49
+ return;
50
+ }
51
+ const staging = join(local, `git-staging-${process.pid}`), backup = join(local, `git-backup-${process.pid}`), lock = join(local, "git.install.lock");
52
+ for (const path of [gitRoot, staging, backup, lock])
53
+ await assertSafeDestination(root, relative(root, path).replaceAll("\\", "/"));
54
+ await mkdir(local, { recursive: true });
55
+ await mkdir(lock).catch((error) => {
56
+ if (error.code === "EEXIST")
57
+ throw new Error("Instalação local do Git já está em andamento para este projeto.");
58
+ throw error;
59
+ });
60
+ try {
61
+ if ((await exists(gitRoot)) && !(await ownedGit(git, receipt)))
62
+ throw new Error("Git local existente sem recibo ZAIP válido foi preservado.");
63
+ const archive = await download(release.url, 200 * 1024 * 1024), digest = sha256(archive);
64
+ if (digest !== release.sha256)
65
+ throw new Error("Download do Git for Windows rejeitado: SHA-256 difere do arquivo oficial.");
66
+ await extractZip(archive, staging);
67
+ const stagedGit = join(staging, "cmd", "git.exe");
68
+ const version = (await exec(stagedGit, ["--version"], { windowsHide: true, timeout: 10_000 })).stdout.trim();
69
+ if (!/^git version \d+\.\d+\.\d+/.test(version))
70
+ throw new Error("Git local extraído não respondeu corretamente.");
71
+ await writeFile(join(staging, "verified.json"), `${JSON.stringify({ schema_version: 1, tag: release.tag, archive: release.name, sha256: digest, binary_sha256: sha256(await readFile(stagedGit)), version })}\n`, { flag: "wx" });
72
+ if (await exists(gitRoot))
73
+ await rename(gitRoot, backup);
74
+ try {
75
+ await rename(staging, gitRoot);
76
+ }
77
+ catch (error) {
78
+ if (await exists(backup))
79
+ await rename(backup, gitRoot);
80
+ throw error;
81
+ }
82
+ await rm(backup, { recursive: true, force: true });
83
+ }
84
+ finally {
85
+ await rm(staging, { recursive: true, force: true });
86
+ await rm(lock, { recursive: true, force: false });
87
+ }
88
+ log(`Git for Windows ${release.tag} instalado localmente em .local/git.\n`);
89
+ }
90
+ async function latestRelease() {
91
+ const response = await fetch(API, {
92
+ headers: { Accept: "application/vnd.github+json", "User-Agent": "zaip-aios-cli" },
93
+ signal: AbortSignal.timeout(30_000),
94
+ });
95
+ if (!response.ok)
96
+ throw new Error(`Consulta oficial do Git for Windows falhou: HTTP ${response.status}.`);
97
+ return resolveGitForWindowsRelease(await response.json());
98
+ }
99
+ async function validGit(git, receipt, release) {
100
+ try {
101
+ const record = JSON.parse(await readFile(receipt, "utf8"));
102
+ return (record?.schema_version === 1 &&
103
+ record?.tag === release.tag &&
104
+ record?.archive === release.name &&
105
+ record?.sha256 === release.sha256 &&
106
+ record?.version ===
107
+ (await exec(git, ["--version"], { windowsHide: true, timeout: 10_000 })).stdout.trim() &&
108
+ record?.binary_sha256 === sha256(await readFile(git)));
109
+ }
110
+ catch {
111
+ return false;
112
+ }
113
+ }
114
+ async function ownedGit(git, receipt) {
115
+ try {
116
+ const record = JSON.parse(await readFile(receipt, "utf8"));
117
+ return (record?.schema_version === 1 &&
118
+ typeof record?.binary_sha256 === "string" &&
119
+ record.binary_sha256 === sha256(await readFile(git)) &&
120
+ (await stat(git)).isFile());
121
+ }
122
+ catch {
123
+ return false;
124
+ }
125
+ }
126
+ async function exists(path) {
127
+ try {
128
+ await stat(path);
129
+ return true;
130
+ }
131
+ catch {
132
+ return false;
133
+ }
134
+ }
135
+ async function download(url, limit) {
136
+ const response = await fetch(url, { signal: AbortSignal.timeout(120_000), redirect: "follow" });
137
+ if (!response.ok || !response.body)
138
+ throw new Error(`Download oficial do Git falhou: HTTP ${response.status}.`);
139
+ if (!new Set(["github.com", "release-assets.githubusercontent.com"]).has(new URL(response.url).hostname))
140
+ throw new Error("Download oficial do Git redirecionou para um host não aprovado.");
141
+ const chunks = [];
142
+ let total = 0;
143
+ for await (const chunk of response.body) {
144
+ total += chunk.length;
145
+ if (total > limit)
146
+ throw new Error("Download do Git excedeu o limite aprovado.");
147
+ chunks.push(chunk);
148
+ }
149
+ return Buffer.concat(chunks);
150
+ }
151
+ async function extractZip(archive, target) {
152
+ const end = eocd(archive), entries = archive.readUInt16LE(end + 10);
153
+ let offset = archive.readUInt32LE(end + 16);
154
+ for (let index = 0; index < entries; index += 1) {
155
+ if (archive.readUInt32LE(offset) !== 0x02014b50)
156
+ throw new Error("Archive Git inválido.");
157
+ const method = archive.readUInt16LE(offset + 10), compressed = archive.readUInt32LE(offset + 20), size = archive.readUInt32LE(offset + 24), nameLength = archive.readUInt16LE(offset + 28), extraLength = archive.readUInt16LE(offset + 30), commentLength = archive.readUInt16LE(offset + 32), localOffset = archive.readUInt32LE(offset + 42), name = archive.subarray(offset + 46, offset + 46 + nameLength).toString("utf8");
158
+ offset += 46 + nameLength + extraLength + commentLength;
159
+ if (!name || name.includes("..") || name.startsWith("/") || name.includes("\\"))
160
+ throw new Error("Archive Git contém caminho inseguro.");
161
+ if (name.endsWith("/")) {
162
+ await mkdir(join(target, name), { recursive: true });
163
+ continue;
164
+ }
165
+ if (localOffset + 30 > archive.length || archive.readUInt32LE(localOffset) !== 0x04034b50)
166
+ throw new Error("Archive Git inválido.");
167
+ const start = localOffset +
168
+ 30 +
169
+ archive.readUInt16LE(localOffset + 26) +
170
+ archive.readUInt16LE(localOffset + 28), payload = archive.subarray(start, start + compressed), body = method === 0 ? payload : method === 8 ? inflateRawSync(payload) : null;
171
+ if (body === null || body.length !== size || body.length > 128 * 1024 * 1024)
172
+ throw new Error("Archive Git inválido.");
173
+ const output = join(target, name);
174
+ await mkdir(dirname(output), { recursive: true });
175
+ await writeFile(output, body, { flag: "wx" });
176
+ }
177
+ }
178
+ function eocd(archive) {
179
+ for (let offset = archive.length - 22; offset >= Math.max(0, archive.length - 65_557); offset -= 1)
180
+ if (archive.readUInt32LE(offset) === 0x06054b50 &&
181
+ offset + 22 + archive.readUInt16LE(offset + 20) === archive.length)
182
+ return offset;
183
+ throw new Error("Archive Git inválido: diretório central ausente.");
184
+ }
185
+ function sha256(value) {
186
+ return createHash("sha256").update(value).digest("hex");
187
+ }
188
+ //# sourceMappingURL=stack-git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-git.js","sourceRoot":"","sources":["../../src/services/stack-git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type PackageRunner } from "./stack-package-manager.js";
2
+ import { type StackPlan } from "./stack-plan.js";
3
+ export interface StackInstallResult {
4
+ manager: string | null;
5
+ packages: Array<{
6
+ name: string;
7
+ configured: string;
8
+ installed: string;
9
+ action: "installed" | "preserved";
10
+ }>;
11
+ }
12
+ /** Package manifests/locks roll back on failure; downloaded modules remain available for retry. */
13
+ export declare function installStack(plan: StackPlan, run?: PackageRunner): Promise<StackInstallResult>;
14
+ //# sourceMappingURL=stack-install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-install.d.ts","sourceRoot":"","sources":["../../src/services/stack-install.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,aAAa,EAGnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,WAAW,GAAG,WAAW,CAAC;KACnC,CAAC,CAAC;CACJ;AAED,mGAAmG;AACnG,wBAAsB,YAAY,CAChC,IAAI,EAAE,SAAS,EACf,GAAG,GAAE,aAAiC,GACrC,OAAO,CAAC,kBAAkB,CAAC,CA4H7B"}
@@ -0,0 +1,176 @@
1
+ import { mkdir, open, rm, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { parse, stringify } from "yaml";
4
+ import { installArguments, runPackageManager, selectPackageManager, } from "./stack-package-manager.js";
5
+ import { installedVersion, readOptional, } from "./stack-plan.js";
6
+ import { assertSafeDestination } from "./transactional-files.js";
7
+ /** Package manifests/locks roll back on failure; downloaded modules remain available for retry. */
8
+ export async function installStack(plan, run = runPackageManager) {
9
+ const missing = plan.packages.filter((item) => item.installed === null);
10
+ if (missing.length === 0)
11
+ return result(plan, null);
12
+ const manager = await selectPackageManager(plan.root, plan.manifest);
13
+ const paths = [
14
+ "package.json",
15
+ "package-lock.json",
16
+ "npm-shrinkwrap.json",
17
+ "pnpm-lock.yaml",
18
+ "yarn.lock",
19
+ ];
20
+ for (const path of [...paths, "node_modules/.package-lock.json", ".local/stack-install.lock"])
21
+ await assertSafeDestination(plan.root, path);
22
+ await mkdir(join(plan.root, ".local"), { recursive: true });
23
+ const lockPath = join(plan.root, ".local/stack-install.lock");
24
+ const lock = await open(lockPath, "wx").catch(() => {
25
+ throw new Error("Outra instalação ZAIP pode estar ativa (.local/stack-install.lock). Aguarde sua conclusão antes de repetir.");
26
+ });
27
+ const snapshots = new Map();
28
+ let touched = false;
29
+ try {
30
+ await lock.writeFile(JSON.stringify({ pid: process.pid, started_at: new Date().toISOString() }));
31
+ for (const path of paths)
32
+ snapshots.set(path, await readOptional(join(plan.root, path)));
33
+ if (snapshots.get("package.json") !== plan.manifestSource)
34
+ throw new Error("package.json mudou durante init; repita para recalcular o plano.");
35
+ const finalManifest = structuredClone(plan.manifest);
36
+ for (const item of missing) {
37
+ // An existing dependency range is the project's decision, including optional/peer declarations.
38
+ if (item.declared !== null)
39
+ continue;
40
+ const field = item.development ? "devDependencies" : "dependencies";
41
+ finalManifest[field] = { ...finalManifest[field], [item.name]: item.requested };
42
+ }
43
+ const installManifest = structuredClone(finalManifest);
44
+ // Pin already-installed targets during resolution to avoid npm upgrading an unlocked range.
45
+ for (const item of plan.packages.filter((candidate) => candidate.installed !== null)) {
46
+ let declared = false;
47
+ for (const field of [
48
+ "dependencies",
49
+ "devDependencies",
50
+ "optionalDependencies",
51
+ "peerDependencies",
52
+ ]) {
53
+ if (installManifest[field]?.[item.name] !== undefined) {
54
+ installManifest[field][item.name] = item.installed;
55
+ declared = true;
56
+ }
57
+ }
58
+ if (!declared)
59
+ installManifest.dependencies = {
60
+ ...installManifest.dependencies,
61
+ [item.name]: item.installed,
62
+ };
63
+ }
64
+ const args = await installArguments(manager, plan.root, run);
65
+ touched = true;
66
+ await writeFile(join(plan.root, "package.json"), `${JSON.stringify(installManifest, null, 2)}\n`);
67
+ await run(manager, args, plan.root);
68
+ for (const item of plan.packages) {
69
+ const actual = await installedVersion(plan.root, item.name);
70
+ if (actual === null)
71
+ throw new Error(`${item.name}: gerenciador terminou, mas o pacote não está disponível no projeto.`);
72
+ if (item.installed && actual !== item.installed)
73
+ throw new Error(`${item.name}: versão existente ${item.installed} foi alterada para ${actual}; instalação não aprovada.`);
74
+ if (!item.installed &&
75
+ /^\d+\.\d+\.\d+(?:-[\w.-]+)?$/.test(item.requested) &&
76
+ actual !== item.requested)
77
+ throw new Error(`${item.name}: esperado ${item.requested}, encontrado ${actual}.`);
78
+ }
79
+ // Restore the user's ranges and preserve their other package.json fields.
80
+ const changed = JSON.stringify(finalManifest) !== JSON.stringify(plan.manifest);
81
+ await writeFile(join(plan.root, "package.json"), !changed && plan.manifestSource !== null
82
+ ? plan.manifestSource
83
+ : `${JSON.stringify(finalManifest, null, 2)}\n`);
84
+ if (manager.name === "npm")
85
+ await restoreNpmRootSpecs(plan.root, finalManifest);
86
+ // Restore pnpm root selectors in place; never perform a second dependency resolution.
87
+ if (manager.name === "pnpm")
88
+ await restorePnpmRootSpecs(plan.root, finalManifest);
89
+ if (manager.name === "yarn") {
90
+ // Yarn classic keys reflect the temporary exact selectors; retain both equivalent selectors.
91
+ const path = join(plan.root, "yarn.lock");
92
+ const source = await readOptional(path);
93
+ if (source?.startsWith("# THIS IS AN AUTOGENERATED FILE")) {
94
+ let updated = source;
95
+ for (const item of plan.packages)
96
+ if (item.installed && item.declared && item.installed !== item.declared) {
97
+ const exact = `${item.name}@${item.installed}`;
98
+ const escaped = exact.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
99
+ updated = updated.replace(new RegExp(`^("?${escaped}"?):`, "m"), `$1, ${JSON.stringify(`${item.name}@${item.declared}`)}:`);
100
+ }
101
+ await writeFile(path, updated);
102
+ }
103
+ }
104
+ return await result(plan, manager.name);
105
+ }
106
+ catch (error) {
107
+ if (touched)
108
+ for (const [path, source] of snapshots) {
109
+ if (source === null)
110
+ await rm(join(plan.root, path), { force: true });
111
+ else
112
+ await writeFile(join(plan.root, path), source);
113
+ }
114
+ throw new Error(`Instalação da stack incompleta. package.json e lockfiles restaurados; módulos baixados podem permanecer para a próxima tentativa. Resolva a causa e repita init. ${error instanceof Error ? error.message : String(error)}`);
115
+ }
116
+ finally {
117
+ await lock.close();
118
+ await rm(lockPath, { force: true });
119
+ }
120
+ }
121
+ async function restoreNpmRootSpecs(root, manifest) {
122
+ for (const name of ["package-lock.json", "npm-shrinkwrap.json"]) {
123
+ const path = join(root, name);
124
+ const source = await readOptional(path);
125
+ if (source === null)
126
+ continue;
127
+ const lock = JSON.parse(source);
128
+ const entry = lock.packages?.[""];
129
+ if (!entry)
130
+ continue;
131
+ for (const field of [
132
+ "dependencies",
133
+ "devDependencies",
134
+ "optionalDependencies",
135
+ "peerDependencies",
136
+ ]) {
137
+ if (manifest[field])
138
+ entry[field] = manifest[field];
139
+ else
140
+ delete entry[field];
141
+ }
142
+ await writeFile(path, `${JSON.stringify(lock, null, 2)}\n`);
143
+ }
144
+ }
145
+ async function restorePnpmRootSpecs(root, manifest) {
146
+ const path = join(root, "pnpm-lock.yaml");
147
+ const source = await readOptional(path);
148
+ if (source === null)
149
+ throw new Error("pnpm não produziu lockfile");
150
+ const lock = parse(source);
151
+ const importer = lock?.importers?.["."];
152
+ if (!importer)
153
+ throw new Error("pnpm lockfile sem importer raiz");
154
+ for (const field of ["dependencies", "devDependencies", "optionalDependencies"]) {
155
+ for (const name of Object.keys(importer[field] ?? {})) {
156
+ const original = manifest[field]?.[name];
157
+ if (original === undefined)
158
+ delete importer[field][name];
159
+ else
160
+ importer[field][name].specifier = original;
161
+ }
162
+ }
163
+ await writeFile(path, stringify(lock));
164
+ }
165
+ async function result(plan, manager) {
166
+ return {
167
+ manager,
168
+ packages: await Promise.all(plan.packages.map(async (item) => ({
169
+ name: item.name,
170
+ configured: item.version,
171
+ installed: (await installedVersion(plan.root, item.name)),
172
+ action: item.installed ? "preserved" : "installed",
173
+ }))),
174
+ };
175
+ }
176
+ //# sourceMappingURL=stack-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-install.js","sourceRoot":"","sources":["../../src/services/stack-install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { PackageRunner } from "./stack-package-manager.js";
2
+ export declare const STACK_NODE_VERSION = "22.23.2";
3
+ export declare const STACK_MINIMUM_NODE = "22.19.0";
4
+ export declare function supportsStackNode(version: string): boolean;
5
+ /** Downloads a project-private official Node only when the invoking runtime is too old. */
6
+ export declare function prepareStackNode(root: string, log: (message: string) => void, currentVersion?: string): Promise<string>;
7
+ /** Extract one regular file from an authenticated tarball, never arbitrary filesystem paths. */
8
+ export declare function extractNodeArchive(gzip: Buffer, expectedName: string): Buffer;
9
+ export declare function usingStackNode(binary: string, run?: PackageRunner): PackageRunner;
10
+ /** npm scripts and npx commands pick up this local executable via node_modules/.bin. */
11
+ export declare function exposeStackNode(root: string, binary: string): Promise<void>;
12
+ //# sourceMappingURL=stack-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-node.d.ts","sourceRoot":"","sources":["../../src/services/stack-node.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAMhE,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAC5C,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAW5C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED,2FAA2F;AAC3F,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EAC9B,cAAc,SAAwB,GACrC,OAAO,CAAC,MAAM,CAAC,CA0DjB;AAED,gGAAgG;AAChG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAiB7E;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,GAAG,GAAE,aAAiC,GACrC,aAAa,CAWf;AAED,wFAAwF;AACxF,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BjF"}
@@ -0,0 +1,150 @@
1
+ import { execFile } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import { chmod, copyFile, link, lstat, mkdir, readFile, rename, rm, symlink, writeFile, } from "node:fs/promises";
4
+ import { dirname, join, relative } from "node:path";
5
+ import { promisify } from "node:util";
6
+ import { gunzipSync } from "node:zlib";
7
+ import { runPackageManager } from "./stack-package-manager.js";
8
+ import { assertSafeDestination } from "./transactional-files.js";
9
+ const exec = promisify(execFile);
10
+ // Current patched Node 22 LTS, qualified with this release. The system Node remains untouched.
11
+ export const STACK_NODE_VERSION = "22.23.2";
12
+ export const STACK_MINIMUM_NODE = "22.19.0";
13
+ // Pinned from nodejs.org/dist/v22.23.2/SHASUMS256.txt while qualifying this release.
14
+ const NODE_SHA256 = {
15
+ "darwin-arm64": "61130f394c1630d211dd50aecc4353d379480f36d3ac913cd85dbba1aed585c6",
16
+ "darwin-x64": "58e99022c2ff89395576cc7fd4d98cea24bb68081475d5f88b801ee8729fb026",
17
+ "linux-arm64": "013b59cfd2819703a6f4a14ab891fc46fc2a4e3f5bcd92de3fb4929b43e35b30",
18
+ "linux-x64": "b294a556e639d64338823920e5866c21c02741742d2e1529ee1a225c1ec9252a",
19
+ "win32-arm64": "97cce5301a815d2dce07ac5bfd1e6039eae88185ec1d10ae4f8cb712f1732878",
20
+ "win32-x64": "0d0f5e39f9f3d9587bc19f73eab3c2c9c4903fd02d6dbf9c853dd81b3d95fad4",
21
+ };
22
+ export function supportsStackNode(version) {
23
+ const [major = 0, minor = 0] = version.replace(/^v/, "").split(".").map(Number);
24
+ return major > 22 || (major === 22 && minor >= 19);
25
+ }
26
+ /** Downloads a project-private official Node only when the invoking runtime is too old. */
27
+ export async function prepareStackNode(root, log, currentVersion = process.versions.node) {
28
+ if (supportsStackNode(currentVersion))
29
+ return process.execPath;
30
+ const version = STACK_NODE_VERSION;
31
+ const platform = process.platform;
32
+ const arch = process.arch;
33
+ if (!["win32", "linux", "darwin"].includes(platform) || !["x64", "arm64"].includes(arch))
34
+ throw new Error(`Node ${process.versions.node} incompatível com a stack. Instalação local automática indisponível para ${platform}/${arch}; mínimo ${STACK_MINIMUM_NODE}.`);
35
+ const directory = join(root, ".local/zaip-node", `v${version}-${platform}-${arch}`);
36
+ const archiveRoot = `node-v${version}-${platform}-${arch}`;
37
+ const file = platform === "win32" ? `win-${arch}/node.exe` : `${archiveRoot}.tar.gz`;
38
+ const binary = platform === "win32" ? join(directory, "node.exe") : join(directory, archiveRoot, "bin/node");
39
+ await assertSafeDestination(root, relative(root, binary).replaceAll("\\", "/"));
40
+ const archive = join(directory, "official.tar.gz");
41
+ const expected = NODE_SHA256[`${platform}-${arch}`];
42
+ await assertSafeDestination(root, relative(root, archive).replaceAll("\\", "/"));
43
+ try {
44
+ const source = await readFile(platform === "win32" ? binary : archive);
45
+ if (digest(source) === expected &&
46
+ (platform === "win32" ||
47
+ digest(await readFile(binary)) ===
48
+ digest(extractNodeArchive(source, `${archiveRoot}/bin/node`)))) {
49
+ log(`Node do sistema preservado ${process.versions.node}; Node local ${version} reutilizado para a stack.\n`);
50
+ return binary;
51
+ }
52
+ }
53
+ catch (error) {
54
+ if (error.code !== "ENOENT")
55
+ throw error;
56
+ }
57
+ log(`Node do sistema preservado ${process.versions.node}; preparando Node ${version} somente em .local/zaip-node (mínimo da stack ${STACK_MINIMUM_NODE}).\n`);
58
+ const base = `https://nodejs.org/dist/v${version}/`;
59
+ if (!expected || !/^[a-f0-9]{64}$/.test(expected))
60
+ throw new Error("Checksum oficial do Node não encontrado.");
61
+ const bytes = await download(`${base}${file}`, 150 * 1024 * 1024);
62
+ if (digest(bytes) !== expected)
63
+ throw new Error("Download do Node rejeitado: SHA-256 difere do arquivo oficial.");
64
+ const executable = platform === "win32" ? bytes : extractNodeArchive(bytes, `${archiveRoot}/bin/node`);
65
+ await mkdir(dirname(binary), { recursive: true });
66
+ const temporary = `${binary}.${process.pid}.tmp`;
67
+ await writeFile(temporary, executable, { flag: "wx" });
68
+ await rename(temporary, binary);
69
+ if (platform !== "win32") {
70
+ await chmod(binary, 0o755);
71
+ await writeFile(archive, bytes);
72
+ }
73
+ const observed = (await exec(binary, ["--version"], { timeout: 10_000, windowsHide: true })).stdout.trim();
74
+ if (observed !== `v${version}`)
75
+ throw new Error(`Node local inesperado: ${observed}`);
76
+ return binary;
77
+ }
78
+ /** Extract one regular file from an authenticated tarball, never arbitrary filesystem paths. */
79
+ export function extractNodeArchive(gzip, expectedName) {
80
+ const tar = gunzipSync(gzip, { maxOutputLength: 512 * 1024 * 1024 });
81
+ for (let offset = 0; offset + 512 <= tar.length;) {
82
+ const header = tar.subarray(offset, offset + 512);
83
+ const name = header.subarray(0, 100).toString().replace(/\0.*$/, "");
84
+ if (!name)
85
+ break;
86
+ const size = Number.parseInt(header.subarray(124, 136).toString().replace(/\0.*$/, "").trim(), 8);
87
+ if (!Number.isSafeInteger(size) || size < 0 || offset + 512 + size > tar.length)
88
+ throw new Error("Archive Node inválido");
89
+ if (name === expectedName && (header[156] === 0 || header[156] === 48))
90
+ return tar.subarray(offset + 512, offset + 512 + size);
91
+ offset += 512 + Math.ceil(size / 512) * 512;
92
+ }
93
+ throw new Error("Executável Node ausente do archive oficial");
94
+ }
95
+ export function usingStackNode(binary, run = runPackageManager) {
96
+ return (manager, args, root) => run({
97
+ ...manager,
98
+ command: manager.command === process.execPath ? binary : manager.command,
99
+ nodeExecutable: binary,
100
+ }, args, root);
101
+ }
102
+ /** npm scripts and npx commands pick up this local executable via node_modules/.bin. */
103
+ export async function exposeStackNode(root, binary) {
104
+ if (binary === process.execPath)
105
+ return;
106
+ const target = join(root, "node_modules/.bin", process.platform === "win32" ? "node.exe" : "node");
107
+ const existing = await lstat(target).catch((error) => {
108
+ if (error.code === "ENOENT")
109
+ return null;
110
+ throw error;
111
+ });
112
+ if (existing) {
113
+ if (digest(await readFile(target)) === digest(await readFile(binary)))
114
+ return;
115
+ throw new Error("Node local já existente em node_modules/.bin preservado; sua versão conflita com o runtime necessário para a stack.");
116
+ }
117
+ await assertSafeDestination(root, relative(root, target).replaceAll("\\", "/"));
118
+ await mkdir(dirname(target), { recursive: true });
119
+ if (process.platform !== "win32")
120
+ await symlink(relative(dirname(target), binary), target);
121
+ else {
122
+ try {
123
+ await link(binary, target);
124
+ }
125
+ catch (error) {
126
+ if (error.code === "EXDEV")
127
+ await copyFile(binary, target);
128
+ else
129
+ throw error;
130
+ }
131
+ }
132
+ }
133
+ async function download(url, limit) {
134
+ const response = await fetch(url, { signal: AbortSignal.timeout(120_000), redirect: "error" });
135
+ if (!response.ok || !response.body)
136
+ throw new Error(`Download oficial do Node falhou: HTTP ${response.status}`);
137
+ const chunks = [];
138
+ let total = 0;
139
+ for await (const chunk of response.body) {
140
+ total += chunk.length;
141
+ if (total > limit)
142
+ throw new Error("Download do Node excedeu o tamanho esperado.");
143
+ chunks.push(chunk);
144
+ }
145
+ return Buffer.concat(chunks);
146
+ }
147
+ function digest(bytes) {
148
+ return createHash("sha256").update(bytes).digest("hex");
149
+ }
150
+ //# sourceMappingURL=stack-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-node.js","sourceRoot":"","sources":["../../src/services/stack-node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type ProjectPackage } from "./stack-plan.js";
2
+ export interface PackageManager {
3
+ nodeExecutable?: string;
4
+ name: "npm" | "pnpm" | "yarn";
5
+ command: string;
6
+ prefix: string[];
7
+ }
8
+ export type PackageRunner = (manager: PackageManager, args: string[], root: string) => Promise<string>;
9
+ export declare function selectPackageManager(root: string, manifest: ProjectPackage): Promise<PackageManager>;
10
+ export declare const runPackageManager: PackageRunner;
11
+ export declare function installArguments(manager: PackageManager, root: string, run: PackageRunner): Promise<string[]>;
12
+ //# sourceMappingURL=stack-package-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-package-manager.d.ts","sourceRoot":"","sources":["../../src/services/stack-package-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAAgB,MAAM,iBAAiB,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AACD,MAAM,MAAM,aAAa,GAAG,CAC1B,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,MAAM,KACT,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,cAAc,CAAC,CAkEzB;AAiCD,eAAO,MAAM,iBAAiB,EAAE,aAsD5B,CAAC;AAQL,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CA+BnB"}