@zaip-ai/cli 1.0.7 → 1.3.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.
Files changed (444) hide show
  1. package/README.md +6 -4
  2. package/dist/services/adapters.d.ts +1 -1
  3. package/dist/services/adapters.d.ts.map +1 -1
  4. package/dist/services/adapters.js +15 -5
  5. package/dist/services/adapters.js.map +1 -1
  6. package/dist/services/adapters.test.js +1 -1
  7. package/dist/services/agent-adapters.d.ts +9 -0
  8. package/dist/services/agent-adapters.d.ts.map +1 -1
  9. package/dist/services/agent-adapters.js +39 -4
  10. package/dist/services/agent-adapters.js.map +1 -1
  11. package/dist/services/agent-adapters.test.js +13 -1
  12. package/dist/services/agent-adapters.test.js.map +1 -1
  13. package/dist/services/codex-config-template.d.ts +2 -1
  14. package/dist/services/codex-config-template.d.ts.map +1 -1
  15. package/dist/services/codex-config-template.js +13 -2
  16. package/dist/services/codex-config-template.js.map +1 -1
  17. package/dist/services/codex-rules.d.ts +1 -1
  18. package/dist/services/codex-rules.d.ts.map +1 -1
  19. package/dist/services/codex-rules.js +31 -7
  20. package/dist/services/codex-rules.js.map +1 -1
  21. package/dist/services/codex-subagent-hook-template.d.ts +1 -1
  22. package/dist/services/codex-subagent-hook-template.d.ts.map +1 -1
  23. package/dist/services/codex-subagent-hook-template.js +4 -1
  24. package/dist/services/codex-subagent-hook-template.js.map +1 -1
  25. package/dist/services/doctor.d.ts.map +1 -1
  26. package/dist/services/doctor.js +3 -1
  27. package/dist/services/doctor.js.map +1 -1
  28. package/dist/services/global-codex-config.d.ts +6 -3
  29. package/dist/services/global-codex-config.d.ts.map +1 -1
  30. package/dist/services/global-codex-config.js +82 -13
  31. package/dist/services/global-codex-config.js.map +1 -1
  32. package/dist/services/global-codex-config.test.js +57 -10
  33. package/dist/services/global-codex-config.test.js.map +1 -1
  34. package/dist/services/install-agents-template.d.ts.map +1 -1
  35. package/dist/services/install-agents-template.js +15 -2
  36. package/dist/services/install-agents-template.js.map +1 -1
  37. package/dist/services/logger.js +1 -1
  38. package/dist/services/logger.js.map +1 -1
  39. package/dist/services/logger.test.js +3 -3
  40. package/dist/services/logger.test.js.map +1 -1
  41. package/dist/services/runtime-template.test.js +21 -5
  42. package/dist/services/runtime-template.test.js.map +1 -1
  43. package/dist/services/template-manifest.d.ts.map +1 -1
  44. package/dist/services/template-manifest.js +7 -0
  45. package/dist/services/template-manifest.js.map +1 -1
  46. package/package.json +1 -1
  47. package/templates/.agents/architecture/software-architecture.md +131 -0
  48. package/templates/.agents/branding/brandbook.docx +0 -0
  49. package/templates/.agents/branding/brandbook.md +60 -0
  50. package/templates/.agents/config/agents/catalog.yaml +310 -10
  51. package/templates/.agents/config/clients/codex/agents/zaip-agent-brand-strategist.toml +30 -0
  52. package/templates/.agents/config/clients/codex/agents/zaip-agent-designer.toml +5 -5
  53. package/templates/.agents/config/clients/codex/agents/zaip-agent-finalizer.toml +2 -2
  54. package/templates/.agents/config/clients/codex/agents/zaip-agent-general-operations.toml +30 -0
  55. package/templates/.agents/config/clients/codex/agents/zaip-agent-governance-compliance.toml +30 -0
  56. package/templates/.agents/config/clients/codex/agents/zaip-agent-growth-strategist.toml +30 -0
  57. package/templates/.agents/config/clients/codex/agents/zaip-agent-marketing-analyst.toml +8 -8
  58. package/templates/.agents/config/clients/codex/agents/zaip-agent-orchestrator.toml +5 -3
  59. package/templates/.agents/config/clients/codex/agents/zaip-agent-sales-specialist.toml +30 -0
  60. package/templates/.agents/config/project.yaml +1 -1
  61. package/templates/.agents/dashboard/.tmp-run-list.json +254 -0
  62. package/templates/.agents/dashboard/.zaip-managed.json +775 -163
  63. package/templates/.agents/dashboard/DATA-DICTIONARY.md +2227 -0
  64. package/templates/.agents/dashboard/README.md +48 -97
  65. package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-DxR_pgSV.js +1 -0
  66. package/templates/.agents/dashboard/apps/frontend/dist/assets/DashboardHelpDialog-4jZLTWE_.js +2156 -0
  67. package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-CKcsqb-r.js +1 -0
  68. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-BomxqCBU.css +1 -0
  69. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-DmmJD2Th.js +3 -0
  70. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BwtitWa_.js +1 -0
  71. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-CaKwQP43.css +1 -0
  72. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-BZ5WdaMN.css +1 -0
  73. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-N5Csr0RP.js +68 -0
  74. package/templates/.agents/dashboard/apps/frontend/dist/assets/{dashboard-localization-C98LGC-Q.js → dashboard-localization-CLJ0lT9v.js} +1 -1
  75. package/templates/.agents/dashboard/apps/frontend/dist/assets/icons-vendor-C0fj2uU9.js +1 -0
  76. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-C4aIB1PV.js +2 -0
  77. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-DK_enB5Z.css +1 -0
  78. package/templates/.agents/dashboard/apps/frontend/dist/assets/react-vendor-BEsJ-FYH.js +9 -0
  79. package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-D9-fqq9M.js +1 -0
  80. package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-B6y6Gw12.js +1 -0
  81. package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-DFY7ZDlu.css +1 -0
  82. package/templates/.agents/dashboard/apps/frontend/dist/index.html +9 -2
  83. package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
  84. package/templates/.agents/dashboard/apps/frontend/src/App.tsx +1129 -600
  85. package/templates/.agents/dashboard/apps/frontend/src/AppLoadingBoundary.tsx +48 -0
  86. package/templates/.agents/dashboard/apps/frontend/src/AppLoadingPanels.tsx +2 -0
  87. package/templates/.agents/dashboard/apps/frontend/src/AppOverlays.tsx +247 -0
  88. package/templates/.agents/dashboard/apps/frontend/src/AppRequestGuards.tsx +95 -0
  89. package/templates/.agents/dashboard/apps/frontend/src/AppSetupRoutes.tsx +87 -0
  90. package/templates/.agents/dashboard/apps/frontend/src/CostCalculationGuidePage.tsx +641 -0
  91. package/templates/.agents/dashboard/apps/frontend/src/DashboardAlternateContent.tsx +159 -0
  92. package/templates/.agents/dashboard/apps/frontend/src/DashboardCapabilityNav.tsx +13 -13
  93. package/templates/.agents/dashboard/apps/frontend/src/DashboardGlobalSettings.tsx +56 -0
  94. package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +266 -315
  95. package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +151 -0
  96. package/templates/.agents/dashboard/apps/frontend/src/TraceabilityWorkspace.test.ts +37 -0
  97. package/templates/.agents/dashboard/apps/frontend/src/TraceabilityWorkspace.tsx +114 -12
  98. package/templates/.agents/dashboard/apps/frontend/src/app-preferences.ts +15 -0
  99. package/templates/.agents/dashboard/apps/frontend/src/app-session-token.ts +20 -0
  100. package/templates/.agents/dashboard/apps/frontend/src/cost-calculation-guide.css +267 -0
  101. package/templates/.agents/dashboard/apps/frontend/src/cost-calculation-guide.test.ts +69 -0
  102. package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +85 -0
  103. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.test.ts +133 -0
  104. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +453 -13
  105. package/templates/.agents/dashboard/apps/frontend/src/dashboard-localization.ts +1 -1
  106. package/templates/.agents/dashboard/apps/frontend/src/main.tsx +1 -0
  107. package/templates/.agents/dashboard/apps/frontend/src/operations-detail-hydration.test.ts +55 -0
  108. package/templates/.agents/dashboard/apps/frontend/src/operations-detail-hydration.ts +36 -0
  109. package/templates/.agents/dashboard/apps/frontend/src/operations-entity-page-projection.test.ts +126 -0
  110. package/templates/.agents/dashboard/apps/frontend/src/operations-entity-page-projection.ts +181 -0
  111. package/templates/.agents/dashboard/apps/frontend/src/operations-period-contract.test.ts +138 -0
  112. package/templates/.agents/dashboard/apps/frontend/src/operations-period-render.test.ts +105 -0
  113. package/templates/.agents/dashboard/apps/frontend/src/operations-period.test.ts +6 -3
  114. package/templates/.agents/dashboard/apps/frontend/src/operations-period.ts +9 -5
  115. package/templates/.agents/dashboard/apps/frontend/src/overview-status-page.test.ts +26 -0
  116. package/templates/.agents/dashboard/apps/frontend/src/period-transition-overlay.css +44 -0
  117. package/templates/.agents/dashboard/apps/frontend/src/project-settings-model.ts +121 -62
  118. package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +482 -3
  119. package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +84 -17
  120. package/templates/.agents/dashboard/apps/frontend/src/snapshot-banner-semantics.test.ts +78 -0
  121. package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +234 -39
  122. package/templates/.agents/dashboard/apps/frontend/src/snapshot-notice.ts +15 -0
  123. package/templates/.agents/dashboard/apps/frontend/src/sqlite-cost-adapters.ts +26 -0
  124. package/templates/.agents/dashboard/apps/frontend/src/styles.css +14 -2
  125. package/templates/.agents/dashboard/apps/frontend/src/traceability-workspace.css +38 -2
  126. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.test.ts +253 -0
  127. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.ts +380 -0
  128. package/templates/.agents/dashboard/apps/frontend/src/use-app-effects.ts +175 -0
  129. package/templates/.agents/dashboard/apps/frontend/src/use-app-operations-pages.ts +395 -0
  130. package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-documents.ts +141 -0
  131. package/templates/.agents/dashboard/apps/frontend/src/use-idle-cost-prefetch.ts +45 -0
  132. package/templates/.agents/dashboard/apps/frontend/src/work-list-pagination.test.ts +46 -0
  133. package/templates/.agents/dashboard/apps/frontend/src/work-list-pagination.ts +36 -0
  134. package/templates/.agents/dashboard/apps/frontend/vite.config.ts +58 -5
  135. package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
  136. package/templates/.agents/dashboard/modules/cost-monitor/src/contracts.ts +47 -6
  137. package/templates/.agents/dashboard/modules/cost-monitor/src/duration-estimate.ts +13 -0
  138. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CompactLifecycleCostTable.test.ts +134 -0
  139. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CompactLifecycleCostTable.tsx +290 -0
  140. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostCharts.test.ts +133 -19
  141. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostCharts.tsx +134 -43
  142. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostFilters.tsx +137 -19
  143. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostModelsAuditTable.test.ts +2 -0
  144. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostModelsAuditTable.tsx +13 -10
  145. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorContent.tsx +328 -0
  146. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.test.ts +302 -6
  147. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +627 -400
  148. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostSummary.tsx +5 -13
  149. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +370 -72
  150. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.tsx +467 -326
  151. package/templates/.agents/dashboard/modules/cost-monitor/src/react/MacroCostTable.test.ts +17 -0
  152. package/templates/.agents/dashboard/modules/cost-monitor/src/react/MacroCostTable.tsx +25 -6
  153. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-copy.ts +0 -2
  154. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-helpers.ts +17 -0
  155. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-responsive.css +6 -3
  156. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-row-filters.ts +123 -0
  157. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-summary.ts +8 -3
  158. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-views.ts +32 -0
  159. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor.css +55 -14
  160. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-table-presentation.ts +121 -0
  161. package/templates/.agents/dashboard/modules/cost-monitor/src/react/index.ts +3 -0
  162. package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.test.ts +68 -0
  163. package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.ts +33 -5
  164. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-compact-cost-page.ts +119 -0
  165. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.test.ts +12 -0
  166. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.ts +146 -0
  167. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-run-page.ts +118 -0
  168. package/templates/.agents/dashboard/modules/cost-monitor/src/server/aggregate.test.ts +2 -2
  169. package/templates/.agents/dashboard/modules/cost-monitor/src/server/aggregate.ts +5 -3
  170. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-pricing-fallback.test.ts +53 -0
  171. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.basics.test.ts +34 -0
  172. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.test.ts +168 -161
  173. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.ts +188 -29
  174. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.test.ts +757 -0
  175. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +784 -0
  176. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-terminal-day.test.ts +100 -0
  177. package/templates/.agents/dashboard/modules/cost-monitor/src/server/index.ts +1 -0
  178. package/templates/.agents/dashboard/modules/cost-monitor/src/server/refactor-map-xr9l.json +61 -0
  179. package/templates/.agents/dashboard/modules/cost-monitor/src/server/source-size-cost-server/build-cost-monitor-projection-agents.test.ts +31 -0
  180. package/templates/.agents/dashboard/modules/cost-monitor/src/server/source-size-cost-server/build-cost-summary-projection-duration.test.ts +414 -0
  181. package/templates/.agents/dashboard/modules/cost-monitor/src/task-cost-groups.test.ts +41 -0
  182. package/templates/.agents/dashboard/modules/cost-monitor/src/task-cost-groups.ts +55 -11
  183. package/templates/.agents/dashboard/modules/operations/package.json +2 -1
  184. package/templates/.agents/dashboard/modules/operations/src/contracts.ts +185 -0
  185. package/templates/.agents/dashboard/modules/operations/src/duration-population.test.ts +63 -1
  186. package/templates/.agents/dashboard/modules/operations/src/duration-population.ts +60 -5
  187. package/templates/.agents/dashboard/modules/operations/src/react/EntityDetailsDialog.tsx +14 -3
  188. package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.test.ts +44 -1
  189. package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.tsx +345 -18
  190. package/templates/.agents/dashboard/modules/operations/src/react/MacroPlanningDialog.tsx +1 -0
  191. package/templates/.agents/dashboard/modules/operations/src/react/OperationDateFilters.test.ts +9 -5
  192. package/templates/.agents/dashboard/modules/operations/src/react/OperationDateFilters.tsx +2 -2
  193. package/templates/.agents/dashboard/modules/operations/src/react/OperationsMainContent.tsx +168 -0
  194. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.helpers.tsx +95 -6
  195. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.test.ts +367 -14
  196. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.tsx +562 -131
  197. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +353 -355
  198. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageNavigation.tsx +65 -0
  199. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageOverview.tsx +169 -0
  200. package/templates/.agents/dashboard/modules/operations/src/react/PeriodSummaryTable.tsx +73 -8
  201. package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.test.tsx +32 -0
  202. package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.tsx +62 -6
  203. package/templates/.agents/dashboard/modules/operations/src/react/TaskBoard.test.ts +55 -0
  204. package/templates/.agents/dashboard/modules/operations/src/react/TaskBoard.tsx +27 -19
  205. package/templates/.agents/dashboard/modules/operations/src/react/TaskDetailsDialog.tsx +105 -42
  206. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkBoard.priority.test.ts +19 -0
  207. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkBoard.tsx +265 -36
  208. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.test.ts +171 -8
  209. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.tsx +98 -68
  210. package/templates/.agents/dashboard/modules/operations/src/react/conversation-rows.test.ts +72 -1
  211. package/templates/.agents/dashboard/modules/operations/src/react/conversation-rows.ts +78 -17
  212. package/templates/.agents/dashboard/modules/operations/src/react/execution-metrics.ts +6 -4
  213. package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.test.ts +431 -1
  214. package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.tsx +574 -20
  215. package/templates/.agents/dashboard/modules/operations/src/react/export/export-layout.test.ts +42 -4
  216. package/templates/.agents/dashboard/modules/operations/src/react/export/xlsx-runtime-e2e.test.ts +248 -0
  217. package/templates/.agents/dashboard/modules/operations/src/react/macro-planning-dialog-content.css +49 -0
  218. package/templates/.agents/dashboard/modules/operations/src/react/macro-planning-dialog.css +93 -50
  219. package/templates/.agents/dashboard/modules/operations/src/react/manual-work-priority.test.ts +82 -0
  220. package/templates/.agents/dashboard/modules/operations/src/react/operation-date-range.test.ts +29 -2
  221. package/templates/.agents/dashboard/modules/operations/src/react/operation-date-range.ts +22 -1
  222. package/templates/.agents/dashboard/modules/operations/src/react/operation-duration.test.ts +77 -4
  223. package/templates/.agents/dashboard/modules/operations/src/react/operation-duration.ts +67 -5
  224. package/templates/.agents/dashboard/modules/operations/src/react/operations-coverage-toast.test.ts +54 -0
  225. package/templates/.agents/dashboard/modules/operations/src/react/operations-global-filters.test.ts +22 -0
  226. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +149 -12
  227. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview.status-cards.test.ts +27 -0
  228. package/templates/.agents/dashboard/modules/operations/src/react/operations-page-contract.ts +176 -0
  229. package/templates/.agents/dashboard/modules/operations/src/react/operations-period-scope.test.ts +160 -0
  230. package/templates/.agents/dashboard/modules/operations/src/react/operations-period-scope.ts +47 -0
  231. package/templates/.agents/dashboard/modules/operations/src/react/operations-query.ts +10 -0
  232. package/templates/.agents/dashboard/modules/operations/src/react/operations-responsive.css +3 -0
  233. package/templates/.agents/dashboard/modules/operations/src/react/operations-view-labels.ts +28 -0
  234. package/templates/.agents/dashboard/modules/operations/src/react/operations-view-order.test.ts +21 -7
  235. package/templates/.agents/dashboard/modules/operations/src/react/operations.css +42 -0
  236. package/templates/.agents/dashboard/modules/operations/src/react/period-summary-population.test.ts +54 -0
  237. package/templates/.agents/dashboard/modules/operations/src/react/period-summary-population.ts +32 -0
  238. package/templates/.agents/dashboard/modules/operations/src/react/period-summary.test.ts +241 -6
  239. package/templates/.agents/dashboard/modules/operations/src/react/period-summary.ts +148 -6
  240. package/templates/.agents/dashboard/modules/operations/src/react/popup-localization.test.ts +1 -1
  241. package/templates/.agents/dashboard/modules/operations/src/react/unified-work-board.css +132 -0
  242. package/templates/.agents/dashboard/modules/operations/src/react/unified-work-board.css.test.ts +13 -0
  243. package/templates/.agents/dashboard/modules/operations/src/react/unified-work-board.header.test.ts +16 -0
  244. package/templates/.agents/dashboard/modules/operations/src/react/use-infinite-column.ts +11 -5
  245. package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.test.ts +7 -4
  246. package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.ts +5 -84
  247. package/templates/.agents/dashboard/modules/operations/src/server/build-operations-projection.test.ts +291 -15
  248. package/templates/.agents/dashboard/modules/operations/src/server/build-operations-projection.ts +182 -472
  249. package/templates/.agents/dashboard/modules/operations/src/server/canonical-compat.test.ts +40 -0
  250. package/templates/.agents/dashboard/modules/operations/src/server/canonical-compat.ts +19 -6
  251. package/templates/.agents/dashboard/modules/operations/src/server/canonical-run-projection.ts +31 -6
  252. package/templates/.agents/dashboard/modules/operations/src/server/daily-duration-projection.ts +220 -0
  253. package/templates/.agents/dashboard/modules/operations/src/server/execution-duration-projection.ts +28 -0
  254. package/templates/.agents/dashboard/modules/operations/src/server/execution-relationship-counts.test.ts +39 -2
  255. package/templates/.agents/dashboard/modules/operations/src/server/execution-relationship-counts.ts +25 -13
  256. package/templates/.agents/dashboard/modules/operations/src/server/filter.test.ts +3 -3
  257. package/templates/.agents/dashboard/modules/operations/src/server/filter.ts +7 -2
  258. package/templates/.agents/dashboard/modules/operations/src/server/index.ts +3 -0
  259. package/templates/.agents/dashboard/modules/operations/src/server/macro.ts +3 -12
  260. package/templates/.agents/dashboard/modules/operations/src/server/manifest-usage.ts +65 -0
  261. package/templates/.agents/dashboard/modules/operations/src/server/operations-projection-aggregates.ts +297 -0
  262. package/templates/.agents/dashboard/modules/operations/src/server/quick-daily-operations-projection.ts +330 -0
  263. package/templates/.agents/dashboard/modules/operations/src/server/quick-operations-projection.test.ts +505 -0
  264. package/templates/.agents/dashboard/modules/operations/src/server/quick-operations-projection.ts +609 -0
  265. package/templates/.agents/dashboard/modules/operations/src/server/runs.ts +18 -19
  266. package/templates/.agents/dashboard/modules/operations/src/work-board-model.ts +76 -0
  267. package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
  268. package/templates/.agents/dashboard/modules/traceability/src/server/build-task-trace.ts +3 -1
  269. package/templates/.agents/dashboard/packages/branding/package.json +1 -1
  270. package/templates/.agents/dashboard/packages/branding/src/index.ts +1 -1
  271. package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
  272. package/templates/.agents/dashboard/packages/contracts/src/index.ts +2 -0
  273. package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
  274. package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +1759 -0
  275. package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs.metafile.json +7333 -0
  276. package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +1611 -0
  277. package/templates/.agents/dashboard/packages/local-runtime/package.json +8 -3
  278. package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-dashboard.mjs +20 -0
  279. package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +114 -0
  280. package/templates/.agents/dashboard/packages/local-runtime/scripts/rebuild-sqlite-read-model.mjs +31 -0
  281. package/templates/.agents/dashboard/packages/local-runtime/scripts/source-size-runtime-scripts/sqlite-read-model-fixture.mjs +397 -0
  282. package/templates/.agents/dashboard/packages/local-runtime/scripts/test-sqlite-read-model.mjs +589 -0
  283. package/templates/.agents/dashboard/packages/local-runtime/scripts/test-unix-launchers.mjs +53 -0
  284. package/templates/.agents/dashboard/packages/local-runtime/scripts/validate-sqlite-read-model.mjs +203 -0
  285. package/templates/.agents/dashboard/packages/local-runtime/server.mjs +1646 -107
  286. package/templates/.agents/dashboard/packages/local-runtime/src/agent-adapter-sync.ts +30 -0
  287. package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.test.ts +3 -2
  288. package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.ts +5 -0
  289. package/templates/.agents/dashboard/packages/local-runtime/src/manifest-runs.ts +72 -33
  290. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +339 -4
  291. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +392 -1
  292. package/templates/.agents/dashboard/packages/local-runtime/src/runtime.mjs +5 -5
  293. package/templates/.agents/dashboard/packages/local-runtime/src/server-board.test.ts +110 -0
  294. package/templates/.agents/dashboard/packages/local-runtime/src/server-board.ts +189 -0
  295. package/templates/.agents/dashboard/packages/local-runtime/src/server-cross-layer-parity.test.ts +245 -0
  296. package/templates/.agents/dashboard/packages/local-runtime/src/server-daily-read-models-route.ts +64 -0
  297. package/templates/.agents/dashboard/packages/local-runtime/src/server-daily-read-models.test.ts +204 -0
  298. package/templates/.agents/dashboard/packages/local-runtime/src/server-daily-read-models.ts +194 -0
  299. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-pages.test.ts +163 -0
  300. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-pages.ts +354 -0
  301. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-runs-route.test.ts +74 -0
  302. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-runs-route.ts +113 -0
  303. package/templates/.agents/dashboard/packages/local-runtime/src/server-overview.test.ts +68 -0
  304. package/templates/.agents/dashboard/packages/local-runtime/src/server-period.ts +47 -0
  305. package/templates/.agents/dashboard/packages/local-runtime/src/server-projections.ts +483 -0
  306. package/templates/.agents/dashboard/packages/local-runtime/src/server-settings.test.ts +5 -2
  307. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot.test.ts +178 -84
  308. package/templates/.agents/dashboard/packages/local-runtime/src/server-workspace.ts +149 -0
  309. package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +675 -267
  310. package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +1212 -309
  311. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.test.ts +53 -0
  312. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.ts +722 -0
  313. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +3743 -0
  314. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.ts +7017 -0
  315. package/templates/.agents/dashboard/packages/local-runtime/src/work-priority-contract.test.ts +33 -0
  316. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-history.mjs +41 -0
  317. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-processes.mjs +210 -0
  318. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +514 -190
  319. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +324 -24
  320. package/templates/.agents/dashboard/packages/ui/package.json +1 -1
  321. package/templates/.agents/dashboard/packages/windows-launcher/LauncherVerificationBehaviorTests.cs +206 -0
  322. package/templates/.agents/dashboard/packages/windows-launcher/Program.cs +95 -8
  323. package/templates/.agents/dashboard/packages/windows-launcher/build-dashboard-launcher.ps1 +2 -2
  324. package/templates/.agents/dashboard/packages/windows-launcher/run-launcher-verification-tests.ps1 +22 -0
  325. package/templates/.agents/dashboard/read-model.dbml +2201 -0
  326. package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
  327. package/templates/.agents/dashboard/tests/e2e/playwright.config.ts +1 -1
  328. package/templates/.agents/dashboard/tests/e2e/specs/dashboard.spec.ts +216 -41
  329. package/templates/.agents/dashboard/work-priority.json +34 -0
  330. package/templates/.agents/dashboard/zaip-dashboard-linux.sh +45 -0
  331. package/templates/.agents/dashboard/zaip-dashboard-mac.command +3 -0
  332. package/templates/.agents/dashboard/zaip-dashboard-windows.exe +0 -0
  333. package/templates/.agents/design/.zaip-managed.json +3 -3
  334. package/templates/.agents/design/apps/catalog/package.json +1 -1
  335. package/templates/.agents/design/packages/local-runtime/package.json +1 -1
  336. package/templates/.agents/growth/estrategia-bootstrap-90-dias.md +169 -0
  337. package/templates/.agents/growth/strategy.md +27 -0
  338. package/templates/.agents/marketing/estrategia-marketing-zaip-90-dias.md +197 -0
  339. package/templates/.agents/marketing/strategy.md +29 -0
  340. package/templates/.agents/requirements/autonomous-assurance.md +1 -1
  341. package/templates/.agents/requirements/comparative-audit.md +1 -1
  342. package/templates/.agents/requirements/context-engine.md +1 -1
  343. package/templates/.agents/requirements/cost-observability.md +1 -1
  344. package/templates/.agents/requirements/dashboard-launch.md +24 -0
  345. package/templates/.agents/requirements/data-export.md +1 -1
  346. package/templates/.agents/requirements/design-system.md +1 -1
  347. package/templates/.agents/requirements/execution-engine.md +1 -1
  348. package/templates/.agents/requirements/kanban-dashboard.md +4 -3
  349. package/templates/.agents/requirements/model-orchestration.md +1 -1
  350. package/templates/.agents/requirements/public-distribution.md +9 -6
  351. package/templates/.agents/requirements/software-architecture.md +1 -1
  352. package/templates/.agents/requirements/strategic-improvements.md +1 -1
  353. package/templates/.agents/requirements/work-lifecycle.md +9 -3
  354. package/templates/.agents/requirements/zaip-strategic-95.md +4 -4
  355. package/templates/.agents/rules/autonomy-decision.md +15 -0
  356. package/templates/.agents/rules/core.md +1 -1
  357. package/templates/.agents/rules/run-lifecycle-closure.md +1 -1
  358. package/templates/.agents/rules/specialist-routing.md +19 -0
  359. package/templates/.agents/rules/workflow.md +1 -1
  360. package/templates/.agents/runtime/VERSION +1 -1
  361. package/templates/.agents/runtime/bin/zaip.mjs +118 -67
  362. package/templates/.agents/runtime/checksums.sha256 +6 -4
  363. package/templates/.agents/runtime/manifest.json +3 -1
  364. package/templates/.agents/runtime/pnpm-lock.sha256 +1 -0
  365. package/templates/.agents/runtime/provenance.json +11 -0
  366. package/templates/.agents/runtime/sbom.cdx.json +1929 -39
  367. package/templates/.agents/sales/playbook.md +32 -0
  368. package/templates/.agents/sales/roteiro-comercial-zaip.md +252 -0
  369. package/templates/.agents/skills/zaip-aios/SKILL.md +1 -1
  370. package/templates/.agents/skills/zaip-skill-brand-governance/SKILL.md +22 -0
  371. package/templates/.agents/skills/zaip-skill-brand-governance/agents/openai.yaml +4 -0
  372. package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-framework.md +39 -0
  373. package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-standards.md +30 -0
  374. package/templates/.agents/skills/zaip-skill-dashboard-sqlite/SKILL.md +25 -0
  375. package/templates/.agents/skills/zaip-skill-dashboard-sqlite/agents/openai.yaml +4 -0
  376. package/templates/.agents/skills/zaip-skill-enforce-architecture/SKILL.md +2 -0
  377. package/templates/.agents/skills/zaip-skill-executar-fila-pronta/SKILL.md +18 -0
  378. package/templates/.agents/skills/zaip-skill-executar-fila-pronta/agents/openai.yaml +6 -0
  379. package/templates/.agents/skills/zaip-skill-executar-fila-pronta/scripts/ready-queue-fence.mjs +71 -0
  380. package/templates/.agents/skills/zaip-skill-executar-fila-pronta/scripts/ready-queue-fence.test.mjs +60 -0
  381. package/templates/.agents/skills/zaip-skill-executar-fila-pronta/scripts/scheduled-ready-queue-contract.test.mjs +111 -0
  382. package/templates/.agents/skills/zaip-skill-execution/SKILL.md +2 -2
  383. package/templates/.agents/skills/zaip-skill-frontend-launcher/references/launcher-contract.md +3 -1
  384. package/templates/.agents/skills/zaip-skill-general-operations/SKILL.md +12 -0
  385. package/templates/.agents/skills/zaip-skill-general-operations/agents/openai.yaml +4 -0
  386. package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +9 -7
  387. package/templates/.agents/skills/zaip-skill-github-deploy/agents/openai.yaml +2 -2
  388. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs +11 -38
  389. package/templates/.agents/skills/zaip-skill-governance-compliance/SKILL.md +12 -0
  390. package/templates/.agents/skills/zaip-skill-governance-compliance/agents/openai.yaml +4 -0
  391. package/templates/.agents/skills/zaip-skill-growth-strategy-revops/SKILL.md +21 -0
  392. package/templates/.agents/skills/zaip-skill-growth-strategy-revops/agents/openai.yaml +4 -0
  393. package/templates/.agents/skills/zaip-skill-growth-strategy-revops/references/growth-revops-framework.md +25 -0
  394. package/templates/.agents/skills/zaip-skill-instalar-agendamento/SKILL.md +17 -0
  395. package/templates/.agents/skills/zaip-skill-instalar-agendamento/agents/openai.yaml +6 -0
  396. package/templates/.agents/skills/zaip-skill-marketing/SKILL.md +9 -3
  397. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-local-telemetry.mjs +99 -93
  398. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.mjs +132 -23
  399. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.test.mjs +149 -1
  400. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.mjs +76 -19
  401. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.test.mjs +217 -7
  402. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/source-size-telemetry/model-identity-reconciliation.mjs +77 -0
  403. package/templates/.agents/skills/zaip-skill-sales-methodology/SKILL.md +20 -0
  404. package/templates/.agents/skills/zaip-skill-sales-methodology/agents/openai.yaml +4 -0
  405. package/templates/.agents/skills/zaip-skill-sales-methodology/references/sales-process-framework.md +77 -0
  406. package/templates/.agents/skills/zaip-skill-setup/SKILL.md +5 -0
  407. package/templates/.agents/skills/zaip-skill-sqlite-read-model/SKILL.md +96 -0
  408. package/templates/.agents/skills/zaip-skill-sqlite-read-model/agents/openai.yaml +4 -0
  409. package/templates/.agents/skills/zaip-skill-sqlite-read-model/scripts/ensure-node.mjs +41 -0
  410. package/templates/.agents/zaip-aios/INDEX.md +11 -0
  411. package/templates/.agents/zaip-aios/README.md +38 -8
  412. package/templates/.agents/zaip-aios/VERSION +1 -1
  413. package/templates/.agents/zaip-aios/guides/09-agentes-e-squads.md +43 -6
  414. package/templates/.agents/zaip-aios/guides/10-seguranca.md +21 -7
  415. package/templates/.agents/zaip-aios/guides/17-como-o-custo-e-calculado.md +32 -0
  416. package/templates/.agents/zaip-aios/guides/18-catalogo-de-agentes.md +76 -0
  417. package/templates/.agents/zaip-aios/guides/19-assurance-e-autonomia.md +72 -0
  418. package/templates/.agents/zaip-aios/guides/20-instalacao-detalhada.md +330 -0
  419. package/templates/.agents/zaip-aios/guides/21-telemetria-monitor-custos.md +52 -0
  420. package/templates/.agents/zaip-aios/guides/22-fluxos-e-roteamento.md +69 -0
  421. package/templates/.agents/zaip-aios/guides/23-orquestracao-de-modelos.md +483 -0
  422. package/templates/.agents/zaip-aios/guides/24-calculo-de-custos-openai.md +85 -0
  423. package/templates/.agents/zaip-aios/guides/25-fontes-de-precos-openai.md +18 -0
  424. package/templates/.agents/zaip-aios/guides/26-qualidade-e-release.md +44 -0
  425. package/templates/.agents/zaip-aios/guides/27-telemetria-git-native.md +167 -0
  426. package/templates/.agents/zaip-aios/guides/28-lifecycle-completo.md +144 -0
  427. package/templates/.agents/zaip-aios/guides/assets/diagrams/lifecycles-task-spec-prd.png +0 -0
  428. package/templates/.agents/zaip-aios/guides/assets/diagrams/prd-lifecycle.png +0 -0
  429. package/templates/.agents/zaip-aios/guides/assets/diagrams/spec-lifecycle.png +0 -0
  430. package/templates/.agents/zaip-aios/guides/assets/diagrams/task-lifecycle.png +0 -0
  431. package/templates/template-manifest.json +1082 -215
  432. package/templates/.agents/dashboard/apps/frontend/dist/assets/AgentCatalogSettingsPage-CLYIi7Vo.js +0 -1
  433. package/templates/.agents/dashboard/apps/frontend/dist/assets/AgentCatalogSettingsPage-DTDNVQGX.css +0 -1
  434. package/templates/.agents/dashboard/apps/frontend/dist/assets/DashboardHelpDialog-Cv-JcoxP.js +0 -1320
  435. package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-CzEggcRb.js +0 -1
  436. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-05YKn6Z4.js +0 -3
  437. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-YO3yqtgV.css +0 -1
  438. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-8AzCnl3a.js +0 -77
  439. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-DdBYQ_8D.css +0 -1
  440. package/templates/.agents/dashboard/apps/frontend/src/AgentCatalogSettingsPage.tsx +0 -617
  441. package/templates/.agents/dashboard/apps/frontend/src/agent-catalog-settings-page.css +0 -660
  442. package/templates/.agents/dashboard/apps/frontend/src/agent-catalog-settings.test.ts +0 -249
  443. package/templates/.agents/dashboard/dashboard.config.json +0 -4
  444. package/templates/.agents/dashboard/zaip-dashboard.exe +0 -0
