@zaip-ai/cli 1.3.7 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +26 -0
- 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 +3 -1
- 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-install.d.ts +14 -0
- package/dist/services/stack-install.d.ts.map +1 -0
- package/dist/services/stack-install.js +176 -0
- package/dist/services/stack-install.js.map +1 -0
- package/dist/services/stack-node.d.ts +12 -0
- package/dist/services/stack-node.d.ts.map +1 -0
- package/dist/services/stack-node.js +150 -0
- package/dist/services/stack-node.js.map +1 -0
- package/dist/services/stack-package-manager.d.ts +12 -0
- package/dist/services/stack-package-manager.d.ts.map +1 -0
- package/dist/services/stack-package-manager.js +178 -0
- package/dist/services/stack-package-manager.js.map +1 -0
- package/dist/services/stack-plan.d.ts +35 -0
- package/dist/services/stack-plan.d.ts.map +1 -0
- package/dist/services/stack-plan.js +130 -0
- package/dist/services/stack-plan.js.map +1 -0
- 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 +4 -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 +214 -94
- 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--czwAlcH.js → DashboardHelpDialog-oZVlf-l5.js} +787 -723
- 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/{ProjectSettingsPage-BomxqCBU.css → ProjectSettingsPage-GgzpZ_PY.css} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{TraceabilityWorkspace-CAqYVin1.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/ProjectSettingsPage.tsx +15 -2
- package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +33 -6
- 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 +9 -8
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-model.ts +15 -3
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +0 -104
- package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +61 -0
- package/templates/.agents/dashboard/apps/frontend/src/project-stack-versions.css +117 -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 +477 -327
- 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 +243 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +252 -41
- 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/stack-dependencies.json +14 -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 +613 -173
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-B_Oj6Dlf.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-CblPpexd.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,6 +1,5 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
import { queryInvocationManifestPeriod } from "@zaip-ai/costs";
|
|
3
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
+
import type { CostGroupRow } from "../contracts.js";
|
|
4
3
|
import { displayModelName, isModelAuditRow, sumModelDurationMs } from "./CostModelsAuditTable.js";
|
|
5
4
|
import {
|
|
6
5
|
agentRunModelPresentation,
|
|
@@ -140,10 +139,10 @@ describe("monetary formatting", () => {
|
|
|
140
139
|
expect(ratio(106.73, 19.583444)).toBeCloseTo(5.45, 2);
|
|
141
140
|
expect(ratio(100, 0)).toBeNull();
|
|
142
141
|
});
|
|
143
|
-
it("
|
|
142
|
+
it("keeps unavailable cost metrics distinct from zero", () => {
|
|
144
143
|
expect(formatRate(null, "pt-BR")).toBe("0,00");
|
|
145
144
|
expect(formatUsd(null, "en-US")).toContain("0.00");
|
|
146
|
-
expect(formatAuditableCurrency(null, "BRL", "pt-BR")).
|
|
145
|
+
expect(formatAuditableCurrency(null, "BRL", "pt-BR")).toBe("Indisponível");
|
|
147
146
|
expect(formatAuditableDuration(null, "pt-BR")).toBe("Indisponível");
|
|
148
147
|
expect(formatAuditableCompactNumber(null, "pt-BR")).toBe("0");
|
|
149
148
|
});
|
|
@@ -384,11 +383,11 @@ describe("grouped cost availability", () => {
|
|
|
384
383
|
expect(table.props.scrollLabel).toBe(costGroupsScrollLabel("pt-BR"));
|
|
385
384
|
expect(column("duration")?.render(unavailableGroup)).toBe("Indisponível");
|
|
386
385
|
expect(column("tokens")?.render(unavailableGroup)).toBe("0");
|
|
387
|
-
expect(column("cost")?.render(unavailableGroup)).
|
|
386
|
+
expect(column("cost")?.render(unavailableGroup)).toBe("Indisponível");
|
|
388
387
|
expect(column("duration")?.sortValue?.(unavailableGroup)).toBeNull();
|
|
389
388
|
expect(column("tokens")?.sortValue?.(unavailableGroup)).toBeNull();
|
|
390
389
|
expect(column("cost")?.sortValue?.(unavailableGroup)).toBeNull();
|
|
391
|
-
const totalSummary = "Total geral — Tempo: Indisponível; Tokens: 0; BRL:
|
|
390
|
+
const totalSummary = "Total geral — Tempo: Indisponível; Tokens: 0; BRL: Indisponível";
|
|
392
391
|
const footerLabel = (key: string) => {
|
|
393
392
|
const footer = column(key)?.footer as { props?: { "aria-label"?: string } } | undefined;
|
|
394
393
|
return footer?.props?.["aria-label"];
|
|
@@ -462,9 +461,36 @@ describe("grouped cost availability", () => {
|
|
|
462
461
|
expect(columns.find((column) => column.key === "job")?.render?.({ job: "Builder" })).toBe(
|
|
463
462
|
"Builder",
|
|
464
463
|
);
|
|
465
|
-
expect(columns.find((column) => column.key === "tasks")).
|
|
464
|
+
expect(columns.find((column) => column.key === "tasks")?.label).toBe("Tarefas");
|
|
466
465
|
expect(table.props.defaultSort).toEqual({ key: "cost", direction: "desc" });
|
|
467
466
|
});
|
|
467
|
+
|
|
468
|
+
it("renders missing Agent numeric metrics as zero, keeping model rendering independent", () => {
|
|
469
|
+
const missing: CostGroupRow = {
|
|
470
|
+
...unavailableGroup,
|
|
471
|
+
task_count: null,
|
|
472
|
+
prd_count: null,
|
|
473
|
+
spec_count: null,
|
|
474
|
+
test_count: null,
|
|
475
|
+
evidence_count: null,
|
|
476
|
+
};
|
|
477
|
+
const table = CostGroupsTable({
|
|
478
|
+
rows: [missing],
|
|
479
|
+
currency: "BRL",
|
|
480
|
+
locale: "pt-BR",
|
|
481
|
+
showAgentIdentity: true,
|
|
482
|
+
});
|
|
483
|
+
const columns = table.props.columns as Array<{
|
|
484
|
+
key: string;
|
|
485
|
+
render?: (row: CostGroupRow) => unknown;
|
|
486
|
+
footer?: unknown;
|
|
487
|
+
}>;
|
|
488
|
+
for (const key of ["tasks", "prds", "specs", "tests", "evidences", "duration", "tokens"]) {
|
|
489
|
+
expect(columns.find((c) => c.key === key)?.render?.(missing)).toBe("0");
|
|
490
|
+
}
|
|
491
|
+
expect(columns.find((c) => c.key === "cost")?.render?.(missing)).not.toContain("Indisponível");
|
|
492
|
+
});
|
|
493
|
+
|
|
468
494
|
it("keeps legacy codex identity fields blank and uses the complete paged aggregate in its footer", () => {
|
|
469
495
|
const table = CostGroupsTable({
|
|
470
496
|
rows: [
|
|
@@ -518,6 +544,123 @@ describe("grouped cost availability", () => {
|
|
|
518
544
|
expect(columns.find((column) => column.key === "latestStartedAt")?.hidden).toBe(true);
|
|
519
545
|
expect(columns.find((column) => column.key === "tasks")?.label).toBe("Tarefas com invocação");
|
|
520
546
|
});
|
|
547
|
+
it("renders the requested model-analysis columns with explicit numeric zeroes", () => {
|
|
548
|
+
const model: CostGroupRow = {
|
|
549
|
+
...unavailableGroup,
|
|
550
|
+
key: "gpt-6-astra",
|
|
551
|
+
label: "gpt-6-astra",
|
|
552
|
+
prd_count: 2,
|
|
553
|
+
spec_count: 3,
|
|
554
|
+
task_count: null,
|
|
555
|
+
run_count: 8,
|
|
556
|
+
test_count: null,
|
|
557
|
+
evidence_count: 1,
|
|
558
|
+
conversation_count: 0,
|
|
559
|
+
};
|
|
560
|
+
const table = CostGroupsTable({
|
|
561
|
+
rows: [model],
|
|
562
|
+
currency: "BRL",
|
|
563
|
+
locale: "pt-BR",
|
|
564
|
+
showDateTime: false,
|
|
565
|
+
showModelLifecycleDetails: true,
|
|
566
|
+
totals: {
|
|
567
|
+
...model,
|
|
568
|
+
prd_count: 2,
|
|
569
|
+
spec_count: 3,
|
|
570
|
+
task_count: null,
|
|
571
|
+
test_count: null,
|
|
572
|
+
evidence_count: 1,
|
|
573
|
+
},
|
|
574
|
+
});
|
|
575
|
+
const columns = table.props.columns as Array<{
|
|
576
|
+
key: string;
|
|
577
|
+
label: string;
|
|
578
|
+
render?: (row: typeof model) => unknown;
|
|
579
|
+
sortValue?: (row: typeof model) => unknown;
|
|
580
|
+
description?: string;
|
|
581
|
+
}>;
|
|
582
|
+
expect(columns.map((column) => column.key).filter((key) => key !== "latestStartedAt")).toEqual([
|
|
583
|
+
"label",
|
|
584
|
+
"prds",
|
|
585
|
+
"specs",
|
|
586
|
+
"tasks",
|
|
587
|
+
"conversations",
|
|
588
|
+
"runs",
|
|
589
|
+
"tests",
|
|
590
|
+
"evidences",
|
|
591
|
+
"duration",
|
|
592
|
+
"tokens",
|
|
593
|
+
"cost",
|
|
594
|
+
]);
|
|
595
|
+
expect(columns.find((column) => column.key === "tasks")?.label).toBe("Tasks");
|
|
596
|
+
expect(columns.find((column) => column.key === "tasks")?.render?.(model)).toBe("0");
|
|
597
|
+
expect(columns.find((column) => column.key === "conversations")?.render?.(model)).toBe("0");
|
|
598
|
+
expect(columns.find((column) => column.key === "conversations")?.description).toContain(
|
|
599
|
+
"unassisted",
|
|
600
|
+
);
|
|
601
|
+
expect(columns.find((column) => column.key === "tasks")?.description).toContain(
|
|
602
|
+
"creation_run_id",
|
|
603
|
+
);
|
|
604
|
+
expect(columns.find((column) => column.key === "runs")?.description).toContain(
|
|
605
|
+
"sem distribuir",
|
|
606
|
+
);
|
|
607
|
+
for (const key of ["prds", "specs", "tasks", "conversations", "runs", "tests", "evidences"])
|
|
608
|
+
expect(columns.find((column) => column.key === key)?.sortValue).toBeDefined();
|
|
609
|
+
expect(columns.find((column) => column.key === "cost")?.label).toBe("Custos");
|
|
610
|
+
expect(
|
|
611
|
+
columns.find((column) => column.key === "tokens")?.render?.({ ...model, total_tokens: null }),
|
|
612
|
+
).toBe("0");
|
|
613
|
+
expect(
|
|
614
|
+
columns.find((column) => column.key === "prds")?.render?.({ ...model, prd_count: null }),
|
|
615
|
+
).toBe("0");
|
|
616
|
+
expect(
|
|
617
|
+
columns.find((column) => column.key === "specs")?.render?.({ ...model, spec_count: null }),
|
|
618
|
+
).toBe("0");
|
|
619
|
+
expect(
|
|
620
|
+
columns.find((column) => column.key === "tests")?.render?.({ ...model, test_count: null }),
|
|
621
|
+
).toBe("0");
|
|
622
|
+
expect(
|
|
623
|
+
columns
|
|
624
|
+
.find((column) => column.key === "evidences")
|
|
625
|
+
?.render?.({ ...model, evidence_count: null }),
|
|
626
|
+
).toBe("0");
|
|
627
|
+
expect(columns.find((column) => column.key === "conversations")?.sortValue?.(model)).toBe(0);
|
|
628
|
+
expect(columns.find((column) => column.key === "tests")?.description).toContain(
|
|
629
|
+
"Run registradora",
|
|
630
|
+
);
|
|
631
|
+
expect(columns.find((column) => column.key === "evidences")?.description).toContain(
|
|
632
|
+
"Run registradora",
|
|
633
|
+
);
|
|
634
|
+
expect(
|
|
635
|
+
columns
|
|
636
|
+
.find((column) => column.key === "duration")
|
|
637
|
+
?.render?.({
|
|
638
|
+
...model,
|
|
639
|
+
duration: { known_sum: 0, unknown: 1, complete: false, coverage_ratio: 0 },
|
|
640
|
+
}),
|
|
641
|
+
).toBe("0");
|
|
642
|
+
expect(
|
|
643
|
+
columns.find((column) => column.key === "cost")?.render?.({ ...model, estimated_brl: null }),
|
|
644
|
+
).toContain("0,00");
|
|
645
|
+
expect(
|
|
646
|
+
columns
|
|
647
|
+
.find((column) => column.key === "tokens")
|
|
648
|
+
?.sortValue?.({ ...model, total_tokens: null }),
|
|
649
|
+
).toBe(0);
|
|
650
|
+
expect(
|
|
651
|
+
columns
|
|
652
|
+
.find((column) => column.key === "duration")
|
|
653
|
+
?.sortValue?.({
|
|
654
|
+
...model,
|
|
655
|
+
duration: { known_sum: 0, unknown: 1, complete: false, coverage_ratio: 0 },
|
|
656
|
+
}),
|
|
657
|
+
).toBe(0);
|
|
658
|
+
expect(
|
|
659
|
+
columns
|
|
660
|
+
.find((column) => column.key === "cost")
|
|
661
|
+
?.sortValue?.({ ...model, estimated_brl: null }),
|
|
662
|
+
).toBe(0);
|
|
663
|
+
});
|
|
521
664
|
it("keeps a complete observed zero visible without a partial coverage label", () => {
|
|
522
665
|
const observedZeroGroup = {
|
|
523
666
|
...unavailableGroup,
|
|
@@ -649,8 +792,8 @@ describe("grouped cost availability", () => {
|
|
|
649
792
|
expect(column("contextMultiplier")?.render?.(unavailableRun)).toBe("Indisponível");
|
|
650
793
|
expect(column("inputCost")?.render?.(unavailableRun)).toContain("0,00");
|
|
651
794
|
expect(column("fxRate")?.render?.(unavailableRun)).toBe("R$ 0,00");
|
|
652
|
-
expect(column("recordedBrl")?.render?.(unavailableRun)).
|
|
653
|
-
expect(column("cost")?.render?.(unavailableRun)).
|
|
795
|
+
expect(column("recordedBrl")?.render?.(unavailableRun)).toBe("Indisponível");
|
|
796
|
+
expect(column("cost")?.render?.(unavailableRun)).toBe("Indisponível");
|
|
654
797
|
});
|
|
655
798
|
it("provides a clear scroll label for the detailed Runs table", () => {
|
|
656
799
|
expect(costRunsScrollLabel("pt-BR")).toBe(
|
|
@@ -727,154 +870,6 @@ describe("grouped cost availability", () => {
|
|
|
727
870
|
expect(pager.props.pagination.onRetry).toEqual(expect.any(Function));
|
|
728
871
|
});
|
|
729
872
|
});
|
|
730
|
-
describe("manifest-first invocation query", () => {
|
|
731
|
-
it("opens only intersecting monthly manifests and candidate chunks", async () => {
|
|
732
|
-
const inRange = signedSummary({
|
|
733
|
-
agent_invocation_id: "RUN-JULY-OPENAI",
|
|
734
|
-
occurred_at: "2026-07-10T12:00:00.000Z",
|
|
735
|
-
provider: "openai",
|
|
736
|
-
});
|
|
737
|
-
const outOfRange = signedSummary({
|
|
738
|
-
agent_invocation_id: "RUN-JULY-ANTHROPIC",
|
|
739
|
-
occurred_at: "2026-07-20T12:00:00.000Z",
|
|
740
|
-
provider: "anthropic",
|
|
741
|
-
});
|
|
742
|
-
const firstChunk = `${JSON.stringify(inRange)}\n`;
|
|
743
|
-
const secondChunk = `${JSON.stringify(outOfRange)}\n`;
|
|
744
|
-
const manifest = signedManifest({
|
|
745
|
-
period: { year: 2026, month: 7 },
|
|
746
|
-
from: "2026-07-10T12:00:00.000Z",
|
|
747
|
-
to: "2026-07-20T12:00:00.000Z",
|
|
748
|
-
chunks: [
|
|
749
|
-
{
|
|
750
|
-
path: ".agents/records/telemetry/2026/07/chunk-openai.jsonl",
|
|
751
|
-
content_sha256: digest(firstChunk),
|
|
752
|
-
summary_count: 1,
|
|
753
|
-
from: inRange.occurred_at,
|
|
754
|
-
to: inRange.occurred_at,
|
|
755
|
-
summary_hashes: [inRange.summary_hash],
|
|
756
|
-
dimensions: dimensions({ providers: ["openai"] }),
|
|
757
|
-
},
|
|
758
|
-
{
|
|
759
|
-
path: ".agents/records/telemetry/2026/07/chunk-anthropic.jsonl",
|
|
760
|
-
content_sha256: digest(secondChunk),
|
|
761
|
-
summary_count: 1,
|
|
762
|
-
from: outOfRange.occurred_at,
|
|
763
|
-
to: outOfRange.occurred_at,
|
|
764
|
-
summary_hashes: [outOfRange.summary_hash],
|
|
765
|
-
dimensions: dimensions({ providers: ["anthropic"] }),
|
|
766
|
-
},
|
|
767
|
-
],
|
|
768
|
-
});
|
|
769
|
-
const reads: string[] = [];
|
|
770
|
-
const openaiChunkPath = manifest.chunks[0]?.path;
|
|
771
|
-
const anthropicChunkPath = manifest.chunks[1]?.path;
|
|
772
|
-
if (openaiChunkPath === undefined || anthropicChunkPath === undefined) {
|
|
773
|
-
throw new Error("Expected two manifest chunks");
|
|
774
|
-
}
|
|
775
|
-
const files = new Map<string, string>([
|
|
776
|
-
[".agents/records/telemetry/2026/07/manifest.json", JSON.stringify(manifest)],
|
|
777
|
-
[openaiChunkPath, firstChunk],
|
|
778
|
-
[anthropicChunkPath, secondChunk],
|
|
779
|
-
]);
|
|
780
|
-
const result = await queryInvocationManifestPeriod(
|
|
781
|
-
{
|
|
782
|
-
exists: async (path) => files.has(path),
|
|
783
|
-
readText: async (path) => {
|
|
784
|
-
reads.push(path);
|
|
785
|
-
const value = files.get(path);
|
|
786
|
-
if (value === undefined) throw new Error(`Missing fixture: ${path}`);
|
|
787
|
-
return value;
|
|
788
|
-
},
|
|
789
|
-
},
|
|
790
|
-
{
|
|
791
|
-
from: "2026-07-09",
|
|
792
|
-
to: "2026-07-11",
|
|
793
|
-
filters: { providers: ["openai"] },
|
|
794
|
-
},
|
|
795
|
-
);
|
|
796
|
-
expect(result.summaries.map((summary) => summary.agent_invocation_id)).toEqual([
|
|
797
|
-
"RUN-JULY-OPENAI",
|
|
798
|
-
]);
|
|
799
|
-
expect(result.manifest_count).toBe(1);
|
|
800
|
-
expect(result.chunk_count).toBe(1);
|
|
801
|
-
expect(result.source_latest_at).toBe("2026-07-20T12:00:00.000Z");
|
|
802
|
-
expect(result.lag_ms).toBe(10);
|
|
803
|
-
expect(reads).toEqual([
|
|
804
|
-
".agents/records/telemetry/2026/07/manifest.json",
|
|
805
|
-
".agents/records/telemetry/2026/07/chunk-openai.jsonl",
|
|
806
|
-
]);
|
|
807
|
-
});
|
|
808
|
-
});
|
|
809
|
-
function digest(value: string): string {
|
|
810
|
-
return createHash("sha256").update(value).digest("hex");
|
|
811
|
-
}
|
|
812
|
-
function dimensions(overrides: Partial<Record<string, readonly string[]>> = {}) {
|
|
813
|
-
return {
|
|
814
|
-
providers: [],
|
|
815
|
-
models: [],
|
|
816
|
-
zaip_agents: [],
|
|
817
|
-
phases: [],
|
|
818
|
-
purposes: [],
|
|
819
|
-
statuses: [],
|
|
820
|
-
executions: [],
|
|
821
|
-
tasks: [],
|
|
822
|
-
specs: [],
|
|
823
|
-
prds: [],
|
|
824
|
-
changes: [],
|
|
825
|
-
...overrides,
|
|
826
|
-
};
|
|
827
|
-
}
|
|
828
|
-
function signedSummary(input: {
|
|
829
|
-
agent_invocation_id: string;
|
|
830
|
-
occurred_at: string;
|
|
831
|
-
provider: string;
|
|
832
|
-
}) {
|
|
833
|
-
const unsigned = {
|
|
834
|
-
schema_version: 1,
|
|
835
|
-
agent_invocation_id: input.agent_invocation_id,
|
|
836
|
-
occurred_at: input.occurred_at,
|
|
837
|
-
coverage: "complete",
|
|
838
|
-
usage_segments: [{ provider: input.provider, model: "gpt-5.6-terra" }],
|
|
839
|
-
};
|
|
840
|
-
return { ...unsigned, summary_hash: digest(JSON.stringify(unsigned)) };
|
|
841
|
-
}
|
|
842
|
-
function signedManifest(input: {
|
|
843
|
-
period: { year: number; month: number };
|
|
844
|
-
from: string;
|
|
845
|
-
to: string;
|
|
846
|
-
chunks: Array<{
|
|
847
|
-
path: string;
|
|
848
|
-
content_sha256: string;
|
|
849
|
-
summary_count: number;
|
|
850
|
-
from: string;
|
|
851
|
-
to: string;
|
|
852
|
-
summary_hashes: string[];
|
|
853
|
-
dimensions: ReturnType<typeof dimensions>;
|
|
854
|
-
}>;
|
|
855
|
-
}) {
|
|
856
|
-
const unsigned = {
|
|
857
|
-
schema_version: 1,
|
|
858
|
-
period: input.period,
|
|
859
|
-
summary_count: input.chunks.reduce((sum, chunk) => sum + chunk.summary_count, 0),
|
|
860
|
-
chunk_count: input.chunks.length,
|
|
861
|
-
from: input.from,
|
|
862
|
-
to: input.to,
|
|
863
|
-
source_latest_at: input.to,
|
|
864
|
-
lag_ms: 10,
|
|
865
|
-
coverage: { complete: 2, partial: 0, unavailable: 0 },
|
|
866
|
-
chunks: input.chunks,
|
|
867
|
-
dimensions: dimensions(),
|
|
868
|
-
aggregates: { daily: {}, monthly: {}, annual: {} },
|
|
869
|
-
integrity: {
|
|
870
|
-
status: "verified",
|
|
871
|
-
algorithm: "sha256",
|
|
872
|
-
chunk_count: input.chunks.length,
|
|
873
|
-
summary_count: input.chunks.reduce((sum, chunk) => sum + chunk.summary_count, 0),
|
|
874
|
-
},
|
|
875
|
-
};
|
|
876
|
-
return { ...unsigned, manifest_hash: digest(JSON.stringify(unsigned)) };
|
|
877
|
-
}
|
|
878
873
|
describe("cost sorting", () => {
|
|
879
874
|
it("orders the raw BRL values rather than their localized currency labels", () => {
|
|
880
875
|
const rows = [143.72, 127.78, 21457.76, 1370.63];
|