@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
@@ -0,0 +1,100 @@
1
+ import type { OperationsProjection } from "@zaip-ai/dashboard-operations/contracts";
2
+ import { describe, expect, it } from "vitest";
3
+ import {
4
+ buildCostSummaryProjection,
5
+ type CostSummarySource,
6
+ } from "./build-cost-summary-projection.js";
7
+
8
+ describe("Cost summary terminal-day accounting", () => {
9
+ it("keeps token and cost facts on their observed Sao Paulo day", () => {
10
+ const known = (known_sum: number) => ({
11
+ known_sum,
12
+ unknown: 0,
13
+ complete: true,
14
+ coverage_ratio: 1,
15
+ });
16
+ const period = (tasks: number, tokens: number, cost: number) => ({
17
+ prds: 0,
18
+ specs: 0,
19
+ tasks,
20
+ validations: 0,
21
+ evidences: 0,
22
+ runs: 1,
23
+ usage: { total_tokens: known(tokens), cost: { ...known(cost), currency: "BRL" } },
24
+ events: known(1),
25
+ });
26
+ const summary: CostSummarySource = {
27
+ periods: {
28
+ daily: {
29
+ "2026-08-06": period(4, 100, 10),
30
+ "2026-08-07": period(5, 200, 20),
31
+ },
32
+ },
33
+ run_metrics: [
34
+ {
35
+ id: "CROSS",
36
+ started_at: "2026-08-07T02:57:00.000Z",
37
+ finished_at: "2026-08-07T03:06:00.000Z",
38
+ task_id: null,
39
+ phase: "execution",
40
+ parent_run_id: null,
41
+ status: "completed",
42
+ duration_ms: null,
43
+ total_tokens: 100,
44
+ cost: 10,
45
+ currency: "BRL",
46
+ events: 1,
47
+ },
48
+ {
49
+ id: "SAME",
50
+ started_at: "2026-08-07T12:00:00.000Z",
51
+ finished_at: "2026-08-07T12:10:00.000Z",
52
+ task_id: null,
53
+ phase: "execution",
54
+ parent_run_id: null,
55
+ status: "completed",
56
+ duration_ms: null,
57
+ total_tokens: 200,
58
+ cost: 20,
59
+ currency: "BRL",
60
+ events: 1,
61
+ },
62
+ ],
63
+ };
64
+ const operations = {
65
+ filters: { from: null, to: null },
66
+ summary: { task_count: 0 },
67
+ prds: [],
68
+ specs: [],
69
+ } as unknown as OperationsProjection;
70
+
71
+ summary.periods.daily["2026-08-06"] = {
72
+ ...period(4, 0, 0),
73
+ runs: 0,
74
+ duration: { known_sum: 0, unknown: 0, complete: true, coverage_ratio: 1 },
75
+ };
76
+ summary.periods.daily["2026-08-07"] = {
77
+ ...period(5, 300, 30),
78
+ runs: 2,
79
+ duration: { known_sum: 60_000, unknown: 0, complete: true, coverage_ratio: 1 },
80
+ };
81
+ const daily = Object.fromEntries(
82
+ buildCostSummaryProjection(summary, operations, "BRL", null).groups.daily.map((row) => [
83
+ row.key,
84
+ row,
85
+ ]),
86
+ );
87
+ expect(daily["2026-08-06"]).toMatchObject({
88
+ task_count: 4,
89
+ run_count: 1,
90
+ total_tokens: 100,
91
+ estimated_brl: 10,
92
+ });
93
+ expect(daily["2026-08-07"]).toMatchObject({
94
+ task_count: 5,
95
+ run_count: 1,
96
+ total_tokens: 200,
97
+ estimated_brl: 20,
98
+ });
99
+ });
100
+ });
@@ -1,2 +1,3 @@
1
1
  export * from "./build-cost-monitor-projection.js";
2
+ export * from "./build-cost-summary-projection.js";
2
3
  export * from "./run-telemetry.js";
