@zaip-ai/cli 2.6.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -13
- package/dist/services/adapters.d.ts +1 -1
- package/dist/services/adapters.d.ts.map +1 -1
- package/dist/services/adapters.js +5 -2
- package/dist/services/adapters.js.map +1 -1
- package/dist/services/agent-adapters.js +12 -9
- package/dist/services/agent-adapters.js.map +1 -1
- package/dist/services/codex-conversation-lifecycle-hook.d.ts.map +1 -1
- package/dist/services/codex-conversation-lifecycle-hook.js +32 -21
- package/dist/services/codex-conversation-lifecycle-hook.js.map +1 -1
- package/dist/services/install-agents-template.js +9 -1
- package/dist/services/install-agents-template.js.map +1 -1
- package/dist/services/runtime-template.test.js +25 -2
- package/dist/services/runtime-template.test.js.map +1 -1
- package/dist/services/transactional-files.d.ts.map +1 -1
- package/dist/services/transactional-files.js +59 -14
- package/dist/services/transactional-files.js.map +1 -1
- package/package.json +1 -1
- package/templates/.agents/README-ENG.md +75 -10
- package/templates/.agents/README.md +76 -10
- package/templates/.agents/config/agents/catalog.yaml +3 -0
- package/templates/.agents/config/agents/discovery.json +2 -2
- package/templates/.agents/config/clients/codex/agents/zaip-agent-analyst.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-auditor.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-backend.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-brand-strategist.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-builder.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-cloud-engineer.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-data-analyst.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-designer.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-finalizer.toml +2 -2
- package/templates/.agents/config/clients/codex/agents/zaip-agent-frontend.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-general-operations.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-governance-compliance.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-growth-strategist.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-integrator.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-marketing-analyst.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-orchestrator.toml +13 -10
- package/templates/.agents/config/clients/codex/agents/zaip-agent-refactoring-specialist.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-reviewer.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-sales-specialist.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-security-auditor.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-task-executor.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-website-developer.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-writer.toml +1 -1
- package/templates/.agents/config/project.yaml +10 -1
- package/templates/.agents/dashboard/.zaip-managed.json +274 -138
- package/templates/.agents/dashboard/README.md +16 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{CostCalculationGuidePage-CGxeQak4.js → CostCalculationGuidePage-CEDZjl4V.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-tzS7YxYB.js → DashboardHelpDialog-DIWDmvAS.js} +930 -550
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{PricingSettingsDialog-DEbCi1gP.js → PricingSettingsDialog-BBRBKaHa.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-B9GWkEyN.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-BAvLPAee.js +3 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{TraceabilityWorkspace-t1Om0Abw.js → TraceabilityWorkspace-C9dDhj34.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-06__WZco.js +68 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/dashboard-localization-CoAVMZN6.js +828 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{icons-vendor-DiGC-dsJ.js → icons-vendor-DEmo6Tn2.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-BVzw_Wux.js +2 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{react-vendor-kPO6yNed.js → react-vendor-CadYsm83.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-BzKK8kK3.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/index.html +5 -5
- package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
- package/templates/.agents/dashboard/apps/frontend/src/AppDashboardContent.tsx +10 -5
- package/templates/.agents/dashboard/apps/frontend/src/AutonomySettings.tsx +82 -0
- package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.dom.test.ts +38 -7
- package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +164 -171
- package/templates/.agents/dashboard/apps/frontend/src/__tests__/app-composition-support.ts +6 -1
- package/templates/.agents/dashboard/apps/frontend/src/cost-monitor-population.test.tsx +149 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api-settings.ts +2 -1
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.test.ts +19 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +22 -1
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-cost-facts.test.ts +54 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-cost-facts.ts +20 -2
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-localization.test.ts +37 -43
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-localization.ts +9 -251
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-project-overview.ts +34 -7
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-view-actions.test.ts +51 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-view-actions.ts +3 -1
- package/templates/.agents/dashboard/apps/frontend/src/operations-period-render.test.ts +35 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-period.test.ts +19 -4
- package/templates/.agents/dashboard/apps/frontend/src/operations-period.ts +5 -3
- package/templates/.agents/dashboard/apps/frontend/src/project-installation-status.test.ts +112 -23
- package/templates/.agents/dashboard/apps/frontend/src/project-installation-status.ts +49 -12
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-copy.ts +181 -0
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-model.ts +11 -1
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +34 -51
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-state.css +55 -0
- package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +12 -0
- package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +1 -1
- package/templates/.agents/dashboard/apps/frontend/src/traceability-task-pagination.ts +1 -2
- package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.test.ts +6 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.ts +2 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-documents.ts +3 -1
- package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-task-pagination.ts +4 -15
- package/templates/.agents/dashboard/apps/frontend/src/use-dashboard-app-model.tsx +2 -2
- package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/complete-cost-average.test.ts +73 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/contracts.ts +9 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/period-averages.ts +60 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorContent.tsx +8 -22
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +2 -3
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostPeriodAverageCards.tsx +32 -8
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-summary.ts +3 -2
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.ts +1 -42
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.ts +2 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.ts +3 -2
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +8 -2
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/index.ts +1 -0
- package/templates/.agents/dashboard/modules/operations/package.json +1 -1
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview-keeps-structure-classes-mutually-exclusive.test.ts +4 -3
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.helpers.tsx +66 -3
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.test.ts +71 -1
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.tsx +36 -30
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +5 -14
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageOverview.tsx +3 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OverviewCostKpi.tsx +46 -0
- package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.test.ts +28 -1
- package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.tsx +11 -4
- package/templates/.agents/dashboard/modules/operations/src/react/index.ts +1 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-coverage-toast.test.ts +2 -2
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +28 -8
- package/templates/.agents/dashboard/modules/operations/src/react/operations-page-contract.ts +19 -2
- package/templates/.agents/dashboard/modules/operations/src/react/overview-cost-card.test.tsx +89 -0
- package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.test.ts +3 -3
- package/templates/.agents/dashboard/modules/operations/src/work-board-model.ts +2 -1
- package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
- package/templates/.agents/dashboard/packages/branding/package.json +1 -1
- package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
- package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +279 -245
- package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +247 -215
- package/templates/.agents/dashboard/packages/local-runtime/package.json +2 -2
- package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +15 -25
- package/templates/.agents/dashboard/packages/local-runtime/server.mjs +279 -245
- package/templates/.agents/dashboard/packages/local-runtime/src/active-codex-telemetry.ts +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/project-installation-summary.test.ts +142 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/project-installation-summary.ts +190 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +65 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +67 -66
- package/templates/.agents/dashboard/packages/local-runtime/src/server-browser-lease.test.ts +91 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-browser-lease.ts +24 -4
- package/templates/.agents/dashboard/packages/local-runtime/src/server-hono-security.test.ts +17 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-routes.ts +21 -2
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.test.ts +94 -2
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.ts +62 -12
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.test.ts +26 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.ts +4 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-task-trace.test.ts +97 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-task-trace.ts +10 -13
- package/templates/.agents/dashboard/packages/local-runtime/src/server-trace-routes.ts +2 -10
- package/templates/.agents/dashboard/packages/local-runtime/src/server-traceability-index.test.ts +84 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +15 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-calendar.ts +17 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cold-parse.test.ts +78 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-dimension-facts.test.ts +12 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-group-projection.test.ts +94 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-group-projection.ts +5 -5
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-duration-lookup.test.ts +59 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-entity-label-views.test.ts +72 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-file-index.test.ts +69 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-first-fold-cache.ts +3 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-force-canonical.test.ts +3 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-incremental-refresh.test.ts +2 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-projections.ts +9 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-runs.ts +4 -5
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-period-averages.ts +46 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-provider-alias-parity.test.ts +50 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-entity-group.test.ts +171 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-entity-group.ts +36 -16
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-filtered-dimension.ts +13 -2
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-summary.ts +25 -7
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-temporal-dimension.ts +2 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-canonical-parsing.ts +7 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-canonical.ts +5 -15
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-counts-every-root-execution-day-returns.test.ts +34 -10
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-filesystem.ts +17 -3
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-keeps-orphan-telemetry-out-kanban-without.test.ts +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-rebuild.ts +11 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-schema.ts +5 -4
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-source-fingerprint.test.ts +54 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-source-fingerprint.ts +7 -3
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +4 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-risk-population.test.ts +98 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-schema-base-views.ts +29 -16
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-schema-dashboard-views.ts +2 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-snapshot-seed.test.ts +2 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/verify-project-settings.mjs +57 -0
- package/templates/.agents/dashboard/packages/ui/package.json +1 -1
- package/templates/.agents/dashboard/scripts/qualify-observability.mjs +130 -0
- package/templates/.agents/dashboard/scripts/verify-autonomy-settings.mjs +175 -0
- package/templates/.agents/dashboard/scripts/verify-observability.mjs +254 -0
- package/templates/.agents/dashboard/scripts/verify-project-setup.mjs +64 -0
- package/templates/.agents/dashboard/tests/e2e/lease-global-setup.ts +37 -0
- package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
- package/templates/.agents/dashboard/tests/e2e/playwright.config.ts +5 -3
- package/templates/.agents/dashboard/tests/e2e/specs/cost-monitor-period-transition.spec.ts +22 -1
- package/templates/.agents/dashboard/tests/e2e/specs/dashboard-performance-matrix.spec.ts +17 -8
- package/templates/.agents/dashboard/tests/e2e/specs/dashboard.spec.ts +47 -6
- package/templates/.agents/dashboard/tests/e2e/specs/lease-lifetime.spec.ts +14 -0
- package/templates/.agents/dashboard/tests/observability-fixture.mjs +200 -0
- package/templates/.agents/design/.zaip-managed.json +84 -40
- package/templates/.agents/design/apps/catalog/dist/assets/index-BJV597iq.js +72 -0
- package/templates/.agents/design/apps/catalog/dist/assets/index-BOjCcUaU.js +72 -0
- package/templates/.agents/design/apps/catalog/dist/assets/index-B_WhrCZe.js +72 -0
- package/templates/.agents/design/apps/catalog/dist/assets/index-CqtYXZfV.js +72 -0
- package/templates/.agents/design/apps/catalog/dist/assets/index-D_lfqoyx.js +72 -0
- package/templates/.agents/design/apps/catalog/dist/assets/index-i_PO2k9R.js +9 -0
- package/templates/.agents/design/apps/catalog/dist/index.html +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/CatalogShell-Cstn1UwA.js +1 -0
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{Color-6AOWCN3U-B-kAgAjB.js → Color-6AOWCN3U-Cm-yJJz_.js} +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/Components.stories-D1WopB2L.js +137 -0
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/DesignSystem.stories-DQ9PJ3N3.js +1 -0
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{DocsRenderer-JROSPFPF-BVN7xHtv.js → DocsRenderer-JROSPFPF-Belk4jRr.js} +4 -4
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{WithTooltip-7X4HQR7L-CDHtKYkz.js → WithTooltip-7X4HQR7L-DoPvjkS1.js} +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{chunk-DRQKCCAG-D6AsDkMK.js → chunk-DRQKCCAG-B1itKXEN.js} +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{chunk-W22LQPXL-B4m5uloN.js → chunk-W22LQPXL-C-Eb5SPY.js} +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{components-CN8YyTUg.js → components-DnyKLwhj.js} +5 -5
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/formatter-L2YTDE3Q-D0OSgxWz.js +1 -0
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{iframe-9yZfIsdT.js → iframe-DcXBsFPz.js} +3 -3
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{react-18-BoCSnq6H.js → react-18-CRM89QRf.js} +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/react-C3tkVMIp.js +1 -0
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{syntaxhighlighter-YFXUGROL-Bnn_nMwJ.js → syntaxhighlighter-YFXUGROL-B03jQGTF.js} +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{theming-DS_ue2sb.js → theming-4ZyufAga.js} +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/iframe.html +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/index.json +1 -1
- package/templates/.agents/design/apps/catalog/package.json +2 -2
- package/templates/.agents/design/apps/catalog/src/components/AutonomySpecimen.tsx +15 -0
- package/templates/.agents/design/apps/catalog/src/components/CostPopulationSpecimen.test.tsx +19 -0
- package/templates/.agents/design/apps/catalog/src/components/CostPopulationSpecimen.tsx +45 -0
- package/templates/.agents/design/apps/catalog/src/components/EstimatedCostSpecimen.tsx +48 -0
- package/templates/.agents/design/apps/catalog/src/components/ProjectStatusSpecimen.tsx +169 -0
- package/templates/.agents/design/apps/catalog/src/pages/ComponentsPage.tsx +55 -0
- package/templates/.agents/design/apps/catalog/src/stories/Components.stories.tsx +60 -0
- package/templates/.agents/design/packages/local-runtime/package.json +1 -1
- package/templates/.agents/requirements/autonomous-assurance.md +1 -1
- package/templates/.agents/requirements/cloud-hostinger-autonomy.md +1 -1
- 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 +1 -1
- 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 +5 -5
- package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
- package/templates/.agents/rules/astra-diagnostic.md +3 -1
- package/templates/.agents/rules/autonomy-decision.md +10 -2
- package/templates/.agents/rules/core.md +12 -1
- package/templates/.agents/rules/run-lifecycle-closure.md +8 -6
- package/templates/.agents/rules/workflow.md +2 -2
- package/templates/.agents/runtime/VERSION +1 -1
- package/templates/.agents/runtime/bin/zaip.mjs +383 -350
- package/templates/.agents/runtime/checksums.sha256 +6 -6
- package/templates/.agents/runtime/manifest.json +1 -1
- package/templates/.agents/runtime/pnpm-lock.sha256 +1 -1
- package/templates/.agents/runtime/provenance.json +5 -5
- package/templates/.agents/runtime/sbom.cdx.json +3 -3
- package/templates/.agents/skills/zaip-skill-dev-environment/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-execution/SKILL.md +28 -5
- package/templates/.agents/skills/zaip-skill-execution/references/runtime-governance.md +17 -3
- package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +8 -9
- package/templates/.agents/skills/zaip-skill-github-deploy/references/deployment-workflow.md +10 -6
- package/templates/.agents/skills/zaip-skill-github-deploy/references/release-identity.md +17 -12
- package/templates/.agents/skills/zaip-skill-move-prd/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-prd/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-release-qualification/SKILL.md +21 -23
- package/templates/.agents/skills/zaip-skill-release-qualification/references/local-preparation.md +37 -13
- package/templates/.agents/skills/zaip-skill-setup/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-tool-setup/SKILL.md +2 -0
- package/templates/.agents/zaip-aios/INDEX.md +9 -1
- package/templates/.agents/zaip-aios/README.md +24 -2
- package/templates/.agents/zaip-aios/VERSION +1 -1
- package/templates/.agents/zaip-aios/guides/01-primeiros-passos.md +5 -1
- package/templates/.agents/zaip-aios/guides/03-tasks.md +15 -2
- package/templates/.agents/zaip-aios/guides/04-specs.md +13 -0
- package/templates/.agents/zaip-aios/guides/05-prds.md +13 -0
- package/templates/.agents/zaip-aios/guides/06-execucao.md +19 -4
- package/templates/.agents/zaip-aios/guides/07-revisao-e-validacao.md +14 -0
- package/templates/.agents/zaip-aios/guides/08-contexto-e-tokens.md +4 -3
- package/templates/.agents/zaip-aios/guides/09-agentes-e-squads.md +17 -9
- package/templates/.agents/zaip-aios/guides/10-seguranca.md +9 -0
- package/templates/.agents/zaip-aios/guides/11-observabilidade-e-custos.md +69 -0
- package/templates/.agents/zaip-aios/guides/12-instalacao-e-upgrade.md +9 -4
- package/templates/.agents/zaip-aios/guides/13-boas-praticas.md +7 -1
- package/templates/.agents/zaip-aios/guides/14-troubleshooting.md +18 -0
- package/templates/.agents/zaip-aios/guides/16-lifecycle-e-reconciliacao.md +54 -3
- package/templates/.agents/zaip-aios/guides/18-catalogo-de-agentes.md +10 -2
- package/templates/.agents/zaip-aios/guides/19-assurance-e-autonomia.md +186 -5
- package/templates/.agents/zaip-aios/guides/20-instalacao-detalhada.md +21 -15
- package/templates/.agents/zaip-aios/guides/21-telemetria-monitor-custos.md +18 -2
- package/templates/.agents/zaip-aios/guides/22-fluxos-e-roteamento.md +14 -2
- package/templates/.agents/zaip-aios/guides/23-orquestracao-de-modelos.md +190 -489
- package/templates/.agents/zaip-aios/guides/26-qualidade-e-release.md +72 -13
- package/templates/.agents/zaip-aios/guides/27-telemetria-git-native.md +18 -0
- package/templates/.agents/zaip-aios/guides/28-lifecycle-completo.md +18 -1
- package/templates/template-manifest.json +454 -274
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-1L7Qw-Gq.js +0 -3
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-EInWr641.css +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-B6aZfo5f.js +0 -68
- package/templates/.agents/dashboard/apps/frontend/dist/assets/dashboard-localization-CLJ0lT9v.js +0 -231
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-DgTmNHN5.js +0 -2
- package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-DQpKX9c1.js +0 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/CatalogShell-BWY-80s4.js +0 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/Components.stories-Be2mDUQj.js +0 -27
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/DesignSystem.stories-DRx9blDs.js +0 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/formatter-L2YTDE3Q-EwuTh8Zk.js +0 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/react-DyL61NPT.js +0 -1
|
@@ -7,13 +7,15 @@ const baseURL = process.env.PLAYWRIGHT_BASE_URL ?? `http://127.0.0.1:${serverPor
|
|
|
7
7
|
|
|
8
8
|
export default defineConfig({
|
|
9
9
|
testDir: "./specs",
|
|
10
|
+
globalSetup: "./lease-global-setup.ts",
|
|
10
11
|
fullyParallel: false,
|
|
11
12
|
timeout: 180_000,
|
|
12
13
|
expect: { timeout: 60_000 },
|
|
13
14
|
retries: process.env.CI ? 1 : 0,
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
|
|
15
|
+
// Every suite invocation shares one SQLite runtime, including local release
|
|
16
|
+
// qualification. Concurrent browser workers turn latency/export checks into
|
|
17
|
+
// an unintended load test whose result depends on the host CPU count.
|
|
18
|
+
workers: 1,
|
|
17
19
|
reporter: process.env.CI ? "github" : "list",
|
|
18
20
|
use: {
|
|
19
21
|
baseURL: `${baseURL}/?token=e2e-token`,
|
|
@@ -4,6 +4,18 @@ const COST_MONITOR_PATH = "/api/v2/cost-monitor";
|
|
|
4
4
|
const STALE_SUMMARY_SENTINEL = "SENTINELA-RESPOSTA-ANTIGA";
|
|
5
5
|
const fiveSeconds = 5_000;
|
|
6
6
|
|
|
7
|
+
test("reselecting the current bounded period never opens an unfinishable transition", async ({
|
|
8
|
+
page,
|
|
9
|
+
}) => {
|
|
10
|
+
await openDashboard(page);
|
|
11
|
+
await selectThisMonth(page);
|
|
12
|
+
await expect(periodControl(page)).toHaveValue("this-month");
|
|
13
|
+
await periodControl(page).selectOption("this-month");
|
|
14
|
+
await expect(page.locator(".period-transition-overlay")).toHaveCount(0, { timeout: fiveSeconds });
|
|
15
|
+
await expect(periodControl(page)).toHaveValue("this-month");
|
|
16
|
+
await expect(page.getByLabel("Kanban de trabalho")).toBeVisible();
|
|
17
|
+
});
|
|
18
|
+
|
|
7
19
|
test("refreshes Cost Monitor within five seconds when Todo o Período is selected in place", async ({
|
|
8
20
|
page,
|
|
9
21
|
}) => {
|
|
@@ -86,12 +98,14 @@ test("does not let a late all-time summary overwrite the newer period", async ({
|
|
|
86
98
|
});
|
|
87
99
|
await page.addInitScript(() => {
|
|
88
100
|
type Probe = {
|
|
101
|
+
armed: boolean;
|
|
89
102
|
allTimeBody: string | null;
|
|
90
103
|
allTimeFinished: boolean;
|
|
91
104
|
allTimeStarted: boolean;
|
|
92
105
|
releaseAllTime: null | (() => Promise<void>);
|
|
93
106
|
};
|
|
94
107
|
const probe: Probe = {
|
|
108
|
+
armed: false,
|
|
95
109
|
allTimeBody: null,
|
|
96
110
|
allTimeFinished: false,
|
|
97
111
|
allTimeStarted: false,
|
|
@@ -109,7 +123,8 @@ test("does not let a late all-time summary overwrite the newer period", async ({
|
|
|
109
123
|
url.searchParams.get("scope") === "summary" &&
|
|
110
124
|
!url.searchParams.has("from") &&
|
|
111
125
|
!url.searchParams.has("to");
|
|
112
|
-
if (!isAllTimeSummary || probe.allTimeStarted)
|
|
126
|
+
if (!probe.armed || !isAllTimeSummary || probe.allTimeStarted)
|
|
127
|
+
return originalFetch(input, init);
|
|
113
128
|
|
|
114
129
|
probe.allTimeStarted = true;
|
|
115
130
|
return new Promise<Response>((resolve, reject) => {
|
|
@@ -138,7 +153,12 @@ test("does not let a late all-time summary overwrite the newer period", async ({
|
|
|
138
153
|
const staleBody = withStaleSummarySentinel(priorPeriodBody!);
|
|
139
154
|
await page.evaluate((body) => {
|
|
140
155
|
window.__costSummaryStaleProbe.allTimeBody = body;
|
|
156
|
+
// Arm only after the bounded snapshot is ready. The default first paint
|
|
157
|
+
// also requests All Time; intercepting it can satisfy the later wait early
|
|
158
|
+
// and race React's commit rather than the stale-response guard.
|
|
159
|
+
window.__costSummaryStaleProbe.armed = true;
|
|
141
160
|
}, staleBody);
|
|
161
|
+
expect(await page.evaluate(() => window.__costSummaryStaleProbe.allTimeStarted)).toBe(false);
|
|
142
162
|
|
|
143
163
|
await periodControl(page).selectOption("all");
|
|
144
164
|
await expect
|
|
@@ -160,6 +180,7 @@ test("does not let a late all-time summary overwrite the newer period", async ({
|
|
|
160
180
|
declare global {
|
|
161
181
|
interface Window {
|
|
162
182
|
__costSummaryStaleProbe: {
|
|
183
|
+
armed: boolean;
|
|
163
184
|
allTimeBody: string | null;
|
|
164
185
|
allTimeFinished: boolean;
|
|
165
186
|
allTimeStarted: boolean;
|
|
@@ -72,7 +72,7 @@ test("measures Cost, Operation and Traceability surfaces without full snapshot h
|
|
|
72
72
|
const apiActivityAt = new Map<string, number>();
|
|
73
73
|
page.on("request", (request) => {
|
|
74
74
|
if (!request.url().includes("/api/v2/")) return;
|
|
75
|
-
if (isBackgroundReconciliation(request.url())) return;
|
|
75
|
+
if (isBackgroundReconciliation(request.url()) || isBrowserLease(request.url())) return;
|
|
76
76
|
apiActivityAt.set(request.url(), performance.now());
|
|
77
77
|
requestStartedAt.set(request, performance.now());
|
|
78
78
|
apiRequestCount += 1;
|
|
@@ -81,7 +81,7 @@ test("measures Cost, Operation and Traceability surfaces without full snapshot h
|
|
|
81
81
|
});
|
|
82
82
|
const finishApiRequest = (request: { url(): string }) => {
|
|
83
83
|
if (!request.url().includes("/api/v2/")) return;
|
|
84
|
-
if (isBackgroundReconciliation(request.url())) return;
|
|
84
|
+
if (isBackgroundReconciliation(request.url()) || isBrowserLease(request.url())) return;
|
|
85
85
|
apiActivityAt.set(request.url(), performance.now());
|
|
86
86
|
const count = activeApiRequests.get(request.url()) ?? 0;
|
|
87
87
|
if (count <= 1) activeApiRequests.delete(request.url());
|
|
@@ -501,15 +501,18 @@ async function waitForQuietApiRequests(
|
|
|
501
501
|
.poll(
|
|
502
502
|
() => {
|
|
503
503
|
const latestActivityAt = getLatestActivityAt();
|
|
504
|
-
return
|
|
505
|
-
getActiveApiRequests().
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
504
|
+
return {
|
|
505
|
+
pending: getActiveApiRequests().map((url) => {
|
|
506
|
+
const parsed = new URL(url);
|
|
507
|
+
parsed.searchParams.delete("token");
|
|
508
|
+
return `${parsed.pathname}${parsed.search}`;
|
|
509
|
+
}),
|
|
510
|
+
settled: latestActivityAt !== null && performance.now() - latestActivityAt >= 500,
|
|
511
|
+
};
|
|
509
512
|
},
|
|
510
513
|
{ timeout: 10_000 },
|
|
511
514
|
)
|
|
512
|
-
.
|
|
515
|
+
.toEqual({ pending: [], settled: true });
|
|
513
516
|
}
|
|
514
517
|
|
|
515
518
|
async function selectedPeriodQuery(page: Page, period: Metric["period"]): Promise<PeriodQuery> {
|
|
@@ -540,6 +543,12 @@ function isBackgroundReconciliation(url: string): boolean {
|
|
|
540
543
|
return new URL(url).pathname === "/api/v2/reconcile-open-work";
|
|
541
544
|
}
|
|
542
545
|
|
|
546
|
+
/** The browser's ownership stream intentionally stays open until page teardown.
|
|
547
|
+
* Its HTTP failures are still collected by the response listener above. */
|
|
548
|
+
function isBrowserLease(url: string): boolean {
|
|
549
|
+
return new URL(url).pathname === "/api/v2/browser-lease";
|
|
550
|
+
}
|
|
551
|
+
|
|
543
552
|
async function assertCostPagination(
|
|
544
553
|
page: Page,
|
|
545
554
|
surface: Locator,
|
|
@@ -169,7 +169,11 @@ test("renders the modern read-only dashboard and meets accessibility gates", asy
|
|
|
169
169
|
const initialUrl = new URL(initialResponse.url());
|
|
170
170
|
expect(initialUrl.searchParams.has("from")).toBe(false);
|
|
171
171
|
expect(initialUrl.searchParams.has("to")).toBe(false);
|
|
172
|
-
|
|
172
|
+
// Identity is loaded independently; both the initial title and the title
|
|
173
|
+
// with the observed repository identify the same accessible navigation.
|
|
174
|
+
await expect(
|
|
175
|
+
page.getByRole("navigation", { name: /^Dashboard Zaip AIOS(?: .+)? menu$/ }),
|
|
176
|
+
).toBeVisible();
|
|
173
177
|
const capabilityNav = page.getByRole("navigation", { name: "Áreas do dashboard" });
|
|
174
178
|
const globalControls = page.locator(".dashboard-global-controls");
|
|
175
179
|
await expect(capabilityNav).toBeVisible();
|
|
@@ -303,7 +307,8 @@ test("loads a quick Operations summary without full snapshot hydration", async (
|
|
|
303
307
|
await expect(page.getByRole("heading", { name: "Status das PRDs" })).toBeVisible();
|
|
304
308
|
await expect(page.getByRole("heading", { name: "Top 5 PRDs" })).toBeVisible();
|
|
305
309
|
await expect(page.locator(".operations-run-bar").first()).toBeVisible();
|
|
306
|
-
|
|
310
|
+
// Quick already contains the macro counts, chart data and Top 5 asserted above.
|
|
311
|
+
expect(operationsRequests.some((url) => url.includes("scope=detail"))).toBe(false);
|
|
307
312
|
|
|
308
313
|
await selectOperations(page);
|
|
309
314
|
await expect(page.getByLabel("Kanban de trabalho")).toBeVisible();
|
|
@@ -418,7 +423,7 @@ test("embeds traceability and keeps global settings and help available", async (
|
|
|
418
423
|
await page.getByRole("button", { name: "Fechar ajuda" }).click();
|
|
419
424
|
});
|
|
420
425
|
|
|
421
|
-
test("
|
|
426
|
+
test("filters the all-work board into Tasks, SPECs and PRDs after hydration", async ({ page }) => {
|
|
422
427
|
await openDashboard(page);
|
|
423
428
|
await selectPopulatedAllTime(page);
|
|
424
429
|
await selectOperations(page);
|
|
@@ -427,15 +432,25 @@ test("groups macro work in All and reveals descendant Tasks only in Tasks", asyn
|
|
|
427
432
|
const allItemCount = await boardItemCount(board);
|
|
428
433
|
|
|
429
434
|
await page.getByRole("button", { exact: true, name: "Tarefas" }).click();
|
|
435
|
+
await expect(page.getByRole("button", { exact: true, name: "Tarefas" })).toHaveClass("is-active");
|
|
436
|
+
await expect(
|
|
437
|
+
board.locator(".operations-work-kind.is-spec, .operations-work-kind.is-prd"),
|
|
438
|
+
).toHaveCount(0);
|
|
430
439
|
const taskItemCount = await boardItemCount(board);
|
|
431
440
|
expect(allItemCount).toBeGreaterThan(taskItemCount);
|
|
432
441
|
|
|
433
442
|
await page.getByRole("button", { exact: true, name: "SPECs" }).click();
|
|
443
|
+
await expect(page.getByRole("button", { exact: true, name: "SPECs" })).toHaveClass("is-active");
|
|
444
|
+
await expect(
|
|
445
|
+
board.locator(".operations-work-kind.is-task, .operations-work-kind.is-prd"),
|
|
446
|
+
).toHaveCount(0);
|
|
434
447
|
const spec = page
|
|
435
448
|
.locator(".operations-work-card")
|
|
436
449
|
.filter({ has: page.locator(".operations-work-kind.is-spec") })
|
|
437
450
|
.first();
|
|
438
|
-
|
|
451
|
+
// The quick projection already supplies global totals; a temporarily empty
|
|
452
|
+
// paginated DOM does not mean the selected entity collection is empty.
|
|
453
|
+
if ((await boardItemCount(board)) === 0) {
|
|
439
454
|
await expect(
|
|
440
455
|
page.getByLabel("Kanban de trabalho").locator(".operations-task-card"),
|
|
441
456
|
).toHaveCount(0);
|
|
@@ -448,11 +463,15 @@ test("groups macro work in All and reveals descendant Tasks only in Tasks", asyn
|
|
|
448
463
|
}
|
|
449
464
|
|
|
450
465
|
await page.getByRole("button", { exact: true, name: "PRDs" }).click();
|
|
466
|
+
await expect(page.getByRole("button", { exact: true, name: "PRDs" })).toHaveClass("is-active");
|
|
467
|
+
await expect(
|
|
468
|
+
board.locator(".operations-work-kind.is-task, .operations-work-kind.is-spec"),
|
|
469
|
+
).toHaveCount(0);
|
|
451
470
|
const prd = page
|
|
452
471
|
.locator(".operations-work-card")
|
|
453
472
|
.filter({ has: page.locator(".operations-work-kind.is-prd") })
|
|
454
473
|
.first();
|
|
455
|
-
if ((await
|
|
474
|
+
if ((await boardItemCount(board)) === 0) {
|
|
456
475
|
await expect(
|
|
457
476
|
page.getByLabel("Kanban de trabalho").locator(".operations-task-card"),
|
|
458
477
|
).toHaveCount(0);
|
|
@@ -540,6 +559,12 @@ test("shows the observed all-time macro duration consistently for SPEC and PRD",
|
|
|
540
559
|
test("loads monthly overview quickly and keeps PRD and SPEC chart totals reconciled", async ({
|
|
541
560
|
page,
|
|
542
561
|
}) => {
|
|
562
|
+
const fullDetailRequests: string[] = [];
|
|
563
|
+
page.on("request", (request) => {
|
|
564
|
+
const url = new URL(request.url());
|
|
565
|
+
if (url.pathname === "/api/v2/operations" && url.searchParams.get("scope") === "detail")
|
|
566
|
+
fullDetailRequests.push(url.href);
|
|
567
|
+
});
|
|
543
568
|
const openedAt = Date.now();
|
|
544
569
|
const initialQuickResponse = await openDashboard(page);
|
|
545
570
|
expect(Date.now() - openedAt).toBeLessThan(3_000);
|
|
@@ -601,6 +626,9 @@ test("loads monthly overview quickly and keeps PRD and SPEC chart totals reconci
|
|
|
601
626
|
expect(donutCount).toBe(cardCount);
|
|
602
627
|
expect(statusCounts.reduce((sum, value) => sum + Number(value), 0)).toBe(cardCount);
|
|
603
628
|
expect(classificationCounts.reduce((sum, value) => sum + Number(value), 0)).toBe(cardCount);
|
|
629
|
+
// Macro metrics are already present in the exact quick response below.
|
|
630
|
+
// Clicking their cards must not start an unrelated full-history request.
|
|
631
|
+
expect(fullDetailRequests).toEqual([]);
|
|
604
632
|
|
|
605
633
|
const macroKey = kind === "SPECs" ? "specs" : "prds";
|
|
606
634
|
const macroDuration =
|
|
@@ -671,7 +699,20 @@ test("keeps aggregate KPIs visible without an obsolete coverage overlay", async
|
|
|
671
699
|
await expect(page.locator(".operations-coverage-toast")).toHaveCount(0);
|
|
672
700
|
await expect(page.getByRole("article", { name: /Tempo total de execu/ })).toBeVisible();
|
|
673
701
|
await expect(page.getByRole("article", { name: /Tokens gastos/ })).toBeVisible();
|
|
674
|
-
|
|
702
|
+
const cost = page.getByRole("article", {
|
|
703
|
+
name: /^Custo Estimado:/,
|
|
704
|
+
});
|
|
705
|
+
await expect(cost).toBeVisible();
|
|
706
|
+
await expect(cost.locator("small")).toContainText(/\/ tarefa .*\/ hora/);
|
|
707
|
+
await expect(cost).not.toContainText("Subtotal estimado conhecido");
|
|
708
|
+
if (await cost.getAttribute("aria-description")) {
|
|
709
|
+
await expect(cost).toHaveAttribute("aria-description", /runs com custo conhecido/);
|
|
710
|
+
await expect(cost.locator("small")).toHaveText(
|
|
711
|
+
/R\$\s*[\d.,]+ \/ tarefa \(R\$\s*[\d.,]+ \/ hora\)/,
|
|
712
|
+
);
|
|
713
|
+
await expect(cost).not.toContainText("ⓘ");
|
|
714
|
+
await expect(cost).not.toContainText("indisponíveis por cobertura parcial");
|
|
715
|
+
}
|
|
675
716
|
});
|
|
676
717
|
|
|
677
718
|
async function openDashboard(page: import("@playwright/test").Page) {
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { expect, test } from "@playwright/test";
|
|
2
|
+
|
|
3
|
+
test("keeps the suite-owned runtime alive across closed browser pages", async ({
|
|
4
|
+
page,
|
|
5
|
+
request,
|
|
6
|
+
}) => {
|
|
7
|
+
await page.goto("/");
|
|
8
|
+
await page.close();
|
|
9
|
+
// Production launcher expiry is 12s: a replacement page must not race that deadline.
|
|
10
|
+
await new Promise((resolve) => setTimeout(resolve, 13_000));
|
|
11
|
+
const response = await request.get("/api/v2/health");
|
|
12
|
+
expect(response.status()).toBe(200);
|
|
13
|
+
expect(await response.json()).toMatchObject({ status: "ok" });
|
|
14
|
+
});
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
|
|
4
|
+
// Entirely synthetic acceptance fixtures, never real lifecycle evidence.
|
|
5
|
+
const at = "2026-01-01T02:30:00.000Z"; // 2025-12-31 in Sao Paulo.
|
|
6
|
+
export const cases = [
|
|
7
|
+
{ suffix: "COMPLETE-A001", status: "completed", tokens: 15 },
|
|
8
|
+
{ suffix: "FAILED-A002", status: "failed", tokens: null },
|
|
9
|
+
{ suffix: "BLOCKED-A003", status: "blocked", tokens: 0 },
|
|
10
|
+
].map((value) => ({
|
|
11
|
+
...value,
|
|
12
|
+
task: `TASK-2026-01-01-00-00-${value.suffix}`,
|
|
13
|
+
change: `CHG-2026-01-01-00-00-${value.suffix}`,
|
|
14
|
+
run: `RUN-2026-01-01-00-00-${value.suffix}`,
|
|
15
|
+
}));
|
|
16
|
+
|
|
17
|
+
async function put(root, file, content) {
|
|
18
|
+
const target = join(root, file);
|
|
19
|
+
await mkdir(dirname(target), { recursive: true });
|
|
20
|
+
await writeFile(target, content, "utf8");
|
|
21
|
+
}
|
|
22
|
+
const markdown = (data) =>
|
|
23
|
+
`---\n${Object.entries(data)
|
|
24
|
+
.map(([key, value]) => `${key}: ${JSON.stringify(value)}`)
|
|
25
|
+
.join("\n")}\n---\n\n# Synthetic observability qualification fixture\n`;
|
|
26
|
+
|
|
27
|
+
export async function createObservabilityFixture(root) {
|
|
28
|
+
await put(
|
|
29
|
+
root,
|
|
30
|
+
".agents/config/project.yaml",
|
|
31
|
+
"schema_version: 1\nzaip:\n enabled: true\nproject:\n id: synthetic-observability\n name: Synthetic observability\n timezone: America/Sao_Paulo\nstack:\n id: zaip-aios-stack\n overrides: {}\nclients:\n codex: true\n claude: true\ntracking:\n enabled: true\n currency: BRL\n storage_mode: tracked_sanitized\n",
|
|
32
|
+
);
|
|
33
|
+
await put(
|
|
34
|
+
root,
|
|
35
|
+
".agents/config/framework.lock.yaml",
|
|
36
|
+
"lock_version: 1\nframework:\n version: 2.6.0\n distribution_sha256: null\nlayout:\n version: 3\nresolved_profile:\n id: null\n sha256: null\nmanaged_files: {}\n",
|
|
37
|
+
);
|
|
38
|
+
for (const item of cases) {
|
|
39
|
+
const task = {
|
|
40
|
+
schema_version: 2,
|
|
41
|
+
id: item.task,
|
|
42
|
+
revision: 1,
|
|
43
|
+
change_id: item.change,
|
|
44
|
+
title: `Synthetic ${item.status}`,
|
|
45
|
+
short_name: item.suffix,
|
|
46
|
+
objective: "Synthetic cross-layer regression",
|
|
47
|
+
status: item.status,
|
|
48
|
+
attempt_count: item.status === "completed" ? 2 : 1,
|
|
49
|
+
risk: "standard",
|
|
50
|
+
priority: "medium",
|
|
51
|
+
owner: null,
|
|
52
|
+
requirement_ids: ["REQ-SYNTHETIC-001"],
|
|
53
|
+
acceptance_ids: ["AC-SYNTHETIC-001"],
|
|
54
|
+
depends_on: [],
|
|
55
|
+
write_scopes: ["synthetic/**"],
|
|
56
|
+
plan_revision: 1,
|
|
57
|
+
plan_hash: "a".repeat(64),
|
|
58
|
+
created_at: at,
|
|
59
|
+
updated_at: at,
|
|
60
|
+
started_at: at,
|
|
61
|
+
finished_at: item.status === "blocked" ? null : at,
|
|
62
|
+
result:
|
|
63
|
+
item.status === "blocked"
|
|
64
|
+
? null
|
|
65
|
+
: {
|
|
66
|
+
summary: "Synthetic terminal fixture, not real approval",
|
|
67
|
+
changed_files: [],
|
|
68
|
+
evidence_ids: ["EVD-SYNTHETIC-FIXTURE"],
|
|
69
|
+
completed_run_id: item.run,
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
const change = {
|
|
73
|
+
schema_version: 2,
|
|
74
|
+
id: item.change,
|
|
75
|
+
revision: 1,
|
|
76
|
+
title: task.title,
|
|
77
|
+
status: item.status,
|
|
78
|
+
risk: "standard",
|
|
79
|
+
source: { type: "task", task_id: item.task },
|
|
80
|
+
requirement_ids: task.requirement_ids,
|
|
81
|
+
acceptance_ids: task.acceptance_ids,
|
|
82
|
+
requirement_impact: { type: "none", reason: "Synthetic fixture" },
|
|
83
|
+
task_ids: [item.task],
|
|
84
|
+
plan_revision: 1,
|
|
85
|
+
plan_hash: task.plan_hash,
|
|
86
|
+
created_at: at,
|
|
87
|
+
updated_at: at,
|
|
88
|
+
started_at: at,
|
|
89
|
+
finished_at: task.finished_at,
|
|
90
|
+
result: item.status === "blocked" ? null : "Synthetic fixture",
|
|
91
|
+
};
|
|
92
|
+
await put(root, `.agents/records/tasks/2026/01/${item.task}.md`, markdown(task));
|
|
93
|
+
await put(root, `.agents/records/changes/2026/01/${item.change}/change.md`, markdown(change));
|
|
94
|
+
const common = { schema_version: 2, run_id: item.run, occurred_at: at, phase: "execution" };
|
|
95
|
+
const records = [
|
|
96
|
+
{
|
|
97
|
+
...common,
|
|
98
|
+
event_id: `${item.run}:1`,
|
|
99
|
+
sequence: 1,
|
|
100
|
+
type: "run.started",
|
|
101
|
+
attribution_status: "attributed",
|
|
102
|
+
run_role: "orchestrator",
|
|
103
|
+
run_purpose: "execution",
|
|
104
|
+
requires_finalizer: false,
|
|
105
|
+
execution_kind: "delivery",
|
|
106
|
+
execution_eligibility: ["delivery"],
|
|
107
|
+
entrypoint: "task",
|
|
108
|
+
work_type: item.status === "completed" ? "rework" : "new",
|
|
109
|
+
storage_mode: "tracked_sanitized",
|
|
110
|
+
client: "codex",
|
|
111
|
+
agent: "synthetic-agent",
|
|
112
|
+
agent_name: "synthetic-agent",
|
|
113
|
+
provider: "openai",
|
|
114
|
+
model: "synthetic-model",
|
|
115
|
+
reasoning_effort: null,
|
|
116
|
+
client_thread_id: `synthetic-${item.suffix}`,
|
|
117
|
+
client_turn_id: `synthetic-turn-${item.suffix}`,
|
|
118
|
+
conversation_id: `CONV-SYNTHETIC-${item.suffix}`,
|
|
119
|
+
execution_id: `EXEC-SYNTHETIC-${item.suffix}`,
|
|
120
|
+
task_id: item.task,
|
|
121
|
+
spec_id: null,
|
|
122
|
+
prd_id: null,
|
|
123
|
+
change_id: item.change,
|
|
124
|
+
parent_run_id: null,
|
|
125
|
+
continuation_of_run_id: null,
|
|
126
|
+
retry_of_run_id: item.status === "completed" ? `${item.run}-PRIOR` : null,
|
|
127
|
+
},
|
|
128
|
+
];
|
|
129
|
+
if (item.tokens !== null)
|
|
130
|
+
records.push({
|
|
131
|
+
...common,
|
|
132
|
+
event_id: `${item.run}:2`,
|
|
133
|
+
sequence: 2,
|
|
134
|
+
type: "usage.recorded",
|
|
135
|
+
activity_kind: "model_usage",
|
|
136
|
+
classification_source: "explicit",
|
|
137
|
+
tokens: {
|
|
138
|
+
input: item.tokens,
|
|
139
|
+
cached_input: 0,
|
|
140
|
+
output: 0,
|
|
141
|
+
reasoning: 0,
|
|
142
|
+
total: item.tokens,
|
|
143
|
+
source: "provider_reported",
|
|
144
|
+
},
|
|
145
|
+
cost: { usd: null, brl: null, fx_rate: null },
|
|
146
|
+
provider: "openai",
|
|
147
|
+
model: "synthetic-model",
|
|
148
|
+
source_segment_key: `synthetic-${item.suffix}`,
|
|
149
|
+
supersedes_event_id: null,
|
|
150
|
+
});
|
|
151
|
+
records.push({
|
|
152
|
+
...common,
|
|
153
|
+
event_id: `${item.run}:${records.length + 1}`,
|
|
154
|
+
sequence: records.length + 1,
|
|
155
|
+
type: "run.finished",
|
|
156
|
+
status: item.status === "failed" ? "failed" : "completed",
|
|
157
|
+
duration_ms: null,
|
|
158
|
+
duration_provenance: null,
|
|
159
|
+
});
|
|
160
|
+
await put(
|
|
161
|
+
root,
|
|
162
|
+
`.agents/records/runs/2026/01/${item.run}.jsonl`,
|
|
163
|
+
`${records.map((record) => JSON.stringify(record)).join("\n")}\n`,
|
|
164
|
+
);
|
|
165
|
+
if (item.status === "completed") {
|
|
166
|
+
for (const kind of ["PRIOR", "FINALIZER"]) {
|
|
167
|
+
const runId = `${item.run}-${kind}`;
|
|
168
|
+
const extra = records.map((record, index) => ({
|
|
169
|
+
...record,
|
|
170
|
+
run_id: runId,
|
|
171
|
+
event_id: `${runId}:${index + 1}`,
|
|
172
|
+
}));
|
|
173
|
+
Object.assign(extra[0], {
|
|
174
|
+
run_role: kind === "FINALIZER" ? "subagent" : "orchestrator",
|
|
175
|
+
run_purpose: kind === "FINALIZER" ? "finalization" : "execution",
|
|
176
|
+
agent: kind === "FINALIZER" ? "zaip-agent-finalizer" : "synthetic-agent",
|
|
177
|
+
agent_name: kind === "FINALIZER" ? "zaip-agent-finalizer" : "synthetic-agent",
|
|
178
|
+
parent_run_id: kind === "FINALIZER" ? item.run : null,
|
|
179
|
+
retry_of_run_id: null,
|
|
180
|
+
client_turn_id: `synthetic-turn-${kind}`,
|
|
181
|
+
});
|
|
182
|
+
extra[1].tokens = {
|
|
183
|
+
input: 0,
|
|
184
|
+
cached_input: 0,
|
|
185
|
+
output: 0,
|
|
186
|
+
reasoning: 0,
|
|
187
|
+
total: 0,
|
|
188
|
+
source: "provider_reported",
|
|
189
|
+
};
|
|
190
|
+
extra.at(-1).status = kind === "PRIOR" ? "failed" : "completed";
|
|
191
|
+
await put(
|
|
192
|
+
root,
|
|
193
|
+
`.agents/records/runs/2026/01/${runId}.jsonl`,
|
|
194
|
+
`${extra.map((record) => JSON.stringify(record)).join("\n")}\n`,
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return cases;
|
|
200
|
+
}
|