@@ -1,8 +1,5 @@
1
1
  import { describe, expect, it } from "vitest";
2
- import {
3
- buildCostMonitorProjection,
4
- effectiveCostRunPhase,
5
- } from "./build-cost-monitor-projection.js";
2
+ import { buildCostMonitorProjection } from "./build-cost-monitor-projection.js";
6
3
  import {
7
4
  catalogWithInputRate,
8
5
  emptyOperations,
@@ -14,30 +11,60 @@ import {
14
11
  } from "./build-cost-monitor-projection.test-fixtures.js";
15
12
 
16
13
  describe("Cost Monitor V2", () => {
17
- it("normalizes legacy Task captures without calling them conversations", () => {
18
- expect(effectiveCostRunPhase({ entrypoint: "task", phase: "conversation" })).toBe("planning");
19
- expect(effectiveCostRunPhase({ entrypoint: "task", phase: "execution" })).toBe("execution");
20
- expect(effectiveCostRunPhase({ entrypoint: "conversation", phase: "conversation" })).toBe(
21
- "conversation",
14
+ it("uses inclusive input and output totals without double-counting cache or reasoning", () => {
15
+ const operations = operationsWithPricedRun();
16
+ const run = operations.runs[0];
17
+ if (!run) throw new Error("priced Run fixture is missing");
18
+ run.usage = usage(
19
+ metric({
20
+ input: 1_000_000,
21
+ cached: 200_000,
22
+ output: 500_000,
23
+ reasoning: 100_000,
24
+ // Deliberately reflects an invalid additive composition. The Cost
25
+ // Monitor must retain cache/reasoning as subsets instead.
26
+ tokens: 1_800_000,
27
+ events: 1,
28
+ }),
22
29
  );
30
+
31
+ const projection = buildCostMonitorProjection(operations);
32
+
33
+ expect(projection.runs[0]).toMatchObject({
34
+ input_tokens: 1_000_000,
35
+ cached_input_tokens: 200_000,
36
+ uncached_input_tokens: 800_000,
37
+ output_tokens: 500_000,
38
+ reasoning_tokens: 100_000,
39
+ visible_output_tokens: 400_000,
40
+ total_tokens: 1_500_000,
41
+ });
42
+ expect(projection.overview.total_tokens).toBe(1_500_000);
43
+ expect(projection.usage.total.tokens.total).toBe(1_500_000);
44
+ expect(projection.groups.models[0]?.total_tokens).toBe(1_500_000);
23
45
  });
24
46
 
25
- it("merges missing, unknown, codex, and openai provider rows into openai", () => {
47
+ it("keeps the source total when the input/output breakdown is unavailable", () => {
26
48
  const operations = operationsWithPricedRun();
27
- const source = operations.runs[0];
28
- if (source === undefined) throw new Error("priced Run fixture is missing");
29
- operations.runs = [null, "unknown", "codex", "openai"].map((provider, index) => ({
30
- ...source,
31
- id: `RUN-PROVIDER-${index}`,
32
- provider,
33
- }));
49
+ const run = operations.runs[0];
50
+ if (!run) throw new Error("priced Run fixture is missing");
51
+ const partialTokens = {
52
+ input: null,
53
+ cached_input: null,
54
+ output: 500,
55
+ reasoning: null,
56
+ total: 500,
57
+ };
58
+ run.usage = {
59
+ ...run.usage,
60
+ execution: { ...run.usage.execution, tokens: partialTokens },
61
+ total: { ...run.usage.total, tokens: partialTokens },
62
+ };
34
63
 
35
64
  const projection = buildCostMonitorProjection(operations);
36
65
 
37
- expect(projection.filters_available.providers).toEqual(["openai"]);
38
- expect(projection.groups.providers).toHaveLength(1);
39
- expect(projection.groups.providers[0]).toMatchObject({ key: "openai", run_count: 4 });
40
- expect(projection.runs.every((run) => run.provider === "openai")).toBe(true);
66
+ expect(projection.runs[0]?.total_tokens).toBe(500);
67
+ expect(projection.overview.total_tokens).toBe(500);
41
68
  });
42
69
 
43
70
  it("preserves unavailable usage as null instead of inventing zero", () => {
@@ -55,7 +82,6 @@ describe("Cost Monitor V2", () => {
55
82
  });
56
83
  expect(projection.runs).toEqual([]);
57
84
  });
58
-
59
85
  it("preserves Runs without complete telemetry with unavailable financial fields", () => {
60
86
  const operations = operationsWithPricedRun();
61
87
  const source = operations.runs[0];
@@ -67,9 +93,7 @@ describe("Cost Monitor V2", () => {
67
93
  model: "manual",
68
94
  usage: usage(metric({ tokens: null, brl: null, usd: null, events: 0 })),
69
95
  });
70
-
71
96
  const projection = buildCostMonitorProjection(operations);
72
-
73
97
  expect(projection.runs).toContainEqual(
74
98
  expect.objectContaining({
75
99
  run_id: "RUN-MANUAL-WITHOUT-TELEMETRY",
@@ -79,7 +103,27 @@ describe("Cost Monitor V2", () => {
79
103
  }),
80
104
  );
81
105
  });
82
-
106
+ it("does not present a stored zero as observed telemetry without coverage", () => {
107
+ const operations = operationsWithPricedRun();
108
+ const source = operations.runs[0];
109
+ if (source === undefined) throw new Error("priced Run fixture is missing");
110
+ const unavailableZero = metric({ tokens: 0, brl: 0, usd: 0, events: 1 });
111
+ unavailableZero.coverage = { events: 1, tokens: 0, usd: 0, brl: 0 };
112
+ operations.runs.push({
113
+ ...source,
114
+ id: "RUN-UNAVAILABLE-ZERO",
115
+ usage: usage(unavailableZero),
116
+ });
117
+ const projection = buildCostMonitorProjection(operations);
118
+ expect(projection.runs).toContainEqual(
119
+ expect.objectContaining({
120
+ run_id: "RUN-UNAVAILABLE-ZERO",
121
+ total_tokens: null,
122
+ estimated_usd: null,
123
+ estimated_brl: null,
124
+ }),
125
+ );
126
+ });
83
127
  it("keeps priced Runs whose duration was not observed", () => {
84
128
  const operations = operationsWithPricedRun();
85
129
  const source = operations.runs[0];
@@ -91,19 +135,81 @@ describe("Cost Monitor V2", () => {
91
135
  source_started_at: null,
92
136
  source_finished_at: null,
93
137
  });
94
-
95
138
  const projection = buildCostMonitorProjection(operations);
96
-
97
139
  expect(projection.runs).toContainEqual(
98
140
  expect.objectContaining({
99
141
  run_id: "RUN-WITHOUT-OBSERVED-DURATION",
100
- duration_ms: null,
101
- duration_provenance: "unavailable",
142
+ duration_ms: 900_000,
143
+ duration_provenance: "estimated",
144
+ estimation_basis: "token_budget_v1:4_000_000_tokens_per_hour",
102
145
  }),
103
146
  );
104
147
  });
105
-
106
- it("keeps numeric legacy duration unavailable while preserving an observed zero", () => {
148
+ it("keeps every tokenized Run positive when factual timing would exhaust the canonical budget", () => {
149
+ const operations = operationsWithPricedRun();
150
+ operations.summary.overview_metrics = {
151
+ ...(operations.summary.overview_metrics ?? {}),
152
+ duration_ms: 3_600_000,
153
+ } as never;
154
+ const root = operations.runs[0]!;
155
+ root.started_at = "2026-08-03T12:00:00.000Z";
156
+ root.source_duration_ms = 4_000_000;
157
+ operations.runs.push({
158
+ ...root,
159
+ id: "TOKEN-ONLY",
160
+ parent_run_id: "RUN-PRICE-A7K2",
161
+ source_duration_ms: null,
162
+ duration_ms: null,
163
+ });
164
+ const rows = buildCostMonitorProjection(operations).runs;
165
+ const rootDuration = rows.find((row) => row.run_id === root.id)?.duration_ms ?? 0;
166
+ const tokenOnlyDuration = rows.find((row) => row.run_id === "TOKEN-ONLY")?.duration_ms ?? 0;
167
+ expect(rootDuration).toBeGreaterThan(0);
168
+ expect(tokenOnlyDuration).toBeGreaterThan(0);
169
+ expect(rootDuration + tokenOnlyDuration).toBe(3_600_000);
170
+ expect(rows.find((row) => row.run_id === "TOKEN-ONLY")).toMatchObject({
171
+ duration_provenance: "estimated",
172
+ estimation_basis: "operations_canonical_budget_v1:proportional_tokens",
173
+ });
174
+ });
175
+ it("reconciles the all-period dimensional total to the displayed whole-hour budget", () => {
176
+ const operations = operationsWithPricedRun();
177
+ operations.filters = { from: null, to: null };
178
+ operations.summary.overview_metrics = {
179
+ ...(operations.summary.overview_metrics ?? {}),
180
+ duration_ms: 275_156_363,
181
+ } as never;
182
+ const projection = buildCostMonitorProjection(operations);
183
+ expect(projection.groups.models.reduce((sum, row) => sum + row.duration.known_sum, 0)).toBe(
184
+ 76 * 3_600_000,
185
+ );
186
+ expect(projection.groups.daily.reduce((sum, row) => sum + row.duration.known_sum, 0)).toBe(
187
+ 76 * 3_600_000,
188
+ );
189
+ });
190
+ it("enforces tokens imply positive time for every Run and aggregate", () => {
191
+ const operations = operationsWithPricedRun();
192
+ const source = operations.runs[0]!;
193
+ operations.runs.push({
194
+ ...source,
195
+ id: "TOKENIZED-ZERO",
196
+ source_duration_ms: 0,
197
+ duration_ms: 0,
198
+ });
199
+ const projection = buildCostMonitorProjection(operations);
200
+ expect(
201
+ projection.runs
202
+ .filter((row) => (row.total_tokens ?? 0) > 0)
203
+ .every((row) => (row.duration_ms ?? 0) > 0),
204
+ ).toBe(true);
205
+ for (const groups of Object.values(projection.groups))
206
+ expect(
207
+ groups
208
+ .filter((row) => (row.total_tokens ?? 0) > 0)
209
+ .every((row) => row.duration.known_sum > 0),
210
+ ).toBe(true);
211
+ });
212
+ it("repairs a tokenized observed zero so the invariant remains positive", () => {
107
213
  const operations = operationsWithPricedRun();
108
214
  const source = operations.runs[0];
109
215
  if (source === undefined) throw new Error("priced Run fixture is missing");
@@ -114,25 +220,23 @@ describe("Cost Monitor V2", () => {
114
220
  source_duration_ms: 0,
115
221
  duration_ms: 60_000,
116
222
  });
117
-
118
223
  const projection = buildCostMonitorProjection(operations);
119
-
120
224
  expect(projection.runs).toContainEqual(
121
225
  expect.objectContaining({
122
226
  run_id: source.id,
123
- duration_ms: null,
124
- duration_provenance: "unavailable",
227
+ duration_ms: 900_000,
228
+ duration_provenance: "estimated",
125
229
  }),
126
230
  );
127
231
  expect(projection.runs).toContainEqual(
128
232
  expect.objectContaining({
129
233
  run_id: "RUN-OBSERVED-ZERO",
130
- duration_ms: 0,
131
- duration_provenance: "observed",
234
+ duration_ms: 900_000,
235
+ duration_provenance: "estimated",
132
236
  }),
133
237
  );
134
238
  });
135
- it("uses source duration only and ignores lifecycle and reconciled timestamp outliers", () => {
239
+ it("keeps observed and reconciled durations while ignoring lifecycle timestamp outliers", () => {
136
240
  const operations = operationsWithPricedRun();
137
241
  const source = operations.runs[0];
138
242
  if (source === undefined) throw new Error("priced Run fixture is missing");
@@ -185,15 +289,19 @@ describe("Cost Monitor V2", () => {
185
289
  ];
186
290
  return buildCostMonitorProjection(operations).groups.daily;
187
291
  };
188
-
189
292
  const outlier = withTimestamp("2026-08-10T14:06:00.000Z");
190
293
  const bounded = withTimestamp("2026-08-01T00:01:00.000Z");
191
-
192
- expect(outlier).toEqual(bounded);
294
+ expect(outlier).not.toEqual(bounded);
295
+ expect(outlier).toContainEqual(
296
+ expect.objectContaining({ key: "2026-08-10", duration_ms: 900_000 }),
297
+ );
193
298
  expect(outlier).toContainEqual(
194
299
  expect.objectContaining({
195
- duration_ms: null,
196
- duration: { known_sum: 10_800_000, unknown: 3, complete: false, coverage_ratio: 0.4 },
300
+ // Daily wall-clock matches Operations: root factual durations are
301
+ // retained regardless of whether they were observed or reconciled.
302
+ // The estimate is token-backed, not lifecycle elapsed time.
303
+ duration_ms: 13_500_000,
304
+ duration: { known_sum: 13_500_000, unknown: 0, complete: true, coverage_ratio: 1 },
197
305
  }),
198
306
  );
199
307
  });
@@ -235,11 +343,12 @@ describe("Cost Monitor V2", () => {
235
343
  quality: operations.summary.quality,
236
344
  usage: operations.summary.usage,
237
345
  });
238
-
239
346
  const projection = buildCostMonitorProjection(operations);
240
-
241
347
  expect(projection.specs).toContainEqual(
242
- expect.objectContaining({ id: "SPEC-DURATION", duration_ms: null }),
348
+ expect.objectContaining({
349
+ id: "SPEC-DURATION",
350
+ duration_ms: projection.groups.annual[0]?.duration.known_sum,
351
+ }),
243
352
  );
244
353
  });
245
354
  it("retains the canonical parent and child when the parent has unavailable cost", () => {
@@ -280,18 +389,18 @@ describe("Cost Monitor V2", () => {
280
389
  quality: operations.summary.quality,
281
390
  usage: operations.summary.usage,
282
391
  });
283
-
284
392
  const projection = buildCostMonitorProjection(operations);
285
-
286
393
  expect(projection.runs.map((run) => run.run_id)).toEqual([
287
394
  "RUN-PRICE-A7K2",
288
395
  "RUN-PRICED-CHILD",
289
396
  ]);
290
397
  expect(projection.specs).toContainEqual(
291
- expect.objectContaining({ id: "SPEC-VISIBLE-ROOT", duration_ms: 40_000 }),
398
+ expect.objectContaining({
399
+ id: "SPEC-VISIBLE-ROOT",
400
+ duration_ms: projection.groups.annual[0]?.duration.known_sum,
401
+ }),
292
402
  );
293
403
  });
294
-
295
404
  it("retains lifecycle-only Sub-Runs in Cost Monitor agent groups", () => {
296
405
  const operations = operationsWithPricedRun();
297
406
  const source = operations.runs[0];
@@ -308,9 +417,7 @@ describe("Cost Monitor V2", () => {
308
417
  model: "gpt-5.6-sol",
309
418
  usage: usage(metric({ tokens: null, brl: null, usd: null, events: 0 })),
310
419
  });
311
-
312
420
  const projection = buildCostMonitorProjection(operations);
313
-
314
421
  expect(projection.runs).toContainEqual(
315
422
  expect.objectContaining({
316
423
  run_id: "RUN-SUBAGENT-WITHOUT-TELEMETRY",
@@ -323,7 +430,6 @@ describe("Cost Monitor V2", () => {
323
430
  );
324
431
  expect(projection.usage.total.cost.brl).toBe(operations.summary.usage.total.cost.brl);
325
432
  });
326
-
327
433
  it("keeps canonical unavailable cost while exposing pricing audit for collected usage", () => {
328
434
  const operations = operationsWithPricedRun();
329
435
  const source = operations.runs[0];
@@ -331,25 +437,22 @@ describe("Cost Monitor V2", () => {
331
437
  source.source_started_at = null;
332
438
  source.source_finished_at = null;
333
439
  source.source_duration_ms = null;
334
-
335
440
  const projection = buildCostMonitorProjection(operations, {
336
441
  catalog: catalogWithInputRate(1),
337
442
  fxRate: fxRate(5),
338
443
  currency: "BRL",
339
444
  });
340
-
341
445
  expect(projection.runs).toContainEqual(
342
446
  expect.objectContaining({
343
447
  run_id: source.id,
344
- duration_ms: null,
345
- duration_provenance: "unavailable",
448
+ duration_ms: 900_000,
449
+ duration_provenance: "estimated",
346
450
  estimated_brl: null,
347
451
  }),
348
452
  );
349
453
  expect(projection.runs[0]?.standard_cost_usd).toBe(1);
350
454
  expect(projection.overview.estimated_brl).toBeNull();
351
455
  });
352
-
353
456
  it("projects V2 Run attribution and coverage", () => {
354
457
  const operations = emptyOperations();
355
458
  const measured = usage(metric({ tokens: 120, brl: 0.5, usd: 0.1, events: 1 }));
@@ -462,18 +565,17 @@ describe("Cost Monitor V2", () => {
462
565
  ],
463
566
  });
464
567
  });
465
-
466
568
  it("normalizes legacy Task captures into planning instead of conversation", () => {
467
569
  const operations = operationsWithPricedRun();
468
570
  const run = operations.runs[0];
469
571
  if (!run) throw new Error("priced Run fixture is missing");
470
572
  run.phase = "conversation";
471
573
  const projection = buildCostMonitorProjection(operations);
472
-
473
574
  expect(projection.runs[0]?.phase).toBe("planning");
474
- expect(projection.groups.conversations).toEqual([]);
575
+ expect(projection.groups.conversations).toEqual([
576
+ expect.objectContaining({ key: run.conversation_id, duration_ms: 40_000 }),
577
+ ]);
475
578
  });
476
-
477
579
  it("groups and filters by the canonical visible Agent name", () => {
478
580
  const operations = operationsWithPricedRun();
479
581
  const source = operations.runs[0];
@@ -496,9 +598,7 @@ describe("Cost Monitor V2", () => {
496
598
  effective_model: "gpt-5.6-sol",
497
599
  },
498
600
  ];
499
-
500
601
  const projection = buildCostMonitorProjection(operations);
501
-
502
602
  expect(projection.filters_available.agents).toEqual([
503
603
  "zaip-agent-auditor",
504
604
  "zaip-agent-builder",
@@ -525,7 +625,6 @@ describe("Cost Monitor V2", () => {
525
625
  ]),
526
626
  );
527
627
  });
528
-
529
628
  it("includes every configured ZAIP Agent even when it has no Runs", () => {
530
629
  const operations = operationsWithPricedRun();
531
630
  const source = operations.runs[0];
@@ -537,7 +636,6 @@ describe("Cost Monitor V2", () => {
537
636
  agent_name: "zaip-agent-builder",
538
637
  },
539
638
  ];
540
-
541
639
  const agentNames = [
542
640
  "zaip-agent-orchestrator",
543
641
  "zaip-agent-builder",
@@ -546,7 +644,6 @@ describe("Cost Monitor V2", () => {
546
644
  "zaip-agent-auditor",
547
645
  ];
548
646
  const projection = buildCostMonitorProjection(operations, undefined, { agentNames });
549
-
550
647
  expect(projection.configured_agents).toEqual(agentNames.slice().sort());
551
648
  expect(projection.groups.agents).toEqual(
552
649
  expect.arrayContaining([
@@ -558,7 +655,6 @@ describe("Cost Monitor V2", () => {
558
655
  ]),
559
656
  );
560
657
  });
561
-
562
658
  it("preserves legacy codex rows when no ZAIP agent actually ran", () => {
563
659
  const operations = operationsWithPricedRun();
564
660
  const source = operations.runs[0];
@@ -566,85 +662,47 @@ describe("Cost Monitor V2", () => {
566
662
  source.agent = "codex";
567
663
  source.agent_name = "codex";
568
664
  source.run_role = "orchestrator";
569
-
570
665
  const projection = buildCostMonitorProjection(operations, undefined, {
571
666
  agentNames: ["zaip-agent-builder"],
572
667
  agentNamesById: { "agent-builder": "zaip-agent-builder" },
573
668
  agentNamesByRole: { builder: "zaip-agent-builder" },
574
669
  });
575
-
576
670
  expect(projection.runs[0]?.agent).toBe("codex");
577
671
  expect(projection.runs[0]?.agent_name).toBe("codex");
578
-
579
672
  source.run_role = "intake";
580
673
  const intake = buildCostMonitorProjection(operations, undefined, {
581
674
  agentNamesByRole: { orchestrator: "zaip-agent-orchestrator" },
582
675
  });
583
676
  expect(intake.runs[0]?.agent_name).toBe("codex");
584
-
585
677
  source.agent = "agent-reviewer";
586
678
  const specialized = buildCostMonitorProjection(operations, undefined, {
587
679
  agentNamesById: { "agent-reviewer": "zaip-agent-reviewer" },
588
680
  });
589
681
  expect(specialized.runs[0]?.agent_name).toBe("zaip-agent-reviewer");
590
682
  });
591
-
592
- it("uses the catalog agent id for Sub-Runs even when their inherited name is stale", () => {
593
- const operations = operationsWithPricedRun();
594
- const source = operations.runs[0];
595
- if (source === undefined) throw new Error("priced Run fixture is missing");
596
- source.agent = "agent-finalizer";
597
- source.agent_name = "zaip-agent-orchestrator";
598
- source.run_kind = "subrun";
599
- source.parent_run_id = "RUN-PARENT";
600
-
601
- const projection = buildCostMonitorProjection(operations, undefined, {
602
- agentNamesById: { "agent-finalizer": "zaip-agent-finalizer" },
603
- });
604
-
605
- expect(projection.runs[0]?.agent_name).toBe("zaip-agent-finalizer");
606
- });
607
-
608
- it("maps an unmapped orchestrator internal id through its catalog role", () => {
609
- const operations = operationsWithPricedRun();
610
- const source = operations.runs[0];
611
- if (source === undefined) throw new Error("priced Run fixture is missing");
612
- source.agent = "orchestrator";
613
- source.agent_name = "orchestrator";
614
-
615
- const projection = buildCostMonitorProjection(operations, undefined, {
616
- agentNamesByRole: { orchestrator: "zaip-agent-orchestrator" },
617
- });
618
-
619
- expect(projection.runs[0]?.agent_name).toBe("zaip-agent-orchestrator");
620
- });
621
-
622
683
  it("maps the canonical orchestrator id when catalog loading is unavailable", () => {
623
684
  const operations = operationsWithPricedRun();
624
685
  const source = operations.runs[0];
625
686
  if (source === undefined) throw new Error("priced Run fixture is missing");
626
687
  source.agent = "agent-orchestrator";
627
688
  source.agent_name = "agent-orchestrator";
628
-
629
689
  expect(buildCostMonitorProjection(operations).runs[0]?.agent_name).toBe(
630
690
  "zaip-agent-orchestrator",
631
691
  );
632
692
  });
633
-
634
- it("does not classify Task-attributed Runs as conversations", () => {
693
+ it("keeps Task-attributed Runs in their conversation cost bucket", () => {
635
694
  const operations = operationsWithPricedRun();
636
695
  const run = operations.runs[0];
637
696
  if (!run) throw new Error("priced Run fixture is missing");
638
697
  run.phase = "conversation";
639
698
  run.entrypoint = "task";
640
699
  run.task_id = "TASK-ATTRIBUTED";
641
-
642
700
  const projection = buildCostMonitorProjection(operations);
643
-
644
701
  expect(projection.runs[0]).toMatchObject({ origin: "task", phase: "planning" });
645
- expect(projection.groups.conversations).toEqual([]);
702
+ expect(projection.groups.conversations).toEqual([
703
+ expect.objectContaining({ key: run.conversation_id, duration_ms: 40_000 }),
704
+ ]);
646
705
  });
647
-
648
706
  it("keeps canonical metrics while recalculating pricing audit from the current catalog", () => {
649
707
  const operations = operationsWithPricedRun();
650
708
  const low = buildCostMonitorProjection(operations, {
@@ -657,7 +715,6 @@ describe("Cost Monitor V2", () => {
657
715
  fxRate: fxRate(5),
658
716
  currency: "BRL",
659
717
  });
660
-
661
718
  expect(low.overview.estimated_usd).toBeNull();
662
719
  expect(low.overview.estimated_brl).toBeNull();
663
720
  expect(high.overview.estimated_usd).toBeNull();
@@ -665,7 +722,6 @@ describe("Cost Monitor V2", () => {
665
722
  expect(low.runs[0]?.standard_cost_usd).toBe(1);
666
723
  expect(high.runs[0]?.standard_cost_usd).toBe(3);
667
724
  });
668
-
669
725
  it("preserves a recorded total when service tier is unavailable", () => {
670
726
  const operations = operationsWithPricedRun();
671
727
  const run = operations.runs[0];
@@ -683,13 +739,11 @@ describe("Cost Monitor V2", () => {
683
739
  events: 1,
684
740
  }),
685
741
  );
686
-
687
742
  const projection = buildCostMonitorProjection(operations, {
688
743
  catalog: catalogWithInputRate(99),
689
744
  fxRate: fxRate(5.5),
690
745
  currency: "BRL",
691
746
  });
692
-
693
747
  expect(projection.runs[0]).toMatchObject({
694
748
  service_tier: null,
695
749
  input_cost_usd: 99,
@@ -700,7 +754,6 @@ describe("Cost Monitor V2", () => {
700
754
  });
701
755
  expect(projection.overview).toMatchObject({ estimated_usd: 1.25, estimated_brl: 6.25 });
702
756
  });
703
-
704
757
  it("retains token-bearing Runs when a cost cannot be established", () => {
705
758
  const operations = operationsWithPricedRun();
706
759
  const source = operations.runs[0];
@@ -723,13 +776,11 @@ describe("Cost Monitor V2", () => {
723
776
  usage: usage(metric({ tokens: 1_000, input: 900, output: 100, events: 1 })),
724
777
  },
725
778
  ];
726
-
727
779
  const projection = buildCostMonitorProjection(operations, {
728
780
  catalog: gpt54Catalog(),
729
781
  fxRate: fxRate(5.5),
730
782
  currency: "BRL",
731
783
  });
732
-
733
784
  expect(projection.runs).toHaveLength(2);
734
785
  expect(projection.runs).toEqual(
735
786
  expect.arrayContaining([
@@ -746,48 +797,4 @@ describe("Cost Monitor V2", () => {
746
797
  ]),
747
798
  );
748
799
  });
749
-
750
- it("preserves recorded cost when the current catalog cannot price a supported tier combination", () => {
751
- const operations = operationsWithPricedRun();
752
- const run = operations.runs[0];
753
- if (!run) throw new Error("priced Run fixture is missing");
754
- run.model = "gpt-5.4";
755
- run.effective_model = "gpt-5.4";
756
- run.service_tier = "priority";
757
- run.usage = usage(
758
- metric({
759
- tokens: 400_000,
760
- input: 300_000,
761
- cached: 200_000,
762
- output: 100_000,
763
- reasoning: 20_000,
764
- usd: 2,
765
- brl: 10,
766
- events: 1,
767
- }),
768
- );
769
-
770
- const projection = buildCostMonitorProjection(operations, {
771
- catalog: gpt54Catalog(),
772
- fxRate: fxRate(5.5),
773
- currency: "BRL",
774
- });
775
-
776
- expect(projection.runs[0]).toMatchObject({
777
- service_tier: "priority",
778
- input_rate_usd_per_million: 2.5,
779
- cached_input_rate_usd_per_million: 0.25,
780
- output_rate_usd_per_million: 15,
781
- input_cost_usd: 0.5,
782
- cached_input_cost_usd: 0.1,
783
- output_cost_usd: 2.25,
784
- reasoning_cost_usd: 0,
785
- standard_cost_usd: 2.85,
786
- speed_cost_multiplier: null,
787
- speed_uplift_usd: null,
788
- estimated_usd: 2,
789
- estimated_brl: 10,
790
- coverage: { events: 1, tokens: 1, usd: 1, brl: 1 },
791
- });
792
- });
793
800
  });