@zaip-ai/cli 2.2.0 → 2.6.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/dist/services/adapters.d.ts +1 -1
- package/dist/services/adapters.d.ts.map +1 -1
- package/dist/services/adapters.js +23 -9
- package/dist/services/adapters.js.map +1 -1
- package/dist/services/agent-adapters.js +25 -9
- package/dist/services/agent-adapters.js.map +1 -1
- package/dist/services/agent-discovery.d.ts +27 -0
- package/dist/services/agent-discovery.d.ts.map +1 -0
- package/dist/services/agent-discovery.js +73 -0
- package/dist/services/agent-discovery.js.map +1 -0
- package/dist/services/codex-conversation-lifecycle-hook.d.ts.map +1 -1
- package/dist/services/codex-conversation-lifecycle-hook.js +153 -24
- package/dist/services/codex-conversation-lifecycle-hook.js.map +1 -1
- package/dist/services/codex-pre-tool-hook-template.d.ts.map +1 -1
- package/dist/services/codex-pre-tool-hook-template.js +146 -72
- package/dist/services/codex-pre-tool-hook-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 +3 -3
- package/dist/services/codex-subagent-hook-template.d.ts +1 -1
- package/dist/services/codex-subagent-hook-template.d.ts.map +1 -1
- package/dist/services/codex-subagent-hook-template.js +117 -66
- package/dist/services/codex-subagent-hook-template.js.map +1 -1
- package/dist/services/install-agents-template.d.ts.map +1 -1
- package/dist/services/install-agents-template.js +56 -6
- package/dist/services/install-agents-template.js.map +1 -1
- package/dist/services/logger.js +1 -1
- package/dist/services/logger.js.map +1 -1
- package/dist/services/logger.test.js +22 -1
- package/dist/services/logger.test.js.map +1 -1
- package/dist/services/runtime-template.test.js +129 -0
- package/dist/services/runtime-template.test.js.map +1 -1
- package/package.json +1 -1
- package/templates/.agents/.env.example +9 -3
- package/templates/.agents/README-ENG.md +30 -5
- package/templates/.agents/README.md +30 -7
- package/templates/.agents/architecture/software-architecture.md +1 -59
- package/templates/.agents/branding/brandbook.md +3 -0
- package/templates/.agents/config/agents/catalog.yaml +22 -10
- package/templates/.agents/config/agents/discovery.json +319 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-backend.toml +2 -2
- package/templates/.agents/config/clients/codex/agents/zaip-agent-builder.toml +2 -2
- package/templates/.agents/config/clients/codex/agents/zaip-agent-cloud-engineer.toml +11 -8
- package/templates/.agents/config/clients/codex/agents/zaip-agent-designer.toml +2 -2
- package/templates/.agents/config/clients/codex/agents/zaip-agent-frontend.toml +2 -2
- package/templates/.agents/config/clients/codex/agents/zaip-agent-task-executor.toml +2 -2
- package/templates/.agents/config/clients/codex/agents/zaip-agent-website-developer.toml +2 -2
- package/templates/.agents/config/pricing/models.json +9 -5
- package/templates/.agents/config/project.yaml +12 -1
- package/templates/.agents/dashboard/.zaip-managed.json +375 -95
- package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-CGxeQak4.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-DaSllaJp.js → DashboardHelpDialog-tzS7YxYB.js} +57 -33
- package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-DEbCi1gP.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-1L7Qw-Gq.js +3 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-EInWr641.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-t1Om0Abw.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-B6aZfo5f.js +68 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{icons-vendor-TPUT2IUt.js → icons-vendor-DiGC-dsJ.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-DgTmNHN5.js +2 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{react-vendor-Ct48XHGL.js → react-vendor-kPO6yNed.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-Bh1tDfsg.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-DQpKX9c1.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/index.html +6 -6
- package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
- package/templates/.agents/dashboard/apps/frontend/src/App.tsx +3 -1264
- package/templates/.agents/dashboard/apps/frontend/src/AppDashboardContent.tsx +363 -0
- package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.dom.test.ts +99 -0
- package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +62 -6
- package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +3 -1
- package/templates/.agents/dashboard/apps/frontend/src/__tests__/app-composition-support.ts +7 -0
- package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +9 -7
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api-settings.ts +151 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +28 -153
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-app-shell.tsx +33 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-cost-facts.ts +30 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-project-overview.ts +7 -1
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-retry.ts +17 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-setup-route.ts +29 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-view-actions.ts +66 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-period-render.test.ts +3 -2
- package/templates/.agents/dashboard/apps/frontend/src/overview-status-page.test.ts +2 -2
- package/templates/.agents/dashboard/apps/frontend/src/project-installation-status.test.ts +48 -0
- package/templates/.agents/dashboard/apps/frontend/src/project-installation-status.ts +29 -0
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +68 -0
- package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +2 -2
- package/templates/.agents/dashboard/apps/frontend/src/sao-paulo-day-rollover.test.ts +36 -0
- package/templates/.agents/dashboard/apps/frontend/src/sao-paulo-day-rollover.ts +30 -0
- package/templates/.agents/dashboard/apps/frontend/src/snapshot-banner-semantics.test.ts +2 -5
- package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +30 -19
- package/templates/.agents/dashboard/apps/frontend/src/use-app-effects.ts +9 -1
- package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-task-pagination.ts +77 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-work-board.ts +397 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-dashboard-app-model.tsx +782 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-snapshot-notice.tsx +49 -0
- package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostDeveloperPanelSlot.tsx +16 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostGroupsTable.tsx +459 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.test.ts +27 -17
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +62 -186
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorRunDialog.tsx +20 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables-hides-calls-that-have-no-collected.test.ts +80 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables-keeps-legacy-codex-identity-fields-blank.test.ts +455 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +18 -525
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.tsx +32 -508
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-export-sources.ts +74 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-actions.ts +19 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-selectors.ts +49 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-table-formatters.ts +115 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.test-fixtures.ts +2 -0
- package/templates/.agents/dashboard/modules/operations/package.json +1 -1
- package/templates/.agents/dashboard/modules/operations/src/contracts.ts +4 -0
- package/templates/.agents/dashboard/modules/operations/src/react/EntityTableBadges.tsx +34 -0
- package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.tsx +8 -38
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview-keeps-structure-classes-mutually-exclusive.test.ts +243 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.test.ts +27 -275
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.tsx +70 -247
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverviewCharts.tsx +171 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverviewPanels.tsx +64 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +4 -3
- package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.test.tsx +2 -1
- package/templates/.agents/dashboard/modules/operations/src/react/manual-work-priority.test.ts +2 -1
- package/templates/.agents/dashboard/modules/operations/src/react/operations-coverage-toast.test.ts +6 -2
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +6 -14
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview.status-cards.test.ts +3 -1
- package/templates/.agents/dashboard/modules/operations/src/react/operations-page-contract.ts +2 -0
- package/templates/.agents/dashboard/modules/operations/src/react/overview-metric-format.ts +32 -0
- 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/branding/src/index.ts +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 +1458 -1458
- package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +1425 -1425
- package/templates/.agents/dashboard/packages/local-runtime/package.json +2 -1
- package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +7 -3
- package/templates/.agents/dashboard/packages/local-runtime/server.mjs +1458 -1459
- package/templates/.agents/dashboard/packages/local-runtime/src/active-codex-telemetry.ts +25 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.test.ts +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +53 -8
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +79 -24
- package/templates/.agents/dashboard/packages/local-runtime/src/projection-refresh-diagnostics.ts +35 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-costs-routes.ts +168 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-dual-reads-manifest-summaries-without-losing.test.ts +344 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-http-contracts.ts +31 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-routes.ts +345 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-read-projections.ts +461 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-reconciliation-refresh.test.ts +78 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-route-context.ts +13 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.test.ts +18 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.ts +19 -3
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot.test.ts +22 -21
- package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-view-allowlist.test.ts +25 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-trace-routes.ts +64 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.test.ts +2 -30
- package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.ts +6 -23
- package/templates/.agents/dashboard/packages/local-runtime/src/server.test-fixtures.ts +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +2 -330
- package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +73 -1060
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-first-fold.ts +78 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-projections.ts +561 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-runs.ts +600 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.test.ts +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-agent-dimension.ts +269 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-context.ts +32 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-entity-group.ts +244 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-filtered-dimension.ts +292 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-financial.ts +547 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-model-dimension.ts +360 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-provider-dimension.ts +169 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-summary.ts +475 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-temporal-dimension.ts +132 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-timing.ts +299 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-view-page.ts +692 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-counts-every-root-execution-day-returns.test.ts +739 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-does-not-convert-delayed-historical-finalizer.test.ts +706 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-filesystem.ts +748 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-first-fold-types.ts +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-keeps-orphan-telemetry-out-kanban-without.test.ts +710 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-marks-token-cost-telemetry-unavailable-when.test.ts +618 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-rebuild.ts +755 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-rebuilds-disposable-snapshot-serves-zaip-records.test.ts +276 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-schema.ts +193 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-types.ts +123 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +1 -2805
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.ts +17 -6930
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-schema-base-views.ts +385 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-schema-dashboard-views.ts +412 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/work-priority-contract.test.ts +4 -3
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-build.mjs +195 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-lifecycle.test.mjs +2 -7
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-logging.mjs +35 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-navigation.mjs +114 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-paths.mjs +90 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +89 -418
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +22 -12
- package/templates/.agents/dashboard/packages/ui/package.json +1 -1
- package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
- package/templates/.agents/dashboard/tests/e2e/playwright.config.ts +4 -1
- package/templates/.agents/design/.zaip-managed.json +5 -5
- package/templates/.agents/design/DESIGN.md +2 -186
- package/templates/.agents/design/README.md +12 -2
- package/templates/.agents/design/apps/catalog/package.json +1 -1
- package/templates/.agents/design/packages/local-runtime/package.json +1 -1
- package/templates/.agents/growth/strategy.md +3 -0
- package/templates/.agents/marketing/strategy.md +3 -0
- package/templates/.agents/requirements/autonomous-assurance.md +2 -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 +13 -4
- 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 +4 -2
- 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 +3 -3
- package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
- package/templates/.agents/rules/architecture.md +2 -0
- package/templates/.agents/rules/astra-diagnostic.md +1 -1
- package/templates/.agents/rules/autonomy-decision.md +3 -1
- package/templates/.agents/rules/cloud-hostinger-autonomy.md +2 -0
- package/templates/.agents/rules/context.md +2 -1
- package/templates/.agents/rules/core.md +3 -3
- package/templates/.agents/rules/design-system-central-contract.md +17 -0
- package/templates/.agents/rules/evolution.md +3 -1
- package/templates/.agents/rules/frontend-lite.md +3 -1
- package/templates/.agents/rules/local-sqlite-storage.md +2 -2
- package/templates/.agents/rules/meta-mcp.md +3 -1
- package/templates/.agents/rules/model-orchestration.md +1 -1
- package/templates/.agents/rules/run-lifecycle-closure.md +6 -4
- package/templates/.agents/rules/security.md +3 -1
- package/templates/.agents/rules/specialist-routing.md +3 -1
- package/templates/.agents/rules/text-writing-utf8.md +1 -1
- package/templates/.agents/rules/workflow.md +7 -5
- package/templates/.agents/runtime/VERSION +1 -1
- package/templates/.agents/runtime/bin/zaip.mjs +519 -247
- 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 +1 -1
- package/templates/.agents/sales/playbook.md +3 -0
- package/templates/.agents/skills/zaip-aios/SKILL.md +5 -3
- package/templates/.agents/skills/zaip-skill-adapt-stack/SKILL.md +1 -0
- package/templates/.agents/skills/zaip-skill-api-contracts/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-api-contracts/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-application-observability/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-application-observability/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-application-observability/references/signal-design.md +3 -0
- package/templates/.agents/skills/zaip-skill-application-readiness/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-application-readiness/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-application-readiness/references/evidence-matrix.md +3 -0
- package/templates/.agents/skills/zaip-skill-architecture-design/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-architecture-design/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-async-jobs/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-async-jobs/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-auth-tenancy/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-auth-tenancy/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-auth-tenancy/references/data-access-paths.md +9 -0
- package/templates/.agents/skills/zaip-skill-auth-tenancy/references/worker-scenario.md +5 -0
- package/templates/.agents/skills/zaip-skill-auth-tenancy/scripts/worker-contract.test.mjs +27 -0
- package/templates/.agents/skills/zaip-skill-author-skills/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-author-skills/references/engineering-skill-index.md +9 -0
- package/templates/.agents/skills/zaip-skill-author-skills/scripts/audit-skill-catalog.mjs +5 -3
- package/templates/.agents/skills/zaip-skill-author-skills/scripts/author-skill-scripts.test.mjs +27 -0
- package/templates/.agents/skills/zaip-skill-backend/SKILL.md +4 -0
- package/templates/.agents/skills/zaip-skill-backend/references/deployment-environments.md +75 -0
- package/templates/.agents/skills/zaip-skill-backend/references/supabase-migration-contract.md +23 -0
- package/templates/.agents/skills/zaip-skill-brand-governance/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-cache-strategy/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-cache-strategy/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-change/SKILL.md +1 -1
- package/templates/.agents/skills/zaip-skill-cloud-engineering/SKILL.md +7 -0
- package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/SKILL.md +37 -0
- package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/agents/openai.yaml +6 -0
- package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/references/workers-static-assets.md +26 -0
- package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/references/workflow-templates.md +71 -0
- package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/scripts/cloudflare-github-deploy-contract.test.mjs +77 -0
- package/templates/.agents/skills/zaip-skill-config/SKILL.md +21 -11
- package/templates/.agents/skills/zaip-skill-config/agents/openai.yaml +2 -2
- package/templates/.agents/skills/zaip-skill-container-runtime/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-container-runtime/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-context/SKILL.md +6 -1
- package/templates/.agents/skills/zaip-skill-context/references/prd-spec-task-handoff.md +10 -0
- package/templates/.agents/skills/zaip-skill-context/references/rule-selection.md +20 -0
- package/templates/.agents/skills/zaip-skill-cqrs/SKILL.md +1 -0
- package/templates/.agents/skills/zaip-skill-cybersecurity/SKILL.md +18 -0
- package/templates/.agents/skills/zaip-skill-cybersecurity/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-cybersecurity/references/audit-contract.md +94 -0
- package/templates/.agents/skills/zaip-skill-cybersecurity/scripts/score-audit.mjs +185 -0
- package/templates/.agents/skills/zaip-skill-cybersecurity/scripts/score-audit.test.mjs +101 -0
- package/templates/.agents/skills/zaip-skill-data-modeling/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-data-modeling/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-database-migrations/SKILL.md +20 -0
- package/templates/.agents/skills/zaip-skill-database-migrations/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-database-migrations/references/manual-mode.md +15 -0
- package/templates/.agents/skills/zaip-skill-database-migrations/references/promotion-example.md +5 -0
- package/templates/.agents/skills/zaip-skill-database-migrations/scripts/export-manual-sql.mjs +145 -0
- package/templates/.agents/skills/zaip-skill-database-migrations/scripts/export-manual-sql.test.mjs +178 -0
- package/templates/.agents/skills/zaip-skill-dependency-upgrade/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-dependency-upgrade/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-deployment-pipeline/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-deployment-pipeline/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-deployment-pipeline/references/runtime-shapes.md +3 -0
- package/templates/.agents/skills/zaip-skill-design-system/SKILL.md +20 -9
- package/templates/.agents/skills/zaip-skill-dev-environment/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-dev-environment/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-dev-environment/references/inventory-contract.md +7 -0
- package/templates/.agents/skills/zaip-skill-dev-environment/scripts/inventory.mjs +77 -0
- package/templates/.agents/skills/zaip-skill-disaster-recovery/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-disaster-recovery/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-disaster-recovery/references/recovery-scope.md +3 -0
- package/templates/.agents/skills/zaip-skill-execution/SKILL.md +3 -3
- package/templates/.agents/skills/zaip-skill-execution/references/correction-cycle.md +7 -0
- package/templates/.agents/skills/zaip-skill-execution/references/runtime-governance.md +1 -5
- package/templates/.agents/skills/zaip-skill-external-integrations/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-external-integrations/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-frontend/SKILL.md +4 -0
- package/templates/.agents/skills/zaip-skill-frontend-componentization/SKILL.md +44 -0
- package/templates/.agents/skills/zaip-skill-frontend-componentization/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-frontend-data-flows/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-frontend-data-flows/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-general-operations/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/SKILL.md +36 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/references/cloudflare-pages.md +33 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/references/github.md +63 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/references/hostinger-vps.md +55 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/references/npm.md +30 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/check-skill.mjs +55 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-cloudflare.mjs +61 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-cloudflare.test.mjs +128 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-ssh.integration.test.mjs +106 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +43 -76
- package/templates/.agents/skills/zaip-skill-github-deploy/references/deployment-workflow.md +131 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/references/github-release-workflow-template.md +31 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/references/release-gate-matrix.md +24 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/references/release-identity.md +44 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/references/release-notes.md +134 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/consumer-release-preparation.mjs +389 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/consumer-release-preparation.test.mjs +134 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs +25 -2
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness-api.test.mjs +134 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness.mjs +98 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness.test.mjs +25 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/install-github-readiness-workflow.mjs +159 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/install-github-readiness-workflow.test.mjs +160 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs +149 -12
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.test.mjs +64 -5
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/release-notes-coverage.test.mjs +126 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/resolve-release-identity.mjs +78 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/resolve-release-identity.test.mjs +51 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/validate-release-notes.mjs +184 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/validate-release-notes.test.mjs +109 -0
- package/templates/.agents/skills/zaip-skill-growth-strategy-revops/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/SKILL.md +18 -10
- package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/agents/openai.yaml +3 -4
- package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/aws-cli-terraform.md +62 -0
- package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/guia-iniciante-hostinger-vps.md +183 -0
- package/templates/.agents/skills/zaip-skill-marketing/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-module-scaffold/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-module-scaffold/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-module-scaffold/references/scaffold-contract.md +9 -0
- package/templates/.agents/skills/zaip-skill-module-scaffold/scripts/helpers.test.mjs +121 -0
- package/templates/.agents/skills/zaip-skill-module-scaffold/scripts/scaffold.mjs +169 -0
- package/templates/.agents/skills/zaip-skill-move-prd/SKILL.md +1 -1
- package/templates/.agents/skills/zaip-skill-move-spec/SKILL.md +1 -1
- package/templates/.agents/skills/zaip-skill-performance-engineering/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-performance-engineering/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-prd/SKILL.md +1 -1
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-local-telemetry.mjs +1 -0
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.mjs +26 -9
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.test.mjs +39 -13
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.mjs +1 -0
- package/templates/.agents/skills/zaip-skill-refactor-landing-page/SKILL.md +66 -0
- package/templates/.agents/skills/zaip-skill-refactor-landing-page/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-refactor-landing-page/references/behavioral-dry-run.md +23 -0
- package/templates/.agents/skills/zaip-skill-release-qualification/SKILL.md +40 -1
- package/templates/.agents/skills/zaip-skill-release-qualification/references/local-preparation.md +98 -0
- package/templates/.agents/skills/zaip-skill-review/SKILL.md +1 -0
- package/templates/.agents/skills/zaip-skill-rules/SKILL.md +3 -3
- package/templates/.agents/skills/zaip-skill-sales-methodology/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-setup/SKILL.md +19 -21
- package/templates/.agents/skills/zaip-skill-setup/agents/openai.yaml +2 -2
- package/templates/.agents/skills/zaip-skill-spec/SKILL.md +3 -2
- package/templates/.agents/skills/zaip-skill-storage-uploads/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-storage-uploads/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-systematic-debugging/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-systematic-debugging/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-task/SKILL.md +16 -7
- package/templates/.agents/skills/zaip-skill-task/references/commit-policy.md +25 -0
- package/templates/.agents/skills/zaip-skill-test-data/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-test-data/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-test-data/scripts/generate.mjs +72 -0
- package/templates/.agents/skills/zaip-skill-testing-strategy/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-testing-strategy/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-testing-strategy/references/example-map.md +3 -0
- package/templates/.agents/skills/zaip-skill-website-readiness/SKILL.md +8 -0
- package/templates/.agents/zaip-aios/VERSION +1 -1
- package/templates/.agents/zaip-aios/guides/10-seguranca.md +2 -1
- package/templates/.agents/zaip-aios/guides/20-instalacao-detalhada.md +5 -3
- package/templates/scripts/validate-cloud-hostinger-contract.mjs +34 -0
- package/templates/template-manifest.json +955 -211
- package/templates/.agents/branding/.gitkeep +0 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-snUCQYTC.js +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-BPtVUGgs.js +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-3Awyaovx.js +0 -3
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-GgzpZ_PY.css +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BCvZFMEf.js +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-DbaLbU2q.js +0 -68
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-_MEktQNM.js +0 -2
- package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-D9-fqq9M.js +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-BDe4_Ubl.js +0 -1
- package/templates/.agents/growth/.gitkeep +0 -0
- package/templates/.agents/marketing/.gitkeep +0 -0
- package/templates/.agents/sales/.gitkeep +0 -0
package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-model-dimension.ts
ADDED
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
import {
|
|
2
|
+
costDimensionFactDateFilter,
|
|
3
|
+
creationProductivityByModel,
|
|
4
|
+
sumKnownProductivity,
|
|
5
|
+
} from "./sqlite-cost-agent-page.js";
|
|
6
|
+
import type { SqliteQueryContext, SqliteViewInput } from "./sqlite-query-context.js";
|
|
7
|
+
import type { SqliteViewName } from "./sqlite-read-model-types.js";
|
|
8
|
+
export function readModelDimension(
|
|
9
|
+
context: SqliteQueryContext,
|
|
10
|
+
view: SqliteViewName,
|
|
11
|
+
input: SqliteViewInput,
|
|
12
|
+
_filteredCostGroup: "model",
|
|
13
|
+
) {
|
|
14
|
+
const clauses = ["1=1"];
|
|
15
|
+
const values: Array<string | number> = [];
|
|
16
|
+
const dimensionDateFilter = costDimensionFactDateFilter(input);
|
|
17
|
+
if (input.from) {
|
|
18
|
+
clauses.push(
|
|
19
|
+
"date(COALESCE(i.source_started_at, i.source_occurred_at, i.occurred_at), '-3 hours') >= ?",
|
|
20
|
+
);
|
|
21
|
+
values.push(input.from.slice(0, 10));
|
|
22
|
+
}
|
|
23
|
+
if (input.to) {
|
|
24
|
+
clauses.push(
|
|
25
|
+
"date(COALESCE(i.source_started_at, i.source_occurred_at, i.occurred_at), '-3 hours') <= ?",
|
|
26
|
+
);
|
|
27
|
+
values.push(input.to.slice(0, 10));
|
|
28
|
+
}
|
|
29
|
+
if (input.agent) {
|
|
30
|
+
clauses.push("i.zaip_agent = ?");
|
|
31
|
+
values.push(input.agent);
|
|
32
|
+
}
|
|
33
|
+
if (input.phase) {
|
|
34
|
+
clauses.push("i.phase = ?");
|
|
35
|
+
values.push(input.phase);
|
|
36
|
+
}
|
|
37
|
+
if (input.status) {
|
|
38
|
+
clauses.push("i.status = ?");
|
|
39
|
+
values.push(input.status);
|
|
40
|
+
}
|
|
41
|
+
if (input.priority || input.workType) clauses.push("0");
|
|
42
|
+
if (input.risk) {
|
|
43
|
+
clauses.push("t.risk = ?");
|
|
44
|
+
values.push(input.risk);
|
|
45
|
+
}
|
|
46
|
+
if (input.origin) {
|
|
47
|
+
clauses.push(
|
|
48
|
+
input.origin === "prd"
|
|
49
|
+
? "i.prd_id IS NOT NULL"
|
|
50
|
+
: input.origin === "spec"
|
|
51
|
+
? "i.prd_id IS NULL AND i.spec_id IS NOT NULL"
|
|
52
|
+
: input.origin === "task"
|
|
53
|
+
? "i.prd_id IS NULL AND i.spec_id IS NULL AND i.task_id IS NOT NULL"
|
|
54
|
+
: "i.prd_id IS NULL AND i.spec_id IS NULL AND i.task_id IS NULL",
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
if (input.provider) {
|
|
58
|
+
if (input.provider === "unavailable")
|
|
59
|
+
clauses.push(
|
|
60
|
+
"s.provider IS NULL AND NOT EXISTS (SELECT 1 FROM invocation_usage known_provider WHERE known_provider.agent_invocation_id=i.agent_invocation_id AND known_provider.provider IS NOT NULL AND known_provider.provider <> 'unavailable')",
|
|
61
|
+
);
|
|
62
|
+
else {
|
|
63
|
+
clauses.push("s.provider = ?");
|
|
64
|
+
values.push(input.provider);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (input.model) {
|
|
68
|
+
if (input.model === "unavailable") clauses.push("s.model_key = 'unavailable'");
|
|
69
|
+
else {
|
|
70
|
+
clauses.push("s.model_key = ?");
|
|
71
|
+
values.push(input.model);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (input.query) {
|
|
75
|
+
clauses.push("s.model_key LIKE ?");
|
|
76
|
+
values.push(`%${input.query}%`);
|
|
77
|
+
}
|
|
78
|
+
const where = clauses.join(" AND ");
|
|
79
|
+
const activityClauses = ["a.activity_source_kind <> 'agent_run'"];
|
|
80
|
+
const activityValues: Array<string | number> = [];
|
|
81
|
+
if (input.from) {
|
|
82
|
+
activityClauses.push("a.occurred_day_sp >= ?");
|
|
83
|
+
activityValues.push(input.from.slice(0, 10));
|
|
84
|
+
}
|
|
85
|
+
if (input.to) {
|
|
86
|
+
activityClauses.push("a.occurred_day_sp <= ?");
|
|
87
|
+
activityValues.push(input.to.slice(0, 10));
|
|
88
|
+
}
|
|
89
|
+
if (input.agent) {
|
|
90
|
+
activityClauses.push("a.zaip_agent = ?");
|
|
91
|
+
activityValues.push(input.agent);
|
|
92
|
+
}
|
|
93
|
+
if (input.phase) {
|
|
94
|
+
activityClauses.push("a.phase = ?");
|
|
95
|
+
activityValues.push(input.phase);
|
|
96
|
+
}
|
|
97
|
+
if (input.status) {
|
|
98
|
+
activityClauses.push("a.status = ?");
|
|
99
|
+
activityValues.push(input.status);
|
|
100
|
+
}
|
|
101
|
+
if (input.priority || input.workType) activityClauses.push("0");
|
|
102
|
+
if (input.risk) {
|
|
103
|
+
activityClauses.push("activity_task.risk = ?");
|
|
104
|
+
activityValues.push(input.risk);
|
|
105
|
+
}
|
|
106
|
+
if (input.origin)
|
|
107
|
+
activityClauses.push(
|
|
108
|
+
input.origin === "prd"
|
|
109
|
+
? "a.prd_id IS NOT NULL"
|
|
110
|
+
: input.origin === "spec"
|
|
111
|
+
? "a.prd_id IS NULL AND a.spec_id IS NOT NULL"
|
|
112
|
+
: input.origin === "task"
|
|
113
|
+
? "a.prd_id IS NULL AND a.spec_id IS NULL AND a.task_id IS NOT NULL"
|
|
114
|
+
: "a.prd_id IS NULL AND a.spec_id IS NULL AND a.task_id IS NULL",
|
|
115
|
+
);
|
|
116
|
+
if (input.provider) {
|
|
117
|
+
if (input.provider === "unavailable")
|
|
118
|
+
activityClauses.push(
|
|
119
|
+
"a.provider IS NULL OR trim(a.provider) = '' OR a.provider = 'unavailable'",
|
|
120
|
+
);
|
|
121
|
+
else {
|
|
122
|
+
activityClauses.push("a.provider = ?");
|
|
123
|
+
activityValues.push(input.provider);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (input.model) {
|
|
127
|
+
if (input.model === "unavailable")
|
|
128
|
+
activityClauses.push("a.model IS NULL OR trim(a.model) = '' OR a.model = 'unavailable'");
|
|
129
|
+
else {
|
|
130
|
+
activityClauses.push("a.model = ?");
|
|
131
|
+
activityValues.push(input.model);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (input.query) {
|
|
135
|
+
activityClauses.push("COALESCE(a.model, 'unavailable') LIKE ?");
|
|
136
|
+
activityValues.push(`%${input.query}%`);
|
|
137
|
+
}
|
|
138
|
+
const ctes = `WITH segment_totals AS (
|
|
139
|
+
SELECT agent_invocation_id, SUM(input_tokens) AS input_tokens, SUM(cached_input_tokens) AS cached_input_tokens,
|
|
140
|
+
SUM(output_tokens) AS output_tokens, SUM(reasoning_tokens) AS reasoning_tokens,
|
|
141
|
+
SUM(total_tokens) AS total_tokens, SUM(cost_usd) AS cost_usd, SUM(cost_brl) AS cost_brl
|
|
142
|
+
FROM cost_invocation_dimension_facts
|
|
143
|
+
WHERE (total_tokens IS NOT NULL OR cost_usd IS NOT NULL OR cost_brl IS NOT NULL)${dimensionDateFilter}
|
|
144
|
+
GROUP BY agent_invocation_id
|
|
145
|
+
), segments AS (
|
|
146
|
+
SELECT agent_invocation_id,
|
|
147
|
+
CASE WHEN model IS NULL OR trim(model) = '' OR model = 'unavailable' THEN 'unavailable' ELSE model END AS model_key,
|
|
148
|
+
CASE WHEN provider IS NULL OR trim(provider) = '' OR provider = 'unavailable' THEN NULL ELSE provider END AS provider,
|
|
149
|
+
SUM(input_tokens) AS input_tokens, SUM(cached_input_tokens) AS cached_input_tokens,
|
|
150
|
+
SUM(output_tokens) AS output_tokens, SUM(reasoning_tokens) AS reasoning_tokens,
|
|
151
|
+
SUM(total_tokens) AS total_tokens, SUM(cost_usd) AS cost_usd, SUM(cost_brl) AS cost_brl
|
|
152
|
+
FROM cost_invocation_dimension_facts
|
|
153
|
+
WHERE (total_tokens IS NOT NULL OR cost_usd IS NOT NULL OR cost_brl IS NOT NULL)${dimensionDateFilter}
|
|
154
|
+
GROUP BY agent_invocation_id, model_key, provider
|
|
155
|
+
UNION ALL
|
|
156
|
+
-- Preserve every factual residual from the consolidated invocation:
|
|
157
|
+
-- source totals can exceed their attributed usage segments even when
|
|
158
|
+
-- a provider/model string exists. The residual is Sem dimensão.
|
|
159
|
+
SELECT i.agent_invocation_id, 'unavailable' AS model_key, NULL AS provider,
|
|
160
|
+
i.input_tokens - COALESCE(st.input_tokens, 0), i.cached_input_tokens - COALESCE(st.cached_input_tokens, 0),
|
|
161
|
+
i.output_tokens - COALESCE(st.output_tokens, 0), i.reasoning_tokens - COALESCE(st.reasoning_tokens, 0),
|
|
162
|
+
i.total_tokens - COALESCE(st.total_tokens, 0), i.cost_usd - COALESCE(st.cost_usd, 0), i.cost_brl - COALESCE(st.cost_brl, 0)
|
|
163
|
+
FROM invocations i LEFT JOIN segment_totals st USING(agent_invocation_id)
|
|
164
|
+
WHERE (i.total_tokens IS NOT NULL OR i.cost_usd IS NOT NULL OR i.cost_brl IS NOT NULL)
|
|
165
|
+
AND (i.total_tokens <> COALESCE(st.total_tokens, 0) OR i.cost_usd <> COALESCE(st.cost_usd, 0) OR i.cost_brl <> COALESCE(st.cost_brl, 0))
|
|
166
|
+
), model_segments AS (
|
|
167
|
+
SELECT agent_invocation_id, model_key, SUM(input_tokens) AS input_tokens, SUM(cached_input_tokens) AS cached_input_tokens,
|
|
168
|
+
SUM(output_tokens) AS output_tokens, SUM(reasoning_tokens) AS reasoning_tokens,
|
|
169
|
+
SUM(total_tokens) AS total_tokens, SUM(cost_usd) AS cost_usd, SUM(cost_brl) AS cost_brl
|
|
170
|
+
FROM segments GROUP BY agent_invocation_id, model_key
|
|
171
|
+
), known_models AS (
|
|
172
|
+
SELECT agent_invocation_id, COUNT(DISTINCT model_key) AS model_count
|
|
173
|
+
FROM model_segments WHERE model_key <> 'unavailable' GROUP BY agent_invocation_id
|
|
174
|
+
), filtered_segments AS (
|
|
175
|
+
SELECT s.*, i.task_id, i.conversation_id, i.duration_ms, i.source_event_count, km.model_count
|
|
176
|
+
FROM segments s JOIN invocations i USING(agent_invocation_id)
|
|
177
|
+
LEFT JOIN tasks t ON t.id=i.task_id LEFT JOIN known_models km USING(agent_invocation_id)
|
|
178
|
+
WHERE ${where}`;
|
|
179
|
+
const facts = `), financial_components AS (
|
|
180
|
+
SELECT model_key AS key, SUM(total_tokens) AS total_tokens, SUM(cost_usd) AS total_cost_usd, SUM(cost_brl) AS total_cost_brl
|
|
181
|
+
FROM filtered_segments GROUP BY model_key
|
|
182
|
+
UNION ALL
|
|
183
|
+
SELECT CASE WHEN a.model IS NULL OR trim(a.model) = '' OR lower(a.model) IN ('unavailable', 'unknown', 'mixed') THEN 'unavailable' ELSE a.model END AS key,
|
|
184
|
+
SUM(a.total_tokens) AS total_tokens, SUM(a.cost_usd) AS total_cost_usd, SUM(a.cost_brl) AS total_cost_brl
|
|
185
|
+
FROM activities a LEFT JOIN tasks activity_task ON activity_task.id=a.task_id
|
|
186
|
+
WHERE ${activityClauses.join(" AND ")}
|
|
187
|
+
AND (a.total_tokens IS NOT NULL OR a.cost_usd IS NOT NULL OR a.cost_brl IS NOT NULL)
|
|
188
|
+
GROUP BY key
|
|
189
|
+
), financial AS (
|
|
190
|
+
SELECT key, SUM(total_tokens) AS total_tokens, SUM(total_cost_usd) AS total_cost_usd, SUM(total_cost_brl) AS total_cost_brl
|
|
191
|
+
FROM financial_components GROUP BY key
|
|
192
|
+
), population_models AS (
|
|
193
|
+
SELECT agent_invocation_id, model_key, MAX(task_id) AS task_id, MAX(conversation_id) AS conversation_id, MAX(duration_ms) AS duration_ms,
|
|
194
|
+
MAX(source_event_count) AS source_event_count, MAX(model_count) AS model_count
|
|
195
|
+
FROM filtered_segments GROUP BY agent_invocation_id, model_key
|
|
196
|
+
), population_ranked AS (
|
|
197
|
+
SELECT *, ROW_NUMBER() OVER (PARTITION BY agent_invocation_id ORDER BY model_key) AS model_rank
|
|
198
|
+
FROM population_models
|
|
199
|
+
), population AS (
|
|
200
|
+
SELECT model_key AS key,
|
|
201
|
+
COUNT(*) AS invocation_count,
|
|
202
|
+
SUM(duration_ms) AS total_duration,
|
|
203
|
+
SUM(source_event_count) AS source_event_count
|
|
204
|
+
FROM population_ranked WHERE model_rank = 1 AND model_count = 1
|
|
205
|
+
GROUP BY model_key
|
|
206
|
+
), agent_task_models AS (
|
|
207
|
+
SELECT task_id, model_key
|
|
208
|
+
FROM population_models WHERE task_id IS NOT NULL AND model_key <> 'unavailable'
|
|
209
|
+
GROUP BY task_id, model_key
|
|
210
|
+
), run_conversations AS (
|
|
211
|
+
SELECT run_id, MAX(conversation_id) AS conversation_id
|
|
212
|
+
FROM activities
|
|
213
|
+
WHERE run_id IS NOT NULL AND conversation_id IS NOT NULL
|
|
214
|
+
GROUP BY run_id
|
|
215
|
+
), direct_model_activities AS (
|
|
216
|
+
SELECT CASE WHEN a.model IS NULL OR trim(a.model) = '' OR lower(a.model) IN ('unavailable', 'unknown', 'mixed') THEN 'unavailable' ELSE a.model END AS model_key,
|
|
217
|
+
a.task_id, COALESCE(a.conversation_id, run_conversations.conversation_id) AS conversation_id,
|
|
218
|
+
a.activity_source_kind
|
|
219
|
+
FROM activities a
|
|
220
|
+
LEFT JOIN tasks activity_task ON activity_task.id=a.task_id
|
|
221
|
+
LEFT JOIN run_conversations ON run_conversations.run_id=a.run_id
|
|
222
|
+
WHERE ${activityClauses.join(" AND ")}
|
|
223
|
+
AND (a.total_tokens IS NOT NULL OR a.cost_usd IS NOT NULL OR a.cost_brl IS NOT NULL)
|
|
224
|
+
), direct_task_models AS (
|
|
225
|
+
SELECT task_id, model_key FROM direct_model_activities
|
|
226
|
+
-- A legacy task_id on an unassisted turn is correlation metadata, not
|
|
227
|
+
-- an agent-run Task participation. That turn still contributes its
|
|
228
|
+
-- conversation below.
|
|
229
|
+
WHERE task_id IS NOT NULL AND COALESCE(activity_source_kind, '') <> 'unassisted_turn'
|
|
230
|
+
AND model_key <> 'unavailable'
|
|
231
|
+
), task_models AS (
|
|
232
|
+
SELECT task_id, model_key FROM agent_task_models
|
|
233
|
+
UNION SELECT task_id, model_key FROM direct_task_models
|
|
234
|
+
), task_population AS (
|
|
235
|
+
SELECT model_key AS key,
|
|
236
|
+
COUNT(*) AS task_count
|
|
237
|
+
FROM task_models
|
|
238
|
+
GROUP BY model_key
|
|
239
|
+
), direct_conversations AS (
|
|
240
|
+
SELECT model_key, conversation_id FROM direct_model_activities
|
|
241
|
+
WHERE conversation_id IS NOT NULL
|
|
242
|
+
AND (activity_source_kind='unassisted_turn' OR task_id IS NULL)
|
|
243
|
+
), conversation_models AS (
|
|
244
|
+
SELECT conversation_id, model_key FROM population_models
|
|
245
|
+
WHERE conversation_id IS NOT NULL AND task_id IS NULL
|
|
246
|
+
UNION
|
|
247
|
+
SELECT conversation_id, model_key FROM direct_conversations
|
|
248
|
+
), conversation_population AS (
|
|
249
|
+
SELECT model_key AS key, COUNT(*) AS conversation_count
|
|
250
|
+
FROM conversation_models GROUP BY model_key
|
|
251
|
+
), keys AS (
|
|
252
|
+
SELECT key FROM financial UNION SELECT key FROM population UNION SELECT key FROM task_population UNION SELECT key FROM conversation_population
|
|
253
|
+
), displayed_keys AS (
|
|
254
|
+
SELECT key FROM keys WHERE key <> 'unavailable'
|
|
255
|
+
)`;
|
|
256
|
+
const limit = Math.min(200, Math.max(1, input.limit ?? 50));
|
|
257
|
+
const offset = Math.max(0, input.offset ?? 0);
|
|
258
|
+
const total_count = Number(
|
|
259
|
+
(
|
|
260
|
+
context.database
|
|
261
|
+
.prepare(`${ctes} ${facts} SELECT COUNT(*) AS count FROM displayed_keys`)
|
|
262
|
+
.get(...values, ...activityValues, ...activityValues) as { count: number }
|
|
263
|
+
).count,
|
|
264
|
+
);
|
|
265
|
+
// Model membership is intentionally additive in this view: a Task is
|
|
266
|
+
// counted once for every model it used, so the footer sums the rows.
|
|
267
|
+
const totals = context.database
|
|
268
|
+
.prepare(`${ctes} ${facts} SELECT
|
|
269
|
+
SUM(COALESCE(population.invocation_count, 0)) AS invocation_count,
|
|
270
|
+
SUM(COALESCE(task_population.task_count, 0)) AS task_count,
|
|
271
|
+
SUM(COALESCE(conversation_population.conversation_count, 0)) AS conversation_count,
|
|
272
|
+
SUM(COALESCE(population.total_duration, 0)) AS total_duration,
|
|
273
|
+
SUM(CASE WHEN population.invocation_count > 0 AND population.total_duration IS NULL THEN population.invocation_count ELSE 0 END) AS duration_unknown,
|
|
274
|
+
SUM(COALESCE(population.total_duration, 0)) AS duration_known,
|
|
275
|
+
SUM(COALESCE(population.source_event_count, 0)) AS source_event_count,
|
|
276
|
+
SUM(COALESCE(financial.total_tokens, 0)) AS total_tokens,
|
|
277
|
+
SUM(COALESCE(financial.total_cost_usd, 0)) AS total_cost_usd,
|
|
278
|
+
SUM(COALESCE(financial.total_cost_brl, 0)) AS total_cost_brl
|
|
279
|
+
FROM displayed_keys
|
|
280
|
+
LEFT JOIN population USING(key)
|
|
281
|
+
LEFT JOIN task_population USING(key)
|
|
282
|
+
LEFT JOIN conversation_population USING(key)
|
|
283
|
+
LEFT JOIN financial USING(key)`)
|
|
284
|
+
.get(...values, ...activityValues, ...activityValues) as Record<string, unknown>;
|
|
285
|
+
const rows = context.database
|
|
286
|
+
.prepare(
|
|
287
|
+
`${ctes} ${facts} SELECT displayed_keys.key, displayed_keys.key AS label, COALESCE(population.invocation_count, 0) AS invocation_count, COALESCE(task_population.task_count, 0) AS task_count, COALESCE(conversation_population.conversation_count, 0) AS conversation_count, population.total_duration, population.source_event_count, financial.total_tokens, financial.total_cost_usd, financial.total_cost_brl FROM displayed_keys LEFT JOIN population USING(key) LEFT JOIN task_population USING(key) LEFT JOIN conversation_population USING(key) LEFT JOIN financial USING(key) ORDER BY financial.total_cost_brl DESC, displayed_keys.key LIMIT ? OFFSET ?`,
|
|
288
|
+
)
|
|
289
|
+
.all(...values, ...activityValues, ...activityValues, limit, offset) as Array<
|
|
290
|
+
Record<string, unknown>
|
|
291
|
+
>;
|
|
292
|
+
const productivityRows = creationProductivityByModel(
|
|
293
|
+
context.database,
|
|
294
|
+
input.from?.slice(0, 10) ?? "0000-01-01",
|
|
295
|
+
input.to?.slice(0, 10) ?? "9999-12-31",
|
|
296
|
+
{
|
|
297
|
+
...(input.model ? { model: input.model } : {}),
|
|
298
|
+
...(input.provider ? { provider: input.provider } : {}),
|
|
299
|
+
},
|
|
300
|
+
);
|
|
301
|
+
const productivity = new Map(productivityRows.map((row) => [String(row.key), row]));
|
|
302
|
+
for (const row of rows) {
|
|
303
|
+
const extra = productivity.get(String(row.key));
|
|
304
|
+
Object.assign(row, {
|
|
305
|
+
prd_count: extra?.prd_count ?? 0,
|
|
306
|
+
spec_count: extra?.spec_count ?? 0,
|
|
307
|
+
validation_count: extra?.validation_count ?? 0,
|
|
308
|
+
evidence_count: extra?.evidence_count ?? 0,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
Object.assign(totals, {
|
|
312
|
+
task_count: Number(totals.task_count ?? 0),
|
|
313
|
+
conversation_count: Number(totals.conversation_count ?? 0),
|
|
314
|
+
prd_count: sumKnownProductivity(productivityRows, "prd_count") ?? 0,
|
|
315
|
+
spec_count: sumKnownProductivity(productivityRows, "spec_count") ?? 0,
|
|
316
|
+
validation_count: sumKnownProductivity(productivityRows, "validation_count") ?? 0,
|
|
317
|
+
evidence_count: sumKnownProductivity(productivityRows, "evidence_count") ?? 0,
|
|
318
|
+
});
|
|
319
|
+
for (const row of rows)
|
|
320
|
+
for (const field of [
|
|
321
|
+
"invocation_count",
|
|
322
|
+
"task_count",
|
|
323
|
+
"conversation_count",
|
|
324
|
+
"prd_count",
|
|
325
|
+
"spec_count",
|
|
326
|
+
"validation_count",
|
|
327
|
+
"evidence_count",
|
|
328
|
+
"total_duration",
|
|
329
|
+
"source_event_count",
|
|
330
|
+
"total_tokens",
|
|
331
|
+
"total_cost_usd",
|
|
332
|
+
"total_cost_brl",
|
|
333
|
+
])
|
|
334
|
+
row[field] = typeof row[field] === "number" ? row[field] : 0;
|
|
335
|
+
for (const field of [
|
|
336
|
+
"invocation_count",
|
|
337
|
+
"task_count",
|
|
338
|
+
"conversation_count",
|
|
339
|
+
"prd_count",
|
|
340
|
+
"spec_count",
|
|
341
|
+
"validation_count",
|
|
342
|
+
"evidence_count",
|
|
343
|
+
"total_duration",
|
|
344
|
+
"source_event_count",
|
|
345
|
+
"total_tokens",
|
|
346
|
+
"total_cost_usd",
|
|
347
|
+
"total_cost_brl",
|
|
348
|
+
])
|
|
349
|
+
totals[field] = typeof totals[field] === "number" ? totals[field] : 0;
|
|
350
|
+
return {
|
|
351
|
+
data_source: "sqlite_read_model" as const,
|
|
352
|
+
view,
|
|
353
|
+
offset,
|
|
354
|
+
limit,
|
|
355
|
+
total_count,
|
|
356
|
+
has_more: offset + rows.length < total_count,
|
|
357
|
+
totals,
|
|
358
|
+
rows,
|
|
359
|
+
};
|
|
360
|
+
}
|
package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-provider-dimension.ts
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { costDimensionFactDateFilter } from "./sqlite-cost-agent-page.js";
|
|
2
|
+
import type { SqliteQueryContext, SqliteViewInput } from "./sqlite-query-context.js";
|
|
3
|
+
import type { SqliteViewName } from "./sqlite-read-model-types.js";
|
|
4
|
+
export function readProviderDimension(
|
|
5
|
+
context: SqliteQueryContext,
|
|
6
|
+
view: SqliteViewName,
|
|
7
|
+
input: SqliteViewInput,
|
|
8
|
+
_filteredCostGroup: "provider",
|
|
9
|
+
) {
|
|
10
|
+
const clauses = ["1=1"];
|
|
11
|
+
const values: Array<string | number> = [];
|
|
12
|
+
const dimensionDateFilter = costDimensionFactDateFilter(input);
|
|
13
|
+
if (input.from) {
|
|
14
|
+
clauses.push(
|
|
15
|
+
"date(COALESCE(i.source_started_at, i.source_occurred_at, i.occurred_at), '-3 hours') >= ?",
|
|
16
|
+
);
|
|
17
|
+
values.push(input.from.slice(0, 10));
|
|
18
|
+
}
|
|
19
|
+
if (input.to) {
|
|
20
|
+
clauses.push(
|
|
21
|
+
"date(COALESCE(i.source_started_at, i.source_occurred_at, i.occurred_at), '-3 hours') <= ?",
|
|
22
|
+
);
|
|
23
|
+
values.push(input.to.slice(0, 10));
|
|
24
|
+
}
|
|
25
|
+
if (input.agent) {
|
|
26
|
+
clauses.push("i.zaip_agent = ?");
|
|
27
|
+
values.push(input.agent);
|
|
28
|
+
}
|
|
29
|
+
if (input.phase) {
|
|
30
|
+
clauses.push("i.phase = ?");
|
|
31
|
+
values.push(input.phase);
|
|
32
|
+
}
|
|
33
|
+
if (input.status) {
|
|
34
|
+
clauses.push("i.status = ?");
|
|
35
|
+
values.push(input.status);
|
|
36
|
+
}
|
|
37
|
+
if (input.priority || input.workType) clauses.push("0");
|
|
38
|
+
if (input.risk) {
|
|
39
|
+
clauses.push("t.risk = ?");
|
|
40
|
+
values.push(input.risk);
|
|
41
|
+
}
|
|
42
|
+
if (input.origin)
|
|
43
|
+
clauses.push(
|
|
44
|
+
input.origin === "prd"
|
|
45
|
+
? "i.prd_id IS NOT NULL"
|
|
46
|
+
: input.origin === "spec"
|
|
47
|
+
? "i.prd_id IS NULL AND i.spec_id IS NOT NULL"
|
|
48
|
+
: input.origin === "task"
|
|
49
|
+
? "i.prd_id IS NULL AND i.spec_id IS NULL AND i.task_id IS NOT NULL"
|
|
50
|
+
: "i.prd_id IS NULL AND i.spec_id IS NULL AND i.task_id IS NULL",
|
|
51
|
+
);
|
|
52
|
+
if (input.provider) {
|
|
53
|
+
if (input.provider === "unavailable") clauses.push("s.provider_key = 'unavailable'");
|
|
54
|
+
else {
|
|
55
|
+
clauses.push("s.provider_key = ?");
|
|
56
|
+
values.push(input.provider);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (input.model) {
|
|
60
|
+
if (input.model === "unavailable") clauses.push("s.model_key = 'unavailable'");
|
|
61
|
+
else {
|
|
62
|
+
clauses.push("s.model_key = ?");
|
|
63
|
+
values.push(input.model);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (input.query) {
|
|
67
|
+
clauses.push("s.provider_key LIKE ?");
|
|
68
|
+
values.push(`%${input.query}%`);
|
|
69
|
+
}
|
|
70
|
+
const where = clauses.join(" AND ");
|
|
71
|
+
const ctes = `WITH segment_totals AS (
|
|
72
|
+
SELECT agent_invocation_id, SUM(input_tokens) AS input_tokens, SUM(cached_input_tokens) AS cached_input_tokens,
|
|
73
|
+
SUM(output_tokens) AS output_tokens, SUM(reasoning_tokens) AS reasoning_tokens,
|
|
74
|
+
SUM(total_tokens) AS total_tokens, SUM(cost_usd) AS cost_usd, SUM(cost_brl) AS cost_brl
|
|
75
|
+
FROM cost_invocation_dimension_facts
|
|
76
|
+
WHERE (total_tokens IS NOT NULL OR cost_usd IS NOT NULL OR cost_brl IS NOT NULL)${dimensionDateFilter}
|
|
77
|
+
GROUP BY agent_invocation_id
|
|
78
|
+
), segments AS (
|
|
79
|
+
SELECT agent_invocation_id,
|
|
80
|
+
CASE WHEN provider IS NULL OR trim(provider) = '' OR provider = 'unavailable' THEN 'unavailable' ELSE provider END AS provider_key,
|
|
81
|
+
CASE WHEN model IS NULL OR trim(model) = '' OR model = 'unavailable' THEN 'unavailable' ELSE model END AS model_key,
|
|
82
|
+
SUM(input_tokens) AS input_tokens, SUM(cached_input_tokens) AS cached_input_tokens,
|
|
83
|
+
SUM(output_tokens) AS output_tokens, SUM(reasoning_tokens) AS reasoning_tokens,
|
|
84
|
+
SUM(total_tokens) AS total_tokens, SUM(cost_usd) AS cost_usd, SUM(cost_brl) AS cost_brl
|
|
85
|
+
FROM cost_invocation_dimension_facts
|
|
86
|
+
WHERE (total_tokens IS NOT NULL OR cost_usd IS NOT NULL OR cost_brl IS NOT NULL)${dimensionDateFilter}
|
|
87
|
+
GROUP BY agent_invocation_id, provider_key, model_key
|
|
88
|
+
UNION ALL
|
|
89
|
+
-- See the equivalent Models branch: attribute only the segment part;
|
|
90
|
+
-- retain the consolidated factual remainder as Sem dimensão.
|
|
91
|
+
SELECT i.agent_invocation_id, 'unavailable' AS provider_key, 'unavailable' AS model_key,
|
|
92
|
+
i.input_tokens - COALESCE(st.input_tokens, 0), i.cached_input_tokens - COALESCE(st.cached_input_tokens, 0),
|
|
93
|
+
i.output_tokens - COALESCE(st.output_tokens, 0), i.reasoning_tokens - COALESCE(st.reasoning_tokens, 0),
|
|
94
|
+
i.total_tokens - COALESCE(st.total_tokens, 0), i.cost_usd - COALESCE(st.cost_usd, 0), i.cost_brl - COALESCE(st.cost_brl, 0)
|
|
95
|
+
FROM invocations i LEFT JOIN segment_totals st USING(agent_invocation_id)
|
|
96
|
+
WHERE (i.total_tokens IS NOT NULL OR i.cost_usd IS NOT NULL OR i.cost_brl IS NOT NULL)
|
|
97
|
+
AND (i.total_tokens <> COALESCE(st.total_tokens, 0) OR i.cost_usd <> COALESCE(st.cost_usd, 0) OR i.cost_brl <> COALESCE(st.cost_brl, 0))
|
|
98
|
+
), provider_segments AS (
|
|
99
|
+
SELECT agent_invocation_id, provider_key,
|
|
100
|
+
SUM(input_tokens) AS input_tokens, SUM(cached_input_tokens) AS cached_input_tokens,
|
|
101
|
+
SUM(output_tokens) AS output_tokens, SUM(reasoning_tokens) AS reasoning_tokens,
|
|
102
|
+
SUM(total_tokens) AS total_tokens, SUM(cost_usd) AS cost_usd, SUM(cost_brl) AS cost_brl
|
|
103
|
+
FROM segments GROUP BY agent_invocation_id, provider_key
|
|
104
|
+
), known_providers AS (
|
|
105
|
+
SELECT agent_invocation_id, COUNT(DISTINCT provider_key) AS provider_count
|
|
106
|
+
FROM provider_segments WHERE provider_key <> 'unavailable' GROUP BY agent_invocation_id
|
|
107
|
+
), filtered_segments AS (
|
|
108
|
+
SELECT s.*, i.task_id, i.duration_ms, i.source_event_count, kp.provider_count
|
|
109
|
+
FROM segments s JOIN invocations i USING(agent_invocation_id)
|
|
110
|
+
LEFT JOIN tasks t ON t.id=i.task_id LEFT JOIN known_providers kp USING(agent_invocation_id)
|
|
111
|
+
WHERE ${where}`;
|
|
112
|
+
const facts = `), financial AS (
|
|
113
|
+
SELECT provider_key AS key, SUM(total_tokens) AS total_tokens, SUM(cost_usd) AS total_cost_usd, SUM(cost_brl) AS total_cost_brl FROM filtered_segments GROUP BY provider_key
|
|
114
|
+
), population_providers AS (
|
|
115
|
+
SELECT agent_invocation_id, provider_key, MAX(task_id) AS task_id, MAX(duration_ms) AS duration_ms, MAX(source_event_count) AS source_event_count, MAX(provider_count) AS provider_count
|
|
116
|
+
FROM filtered_segments GROUP BY agent_invocation_id, provider_key
|
|
117
|
+
), population_ranked AS (
|
|
118
|
+
SELECT *, ROW_NUMBER() OVER (PARTITION BY agent_invocation_id ORDER BY provider_key) AS provider_rank FROM population_providers
|
|
119
|
+
), population AS (
|
|
120
|
+
SELECT provider_key AS key, COUNT(*) AS invocation_count, SUM(duration_ms) AS total_duration, SUM(source_event_count) AS source_event_count
|
|
121
|
+
FROM population_ranked WHERE provider_rank = 1 AND provider_count = 1 GROUP BY provider_key
|
|
122
|
+
), task_providers AS (
|
|
123
|
+
SELECT task_id, provider_key FROM population_providers WHERE task_id IS NOT NULL GROUP BY task_id, provider_key
|
|
124
|
+
), task_population AS (
|
|
125
|
+
SELECT provider_key AS key, COUNT(*) AS task_count
|
|
126
|
+
FROM task_providers GROUP BY provider_key
|
|
127
|
+
), keys AS (SELECT key FROM financial UNION SELECT key FROM population UNION SELECT key FROM task_population)`;
|
|
128
|
+
const limit = Math.min(200, Math.max(1, input.limit ?? 50));
|
|
129
|
+
const offset = Math.max(0, input.offset ?? 0);
|
|
130
|
+
const total_count = Number(
|
|
131
|
+
(
|
|
132
|
+
context.database
|
|
133
|
+
.prepare(`${ctes} ${facts} SELECT COUNT(*) AS count FROM keys`)
|
|
134
|
+
.get(...values) as { count: number }
|
|
135
|
+
).count,
|
|
136
|
+
);
|
|
137
|
+
const totals = context.database
|
|
138
|
+
.prepare(`${ctes} ${facts} SELECT
|
|
139
|
+
(SELECT COUNT(*) FROM population_ranked WHERE provider_rank = 1) AS invocation_count,
|
|
140
|
+
(SELECT COUNT(DISTINCT task_id) FROM population_providers) AS task_count,
|
|
141
|
+
(SELECT SUM(duration_ms) FROM population_ranked WHERE provider_rank = 1) AS total_duration,
|
|
142
|
+
(SELECT SUM(CASE WHEN duration_ms IS NULL THEN 1 ELSE 0 END) FROM population_ranked WHERE provider_rank = 1) AS duration_unknown,
|
|
143
|
+
(SELECT SUM(CASE WHEN duration_ms IS NULL THEN 0 ELSE duration_ms END) FROM population_ranked WHERE provider_rank = 1) AS duration_known,
|
|
144
|
+
(SELECT SUM(source_event_count) FROM population_ranked WHERE provider_rank = 1) AS source_event_count,
|
|
145
|
+
SUM(input_tokens) AS total_input_tokens,
|
|
146
|
+
SUM(cached_input_tokens) AS total_cached_input_tokens,
|
|
147
|
+
SUM(output_tokens) AS total_output_tokens,
|
|
148
|
+
SUM(reasoning_tokens) AS total_reasoning_tokens,
|
|
149
|
+
SUM(total_tokens) AS total_tokens,
|
|
150
|
+
SUM(cost_usd) AS total_cost_usd,
|
|
151
|
+
SUM(cost_brl) AS total_cost_brl
|
|
152
|
+
FROM filtered_segments`)
|
|
153
|
+
.get(...values) as Record<string, unknown>;
|
|
154
|
+
const rows = context.database
|
|
155
|
+
.prepare(
|
|
156
|
+
`${ctes} ${facts} SELECT keys.key, keys.key AS label, COALESCE(population.invocation_count,0) AS invocation_count, COALESCE(task_population.task_count,0) AS task_count, population.total_duration, population.source_event_count, financial.total_tokens, financial.total_cost_usd, financial.total_cost_brl FROM keys LEFT JOIN population USING(key) LEFT JOIN task_population USING(key) LEFT JOIN financial USING(key) ORDER BY financial.total_cost_brl DESC, keys.key LIMIT ? OFFSET ?`,
|
|
157
|
+
)
|
|
158
|
+
.all(...values, limit, offset) as Array<Record<string, unknown>>;
|
|
159
|
+
return {
|
|
160
|
+
data_source: "sqlite_read_model" as const,
|
|
161
|
+
view,
|
|
162
|
+
offset,
|
|
163
|
+
limit,
|
|
164
|
+
total_count,
|
|
165
|
+
has_more: offset + rows.length < total_count,
|
|
166
|
+
totals,
|
|
167
|
+
rows,
|
|
168
|
+
};
|
|
169
|
+
}
|