@zaip-ai/cli 2.2.0 → 3.0.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 (571) hide show
  1. package/README.md +36 -13
  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 +26 -9
  5. package/dist/services/adapters.js.map +1 -1
  6. package/dist/services/agent-adapters.js +37 -18
  7. package/dist/services/agent-adapters.js.map +1 -1
  8. package/dist/services/agent-discovery.d.ts +27 -0
  9. package/dist/services/agent-discovery.d.ts.map +1 -0
  10. package/dist/services/agent-discovery.js +73 -0
  11. package/dist/services/agent-discovery.js.map +1 -0
  12. package/dist/services/codex-conversation-lifecycle-hook.d.ts.map +1 -1
  13. package/dist/services/codex-conversation-lifecycle-hook.js +164 -24
  14. package/dist/services/codex-conversation-lifecycle-hook.js.map +1 -1
  15. package/dist/services/codex-pre-tool-hook-template.d.ts.map +1 -1
  16. package/dist/services/codex-pre-tool-hook-template.js +146 -72
  17. package/dist/services/codex-pre-tool-hook-template.js.map +1 -1
  18. package/dist/services/codex-rules.d.ts +1 -1
  19. package/dist/services/codex-rules.d.ts.map +1 -1
  20. package/dist/services/codex-rules.js +3 -3
  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 +117 -66
  24. package/dist/services/codex-subagent-hook-template.js.map +1 -1
  25. package/dist/services/install-agents-template.d.ts.map +1 -1
  26. package/dist/services/install-agents-template.js +65 -7
  27. package/dist/services/install-agents-template.js.map +1 -1
  28. package/dist/services/logger.js +1 -1
  29. package/dist/services/logger.js.map +1 -1
  30. package/dist/services/logger.test.js +22 -1
  31. package/dist/services/logger.test.js.map +1 -1
  32. package/dist/services/runtime-template.test.js +153 -1
  33. package/dist/services/runtime-template.test.js.map +1 -1
  34. package/dist/services/transactional-files.d.ts.map +1 -1
  35. package/dist/services/transactional-files.js +59 -14
  36. package/dist/services/transactional-files.js.map +1 -1
  37. package/package.json +1 -1
  38. package/templates/.agents/.env.example +9 -3
  39. package/templates/.agents/README-ENG.md +101 -15
  40. package/templates/.agents/README.md +102 -17
  41. package/templates/.agents/architecture/software-architecture.md +1 -59
  42. package/templates/.agents/branding/brandbook.md +3 -0
  43. package/templates/.agents/config/agents/catalog.yaml +25 -10
  44. package/templates/.agents/config/agents/discovery.json +319 -0
  45. package/templates/.agents/config/clients/codex/agents/zaip-agent-analyst.toml +1 -1
  46. package/templates/.agents/config/clients/codex/agents/zaip-agent-auditor.toml +1 -1
  47. package/templates/.agents/config/clients/codex/agents/zaip-agent-backend.toml +3 -3
  48. package/templates/.agents/config/clients/codex/agents/zaip-agent-brand-strategist.toml +1 -1
  49. package/templates/.agents/config/clients/codex/agents/zaip-agent-builder.toml +3 -3
  50. package/templates/.agents/config/clients/codex/agents/zaip-agent-cloud-engineer.toml +12 -9
  51. package/templates/.agents/config/clients/codex/agents/zaip-agent-data-analyst.toml +1 -1
  52. package/templates/.agents/config/clients/codex/agents/zaip-agent-designer.toml +3 -3
  53. package/templates/.agents/config/clients/codex/agents/zaip-agent-finalizer.toml +2 -2
  54. package/templates/.agents/config/clients/codex/agents/zaip-agent-frontend.toml +3 -3
  55. package/templates/.agents/config/clients/codex/agents/zaip-agent-general-operations.toml +1 -1
  56. package/templates/.agents/config/clients/codex/agents/zaip-agent-governance-compliance.toml +1 -1
  57. package/templates/.agents/config/clients/codex/agents/zaip-agent-growth-strategist.toml +1 -1
  58. package/templates/.agents/config/clients/codex/agents/zaip-agent-integrator.toml +1 -1
  59. package/templates/.agents/config/clients/codex/agents/zaip-agent-marketing-analyst.toml +1 -1
  60. package/templates/.agents/config/clients/codex/agents/zaip-agent-orchestrator.toml +13 -10
  61. package/templates/.agents/config/clients/codex/agents/zaip-agent-refactoring-specialist.toml +1 -1
  62. package/templates/.agents/config/clients/codex/agents/zaip-agent-reviewer.toml +1 -1
  63. package/templates/.agents/config/clients/codex/agents/zaip-agent-sales-specialist.toml +1 -1
  64. package/templates/.agents/config/clients/codex/agents/zaip-agent-security-auditor.toml +1 -1
  65. package/templates/.agents/config/clients/codex/agents/zaip-agent-task-executor.toml +3 -3
  66. package/templates/.agents/config/clients/codex/agents/zaip-agent-website-developer.toml +3 -3
  67. package/templates/.agents/config/clients/codex/agents/zaip-agent-writer.toml +1 -1
  68. package/templates/.agents/config/pricing/models.json +9 -5
  69. package/templates/.agents/config/project.yaml +22 -2
  70. package/templates/.agents/dashboard/.zaip-managed.json +530 -138
  71. package/templates/.agents/dashboard/README.md +16 -0
  72. package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-CEDZjl4V.js +1 -0
  73. package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-DaSllaJp.js → DashboardHelpDialog-TnrL1ZyZ.js} +967 -578
  74. package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-DjQpBqGU.js +1 -0
  75. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-B9GWkEyN.css +1 -0
  76. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-BAvLPAee.js +3 -0
  77. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BQZXUnQu.js +1 -0
  78. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-06__WZco.js +68 -0
  79. package/templates/.agents/dashboard/apps/frontend/dist/assets/dashboard-localization-Basaw1NR.js +824 -0
  80. package/templates/.agents/dashboard/apps/frontend/dist/assets/{icons-vendor-TPUT2IUt.js → icons-vendor-DEmo6Tn2.js} +1 -1
  81. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-BQe3zTvL.js +2 -0
  82. package/templates/.agents/dashboard/apps/frontend/dist/assets/{react-vendor-Ct48XHGL.js → react-vendor-CadYsm83.js} +1 -1
  83. package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-Bh1tDfsg.js +1 -0
  84. package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-BzKK8kK3.js +1 -0
  85. package/templates/.agents/dashboard/apps/frontend/dist/index.html +6 -6
  86. package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
  87. package/templates/.agents/dashboard/apps/frontend/src/App.tsx +3 -1264
  88. package/templates/.agents/dashboard/apps/frontend/src/AppDashboardContent.tsx +368 -0
  89. package/templates/.agents/dashboard/apps/frontend/src/AutonomySettings.tsx +82 -0
  90. package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.dom.test.ts +130 -0
  91. package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +206 -157
  92. package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +3 -1
  93. package/templates/.agents/dashboard/apps/frontend/src/__tests__/app-composition-support.ts +12 -0
  94. package/templates/.agents/dashboard/apps/frontend/src/cost-monitor-population.test.tsx +149 -0
  95. package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +9 -7
  96. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api-settings.ts +152 -0
  97. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.test.ts +19 -0
  98. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +50 -154
  99. package/templates/.agents/dashboard/apps/frontend/src/dashboard-app-shell.tsx +33 -0
  100. package/templates/.agents/dashboard/apps/frontend/src/dashboard-cost-facts.test.ts +54 -0
  101. package/templates/.agents/dashboard/apps/frontend/src/dashboard-cost-facts.ts +48 -0
  102. package/templates/.agents/dashboard/apps/frontend/src/dashboard-localization.test.ts +37 -43
  103. package/templates/.agents/dashboard/apps/frontend/src/dashboard-localization.ts +9 -251
  104. package/templates/.agents/dashboard/apps/frontend/src/dashboard-project-overview.ts +35 -2
  105. package/templates/.agents/dashboard/apps/frontend/src/dashboard-retry.ts +17 -0
  106. package/templates/.agents/dashboard/apps/frontend/src/dashboard-setup-route.ts +29 -0
  107. package/templates/.agents/dashboard/apps/frontend/src/dashboard-view-actions.test.ts +51 -0
  108. package/templates/.agents/dashboard/apps/frontend/src/dashboard-view-actions.ts +68 -0
  109. package/templates/.agents/dashboard/apps/frontend/src/operations-period-render.test.ts +38 -2
  110. package/templates/.agents/dashboard/apps/frontend/src/operations-period.test.ts +19 -4
  111. package/templates/.agents/dashboard/apps/frontend/src/operations-period.ts +5 -3
  112. package/templates/.agents/dashboard/apps/frontend/src/overview-status-page.test.ts +2 -2
  113. package/templates/.agents/dashboard/apps/frontend/src/project-installation-status.test.ts +137 -0
  114. package/templates/.agents/dashboard/apps/frontend/src/project-installation-status.ts +66 -0
  115. package/templates/.agents/dashboard/apps/frontend/src/project-settings-copy.ts +181 -0
  116. package/templates/.agents/dashboard/apps/frontend/src/project-settings-model.ts +11 -1
  117. package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +102 -51
  118. package/templates/.agents/dashboard/apps/frontend/src/project-settings-state.css +55 -0
  119. package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +14 -2
  120. package/templates/.agents/dashboard/apps/frontend/src/sao-paulo-day-rollover.test.ts +36 -0
  121. package/templates/.agents/dashboard/apps/frontend/src/sao-paulo-day-rollover.ts +30 -0
  122. package/templates/.agents/dashboard/apps/frontend/src/snapshot-banner-semantics.test.ts +2 -5
  123. package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +31 -20
  124. package/templates/.agents/dashboard/apps/frontend/src/traceability-task-pagination.ts +1 -2
  125. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.test.ts +6 -0
  126. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.ts +2 -0
  127. package/templates/.agents/dashboard/apps/frontend/src/use-app-effects.ts +9 -1
  128. package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-documents.ts +3 -1
  129. package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-task-pagination.ts +66 -0
  130. package/templates/.agents/dashboard/apps/frontend/src/use-app-work-board.ts +397 -0
  131. package/templates/.agents/dashboard/apps/frontend/src/use-dashboard-app-model.tsx +782 -0
  132. package/templates/.agents/dashboard/apps/frontend/src/use-snapshot-notice.tsx +49 -0
  133. package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
  134. package/templates/.agents/dashboard/modules/cost-monitor/src/complete-cost-average.test.ts +73 -0
  135. package/templates/.agents/dashboard/modules/cost-monitor/src/contracts.ts +9 -0
  136. package/templates/.agents/dashboard/modules/cost-monitor/src/period-averages.ts +60 -0
  137. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostDeveloperPanelSlot.tsx +16 -0
  138. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostGroupsTable.tsx +459 -0
  139. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorContent.tsx +8 -22
  140. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.test.ts +27 -17
  141. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +64 -189
  142. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorRunDialog.tsx +20 -0
  143. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostPeriodAverageCards.tsx +32 -8
  144. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables-hides-calls-that-have-no-collected.test.ts +80 -0
  145. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables-keeps-legacy-codex-identity-fields-blank.test.ts +455 -0
  146. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +18 -525
  147. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.tsx +32 -508
  148. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-export-sources.ts +74 -0
  149. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-actions.ts +19 -0
  150. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-selectors.ts +49 -0
  151. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-summary.ts +3 -2
  152. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-table-formatters.ts +115 -0
  153. package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.ts +1 -42
  154. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.ts +2 -1
  155. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.test-fixtures.ts +2 -0
  156. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.ts +3 -2
  157. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +8 -2
  158. package/templates/.agents/dashboard/modules/cost-monitor/src/server/index.ts +1 -0
  159. package/templates/.agents/dashboard/modules/operations/package.json +1 -1
  160. package/templates/.agents/dashboard/modules/operations/src/contracts.ts +4 -0
  161. package/templates/.agents/dashboard/modules/operations/src/react/EntityTableBadges.tsx +34 -0
  162. package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.tsx +8 -38
  163. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview-keeps-structure-classes-mutually-exclusive.test.ts +244 -0
  164. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.helpers.tsx +66 -3
  165. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.test.ts +98 -276
  166. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.tsx +105 -276
  167. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverviewCharts.tsx +171 -0
  168. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverviewPanels.tsx +64 -0
  169. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +9 -17
  170. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageOverview.tsx +3 -0
  171. package/templates/.agents/dashboard/modules/operations/src/react/OverviewCostKpi.tsx +46 -0
  172. package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.test.tsx +2 -1
  173. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.test.ts +28 -1
  174. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.tsx +11 -4
  175. package/templates/.agents/dashboard/modules/operations/src/react/index.ts +1 -0
  176. package/templates/.agents/dashboard/modules/operations/src/react/manual-work-priority.test.ts +2 -1
  177. package/templates/.agents/dashboard/modules/operations/src/react/operations-coverage-toast.test.ts +8 -4
  178. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +34 -22
  179. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview.status-cards.test.ts +3 -1
  180. package/templates/.agents/dashboard/modules/operations/src/react/operations-page-contract.ts +21 -2
  181. package/templates/.agents/dashboard/modules/operations/src/react/overview-cost-card.test.tsx +89 -0
  182. package/templates/.agents/dashboard/modules/operations/src/react/overview-metric-format.ts +32 -0
  183. package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.test.ts +3 -3
  184. package/templates/.agents/dashboard/modules/operations/src/work-board-model.ts +2 -1
  185. package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
  186. package/templates/.agents/dashboard/packages/branding/package.json +1 -1
  187. package/templates/.agents/dashboard/packages/branding/src/index.ts +1 -1
  188. package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
  189. package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
  190. package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +1625 -1613
  191. package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +1592 -1582
  192. package/templates/.agents/dashboard/packages/local-runtime/package.json +3 -2
  193. package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +22 -28
  194. package/templates/.agents/dashboard/packages/local-runtime/server.mjs +1625 -1614
  195. package/templates/.agents/dashboard/packages/local-runtime/src/active-codex-telemetry.ts +25 -0
  196. package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.test.ts +1 -1
  197. package/templates/.agents/dashboard/packages/local-runtime/src/project-installation-summary.test.ts +142 -0
  198. package/templates/.agents/dashboard/packages/local-runtime/src/project-installation-summary.ts +190 -0
  199. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +118 -8
  200. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +92 -36
  201. package/templates/.agents/dashboard/packages/local-runtime/src/projection-refresh-diagnostics.ts +35 -0
  202. package/templates/.agents/dashboard/packages/local-runtime/src/server-browser-lease.test.ts +91 -0
  203. package/templates/.agents/dashboard/packages/local-runtime/src/server-browser-lease.ts +24 -4
  204. package/templates/.agents/dashboard/packages/local-runtime/src/server-costs-routes.ts +168 -0
  205. package/templates/.agents/dashboard/packages/local-runtime/src/server-dual-reads-manifest-summaries-without-losing.test.ts +344 -0
  206. package/templates/.agents/dashboard/packages/local-runtime/src/server-hono-security.test.ts +17 -0
  207. package/templates/.agents/dashboard/packages/local-runtime/src/server-http-contracts.ts +31 -0
  208. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-routes.ts +364 -0
  209. package/templates/.agents/dashboard/packages/local-runtime/src/server-read-projections.ts +461 -0
  210. package/templates/.agents/dashboard/packages/local-runtime/src/server-reconciliation-refresh.test.ts +78 -0
  211. package/templates/.agents/dashboard/packages/local-runtime/src/server-route-context.ts +13 -0
  212. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.test.ts +94 -2
  213. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.ts +62 -12
  214. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.test.ts +44 -0
  215. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.ts +22 -3
  216. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot.test.ts +22 -21
  217. package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-task-trace.test.ts +97 -0
  218. package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-task-trace.ts +10 -13
  219. package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-view-allowlist.test.ts +25 -0
  220. package/templates/.agents/dashboard/packages/local-runtime/src/server-trace-routes.ts +56 -0
  221. package/templates/.agents/dashboard/packages/local-runtime/src/server-traceability-index.test.ts +84 -0
  222. package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.test.ts +2 -30
  223. package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.ts +6 -23
  224. package/templates/.agents/dashboard/packages/local-runtime/src/server.test-fixtures.ts +1 -1
  225. package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +2 -330
  226. package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +87 -1060
  227. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-dimension-facts.test.ts +12 -1
  228. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-file-index.test.ts +69 -0
  229. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-first-fold-cache.ts +3 -1
  230. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-force-canonical.test.ts +3 -1
  231. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-incremental-refresh.test.ts +2 -0
  232. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-first-fold.ts +78 -0
  233. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-projections.ts +570 -0
  234. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-runs.ts +600 -0
  235. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.test.ts +1 -1
  236. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-period-averages.ts +46 -0
  237. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-provider-alias-parity.test.ts +50 -0
  238. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-agent-dimension.ts +269 -0
  239. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-context.ts +32 -0
  240. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-entity-group.ts +244 -0
  241. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-filtered-dimension.ts +303 -0
  242. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-financial.ts +547 -0
  243. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-model-dimension.ts +360 -0
  244. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-provider-dimension.ts +169 -0
  245. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-summary.ts +493 -0
  246. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-temporal-dimension.ts +134 -0
  247. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-timing.ts +299 -0
  248. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-view-page.ts +692 -0
  249. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-counts-every-root-execution-day-returns.test.ts +763 -0
  250. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-does-not-convert-delayed-historical-finalizer.test.ts +706 -0
  251. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-filesystem.ts +762 -0
  252. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-first-fold-types.ts +1 -1
  253. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-keeps-orphan-telemetry-out-kanban-without.test.ts +710 -0
  254. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-marks-token-cost-telemetry-unavailable-when.test.ts +618 -0
  255. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-rebuild.ts +764 -0
  256. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-rebuilds-disposable-snapshot-serves-zaip-records.test.ts +276 -0
  257. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-schema.ts +193 -0
  258. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-source-fingerprint.test.ts +54 -1
  259. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-source-fingerprint.ts +7 -3
  260. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-types.ts +123 -0
  261. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +5 -2806
  262. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.ts +17 -6930
  263. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-risk-population.test.ts +98 -0
  264. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-schema-base-views.ts +390 -0
  265. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-schema-dashboard-views.ts +413 -0
  266. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-snapshot-seed.test.ts +2 -0
  267. package/templates/.agents/dashboard/packages/local-runtime/src/verify-project-settings.mjs +57 -0
  268. package/templates/.agents/dashboard/packages/local-runtime/src/work-priority-contract.test.ts +4 -3
  269. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-build.mjs +195 -0
  270. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-lifecycle.test.mjs +2 -7
  271. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-logging.mjs +35 -0
  272. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-navigation.mjs +114 -0
  273. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-paths.mjs +90 -0
  274. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +89 -418
  275. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +22 -12
  276. package/templates/.agents/dashboard/packages/ui/package.json +1 -1
  277. package/templates/.agents/dashboard/scripts/qualify-observability.mjs +130 -0
  278. package/templates/.agents/dashboard/scripts/verify-autonomy-settings.mjs +175 -0
  279. package/templates/.agents/dashboard/scripts/verify-observability.mjs +254 -0
  280. package/templates/.agents/dashboard/scripts/verify-project-setup.mjs +64 -0
  281. package/templates/.agents/dashboard/tests/e2e/lease-global-setup.ts +37 -0
  282. package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
  283. package/templates/.agents/dashboard/tests/e2e/playwright.config.ts +9 -4
  284. package/templates/.agents/dashboard/tests/e2e/specs/cost-monitor-period-transition.spec.ts +22 -1
  285. package/templates/.agents/dashboard/tests/e2e/specs/dashboard-performance-matrix.spec.ts +17 -8
  286. package/templates/.agents/dashboard/tests/e2e/specs/dashboard.spec.ts +47 -6
  287. package/templates/.agents/dashboard/tests/e2e/specs/lease-lifetime.spec.ts +14 -0
  288. package/templates/.agents/dashboard/tests/observability-fixture.mjs +200 -0
  289. package/templates/.agents/design/.zaip-managed.json +86 -42
  290. package/templates/.agents/design/DESIGN.md +2 -186
  291. package/templates/.agents/design/README.md +12 -2
  292. package/templates/.agents/design/apps/catalog/dist/assets/index-BJV597iq.js +72 -0
  293. package/templates/.agents/design/apps/catalog/dist/assets/index-BOjCcUaU.js +72 -0
  294. package/templates/.agents/design/apps/catalog/dist/assets/index-B_WhrCZe.js +72 -0
  295. package/templates/.agents/design/apps/catalog/dist/assets/index-CqtYXZfV.js +72 -0
  296. package/templates/.agents/design/apps/catalog/dist/assets/index-D_lfqoyx.js +72 -0
  297. package/templates/.agents/design/apps/catalog/dist/assets/index-i_PO2k9R.js +9 -0
  298. package/templates/.agents/design/apps/catalog/dist/index.html +1 -1
  299. package/templates/.agents/design/apps/catalog/dist/storybook/assets/CatalogShell-Cstn1UwA.js +1 -0
  300. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{Color-6AOWCN3U-B-kAgAjB.js → Color-6AOWCN3U-Cm-yJJz_.js} +1 -1
  301. package/templates/.agents/design/apps/catalog/dist/storybook/assets/Components.stories-D1WopB2L.js +137 -0
  302. package/templates/.agents/design/apps/catalog/dist/storybook/assets/DesignSystem.stories-DQ9PJ3N3.js +1 -0
  303. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{DocsRenderer-JROSPFPF-BVN7xHtv.js → DocsRenderer-JROSPFPF-Belk4jRr.js} +4 -4
  304. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{WithTooltip-7X4HQR7L-CDHtKYkz.js → WithTooltip-7X4HQR7L-DoPvjkS1.js} +1 -1
  305. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{chunk-DRQKCCAG-D6AsDkMK.js → chunk-DRQKCCAG-B1itKXEN.js} +1 -1
  306. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{chunk-W22LQPXL-B4m5uloN.js → chunk-W22LQPXL-C-Eb5SPY.js} +1 -1
  307. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{components-CN8YyTUg.js → components-DnyKLwhj.js} +5 -5
  308. package/templates/.agents/design/apps/catalog/dist/storybook/assets/formatter-L2YTDE3Q-D0OSgxWz.js +1 -0
  309. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{iframe-9yZfIsdT.js → iframe-DcXBsFPz.js} +3 -3
  310. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{react-18-BoCSnq6H.js → react-18-CRM89QRf.js} +1 -1
  311. package/templates/.agents/design/apps/catalog/dist/storybook/assets/react-C3tkVMIp.js +1 -0
  312. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{syntaxhighlighter-YFXUGROL-Bnn_nMwJ.js → syntaxhighlighter-YFXUGROL-B03jQGTF.js} +1 -1
  313. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{theming-DS_ue2sb.js → theming-4ZyufAga.js} +1 -1
  314. package/templates/.agents/design/apps/catalog/dist/storybook/iframe.html +1 -1
  315. package/templates/.agents/design/apps/catalog/dist/storybook/index.json +1 -1
  316. package/templates/.agents/design/apps/catalog/package.json +2 -2
  317. package/templates/.agents/design/apps/catalog/src/components/AutonomySpecimen.tsx +15 -0
  318. package/templates/.agents/design/apps/catalog/src/components/CostPopulationSpecimen.test.tsx +19 -0
  319. package/templates/.agents/design/apps/catalog/src/components/CostPopulationSpecimen.tsx +45 -0
  320. package/templates/.agents/design/apps/catalog/src/components/EstimatedCostSpecimen.tsx +48 -0
  321. package/templates/.agents/design/apps/catalog/src/components/ProjectStatusSpecimen.tsx +169 -0
  322. package/templates/.agents/design/apps/catalog/src/pages/ComponentsPage.tsx +55 -0
  323. package/templates/.agents/design/apps/catalog/src/stories/Components.stories.tsx +60 -0
  324. package/templates/.agents/design/packages/local-runtime/package.json +1 -1
  325. package/templates/.agents/growth/strategy.md +3 -0
  326. package/templates/.agents/marketing/strategy.md +3 -0
  327. package/templates/.agents/requirements/autonomous-assurance.md +2 -1
  328. package/templates/.agents/requirements/cloud-hostinger-autonomy.md +1 -1
  329. package/templates/.agents/requirements/comparative-audit.md +1 -1
  330. package/templates/.agents/requirements/context-engine.md +1 -1
  331. package/templates/.agents/requirements/cost-observability.md +1 -1
  332. package/templates/.agents/requirements/dashboard-launch.md +1 -1
  333. package/templates/.agents/requirements/data-export.md +1 -1
  334. package/templates/.agents/requirements/design-system.md +13 -4
  335. package/templates/.agents/requirements/execution-engine.md +1 -1
  336. package/templates/.agents/requirements/kanban-dashboard.md +1 -1
  337. package/templates/.agents/requirements/model-orchestration.md +1 -1
  338. package/templates/.agents/requirements/public-distribution.md +4 -2
  339. package/templates/.agents/requirements/software-architecture.md +1 -1
  340. package/templates/.agents/requirements/strategic-improvements.md +1 -1
  341. package/templates/.agents/requirements/work-lifecycle.md +6 -6
  342. package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
  343. package/templates/.agents/rules/architecture.md +2 -0
  344. package/templates/.agents/rules/astra-diagnostic.md +3 -1
  345. package/templates/.agents/rules/autonomy-decision.md +12 -2
  346. package/templates/.agents/rules/cloud-hostinger-autonomy.md +2 -0
  347. package/templates/.agents/rules/context.md +2 -1
  348. package/templates/.agents/rules/core.md +15 -4
  349. package/templates/.agents/rules/design-system-central-contract.md +17 -0
  350. package/templates/.agents/rules/evolution.md +3 -1
  351. package/templates/.agents/rules/frontend-lite.md +3 -1
  352. package/templates/.agents/rules/local-sqlite-storage.md +2 -2
  353. package/templates/.agents/rules/meta-mcp.md +3 -1
  354. package/templates/.agents/rules/model-orchestration.md +1 -1
  355. package/templates/.agents/rules/run-lifecycle-closure.md +11 -7
  356. package/templates/.agents/rules/security.md +3 -1
  357. package/templates/.agents/rules/specialist-routing.md +3 -1
  358. package/templates/.agents/rules/text-writing-utf8.md +1 -1
  359. package/templates/.agents/rules/workflow.md +7 -5
  360. package/templates/.agents/runtime/VERSION +1 -1
  361. package/templates/.agents/runtime/bin/zaip.mjs +821 -516
  362. package/templates/.agents/runtime/checksums.sha256 +6 -6
  363. package/templates/.agents/runtime/manifest.json +1 -1
  364. package/templates/.agents/runtime/pnpm-lock.sha256 +1 -1
  365. package/templates/.agents/runtime/provenance.json +5 -5
  366. package/templates/.agents/runtime/sbom.cdx.json +3 -3
  367. package/templates/.agents/sales/playbook.md +3 -0
  368. package/templates/.agents/skills/zaip-aios/SKILL.md +5 -3
  369. package/templates/.agents/skills/zaip-skill-adapt-stack/SKILL.md +1 -0
  370. package/templates/.agents/skills/zaip-skill-api-contracts/SKILL.md +14 -0
  371. package/templates/.agents/skills/zaip-skill-api-contracts/agents/openai.yaml +4 -0
  372. package/templates/.agents/skills/zaip-skill-application-observability/SKILL.md +15 -0
  373. package/templates/.agents/skills/zaip-skill-application-observability/agents/openai.yaml +4 -0
  374. package/templates/.agents/skills/zaip-skill-application-observability/references/signal-design.md +3 -0
  375. package/templates/.agents/skills/zaip-skill-application-readiness/SKILL.md +15 -0
  376. package/templates/.agents/skills/zaip-skill-application-readiness/agents/openai.yaml +4 -0
  377. package/templates/.agents/skills/zaip-skill-application-readiness/references/evidence-matrix.md +3 -0
  378. package/templates/.agents/skills/zaip-skill-architecture-design/SKILL.md +14 -0
  379. package/templates/.agents/skills/zaip-skill-architecture-design/agents/openai.yaml +4 -0
  380. package/templates/.agents/skills/zaip-skill-async-jobs/SKILL.md +14 -0
  381. package/templates/.agents/skills/zaip-skill-async-jobs/agents/openai.yaml +4 -0
  382. package/templates/.agents/skills/zaip-skill-auth-tenancy/SKILL.md +15 -0
  383. package/templates/.agents/skills/zaip-skill-auth-tenancy/agents/openai.yaml +4 -0
  384. package/templates/.agents/skills/zaip-skill-auth-tenancy/references/data-access-paths.md +9 -0
  385. package/templates/.agents/skills/zaip-skill-auth-tenancy/references/worker-scenario.md +5 -0
  386. package/templates/.agents/skills/zaip-skill-auth-tenancy/scripts/worker-contract.test.mjs +27 -0
  387. package/templates/.agents/skills/zaip-skill-author-skills/SKILL.md +2 -0
  388. package/templates/.agents/skills/zaip-skill-author-skills/references/engineering-skill-index.md +9 -0
  389. package/templates/.agents/skills/zaip-skill-author-skills/scripts/audit-skill-catalog.mjs +5 -3
  390. package/templates/.agents/skills/zaip-skill-author-skills/scripts/author-skill-scripts.test.mjs +27 -0
  391. package/templates/.agents/skills/zaip-skill-backend/SKILL.md +4 -0
  392. package/templates/.agents/skills/zaip-skill-backend/references/deployment-environments.md +75 -0
  393. package/templates/.agents/skills/zaip-skill-backend/references/supabase-migration-contract.md +23 -0
  394. package/templates/.agents/skills/zaip-skill-brand-governance/SKILL.md +2 -0
  395. package/templates/.agents/skills/zaip-skill-cache-strategy/SKILL.md +14 -0
  396. package/templates/.agents/skills/zaip-skill-cache-strategy/agents/openai.yaml +4 -0
  397. package/templates/.agents/skills/zaip-skill-change/SKILL.md +1 -1
  398. package/templates/.agents/skills/zaip-skill-cloud-engineering/SKILL.md +7 -0
  399. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/SKILL.md +37 -0
  400. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/agents/openai.yaml +6 -0
  401. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/references/workers-static-assets.md +26 -0
  402. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/references/workflow-templates.md +71 -0
  403. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/scripts/cloudflare-github-deploy-contract.test.mjs +77 -0
  404. package/templates/.agents/skills/zaip-skill-config/SKILL.md +21 -11
  405. package/templates/.agents/skills/zaip-skill-config/agents/openai.yaml +2 -2
  406. package/templates/.agents/skills/zaip-skill-container-runtime/SKILL.md +14 -0
  407. package/templates/.agents/skills/zaip-skill-container-runtime/agents/openai.yaml +4 -0
  408. package/templates/.agents/skills/zaip-skill-context/SKILL.md +6 -1
  409. package/templates/.agents/skills/zaip-skill-context/references/prd-spec-task-handoff.md +10 -0
  410. package/templates/.agents/skills/zaip-skill-context/references/rule-selection.md +20 -0
  411. package/templates/.agents/skills/zaip-skill-cqrs/SKILL.md +1 -0
  412. package/templates/.agents/skills/zaip-skill-cybersecurity/SKILL.md +18 -0
  413. package/templates/.agents/skills/zaip-skill-cybersecurity/agents/openai.yaml +4 -0
  414. package/templates/.agents/skills/zaip-skill-cybersecurity/references/audit-contract.md +94 -0
  415. package/templates/.agents/skills/zaip-skill-cybersecurity/scripts/score-audit.mjs +185 -0
  416. package/templates/.agents/skills/zaip-skill-cybersecurity/scripts/score-audit.test.mjs +101 -0
  417. package/templates/.agents/skills/zaip-skill-data-modeling/SKILL.md +14 -0
  418. package/templates/.agents/skills/zaip-skill-data-modeling/agents/openai.yaml +4 -0
  419. package/templates/.agents/skills/zaip-skill-database-migrations/SKILL.md +20 -0
  420. package/templates/.agents/skills/zaip-skill-database-migrations/agents/openai.yaml +4 -0
  421. package/templates/.agents/skills/zaip-skill-database-migrations/references/manual-mode.md +15 -0
  422. package/templates/.agents/skills/zaip-skill-database-migrations/references/promotion-example.md +5 -0
  423. package/templates/.agents/skills/zaip-skill-database-migrations/scripts/export-manual-sql.mjs +145 -0
  424. package/templates/.agents/skills/zaip-skill-database-migrations/scripts/export-manual-sql.test.mjs +178 -0
  425. package/templates/.agents/skills/zaip-skill-dependency-upgrade/SKILL.md +14 -0
  426. package/templates/.agents/skills/zaip-skill-dependency-upgrade/agents/openai.yaml +4 -0
  427. package/templates/.agents/skills/zaip-skill-deployment-pipeline/SKILL.md +15 -0
  428. package/templates/.agents/skills/zaip-skill-deployment-pipeline/agents/openai.yaml +4 -0
  429. package/templates/.agents/skills/zaip-skill-deployment-pipeline/references/runtime-shapes.md +3 -0
  430. package/templates/.agents/skills/zaip-skill-design-system/SKILL.md +20 -9
  431. package/templates/.agents/skills/zaip-skill-dev-environment/SKILL.md +16 -0
  432. package/templates/.agents/skills/zaip-skill-dev-environment/agents/openai.yaml +4 -0
  433. package/templates/.agents/skills/zaip-skill-dev-environment/references/inventory-contract.md +7 -0
  434. package/templates/.agents/skills/zaip-skill-dev-environment/scripts/inventory.mjs +77 -0
  435. package/templates/.agents/skills/zaip-skill-disaster-recovery/SKILL.md +15 -0
  436. package/templates/.agents/skills/zaip-skill-disaster-recovery/agents/openai.yaml +4 -0
  437. package/templates/.agents/skills/zaip-skill-disaster-recovery/references/recovery-scope.md +3 -0
  438. package/templates/.agents/skills/zaip-skill-execution/SKILL.md +31 -8
  439. package/templates/.agents/skills/zaip-skill-execution/references/correction-cycle.md +7 -0
  440. package/templates/.agents/skills/zaip-skill-execution/references/runtime-governance.md +18 -8
  441. package/templates/.agents/skills/zaip-skill-external-integrations/SKILL.md +14 -0
  442. package/templates/.agents/skills/zaip-skill-external-integrations/agents/openai.yaml +4 -0
  443. package/templates/.agents/skills/zaip-skill-frontend/SKILL.md +4 -0
  444. package/templates/.agents/skills/zaip-skill-frontend-componentization/SKILL.md +44 -0
  445. package/templates/.agents/skills/zaip-skill-frontend-componentization/agents/openai.yaml +4 -0
  446. package/templates/.agents/skills/zaip-skill-frontend-data-flows/SKILL.md +14 -0
  447. package/templates/.agents/skills/zaip-skill-frontend-data-flows/agents/openai.yaml +4 -0
  448. package/templates/.agents/skills/zaip-skill-general-operations/SKILL.md +2 -0
  449. package/templates/.agents/skills/zaip-skill-github-actions-setup/SKILL.md +36 -0
  450. package/templates/.agents/skills/zaip-skill-github-actions-setup/agents/openai.yaml +4 -0
  451. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/cloudflare-pages.md +33 -0
  452. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/github.md +63 -0
  453. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/hostinger-vps.md +55 -0
  454. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/npm.md +30 -0
  455. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/check-skill.mjs +55 -0
  456. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-cloudflare.mjs +61 -0
  457. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-cloudflare.test.mjs +128 -0
  458. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-ssh.integration.test.mjs +106 -0
  459. package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +42 -76
  460. package/templates/.agents/skills/zaip-skill-github-deploy/references/deployment-workflow.md +135 -0
  461. package/templates/.agents/skills/zaip-skill-github-deploy/references/github-release-workflow-template.md +31 -0
  462. package/templates/.agents/skills/zaip-skill-github-deploy/references/release-gate-matrix.md +24 -0
  463. package/templates/.agents/skills/zaip-skill-github-deploy/references/release-identity.md +44 -0
  464. package/templates/.agents/skills/zaip-skill-github-deploy/references/release-notes.md +134 -0
  465. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/consumer-release-preparation.mjs +389 -0
  466. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/consumer-release-preparation.test.mjs +134 -0
  467. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs +25 -2
  468. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness-api.test.mjs +134 -0
  469. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness.mjs +98 -0
  470. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness.test.mjs +25 -0
  471. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/install-github-readiness-workflow.mjs +159 -0
  472. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/install-github-readiness-workflow.test.mjs +160 -0
  473. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs +149 -12
  474. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.test.mjs +64 -5
  475. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/release-notes-coverage.test.mjs +126 -0
  476. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/resolve-release-identity.mjs +78 -0
  477. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/resolve-release-identity.test.mjs +51 -0
  478. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/validate-release-notes.mjs +184 -0
  479. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/validate-release-notes.test.mjs +109 -0
  480. package/templates/.agents/skills/zaip-skill-growth-strategy-revops/SKILL.md +2 -0
  481. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/SKILL.md +18 -10
  482. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/agents/openai.yaml +3 -4
  483. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/aws-cli-terraform.md +62 -0
  484. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/guia-iniciante-hostinger-vps.md +183 -0
  485. package/templates/.agents/skills/zaip-skill-marketing/SKILL.md +2 -0
  486. package/templates/.agents/skills/zaip-skill-module-scaffold/SKILL.md +14 -0
  487. package/templates/.agents/skills/zaip-skill-module-scaffold/agents/openai.yaml +4 -0
  488. package/templates/.agents/skills/zaip-skill-module-scaffold/references/scaffold-contract.md +9 -0
  489. package/templates/.agents/skills/zaip-skill-module-scaffold/scripts/helpers.test.mjs +121 -0
  490. package/templates/.agents/skills/zaip-skill-module-scaffold/scripts/scaffold.mjs +169 -0
  491. package/templates/.agents/skills/zaip-skill-move-prd/SKILL.md +3 -1
  492. package/templates/.agents/skills/zaip-skill-move-spec/SKILL.md +1 -1
  493. package/templates/.agents/skills/zaip-skill-performance-engineering/SKILL.md +14 -0
  494. package/templates/.agents/skills/zaip-skill-performance-engineering/agents/openai.yaml +4 -0
  495. package/templates/.agents/skills/zaip-skill-prd/SKILL.md +3 -1
  496. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-local-telemetry.mjs +1 -0
  497. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.mjs +26 -9
  498. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.test.mjs +39 -13
  499. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.mjs +1 -0
  500. package/templates/.agents/skills/zaip-skill-refactor-landing-page/SKILL.md +66 -0
  501. package/templates/.agents/skills/zaip-skill-refactor-landing-page/agents/openai.yaml +4 -0
  502. package/templates/.agents/skills/zaip-skill-refactor-landing-page/references/behavioral-dry-run.md +23 -0
  503. package/templates/.agents/skills/zaip-skill-release-qualification/SKILL.md +38 -1
  504. package/templates/.agents/skills/zaip-skill-release-qualification/references/local-preparation.md +122 -0
  505. package/templates/.agents/skills/zaip-skill-review/SKILL.md +1 -0
  506. package/templates/.agents/skills/zaip-skill-rules/SKILL.md +3 -3
  507. package/templates/.agents/skills/zaip-skill-sales-methodology/SKILL.md +2 -0
  508. package/templates/.agents/skills/zaip-skill-setup/SKILL.md +21 -21
  509. package/templates/.agents/skills/zaip-skill-setup/agents/openai.yaml +2 -2
  510. package/templates/.agents/skills/zaip-skill-spec/SKILL.md +3 -2
  511. package/templates/.agents/skills/zaip-skill-storage-uploads/SKILL.md +14 -0
  512. package/templates/.agents/skills/zaip-skill-storage-uploads/agents/openai.yaml +4 -0
  513. package/templates/.agents/skills/zaip-skill-systematic-debugging/SKILL.md +14 -0
  514. package/templates/.agents/skills/zaip-skill-systematic-debugging/agents/openai.yaml +4 -0
  515. package/templates/.agents/skills/zaip-skill-task/SKILL.md +16 -7
  516. package/templates/.agents/skills/zaip-skill-task/references/commit-policy.md +25 -0
  517. package/templates/.agents/skills/zaip-skill-test-data/SKILL.md +14 -0
  518. package/templates/.agents/skills/zaip-skill-test-data/agents/openai.yaml +4 -0
  519. package/templates/.agents/skills/zaip-skill-test-data/scripts/generate.mjs +72 -0
  520. package/templates/.agents/skills/zaip-skill-testing-strategy/SKILL.md +15 -0
  521. package/templates/.agents/skills/zaip-skill-testing-strategy/agents/openai.yaml +4 -0
  522. package/templates/.agents/skills/zaip-skill-testing-strategy/references/example-map.md +3 -0
  523. package/templates/.agents/skills/zaip-skill-tool-setup/SKILL.md +2 -0
  524. package/templates/.agents/skills/zaip-skill-website-readiness/SKILL.md +8 -0
  525. package/templates/.agents/zaip-aios/INDEX.md +9 -1
  526. package/templates/.agents/zaip-aios/README.md +23 -2
  527. package/templates/.agents/zaip-aios/VERSION +1 -1
  528. package/templates/.agents/zaip-aios/guides/01-primeiros-passos.md +5 -1
  529. package/templates/.agents/zaip-aios/guides/03-tasks.md +15 -2
  530. package/templates/.agents/zaip-aios/guides/04-specs.md +13 -0
  531. package/templates/.agents/zaip-aios/guides/05-prds.md +13 -0
  532. package/templates/.agents/zaip-aios/guides/06-execucao.md +19 -4
  533. package/templates/.agents/zaip-aios/guides/07-revisao-e-validacao.md +14 -0
  534. package/templates/.agents/zaip-aios/guides/08-contexto-e-tokens.md +4 -3
  535. package/templates/.agents/zaip-aios/guides/09-agentes-e-squads.md +17 -9
  536. package/templates/.agents/zaip-aios/guides/10-seguranca.md +11 -1
  537. package/templates/.agents/zaip-aios/guides/11-observabilidade-e-custos.md +69 -0
  538. package/templates/.agents/zaip-aios/guides/12-instalacao-e-upgrade.md +9 -4
  539. package/templates/.agents/zaip-aios/guides/13-boas-praticas.md +7 -1
  540. package/templates/.agents/zaip-aios/guides/14-troubleshooting.md +18 -0
  541. package/templates/.agents/zaip-aios/guides/16-lifecycle-e-reconciliacao.md +54 -3
  542. package/templates/.agents/zaip-aios/guides/18-catalogo-de-agentes.md +10 -2
  543. package/templates/.agents/zaip-aios/guides/19-assurance-e-autonomia.md +186 -5
  544. package/templates/.agents/zaip-aios/guides/20-instalacao-detalhada.md +26 -18
  545. package/templates/.agents/zaip-aios/guides/21-telemetria-monitor-custos.md +18 -2
  546. package/templates/.agents/zaip-aios/guides/22-fluxos-e-roteamento.md +14 -2
  547. package/templates/.agents/zaip-aios/guides/23-orquestracao-de-modelos.md +190 -489
  548. package/templates/.agents/zaip-aios/guides/26-qualidade-e-release.md +61 -13
  549. package/templates/.agents/zaip-aios/guides/27-telemetria-git-native.md +18 -0
  550. package/templates/.agents/zaip-aios/guides/28-lifecycle-completo.md +18 -1
  551. package/templates/scripts/validate-cloud-hostinger-contract.mjs +34 -0
  552. package/templates/template-manifest.json +1229 -329
  553. package/templates/.agents/branding/.gitkeep +0 -0
  554. package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-snUCQYTC.js +0 -1
  555. package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-BPtVUGgs.js +0 -1
  556. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-3Awyaovx.js +0 -3
  557. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-GgzpZ_PY.css +0 -1
  558. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BCvZFMEf.js +0 -1
  559. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-DbaLbU2q.js +0 -68
  560. package/templates/.agents/dashboard/apps/frontend/dist/assets/dashboard-localization-CLJ0lT9v.js +0 -231
  561. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-_MEktQNM.js +0 -2
  562. package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-D9-fqq9M.js +0 -1
  563. package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-BDe4_Ubl.js +0 -1
  564. package/templates/.agents/design/apps/catalog/dist/storybook/assets/CatalogShell-BWY-80s4.js +0 -1
  565. package/templates/.agents/design/apps/catalog/dist/storybook/assets/Components.stories-Be2mDUQj.js +0 -27
  566. package/templates/.agents/design/apps/catalog/dist/storybook/assets/DesignSystem.stories-DRx9blDs.js +0 -1
  567. package/templates/.agents/design/apps/catalog/dist/storybook/assets/formatter-L2YTDE3Q-EwuTh8Zk.js +0 -1
  568. package/templates/.agents/design/apps/catalog/dist/storybook/assets/react-DyL61NPT.js +0 -1
  569. package/templates/.agents/growth/.gitkeep +0 -0
  570. package/templates/.agents/marketing/.gitkeep +0 -0
  571. package/templates/.agents/sales/.gitkeep +0 -0