@@ -0,0 +1,61 @@
1
+ {
2
+ "schema_version": 1,
3
+ "source_root": ".agents/dashboard/modules/cost-monitor/src/server",
4
+ "target_root": ".agents/dashboard/modules/cost-monitor/src/server",
5
+ "inventory": {
6
+ "policy": {
7
+ "default_ignored_names": [
8
+ ".git",
9
+ ".next",
10
+ ".turbo",
11
+ "build",
12
+ "coverage",
13
+ "dist",
14
+ "node_modules",
15
+ "out",
16
+ "target",
17
+ "vendor"
18
+ ],
19
+ "included_names": []
20
+ },
21
+ "ignored": [],
22
+ "units": [
23
+ {
24
+ "path": "build-cost-summary-projection.ts",
25
+ "kind": "file",
26
+ "sha256": "23ac104ab35cccef233da6775178f936113bb1b5fd887855ef8fc9565b0a8e50"
27
+ },
28
+ {
29
+ "path": "build-cost-summary-projection.test.ts",
30
+ "kind": "file",
31
+ "sha256": "e21ea41996ed23950496df2d1a73770bcd32d5acd5f05a4b3bb3b9fc8c9d9b30"
32
+ }
33
+ ]
34
+ },
35
+ "units": [
36
+ {
37
+ "source": "build-cost-summary-projection.ts",
38
+ "action": "adapt",
39
+ "destination": "build-cost-summary-projection.ts",
40
+ "ui": false,
41
+ "depends_on": [],
42
+ "owner_task": "TASK-2026-08-07-08-59-AUDIT-DASHBOARD-METRICS-PAGINATION-ZU4Q",
43
+ "slice": "cost-hybrid-duration",
44
+ "gates": ["unit", "typecheck"],
45
+ "rollback": "Restore prior duration source selection.",
46
+ "rationale": "Adapts daily duration to the canonical hybrid baseline."
47
+ },
48
+ {
49
+ "source": "build-cost-summary-projection.test.ts",
50
+ "action": "adapt",
51
+ "destination": "build-cost-summary-projection.test.ts",
52
+ "ui": false,
53
+ "depends_on": [],
54
+ "owner_task": "TASK-2026-08-07-08-59-AUDIT-DASHBOARD-METRICS-PAGINATION-ZU4Q",
55
+ "slice": "cost-hybrid-duration",
56
+ "gates": ["unit", "typecheck"],
57
+ "rollback": "Restore prior expectations and implementation.",
58
+ "rationale": "Covers hybrid legacy and observed duration contract."
59
+ }
60
+ ]
61
+ }
@@ -0,0 +1,31 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { buildCostMonitorProjection } from "../build-cost-monitor-projection.js";
3
+ import { operationsWithPricedRun } from "../build-cost-monitor-projection.test-fixtures.js";
4
+
5
+ describe("Cost Monitor V2 agent identity projection", () => {
6
+ it("uses the catalog agent id for Sub-Runs even when their inherited name is stale", () => {
7
+ const operations = operationsWithPricedRun();
8
+ const source = operations.runs[0];
9
+ if (source === undefined) throw new Error("priced Run fixture is missing");
10
+ source.agent = "agent-finalizer";
11
+ source.agent_name = "zaip-agent-orchestrator";
12
+ source.run_kind = "subrun";
13
+ source.parent_run_id = "RUN-PARENT";
14
+ const projection = buildCostMonitorProjection(operations, undefined, {
15
+ agentNamesById: { "agent-finalizer": "zaip-agent-finalizer" },
16
+ });
17
+ expect(projection.runs[0]?.agent_name).toBe("zaip-agent-finalizer");
18
+ });
19
+
20
+ it("maps an unmapped orchestrator internal id through its catalog role", () => {
21
+ const operations = operationsWithPricedRun();
22
+ const source = operations.runs[0];
23
+ if (source === undefined) throw new Error("priced Run fixture is missing");
24
+ source.agent = "orchestrator";
25
+ source.agent_name = "orchestrator";
26
+ const projection = buildCostMonitorProjection(operations, undefined, {
27
+ agentNamesByRole: { orchestrator: "zaip-agent-orchestrator" },
28
+ });
29
+ expect(projection.runs[0]?.agent_name).toBe("zaip-agent-orchestrator");
30
+ });
31
+ });
@@ -0,0 +1,414 @@
1
+ import type { OperationsProjection } from "@zaip-ai/dashboard-operations/contracts";
2
+ import { describe, expect, it } from "vitest";
3
+ import {
4
+ buildCostSummaryProjection,
5
+ type CostSummarySource,
6
+ } from "../build-cost-summary-projection.js";
7
+
8
+ describe("buildCostSummaryProjection duration aggregation", () => {
9
+ it("unions overlapping root execution intervals like Operations", () => {
10
+ const summary: CostSummarySource = {
11
+ periods: {
12
+ daily: {
13
+ "2026-08-07": {
14
+ prds: 0,
15
+ specs: 0,
16
+ tasks: 0,
17
+ validations: 0,
18
+ evidences: 0,
19
+ runs: 2,
20
+ usage: {
21
+ total_tokens: { known_sum: 0, unknown: 2, complete: false, coverage_ratio: 0 },
22
+ cost: {
23
+ known_sum: 0,
24
+ unknown: 2,
25
+ complete: false,
26
+ coverage_ratio: 0,
27
+ currency: "BRL",
28
+ },
29
+ },
30
+ duration: { known_sum: 5_400_000, unknown: 0, complete: true, coverage_ratio: 1 },
31
+ },
32
+ },
33
+ },
34
+ run_metrics: [
35
+ {
36
+ id: "LEFT",
37
+ started_at: "2026-08-07T12:00:00.000Z",
38
+ finished_at: null,
39
+ task_id: null,
40
+ phase: "execution",
41
+ parent_run_id: null,
42
+ status: null,
43
+ duration_ms: 3_600_000,
44
+ duration_started_at: "2026-08-07T12:00:00.000Z",
45
+ total_tokens: null,
46
+ cost: null,
47
+ currency: null,
48
+ events: null,
49
+ },
50
+ {
51
+ id: "RIGHT",
52
+ started_at: "2026-08-07T12:30:00.000Z",
53
+ finished_at: null,
54
+ task_id: null,
55
+ phase: "execution",
56
+ parent_run_id: null,
57
+ status: null,
58
+ duration_ms: 3_600_000,
59
+ duration_started_at: "2026-08-07T12:30:00.000Z",
60
+ total_tokens: null,
61
+ cost: null,
62
+ currency: null,
63
+ events: null,
64
+ },
65
+ ],
66
+ };
67
+ const operations = {
68
+ filters: { from: null, to: null },
69
+ summary: { task_count: 0 },
70
+ prds: [],
71
+ specs: [],
72
+ } as unknown as OperationsProjection;
73
+ expect(
74
+ buildCostSummaryProjection(summary, operations, "BRL", null).groups.daily[0]?.duration
75
+ .known_sum,
76
+ ).toBe(5_400_000);
77
+ });
78
+
79
+ it("keeps canonical root coverage without injecting the legacy baseline", () => {
80
+ const period = (runs: number) => ({
81
+ prds: 0,
82
+ specs: 0,
83
+ tasks: 0,
84
+ validations: 0,
85
+ evidences: 0,
86
+ runs,
87
+ usage: {
88
+ total_tokens: { known_sum: 0, unknown: runs, complete: false, coverage_ratio: 0 },
89
+ cost: { known_sum: 0, unknown: runs, complete: false, coverage_ratio: 0, currency: "BRL" },
90
+ },
91
+ });
92
+ const summary: CostSummarySource = {
93
+ periods: {
94
+ daily: {
95
+ "2026-08-02": {
96
+ ...period(2),
97
+ duration: { known_sum: 2_000, unknown: 0, complete: true, coverage_ratio: 1 },
98
+ },
99
+ "2026-08-03": {
100
+ ...period(1),
101
+ duration: { known_sum: 0, unknown: 1, complete: false, coverage_ratio: 0 },
102
+ },
103
+ },
104
+ },
105
+ run_metrics: [
106
+ {
107
+ id: "PRE",
108
+ started_at: "2026-08-02T03:00:00.000Z",
109
+ finished_at: null,
110
+ task_id: null,
111
+ phase: "execution",
112
+ parent_run_id: null,
113
+ status: null,
114
+ duration_ms: 99_000,
115
+ total_tokens: null,
116
+ cost: null,
117
+ currency: null,
118
+ events: null,
119
+ },
120
+ {
121
+ id: "POST",
122
+ started_at: "2026-08-02T04:00:00.000Z",
123
+ finished_at: null,
124
+ task_id: null,
125
+ phase: "execution",
126
+ parent_run_id: null,
127
+ status: null,
128
+ duration_ms: 2_000,
129
+ total_tokens: null,
130
+ cost: null,
131
+ currency: null,
132
+ events: null,
133
+ },
134
+ {
135
+ id: "UNKNOWN",
136
+ started_at: "2026-08-03T12:00:00.000Z",
137
+ finished_at: null,
138
+ task_id: null,
139
+ phase: "execution",
140
+ parent_run_id: null,
141
+ status: null,
142
+ duration_ms: null,
143
+ total_tokens: null,
144
+ cost: null,
145
+ currency: null,
146
+ events: null,
147
+ },
148
+ ],
149
+ canonical_daily_duration_ms: { "2026-08-02": 101_000 },
150
+ };
151
+ const operations = {
152
+ filters: { from: null, to: null },
153
+ summary: { task_count: 0 },
154
+ prds: [],
155
+ specs: [],
156
+ } as unknown as OperationsProjection;
157
+ const projection = buildCostSummaryProjection(summary, operations, "BRL", null);
158
+ const cutoffDay = projection.groups.daily.find((row) => row.key === "2026-08-02")!;
159
+ const unknownDay = projection.groups.daily.find((row) => row.key === "2026-08-03")!;
160
+
161
+ expect(cutoffDay).toMatchObject({
162
+ run_count: 2,
163
+ duration: {
164
+ known_sum: 101_000,
165
+ unknown: 0,
166
+ coverage_ratio: 1,
167
+ },
168
+ coverage_counts: {
169
+ metrics: { duration: { eligible_runs: 2, known_runs: 2, unknown_runs: 0 } },
170
+ },
171
+ });
172
+ expect(projection.groups.daily.reduce((total, row) => total + row.duration.known_sum, 0)).toBe(
173
+ 101_000,
174
+ );
175
+ expect(unknownDay.duration).toMatchObject({
176
+ known_sum: 0,
177
+ unknown: 0,
178
+ complete: true,
179
+ coverage_ratio: 1,
180
+ });
181
+ expect(projection.groups.monthly.find((row) => row.key === "2026-08")?.duration).toMatchObject({
182
+ unknown: 0,
183
+ complete: true,
184
+ coverage_ratio: 1,
185
+ });
186
+ expect(
187
+ projection.groups.monthly.find((row) => row.key === "2026-08")?.coverage_counts?.metrics
188
+ ?.duration,
189
+ ).toEqual({
190
+ eligible_runs: 2,
191
+ known_runs: 2,
192
+ unknown_runs: 0,
193
+ });
194
+ expect(projection.overview.average_run_duration_ms).toBe(2_000);
195
+ expect(projection.legacy_effort_baseline).toBeNull();
196
+
197
+ const filtered = buildCostSummaryProjection(
198
+ summary,
199
+ { ...operations, filters: { from: "2026-08-03", to: "2026-08-03" } },
200
+ "BRL",
201
+ null,
202
+ );
203
+ expect(filtered.legacy_effort_baseline).toBeNull();
204
+ expect(filtered.groups.daily).toHaveLength(1);
205
+ });
206
+
207
+ it("preserves each canonical SQLite day instead of redistributing duration by tokens", () => {
208
+ const period = (tokens: number) => ({
209
+ prds: 0,
210
+ specs: 0,
211
+ tasks: 0,
212
+ validations: 0,
213
+ evidences: 0,
214
+ runs: 1,
215
+ usage: {
216
+ total_tokens: { known_sum: tokens, unknown: 0, complete: true, coverage_ratio: 1 },
217
+ cost: {
218
+ known_sum: 1,
219
+ unknown: 0,
220
+ complete: true,
221
+ coverage_ratio: 1,
222
+ currency: "BRL" as const,
223
+ },
224
+ },
225
+ });
226
+ const summary: CostSummarySource = {
227
+ periods: {
228
+ daily: {
229
+ "2026-08-01": period(1_000),
230
+ "2026-08-02": period(9_000),
231
+ },
232
+ },
233
+ canonical_daily_duration_ms: {
234
+ "2026-08-01": 9_000,
235
+ "2026-08-02": 1_000,
236
+ },
237
+ };
238
+ const operations = {
239
+ filters: { from: null, to: null },
240
+ summary: { task_count: 0 },
241
+ prds: [],
242
+ specs: [],
243
+ } as unknown as OperationsProjection;
244
+
245
+ const daily = buildCostSummaryProjection(summary, operations, "BRL", null).groups.daily;
246
+
247
+ expect(daily.find((row) => row.key === "2026-08-01")?.duration.known_sum).toBe(9_000);
248
+ expect(daily.find((row) => row.key === "2026-08-02")?.duration.known_sum).toBe(1_000);
249
+ });
250
+
251
+ it("uses São Paulo timestamp bounds for Cost daily labels and preserves the interval total", () => {
252
+ const period = () => ({
253
+ prds: 0,
254
+ specs: 0,
255
+ tasks: 0,
256
+ validations: 0,
257
+ evidences: 0,
258
+ runs: 0,
259
+ usage: {
260
+ total_tokens: { known_sum: 0, unknown: 0, complete: true, coverage_ratio: 1 },
261
+ cost: { known_sum: 0, unknown: 0, complete: true, coverage_ratio: 1, currency: "BRL" },
262
+ },
263
+ });
264
+ const summary: CostSummarySource = {
265
+ periods: {
266
+ daily: Object.fromEntries(
267
+ [
268
+ "2026-08-02",
269
+ "2026-08-03",
270
+ "2026-08-04",
271
+ "2026-08-05",
272
+ "2026-08-06",
273
+ "2026-08-07",
274
+ "2026-08-08",
275
+ ].map((day) => [day, period()]),
276
+ ),
277
+ },
278
+ run_metrics: [
279
+ {
280
+ id: "LEFT",
281
+ started_at: "2026-08-07T12:00:00.000Z",
282
+ finished_at: null,
283
+ task_id: null,
284
+ phase: "execution",
285
+ parent_run_id: null,
286
+ status: null,
287
+ duration_ms: 3_600_000,
288
+ total_tokens: null,
289
+ cost: null,
290
+ currency: null,
291
+ events: null,
292
+ },
293
+ {
294
+ id: "RIGHT",
295
+ started_at: "2026-08-07T12:30:00.000Z",
296
+ finished_at: null,
297
+ task_id: null,
298
+ phase: "execution",
299
+ parent_run_id: null,
300
+ status: null,
301
+ duration_ms: 3_600_000,
302
+ total_tokens: null,
303
+ cost: null,
304
+ currency: null,
305
+ events: null,
306
+ },
307
+ ],
308
+ };
309
+ const operations = {
310
+ filters: { from: "2026-08-02T03:00:00.000Z", to: "2026-08-08T02:59:59.999Z" },
311
+ summary: { task_count: 0 },
312
+ prds: [],
313
+ specs: [],
314
+ } as unknown as OperationsProjection;
315
+ summary.periods.daily["2026-08-07"] = {
316
+ ...period(),
317
+ duration: { known_sum: 5_400_000, unknown: 0, complete: true, coverage_ratio: 1 },
318
+ };
319
+ const daily = buildCostSummaryProjection(summary, operations, "BRL", null).groups.daily;
320
+
321
+ expect(daily.map((row) => row.key)).not.toContain("2026-08-08");
322
+ expect(daily.map((row) => row.key)).toEqual(
323
+ expect.arrayContaining(["2026-08-02", "2026-08-07"]),
324
+ );
325
+ expect(daily.reduce((total, row) => total + row.duration.known_sum, 0)).toBe(5_400_000);
326
+ });
327
+ it("keeps factual duration visible while retaining partial financial coverage", () => {
328
+ const known = (known_sum: number) => ({
329
+ known_sum,
330
+ unknown: 0,
331
+ complete: true,
332
+ coverage_ratio: 1,
333
+ });
334
+ const period = {
335
+ prds: 0,
336
+ specs: 0,
337
+ tasks: 0,
338
+ validations: 0,
339
+ evidences: 0,
340
+ runs: 2,
341
+ usage: { total_tokens: known(100), cost: { ...known(10), currency: "BRL" } },
342
+ };
343
+ const operations = {
344
+ filters: { from: null, to: null },
345
+ summary: { task_count: 0 },
346
+ prds: [],
347
+ specs: [],
348
+ } as unknown as OperationsProjection;
349
+ const partial = buildCostSummaryProjection(
350
+ {
351
+ periods: { daily: { "2026-08-12": period } },
352
+ cost_monitor_daily_duration: {
353
+ "2026-08-12": { known_sum: 60_000, eligible_runs: 2, known_runs: 1 },
354
+ },
355
+ },
356
+ operations,
357
+ "BRL",
358
+ null,
359
+ ).groups.daily[0]!;
360
+ expect(partial).toMatchObject({ total_tokens: 100, estimated_brl: 10, duration_ms: 60_000 });
361
+ expect(partial.duration).toMatchObject({ known_sum: 60_000, unknown: 1, complete: false });
362
+
363
+ const observedZero = buildCostSummaryProjection(
364
+ {
365
+ periods: { daily: { "2026-08-12": { ...period, runs: 1 } } },
366
+ cost_monitor_daily_duration: {
367
+ "2026-08-12": { known_sum: 0, eligible_runs: 1, known_runs: 1 },
368
+ },
369
+ },
370
+ operations,
371
+ "BRL",
372
+ null,
373
+ ).groups.daily[0]!;
374
+ expect(observedZero.duration_ms).toBe(0);
375
+ });
376
+ it("keeps monthly and annual duration unavailable when any financial day is incomplete", () => {
377
+ const known = (known_sum: number) => ({
378
+ known_sum,
379
+ unknown: 0,
380
+ complete: true,
381
+ coverage_ratio: 1,
382
+ });
383
+ const period = (tokens: number) => ({
384
+ prds: 0,
385
+ specs: 0,
386
+ tasks: 0,
387
+ validations: 0,
388
+ evidences: 0,
389
+ runs: 1,
390
+ usage: { total_tokens: known(tokens), cost: { ...known(tokens), currency: "BRL" as const } },
391
+ });
392
+ const operations = {
393
+ filters: { from: null, to: null },
394
+ summary: { task_count: 0 },
395
+ prds: [],
396
+ specs: [],
397
+ } as unknown as OperationsProjection;
398
+ const groups = buildCostSummaryProjection(
399
+ {
400
+ periods: { daily: { "2026-07-23": period(10), "2026-07-24": period(20) } },
401
+ cost_monitor_daily_duration: {
402
+ "2026-07-23": { known_sum: 20_000, eligible_runs: 1, known_runs: 1 },
403
+ "2026-07-24": { known_sum: 0, eligible_runs: 1, known_runs: 0 },
404
+ },
405
+ },
406
+ operations,
407
+ "BRL",
408
+ null,
409
+ ).groups;
410
+ expect(groups.daily.map((row) => row.duration_ms)).toEqual([20_000, null]);
411
+ expect(groups.monthly[0]?.duration_ms).toBeNull();
412
+ expect(groups.annual[0]?.duration_ms).toBeNull();
413
+ });
414
+ });
@@ -38,6 +38,46 @@ describe("aggregateTaskCostRows", () => {
38
38
  duration: { known_sum: 60_000, unknown: 0, complete: true, coverage_ratio: 1 },
39
39
  });
