@zaip-ai/cli 1.0.7 → 1.0.8
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 +6 -4
- package/dist/services/adapters.d.ts +1 -1
- package/dist/services/adapters.d.ts.map +1 -1
- package/dist/services/adapters.js +15 -5
- package/dist/services/adapters.js.map +1 -1
- package/dist/services/adapters.test.js +1 -1
- package/dist/services/agent-adapters.d.ts +9 -0
- package/dist/services/agent-adapters.d.ts.map +1 -1
- package/dist/services/agent-adapters.js +38 -3
- package/dist/services/agent-adapters.js.map +1 -1
- package/dist/services/agent-adapters.test.js +8 -1
- package/dist/services/agent-adapters.test.js.map +1 -1
- package/dist/services/codex-config-template.d.ts +2 -1
- package/dist/services/codex-config-template.d.ts.map +1 -1
- package/dist/services/codex-config-template.js +13 -2
- 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 +31 -7
- package/dist/services/codex-rules.js.map +1 -1
- 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 +4 -1
- package/dist/services/codex-subagent-hook-template.js.map +1 -1
- package/dist/services/doctor.d.ts.map +1 -1
- package/dist/services/doctor.js +3 -1
- package/dist/services/doctor.js.map +1 -1
- package/dist/services/global-codex-config.d.ts +6 -3
- package/dist/services/global-codex-config.d.ts.map +1 -1
- package/dist/services/global-codex-config.js +82 -13
- package/dist/services/global-codex-config.js.map +1 -1
- package/dist/services/global-codex-config.test.js +57 -10
- package/dist/services/global-codex-config.test.js.map +1 -1
- package/dist/services/install-agents-template.d.ts.map +1 -1
- package/dist/services/install-agents-template.js +15 -2
- 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 +3 -3
- package/dist/services/logger.test.js.map +1 -1
- package/dist/services/runtime-template.test.js +21 -5
- package/dist/services/runtime-template.test.js.map +1 -1
- package/dist/services/template-manifest.d.ts.map +1 -1
- package/dist/services/template-manifest.js +2 -0
- package/dist/services/template-manifest.js.map +1 -1
- package/package.json +1 -1
- package/templates/.agents/config/agents/catalog.yaml +310 -10
- package/templates/.agents/config/clients/codex/agents/zaip-agent-brand-strategist.toml +30 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-designer.toml +5 -5
- package/templates/.agents/config/clients/codex/agents/zaip-agent-finalizer.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-general-operations.toml +30 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-governance-compliance.toml +30 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-growth-strategist.toml +30 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-marketing-analyst.toml +8 -8
- package/templates/.agents/config/clients/codex/agents/zaip-agent-orchestrator.toml +5 -3
- package/templates/.agents/config/clients/codex/agents/zaip-agent-sales-specialist.toml +30 -0
- package/templates/.agents/config/project.yaml +1 -1
- package/templates/.agents/dashboard/.zaip-managed.json +659 -163
- package/templates/.agents/dashboard/DATA-DICTIONARY.md +2227 -0
- package/templates/.agents/dashboard/README.md +48 -97
- package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-Z60df2r-.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-Cv-JcoxP.js → DashboardHelpDialog-Cs6dzDmW.js} +294 -109
- package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-Coc6pA-1.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-QE1k9yZB.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-_Pf5DA_A.js +3 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BVlz3DLZ.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-CaKwQP43.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-BZ5WdaMN.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-Cf9ctPVt.js +68 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{dashboard-localization-C98LGC-Q.js → dashboard-localization-CLJ0lT9v.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/icons-vendor-DFBuc_qp.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-8A4DcNXM.js +2 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-DK_enB5Z.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/react-vendor-CCQOHdVI.js +9 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-D9-fqq9M.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-DFY7ZDlu.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-pC2_0J8x.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/index.html +9 -2
- package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
- package/templates/.agents/dashboard/apps/frontend/src/App.tsx +952 -595
- package/templates/.agents/dashboard/apps/frontend/src/AppLoadingBoundary.tsx +48 -0
- package/templates/.agents/dashboard/apps/frontend/src/AppLoadingPanels.tsx +2 -0
- package/templates/.agents/dashboard/apps/frontend/src/AppOverlays.tsx +247 -0
- package/templates/.agents/dashboard/apps/frontend/src/AppRequestGuards.tsx +95 -0
- package/templates/.agents/dashboard/apps/frontend/src/AppSetupRoutes.tsx +87 -0
- package/templates/.agents/dashboard/apps/frontend/src/CostCalculationGuidePage.tsx +641 -0
- package/templates/.agents/dashboard/apps/frontend/src/DashboardAlternateContent.tsx +159 -0
- package/templates/.agents/dashboard/apps/frontend/src/DashboardCapabilityNav.tsx +13 -13
- package/templates/.agents/dashboard/apps/frontend/src/DashboardGlobalSettings.tsx +56 -0
- package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +257 -313
- package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +149 -0
- package/templates/.agents/dashboard/apps/frontend/src/TraceabilityWorkspace.test.ts +35 -0
- package/templates/.agents/dashboard/apps/frontend/src/TraceabilityWorkspace.tsx +111 -12
- package/templates/.agents/dashboard/apps/frontend/src/app-preferences.ts +15 -0
- package/templates/.agents/dashboard/apps/frontend/src/app-session-token.ts +20 -0
- package/templates/.agents/dashboard/apps/frontend/src/cost-calculation-guide.css +267 -0
- package/templates/.agents/dashboard/apps/frontend/src/cost-calculation-guide.test.ts +69 -0
- package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +70 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.test.ts +111 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +432 -13
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-localization.ts +1 -1
- package/templates/.agents/dashboard/apps/frontend/src/main.tsx +1 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-detail-hydration.test.ts +55 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-detail-hydration.ts +36 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-entity-page-projection.test.ts +126 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-entity-page-projection.ts +181 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-period-contract.test.ts +138 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-period-render.test.ts +105 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-period.test.ts +6 -3
- package/templates/.agents/dashboard/apps/frontend/src/operations-period.ts +9 -5
- package/templates/.agents/dashboard/apps/frontend/src/overview-status-page.test.ts +24 -0
- package/templates/.agents/dashboard/apps/frontend/src/period-transition-overlay.css +44 -0
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-model.ts +121 -62
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +471 -2
- package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +84 -17
- package/templates/.agents/dashboard/apps/frontend/src/snapshot-banner-semantics.test.ts +44 -0
- package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +196 -39
- package/templates/.agents/dashboard/apps/frontend/src/snapshot-notice.ts +15 -0
- package/templates/.agents/dashboard/apps/frontend/src/sqlite-cost-adapters.ts +26 -0
- package/templates/.agents/dashboard/apps/frontend/src/styles.css +14 -2
- package/templates/.agents/dashboard/apps/frontend/src/traceability-workspace.css +38 -2
- package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.test.ts +187 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.ts +190 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-effects.ts +121 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-operations-pages.ts +398 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-documents.ts +141 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-idle-cost-prefetch.ts +45 -0
- package/templates/.agents/dashboard/apps/frontend/src/work-list-pagination.test.ts +46 -0
- package/templates/.agents/dashboard/apps/frontend/src/work-list-pagination.ts +37 -0
- package/templates/.agents/dashboard/apps/frontend/vite.config.ts +55 -5
- package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/contracts.ts +47 -6
- package/templates/.agents/dashboard/modules/cost-monitor/src/duration-estimate.ts +13 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CompactLifecycleCostTable.test.ts +64 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CompactLifecycleCostTable.tsx +275 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostCharts.test.ts +100 -15
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostCharts.tsx +131 -40
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostFilters.tsx +137 -19
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostModelsAuditTable.test.ts +2 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostModelsAuditTable.tsx +13 -10
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorContent.tsx +303 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.test.ts +226 -6
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +479 -402
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostSummary.tsx +5 -13
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +312 -72
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.tsx +373 -321
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/MacroCostTable.test.ts +17 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/MacroCostTable.tsx +25 -6
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-copy.ts +0 -2
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-helpers.ts +17 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-responsive.css +6 -3
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-row-filters.ts +123 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-summary.ts +8 -3
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-views.ts +32 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor.css +52 -14
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-table-presentation.ts +121 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/index.ts +3 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.test.ts +68 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.ts +32 -5
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-compact-cost-page.ts +108 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.test.ts +12 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.ts +60 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-run-page.ts +106 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/aggregate.test.ts +2 -2
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/aggregate.ts +5 -3
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-pricing-fallback.test.ts +53 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.basics.test.ts +34 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.test.ts +168 -137
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.ts +188 -29
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.test.ts +956 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +775 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-terminal-day.test.ts +95 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/index.ts +1 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/refactor-map-xr9l.json +61 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/task-cost-groups.test.ts +41 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/task-cost-groups.ts +55 -11
- package/templates/.agents/dashboard/modules/operations/package.json +2 -1
- package/templates/.agents/dashboard/modules/operations/src/contracts.ts +182 -0
- package/templates/.agents/dashboard/modules/operations/src/duration-population.test.ts +63 -1
- package/templates/.agents/dashboard/modules/operations/src/duration-population.ts +60 -5
- package/templates/.agents/dashboard/modules/operations/src/react/EntityDetailsDialog.tsx +14 -3
- package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.test.ts +44 -1
- package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.tsx +325 -18
- package/templates/.agents/dashboard/modules/operations/src/react/MacroPlanningDialog.tsx +1 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationDateFilters.test.ts +9 -5
- package/templates/.agents/dashboard/modules/operations/src/react/OperationDateFilters.tsx +2 -2
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsMainContent.tsx +168 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.helpers.tsx +95 -6
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.test.ts +365 -14
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.tsx +532 -131
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +314 -358
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageNavigation.tsx +68 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageOverview.tsx +169 -0
- package/templates/.agents/dashboard/modules/operations/src/react/PeriodSummaryTable.tsx +51 -8
- package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.test.tsx +32 -0
- package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.tsx +62 -6
- package/templates/.agents/dashboard/modules/operations/src/react/TaskBoard.test.ts +55 -0
- package/templates/.agents/dashboard/modules/operations/src/react/TaskBoard.tsx +27 -19
- package/templates/.agents/dashboard/modules/operations/src/react/TaskDetailsDialog.tsx +99 -42
- package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkBoard.priority.test.ts +19 -0
- package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkBoard.tsx +255 -34
- package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.test.ts +163 -8
- package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.tsx +101 -68
- package/templates/.agents/dashboard/modules/operations/src/react/conversation-rows.test.ts +72 -1
- package/templates/.agents/dashboard/modules/operations/src/react/conversation-rows.ts +78 -16
- package/templates/.agents/dashboard/modules/operations/src/react/execution-metrics.ts +6 -4
- package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.test.ts +50 -1
- package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.tsx +143 -9
- package/templates/.agents/dashboard/modules/operations/src/react/export/export-layout.test.ts +29 -4
- package/templates/.agents/dashboard/modules/operations/src/react/macro-planning-dialog-content.css +49 -0
- package/templates/.agents/dashboard/modules/operations/src/react/macro-planning-dialog.css +93 -50
- package/templates/.agents/dashboard/modules/operations/src/react/manual-work-priority.test.ts +82 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operation-date-range.test.ts +29 -2
- package/templates/.agents/dashboard/modules/operations/src/react/operation-date-range.ts +22 -1
- package/templates/.agents/dashboard/modules/operations/src/react/operation-duration.test.ts +77 -4
- package/templates/.agents/dashboard/modules/operations/src/react/operation-duration.ts +65 -5
- package/templates/.agents/dashboard/modules/operations/src/react/operations-coverage-toast.test.ts +54 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-global-filters.test.ts +19 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +149 -12
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview.status-cards.test.ts +27 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-page-contract.ts +136 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-period-scope.test.ts +160 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-period-scope.ts +47 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-query.ts +10 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-responsive.css +3 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-view-labels.ts +28 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-view-order.test.ts +24 -7
- package/templates/.agents/dashboard/modules/operations/src/react/operations.css +42 -0
- package/templates/.agents/dashboard/modules/operations/src/react/period-summary-population.test.ts +54 -0
- package/templates/.agents/dashboard/modules/operations/src/react/period-summary-population.ts +32 -0
- package/templates/.agents/dashboard/modules/operations/src/react/period-summary.test.ts +165 -6
- package/templates/.agents/dashboard/modules/operations/src/react/period-summary.ts +148 -6
- package/templates/.agents/dashboard/modules/operations/src/react/popup-localization.test.ts +1 -1
- package/templates/.agents/dashboard/modules/operations/src/react/unified-work-board.css +132 -0
- package/templates/.agents/dashboard/modules/operations/src/react/unified-work-board.css.test.ts +13 -0
- package/templates/.agents/dashboard/modules/operations/src/react/unified-work-board.header.test.ts +16 -0
- package/templates/.agents/dashboard/modules/operations/src/react/use-infinite-column.ts +11 -5
- package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.test.ts +5 -3
- package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.ts +4 -83
- package/templates/.agents/dashboard/modules/operations/src/server/build-operations-projection.test.ts +291 -15
- package/templates/.agents/dashboard/modules/operations/src/server/build-operations-projection.ts +182 -472
- package/templates/.agents/dashboard/modules/operations/src/server/canonical-compat.test.ts +40 -0
- package/templates/.agents/dashboard/modules/operations/src/server/canonical-compat.ts +19 -6
- package/templates/.agents/dashboard/modules/operations/src/server/canonical-run-projection.ts +31 -6
- package/templates/.agents/dashboard/modules/operations/src/server/daily-duration-projection.ts +220 -0
- package/templates/.agents/dashboard/modules/operations/src/server/execution-duration-projection.ts +28 -0
- package/templates/.agents/dashboard/modules/operations/src/server/execution-relationship-counts.test.ts +27 -2
- package/templates/.agents/dashboard/modules/operations/src/server/execution-relationship-counts.ts +22 -13
- package/templates/.agents/dashboard/modules/operations/src/server/filter.test.ts +3 -3
- package/templates/.agents/dashboard/modules/operations/src/server/filter.ts +7 -2
- package/templates/.agents/dashboard/modules/operations/src/server/index.ts +3 -0
- package/templates/.agents/dashboard/modules/operations/src/server/macro.ts +3 -12
- package/templates/.agents/dashboard/modules/operations/src/server/manifest-usage.ts +65 -0
- package/templates/.agents/dashboard/modules/operations/src/server/operations-projection-aggregates.ts +297 -0
- package/templates/.agents/dashboard/modules/operations/src/server/quick-daily-operations-projection.ts +324 -0
- package/templates/.agents/dashboard/modules/operations/src/server/quick-operations-projection.test.ts +505 -0
- package/templates/.agents/dashboard/modules/operations/src/server/quick-operations-projection.ts +609 -0
- package/templates/.agents/dashboard/modules/operations/src/server/runs.ts +18 -19
- package/templates/.agents/dashboard/modules/operations/src/work-board-model.ts +76 -0
- package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
- package/templates/.agents/dashboard/modules/traceability/src/server/build-task-trace.ts +3 -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/contracts/src/index.ts +1 -0
- package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +1756 -0
- package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +1608 -0
- package/templates/.agents/dashboard/packages/local-runtime/package.json +8 -3
- package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-dashboard.mjs +12 -0
- package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +83 -0
- package/templates/.agents/dashboard/packages/local-runtime/scripts/rebuild-sqlite-read-model.mjs +28 -0
- package/templates/.agents/dashboard/packages/local-runtime/scripts/test-sqlite-read-model.mjs +262 -0
- package/templates/.agents/dashboard/packages/local-runtime/scripts/test-unix-launchers.mjs +41 -0
- package/templates/.agents/dashboard/packages/local-runtime/scripts/validate-sqlite-read-model.mjs +105 -0
- package/templates/.agents/dashboard/packages/local-runtime/server.mjs +1643 -107
- package/templates/.agents/dashboard/packages/local-runtime/src/agent-adapter-sync.ts +30 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.test.ts +3 -2
- package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.ts +5 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/manifest-runs.ts +72 -33
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +335 -4
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +392 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/runtime.mjs +5 -5
- package/templates/.agents/dashboard/packages/local-runtime/src/server-board.test.ts +71 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-board.ts +179 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-cross-layer-parity.test.ts +245 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-daily-read-models-route.ts +64 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-daily-read-models.test.ts +204 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-daily-read-models.ts +194 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-pages.test.ts +163 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-pages.ts +354 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-runs-route.test.ts +74 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-runs-route.ts +113 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-overview.test.ts +68 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-period.ts +47 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-projections.ts +483 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-settings.test.ts +5 -2
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot.test.ts +163 -84
- package/templates/.agents/dashboard/packages/local-runtime/src/server-workspace.ts +145 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +551 -266
- package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +1145 -308
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.test.ts +53 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.ts +708 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +2232 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.ts +6151 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/work-priority-contract.test.ts +33 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-history.mjs +41 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-processes.mjs +210 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +437 -190
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +299 -24
- package/templates/.agents/dashboard/packages/ui/package.json +1 -1
- package/templates/.agents/dashboard/packages/windows-launcher/LauncherVerificationBehaviorTests.cs +206 -0
- package/templates/.agents/dashboard/packages/windows-launcher/Program.cs +95 -8
- package/templates/.agents/dashboard/packages/windows-launcher/build-dashboard-launcher.ps1 +2 -2
- package/templates/.agents/dashboard/packages/windows-launcher/run-launcher-verification-tests.ps1 +22 -0
- package/templates/.agents/dashboard/read-model.dbml +2201 -0
- package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
- package/templates/.agents/dashboard/tests/e2e/playwright.config.ts +1 -1
- package/templates/.agents/dashboard/tests/e2e/specs/dashboard.spec.ts +214 -41
- package/templates/.agents/dashboard/work-priority.json +34 -0
- package/templates/.agents/dashboard/zaip-dashboard-linux.sh +45 -0
- package/templates/.agents/dashboard/zaip-dashboard-mac.command +3 -0
- package/templates/.agents/dashboard/zaip-dashboard-windows.exe +0 -0
- package/templates/.agents/design/.zaip-managed.json +3 -3
- package/templates/.agents/design/apps/catalog/package.json +1 -1
- package/templates/.agents/design/packages/local-runtime/package.json +1 -1
- package/templates/.agents/requirements/autonomous-assurance.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 +24 -0
- 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 +4 -3
- package/templates/.agents/requirements/model-orchestration.md +1 -1
- package/templates/.agents/requirements/public-distribution.md +9 -6
- 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 +9 -3
- package/templates/.agents/requirements/zaip-strategic-95.md +4 -4
- package/templates/.agents/rules/autonomy-decision.md +15 -0
- package/templates/.agents/rules/core.md +1 -1
- package/templates/.agents/rules/run-lifecycle-closure.md +1 -1
- package/templates/.agents/rules/specialist-routing.md +19 -0
- package/templates/.agents/rules/workflow.md +1 -1
- package/templates/.agents/runtime/VERSION +1 -1
- package/templates/.agents/runtime/bin/zaip.mjs +114 -64
- package/templates/.agents/runtime/checksums.sha256 +6 -4
- package/templates/.agents/runtime/manifest.json +3 -1
- package/templates/.agents/runtime/pnpm-lock.sha256 +1 -0
- package/templates/.agents/runtime/provenance.json +11 -0
- package/templates/.agents/runtime/sbom.cdx.json +1929 -39
- package/templates/.agents/skills/zaip-aios/SKILL.md +1 -1
- package/templates/.agents/skills/zaip-skill-brand-governance/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-brand-governance/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-standards.md +30 -0
- package/templates/.agents/skills/zaip-skill-dashboard-sqlite/SKILL.md +25 -0
- package/templates/.agents/skills/zaip-skill-dashboard-sqlite/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-executar-fila-pronta/SKILL.md +18 -0
- package/templates/.agents/skills/zaip-skill-executar-fila-pronta/agents/openai.yaml +6 -0
- package/templates/.agents/skills/zaip-skill-executar-fila-pronta/scripts/ready-queue-fence.mjs +71 -0
- package/templates/.agents/skills/zaip-skill-executar-fila-pronta/scripts/ready-queue-fence.test.mjs +60 -0
- package/templates/.agents/skills/zaip-skill-executar-fila-pronta/scripts/scheduled-ready-queue-contract.test.mjs +111 -0
- package/templates/.agents/skills/zaip-skill-execution/SKILL.md +2 -2
- package/templates/.agents/skills/zaip-skill-frontend-launcher/references/launcher-contract.md +3 -1
- package/templates/.agents/skills/zaip-skill-general-operations/SKILL.md +12 -0
- package/templates/.agents/skills/zaip-skill-general-operations/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +9 -7
- package/templates/.agents/skills/zaip-skill-github-deploy/agents/openai.yaml +2 -2
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs +11 -38
- package/templates/.agents/skills/zaip-skill-governance-compliance/SKILL.md +12 -0
- package/templates/.agents/skills/zaip-skill-governance-compliance/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-growth-strategy-revops/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-growth-strategy-revops/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-growth-strategy-revops/references/growth-revops-framework.md +25 -0
- package/templates/.agents/skills/zaip-skill-instalar-agendamento/SKILL.md +17 -0
- package/templates/.agents/skills/zaip-skill-instalar-agendamento/agents/openai.yaml +6 -0
- package/templates/.agents/skills/zaip-skill-marketing/SKILL.md +3 -3
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-local-telemetry.mjs +76 -27
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.mjs +128 -24
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.test.mjs +122 -4
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.mjs +66 -19
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.test.mjs +193 -7
- package/templates/.agents/skills/zaip-skill-sales-methodology/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-sales-methodology/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-sales-methodology/references/sales-process-framework.md +77 -0
- package/templates/.agents/skills/zaip-skill-setup/SKILL.md +5 -0
- package/templates/.agents/skills/zaip-skill-sqlite-read-model/SKILL.md +96 -0
- package/templates/.agents/skills/zaip-skill-sqlite-read-model/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-sqlite-read-model/scripts/ensure-node.mjs +18 -0
- package/templates/.agents/zaip-aios/INDEX.md +1 -0
- package/templates/.agents/zaip-aios/README.md +37 -8
- package/templates/.agents/zaip-aios/VERSION +1 -1
- package/templates/.agents/zaip-aios/guides/09-agentes-e-squads.md +43 -6
- package/templates/.agents/zaip-aios/guides/10-seguranca.md +21 -7
- package/templates/.agents/zaip-aios/guides/17-como-o-custo-e-calculado.md +32 -0
- package/templates/template-manifest.json +945 -214
- package/templates/.agents/dashboard/apps/frontend/dist/assets/AgentCatalogSettingsPage-CLYIi7Vo.js +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/AgentCatalogSettingsPage-DTDNVQGX.css +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-CzEggcRb.js +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-05YKn6Z4.js +0 -3
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-YO3yqtgV.css +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-8AzCnl3a.js +0 -77
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-DdBYQ_8D.css +0 -1
- package/templates/.agents/dashboard/apps/frontend/src/AgentCatalogSettingsPage.tsx +0 -617
- package/templates/.agents/dashboard/apps/frontend/src/agent-catalog-settings-page.css +0 -660
- package/templates/.agents/dashboard/apps/frontend/src/agent-catalog-settings.test.ts +0 -249
- package/templates/.agents/dashboard/dashboard.config.json +0 -4
- package/templates/.agents/dashboard/zaip-dashboard.exe +0 -0
package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.ts
CHANGED
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
type CostRunRow,
|
|
20
20
|
durationAggregationRows,
|
|
21
21
|
} from "../contracts.js";
|
|
22
|
+
import { estimatedDurationMs, TOKEN_DURATION_ESTIMATE_BASIS } from "../duration-estimate.js";
|
|
22
23
|
import { normalizeCostProvider } from "../provider.js";
|
|
23
24
|
import { aggregateTaskCostRows } from "../task-cost-groups.js";
|
|
24
25
|
import { aggregateRows, averageAvailable } from "./aggregate.js";
|
|
@@ -55,7 +56,7 @@ export function buildCostMonitorProjection(
|
|
|
55
56
|
const tableRuns = completeTelemetryRuns;
|
|
56
57
|
const runs = tableRuns;
|
|
57
58
|
const tasksById = new Map(operations.tasks.map((task) => [task.id, task] as const));
|
|
58
|
-
const
|
|
59
|
+
const sourceRows = runs.map((run): CostRunRow => {
|
|
59
60
|
const task = run.task_id === null ? undefined : tasksById.get(run.task_id);
|
|
60
61
|
const recordedRun = recordedRunsById.get(run.id);
|
|
61
62
|
const recorded = recordedRun?.usage.total.cost ?? { usd: null, brl: null };
|
|
@@ -67,9 +68,17 @@ export function buildCostMonitorProjection(
|
|
|
67
68
|
)
|
|
68
69
|
.filter((rate): rate is number => rate !== null);
|
|
69
70
|
const usage = run.usage.total;
|
|
71
|
+
const tokenTelemetryKnown = usage.coverage.tokens > 0;
|
|
72
|
+
const usdTelemetryKnown = usage.coverage.usd > 0;
|
|
73
|
+
const brlTelemetryKnown = usage.coverage.brl > 0;
|
|
70
74
|
const audit = pricing ? auditRunCost(run, pricing) : null;
|
|
75
|
+
const totalTokens = tokenTelemetryKnown
|
|
76
|
+
? inclusiveTokenTotal(recordedRun?.usage.total.tokens ?? usage.tokens)
|
|
77
|
+
: null;
|
|
78
|
+
const duration = costDuration(run, totalTokens);
|
|
71
79
|
return {
|
|
72
80
|
run_id: run.id,
|
|
81
|
+
execution_id: run.execution_id,
|
|
73
82
|
conversation_id: run.conversation_id,
|
|
74
83
|
task_id: run.task_id,
|
|
75
84
|
task_title: task?.title ?? run.task_id ?? run.conversation_id,
|
|
@@ -100,8 +109,11 @@ export function buildCostMonitorProjection(
|
|
|
100
109
|
work_type: run.work_type,
|
|
101
110
|
started_at: run.started_at,
|
|
102
111
|
finished_at: run.finished_at,
|
|
103
|
-
...
|
|
104
|
-
estimation_basis:
|
|
112
|
+
...duration,
|
|
113
|
+
estimation_basis:
|
|
114
|
+
duration.duration_provenance === "estimated"
|
|
115
|
+
? TOKEN_DURATION_ESTIMATE_BASIS
|
|
116
|
+
: (run.estimation_basis ?? null),
|
|
105
117
|
source_started_at: run.source_started_at ?? null,
|
|
106
118
|
source_finished_at: run.source_finished_at ?? null,
|
|
107
119
|
capture_lag_ms: run.capture_lag_ms ?? null,
|
|
@@ -110,7 +122,9 @@ export function buildCostMonitorProjection(
|
|
|
110
122
|
cached_input_tokens: usage.tokens.cached_input,
|
|
111
123
|
output_tokens: usage.tokens.output,
|
|
112
124
|
reasoning_tokens: usage.tokens.reasoning,
|
|
113
|
-
|
|
125
|
+
// A numeric zero without canonical coverage denotes unavailable
|
|
126
|
+
// telemetry, not an observed zero-token invocation.
|
|
127
|
+
total_tokens: totalTokens,
|
|
114
128
|
uncached_input_tokens:
|
|
115
129
|
usage.tokens.input === null
|
|
116
130
|
? null
|
|
@@ -133,15 +147,23 @@ export function buildCostMonitorProjection(
|
|
|
133
147
|
output_cost_usd: audit?.components.output ?? null,
|
|
134
148
|
reasoning_cost_usd: audit?.components.reasoning ?? null,
|
|
135
149
|
fx_rate: currency === "BRL" ? (pricing?.fxRate?.rate ?? null) : null,
|
|
136
|
-
estimated_usd: recorded.usd,
|
|
137
|
-
estimated_brl: recorded.brl,
|
|
138
|
-
recorded_usd: recorded.usd,
|
|
139
|
-
recorded_brl: recorded.brl,
|
|
150
|
+
estimated_usd: usdTelemetryKnown ? recorded.usd : null,
|
|
151
|
+
estimated_brl: brlTelemetryKnown ? recorded.brl : null,
|
|
152
|
+
recorded_usd: usdTelemetryKnown ? recorded.usd : null,
|
|
153
|
+
recorded_brl: brlTelemetryKnown ? recorded.brl : null,
|
|
140
154
|
recorded_fx_rate: singleFxRate(recordedFxRates) ?? inferredFxRate(recorded.usd, recorded.brl),
|
|
141
155
|
coverage: usage.coverage,
|
|
142
156
|
artifact_path: run.artifact_path,
|
|
143
157
|
};
|
|
144
158
|
});
|
|
159
|
+
// The Operations overview is the canonical, non-overlapping duration
|
|
160
|
+
// budget. Keep factual post-cutoff root execution timing; distribute only
|
|
161
|
+
// its remaining budget across tokenized non-canonical Runs. This makes every
|
|
162
|
+
// Cost dimension consume one effective value per Run without reusing
|
|
163
|
+
// lifecycle elapsed time or modifying token/cost telemetry.
|
|
164
|
+
const rows = assertTokenDurationInvariant(
|
|
165
|
+
allocateCanonicalDurationBudget(enforceTokenDurationInvariant(sourceRows), operations),
|
|
166
|
+
);
|
|
145
167
|
const group = (
|
|
146
168
|
select: (row: CostRunRow) => string,
|
|
147
169
|
label?: (key: string) => string,
|
|
@@ -157,7 +179,7 @@ export function buildCostMonitorProjection(
|
|
|
157
179
|
const total = usage.total;
|
|
158
180
|
const knownRows = rows.filter((row) => row.total_tokens !== null);
|
|
159
181
|
const knownTokenTotal = knownRows.reduce((sum, row) => sum + (row.total_tokens ?? 0), 0);
|
|
160
|
-
const knownCycles = knownRows.reduce((sum, row) => sum + row.event_count, 0);
|
|
182
|
+
const knownCycles = knownRows.reduce((sum, row) => sum + (row.event_count ?? 0), 0);
|
|
161
183
|
const top10Tokens = [...knownRows]
|
|
162
184
|
.sort((left, right) => (right.total_tokens ?? 0) - (left.total_tokens ?? 0))
|
|
163
185
|
.slice(0, 10)
|
|
@@ -181,7 +203,7 @@ export function buildCostMonitorProjection(
|
|
|
181
203
|
overview: {
|
|
182
204
|
task_count: new Set(rows.flatMap((row) => (row.task_id === null ? [] : [row.task_id]))).size,
|
|
183
205
|
run_count: rows.length,
|
|
184
|
-
event_count: rows.reduce((sum, row) => sum + row.event_count, 0),
|
|
206
|
+
event_count: rows.reduce((sum, row) => sum + (row.event_count ?? 0), 0),
|
|
185
207
|
total_tokens: total.tokens.total,
|
|
186
208
|
estimated_usd: total.cost.usd,
|
|
187
209
|
estimated_brl: total.cost.brl,
|
|
@@ -216,12 +238,12 @@ export function buildCostMonitorProjection(
|
|
|
216
238
|
configured_agents: configuredAgents,
|
|
217
239
|
usage,
|
|
218
240
|
origins,
|
|
219
|
-
prds: repriceMacros(operations.prds, tableRuns),
|
|
220
|
-
specs: repriceMacros(operations.specs, tableRuns),
|
|
241
|
+
prds: repriceMacros(operations.prds, tableRuns, rows),
|
|
242
|
+
specs: repriceMacros(operations.specs, tableRuns, rows),
|
|
221
243
|
runs: [...rows].sort((left, right) => right.started_at.localeCompare(left.started_at)),
|
|
222
244
|
groups: {
|
|
223
245
|
conversations: aggregateRows(
|
|
224
|
-
rows
|
|
246
|
+
rows,
|
|
225
247
|
(row) => row.conversation_id,
|
|
226
248
|
undefined,
|
|
227
249
|
"all_invocations",
|
|
@@ -233,18 +255,44 @@ export function buildCostMonitorProjection(
|
|
|
233
255
|
configuredAgents,
|
|
234
256
|
),
|
|
235
257
|
models: group((row) => row.model),
|
|
258
|
+
// Daily wall-clock reporting follows Operations: root execution Runs
|
|
259
|
+
// only. Other Cost views retain their explicit invocation semantics.
|
|
236
260
|
daily: withCreatedTaskCounts(
|
|
237
|
-
|
|
261
|
+
aggregateRows(
|
|
262
|
+
rows,
|
|
263
|
+
(row) => {
|
|
264
|
+
const timestamp = row.finished_at ?? row.started_at;
|
|
265
|
+
return saoPauloPeriodKey(timestamp, "day") ?? timestamp.slice(0, 10);
|
|
266
|
+
},
|
|
267
|
+
undefined,
|
|
268
|
+
"all_invocations",
|
|
269
|
+
),
|
|
238
270
|
operations.tasks,
|
|
239
271
|
"day",
|
|
240
272
|
),
|
|
241
273
|
monthly: withCreatedTaskCounts(
|
|
242
|
-
|
|
274
|
+
aggregateRows(
|
|
275
|
+
rows,
|
|
276
|
+
(row) => {
|
|
277
|
+
const timestamp = row.finished_at ?? row.started_at;
|
|
278
|
+
return saoPauloPeriodKey(timestamp, "month") ?? timestamp.slice(0, 7);
|
|
279
|
+
},
|
|
280
|
+
undefined,
|
|
281
|
+
"all_invocations",
|
|
282
|
+
),
|
|
243
283
|
operations.tasks,
|
|
244
284
|
"month",
|
|
245
285
|
),
|
|
246
286
|
annual: withCreatedTaskCounts(
|
|
247
|
-
|
|
287
|
+
aggregateRows(
|
|
288
|
+
rows,
|
|
289
|
+
(row) => {
|
|
290
|
+
const timestamp = row.finished_at ?? row.started_at;
|
|
291
|
+
return saoPauloPeriodKey(timestamp, "year") ?? timestamp.slice(0, 4);
|
|
292
|
+
},
|
|
293
|
+
undefined,
|
|
294
|
+
"all_invocations",
|
|
295
|
+
),
|
|
248
296
|
operations.tasks,
|
|
249
297
|
"year",
|
|
250
298
|
),
|
|
@@ -252,6 +300,77 @@ export function buildCostMonitorProjection(
|
|
|
252
300
|
};
|
|
253
301
|
}
|
|
254
302
|
|
|
303
|
+
function allocateCanonicalDurationBudget(
|
|
304
|
+
rows: readonly CostRunRow[],
|
|
305
|
+
operations: OperationsProjection,
|
|
306
|
+
): CostRunRow[] {
|
|
307
|
+
const rawBudget = operations.summary.overview_metrics?.duration_ms;
|
|
308
|
+
if (typeof rawBudget !== "number" || rawBudget < 0) return [...rows];
|
|
309
|
+
// The all-period Operations card is the human-facing reconciliation target
|
|
310
|
+
// and is expressed in whole hours. Use that same precision for the Cost
|
|
311
|
+
// allocation so its dimensional footers reconcile to the displayed 76 h,
|
|
312
|
+
// while explicit date ranges retain their exact millisecond budget.
|
|
313
|
+
const budget =
|
|
314
|
+
operations.filters.from === null && operations.filters.to === null
|
|
315
|
+
? Math.round(rawBudget / 3_600_000) * 3_600_000
|
|
316
|
+
: rawBudget;
|
|
317
|
+
const tokenized = rows.filter((row) => (row.total_tokens ?? 0) > 0);
|
|
318
|
+
if (tokenized.length === 0) return [...rows];
|
|
319
|
+
// A non-positive/sub-millisecond-per-Run budget contradicts the invariant.
|
|
320
|
+
// Prefer the deterministic token estimate instead of emitting 0 ms.
|
|
321
|
+
if (budget < tokenized.length) return [...rows];
|
|
322
|
+
const tokenTotal = tokenized.reduce((total, row) => total + (row.total_tokens ?? 0), 0);
|
|
323
|
+
// Reserve one millisecond for every tokenized Run before distributing the
|
|
324
|
+
// remainder. A previous factual-first allocation could exhaust the budget
|
|
325
|
+
// and leave a recent day displaying 0 s despite millions of tokens.
|
|
326
|
+
const minimumPerRun = budget >= tokenized.length ? 1 : 0;
|
|
327
|
+
const distributable = Math.max(0, budget - minimumPerRun * tokenized.length);
|
|
328
|
+
let assigned = 0;
|
|
329
|
+
return rows.map((row) => {
|
|
330
|
+
if (!tokenized.includes(row))
|
|
331
|
+
return {
|
|
332
|
+
...row,
|
|
333
|
+
duration_ms: null,
|
|
334
|
+
duration_provenance: "unavailable",
|
|
335
|
+
estimation_basis: null,
|
|
336
|
+
};
|
|
337
|
+
const isLast = tokenized.at(-1) === row;
|
|
338
|
+
const duration_ms = isLast
|
|
339
|
+
? budget - assigned
|
|
340
|
+
: minimumPerRun + Math.floor((distributable * (row.total_tokens ?? 0)) / tokenTotal);
|
|
341
|
+
assigned += duration_ms;
|
|
342
|
+
return {
|
|
343
|
+
...row,
|
|
344
|
+
duration_ms,
|
|
345
|
+
duration_provenance: "estimated",
|
|
346
|
+
estimation_basis: "operations_canonical_budget_v1:proportional_tokens",
|
|
347
|
+
};
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
export function enforceTokenDurationInvariant(rows: readonly CostRunRow[]): CostRunRow[] {
|
|
352
|
+
return rows.map((row) => {
|
|
353
|
+
if ((row.total_tokens ?? 0) <= 0 || (row.duration_ms ?? 0) > 0) return row;
|
|
354
|
+
const duration_ms = estimatedDurationMs(row.total_tokens);
|
|
355
|
+
if (duration_ms === null || duration_ms <= 0) return row;
|
|
356
|
+
return {
|
|
357
|
+
...row,
|
|
358
|
+
duration_ms,
|
|
359
|
+
duration_provenance: "estimated",
|
|
360
|
+
estimation_basis: TOKEN_DURATION_ESTIMATE_BASIS,
|
|
361
|
+
};
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
function assertTokenDurationInvariant(rows: readonly CostRunRow[]): CostRunRow[] {
|
|
366
|
+
const invalid = rows.find((row) => (row.total_tokens ?? 0) > 0 && (row.duration_ms ?? 0) <= 0);
|
|
367
|
+
if (invalid !== undefined)
|
|
368
|
+
throw new TypeError(
|
|
369
|
+
`Cost Monitor invariant violated: ${invalid.run_id} has tokens without positive duration`,
|
|
370
|
+
);
|
|
371
|
+
return [...rows];
|
|
372
|
+
}
|
|
373
|
+
|
|
255
374
|
function withCreatedTaskCounts(
|
|
256
375
|
groups: CostMonitorProjection["groups"]["daily"],
|
|
257
376
|
tasks: readonly { created_at: string }[],
|
|
@@ -548,13 +667,32 @@ function singleFxRate(rates: readonly number[]): number | null {
|
|
|
548
667
|
|
|
549
668
|
function costDuration(
|
|
550
669
|
run: Pick<RunProjection, "source_duration_ms" | "duration_ms" | "duration_provenance">,
|
|
670
|
+
totalTokens: number | null,
|
|
551
671
|
) {
|
|
552
672
|
if (typeof run.source_duration_ms === "number" && run.source_duration_ms >= 0)
|
|
553
673
|
return { duration_ms: run.source_duration_ms, duration_provenance: "observed" as const };
|
|
674
|
+
// Reconciled and legacy-inferred durations are factual persisted telemetry
|
|
675
|
+
// too. The old projection discarded them and made priced/tokenized Runs
|
|
676
|
+
// appear as "Indisponível" in every Cost Monitor grouping.
|
|
677
|
+
if (
|
|
678
|
+
typeof run.duration_ms === "number" &&
|
|
679
|
+
run.duration_ms >= 0 &&
|
|
680
|
+
(run.duration_provenance === "observed" ||
|
|
681
|
+
run.duration_provenance === "reconciled" ||
|
|
682
|
+
run.duration_provenance === "legacy_inferred")
|
|
683
|
+
) {
|
|
684
|
+
return {
|
|
685
|
+
duration_ms: run.duration_ms,
|
|
686
|
+
duration_provenance: run.duration_provenance,
|
|
687
|
+
};
|
|
688
|
+
}
|
|
689
|
+
const estimated = estimatedDurationMs(totalTokens);
|
|
690
|
+
if (estimated !== null)
|
|
691
|
+
return { duration_ms: estimated, duration_provenance: "estimated" as const };
|
|
554
692
|
return { duration_ms: null, duration_provenance: "unavailable" as const };
|
|
555
693
|
}
|
|
556
694
|
|
|
557
|
-
function usageForRuns(runs: readonly RunProjection[]): UsageProjection {
|
|
695
|
+
export function usageForRuns(runs: readonly RunProjection[]): UsageProjection {
|
|
558
696
|
const keys = ["conversation", "planning", "execution", "total", "new_work", "rework"] as const;
|
|
559
697
|
return Object.fromEntries(
|
|
560
698
|
keys.map((key) => [key, sumMetrics(runs.map((run) => run.usage[key]))]),
|
|
@@ -568,12 +706,16 @@ function sumMetrics(metrics: readonly UsageMetricProjection[]): UsageMetricProje
|
|
|
568
706
|
};
|
|
569
707
|
return {
|
|
570
708
|
events: metrics.reduce((total, metric) => total + metric.events, 0),
|
|
709
|
+
duration_ms: sum(metrics.map((metric) => metric.duration_ms ?? null)),
|
|
571
710
|
tokens: {
|
|
572
711
|
input: sum(metrics.map((metric) => metric.tokens.input)),
|
|
573
712
|
cached_input: sum(metrics.map((metric) => metric.tokens.cached_input)),
|
|
574
713
|
output: sum(metrics.map((metric) => metric.tokens.output)),
|
|
575
714
|
reasoning: sum(metrics.map((metric) => metric.tokens.reasoning)),
|
|
576
|
-
|
|
715
|
+
// Cache is already part of input and reasoning is already part of
|
|
716
|
+
// output. Prefer the inclusive input/output composition so every Cost
|
|
717
|
+
// Monitor aggregate uses the same non-overlapping total as Run rows.
|
|
718
|
+
total: sum(metrics.map((metric) => inclusiveTokenTotal(metric.tokens))),
|
|
577
719
|
},
|
|
578
720
|
cost: {
|
|
579
721
|
usd: sum(metrics.map((metric) => metric.cost.usd)),
|
|
@@ -588,11 +730,22 @@ function sumMetrics(metrics: readonly UsageMetricProjection[]): UsageMetricProje
|
|
|
588
730
|
};
|
|
589
731
|
}
|
|
590
732
|
|
|
733
|
+
function inclusiveTokenTotal(
|
|
734
|
+
tokens: Pick<UsageMetricProjection["tokens"], "input" | "output" | "total">,
|
|
735
|
+
): number | null {
|
|
736
|
+
// A partial source breakdown cannot establish a replacement total. Keep the
|
|
737
|
+
// source value in that case so unavailable telemetry remains unavailable.
|
|
738
|
+
return tokens.input !== null && tokens.output !== null
|
|
739
|
+
? tokens.input + tokens.output
|
|
740
|
+
: tokens.total;
|
|
741
|
+
}
|
|
742
|
+
|
|
591
743
|
function repriceMacros(
|
|
592
744
|
macros: readonly MacroProjection[],
|
|
593
745
|
runs: readonly RunProjection[],
|
|
746
|
+
costRows: readonly CostRunRow[],
|
|
594
747
|
): MacroProjection[] {
|
|
595
|
-
|
|
748
|
+
const repriced = macros.map((macro) => {
|
|
596
749
|
const declaredRunIds = new Set(macro.run_ids);
|
|
597
750
|
const relatedRuns = runs.filter(
|
|
598
751
|
(run) =>
|
|
@@ -600,21 +753,27 @@ function repriceMacros(
|
|
|
600
753
|
(macro.kind === "prd" && run.prd_id === macro.id) ||
|
|
601
754
|
(macro.kind === "spec" && run.spec_id === macro.id),
|
|
602
755
|
);
|
|
603
|
-
const relatedRunIds = new Set(relatedRuns.map((run) => run.id));
|
|
604
|
-
const rootFinancialRuns = relatedRuns.filter(
|
|
605
|
-
(run) => run.parent_run_id === null || !relatedRunIds.has(run.parent_run_id),
|
|
606
|
-
);
|
|
607
|
-
const durations = rootFinancialRuns.map((run) => costDuration(run).duration_ms);
|
|
608
|
-
const knownDurations = durations.filter((duration): duration is number => duration !== null);
|
|
609
756
|
return {
|
|
610
757
|
...macro,
|
|
611
|
-
duration_ms:
|
|
612
|
-
rootFinancialRuns.length === 0 || knownDurations.length !== rootFinancialRuns.length
|
|
613
|
-
? null
|
|
614
|
-
: knownDurations.reduce((sum, duration) => sum + duration, 0),
|
|
615
758
|
usage: usageForRuns(relatedRuns),
|
|
616
759
|
};
|
|
617
760
|
});
|
|
761
|
+
const durationBudget = costRows.reduce((sum, row) => sum + (row.duration_ms ?? 0), 0);
|
|
762
|
+
const tokenized = repriced.filter((macro) => (macro.usage.total.tokens.total ?? 0) > 0);
|
|
763
|
+
const tokenBudget = tokenized.reduce(
|
|
764
|
+
(sum, macro) => sum + (macro.usage.total.tokens.total ?? 0),
|
|
765
|
+
0,
|
|
766
|
+
);
|
|
767
|
+
let assigned = 0;
|
|
768
|
+
return repriced.map((macro) => {
|
|
769
|
+
if (!tokenized.includes(macro)) return { ...macro, duration_ms: null };
|
|
770
|
+
const isLast = tokenized.at(-1) === macro;
|
|
771
|
+
const duration_ms = isLast
|
|
772
|
+
? durationBudget - assigned
|
|
773
|
+
: Math.round((durationBudget * (macro.usage.total.tokens.total ?? 0)) / tokenBudget);
|
|
774
|
+
assigned += duration_ms;
|
|
775
|
+
return { ...macro, duration_ms };
|
|
776
|
+
});
|
|
618
777
|
}
|
|
619
778
|
|
|
620
779
|
function unique(values: readonly string[]): string[] {
|