@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,762 @@
1
+ import { DatabaseSync } from "node:sqlite";
2
+ import { WorkspaceFileSystem } from "@zaip-ai/core";
3
+ import type { CostSummarySource } from "@zaip-ai/dashboard-cost-monitor/server";
4
+ import { attachAgentProductivity } from "./sqlite-agent-productivity.js";
5
+ import {
6
+ readFirstFoldAllTime,
7
+ readFirstFoldBoardAllTime,
8
+ readFirstFoldMonthlyQuick,
9
+ readFirstFoldTopTasksAllTime,
10
+ readFirstFoldViewport,
11
+ } from "./sqlite-first-fold-cache.js";
12
+ import { operationsWorkListSqlRows } from "./sqlite-operations-work-list.js";
13
+ import type { SqliteQueryContext } from "./sqlite-query-context.js";
14
+ import {
15
+ queryActivityCostRows,
16
+ queryCostMonitorFactualDurationByDay,
17
+ queryCostMonitorFinancialActivityRows,
18
+ queryDeveloperCostAggregate,
19
+ queryInvocationCostRows,
20
+ queryInvocationTotals,
21
+ queryOperationsDeveloperAggregate,
22
+ } from "./sqlite-query-financial.js";
23
+ import { queryCostMonitorSummaryAggregate } from "./sqlite-query-summary.js";
24
+ import {
25
+ queryCanonicalRunCountByDay,
26
+ queryDailyPeriods,
27
+ queryExecutionDurationByDay,
28
+ queryFirstFoldAggregate,
29
+ queryOverviewPage,
30
+ queryTopTasks,
31
+ } from "./sqlite-query-timing.js";
32
+ import { queryUncachedViewPage } from "./sqlite-query-view-page.js";
33
+ import type {
34
+ SqliteFirstFoldAllTime,
35
+ SqliteFirstFoldAllTimeBoard,
36
+ SqliteFirstFoldMonthlyQuick,
37
+ } from "./sqlite-read-model-first-fold-types.js";
38
+ import { dbRelativePath, sqliteReadModelPath } from "./sqlite-read-model-schema.js";
39
+ import {
40
+ type SqliteFirstFoldAggregate,
41
+ type SqliteFirstFoldViewport,
42
+ type SqliteSummaryKind,
43
+ type SqliteSummaryPage,
44
+ type SqliteViewName,
45
+ sqliteViewMetadata,
46
+ } from "./sqlite-read-model-types.js";
47
+ import { installLegacyViewAliases } from "./sqlite-snapshot-cache.js";
48
+ export class SqliteReadModelFileSystem extends WorkspaceFileSystem {
49
+ private readonly executionDurationCache = new Map<string, Map<string, number>>();
50
+ private dailyAggregateRowsCache: Array<Record<string, number | string | null>> | null = null;
51
+ private firstFoldAllTimeCache: SqliteFirstFoldAllTime | null = null;
52
+ private firstFoldAllTimeBoardCache: SqliteFirstFoldAllTimeBoard | null = null;
53
+ private firstFoldTopTasksAllTimeCache: SqliteFirstFoldAllTime["top_tasks"] | null = null;
54
+ private firstFoldViewportCache: SqliteFirstFoldViewport | null = null;
55
+ private firstFoldMonthlyQuickCache: SqliteFirstFoldMonthlyQuick | null | undefined = undefined;
56
+ private firstFoldViewportTimings: Record<string, number> = {};
57
+ private metadataValues: Map<string, string> | null = null;
58
+ private readonly unfilteredViewPageCache = new Map<string, Array<Record<string, unknown>>>();
59
+ private readonly technicalPayloadRowsCache = new Map<string, Array<Record<string, unknown>>>();
60
+ private readonly viewPageResultCache = new Map<string, Record<string, unknown>>();
61
+ // Summary cards and temporal Cost tables consume the same aggregate. Keep
62
+ // exact filter results inside the immutable generation so a tab switch does
63
+ // not repeat its multi-second SQL scan.
64
+ private readonly costMonitorSummaryCache = new Map<string, CostSummarySource>();
65
+
66
+ canonicalSource(): ".agents/data" | ".agents/records" {
67
+ const current = this.database
68
+ .prepare("SELECT 1 FROM files WHERE path LIKE '.agents/data/%' LIMIT 1")
69
+ .get();
70
+ return current === undefined ? ".agents/records" : ".agents/data";
71
+ }
72
+ private dailyAggregateRows(): Array<Record<string, number | string | null>> {
73
+ if (this.dailyAggregateRowsCache === null) {
74
+ this.dailyAggregateRowsCache = this.database
75
+ .prepare("SELECT * FROM daily_aggregate_cache ORDER BY day")
76
+ .all() as Array<Record<string, number | string | null>>;
77
+ }
78
+ return this.dailyAggregateRowsCache;
79
+ }
80
+
81
+ private unfilteredViewRows(view: SqliteViewName): Array<Record<string, unknown>> {
82
+ const cached = this.unfilteredViewPageCache.get(view);
83
+ if (cached !== undefined) return cached;
84
+ const order = sqliteViewMetadata[view].order;
85
+ const rows = this.database.prepare(`SELECT * FROM ${view} ORDER BY ${order}`).all() as Array<
86
+ Record<string, unknown>
87
+ >;
88
+ this.unfilteredViewPageCache.set(view, rows);
89
+ return rows;
90
+ }
91
+
92
+ private technicalPayloadRows(payloadType: string): Array<Record<string, unknown>> {
93
+ const cached = this.technicalPayloadRowsCache.get(payloadType);
94
+ if (cached !== undefined) return cached;
95
+ const rows = (
96
+ this.database
97
+ .prepare("SELECT payload_json FROM zaip_aios_activities WHERE payload_type=?")
98
+ .all(payloadType) as Array<{ payload_json: string }>
99
+ ).flatMap(({ payload_json }) => {
100
+ try {
101
+ const parsed = JSON.parse(payload_json) as unknown;
102
+ return parsed !== null && typeof parsed === "object" && !Array.isArray(parsed)
103
+ ? [parsed as Record<string, unknown>]
104
+ : [];
105
+ } catch {
106
+ return [];
107
+ }
108
+ });
109
+ this.technicalPayloadRowsCache.set(payloadType, rows);
110
+ return rows;
111
+ }
112
+ private database: DatabaseSync;
113
+ private readonly ownsDatabase: boolean;
114
+
115
+ constructor(root: string, database?: DatabaseSync) {
116
+ super(root);
117
+ this.ownsDatabase = database === undefined;
118
+ this.database = database ?? new DatabaseSync(sqliteReadModelPath(root), { readOnly: true });
119
+ // The aliases are TEMP views on this connection. The rebuilding writer
120
+ // needs them too because first-fold readers deliberately query through
121
+ // the same uncommitted transaction.
122
+ installLegacyViewAliases(this.database);
123
+ }
124
+
125
+ override async exists(path: string): Promise<boolean> {
126
+ const exact = this.database.prepare("SELECT 1 FROM files WHERE path = ? LIMIT 1").get(path);
127
+ const child = this.database
128
+ .prepare("SELECT 1 FROM files WHERE path LIKE ? LIMIT 1")
129
+ .get(`${path.replace(/\/$/, "")}/%`);
130
+ return exact !== undefined || child !== undefined;
131
+ }
132
+
133
+ override async readText(path: string): Promise<string> {
134
+ const row = this.database.prepare("SELECT content FROM files WHERE path = ?").get(path) as
135
+ | { content?: string }
136
+ | undefined;
137
+ if (row?.content === undefined)
138
+ throw Object.assign(new Error(`SQLite read model is missing ${path}`), { code: "ENOENT" });
139
+ return row.content;
140
+ }
141
+
142
+ override async readBytes(path: string): Promise<Buffer> {
143
+ return Buffer.from(await this.readText(path), "utf8");
144
+ }
145
+
146
+ override async readTextFrom(
147
+ path: string,
148
+ offset: number,
149
+ ): Promise<{ content: string; nextOffset: number }> {
150
+ const content = await this.readText(path);
151
+ const bytes = Buffer.from(content, "utf8");
152
+ return {
153
+ content: bytes.subarray(Math.min(offset, bytes.byteLength)).toString("utf8"),
154
+ nextOffset: bytes.byteLength,
155
+ };
156
+ }
157
+
158
+ override async listFiles(path: string, suffix = ""): Promise<readonly string[]> {
159
+ const prefix = `${path.replace(/\/$/, "")}/%`;
160
+ const rows = this.database
161
+ .prepare("SELECT path FROM files WHERE path LIKE ? ORDER BY path")
162
+ .all(prefix) as Array<{ path: string }>;
163
+ return rows.map((row) => row.path).filter((candidate) => candidate.endsWith(suffix));
164
+ }
165
+
166
+ override async listDirectories(path: string): Promise<readonly string[]> {
167
+ const prefix = `${path.replace(/\/$/, "")}/`;
168
+ const rows = this.database
169
+ .prepare("SELECT path FROM files WHERE path LIKE ?")
170
+ .all(`${prefix}%`) as Array<{ path: string }>;
171
+ return [
172
+ ...new Set(
173
+ rows
174
+ .map((row) => row.path.slice(prefix.length).split("/")[0])
175
+ .filter(Boolean)
176
+ .map((name) => `${path.replace(/\/$/, "")}/${name}`),
177
+ ),
178
+ ].sort();
179
+ }
180
+
181
+ close(): void {
182
+ if (this.ownsDatabase) this.database.close();
183
+ }
184
+
185
+ private reopen(): void {
186
+ this.database = new DatabaseSync(sqliteReadModelPath(this.root), { readOnly: true });
187
+ installLegacyViewAliases(this.database);
188
+ this.executionDurationCache.clear();
189
+ this.dailyAggregateRowsCache = null;
190
+ this.firstFoldAllTimeCache = null;
191
+ this.firstFoldAllTimeBoardCache = null;
192
+ this.firstFoldTopTasksAllTimeCache = null;
193
+ this.firstFoldViewportCache = null;
194
+ this.firstFoldMonthlyQuickCache = undefined;
195
+ this.firstFoldViewportTimings = {};
196
+ this.metadataValues = null;
197
+ // Public pages belong to the opened immutable SQLite generation. Never
198
+ // carry them across refresh/rebuild, even when this filesystem instance is
199
+ // reused by the launcher.
200
+ this.unfilteredViewPageCache.clear();
201
+ this.technicalPayloadRowsCache.clear();
202
+ this.costMonitorSummaryCache.clear();
203
+ this.viewPageResultCache.clear();
204
+ }
205
+
206
+ /** Reopen after an external atomic canonical read-model rebuild. */
207
+ refresh(): void {
208
+ this.database.close();
209
+ this.reopen();
210
+ }
211
+
212
+ /**
213
+ * Release the Windows read-only handle before replacing the generation.
214
+ * The prior snapshot is reopened when rebuilding fails, preserving a usable
215
+ * read model and surfacing the original rebuild error to the caller.
216
+ */
217
+ async rebuildAndRefresh(rebuild: () => Promise<unknown>): Promise<void> {
218
+ this.database.close();
219
+ try {
220
+ await rebuild();
221
+ } finally {
222
+ this.reopen();
223
+ }
224
+ // A successful refresh must leave the precise public Cost Monitor view
225
+ // usable before the server builds its response snapshot.
226
+ this.viewPage("cost_monitor_daily", { limit: 1, offset: 0 });
227
+ }
228
+
229
+ /**
230
+ * Wall-clock execution duration by Sao Paulo day. Root Runs define the
231
+ * execution envelope; child Runs are intentionally excluded because their
232
+ * time is already contained by the root. Concurrent roots are merged so the
233
+ * same clock interval is never counted twice.
234
+ */
235
+ executionDurationByDay(
236
+ filter: {
237
+ from: string | null;
238
+ to: string | null;
239
+ providers?: readonly string[];
240
+ models?: readonly string[];
241
+ agents?: readonly string[];
242
+ phases?: readonly string[];
243
+ statuses?: readonly string[];
244
+ },
245
+ taskId: string | null = null,
246
+ ): Map<string, number> {
247
+ return queryExecutionDurationByDay(this.queryContext(), filter, taskId);
248
+ }
249
+
250
+ canonicalRunCountByDay(filter: {
251
+ from: string | null;
252
+ to: string | null;
253
+ providers?: readonly string[];
254
+ models?: readonly string[];
255
+ agents?: readonly string[];
256
+ phases?: readonly string[];
257
+ statuses?: readonly string[];
258
+ }): Map<string, number> {
259
+ return queryCanonicalRunCountByDay(this.queryContext(), filter);
260
+ }
261
+
262
+ dailyPeriods(filter: { from: string | null; to: string | null }) {
263
+ return queryDailyPeriods(this.queryContext(), filter);
264
+ }
265
+
266
+ /** SQL-backed first-fold aggregate. SQLite SUM excludes unknown null facts. */
267
+ firstFoldAggregate(filter: { from: string | null; to: string | null }): SqliteFirstFoldAggregate {
268
+ return queryFirstFoldAggregate(this.queryContext(), filter);
269
+ }
270
+
271
+ /**
272
+ * Returns the materialized default-month inputs when they remain complete.
273
+ * A later month with no facts in this immutable generation is also an exact
274
+ * empty result; every month that may contain a fact continues through SQL.
275
+ */
276
+ firstFoldMonthlyQuick(filter: {
277
+ from: string | null;
278
+ to: string | null;
279
+ }): SqliteFirstFoldMonthlyQuick | null {
280
+ const read = readFirstFoldMonthlyQuick(this.database, this.firstFoldMonthlyQuickCache, filter);
281
+ this.firstFoldMonthlyQuickCache = read.cache;
282
+ return read.result;
283
+ }
284
+
285
+ firstFoldRelevantLatestDay(): string | null {
286
+ const row = this.database
287
+ .prepare(`SELECT MAX(day) AS day FROM (
288
+ SELECT occurred_day_sp AS day FROM activities
289
+ UNION ALL SELECT occurred_day_sp AS day FROM canonical_work_items
290
+ UNION ALL SELECT occurred_day_sp AS day FROM canonical_artifacts
291
+ UNION ALL SELECT occurred_day_sp AS day FROM canonical_run_index
292
+ UNION ALL SELECT occurred_day_sp AS day FROM attributed_token_active_facts
293
+ )`)
294
+ .get() as { day?: string | null };
295
+ return typeof row.day === "string" ? row.day : null;
296
+ }
297
+
298
+ firstFoldAllTime(): SqliteFirstFoldAllTime {
299
+ if (this.firstFoldAllTimeCache !== null) return this.firstFoldAllTimeCache;
300
+ this.firstFoldAllTimeCache = readFirstFoldAllTime(
301
+ this.database,
302
+ () => this.dailyAggregateRows().length,
303
+ this.firstFoldViewportAllTime(),
304
+ );
305
+ return this.firstFoldAllTimeCache;
306
+ }
307
+
308
+ firstFoldBoardAllTime(): SqliteFirstFoldAllTimeBoard {
309
+ if (this.firstFoldAllTimeBoardCache !== null) return this.firstFoldAllTimeBoardCache;
310
+ this.firstFoldAllTimeBoardCache = readFirstFoldBoardAllTime(this.database, () => {
311
+ const rows = operationsWorkListSqlRows(this.database);
312
+ return {
313
+ pages: {
314
+ task: rows.filter((row) => row.kind === "task" || row.kind === "standalone-task"),
315
+ spec: rows.filter((row) => row.kind === "spec"),
316
+ prd: rows.filter((row) => row.kind === "prd"),
317
+ },
318
+ };
319
+ });
320
+ return this.firstFoldAllTimeBoardCache;
321
+ }
322
+
323
+ firstFoldTopTasksAllTime(): SqliteFirstFoldAllTime["top_tasks"] {
324
+ if (this.firstFoldTopTasksAllTimeCache !== null) return this.firstFoldTopTasksAllTimeCache;
325
+ this.firstFoldTopTasksAllTimeCache = readFirstFoldTopTasksAllTime(this.database);
326
+ return this.firstFoldTopTasksAllTimeCache;
327
+ }
328
+
329
+ firstFoldViewportAllTime(): SqliteFirstFoldViewport {
330
+ if (this.firstFoldViewportCache !== null) return this.firstFoldViewportCache;
331
+ this.firstFoldViewportCache = readFirstFoldViewport(
332
+ this.database,
333
+ this.firstFoldViewportTimings,
334
+ );
335
+ return this.firstFoldViewportCache;
336
+ }
337
+
338
+ firstFoldViewportProfile(): Readonly<Record<string, number>> {
339
+ return this.firstFoldViewportTimings;
340
+ }
341
+
342
+ /** Top tasks from canonical activities, limited by the caller for first paint. */
343
+ topTasks(filter: { from: string | null; to: string | null }, limit = 5) {
344
+ return queryTopTasks(this.queryContext(), filter, limit);
345
+ }
346
+
347
+ canonicalTraceFiles(
348
+ markers: readonly string[],
349
+ maxContentLength?: number,
350
+ ): Array<{ path: string; content: string }> {
351
+ const selected = [...new Set(markers.filter(Boolean))];
352
+ if (selected.length === 0) return [];
353
+ if (
354
+ maxContentLength !== undefined &&
355
+ (!Number.isSafeInteger(maxContentLength) || maxContentLength < 0)
356
+ )
357
+ throw new Error("Invalid trace content bound");
358
+ const clauses = selected.map(() => "content LIKE ?").join(" OR ");
359
+ // SQL counts code points while the caller retains its UTF-16 length check.
360
+ // This conservative prefilter never excludes an otherwise admissible file.
361
+ const bound = maxContentLength === undefined ? "" : " AND length(content) <= ?";
362
+ return this.database
363
+ .prepare(`SELECT path, content FROM files
364
+ WHERE (path LIKE '.agents/data/%' OR path LIKE '.agents/records/%')${bound} AND (${clauses}) ORDER BY path`)
365
+ .all(
366
+ ...(maxContentLength === undefined ? [] : [maxContentLength]),
367
+ ...selected.map((marker) => `%${marker}%`),
368
+ ) as Array<{
369
+ path: string;
370
+ content: string;
371
+ }>;
372
+ }
373
+
374
+ taskTraceUsage(taskId: string) {
375
+ const runs = this.database
376
+ .prepare(`SELECT run_id, run_role, phase, duration_ms FROM canonical_run_index
377
+ WHERE task_id = ?`)
378
+ .all(taskId) as Array<{
379
+ run_id: string;
380
+ run_role: string;
381
+ phase: string | null;
382
+ duration_ms: number | null;
383
+ }>;
384
+ const financial = this.database
385
+ .prepare(`SELECT run_id, total_tokens, cost_brl FROM activities WHERE task_id = ?`)
386
+ .all(taskId) as Array<{
387
+ run_id: string;
388
+ total_tokens: number | null;
389
+ cost_brl: number | null;
390
+ }>;
391
+ const knownDurationRuns = runs.filter(
392
+ (run) =>
393
+ run.run_role === "root" && run.phase === "execution" && typeof run.duration_ms === "number",
394
+ ).length;
395
+ const durationByDay = this.executionDurationByDay({ from: null, to: null }, taskId);
396
+ const duration =
397
+ durationByDay.size === 0
398
+ ? null
399
+ : [...durationByDay.values()].reduce((sum, value) => sum + value, 0);
400
+ const knownTokens = financial.filter((row) => typeof row.total_tokens === "number");
401
+ const knownCosts = financial.filter((row) => typeof row.cost_brl === "number");
402
+ const metric = (value: number | null, known: number) => ({
403
+ value,
404
+ known_runs: known,
405
+ unknown_runs: Math.max(0, runs.length - known),
406
+ coverage_ratio: runs.length === 0 ? 1 : known / runs.length,
407
+ });
408
+ return {
409
+ run_count: runs.length,
410
+ duration_ms: metric(duration, knownDurationRuns),
411
+ total_tokens: metric(
412
+ knownTokens.length === 0
413
+ ? null
414
+ : knownTokens.reduce((sum, row) => sum + Number(row.total_tokens), 0),
415
+ knownTokens.length,
416
+ ),
417
+ cost: {
418
+ ...metric(
419
+ knownCosts.length === 0
420
+ ? null
421
+ : knownCosts.reduce((sum, row) => sum + Number(row.cost_brl), 0),
422
+ knownCosts.length,
423
+ ),
424
+ currency: knownCosts.length === 0 ? null : ("BRL" as const),
425
+ },
426
+ };
427
+ }
428
+
429
+ /** Cost Monitor agent population: canonical Agent Runs filtered by São Paulo calendar day. */
430
+ invocationTotals(filter: { from: string | null; to: string | null }): {
431
+ invocation_count: number;
432
+ llm_call_count: number | null;
433
+ total_tokens: number | null;
434
+ cost_usd: number | null;
435
+ cost_brl: number | null;
436
+ } {
437
+ return queryInvocationTotals(this.queryContext(), filter);
438
+ }
439
+
440
+ invocationCostRows(filter: {
441
+ from: string | null;
442
+ to: string | null;
443
+ providers?: readonly string[];
444
+ models?: readonly string[];
445
+ agents?: readonly string[];
446
+ phases?: readonly string[];
447
+ statuses?: readonly string[];
448
+ tasks?: readonly string[];
449
+ specs?: readonly string[];
450
+ prds?: readonly string[];
451
+ executions?: readonly string[];
452
+ changes?: readonly string[];
453
+ }) {
454
+ return queryInvocationCostRows(this.queryContext(), filter);
455
+ }
456
+
457
+ /**
458
+ * Attributed active-time facts for exactly the Cost Monitor financial
459
+ * population. This deliberately reads the same activity x Sao Paulo day
460
+ * fact used by Operations: recomputing a union from raw source intervals
461
+ * made the two surfaces disagree whenever sessions overlapped.
462
+ */
463
+ costMonitorFactualDurationByDay(
464
+ filter: Parameters<SqliteReadModelFileSystem["invocationCostRows"]>[0],
465
+ financialRows: readonly Record<string, unknown>[] = this.costMonitorFinancialActivityRows(
466
+ filter,
467
+ ),
468
+ ): Map<string, { known_sum: number; eligible_runs: number; known_runs: number }> {
469
+ return queryCostMonitorFactualDurationByDay(this.queryContext(), filter, financialRows);
470
+ }
471
+
472
+ /** Complete canonical Run population for global Cost Monitor aggregates. */
473
+ activityCostRows(filter: {
474
+ from: string | null;
475
+ to: string | null;
476
+ providers?: readonly string[];
477
+ models?: readonly string[];
478
+ agents?: readonly string[];
479
+ phases?: readonly string[];
480
+ statuses?: readonly string[];
481
+ tasks?: readonly string[];
482
+ specs?: readonly string[];
483
+ prds?: readonly string[];
484
+ executions?: readonly string[];
485
+ changes?: readonly string[];
486
+ }) {
487
+ return queryActivityCostRows(this.queryContext(), filter);
488
+ }
489
+
490
+ /** Cost Monitor's historical financial population, independent of Agent-only views. */
491
+ costMonitorFinancialActivityRows(
492
+ filter: Parameters<SqliteReadModelFileSystem["activityCostRows"]>[0],
493
+ ) {
494
+ return queryCostMonitorFinancialActivityRows(this.queryContext(), filter);
495
+ }
496
+
497
+ /**
498
+ * Aggregate-only Cost Monitor source. The SQL result is bounded to one row
499
+ * per selected day plus conversation/planning/execution and total rows; no
500
+ * activity-shaped record is returned to the server or serialized to HTTP.
501
+ */
502
+ developerCostAggregate(filter: {
503
+ from: string | null;
504
+ to: string | null;
505
+ accountIds?: readonly string[];
506
+ }) {
507
+ return queryDeveloperCostAggregate(this.queryContext(), filter);
508
+ }
509
+
510
+ /**
511
+ * Operations-only developer projection. It deliberately keeps the Cost
512
+ * Monitor aggregate unchanged: status, kind and risk are derived solely
513
+ * from canonical Task records linked to the developer's observed Task ids.
514
+ */
515
+ operationsDeveloperAggregate(filter: {
516
+ from: string | null;
517
+ to: string | null;
518
+ accountIds?: readonly string[];
519
+ }) {
520
+ return queryOperationsDeveloperAggregate(this.queryContext(), filter);
521
+ }
522
+
523
+ costMonitorSummaryAggregate(
524
+ filter: Parameters<SqliteReadModelFileSystem["activityCostRows"]>[0],
525
+ ): CostSummarySource {
526
+ return queryCostMonitorSummaryAggregate(this.queryContext(), filter);
527
+ }
528
+
529
+ /** Keyset cursor or LIMIT/OFFSET pagination for materialized work summaries. */
530
+ summaryPage(
531
+ kind: SqliteSummaryKind,
532
+ filter: {
533
+ from: string | null;
534
+ to: string | null;
535
+ status?: string;
536
+ risk?: string;
537
+ query?: string;
538
+ },
539
+ offset: number,
540
+ limit: number,
541
+ cursor: string | null = null,
542
+ ): SqliteSummaryPage {
543
+ // Entity summaries retain activity-derived historical coverage. Kanban is
544
+ // deliberately stricter and lists only canonical lifecycle records.
545
+ const table = "operations_work_summary";
546
+ const from = filter.from?.slice(0, 10) ?? null;
547
+ const to = filter.to?.slice(0, 10) ?? null;
548
+ const cursorValue = parseSummaryCursor(cursor);
549
+ const clauses = [
550
+ "entity_kind = ?",
551
+ "(? IS NULL OR occurred_day_sp >= ?)",
552
+ "(? IS NULL OR occurred_day_sp <= ?)",
553
+ ];
554
+ const values: Array<string | number | null> = [kind, from, from, to, to];
555
+ if (filter.status) {
556
+ clauses.push("status = ?");
557
+ values.push(filter.status);
558
+ }
559
+ if (filter.risk) {
560
+ clauses.push("risk = ?");
561
+ values.push(filter.risk);
562
+ }
563
+ if (filter.query) {
564
+ clauses.push("(id LIKE ? OR title LIKE ?)");
565
+ values.push(`%${filter.query}%`, `%${filter.query}%`);
566
+ }
567
+ const baseWhere = clauses.join(" AND ");
568
+ const baseValues = [...values];
569
+ if (cursorValue !== null) {
570
+ clauses.push("(occurred_at < ? OR (occurred_at = ? AND id < ?))");
571
+ values.push(cursorValue[0], cursorValue[0], cursorValue[1]);
572
+ }
573
+ const where = clauses.join(" AND ");
574
+ const total = Number(
575
+ (
576
+ this.database
577
+ .prepare(`SELECT COUNT(*) AS count FROM ${table} WHERE ${baseWhere}`)
578
+ .get(...baseValues) as { count: number }
579
+ ).count,
580
+ );
581
+ const pageOffset = cursorValue === null ? offset : 0;
582
+ const rows = this.database
583
+ .prepare(
584
+ `SELECT id, title, status, risk, occurred_at, occurred_day_sp,
585
+ invocation_count, llm_call_count, total_duration, total_tokens, total_cost_usd, total_cost_brl
586
+ FROM ${table} WHERE ${where} ORDER BY occurred_at DESC, id DESC LIMIT ? OFFSET ?`,
587
+ )
588
+ .all(...values, limit, pageOffset) as Array<Record<string, unknown>>;
589
+ const last = rows.at(-1);
590
+ return {
591
+ data_source: "sqlite_read_model",
592
+ kind,
593
+ offset: pageOffset,
594
+ limit,
595
+ total,
596
+ has_more: rows.length === limit && (cursorValue !== null || pageOffset + rows.length < total),
597
+ next_cursor:
598
+ last === undefined || rows.length < limit
599
+ ? null
600
+ : encodeSummaryCursor(String(last.occurred_at), String(last.id)),
601
+ rows,
602
+ };
603
+ }
604
+
605
+ /** Canonical page for the Board: keeps telemetry-only historical rows out. */
606
+ canonicalWorkPage(
607
+ kind: SqliteSummaryKind,
608
+ filter: { from: string | null; to: string | null },
609
+ offset: number,
610
+ limit: number,
611
+ ) {
612
+ return this.viewPage("operations_work_list", {
613
+ ...filter,
614
+ kind: kind === "task" ? "all-tasks" : kind,
615
+ offset,
616
+ limit,
617
+ });
618
+ }
619
+
620
+ overviewPage(period: "day" | "month" | "year", offset: number, limit: number) {
621
+ return queryOverviewPage(this.queryContext(), period, offset, limit);
622
+ }
623
+
624
+ viewPage(
625
+ view: SqliteViewName,
626
+ input: {
627
+ from?: string | null;
628
+ to?: string | null;
629
+ query?: string;
630
+ status?: string;
631
+ risk?: string;
632
+ provider?: string;
633
+ model?: string;
634
+ agent?: string;
635
+ phase?: string;
636
+ origin?: string;
637
+ workType?: string;
638
+ priority?: string;
639
+ kind?: "all" | "all-tasks" | "task" | "standalone-task" | "prd" | "spec";
640
+ offset?: number;
641
+ limit?: number;
642
+ },
643
+ ): ReturnType<SqliteReadModelFileSystem["uncachedViewPage"]> {
644
+ const key = `${view}:${JSON.stringify(input)}`;
645
+ const cached = this.viewPageResultCache.get(key);
646
+ if (cached !== undefined)
647
+ return structuredClone(cached) as ReturnType<SqliteReadModelFileSystem["uncachedViewPage"]>;
648
+ const result = this.uncachedViewPage(view, input);
649
+ if (view === "cost_monitor_zaip_agents") attachAgentProductivity(this.database, input, result);
650
+ if (this.viewPageResultCache.size >= 256) {
651
+ const oldest = this.viewPageResultCache.keys().next().value as string | undefined;
652
+ if (oldest !== undefined) this.viewPageResultCache.delete(oldest);
653
+ }
654
+ this.viewPageResultCache.set(key, structuredClone(result) as Record<string, unknown>);
655
+ return result;
656
+ }
657
+
658
+ /** Paginated allowlisted SQL view reader. Views are never interpolated from user input. */
659
+ private uncachedViewPage(
660
+ view: SqliteViewName,
661
+ input: {
662
+ from?: string | null;
663
+ to?: string | null;
664
+ query?: string;
665
+ status?: string;
666
+ risk?: string;
667
+ provider?: string;
668
+ model?: string;
669
+ agent?: string;
670
+ phase?: string;
671
+ origin?: string;
672
+ workType?: string;
673
+ priority?: string;
674
+ kind?: "all" | "all-tasks" | "task" | "standalone-task" | "prd" | "spec";
675
+ offset?: number;
676
+ limit?: number;
677
+ },
678
+ ) {
679
+ return queryUncachedViewPage(this.queryContext(), view, input);
680
+ }
681
+
682
+ metadata(): {
683
+ storage_mode: "sqlite_read_model";
684
+ db_path: string;
685
+ source_file_count: number;
686
+ excluded_source_count: number;
687
+ daily_aggregate_count: number;
688
+ activity_count: number;
689
+ canonical_run_count: number;
690
+ agent_run_count: number;
691
+ telemetry_summary_count: number;
692
+ unassisted_activity_count: number;
693
+ } {
694
+ if (this.metadataValues === null) {
695
+ this.metadataValues = new Map(
696
+ (
697
+ this.database.prepare("SELECT key, value FROM read_model_metadata").all() as Array<{
698
+ key: string;
699
+ value: string;
700
+ }>
701
+ ).map((row) => [row.key, row.value]),
702
+ );
703
+ }
704
+ const value = (key: string) => Number(this.metadataValues?.get(key) ?? 0);
705
+ return {
706
+ storage_mode: "sqlite_read_model",
707
+ db_path: process.env.ZAIP_SQLITE_DB_PATH ? "session-specific" : dbRelativePath,
708
+ source_file_count: value("source_file_count"),
709
+ excluded_source_count: value("excluded_source_count"),
710
+ daily_aggregate_count: value("daily_aggregate_count"),
711
+ activity_count: value("activity_count"),
712
+ canonical_run_count: value("canonical_run_count"),
713
+ agent_run_count: value("agent_run_count"),
714
+ telemetry_summary_count: value("telemetry_summary_count"),
715
+ unassisted_activity_count: value("unassisted_activity_count"),
716
+ };
717
+ }
718
+
719
+ projectionUpdatedAt(): string | null {
720
+ if (this.metadataValues === null) this.metadata();
721
+ const value = this.metadataValues?.get("snapshot_updated_at") ?? null;
722
+ return value !== null && Number.isFinite(Date.parse(value)) ? value : null;
723
+ }
724
+
725
+ latestTokenCollectedAt(): string | null {
726
+ if (this.metadataValues === null) this.metadata();
727
+ const value = this.metadataValues?.get("latest_token_collected_at") ?? null;
728
+ return value !== null && Number.isFinite(Date.parse(value)) ? value : null;
729
+ }
730
+
731
+ private queryContext(): SqliteQueryContext {
732
+ return {
733
+ database: this.database,
734
+ executionDurationCache: this.executionDurationCache,
735
+ costMonitorSummaryCache: this.costMonitorSummaryCache,
736
+ executionDurationByDay: this.executionDurationByDay.bind(this),
737
+ costMonitorFinancialActivityRows: this.costMonitorFinancialActivityRows.bind(this),
738
+ costMonitorFactualDurationByDay: this.costMonitorFactualDurationByDay.bind(this),
739
+ costMonitorSummaryAggregate: this.costMonitorSummaryAggregate.bind(this),
740
+ firstFoldMonthlyQuick: this.firstFoldMonthlyQuick.bind(this),
741
+ dailyAggregateRows: this.dailyAggregateRows.bind(this),
742
+ technicalPayloadRows: this.technicalPayloadRows.bind(this),
743
+ unfilteredViewRows: this.unfilteredViewRows.bind(this),
744
+ };
745
+ }
746
+ }
747
+
748
+ function encodeSummaryCursor(occurredAt: string, id: string): string {
749
+ return encodeURIComponent(JSON.stringify([occurredAt, id]));
750
+ }
751
+
752
+ function parseSummaryCursor(cursor: string | null): [string, string] | null {
753
+ if (cursor === null) return null;
754
+ try {
755
+ const parsed = JSON.parse(decodeURIComponent(cursor));
756
+ return Array.isArray(parsed) && typeof parsed[0] === "string" && typeof parsed[1] === "string"
757
+ ? [parsed[0], parsed[1]]
758
+ : null;
759
+ } catch {
760
+ return null;
761
+ }
762
+ }