@@ -0,0 +1,547 @@
1
+ import { developerArtifactCountsCte } from "./sqlite-artifact-counts.js";
2
+ import type { SqliteQueryContext } from "./sqlite-query-context.js";
3
+ import {
4
+ costMonitorFilterDay,
5
+ saoPauloDay,
6
+ sumKnownDeveloperMetric,
7
+ } from "./sqlite-read-model-canonical.js";
8
+ import type { SqliteReadModelFileSystem } from "./sqlite-read-model-filesystem.js";
9
+ export function queryInvocationTotals(
10
+ context: SqliteQueryContext,
11
+ filter: { from: string | null; to: string | null },
12
+ ): {
13
+ invocation_count: number;
14
+ llm_call_count: number | null;
15
+ total_tokens: number | null;
16
+ cost_usd: number | null;
17
+ cost_brl: number | null;
18
+ } {
19
+ const from = filter.from?.slice(0, 10) ?? null;
20
+ const to = filter.to?.slice(0, 10) ?? null;
21
+ const row = context.database
22
+ .prepare(
23
+ "SELECT COUNT(*) AS invocation_count, SUM(llm_call_count) AS llm_call_count, SUM(total_tokens) AS total_tokens, SUM(cost_usd) AS cost_usd, SUM(cost_brl) AS cost_brl FROM invocations WHERE (? IS NULL OR occurred_day_sp >= ?) AND (? IS NULL OR occurred_day_sp <= ?)",
24
+ )
25
+ .get(from, from, to, to) as {
26
+ invocation_count: number;
27
+ llm_call_count: number | null;
28
+ total_tokens: number | null;
29
+ cost_usd: number | null;
30
+ cost_brl: number | null;
31
+ };
32
+ return row;
33
+ }
34
+ export function queryInvocationCostRows(
35
+ context: SqliteQueryContext,
36
+ filter: {
37
+ from: string | null;
38
+ to: string | null;
39
+ providers?: readonly string[];
40
+ models?: readonly string[];
41
+ agents?: readonly string[];
42
+ phases?: readonly string[];
43
+ statuses?: readonly string[];
44
+ tasks?: readonly string[];
45
+ specs?: readonly string[];
46
+ prds?: readonly string[];
47
+ executions?: readonly string[];
48
+ changes?: readonly string[];
49
+ },
50
+ ) {
51
+ const from = filter.from?.slice(0, 10) ?? null;
52
+ const to = filter.to?.slice(0, 10) ?? null;
53
+ // Financial periods are source-session periods when available. This keeps
54
+ // a retrospective capture on its observed day rather than its write day.
55
+ const periodDay =
56
+ "date(COALESCE(i.source_started_at, i.source_occurred_at, i.occurred_at), '-3 hours')";
57
+ const clauses = [`(? IS NULL OR ${periodDay} >= ?)`, `(? IS NULL OR ${periodDay} <= ?)`];
58
+ const values: Array<string | number | null> = [from, from, to, to];
59
+ const add = (column: string, items?: readonly string[]) => {
60
+ if (items !== undefined && items.length > 0) {
61
+ clauses.push(`${column} IN (${items.map(() => "?").join(",")})`);
62
+ values.push(...items);
63
+ }
64
+ };
65
+ add("i.zaip_agent", filter.agents);
66
+ add("i.phase", filter.phases);
67
+ add("i.status", filter.statuses);
68
+ add("i.task_id", filter.tasks);
69
+ add("i.spec_id", filter.specs);
70
+ add("i.prd_id", filter.prds);
71
+ add("i.execution_id", filter.executions);
72
+ add("i.change_id", filter.changes);
73
+ const providerValues = (filter.providers ?? []).filter((item) => item !== "unavailable");
74
+ const modelValues = (filter.models ?? []).filter((item) => item !== "unavailable");
75
+ const requestsUnavailable =
76
+ filter.providers?.includes("unavailable") === true ||
77
+ filter.models?.includes("unavailable") === true;
78
+ if (requestsUnavailable) {
79
+ // Keep the pre-existing explicit-unavailable behaviour; it describes a
80
+ // missing invocation attribute rather than a provider/model pair.
81
+ const dimension = (column: "provider" | "model", items?: readonly string[]) => {
82
+ if (items === undefined || items.length === 0) return;
83
+ const available = items.filter((item) => item !== "unavailable");
84
+ const wantsUnavailable = items.includes("unavailable");
85
+ const matches =
86
+ available.length === 0
87
+ ? "0"
88
+ : `EXISTS (SELECT 1 FROM invocation_usage f WHERE f.agent_invocation_id = i.agent_invocation_id AND f.${column} IN (${available.map(() => "?").join(",")}))`;
89
+ if (available.length > 0) values.push(...available);
90
+ const missing = `NOT EXISTS (SELECT 1 FROM invocation_usage f WHERE f.agent_invocation_id = i.agent_invocation_id AND f.${column} IS NOT NULL AND f.${column} <> 'unavailable')`;
91
+ clauses.push(wantsUnavailable ? `(${matches} OR ${missing})` : matches);
92
+ };
93
+ dimension("provider", filter.providers);
94
+ dimension("model", filter.models);
95
+ } else if (providerValues.length > 0 || modelValues.length > 0) {
96
+ const segmentClauses: string[] = [];
97
+ if (providerValues.length > 0) {
98
+ segmentClauses.push(`f.provider IN (${providerValues.map(() => "?").join(",")})`);
99
+ values.push(...providerValues);
100
+ }
101
+ if (modelValues.length > 0) {
102
+ segmentClauses.push(`f.model IN (${modelValues.map(() => "?").join(",")})`);
103
+ values.push(...modelValues);
104
+ }
105
+ clauses.push(
106
+ `EXISTS (SELECT 1 FROM invocation_usage f WHERE f.agent_invocation_id = i.agent_invocation_id AND ${segmentClauses.join(" AND ")})`,
107
+ );
108
+ }
109
+ return context.database
110
+ .prepare(`SELECT i.*, CASE COUNT(DISTINCT s.provider) WHEN 0 THEN NULL WHEN 1 THEN MIN(s.provider) ELSE 'mixed' END AS provider, CASE COUNT(DISTINCT s.model) WHEN 0 THEN NULL WHEN 1 THEN MIN(s.model) ELSE 'mixed' END AS model,
111
+ SUM(s.input_tokens) AS input_tokens, SUM(s.cached_input_tokens) AS cached_input_tokens,
112
+ SUM(s.output_tokens) AS output_tokens, SUM(s.reasoning_tokens) AS reasoning_tokens,
113
+ SUM(s.total_tokens) AS total_tokens, SUM(s.cost_usd) AS cost_usd, SUM(s.cost_brl) AS cost_brl
114
+ FROM invocations i LEFT JOIN invocation_usage s USING(agent_invocation_id)
115
+ WHERE ${clauses.join(" AND ")}
116
+ GROUP BY i.agent_invocation_id ORDER BY i.occurred_at`)
117
+ .all(...values) as Array<Record<string, unknown>>;
118
+ }
119
+ export function queryCostMonitorFactualDurationByDay(
120
+ context: SqliteQueryContext,
121
+ filter: Parameters<SqliteReadModelFileSystem["invocationCostRows"]>[0],
122
+ financialRows: readonly Record<string, unknown>[] = context.costMonitorFinancialActivityRows(
123
+ filter,
124
+ ),
125
+ ): Map<string, { known_sum: number; eligible_runs: number; known_runs: number }> {
126
+ const rows = financialRows;
127
+ const activityIds = new Set<string>();
128
+ const unavailableByDay = new Map<string, Set<string>>();
129
+ for (const row of rows) {
130
+ const timestamp =
131
+ typeof row.source_started_at === "string"
132
+ ? row.source_started_at
133
+ : typeof row.source_occurred_at === "string"
134
+ ? row.source_occurred_at
135
+ : typeof row.occurred_at === "string"
136
+ ? row.occurred_at
137
+ : null;
138
+ if (timestamp === null) continue;
139
+ const hasFinancialFact =
140
+ typeof row.total_tokens === "number" ||
141
+ typeof row.cost_brl === "number" ||
142
+ typeof row.cost_usd === "number";
143
+ if (!hasFinancialFact) continue;
144
+ // SQLite exposes the durable activity key as an integer; normalize it
145
+ // before joining it to the JSON-backed temporal fact key.
146
+ const activityId =
147
+ typeof row.activity_row_id === "string" || typeof row.activity_row_id === "number"
148
+ ? String(row.activity_row_id)
149
+ : String(row.run_id ?? timestamp);
150
+ activityIds.add(activityId);
151
+ }
152
+ const factsByDay = new Map<string, { known_sum: number; activityIds: Set<string> }>();
153
+ const knownActivityIds = new Set<string>();
154
+ // V3 persists read-model views with a public `zaip_vw_` prefix. Keep the
155
+ // prior unprefixed name for disposable pre-V3 generations so an active
156
+ // local session can be refreshed instead of failing its Cost Monitor.
157
+ const durationFactTable =
158
+ context.database
159
+ .prepare(
160
+ "SELECT 1 AS present FROM sqlite_master WHERE name = 'attributed_token_active_facts'",
161
+ )
162
+ .get() !== undefined
163
+ ? "attributed_token_active_facts"
164
+ : "zaip_vw_attributed_token_active_facts";
165
+ const activityIdList = Array.from(activityIds);
166
+ for (let offset = 0; offset < activityIdList.length; offset += 900) {
167
+ const batch = activityIdList.slice(offset, offset + 900);
168
+ const facts = context.database
169
+ .prepare(
170
+ `SELECT activity_row_id, occurred_day_sp, attributed_token_active_ms
171
+ FROM ${durationFactTable}
172
+ WHERE activity_row_id IN (${batch.map(() => "?").join(",")})`,
173
+ )
174
+ .all(...batch) as Array<Record<string, unknown>>;
175
+ for (const fact of facts) {
176
+ const activityId = String(fact.activity_row_id);
177
+ const day = String(fact.occurred_day_sp);
178
+ const value = Number(fact.attributed_token_active_ms);
179
+ if (!Number.isFinite(value) || value < 0) continue;
180
+ const current = factsByDay.get(day) ?? { known_sum: 0, activityIds: new Set<string>() };
181
+ current.known_sum += value;
182
+ current.activityIds.add(activityId);
183
+ factsByDay.set(day, current);
184
+ knownActivityIds.add(activityId);
185
+ }
186
+ }
187
+ for (const row of rows) {
188
+ const activityId =
189
+ typeof row.activity_row_id === "string" || typeof row.activity_row_id === "number"
190
+ ? String(row.activity_row_id)
191
+ : null;
192
+ if (activityId === null || knownActivityIds.has(activityId)) continue;
193
+ const timestamp =
194
+ typeof row.source_started_at === "string"
195
+ ? row.source_started_at
196
+ : typeof row.source_occurred_at === "string"
197
+ ? row.source_occurred_at
198
+ : typeof row.occurred_at === "string"
199
+ ? row.occurred_at
200
+ : null;
201
+ if (timestamp === null) continue;
202
+ const day = saoPauloDay(timestamp);
203
+ const ids = unavailableByDay.get(day) ?? new Set<string>();
204
+ ids.add(activityId);
205
+ unavailableByDay.set(day, ids);
206
+ }
207
+ const byDay = new Map<string, { known_sum: number; eligible_runs: number; known_runs: number }>();
208
+ for (const day of new Set([...factsByDay.keys(), ...unavailableByDay.keys()])) {
209
+ const facts = factsByDay.get(day) ?? { known_sum: 0, activityIds: new Set<string>() };
210
+ const unavailableIds = unavailableByDay.get(day) ?? new Set<string>();
211
+ byDay.set(day, {
212
+ known_sum: facts.known_sum,
213
+ eligible_runs: new Set([...facts.activityIds, ...unavailableIds]).size,
214
+ known_runs: facts.activityIds.size,
215
+ });
216
+ }
217
+ return byDay;
218
+ }
219
+ export function queryActivityCostRows(
220
+ context: SqliteQueryContext,
221
+ filter: {
222
+ from: string | null;
223
+ to: string | null;
224
+ providers?: readonly string[];
225
+ models?: readonly string[];
226
+ agents?: readonly string[];
227
+ phases?: readonly string[];
228
+ statuses?: readonly string[];
229
+ tasks?: readonly string[];
230
+ specs?: readonly string[];
231
+ prds?: readonly string[];
232
+ executions?: readonly string[];
233
+ changes?: readonly string[];
234
+ },
235
+ ) {
236
+ const from = filter.from?.slice(0, 10) ?? null;
237
+ const to = filter.to?.slice(0, 10) ?? null;
238
+ const clauses = [
239
+ "(? IS NULL OR i.occurred_day_sp >= ?)",
240
+ "(? IS NULL OR i.occurred_day_sp <= ?)",
241
+ ];
242
+ const values: Array<string | number | null> = [from, from, to, to];
243
+ const add = (column: string, items?: readonly string[]) => {
244
+ if (items !== undefined && items.length > 0) {
245
+ clauses.push(`${column} IN (${items.map(() => "?").join(",")})`);
246
+ values.push(...items);
247
+ }
248
+ };
249
+ add("i.zaip_agent", filter.agents);
250
+ add("i.provider", filter.providers);
251
+ add("i.model", filter.models);
252
+ add("i.phase", filter.phases);
253
+ add("i.status", filter.statuses);
254
+ add("i.task_id", filter.tasks);
255
+ add("i.spec_id", filter.specs);
256
+ add("i.prd_id", filter.prds);
257
+ add("i.execution_id", filter.executions);
258
+ add("i.change_id", filter.changes);
259
+ return context.database
260
+ .prepare(`SELECT i.*, i.activity_row_id AS agent_invocation_id,
261
+ i.parent_run_id AS parent_agent_invocation_id
262
+ FROM activities i WHERE ${clauses.join(" AND ")} ORDER BY i.occurred_at`)
263
+ .all(...values) as Array<Record<string, unknown>>;
264
+ }
265
+ export function queryCostMonitorFinancialActivityRows(
266
+ context: SqliteQueryContext,
267
+ filter: Parameters<SqliteReadModelFileSystem["activityCostRows"]>[0],
268
+ ) {
269
+ // Activity capture day can differ from the observed source session day.
270
+ // Keep that source-session population in SQL: the previous implementation
271
+ // read every activity into JS and issued a usage lookup for each filtered
272
+ // Agent Run, making the Cost Monitor first fold scale with all history.
273
+ const { from, to, providers = [], models = [] } = filter;
274
+ const sourceFrom = costMonitorFilterDay(from);
275
+ const sourceTo = costMonitorFilterDay(to);
276
+ const sourceDay =
277
+ "date(COALESCE(a.source_started_at, a.source_occurred_at, a.occurred_at), '-3 hours')";
278
+ const clauses = [
279
+ "(a.total_tokens IS NOT NULL OR a.cost_brl IS NOT NULL OR a.cost_usd IS NOT NULL)",
280
+ `(? IS NULL OR ${sourceDay} >= ?)`,
281
+ `(? IS NULL OR ${sourceDay} <= ?)`,
282
+ ];
283
+ const values: Array<string | number | null> = [sourceFrom, sourceFrom, sourceTo, sourceTo];
284
+ const add = (column: string, items?: readonly string[]) => {
285
+ if (items !== undefined && items.length > 0) {
286
+ clauses.push(`a.${column} IN (${items.map(() => "?").join(",")})`);
287
+ values.push(...items);
288
+ }
289
+ };
290
+ add("zaip_agent", filter.agents);
291
+ add("phase", filter.phases);
292
+ add("status", filter.statuses);
293
+ add("task_id", filter.tasks);
294
+ add("spec_id", filter.specs);
295
+ add("prd_id", filter.prds);
296
+ add("execution_id", filter.executions);
297
+ add("change_id", filter.changes);
298
+ if (providers.length > 0 || models.length > 0) {
299
+ const usageClauses: string[] = [];
300
+ if (providers.length > 0) {
301
+ usageClauses.push(
302
+ `COALESCE(u.provider, 'unavailable') IN (${providers.map(() => "?").join(",")})`,
303
+ );
304
+ }
305
+ if (models.length > 0) {
306
+ usageClauses.push(`COALESCE(u.model, 'unavailable') IN (${models.map(() => "?").join(",")})`);
307
+ }
308
+ const usageValues = [...providers, ...models];
309
+ const directClauses: string[] = [];
310
+ if (providers.length > 0)
311
+ directClauses.push(
312
+ `COALESCE(a.provider, 'unavailable') IN (${providers.map(() => "?").join(",")})`,
313
+ );
314
+ if (models.length > 0)
315
+ directClauses.push(
316
+ `COALESCE(a.model, 'unavailable') IN (${models.map(() => "?").join(",")})`,
317
+ );
318
+ // Rows without an Agent Invocation keep their activity dimensions;
319
+ // Agent rows retain the segment-level provider/model semantics.
320
+ clauses.push(
321
+ `((a.agent_run_id IS NULL AND ${directClauses.join(" AND ")}) OR ` +
322
+ `(a.agent_run_id IS NOT NULL AND EXISTS (SELECT 1 FROM invocation_usage u WHERE u.agent_invocation_id = a.agent_run_id AND ${usageClauses.join(" AND ")})))`,
323
+ );
324
+ values.push(...providers, ...models, ...usageValues);
325
+ }
326
+ // This is the sole fact-shaped input for the Cost Monitor first fold.
327
+ // Never select `a.*`: activities also carries large technical payload
328
+ // blobs, which made a compact summary deserialize the whole fact table.
329
+ // Detail screens use their dedicated, paginated SQLite views instead.
330
+ return context.database
331
+ .prepare(`SELECT
332
+ a.activity_row_id, a.agent_run_id, a.parent_run_id,
333
+ a.source_started_at, a.source_finished_at, a.source_occurred_at,
334
+ a.occurred_at, a.occurred_day_sp, a.run_id,
335
+ a.task_id, a.execution_id, a.spec_id, a.prd_id, a.change_id,
336
+ a.zaip_agent, a.provider, a.model, a.phase, a.status,
337
+ a.duration_ms, a.source_duration_ms, a.duration_provenance,
338
+ a.total_tokens, a.input_tokens, a.cached_input_tokens,
339
+ a.output_tokens, a.reasoning_tokens, a.cost_usd, a.cost_brl,
340
+ a.source_event_count,
341
+ a.activity_row_id AS agent_invocation_id,
342
+ a.parent_run_id AS parent_agent_invocation_id
343
+ FROM activities a WHERE ${clauses.join(" AND ")} ORDER BY a.occurred_at`)
344
+ .all(...values) as Array<Record<string, unknown>>;
345
+ }
346
+ export function queryDeveloperCostAggregate(
347
+ context: SqliteQueryContext,
348
+ filter: {
349
+ from: string | null;
350
+ to: string | null;
351
+ accountIds?: readonly string[];
352
+ },
353
+ ) {
354
+ const from = costMonitorFilterDay(filter.from);
355
+ const to = costMonitorFilterDay(filter.to);
356
+ const clauses = [
357
+ "a.developer_account_id IS NOT NULL",
358
+ "(? IS NULL OR a.occurred_day_sp >= ?)",
359
+ "(? IS NULL OR a.occurred_day_sp <= ?)",
360
+ ];
361
+ const values: Array<string | null> = [from, from, to, to];
362
+ if (filter.accountIds !== undefined && filter.accountIds.length > 0) {
363
+ clauses.push(`a.developer_account_id IN (${filter.accountIds.map(() => "?").join(",")})`);
364
+ values.push(...filter.accountIds);
365
+ }
366
+ const where = clauses.join(" AND ");
367
+ const rows = context.database
368
+ .prepare(`
369
+ WITH selected AS (SELECT * FROM zaip_vw_activities a WHERE ${where}), completed AS (
370
+ SELECT a.developer_account_id, COUNT(DISTINCT w.id) AS completed_task_count
371
+ FROM zaip_vw_canonical_work_items w JOIN selected a ON a.run_id=w.completed_run_id
372
+ WHERE w.entity_kind='task' AND w.status='completed' GROUP BY a.developer_account_id
373
+ ) ${developerArtifactCountsCte()}
374
+ SELECT a.developer_account_id AS account_id, MAX(a.developer_login) AS login_snapshot,
375
+ CASE WHEN COUNT(DISTINCT a.developer_attribution_source)=1 THEN MAX(a.developer_attribution_source) ELSE 'mixed' END AS attribution_source,
376
+ COUNT(DISTINCT a.prd_id) AS prd_count, COUNT(DISTINCT a.spec_id) AS spec_count,
377
+ COUNT(DISTINCT a.task_id) AS task_count, COUNT(*) AS run_count,
378
+ COALESCE(artifacts.test_count, 0) AS test_count,
379
+ COALESCE(artifacts.evidence_count, 0) AS evidence_count,
380
+ SUM(a.attributed_token_active_ms) AS total_duration_ms,
381
+ COUNT(a.attributed_token_active_ms) AS duration_covered_runs,
382
+ SUM(a.source_event_count) AS source_event_count,
383
+ SUM(a.total_tokens) AS total_tokens, SUM(a.cost_usd) AS total_cost_usd, SUM(a.cost_brl) AS total_cost_brl,
384
+ COUNT(a.total_tokens) AS token_covered_runs, COUNT(a.cost_usd) AS usd_covered_runs, COUNT(a.cost_brl) AS brl_covered_runs,
385
+ COALESCE(completed.completed_task_count, 0) AS completed_task_count
386
+ FROM selected a
387
+ LEFT JOIN completed USING(developer_account_id)
388
+ LEFT JOIN artifacts USING(developer_account_id)
389
+ GROUP BY a.developer_account_id ORDER BY total_cost_brl DESC, account_id`)
390
+ .all(...values, from, from, to, to) as Array<Record<string, unknown>>;
391
+ // A delivery is factual only when the canonical Task points at the exact
392
+ // completed Run. Contributors are the distinct attributed GitHub accounts
393
+ // on that same Run; no timestamp, commit, or deployment inference enters.
394
+ const delivered = context.database
395
+ .prepare(`
396
+ WITH selected AS (SELECT * FROM zaip_vw_activities a WHERE ${where})
397
+ SELECT selected.developer_account_id AS delivered_by_account_id, w.id, w.title, w.status, w.completed_run_id,
398
+ GROUP_CONCAT(DISTINCT contributor.developer_account_id || char(31) || COALESCE(contributor.developer_login, '')) AS contributor_pairs
399
+ FROM zaip_vw_canonical_work_items w
400
+ JOIN selected ON selected.run_id=w.completed_run_id
401
+ LEFT JOIN zaip_vw_activities contributor ON contributor.task_id=w.id
402
+ AND contributor.developer_account_id IS NOT NULL
403
+ WHERE w.entity_kind='task' AND w.status='completed'
404
+ GROUP BY selected.developer_account_id, w.id, w.title, w.status, w.completed_run_id
405
+ ORDER BY w.id`)
406
+ .all(...values) as Array<Record<string, unknown>>;
407
+ const deliveriesByAccount = new Map<string, Array<Record<string, unknown>>>();
408
+ for (const task of delivered) {
409
+ const accountId = String(task.delivered_by_account_id);
410
+ const list = deliveriesByAccount.get(accountId) ?? [];
411
+ list.push({
412
+ id: task.id,
413
+ title: task.title,
414
+ status: task.status,
415
+ completed_run_id: task.completed_run_id,
416
+ delivered_by: { account_id: accountId },
417
+ contributors: String(task.contributor_pairs ?? "")
418
+ .split(",")
419
+ .filter(Boolean)
420
+ .map((pair) => {
421
+ const [account_id, login_snapshot] = pair.split(String.fromCharCode(31));
422
+ return { account_id, login_snapshot: login_snapshot || null };
423
+ }),
424
+ });
425
+ deliveriesByAccount.set(accountId, list);
426
+ }
427
+ const qualificationForSource: Record<
428
+ string,
429
+ "verified" | "cached_fallback" | "human_assigned" | "mixed"
430
+ > = {
431
+ verified_local_account: "verified",
432
+ cached_fallback: "cached_fallback",
433
+ human_assigned: "human_assigned",
434
+ mixed: "mixed",
435
+ };
436
+ for (const row of rows) {
437
+ row.completed_tasks = deliveriesByAccount.get(String(row.account_id)) ?? [];
438
+ row.qualification = qualificationForSource[String(row.attribution_source)] ?? "unqualified";
439
+ }
440
+ return {
441
+ data_source: "sqlite_read_model" as const,
442
+ filters: { from, to, account_ids: filter.accountIds ?? [] },
443
+ rows,
444
+ totals: {
445
+ run_count: rows.reduce((sum, row) => sum + Number(row.run_count ?? 0), 0),
446
+ completed_task_count: rows.reduce(
447
+ (sum, row) => sum + Number(row.completed_task_count ?? 0),
448
+ 0,
449
+ ),
450
+ total_cost_usd: sumKnownDeveloperMetric(rows, "total_cost_usd"),
451
+ total_cost_brl: sumKnownDeveloperMetric(rows, "total_cost_brl"),
452
+ },
453
+ };
454
+ }
455
+ export function queryOperationsDeveloperAggregate(
456
+ context: SqliteQueryContext,
457
+ filter: {
458
+ from: string | null;
459
+ to: string | null;
460
+ accountIds?: readonly string[];
461
+ },
462
+ ) {
463
+ const from = costMonitorFilterDay(filter.from);
464
+ const to = costMonitorFilterDay(filter.to);
465
+ const clauses = [
466
+ "a.developer_account_id IS NOT NULL",
467
+ "(? IS NULL OR a.occurred_day_sp >= ?)",
468
+ "(? IS NULL OR a.occurred_day_sp <= ?)",
469
+ ];
470
+ const values: Array<string | null> = [from, from, to, to];
471
+ if (filter.accountIds !== undefined && filter.accountIds.length > 0) {
472
+ clauses.push(`a.developer_account_id IN (${filter.accountIds.map(() => "?").join(",")})`);
473
+ values.push(...filter.accountIds);
474
+ }
475
+ const where = clauses.join(" AND ");
476
+ const rows = context.database
477
+ .prepare(`
478
+ WITH selected AS (SELECT * FROM zaip_vw_activities a WHERE ${where}),
479
+ developer_tasks AS (
480
+ SELECT DISTINCT developer_account_id AS account_id, task_id
481
+ FROM selected WHERE task_id IS NOT NULL
482
+ ), canonical_task_facts AS (
483
+ SELECT developer_tasks.account_id, work.status, work.entity_kind, work.risk
484
+ FROM developer_tasks JOIN zaip_vw_canonical_work_items work
485
+ ON work.entity_kind='task' AND work.id=developer_tasks.task_id
486
+ ), status_counts AS (
487
+ SELECT account_id, json_group_object(status, task_count) AS status_counts_json
488
+ FROM (SELECT account_id, status, COUNT(*) AS task_count FROM canonical_task_facts
489
+ WHERE status IS NOT NULL GROUP BY account_id, status) GROUP BY account_id
490
+ ), type_counts AS (
491
+ SELECT account_id, json_group_object(entity_kind, task_count) AS type_counts_json
492
+ FROM (SELECT account_id, entity_kind, COUNT(*) AS task_count FROM canonical_task_facts
493
+ WHERE entity_kind IS NOT NULL GROUP BY account_id, entity_kind) GROUP BY account_id
494
+ ), risk_counts AS (
495
+ SELECT account_id, json_group_object(risk, task_count) AS risk_counts_json
496
+ FROM (SELECT account_id, risk, COUNT(*) AS task_count FROM canonical_task_facts
497
+ WHERE risk IS NOT NULL GROUP BY account_id, risk) GROUP BY account_id
498
+ ), completed AS (
499
+ SELECT account_id, COUNT(*) AS completed_task_count
500
+ FROM canonical_task_facts WHERE status='completed'
501
+ GROUP BY account_id
502
+ )
503
+ -- task_count is the distinct, observed Task-id population attributed
504
+ -- to this developer in the selected period. Canonical records do not
505
+ -- retain a creator identity, so this projection never infers one.
506
+ SELECT selected.developer_account_id AS account_id, MAX(selected.developer_login) AS login_snapshot,
507
+ COUNT(DISTINCT selected.task_id) AS task_count,
508
+ COALESCE(completed.completed_task_count, 0) AS completed_task_count,
509
+ SUM(selected.attributed_token_active_ms) AS total_duration_ms,
510
+ SUM(selected.total_tokens) AS total_tokens,
511
+ SUM(selected.cost_brl) AS total_cost_brl,
512
+ status_counts.status_counts_json, type_counts.type_counts_json, risk_counts.risk_counts_json
513
+ FROM selected
514
+ LEFT JOIN completed ON completed.account_id=selected.developer_account_id
515
+ LEFT JOIN status_counts ON status_counts.account_id=selected.developer_account_id
516
+ LEFT JOIN type_counts ON type_counts.account_id=selected.developer_account_id
517
+ LEFT JOIN risk_counts ON risk_counts.account_id=selected.developer_account_id
518
+ GROUP BY selected.developer_account_id
519
+ ORDER BY total_cost_brl DESC, account_id`)
520
+ .all(...values) as Array<Record<string, unknown>>;
521
+ const distribution = (value: unknown): Record<string, number> | null => {
522
+ if (typeof value !== "string") return null;
523
+ try {
524
+ const parsed = JSON.parse(value) as Record<string, unknown>;
525
+ return Object.fromEntries(
526
+ Object.entries(parsed).flatMap(([key, count]) =>
527
+ typeof count === "number" && Number.isFinite(count) ? [[key, count]] : [],
528
+ ),
529
+ );
530
+ } catch {
531
+ return null;
532
+ }
533
+ };
534
+ for (const row of rows) {
535
+ row.status_counts = distribution(row.status_counts_json);
536
+ row.type_counts = distribution(row.type_counts_json);
537
+ row.risk_counts = distribution(row.risk_counts_json);
538
+ delete row.status_counts_json;
539
+ delete row.type_counts_json;
540
+ delete row.risk_counts_json;
541
+ }
542
+ return {
543
+ data_source: "sqlite_read_model" as const,
544
+ filters: { from, to, account_ids: filter.accountIds ?? [] },
545
+ rows,
546
+ };
547
+ }