40
40
  });
41
+
42
+ it("keeps the known Task sums while reporting one known Run out of two", () => {
43
+ const tasks = [task("TASK-PARTIAL", "Partial task", "2026-07-16T20:25:00.000Z")];
44
+ const rows = [
45
+ { ...run("TASK-PARTIAL", "2026-07-16T20:28:21.000Z"), run_id: "RUN-KNOWN" },
46
+ {
47
+ ...run("TASK-PARTIAL", "2026-07-16T20:29:21.000Z"),
48
+ run_id: "RUN-UNKNOWN",
49
+ total_tokens: null,
50
+ estimated_usd: null,
51
+ estimated_brl: null,
52
+ },
53
+ ];
54
+
55
+ expect(aggregateTaskCostRows(tasks, rows)[0]).toMatchObject({
56
+ total_tokens: 100,
57
+ estimated_usd: 0.1,
58
+ estimated_brl: 0.5,
59
+ coverage_counts: {
60
+ source: "run_rows",
61
+ metrics: {
62
+ tokens: { eligible_runs: 2, known_runs: 1, unknown_runs: 1 },
63
+ usd: { eligible_runs: 2, known_runs: 1, unknown_runs: 1 },
64
+ brl: { eligible_runs: 2, known_runs: 1, unknown_runs: 1 },
65
+ },
66
+ },
67
+ });
68
+ });
69
+
70
+ it("keeps a historical Run attributed to its missing Task without creating that Task", () => {
71
+ const rows = [{ ...run("TASK-RETIRED", "2026-07-16T20:28:21.000Z"), run_id: "RUN-HISTORY" }];
72
+ expect(aggregateTaskCostRows([], rows)).toMatchObject([
73
+ {
74
+ key: "TASK-RETIRED",
75
+ label: "Tarefa histórica: TASK-RETIRED",
76
+ run_count: 1,
77
+ total_tokens: 100,
78
+ },
79
+ ]);
80
+ });
41
81
  });
42
82
 
43
83
  function task(id: string, title: string, createdAt: string): DashboardTaskProjection {
@@ -73,6 +113,7 @@ function task(id: string, title: string, createdAt: string): DashboardTaskProjec
73
113
  function run(taskId: string, startedAt: string): CostRunRow {
74
114
  return {
75
115
  run_id: "RUN-1",
116
+ execution_id: "EXEC-1",
76
117
  conversation_id: "CONV-1",
77
118
  task_id: taskId,
78
119
  task_title: "Run task",