@zaip-ai/cli 1.3.8 → 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.
- package/README.md +58 -3
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +17 -6
- package/dist/commands/init.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/services/adapters.js +4 -4
- package/dist/services/adapters.js.map +1 -1
- package/dist/services/codex-config-template.d.ts +2 -2
- package/dist/services/codex-config-template.d.ts.map +1 -1
- package/dist/services/codex-config-template.js +3 -3
- package/dist/services/codex-config-template.js.map +1 -1
- package/dist/services/codex-rules.d.ts +1 -1
- package/dist/services/codex-rules.d.ts.map +1 -1
- package/dist/services/codex-rules.js +9 -24
- package/dist/services/codex-rules.js.map +1 -1
- package/dist/services/delivery-git-preflight.d.ts +23 -0
- package/dist/services/delivery-git-preflight.d.ts.map +1 -0
- package/dist/services/delivery-git-preflight.js +69 -0
- package/dist/services/delivery-git-preflight.js.map +1 -0
- package/dist/services/doctor.d.ts.map +1 -1
- package/dist/services/doctor.js +13 -1
- package/dist/services/doctor.js.map +1 -1
- package/dist/services/install-agents-template.d.ts.map +1 -1
- package/dist/services/install-agents-template.js +22 -28
- package/dist/services/install-agents-template.js.map +1 -1
- package/dist/services/install-profile.d.ts +8 -0
- package/dist/services/install-profile.d.ts.map +1 -0
- package/dist/services/install-profile.js +56 -0
- package/dist/services/install-profile.js.map +1 -0
- package/dist/services/logger.d.ts.map +1 -1
- package/dist/services/logger.js +6 -5
- package/dist/services/logger.js.map +1 -1
- package/dist/services/stack-git.d.ts +9 -0
- package/dist/services/stack-git.d.ts.map +1 -0
- package/dist/services/stack-git.js +188 -0
- package/dist/services/stack-git.js.map +1 -0
- package/dist/services/stack-plan.d.ts +3 -1
- package/dist/services/stack-plan.d.ts.map +1 -1
- package/dist/services/stack-plan.js +15 -1
- package/dist/services/stack-plan.js.map +1 -1
- package/dist/services/stack-terraform.d.ts +13 -0
- package/dist/services/stack-terraform.d.ts.map +1 -0
- package/dist/services/stack-terraform.js +274 -0
- package/dist/services/stack-terraform.js.map +1 -0
- package/dist/services/template-manifest.d.ts.map +1 -1
- package/dist/services/template-manifest.js +14 -1
- package/dist/services/template-manifest.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/.agents/.env.example +34 -0
- package/templates/{README.md → .agents/README.md} +124 -60
- package/templates/.agents/config/agents/catalog.yaml +23 -23
- package/templates/.agents/config/clients/codex/agents/zaip-agent-analyst.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-auditor.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-backend.toml +5 -4
- package/templates/.agents/config/clients/codex/agents/zaip-agent-brand-strategist.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-builder.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-cloud-engineer.toml +10 -7
- package/templates/.agents/config/clients/codex/agents/zaip-agent-data-analyst.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-designer.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-finalizer.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-frontend.toml +5 -4
- package/templates/.agents/config/clients/codex/agents/zaip-agent-general-operations.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-governance-compliance.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-growth-strategist.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-integrator.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-marketing-analyst.toml +5 -4
- package/templates/.agents/config/clients/codex/agents/zaip-agent-orchestrator.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-refactoring-specialist.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-reviewer.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-sales-specialist.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-security-auditor.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-task-executor.toml +1 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-website-developer.toml +5 -4
- package/templates/.agents/config/clients/codex/agents/zaip-agent-writer.toml +1 -0
- package/templates/.agents/config/pricing/models.json +25 -1
- package/templates/.agents/config/project.yaml +2 -0
- package/templates/.agents/dashboard/.zaip-managed.json +200 -88
- package/templates/.agents/dashboard/DATA-DICTIONARY.md +1 -1
- package/templates/.agents/dashboard/README.md +58 -19
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{CostCalculationGuidePage-DwVZOmMV.js → CostCalculationGuidePage-snUCQYTC.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-VcLx9iOO.js → DashboardHelpDialog-oZVlf-l5.js} +72 -8
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{PricingSettingsDialog-CyjMXkm8.js → PricingSettingsDialog-BPtVUGgs.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-3Awyaovx.js +3 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{TraceabilityWorkspace-DFZwIXSC.js → TraceabilityWorkspace-BYjVOHI_.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-DbaLbU2q.js +68 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{icons-vendor-DXBOtWNI.js → icons-vendor-TPUT2IUt.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-Cmlx8OYH.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-ZJFXmK7m.js +2 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{react-vendor-DaNXQPyk.js → react-vendor-Ct48XHGL.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{traceability-I4AKqVDX.js → traceability-BDe4_Ubl.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/index.html +6 -6
- package/templates/.agents/dashboard/apps/frontend/src/App.tsx +73 -67
- package/templates/.agents/dashboard/apps/frontend/src/AppLoadingBoundary.tsx +35 -7
- package/templates/.agents/dashboard/apps/frontend/src/AppWorkBoard.ts +55 -0
- package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +11 -0
- package/templates/.agents/dashboard/apps/frontend/src/app-loading-boundary.css +98 -0
- package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +5 -5
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api-reconciliation.ts +33 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.test.ts +75 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +7 -8
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-model.ts +14 -2
- package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +35 -0
- package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +78 -2
- package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.test.ts +28 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.ts +8 -5
- package/templates/.agents/dashboard/apps/frontend/src/use-app-effects.ts +180 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/contracts.ts +7 -4
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorContent.tsx +13 -7
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +14 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTableDisplay.ts +211 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +152 -157
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.tsx +155 -142
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/InvocationManifestQuery.test.ts +145 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.ts +7 -5
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-compact-cost-page.ts +4 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.ts +4 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-run-page.ts +4 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +4 -4
- package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.test.ts +79 -1
- package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.tsx +105 -11
- package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +482 -332
- package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +430 -285
- package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +14 -2
- package/templates/.agents/dashboard/packages/local-runtime/scripts/rebuild-sqlite-read-model.mjs +6 -26
- package/templates/.agents/dashboard/packages/local-runtime/scripts/validate-sqlite-read-model.mjs +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/scripts/verify-persistent-launch.mjs +268 -0
- package/templates/.agents/dashboard/packages/local-runtime/server.mjs +482 -332
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +90 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +112 -22
- package/templates/.agents/dashboard/packages/local-runtime/src/server-agent-assets.ts +39 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-browser-lease.ts +33 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-reconciliation-refresh.test.ts +148 -11
- package/templates/.agents/dashboard/packages/local-runtime/src/server-reconciliation-result.test.ts +68 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.test.ts +19 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.ts +39 -43
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-revision.test.ts +42 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-revision.ts +26 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.ts +34 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-startup.ts +30 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.test.ts +89 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.ts +88 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-workspace.ts +68 -7
- package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +11 -5
- package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +129 -99
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-agent-productivity.test.ts +111 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-agent-productivity.ts +140 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-agent-page.test.ts +127 -4
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-agent-page.ts +145 -5
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-aggregates.ts +156 -23
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-group-projection.ts +18 -9
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-invocation-projection.ts +52 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-first-fold-persistence.ts +35 -13
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-force-canonical.test.ts +56 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-incremental-cache.test.ts +29 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-incremental-cache.ts +136 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-incremental-refresh.test.ts +251 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-operations-projection.ts +22 -7
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-cache.test-support.ts +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-canonical-parsing.ts +42 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-canonical.ts +793 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-multi-provider-duration.test.ts +270 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-multi-provider-fixture.ts +3 -2
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-multi-provider.test.ts +18 -4
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-source-fingerprint.test.ts +87 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-source-fingerprint.ts +105 -16
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +131 -59
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.ts +1000 -1115
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-snapshot-cache.ts +13 -92
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-launch-claims.test.mjs +79 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-launch-page.mjs +27 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-lifecycle.mjs +6 -6
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-prerequisites.mjs +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-refresh.mjs +2 -10
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-server.mjs +142 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +231 -239
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +18 -29
- package/templates/.agents/dashboard/packages/windows-launcher/Program.cs +6 -0
- package/templates/.agents/dashboard/zaip-dashboard-windows.exe +0 -0
- package/templates/.agents/requirements/autonomous-assurance.md +1 -1
- package/templates/.agents/requirements/cloud-hostinger-autonomy.md +47 -0
- package/templates/.agents/requirements/comparative-audit.md +1 -1
- package/templates/.agents/requirements/context-engine.md +1 -1
- package/templates/.agents/requirements/cost-observability.md +1 -1
- package/templates/.agents/requirements/dashboard-launch.md +2 -2
- package/templates/.agents/requirements/data-export.md +1 -1
- package/templates/.agents/requirements/design-system.md +1 -1
- package/templates/.agents/requirements/execution-engine.md +1 -1
- package/templates/.agents/requirements/kanban-dashboard.md +1 -1
- package/templates/.agents/requirements/model-orchestration.md +1 -1
- package/templates/.agents/requirements/public-distribution.md +1 -1
- package/templates/.agents/requirements/software-architecture.md +1 -1
- package/templates/.agents/requirements/strategic-improvements.md +1 -1
- package/templates/.agents/requirements/work-lifecycle.md +1 -1
- package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
- package/templates/.agents/rules/autonomy-decision.md +1 -1
- package/templates/.agents/rules/cloud-hostinger-autonomy.md +21 -0
- package/templates/.agents/rules/core.md +5 -4
- package/templates/.agents/rules/local-sqlite-storage.md +18 -0
- package/templates/.agents/rules/meta-mcp.md +21 -0
- package/templates/.agents/rules/workflow.md +1 -0
- package/templates/.agents/runtime/bin/zaip.mjs +305 -137
- package/templates/.agents/runtime/checksums.sha256 +2 -2
- package/templates/.agents/runtime/provenance.json +2 -2
- package/templates/.agents/skills/zaip-skill-api-to-mcp/SKILL.md +4 -0
- package/templates/.agents/skills/zaip-skill-brand-governance/SKILL.md +25 -9
- package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-framework.md +2 -2
- package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-standards.md +2 -2
- package/templates/.agents/skills/zaip-skill-change/references/observable-evidence.md +15 -0
- package/templates/.agents/skills/zaip-skill-dashboard-sqlite/SKILL.md +13 -5
- package/templates/.agents/skills/zaip-skill-data-analyst/SKILL.md +10 -5
- package/templates/.agents/skills/zaip-skill-execution/SKILL.md +5 -4
- package/templates/.agents/skills/zaip-skill-frontend-launcher/SKILL.md +4 -3
- package/templates/.agents/skills/zaip-skill-frontend-launcher/references/launcher-contract.md +5 -3
- package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +5 -5
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs +78 -13
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.test.mjs +59 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/yaml-parser.mjs +157 -0
- package/templates/.agents/skills/zaip-skill-growth-strategy-revops/SKILL.md +11 -6
- package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/SKILL.md +17 -0
- package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/agents/openai.yaml +7 -0
- package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/autonomous-cloud-inputs.example.json +41 -0
- package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/autonomous-runner.md +84 -0
- package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/operational-contract.md +19 -0
- package/templates/.agents/skills/zaip-skill-local-credentials/SKILL.md +43 -0
- package/templates/.agents/skills/zaip-skill-local-credentials/agents/openai.yaml +6 -0
- package/templates/.agents/skills/zaip-skill-local-credentials/references/dotenv-resolution.md +47 -0
- package/templates/.agents/skills/zaip-skill-marketing/SKILL.md +8 -3
- package/templates/.agents/skills/zaip-skill-meta-ads/SKILL.md +16 -0
- package/templates/.agents/skills/zaip-skill-meta-ads/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-meta-ads/references/setup.md +3 -0
- package/templates/.agents/skills/zaip-skill-meta-ads-setup/SKILL.md +24 -0
- package/templates/.agents/skills/zaip-skill-meta-ads-setup/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-meta-ads-setup/references/diagnostics.md +13 -0
- package/templates/.agents/skills/zaip-skill-meta-ads-setup/references/official-sources.md +10 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-api-health/SKILL.md +12 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-api-health/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-api-health/references/LICENSE +21 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-api-health/references/upstream.md +77 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-api-integration/SKILL.md +12 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-api-integration/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-api-integration/references/LICENSE +21 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-api-integration/references/upstream.md +126 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-app-health-check/SKILL.md +12 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-app-health-check/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-app-health-check/references/LICENSE +21 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-app-health-check/references/upstream.md +67 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-app-review-prep/SKILL.md +12 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-app-review-prep/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-app-review-prep/references/LICENSE +21 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-app-review-prep/references/upstream.md +69 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-compliance-check/SKILL.md +12 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-compliance-check/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-compliance-check/references/LICENSE +21 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-compliance-check/references/upstream.md +79 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-debug-access-token/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-debug-access-token/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-debug-access-token/references/LICENSE +21 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-debug-access-token/references/upstream.md +144 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-debug-webhooks/SKILL.md +12 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-debug-webhooks/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-debug-webhooks/references/LICENSE +21 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-debug-webhooks/references/upstream.md +83 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-search-docs/SKILL.md +10 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-search-docs/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-search-docs/references/LICENSE +21 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-search-docs/references/setup.md +11 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-search-docs/references/upstream.md +55 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-webhook-setup/SKILL.md +12 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-webhook-setup/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-webhook-setup/references/LICENSE +21 -0
- package/templates/.agents/skills/zaip-skill-meta-devtools-webhook-setup/references/upstream.md +56 -0
- package/templates/.agents/skills/zaip-skill-sales-methodology/SKILL.md +12 -7
- package/templates/.agents/skills/zaip-skill-sqlite-read-model/SKILL.md +11 -4
- package/templates/.agents/skills/zaip-skill-tool-setup/SKILL.md +6 -4
- package/templates/.agents/skills/zaip-skill-tool-setup/references/codex-config.md +4 -2
- package/templates/.agents/skills/zaip-skill-tool-setup/references/secrets.md +1 -0
- package/templates/.agents/tools/catalog.yaml +6 -0
- package/templates/.agents/tools/cloud-runner-dns.mjs +28 -0
- package/templates/.agents/tools/cloud-runner-terraform.mjs +212 -0
- package/templates/.agents/tools/cloud-runner.integration.test.mjs +239 -0
- package/templates/.agents/tools/cloud-runner.mjs +786 -0
- package/templates/.agents/tools/cloud-runner.test.mjs +534 -0
- package/templates/.agents/tools/cloud-terraform-plan-policy.mjs +262 -0
- package/templates/.agents/tools/mcp/development/meta-devtools/README.md +14 -0
- package/templates/.agents/tools/mcp/development/meta-devtools/manifest.yaml +28 -0
- package/templates/.agents/tools/mcp/infra/cloudflare/manifest.yaml +2 -3
- package/templates/.agents/tools/mcp/infra/hostinger/manifest.yaml +1 -3
- package/templates/.agents/tools/mcp/marketing/meta-ads/README.md +15 -13
- package/templates/.agents/tools/mcp/marketing/meta-ads/manifest.yaml +15 -10
- package/templates/.agents/tools/profiles/development.yaml +3 -0
- package/templates/infra/terraform/.terraform.lock.hcl +42 -0
- package/templates/infra/terraform/README.md +31 -0
- package/templates/infra/terraform/backend.tf.json +13 -0
- package/templates/infra/terraform/deployment-inputs.example.yaml +22 -0
- package/templates/infra/terraform/fixtures/approved-targets.json +32 -0
- package/templates/infra/terraform/fixtures/plan-approved.json +67 -0
- package/templates/infra/terraform/main.tf +77 -0
- package/templates/infra/terraform/outputs.tf +20 -0
- package/templates/infra/terraform/terraform.tfvars.example +26 -0
- package/templates/infra/terraform/variables.tf +91 -0
- package/templates/infra/terraform/versions.tf +18 -0
- package/templates/scripts/validate-cloud-hostinger-contract.mjs +89 -0
- package/templates/scripts/validate-cloud-terraform-plan.mjs +1 -0
- package/templates/template-manifest.json +599 -167
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-BwnJpl02.js +0 -3
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-C09KmlSw.js +0 -68
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-Dyo_wpL4.js +0 -2
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-hPPfVGQv.css +0 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-stale-seed.ts +0 -50
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
b146bd0c7c60b1ab43c4f71e0b1d2262c6df6da6f7053a0425f834ccb77a6b48 LICENSE
|
|
2
2
|
bc02cba77e8d51e5c580f43668863dc868eda66f1ff663bfaa49fcf3ca16320e THIRD_PARTY_NOTICES.md
|
|
3
3
|
64d23f858ef51b0f996e4966d4e27c0371b437e2d2787890b1f7ad22d4ec5663 VERSION
|
|
4
|
-
|
|
4
|
+
09e8f6c1c5de52685f76c99301b4af83b78e3cbd30c4ab5495d1c8a33af22693 bin/zaip.mjs
|
|
5
5
|
bed6ab1fda844209edc628c2a675021ad6acb9a2f7ecb7ae017b5a916712da24 manifest.json
|
|
6
6
|
7f89219d7c567c82a51679ad136d84364bded7ac659492537e125d33b1d58a7a migrations/001-layout-v1.json
|
|
7
7
|
5f8c48b286d0b44d8fbb57a9a5d009a8a500439aa3148d750b8f193f72995c9f migrations/002-layout-v2.json
|
|
8
8
|
182a587dca8080f732cb387dbdeff4c12034a4a116efe35b4cd3c1c0a21ad10b pnpm-lock.sha256
|
|
9
|
-
|
|
9
|
+
82f3eadf48498933aa6ccb00432070ede8129f983c40a9da697c6ffaf9a76a20 provenance.json
|
|
10
10
|
4669f375688be830958d45269bb0f8dfe65daf8db677f72728c15dc89d42d820 sbom.cdx.json
|
|
11
11
|
b3ffedf9e146be802a15b4009f33e031dec3071ca1525e12c67606fd964a3067 schemas/contracts.schema.json
|
|
@@ -6,6 +6,6 @@
|
|
|
6
6
|
"source_origin": "zaip-aios:local-build",
|
|
7
7
|
"lockfile_sha256": "382ebb27a2a951eb61280171c27116233762370d9093ab516caef216475ba4fc",
|
|
8
8
|
"sbom_sha256": "4669f375688be830958d45269bb0f8dfe65daf8db677f72728c15dc89d42d820",
|
|
9
|
-
"runtime_sha256": "
|
|
10
|
-
"statement_sha256": "
|
|
9
|
+
"runtime_sha256": "0ea51822ffd133866110c2c37ff644952ce62c4899b53ae5827ad59406a57e24",
|
|
10
|
+
"statement_sha256": "d2342722cd5b397a93cb64136e808d35e5300f1d5ceb6cf90e3e22c0565f9a53"
|
|
11
11
|
}
|
|
@@ -16,4 +16,8 @@ description: Design, scaffold, secure, test, and register a ZAIP-maintained MCP
|
|
|
16
16
|
9. Implemente testes offline com fixtures sanitizadas, contratos de schema, erros, autorizacao e resistencia a prompt injection em dados remotos.
|
|
17
17
|
10. Registre no catálogo como `disabled`; use `$zaip-skill-tool-setup` para configurar o Codex e fazer smoke test read-only.
|
|
18
18
|
|
|
19
|
+
## Contrato mínimo Codex MCP
|
|
20
|
+
|
|
21
|
+
Todo servidor MCP criado do zero deve concluir o handshake `initialize` com instruções claras e capacidades declaradas antes de expor ferramentas. Implemente `tools/list` com nomes estáveis, descrição e schemas de entrada fechados; `tools/call` deve validar a entrada, aplicar a política de aprovação e responder em formato MCP, inclusive em erros. Para stdio, escreva exclusivamente mensagens JSON-RPC no stdout e envie logs, diagnóstico e progresso para stderr. Nunca escreva banners, texto livre ou segredos no stdout.
|
|
22
|
+
|
|
19
23
|
Leia `references/security-contract.md` antes de implementar e `references/server-layout.md` ao criar arquivos.
|
|
@@ -5,18 +5,34 @@ description: Define and govern an evidence-backed brand platform, Brandbook, arc
|
|
|
5
5
|
|
|
6
6
|
# Governar a marca
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## Artefatos e localização canônica
|
|
9
9
|
|
|
10
|
-
Salve
|
|
10
|
+
Salve plataformas de marca, Brandbooks, decisões de identidade, arquétipos, escalas de diferencial semântico e materiais de governança em `.agents/branding/`. Use `.agents/branding/archive/` somente para versões substituídas. Não crie esses artefatos em `docs/`, na raiz do repositório ou em diretórios de outra disciplina.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Há dois artefatos distintos:
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
- A plataforma de marca progressiva é a base estratégica em Markdown, normalmente `.agents/branding/brand-platform.md`. Ela registra a descoberta e as decisões de propósito, posicionamento, arquitetura e identidade à medida que amadurecem. Não exige DOCX e não deve ser apresentada como um Brandbook completo.
|
|
15
|
+
- O Brandbook consolidado é o artefato oficial, completo e versionado. Sua fonte canônica é `.agents/branding/brandbook.md` e a versão Word correspondente é `.agents/branding/brandbook.docx`. Todo Brandbook salvo como `.docx` deve ter, na mesma pasta e com o mesmo nome-base, uma fonte `.md` estrategicamente equivalente; mantenha os dois sincronizados a cada revisão.
|
|
16
|
+
|
|
17
|
+
## Descoberta antes da consolidação
|
|
18
|
+
|
|
19
|
+
1. Antes de criar um Brandbook do zero, faça perguntas críticas sobre objetivo, ICP e públicos, contexto de negócio, oferta, proposta de valor, diferenciais, arquitetura de marca e, quando relevante, a relação entre marca-mãe, produtos e portfólio, autoridade de aprovação e fontes disponíveis. Faça no máximo cinco perguntas por turno e no máximo três turnos de descoberta; espere as respostas sem preencher decisões abertas. Ao encerrar esse limite, registre suposições delegáveis como hipóteses, nunca como aprovação ou fato.
|
|
20
|
+
2. Construa primeiro a plataforma de marca progressiva: cultura, propósito, posicionamento, proposta de valor, promessa, diferenciais, atributos, personalidade, arquitetura e pontos de contato. Classifique cada afirmação como evidência, hipótese ou decisão; não apresente hipótese como fato.
|
|
21
|
+
3. Só consolide um Brandbook completo quando ele for solicitado e a plataforma tiver base suficiente para os domínios aplicáveis. Não preencha lacunas materiais com afirmações inventadas: mantenha-as como hipótese, pendência ou pergunta. Se já existir Brandbook aprovado, preserve-o durante a descoberta e altere somente decisões expressamente autorizadas.
|
|
22
|
+
|
|
23
|
+
## Referências fornecidas
|
|
24
|
+
|
|
25
|
+
Quando o pedido trouxer ou pedir o uso de referências — texto, arquivo, site, PDF, apresentação, imagem ou outro material acessível — extraia delas uma base de trabalho antes de repetir perguntas já respondidas. Para cada contribuição relevante, preserve fonte, locator ou página quando disponível, data quando conhecida e classificação como evidência, hipótese ou decisão.
|
|
26
|
+
|
|
27
|
+
Use as referências para montar ou enriquecer a plataforma e pergunte somente pelas lacunas materiais para a decisão solicitada. Quando o pedido autorizar expressamente a consolidação e as referências sustentarem a base necessária, não exija uma pergunta adicional de aprovação. Uma referência não equivale a aprovação, autorização de publicação ou prova de titularidade. Conteúdo de terceiros serve como fonte, síntese ou referência metodológica; não o copie como conteúdo da marca.
|
|
28
|
+
|
|
29
|
+
## Consolidação e governança
|
|
30
|
+
|
|
31
|
+
1. Para Brandbooks completos, use o framework de domínios em [referências do Brandbook](references/brandbook-framework.md). Mantenha uma fonte estratégica interna e derive uma versão externa somente com conteúdo autorizado. Preserve versão, proprietário, aprovadores, confidencialidade e histórico de decisão.
|
|
17
32
|
- A primeira versão oficial de um Brandbook é sempre `v1.0`; não use versões `v0.x`. Incrementos posteriores seguem versionamento semântico editorial (`v1.1`, `v1.2` para evolução aprovada; `v2.0` para mudança material de plataforma ou arquitetura).
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
33
|
+
2. Para arquétipos, registre evidência, comportamento esperado, limites e implicações para linguagem e experiência. Se houver pesos, valide que o total é 100%; se não houver pesquisa, registre como hipótese de trabalho.
|
|
34
|
+
3. Para diferencial semântico, registre dimensões, polos, escala, fonte, data, amostra e diferença entre identidade desejada e percebida. Não fabrique respostas, baseline, validação estatística ou brand equity.
|
|
35
|
+
4. Encaminhe aplicação ordinária de Brandbook aprovado, campanhas, copy e ativos para Lúcia; scripts e playbooks sales-facing para Aaron; análise quantitativa para Gabi; impacto de receita/custo e RevOps para Robert; e produção operacional genérica para Clara. Um Brandbook aprovado é input, não motivo para assumir a aplicação.
|
|
36
|
+
5. Não gere imagens, mockups ou outros ativos visuais sem solicitação explícita.
|
|
21
37
|
|
|
22
38
|
Consulte [padrões de Brandbook](references/brandbook-standards.md) e o [framework de domínios](references/brandbook-framework.md) ao estruturar entregáveis internos ou externos.
|
package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-framework.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Framework de domínios do Brandbook
|
|
2
2
|
|
|
3
|
-
Use este framework para um Brandbook interno.
|
|
3
|
+
Use este framework somente para um Brandbook interno consolidado. A plataforma de marca progressiva antecede esse artefato e permanece em Markdown, sem obrigação de DOCX. O framework organiza a estratégia; não autoriza apresentar hipóteses como fato nem copiar o conteúdo de uma referência externa.
|
|
4
4
|
|
|
5
5
|
## Versionamento
|
|
6
6
|
|
|
@@ -8,7 +8,7 @@ Inicie todo Brandbook aprovado em `v1.0`. Use `v1.x` para complementos ou revis
|
|
|
8
8
|
|
|
9
9
|
## Formatos canônicos
|
|
10
10
|
|
|
11
|
-
Para cada Brandbook, mantenha obrigatoriamente uma fonte estratégica em Markdown e uma versão Word com o mesmo nome-base na pasta `.agents/branding/`; por exemplo, `Brandbook v1.0.md` e `Brandbook v1.0.docx`. Atualize ambos na mesma alteração. O Markdown é a fonte de revisão Git-native; o DOCX é a versão de leitura e apresentação.
|
|
11
|
+
Para cada Brandbook, mantenha obrigatoriamente uma fonte estratégica em Markdown e uma versão Word com o mesmo nome-base na pasta `.agents/branding/`; por exemplo, `Brandbook v1.0.md` e `Brandbook v1.0.docx`. Atualize ambos na mesma alteração. O Markdown é a fonte de revisão Git-native; o DOCX é a versão de leitura e apresentação. Não aplique essa exigência à plataforma de marca progressiva.
|
|
12
12
|
|
|
13
13
|
## Fundação
|
|
14
14
|
|
package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-standards.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Padrões de Brandbook e governança
|
|
2
2
|
|
|
3
|
-
Use este roteiro quando o pedido exigir a plataforma ou o Brandbook da marca.
|
|
3
|
+
Use este roteiro quando o pedido exigir a plataforma ou o Brandbook da marca. Comece pelo diagnóstico e pela plataforma de marca progressiva; ela não é um Brandbook completo e não exige versão Word. Um Brandbook consolidado só é produzido quando solicitado e depois de haver base estratégica suficiente ou referências que a sustentem.
|
|
4
4
|
|
|
5
5
|
## Fonte estratégica interna
|
|
6
6
|
|
|
@@ -8,7 +8,7 @@ Registre os treze domínios: cultura da empresa e da marca; posicionamento e pla
|
|
|
8
8
|
|
|
9
9
|
O Brandbook também registra controle do documento; história; mercado; público e personas; promessa e diferenciais; DNA, atributos e personalidade; tom de voz; arquitetura; identidade verbal e visual; evidências e decisões.
|
|
10
10
|
|
|
11
|
-
Cada decisão material deve informar proprietário, aprovador, versão, data, evidência e classificação de confidencialidade. Conteúdo proprietário de terceiros serve como referência metodológica, nunca como conteúdo reutilizável.
|
|
11
|
+
Cada decisão material deve informar proprietário, aprovador, versão, data, evidência e classificação de confidencialidade. Referências fornecidas podem sustentar a plataforma quando forem extraídas com fonte e locator; elas não constituem aprovação nem autorização de publicação. Conteúdo proprietário de terceiros serve como referência metodológica, nunca como conteúdo reutilizável.
|
|
12
12
|
|
|
13
13
|
## Versão externa
|
|
14
14
|
|
|
@@ -74,6 +74,21 @@ zaip evidence record --id EVD-CENARIO --task TASK-ID --summary "alcance comprova
|
|
|
74
74
|
|
|
75
75
|
O JSON usa `schema_version: 1`, `id`, `task_id`, `change_id`, `execution_id`, `run_id`, `acceptance_ids`, `proof_kind`, `state`, `scenario`, `expected`, `observed`, `observed_at`, `examiner_id`, `commit_sha`, `candidate_version`, `environment`, `visual`, `correlation_ids`, `locators`, `limitations`, `not_applicable_reason`, `pending_reason`, `dependency`, `resume_plan` e `attempts`. Consulte o schema e os exemplos testados em `packages/specs/src/assurance/artifacts.ts` e `assurance-contract.test.ts`; não invente campos V2. A versão candidata identifica o artefato efetivamente observado; o SHA Git continua sendo o vínculo exigido pelo assurance.
|
|
76
76
|
|
|
77
|
+
## Preservar a captura local antes de referenciá-la
|
|
78
|
+
|
|
79
|
+
Quando uma captura real selecionada já foi examinada, preserve o arquivo temporário antes de usar seu locator na observação. O fluxo local copia exclusivamente uma imagem regular `.png`, `.jpg`, `.jpeg` ou `.webp`, sem seguir symlinks, para um caminho ignorado pelo Git e protegido contra substituição:
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
zaip evidence screenshot preserve --source ABSOLUTE_IMAGE --change CHG-ID --task TASK-ID --run RUN-ID --scenario rota-ou-cenario --state estado-observado --examined-by AGENT-OU-PESSOA --observed-at ISO-8601 --json
|
|
83
|
+
zaip evidence screenshot verify --evidence .local/evidences/c-HASH/t-HASH/r-HASH/rota-ou-cenario--estado-observado.png --json
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
O resultado fornece locators relativos em `.local/evidences/c-<hash>/t-<hash>/r-<hash>/`, mantendo os IDs completos CHG/TASK/RUN/EXEC somente no sidecar de cada extensão (`.png.evidence.json`, por exemplo), junto ao SHA-256, bytes, examinador e horário observado. Os nomes de cenário e estado são slugs minúsculos Windows-safe de até 32 caracteres; o destino completo tem limite de 240 caracteres. Um destino existente falha e nunca é sobrescrito. Quando ausente, o comando cria somente o marcador `.local/.gitignore` com `*` e `!.gitignore`; se ele já existir, exige exatamente esse conteúdo e não o reescreve. A fonte pode permanecer temporária ou ser descartada somente depois da preservação e da verificação bem-sucedida.
|
|
87
|
+
|
|
88
|
+
O marcador existente aceita finais de linha LF ou CRLF, sem reescrita. `.local/evidences/` é histórico local persistente: não deve participar da limpeza de temporários ou caches. Capturas exploratórias continuam em `.temp` ou no temporário da ferramenta; somente as selecionadas e examinadas são preservadas. As imagens não acompanham clones do Git e precisam de backup local independente quando sua retenção for necessária.
|
|
89
|
+
|
|
90
|
+
Esse comando não abre uma UI, não certifica a origem da imagem, não examina pixels e não substitui `validation observe`, Validation ou Evidence. Registre URL, viewport, versão carregada, expectativa, resultado e limitações na observação; indique somente o locator preservado. Screenshot e hash sozinhos continuam insuficientes para provar comportamento, integração ou aprovação.
|
|
91
|
+
|
|
77
92
|
`environment` descreve classe, identificador e versão. Estado `confirmed` exige versões observadas do candidato e do ambiente; sem elas, registre limitação/pendência, não um valor presumido. Integração confirmada exige `correlation_ids` do cenário; API ou persistência isoladas não exigem correlação artificial. Prova visual confirmada também exige `visual.url`, `viewport` no formato `1366x768`, `captured_at`, `loaded_version` igual a `candidate_version` e `examination`. Use URL base sem credenciais, query ou fragmento; registre filtros e estado relevantes no cenário sanitizado, nunca tokens de acesso. Preencha indisponibilidade com `null` nos campos permitidos, sem atribuir uma observação inexistente a produção.
|
|
78
93
|
|
|
79
94
|
`validation record` também admite `failed` e `not_applicable` (este exige `--reason`); esses registros não alimentam Evidence aprovada. Informe `--executed-at` e `--asserted-outcome` nas novas entregas. A omissão desses campos conserva o comportamento legado e não demonstra que a CLI executou um teste naquele horário. Pendência de ferramenta usa `validation observe`, não `failed` de produto.
|
|
@@ -3,12 +3,18 @@ name: zaip-skill-dashboard-sqlite
|
|
|
3
3
|
description: Rebuild and open the isolated SQLite dashboard comparison runtime.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Dashboard SQLite
|
|
6
|
+
# Dashboard SQLite persistente
|
|
7
7
|
|
|
8
|
-
Use esta skill para o dashboard SQLite em `.agents/dashboard`.
|
|
9
|
-
|
|
8
|
+
Use esta skill para o dashboard SQLite em `.agents/dashboard`. `.local/sqlite/` é o diretório
|
|
9
|
+
central por workspace para bancos SQLite gerenciados localmente; vários nomes estáveis podem ser
|
|
10
|
+
legítimos conforme seu propósito. O Dashboard usa exatamente
|
|
11
|
+
`.local/sqlite/zaip-aios-dashboard.sqlite`. Nunca crie cópias do Dashboard por porta, PID, hash
|
|
12
|
+
ou geração. WAL, SHM e JOURNAL são auxiliares normais do banco aberto. Fixtures descartáveis ficam
|
|
13
|
+
em `.local/sqlite/tests/<fixture>/` com limpeza automática. Workspaces isolados usam sua própria
|
|
14
|
+
`.local/sqlite/`; bancos internos de ferramentas externas seguem o armazenamento dessas ferramentas.
|
|
10
15
|
|
|
11
|
-
1.
|
|
16
|
+
1. Prefira abrir o launcher: ele usa o banco existente e sincroniza os canônicos em segundo plano.
|
|
17
|
+
Para sincronização manual sem outro writer, execute `node .agents/dashboard/packages/local-runtime/scripts/rebuild-sqlite-read-model.mjs`.
|
|
12
18
|
2. Para regenerar os artefatos sem depender dos globs do workspace principal, execute
|
|
13
19
|
`node .agents/dashboard/packages/local-runtime/scripts/build-sqlite-dashboard.mjs`.
|
|
14
20
|
3. Verifique a paridade de all-time/intervalos, zero conhecido e todo-desconhecido/null com
|
|
@@ -22,4 +28,6 @@ O banco é um read model dos registros e da configuração ZAIP. `daily_aggregat
|
|
|
22
28
|
read model lifecycle diário e alimenta, via SQL, os fatos de primeiro fold de
|
|
23
29
|
`operations?scope=quick` e `cost-monitor?scope=summary` (runs, tokens, custo e cobertura).
|
|
24
30
|
A duração híbrida legada e os detalhes de entidades permanecem no projection/adapter compartilhado
|
|
25
|
-
para preservar semântica.
|
|
31
|
+
para preservar semântica. Comandos suportados pela API gravam nos canônicos e renovam a projeção.
|
|
32
|
+
Valide `snapshot_state: current` após a sincronização, além da integridade do banco. Os auxiliares
|
|
33
|
+
WAL/SHM/JOURNAL são transacionais; não os trate como versões obsoletas nem os apague com banco aberto.
|
|
@@ -5,11 +5,16 @@ description: Analyze bounded datasets, diagnose metrics, and produce reproducibl
|
|
|
5
5
|
|
|
6
6
|
# Analisar dados delimitados
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
## Descoberta e entrega progressivas
|
|
9
|
+
|
|
10
|
+
1. Comece pelos datasets e referências acessíveis fornecidos — tabela, planilha, texto, site, PDF, PPT, arquivo ou imagem. Registre fonte, locator e classificação: dado observado, definição aprovada, derivação determinística, hipótese ou lacuna. Preserve datasets e artefatos aprovados; não invente datasets, métricas ou decisões.
|
|
11
|
+
2. Se o trabalho começar do zero ou o contexto for insuficiente, faça no máximo cinco perguntas críticas por turno, por até três turnos. Pergunte somente pelo briefing material: dataset, período, unidade de análise, definição de métrica e decisão que a análise deve informar. Espere as respostas antes de avançar nas partes que delas dependem; silêncio não é resposta nem aprovação. Após três turnos, registre a limitação e use somente hipóteses delegáveis, sem preencher lacunas ou inventar dados, métricas ou autoridade.
|
|
12
|
+
3. Uma consulta bem delimitada com dataset, métrica e período suficientes deve ser respondida diretamente, sem questionário obrigatório ou plano analítico amplo.
|
|
13
|
+
4. Aplique somente as partes necessárias ao escopo solicitado: `briefing` → `qualidade` → `análise` → `síntese`. Use Markdown para registrar briefing e síntese quando útil, sem substituir notebook, planilha ou outro formato solicitado. Identifique a análise em construção e consolide somente achados sustentados; mantenha a fonte central de dados e o artefato analítico central, referenciando-os em vez de duplicar tabelas, definições ou resultados.
|
|
14
|
+
5. Inspecione a qualidade antes da conclusão: cobertura, duplicidade, nulos, granularidade, filtros e proveniência. Separe dado observado, derivação determinística e inferência.
|
|
15
|
+
6. Declare método reproduzível: arquivos ou fontes usados, filtros, transformações, agregações, fórmula e intervalo temporal. Execute checks ou testes proporcionais quando houver código analítico.
|
|
16
|
+
7. Reporte achados com incerteza, exceções e limites. Não converta indisponibilidade em zero, causalidade ou certeza; diferencie descrição, comparação e hipótese.
|
|
17
|
+
8. Produza evidência vinculada aos Acceptance Criteria e retorne somente resultados sustentados pelo dataset delimitado. Escale alterações de produto, dashboard ou esquema para o executor apropriado.
|
|
13
18
|
|
|
14
19
|
## Casos de análise
|
|
15
20
|
|
|
@@ -18,10 +18,11 @@ Use esta skill somente quando o usuário pedir execução. `prepare` não autori
|
|
|
18
18
|
9. Em cada `run usage`, leia `budget.context_refresh_required` e `budget.checkpoint_required`. O runtime grava o checkpoint sanitizado em `.local/checkpoints/`; quando sinalizado, reconstrua contexto somente de IDs ativos, diff e findings, descarte outputs brutos antigos e continue apenas com autoridade.
|
|
19
19
|
10. Em falha operacional, use retry limitado; em falha lógica, crie repair/rework explícito. Nunca esconda uma tentativa.
|
|
20
20
|
11. Cada tentativa usa uma Run raiz do `zaip-agent-orchestrator`; subagentes e fases materialmente distintas usam Sub-Runs relacionadas por `parent_run_id`. Cada Run/Sub-Run fixa agente, modelo e effort; retry técnico preserva a configuração e qualquer mudança deliberada abre outra chamada de agente.
|
|
21
|
-
12.
|
|
22
|
-
13.
|
|
23
|
-
14.
|
|
24
|
-
15.
|
|
21
|
+
12. Para delegação Codex, Sub-Run é somente subagente nativo de colaboração (`spawn_agent`). `create_thread` e `fork_thread` criam chats independentes e só podem ocorrer por pedido explícito do usuário; nunca os use como Sub-Run, fallback, retry ou prova de delegação. Se delegação nativa estiver indisponível, relate a limitação em vez de criar chat independente. Nome de catálogo, `task_name`, título ou prompt não provam ancestralidade nativa. Antes de repetir a mesma delegação limitada, aguarde ou reutilize seu filho pendente; capture somente ancestralidade/metadados observados em resultados nativos de spawn/terminal do host ou eventos SubagentStart/SubagentStop.
|
|
22
|
+
13. Interaction read-only sem descendentes termina após a resposta, sem executor/finalizador. Para interaction com descendente delegado e para delivery, depois que todos os Sub-Runs de trabalho terminarem invoque `zaip-agent-finalizer` como último filho com propósito `finalization`. Não inicie novos filhos depois dele; auto-settlement nunca fecha interaction com descendente ativo. Isso também vale para `cancelled`: o orquestrador aplica a decisão Gui pela CLI; comandos diretos Task/SPEC/PRD nunca terminalizam. Ausência, interrupção ou falha do Gui deixa a Execution inconclusiva como `blocked`.
|
|
23
|
+
14. SPEC/PRD permanece `active` entre Runs filhas e só entra em verificação após todas as Tasks; a Run filha não entrega nem bloqueia automaticamente o pai.
|
|
24
|
+
15. Resolva execução no menor grão explicitado: Task executa um nó elegível, SPEC executa sua DAG interna e PRD executa todas as SPECs selecionadas. Nunca amplie Task para SPEC/PRD por inferência.
|
|
25
|
+
16. “Conclua a execução” ou “finalize a implementação” em macro ativo continua Tasks e gates até resultado verdadeiro; não força `deliver`. “Desenvolva/melhore/aprimore” interrompe execução implícita, registra diagnóstico e cria plano/rework antes de nova promoção.
|
|
25
26
|
|
|
26
27
|
## Paralelismo
|
|
27
28
|
|
|
@@ -13,9 +13,10 @@ description: Create and validate hidden Windows launchers for reliable local fro
|
|
|
13
13
|
`packages/windows-launcher`; não crie backend somente para servir arquivos estáticos.
|
|
14
14
|
4. Sirva somente em loopback. Use porta preferencial configurável, busca limitada e health endpoint
|
|
15
15
|
com identidade do workspace.
|
|
16
|
-
5. Persista sessão sanitizada no diretório temporário, isolada por hash do workspace.
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
5. Persista sessão sanitizada no diretório temporário, isolada por hash do workspace. O clique mais
|
|
17
|
+
recente deve vencer: use claim serializada, encerre e confirme o launcher/runtime anterior
|
|
18
|
+
reconhecido antes de criar o novo writer; se não puder encerrar, bloqueie a abertura. O navegador
|
|
19
|
+
comanda a vida da sessão por conexão SSE, com grace para reload/BFCache.
|
|
19
20
|
6. Use `.agents/config/src/icon_zaip.png` como fonte canônica padrão em workspaces ZAIP, salvo
|
|
20
21
|
identidade explicitamente definida pelo projeto. Valide formato e proporção, gere o `.ico`
|
|
21
22
|
temporário e compile com `/win32icon`; não mantenha cópias derivadas sem necessidade.
|
package/templates/.agents/skills/zaip-skill-frontend-launcher/references/launcher-contract.md
CHANGED
|
@@ -20,8 +20,10 @@
|
|
|
20
20
|
- Bind somente em `127.0.0.1`; nunca exponha em `0.0.0.0`.
|
|
21
21
|
- Use health endpoint exclusivo com `kind` e hash estável do workspace.
|
|
22
22
|
- Grave `workspace`, `workspaceKey`, `rootPid`, `port` e `createdAt` no diretório temporário.
|
|
23
|
-
- Crie lock
|
|
24
|
-
|
|
23
|
+
- Crie claim-lock curto e operação atômica para transferir ownership; o último clique encerra e
|
|
24
|
+
confirma o launcher/runtime anterior reconhecido antes de iniciar outro writer.
|
|
25
|
+
- Valide o PID como launcher próprio antes de encerrá-lo; falha no encerramento bloqueia a abertura.
|
|
26
|
+
- Use uma conexão SSE do navegador como lease da sessão, com grace suficiente para reload/BFCache.
|
|
25
27
|
- Não considere uma porta ocupada como runtime próprio sem validar o marcador e o workspace.
|
|
26
28
|
- Sirva somente arquivos dentro do build root, rejeitando URL malformada e path traversal.
|
|
27
29
|
- Abra o navegador apenas após listen e sessão persistida; rotas hash podem ser abertas diretamente.
|
|
@@ -33,6 +35,6 @@
|
|
|
33
35
|
genérico.
|
|
34
36
|
2. Testes do servidor e do boundary de arquivos passam.
|
|
35
37
|
3. Uma porta preferencial ocupada por outro processo é ignorada sem encerrá-lo.
|
|
36
|
-
4. Dois disparos do executável
|
|
38
|
+
4. Dois disparos do executável deixam somente o `rootPid`/porta do segundo clique ativos.
|
|
37
39
|
5. Existe somente um processo do runtime para o workspace.
|
|
38
40
|
6. O artefato distribuído funciona em path com espaços e em instalação limpa.
|
|
@@ -53,10 +53,10 @@ The conversation and terminal deploy report are the authority record for Git-onl
|
|
|
53
53
|
|
|
54
54
|
## Prove folder-scoped SSH first
|
|
55
55
|
|
|
56
|
-
From the repository root,
|
|
56
|
+
From the repository root, read `.agents/config/project.yaml` immediately before deployment. Resolve `deploy.branch`; use `main` only when the file or key is absent. A malformed existing file or invalid branch is a terminal preflight failure. Never infer a target from the checked-out or upstream branch. Select the requested remote (default `origin`), then run once:
|
|
57
57
|
|
|
58
58
|
```powershell
|
|
59
|
-
node .agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs --repository . --remote origin
|
|
59
|
+
node .agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs --repository . --remote origin
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
The preflight must prove that the push URL uses SSH, no process override is active, the effective `core.sshCommand` comes from repository-local or matching folder configuration, its private key exists, Git identity exists, and `git ls-remote` succeeds.
|
|
@@ -75,7 +75,7 @@ Run preflight once at the start of the authorized deployment. On failure, stop.
|
|
|
75
75
|
|
|
76
76
|
## Synchronize and publish each cycle
|
|
77
77
|
|
|
78
|
-
Fetch the selected remote and
|
|
78
|
+
Fetch the selected remote and configured branch once per publication cycle, without SSH overrides. Compute ahead/behind against `<selected remote>/<configured branch>`. When local is behind or diverged, apply the recorded bounded reconciliation strategy and continue after successful verification; stop only if it cannot be completed safely within the bounded repair cycles. Never reset or force.
|
|
79
79
|
|
|
80
80
|
Commits created during Task execution use `[CODEX|CLAUDE] [P:XXXX] [S:XXXX] [T:XXXX] <Task title>`: the effective executing-agent prefix followed by compact lineage.
|
|
81
81
|
|
|
@@ -84,14 +84,14 @@ Commits created during Task execution use `[CODEX|CLAUDE] [P:XXXX] [S:XXXX] [T:X
|
|
|
84
84
|
|
|
85
85
|
The effective provider is exclusively `CODEX` or `CLAUDE`; `AUTO` is not part of a Task subject. P/S/T blocks are emitted only when their evidence exists; a Task with no PRD or SPEC uses `[Task-first:XXXX]`, and an unattributed functional commit uses `[CODEX] <functional title>` without `ZAIP-Task`. The subject remains ≤96 characters and only its title may truncate at a word boundary. Complete available PRD, SPEC, Task, Change, and Execution IDs remain in `ZAIP-*` trailers. An explicit deploy may create only its evidenced functional commits, without broad staging, force, destructive reset, or squashing.
|
|
86
86
|
|
|
87
|
-
Push once per publication cycle
|
|
87
|
+
Immediately before push, re-read the target with `node .agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs --repository . --resolve-branch`. If it changed since preflight, restart validation and synchronization for the new target. Push once per publication cycle with the explicit configured refspec: `git push <remote> HEAD:refs/heads/<configured branch>`. Do not use a bare `git push` or infer a target from upstream. If there is no unpushed commit after the bounded reconciliation and functional-commit review, report a no-op.
|
|
88
88
|
|
|
89
89
|
- If push fails, treat it as terminal unless repository content caused a documented server-side rejection that can be repaired locally.
|
|
90
90
|
- Never switch keys, accounts, remotes, or transport, and never pass SSH/config overrides or force options.
|
|
91
91
|
|
|
92
92
|
## Verify and monitor GitHub checks
|
|
93
93
|
|
|
94
|
-
1. After every push, compare `git rev-parse HEAD` with one `git ls-remote <remote> refs/heads/<branch>` result.
|
|
94
|
+
1. After every push, compare `git rev-parse HEAD` with one `git ls-remote <remote> refs/heads/<configured branch>` result.
|
|
95
95
|
2. Inspect required GitHub checks for that exact commit using an available authenticated GitHub CLI, API, connector, or browser session. Wait up to 20 minutes for terminal status and provide a concise progress update at least once per minute.
|
|
96
96
|
3. If all required checks pass, confirm the remote hash, commit title, SSH identity source, key path, and worktree status.
|
|
97
97
|
4. If a check fails, read the exact job and step logs before editing. Do not weaken or remove the check merely to obtain green status.
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { spawnSync } from "node:child_process";
|
|
4
|
-
import { existsSync } from "node:fs";
|
|
4
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
5
5
|
import { homedir } from "node:os";
|
|
6
6
|
import { dirname, isAbsolute, relative, resolve } from "node:path";
|
|
7
|
+
import { parseDocument } from "./yaml-parser.mjs";
|
|
7
8
|
|
|
8
9
|
const options = parseArguments(process.argv.slice(2));
|
|
9
10
|
|
|
@@ -11,11 +12,24 @@ try {
|
|
|
11
12
|
const requestedRepository = resolve(options.repository);
|
|
12
13
|
const repository = git(requestedRepository, ["rev-parse", "--show-toplevel"]).trim();
|
|
13
14
|
const gitDirectory = git(repository, ["rev-parse", "--absolute-git-dir"]).trim();
|
|
14
|
-
const
|
|
15
|
-
if (branch
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
const configuredBranch = configuredDeployBranch(repository);
|
|
16
|
+
if (options.branch !== null && options.branch !== configuredBranch) {
|
|
17
|
+
fail(
|
|
18
|
+
`caller branch ${options.branch} conflicts with configured deploy.branch ${configuredBranch}`,
|
|
19
|
+
);
|
|
18
20
|
}
|
|
21
|
+
if (options.resolveBranch) {
|
|
22
|
+
process.stdout.write(
|
|
23
|
+
`${JSON.stringify({ configured_branch: configuredBranch, push_refspec: `HEAD:refs/heads/${configuredBranch}` })}\n`,
|
|
24
|
+
);
|
|
25
|
+
process.exit(0);
|
|
26
|
+
}
|
|
27
|
+
const checkedOutBranch = git(repository, ["branch", "--show-current"]).trim();
|
|
28
|
+
if (checkedOutBranch === "") fail("detached HEAD is not deployable");
|
|
29
|
+
if (checkedOutBranch !== configuredBranch)
|
|
30
|
+
fail(
|
|
31
|
+
`checked out branch ${checkedOutBranch} does not match configured deploy.branch ${configuredBranch}`,
|
|
32
|
+
);
|
|
19
33
|
|
|
20
34
|
for (const variable of ["GIT_SSH", "GIT_SSH_COMMAND"]) {
|
|
21
35
|
if (process.env[variable]?.trim()) fail(`${variable} overrides folder-scoped Git SSH config`);
|
|
@@ -66,8 +80,9 @@ try {
|
|
|
66
80
|
{
|
|
67
81
|
status: "ready",
|
|
68
82
|
repository,
|
|
69
|
-
|
|
70
|
-
|
|
83
|
+
configured_branch: configuredBranch,
|
|
84
|
+
checked_out_branch: checkedOutBranch,
|
|
85
|
+
caller_branch: options.branch,
|
|
71
86
|
upstream: upstream || null,
|
|
72
87
|
remote: {
|
|
73
88
|
name: options.remote,
|
|
@@ -98,10 +113,17 @@ try {
|
|
|
98
113
|
}
|
|
99
114
|
|
|
100
115
|
function parseArguments(arguments_) {
|
|
101
|
-
const parsed = {
|
|
116
|
+
const parsed = {
|
|
117
|
+
repository: ".",
|
|
118
|
+
remote: "origin",
|
|
119
|
+
branch: null,
|
|
120
|
+
timeout: 15_000,
|
|
121
|
+
resolveBranch: false,
|
|
122
|
+
};
|
|
102
123
|
for (let index = 0; index < arguments_.length; index += 1) {
|
|
103
124
|
const argument = arguments_[index];
|
|
104
|
-
if (argument === "--
|
|
125
|
+
if (argument === "--resolve-branch") parsed.resolveBranch = true;
|
|
126
|
+
else if (argument === "--repository")
|
|
105
127
|
parsed.repository = requiredValue(arguments_, ++index, argument);
|
|
106
128
|
else if (argument === "--remote") parsed.remote = requiredValue(arguments_, ++index, argument);
|
|
107
129
|
else if (argument === "--branch") parsed.branch = requiredValue(arguments_, ++index, argument);
|
|
@@ -109,7 +131,7 @@ function parseArguments(arguments_) {
|
|
|
109
131
|
parsed.timeout = Number(requiredValue(arguments_, ++index, argument));
|
|
110
132
|
} else if (argument === "--help") {
|
|
111
133
|
process.stdout.write(
|
|
112
|
-
"Usage: preflight.mjs [--repository PATH] [--remote NAME] [--branch
|
|
134
|
+
"Usage: preflight.mjs [--repository PATH] [--remote NAME] [--branch CONFIGURED_BRANCH] [--resolve-branch] [--timeout-ms 1000..60000]\n",
|
|
113
135
|
);
|
|
114
136
|
process.exit(0);
|
|
115
137
|
} else fail(`unknown argument: ${argument}`);
|
|
@@ -117,12 +139,55 @@ function parseArguments(arguments_) {
|
|
|
117
139
|
if (!Number.isInteger(parsed.timeout) || parsed.timeout < 1_000 || parsed.timeout > 60_000) {
|
|
118
140
|
fail("--timeout-ms must be an integer from 1000 to 60000");
|
|
119
141
|
}
|
|
120
|
-
if (parsed.branch !== null && !/^[A-Za-z0-9][A-Za-z0-9._/-]*$/.test(parsed.branch)) {
|
|
121
|
-
fail("--branch must be a plain Git branch name");
|
|
122
|
-
}
|
|
123
142
|
return parsed;
|
|
124
143
|
}
|
|
125
144
|
|
|
145
|
+
function configuredDeployBranch(repository) {
|
|
146
|
+
const configPath = resolve(repository, ".agents/config/project.yaml");
|
|
147
|
+
if (!existsSync(configPath)) return "main";
|
|
148
|
+
let document;
|
|
149
|
+
try {
|
|
150
|
+
document = parseDocument(readFileSync(configPath, "utf8"), { strict: true, uniqueKeys: true });
|
|
151
|
+
} catch (error) {
|
|
152
|
+
fail(
|
|
153
|
+
`project.yaml could not be read: ${error instanceof Error ? error.message : String(error)}`,
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
if (document.errors.length > 0) {
|
|
157
|
+
fail(`project.yaml is malformed: ${document.errors[0]?.message ?? "YAML parse error"}`);
|
|
158
|
+
}
|
|
159
|
+
const config = document.toJS();
|
|
160
|
+
if (config === null || typeof config !== "object" || Array.isArray(config)) {
|
|
161
|
+
fail("project.yaml must contain a mapping");
|
|
162
|
+
}
|
|
163
|
+
const deploy = config.deploy;
|
|
164
|
+
if (deploy === undefined) return "main";
|
|
165
|
+
if (deploy === null || typeof deploy !== "object" || Array.isArray(deploy)) {
|
|
166
|
+
fail("project.yaml deploy must be a mapping");
|
|
167
|
+
}
|
|
168
|
+
if (!("branch" in deploy)) return "main";
|
|
169
|
+
if (typeof deploy.branch !== "string" || deploy.branch.trim() === "") {
|
|
170
|
+
fail("project.yaml deploy.branch must be a non-empty Git branch name");
|
|
171
|
+
}
|
|
172
|
+
const branch = deploy.branch.trim();
|
|
173
|
+
if (!isValidBranch(repository, branch)) fail(`project.yaml deploy.branch is invalid: ${branch}`);
|
|
174
|
+
return branch;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function isValidBranch(repository, branch) {
|
|
178
|
+
if (
|
|
179
|
+
branch.startsWith("-") ||
|
|
180
|
+
branch.includes("..") ||
|
|
181
|
+
branch.includes("//") ||
|
|
182
|
+
branch.includes("@{")
|
|
183
|
+
)
|
|
184
|
+
return false;
|
|
185
|
+
return (
|
|
186
|
+
git(repository, ["check-ref-format", "--branch", branch], { allowFailure: true }).trim() ===
|
|
187
|
+
branch
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
|
|
126
191
|
function requiredValue(arguments_, index, option) {
|
|
127
192
|
const value = arguments_[index];
|
|
128
193
|
if (!value || value.startsWith("--")) fail(`${option} requires a value`);
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { spawnSync } from "node:child_process";
|
|
3
|
+
import { copyFileSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import test from "node:test";
|
|
7
|
+
|
|
8
|
+
test("standalone consumer resolves fresh project targets without node_modules", () => {
|
|
9
|
+
const root = mkdtempSync(join(tmpdir(), "zaip-deploy-target-"));
|
|
10
|
+
try {
|
|
11
|
+
assert.equal(
|
|
12
|
+
spawnSync("git", ["init", "-b", "codex/working", root], { windowsHide: true }).status,
|
|
13
|
+
0,
|
|
14
|
+
);
|
|
15
|
+
const scripts = join(root, ".agents/skills/zaip-skill-github-deploy/scripts");
|
|
16
|
+
mkdirSync(scripts, { recursive: true });
|
|
17
|
+
mkdirSync(join(root, ".agents/config"), { recursive: true });
|
|
18
|
+
for (const file of ["preflight.mjs", "yaml-parser.mjs"])
|
|
19
|
+
copyFileSync(join(import.meta.dirname, file), join(scripts, file));
|
|
20
|
+
const run = (...args) =>
|
|
21
|
+
spawnSync(process.execPath, [join(scripts, "preflight.mjs"), "--repository", root, ...args], {
|
|
22
|
+
encoding: "utf8",
|
|
23
|
+
windowsHide: true,
|
|
24
|
+
env: { ...process.env, NODE_PATH: "" },
|
|
25
|
+
});
|
|
26
|
+
const target = () => {
|
|
27
|
+
const result = run("--resolve-branch");
|
|
28
|
+
assert.equal(result.status, 0, result.stderr);
|
|
29
|
+
return JSON.parse(result.stdout);
|
|
30
|
+
};
|
|
31
|
+
const config = (text) => writeFileSync(join(root, ".agents/config/project.yaml"), text);
|
|
32
|
+
assert.equal(target().configured_branch, "main");
|
|
33
|
+
config("project: { name: example }\n");
|
|
34
|
+
assert.equal(target().configured_branch, "main");
|
|
35
|
+
config("deploy: {}\n");
|
|
36
|
+
assert.equal(target().configured_branch, "main");
|
|
37
|
+
config("deploy:\n branch: 'release/production'\n");
|
|
38
|
+
assert.deepEqual(target(), {
|
|
39
|
+
configured_branch: "release/production",
|
|
40
|
+
push_refspec: "HEAD:refs/heads/release/production",
|
|
41
|
+
});
|
|
42
|
+
config("deploy: { branch: staging }\n");
|
|
43
|
+
assert.equal(target().configured_branch, "staging");
|
|
44
|
+
assert.match(run("--resolve-branch", "--branch", "main").stderr, /conflicts with configured/);
|
|
45
|
+
assert.match(run().stderr, /checked out branch codex\/working does not match/);
|
|
46
|
+
for (const branch of ["bad..branch", "bad.lock/child", ".hidden/child", "-option"]) {
|
|
47
|
+
config(`deploy: { branch: '${branch}' }\n`);
|
|
48
|
+
assert.match(run("--resolve-branch").stderr, /deploy.branch is invalid/);
|
|
49
|
+
}
|
|
50
|
+
config("deploy: { branch: release_ }\n");
|
|
51
|
+
assert.equal(target().configured_branch, "release_");
|
|
52
|
+
for (const source of ["deploy: [\n", "deploy: { branch: main, branch: staging }\n"]) {
|
|
53
|
+
config(source);
|
|
54
|
+
assert.match(run("--resolve-branch").stderr, /malformed/);
|
|
55
|
+
}
|
|
56
|
+
} finally {
|
|
57
|
+
rmSync(root, { recursive: true, force: true });
|
|
58
|
+
}
|
|
59
|
+
});
|