@zaip-ai/cli 2.2.0 → 2.6.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 (420) hide show
  1. package/dist/services/adapters.d.ts +1 -1
  2. package/dist/services/adapters.d.ts.map +1 -1
  3. package/dist/services/adapters.js +23 -9
  4. package/dist/services/adapters.js.map +1 -1
  5. package/dist/services/agent-adapters.js +25 -9
  6. package/dist/services/agent-adapters.js.map +1 -1
  7. package/dist/services/agent-discovery.d.ts +27 -0
  8. package/dist/services/agent-discovery.d.ts.map +1 -0
  9. package/dist/services/agent-discovery.js +73 -0
  10. package/dist/services/agent-discovery.js.map +1 -0
  11. package/dist/services/codex-conversation-lifecycle-hook.d.ts.map +1 -1
  12. package/dist/services/codex-conversation-lifecycle-hook.js +153 -24
  13. package/dist/services/codex-conversation-lifecycle-hook.js.map +1 -1
  14. package/dist/services/codex-pre-tool-hook-template.d.ts.map +1 -1
  15. package/dist/services/codex-pre-tool-hook-template.js +146 -72
  16. package/dist/services/codex-pre-tool-hook-template.js.map +1 -1
  17. package/dist/services/codex-rules.d.ts +1 -1
  18. package/dist/services/codex-rules.d.ts.map +1 -1
  19. package/dist/services/codex-rules.js +3 -3
  20. package/dist/services/codex-subagent-hook-template.d.ts +1 -1
  21. package/dist/services/codex-subagent-hook-template.d.ts.map +1 -1
  22. package/dist/services/codex-subagent-hook-template.js +117 -66
  23. package/dist/services/codex-subagent-hook-template.js.map +1 -1
  24. package/dist/services/install-agents-template.d.ts.map +1 -1
  25. package/dist/services/install-agents-template.js +56 -6
  26. package/dist/services/install-agents-template.js.map +1 -1
  27. package/dist/services/logger.js +1 -1
  28. package/dist/services/logger.js.map +1 -1
  29. package/dist/services/logger.test.js +22 -1
  30. package/dist/services/logger.test.js.map +1 -1
  31. package/dist/services/runtime-template.test.js +129 -0
  32. package/dist/services/runtime-template.test.js.map +1 -1
  33. package/package.json +1 -1
  34. package/templates/.agents/.env.example +9 -3
  35. package/templates/.agents/README-ENG.md +30 -5
  36. package/templates/.agents/README.md +30 -7
  37. package/templates/.agents/architecture/software-architecture.md +1 -59
  38. package/templates/.agents/branding/brandbook.md +3 -0
  39. package/templates/.agents/config/agents/catalog.yaml +22 -10
  40. package/templates/.agents/config/agents/discovery.json +319 -0
  41. package/templates/.agents/config/clients/codex/agents/zaip-agent-backend.toml +2 -2
  42. package/templates/.agents/config/clients/codex/agents/zaip-agent-builder.toml +2 -2
  43. package/templates/.agents/config/clients/codex/agents/zaip-agent-cloud-engineer.toml +11 -8
  44. package/templates/.agents/config/clients/codex/agents/zaip-agent-designer.toml +2 -2
  45. package/templates/.agents/config/clients/codex/agents/zaip-agent-frontend.toml +2 -2
  46. package/templates/.agents/config/clients/codex/agents/zaip-agent-task-executor.toml +2 -2
  47. package/templates/.agents/config/clients/codex/agents/zaip-agent-website-developer.toml +2 -2
  48. package/templates/.agents/config/pricing/models.json +9 -5
  49. package/templates/.agents/config/project.yaml +12 -1
  50. package/templates/.agents/dashboard/.zaip-managed.json +375 -95
  51. package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-CGxeQak4.js +1 -0
  52. package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-DaSllaJp.js → DashboardHelpDialog-tzS7YxYB.js} +57 -33
  53. package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-DEbCi1gP.js +1 -0
  54. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-1L7Qw-Gq.js +3 -0
  55. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-EInWr641.css +1 -0
  56. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-t1Om0Abw.js +1 -0
  57. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-B6aZfo5f.js +68 -0
  58. package/templates/.agents/dashboard/apps/frontend/dist/assets/{icons-vendor-TPUT2IUt.js → icons-vendor-DiGC-dsJ.js} +1 -1
  59. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-DgTmNHN5.js +2 -0
  60. package/templates/.agents/dashboard/apps/frontend/dist/assets/{react-vendor-Ct48XHGL.js → react-vendor-kPO6yNed.js} +1 -1
  61. package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-Bh1tDfsg.js +1 -0
  62. package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-DQpKX9c1.js +1 -0
  63. package/templates/.agents/dashboard/apps/frontend/dist/index.html +6 -6
  64. package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
  65. package/templates/.agents/dashboard/apps/frontend/src/App.tsx +3 -1264
  66. package/templates/.agents/dashboard/apps/frontend/src/AppDashboardContent.tsx +363 -0
  67. package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.dom.test.ts +99 -0
  68. package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +62 -6
  69. package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +3 -1
  70. package/templates/.agents/dashboard/apps/frontend/src/__tests__/app-composition-support.ts +7 -0
  71. package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +9 -7
  72. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api-settings.ts +151 -0
  73. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +28 -153
  74. package/templates/.agents/dashboard/apps/frontend/src/dashboard-app-shell.tsx +33 -0
  75. package/templates/.agents/dashboard/apps/frontend/src/dashboard-cost-facts.ts +30 -0
  76. package/templates/.agents/dashboard/apps/frontend/src/dashboard-project-overview.ts +7 -1
  77. package/templates/.agents/dashboard/apps/frontend/src/dashboard-retry.ts +17 -0
  78. package/templates/.agents/dashboard/apps/frontend/src/dashboard-setup-route.ts +29 -0
  79. package/templates/.agents/dashboard/apps/frontend/src/dashboard-view-actions.ts +66 -0
  80. package/templates/.agents/dashboard/apps/frontend/src/operations-period-render.test.ts +3 -2
  81. package/templates/.agents/dashboard/apps/frontend/src/overview-status-page.test.ts +2 -2
  82. package/templates/.agents/dashboard/apps/frontend/src/project-installation-status.test.ts +48 -0
  83. package/templates/.agents/dashboard/apps/frontend/src/project-installation-status.ts +29 -0
  84. package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +68 -0
  85. package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +2 -2
  86. package/templates/.agents/dashboard/apps/frontend/src/sao-paulo-day-rollover.test.ts +36 -0
  87. package/templates/.agents/dashboard/apps/frontend/src/sao-paulo-day-rollover.ts +30 -0
  88. package/templates/.agents/dashboard/apps/frontend/src/snapshot-banner-semantics.test.ts +2 -5
  89. package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +30 -19
  90. package/templates/.agents/dashboard/apps/frontend/src/use-app-effects.ts +9 -1
  91. package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-task-pagination.ts +77 -0
  92. package/templates/.agents/dashboard/apps/frontend/src/use-app-work-board.ts +397 -0
  93. package/templates/.agents/dashboard/apps/frontend/src/use-dashboard-app-model.tsx +782 -0
  94. package/templates/.agents/dashboard/apps/frontend/src/use-snapshot-notice.tsx +49 -0
  95. package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
  96. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostDeveloperPanelSlot.tsx +16 -0
  97. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostGroupsTable.tsx +459 -0
  98. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.test.ts +27 -17
  99. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +62 -186
  100. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorRunDialog.tsx +20 -0
  101. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables-hides-calls-that-have-no-collected.test.ts +80 -0
  102. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables-keeps-legacy-codex-identity-fields-blank.test.ts +455 -0
  103. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +18 -525
  104. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.tsx +32 -508
  105. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-export-sources.ts +74 -0
  106. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-actions.ts +19 -0
  107. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-selectors.ts +49 -0
  108. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-table-formatters.ts +115 -0
  109. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.test-fixtures.ts +2 -0
  110. package/templates/.agents/dashboard/modules/operations/package.json +1 -1
  111. package/templates/.agents/dashboard/modules/operations/src/contracts.ts +4 -0
  112. package/templates/.agents/dashboard/modules/operations/src/react/EntityTableBadges.tsx +34 -0
  113. package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.tsx +8 -38
  114. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview-keeps-structure-classes-mutually-exclusive.test.ts +243 -0
  115. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.test.ts +27 -275
  116. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.tsx +70 -247
  117. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverviewCharts.tsx +171 -0
  118. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverviewPanels.tsx +64 -0
  119. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +4 -3
  120. package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.test.tsx +2 -1
  121. package/templates/.agents/dashboard/modules/operations/src/react/manual-work-priority.test.ts +2 -1
  122. package/templates/.agents/dashboard/modules/operations/src/react/operations-coverage-toast.test.ts +6 -2
  123. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +6 -14
  124. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview.status-cards.test.ts +3 -1
  125. package/templates/.agents/dashboard/modules/operations/src/react/operations-page-contract.ts +2 -0
  126. package/templates/.agents/dashboard/modules/operations/src/react/overview-metric-format.ts +32 -0
  127. package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
  128. package/templates/.agents/dashboard/packages/branding/package.json +1 -1
  129. package/templates/.agents/dashboard/packages/branding/src/index.ts +1 -1
  130. package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
  131. package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
  132. package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +1458 -1458
  133. package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +1425 -1425
  134. package/templates/.agents/dashboard/packages/local-runtime/package.json +2 -1
  135. package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +7 -3
  136. package/templates/.agents/dashboard/packages/local-runtime/server.mjs +1458 -1459
  137. package/templates/.agents/dashboard/packages/local-runtime/src/active-codex-telemetry.ts +25 -0
  138. package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.test.ts +1 -1
  139. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +53 -8
  140. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +79 -24
  141. package/templates/.agents/dashboard/packages/local-runtime/src/projection-refresh-diagnostics.ts +35 -0
  142. package/templates/.agents/dashboard/packages/local-runtime/src/server-costs-routes.ts +168 -0
  143. package/templates/.agents/dashboard/packages/local-runtime/src/server-dual-reads-manifest-summaries-without-losing.test.ts +344 -0
  144. package/templates/.agents/dashboard/packages/local-runtime/src/server-http-contracts.ts +31 -0
  145. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-routes.ts +345 -0
  146. package/templates/.agents/dashboard/packages/local-runtime/src/server-read-projections.ts +461 -0
  147. package/templates/.agents/dashboard/packages/local-runtime/src/server-reconciliation-refresh.test.ts +78 -0
  148. package/templates/.agents/dashboard/packages/local-runtime/src/server-route-context.ts +13 -0
  149. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.test.ts +18 -0
  150. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.ts +19 -3
  151. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot.test.ts +22 -21
  152. package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-view-allowlist.test.ts +25 -0
  153. package/templates/.agents/dashboard/packages/local-runtime/src/server-trace-routes.ts +64 -0
  154. package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.test.ts +2 -30
  155. package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.ts +6 -23
  156. package/templates/.agents/dashboard/packages/local-runtime/src/server.test-fixtures.ts +1 -1
  157. package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +2 -330
  158. package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +73 -1060
  159. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-first-fold.ts +78 -0
  160. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-projections.ts +561 -0
  161. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-runs.ts +600 -0
  162. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.test.ts +1 -1
  163. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-agent-dimension.ts +269 -0
  164. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-context.ts +32 -0
  165. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-entity-group.ts +244 -0
  166. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-filtered-dimension.ts +292 -0
  167. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-financial.ts +547 -0
  168. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-model-dimension.ts +360 -0
  169. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-provider-dimension.ts +169 -0
  170. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-summary.ts +475 -0
  171. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-temporal-dimension.ts +132 -0
  172. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-timing.ts +299 -0
  173. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-view-page.ts +692 -0
  174. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-counts-every-root-execution-day-returns.test.ts +739 -0
  175. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-does-not-convert-delayed-historical-finalizer.test.ts +706 -0
  176. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-filesystem.ts +748 -0
  177. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-first-fold-types.ts +1 -1
  178. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-keeps-orphan-telemetry-out-kanban-without.test.ts +710 -0
  179. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-marks-token-cost-telemetry-unavailable-when.test.ts +618 -0
  180. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-rebuild.ts +755 -0
  181. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-rebuilds-disposable-snapshot-serves-zaip-records.test.ts +276 -0
  182. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-schema.ts +193 -0
  183. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-types.ts +123 -0
  184. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +1 -2805
  185. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.ts +17 -6930
  186. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-schema-base-views.ts +385 -0
  187. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-schema-dashboard-views.ts +412 -0
  188. package/templates/.agents/dashboard/packages/local-runtime/src/work-priority-contract.test.ts +4 -3
  189. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-build.mjs +195 -0
  190. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-lifecycle.test.mjs +2 -7
  191. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-logging.mjs +35 -0
  192. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-navigation.mjs +114 -0
  193. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-paths.mjs +90 -0
  194. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +89 -418
  195. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +22 -12
  196. package/templates/.agents/dashboard/packages/ui/package.json +1 -1
  197. package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
  198. package/templates/.agents/dashboard/tests/e2e/playwright.config.ts +4 -1
  199. package/templates/.agents/design/.zaip-managed.json +5 -5
  200. package/templates/.agents/design/DESIGN.md +2 -186
  201. package/templates/.agents/design/README.md +12 -2
  202. package/templates/.agents/design/apps/catalog/package.json +1 -1
  203. package/templates/.agents/design/packages/local-runtime/package.json +1 -1
  204. package/templates/.agents/growth/strategy.md +3 -0
  205. package/templates/.agents/marketing/strategy.md +3 -0
  206. package/templates/.agents/requirements/autonomous-assurance.md +2 -1
  207. package/templates/.agents/requirements/cloud-hostinger-autonomy.md +1 -1
  208. package/templates/.agents/requirements/comparative-audit.md +1 -1
  209. package/templates/.agents/requirements/context-engine.md +1 -1
  210. package/templates/.agents/requirements/cost-observability.md +1 -1
  211. package/templates/.agents/requirements/dashboard-launch.md +1 -1
  212. package/templates/.agents/requirements/data-export.md +1 -1
  213. package/templates/.agents/requirements/design-system.md +13 -4
  214. package/templates/.agents/requirements/execution-engine.md +1 -1
  215. package/templates/.agents/requirements/kanban-dashboard.md +1 -1
  216. package/templates/.agents/requirements/model-orchestration.md +1 -1
  217. package/templates/.agents/requirements/public-distribution.md +4 -2
  218. package/templates/.agents/requirements/software-architecture.md +1 -1
  219. package/templates/.agents/requirements/strategic-improvements.md +1 -1
  220. package/templates/.agents/requirements/work-lifecycle.md +3 -3
  221. package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
  222. package/templates/.agents/rules/architecture.md +2 -0
  223. package/templates/.agents/rules/astra-diagnostic.md +1 -1
  224. package/templates/.agents/rules/autonomy-decision.md +3 -1
  225. package/templates/.agents/rules/cloud-hostinger-autonomy.md +2 -0
  226. package/templates/.agents/rules/context.md +2 -1
  227. package/templates/.agents/rules/core.md +3 -3
  228. package/templates/.agents/rules/design-system-central-contract.md +17 -0
  229. package/templates/.agents/rules/evolution.md +3 -1
  230. package/templates/.agents/rules/frontend-lite.md +3 -1
  231. package/templates/.agents/rules/local-sqlite-storage.md +2 -2
  232. package/templates/.agents/rules/meta-mcp.md +3 -1
  233. package/templates/.agents/rules/model-orchestration.md +1 -1
  234. package/templates/.agents/rules/run-lifecycle-closure.md +6 -4
  235. package/templates/.agents/rules/security.md +3 -1
  236. package/templates/.agents/rules/specialist-routing.md +3 -1
  237. package/templates/.agents/rules/text-writing-utf8.md +1 -1
  238. package/templates/.agents/rules/workflow.md +7 -5
  239. package/templates/.agents/runtime/VERSION +1 -1
  240. package/templates/.agents/runtime/bin/zaip.mjs +519 -247
  241. package/templates/.agents/runtime/checksums.sha256 +6 -6
  242. package/templates/.agents/runtime/manifest.json +1 -1
  243. package/templates/.agents/runtime/pnpm-lock.sha256 +1 -1
  244. package/templates/.agents/runtime/provenance.json +5 -5
  245. package/templates/.agents/runtime/sbom.cdx.json +1 -1
  246. package/templates/.agents/sales/playbook.md +3 -0
  247. package/templates/.agents/skills/zaip-aios/SKILL.md +5 -3
  248. package/templates/.agents/skills/zaip-skill-adapt-stack/SKILL.md +1 -0
  249. package/templates/.agents/skills/zaip-skill-api-contracts/SKILL.md +14 -0
  250. package/templates/.agents/skills/zaip-skill-api-contracts/agents/openai.yaml +4 -0
  251. package/templates/.agents/skills/zaip-skill-application-observability/SKILL.md +15 -0
  252. package/templates/.agents/skills/zaip-skill-application-observability/agents/openai.yaml +4 -0
  253. package/templates/.agents/skills/zaip-skill-application-observability/references/signal-design.md +3 -0
  254. package/templates/.agents/skills/zaip-skill-application-readiness/SKILL.md +15 -0
  255. package/templates/.agents/skills/zaip-skill-application-readiness/agents/openai.yaml +4 -0
  256. package/templates/.agents/skills/zaip-skill-application-readiness/references/evidence-matrix.md +3 -0
  257. package/templates/.agents/skills/zaip-skill-architecture-design/SKILL.md +14 -0
  258. package/templates/.agents/skills/zaip-skill-architecture-design/agents/openai.yaml +4 -0
  259. package/templates/.agents/skills/zaip-skill-async-jobs/SKILL.md +14 -0
  260. package/templates/.agents/skills/zaip-skill-async-jobs/agents/openai.yaml +4 -0
  261. package/templates/.agents/skills/zaip-skill-auth-tenancy/SKILL.md +15 -0
  262. package/templates/.agents/skills/zaip-skill-auth-tenancy/agents/openai.yaml +4 -0
  263. package/templates/.agents/skills/zaip-skill-auth-tenancy/references/data-access-paths.md +9 -0
  264. package/templates/.agents/skills/zaip-skill-auth-tenancy/references/worker-scenario.md +5 -0
  265. package/templates/.agents/skills/zaip-skill-auth-tenancy/scripts/worker-contract.test.mjs +27 -0
  266. package/templates/.agents/skills/zaip-skill-author-skills/SKILL.md +2 -0
  267. package/templates/.agents/skills/zaip-skill-author-skills/references/engineering-skill-index.md +9 -0
  268. package/templates/.agents/skills/zaip-skill-author-skills/scripts/audit-skill-catalog.mjs +5 -3
  269. package/templates/.agents/skills/zaip-skill-author-skills/scripts/author-skill-scripts.test.mjs +27 -0
  270. package/templates/.agents/skills/zaip-skill-backend/SKILL.md +4 -0
  271. package/templates/.agents/skills/zaip-skill-backend/references/deployment-environments.md +75 -0
  272. package/templates/.agents/skills/zaip-skill-backend/references/supabase-migration-contract.md +23 -0
  273. package/templates/.agents/skills/zaip-skill-brand-governance/SKILL.md +2 -0
  274. package/templates/.agents/skills/zaip-skill-cache-strategy/SKILL.md +14 -0
  275. package/templates/.agents/skills/zaip-skill-cache-strategy/agents/openai.yaml +4 -0
  276. package/templates/.agents/skills/zaip-skill-change/SKILL.md +1 -1
  277. package/templates/.agents/skills/zaip-skill-cloud-engineering/SKILL.md +7 -0
  278. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/SKILL.md +37 -0
  279. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/agents/openai.yaml +6 -0
  280. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/references/workers-static-assets.md +26 -0
  281. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/references/workflow-templates.md +71 -0
  282. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/scripts/cloudflare-github-deploy-contract.test.mjs +77 -0
  283. package/templates/.agents/skills/zaip-skill-config/SKILL.md +21 -11
  284. package/templates/.agents/skills/zaip-skill-config/agents/openai.yaml +2 -2
  285. package/templates/.agents/skills/zaip-skill-container-runtime/SKILL.md +14 -0
  286. package/templates/.agents/skills/zaip-skill-container-runtime/agents/openai.yaml +4 -0
  287. package/templates/.agents/skills/zaip-skill-context/SKILL.md +6 -1
  288. package/templates/.agents/skills/zaip-skill-context/references/prd-spec-task-handoff.md +10 -0
  289. package/templates/.agents/skills/zaip-skill-context/references/rule-selection.md +20 -0
  290. package/templates/.agents/skills/zaip-skill-cqrs/SKILL.md +1 -0
  291. package/templates/.agents/skills/zaip-skill-cybersecurity/SKILL.md +18 -0
  292. package/templates/.agents/skills/zaip-skill-cybersecurity/agents/openai.yaml +4 -0
  293. package/templates/.agents/skills/zaip-skill-cybersecurity/references/audit-contract.md +94 -0
  294. package/templates/.agents/skills/zaip-skill-cybersecurity/scripts/score-audit.mjs +185 -0
  295. package/templates/.agents/skills/zaip-skill-cybersecurity/scripts/score-audit.test.mjs +101 -0
  296. package/templates/.agents/skills/zaip-skill-data-modeling/SKILL.md +14 -0
  297. package/templates/.agents/skills/zaip-skill-data-modeling/agents/openai.yaml +4 -0
  298. package/templates/.agents/skills/zaip-skill-database-migrations/SKILL.md +20 -0
  299. package/templates/.agents/skills/zaip-skill-database-migrations/agents/openai.yaml +4 -0
  300. package/templates/.agents/skills/zaip-skill-database-migrations/references/manual-mode.md +15 -0
  301. package/templates/.agents/skills/zaip-skill-database-migrations/references/promotion-example.md +5 -0
  302. package/templates/.agents/skills/zaip-skill-database-migrations/scripts/export-manual-sql.mjs +145 -0
  303. package/templates/.agents/skills/zaip-skill-database-migrations/scripts/export-manual-sql.test.mjs +178 -0
  304. package/templates/.agents/skills/zaip-skill-dependency-upgrade/SKILL.md +14 -0
  305. package/templates/.agents/skills/zaip-skill-dependency-upgrade/agents/openai.yaml +4 -0
  306. package/templates/.agents/skills/zaip-skill-deployment-pipeline/SKILL.md +15 -0
  307. package/templates/.agents/skills/zaip-skill-deployment-pipeline/agents/openai.yaml +4 -0
  308. package/templates/.agents/skills/zaip-skill-deployment-pipeline/references/runtime-shapes.md +3 -0
  309. package/templates/.agents/skills/zaip-skill-design-system/SKILL.md +20 -9
  310. package/templates/.agents/skills/zaip-skill-dev-environment/SKILL.md +14 -0
  311. package/templates/.agents/skills/zaip-skill-dev-environment/agents/openai.yaml +4 -0
  312. package/templates/.agents/skills/zaip-skill-dev-environment/references/inventory-contract.md +7 -0
  313. package/templates/.agents/skills/zaip-skill-dev-environment/scripts/inventory.mjs +77 -0
  314. package/templates/.agents/skills/zaip-skill-disaster-recovery/SKILL.md +15 -0
  315. package/templates/.agents/skills/zaip-skill-disaster-recovery/agents/openai.yaml +4 -0
  316. package/templates/.agents/skills/zaip-skill-disaster-recovery/references/recovery-scope.md +3 -0
  317. package/templates/.agents/skills/zaip-skill-execution/SKILL.md +3 -3
  318. package/templates/.agents/skills/zaip-skill-execution/references/correction-cycle.md +7 -0
  319. package/templates/.agents/skills/zaip-skill-execution/references/runtime-governance.md +1 -5
  320. package/templates/.agents/skills/zaip-skill-external-integrations/SKILL.md +14 -0
  321. package/templates/.agents/skills/zaip-skill-external-integrations/agents/openai.yaml +4 -0
  322. package/templates/.agents/skills/zaip-skill-frontend/SKILL.md +4 -0
  323. package/templates/.agents/skills/zaip-skill-frontend-componentization/SKILL.md +44 -0
  324. package/templates/.agents/skills/zaip-skill-frontend-componentization/agents/openai.yaml +4 -0
  325. package/templates/.agents/skills/zaip-skill-frontend-data-flows/SKILL.md +14 -0
  326. package/templates/.agents/skills/zaip-skill-frontend-data-flows/agents/openai.yaml +4 -0
  327. package/templates/.agents/skills/zaip-skill-general-operations/SKILL.md +2 -0
  328. package/templates/.agents/skills/zaip-skill-github-actions-setup/SKILL.md +36 -0
  329. package/templates/.agents/skills/zaip-skill-github-actions-setup/agents/openai.yaml +4 -0
  330. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/cloudflare-pages.md +33 -0
  331. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/github.md +63 -0
  332. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/hostinger-vps.md +55 -0
  333. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/npm.md +30 -0
  334. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/check-skill.mjs +55 -0
  335. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-cloudflare.mjs +61 -0
  336. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-cloudflare.test.mjs +128 -0
  337. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-ssh.integration.test.mjs +106 -0
  338. package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +43 -76
  339. package/templates/.agents/skills/zaip-skill-github-deploy/references/deployment-workflow.md +131 -0
  340. package/templates/.agents/skills/zaip-skill-github-deploy/references/github-release-workflow-template.md +31 -0
  341. package/templates/.agents/skills/zaip-skill-github-deploy/references/release-gate-matrix.md +24 -0
  342. package/templates/.agents/skills/zaip-skill-github-deploy/references/release-identity.md +44 -0
  343. package/templates/.agents/skills/zaip-skill-github-deploy/references/release-notes.md +134 -0
  344. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/consumer-release-preparation.mjs +389 -0
  345. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/consumer-release-preparation.test.mjs +134 -0
  346. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs +25 -2
  347. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness-api.test.mjs +134 -0
  348. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness.mjs +98 -0
  349. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness.test.mjs +25 -0
  350. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/install-github-readiness-workflow.mjs +159 -0
  351. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/install-github-readiness-workflow.test.mjs +160 -0
  352. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs +149 -12
  353. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.test.mjs +64 -5
  354. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/release-notes-coverage.test.mjs +126 -0
  355. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/resolve-release-identity.mjs +78 -0
  356. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/resolve-release-identity.test.mjs +51 -0
  357. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/validate-release-notes.mjs +184 -0
  358. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/validate-release-notes.test.mjs +109 -0
  359. package/templates/.agents/skills/zaip-skill-growth-strategy-revops/SKILL.md +2 -0
  360. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/SKILL.md +18 -10
  361. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/agents/openai.yaml +3 -4
  362. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/aws-cli-terraform.md +62 -0
  363. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/guia-iniciante-hostinger-vps.md +183 -0
  364. package/templates/.agents/skills/zaip-skill-marketing/SKILL.md +2 -0
  365. package/templates/.agents/skills/zaip-skill-module-scaffold/SKILL.md +14 -0
  366. package/templates/.agents/skills/zaip-skill-module-scaffold/agents/openai.yaml +4 -0
  367. package/templates/.agents/skills/zaip-skill-module-scaffold/references/scaffold-contract.md +9 -0
  368. package/templates/.agents/skills/zaip-skill-module-scaffold/scripts/helpers.test.mjs +121 -0
  369. package/templates/.agents/skills/zaip-skill-module-scaffold/scripts/scaffold.mjs +169 -0
  370. package/templates/.agents/skills/zaip-skill-move-prd/SKILL.md +1 -1
  371. package/templates/.agents/skills/zaip-skill-move-spec/SKILL.md +1 -1
  372. package/templates/.agents/skills/zaip-skill-performance-engineering/SKILL.md +14 -0
  373. package/templates/.agents/skills/zaip-skill-performance-engineering/agents/openai.yaml +4 -0
  374. package/templates/.agents/skills/zaip-skill-prd/SKILL.md +1 -1
  375. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-local-telemetry.mjs +1 -0
  376. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.mjs +26 -9
  377. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.test.mjs +39 -13
  378. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.mjs +1 -0
  379. package/templates/.agents/skills/zaip-skill-refactor-landing-page/SKILL.md +66 -0
  380. package/templates/.agents/skills/zaip-skill-refactor-landing-page/agents/openai.yaml +4 -0
  381. package/templates/.agents/skills/zaip-skill-refactor-landing-page/references/behavioral-dry-run.md +23 -0
  382. package/templates/.agents/skills/zaip-skill-release-qualification/SKILL.md +40 -1
  383. package/templates/.agents/skills/zaip-skill-release-qualification/references/local-preparation.md +98 -0
  384. package/templates/.agents/skills/zaip-skill-review/SKILL.md +1 -0
  385. package/templates/.agents/skills/zaip-skill-rules/SKILL.md +3 -3
  386. package/templates/.agents/skills/zaip-skill-sales-methodology/SKILL.md +2 -0
  387. package/templates/.agents/skills/zaip-skill-setup/SKILL.md +19 -21
  388. package/templates/.agents/skills/zaip-skill-setup/agents/openai.yaml +2 -2
  389. package/templates/.agents/skills/zaip-skill-spec/SKILL.md +3 -2
  390. package/templates/.agents/skills/zaip-skill-storage-uploads/SKILL.md +14 -0
  391. package/templates/.agents/skills/zaip-skill-storage-uploads/agents/openai.yaml +4 -0
  392. package/templates/.agents/skills/zaip-skill-systematic-debugging/SKILL.md +14 -0
  393. package/templates/.agents/skills/zaip-skill-systematic-debugging/agents/openai.yaml +4 -0
  394. package/templates/.agents/skills/zaip-skill-task/SKILL.md +16 -7
  395. package/templates/.agents/skills/zaip-skill-task/references/commit-policy.md +25 -0
  396. package/templates/.agents/skills/zaip-skill-test-data/SKILL.md +14 -0
  397. package/templates/.agents/skills/zaip-skill-test-data/agents/openai.yaml +4 -0
  398. package/templates/.agents/skills/zaip-skill-test-data/scripts/generate.mjs +72 -0
  399. package/templates/.agents/skills/zaip-skill-testing-strategy/SKILL.md +15 -0
  400. package/templates/.agents/skills/zaip-skill-testing-strategy/agents/openai.yaml +4 -0
  401. package/templates/.agents/skills/zaip-skill-testing-strategy/references/example-map.md +3 -0
  402. package/templates/.agents/skills/zaip-skill-website-readiness/SKILL.md +8 -0
  403. package/templates/.agents/zaip-aios/VERSION +1 -1
  404. package/templates/.agents/zaip-aios/guides/10-seguranca.md +2 -1
  405. package/templates/.agents/zaip-aios/guides/20-instalacao-detalhada.md +5 -3
  406. package/templates/scripts/validate-cloud-hostinger-contract.mjs +34 -0
  407. package/templates/template-manifest.json +955 -211
  408. package/templates/.agents/branding/.gitkeep +0 -0
  409. package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-snUCQYTC.js +0 -1
  410. package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-BPtVUGgs.js +0 -1
  411. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-3Awyaovx.js +0 -3
  412. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-GgzpZ_PY.css +0 -1
  413. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BCvZFMEf.js +0 -1
  414. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-DbaLbU2q.js +0 -68
  415. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-_MEktQNM.js +0 -2
  416. package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-D9-fqq9M.js +0 -1
  417. package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-BDe4_Ubl.js +0 -1
  418. package/templates/.agents/growth/.gitkeep +0 -0
  419. package/templates/.agents/marketing/.gitkeep +0 -0
  420. package/templates/.agents/sales/.gitkeep +0 -0
@@ -9,13 +9,9 @@ import {
9
9
  aggregateMacroMetrics,
10
10
  aggregateTaskMetrics,
11
11
  countExecutionDays,
12
- findLatestCreatedAt,
13
- findLatestTaskCreatedAt,
14
12
  formatExecutionAverageHint,
15
13
  formatSummaryMetricValue,
16
14
  formatTokenThroughputHint,
17
- macroClassificationStats,
18
- macroStatusDistribution,
19
15
  overviewMetricAverages,
20
16
  overviewText,
21
17
  partialOverviewMetrics,
@@ -25,14 +21,39 @@ import {
25
21
  selectTopEntities,
26
22
  statusColors,
27
23
  summarizeTopEntityMetrics,
28
- summarizeTopTaskMetrics,
29
24
  taskMetricAverages,
30
25
  taskStatusDistribution,
31
26
  } from "./OperationsOverview.js";
32
27
 
33
28
  const readOverviewSource = (file = "OperationsOverview.tsx") =>
34
29
  readFileSync(new URL(file, import.meta.url), "utf8");
35
-
30
+ function run(
31
+ taskId: string | null,
32
+ durationMs: number,
33
+ tokens: number,
34
+ costBrl: number,
35
+ links: { id?: string; specId?: string | null; prdId?: string | null } = {},
36
+ ) {
37
+ return {
38
+ id: links.id ?? `RUN-${taskId ?? "NONE"}-${durationMs}`,
39
+ phase: "execution",
40
+ task_id: taskId,
41
+ parent_run_id: null,
42
+ spec_id: links.specId ?? null,
43
+ prd_id: links.prdId ?? null,
44
+ duration_ms: durationMs,
45
+ usage: { total: { tokens: { total: tokens }, cost: { brl: costBrl } } },
46
+ };
47
+ }
48
+ function entityMetric(
49
+ id: string,
50
+ durationMs: number | null,
51
+ tokens: number | null,
52
+ costBrl: number | null,
53
+ runCount: number,
54
+ ) {
55
+ return { id, title: id, durationMs, tokens, costBrl, runCount };
56
+ }
36
57
  describe("global card population", () => {
37
58
  it("includes conversation and planning usage but excludes them from duration", () => {
38
59
  const runs = [
@@ -43,7 +64,6 @@ describe("global card population", () => {
43
64
  expect(executionMetricTotals(runs)).toMatchObject({ durationMs: 100, tokens: 10, costBrl: 1 });
44
65
  expect(allPhaseMetricTotals(runs)).toMatchObject({ tokens: 60, costBrl: 6 });
45
66
  });
46
-
47
67
  it("uses the same observed execution population as period tables, never lifecycle elapsed time", () => {
48
68
  const root = {
49
69
  ...run("TASK-1", 100, 10, 1),
@@ -63,7 +83,6 @@ describe("global card population", () => {
63
83
  expect(operationalRootExecutionDuration([root, child])).toBeNull();
64
84
  expect(executionMetricTotals([root, child])).toMatchObject({ durationMs: null });
65
85
  });
66
-
67
86
  it("keeps delegated Sub-Run duration out of Operations root execution totals", () => {
68
87
  const root = {
69
88
  ...run("TASK-1", 99, 1, 1),
@@ -86,7 +105,6 @@ describe("global card population", () => {
86
105
  expect(totals.durationMs).toBe(4 * 3_600_000);
87
106
  expect(totals.runs.map((run) => run.id)).toEqual(["RUN-ROOT-OBS", "RUN-ESTIMATED"]);
88
107
  });
89
-
90
108
  it("uses observed source duration instead of a projected duration", () => {
91
109
  const staleObserved = {
92
110
  ...run("TASK-1", 413_659_026, 10, 1),
@@ -118,7 +136,6 @@ describe("overview aggregate source", () => {
118
136
  );
119
137
  expect(topPanelSource).toContain("topCost === null");
120
138
  });
121
-
122
139
  it("uses the factual compact USD summary when its Run rows are intentionally absent", () => {
123
140
  expect(
124
141
  resolveOverviewCostTotal({
@@ -130,7 +147,6 @@ describe("overview aggregate source", () => {
130
147
  }),
131
148
  ).toBe(8731.92);
132
149
  });
133
-
134
150
  it("does not relabel a BRL-only Operations aggregate as USD", () => {
135
151
  expect(
136
152
  resolveOverviewCostTotal({
@@ -142,7 +158,6 @@ describe("overview aggregate source", () => {
142
158
  }),
143
159
  ).toBeNull();
144
160
  });
145
-
146
161
  it("uses a selected macro's factual USD total rather than the global Task snapshot", () => {
147
162
  expect(
148
163
  resolveOverviewCostTotal({
@@ -155,7 +170,6 @@ describe("overview aggregate source", () => {
155
170
  }),
156
171
  ).toBe(13.4);
157
172
  });
158
-
159
173
  it("keeps summary metrics as the KPI source after a detail response", () => {
160
174
  const summary = {
161
175
  overview_metrics: {
@@ -180,7 +194,6 @@ describe("overview aggregate source", () => {
180
194
  } as never),
181
195
  ).toMatchObject({ task_count: 15, spec_count: 15, prd_count: 5 });
182
196
  });
183
-
184
197
  it("keeps the global aggregate across Operations, Cost Monitor, and Kanban navigations", () => {
185
198
  const partial = partialOverviewMetrics({
186
199
  summary: {
@@ -234,14 +247,12 @@ describe("overview aggregate source", () => {
234
247
  expect(filteredKanbanTasks.filter((task) => task.risk === "standard")).toHaveLength(157);
235
248
  });
236
249
  });
237
-
238
250
  describe("execution average summary", () => {
239
251
  it("calculates fast overview task averages from the filtered aggregate totals", () => {
240
252
  expect(taskMetricAverages({ durationMs: 12_600_000, tokens: 63_000, costBrl: 126 }, 3)).toEqual(
241
253
  { durationMs: 4_200_000, tokens: 21_000, costBrl: 42 },
242
254
  );
243
255
  });
244
-
245
256
  it("keeps aggregate task averages unavailable when the task count is unavailable", () => {
246
257
  expect(taskMetricAverages({ durationMs: 12_600_000, tokens: 63_000, costBrl: 126 }, 0)).toEqual(
247
258
  {
@@ -251,7 +262,6 @@ describe("execution average summary", () => {
251
262
  },
252
263
  );
253
264
  });
254
-
255
265
  it("uses the summary task count when the fast overview omits task records", () => {
256
266
  const source = readOverviewSource();
257
267
  const durationCard = source.slice(
@@ -265,7 +275,6 @@ describe("execution average summary", () => {
265
275
  expect(durationCard).toContain("metricPopulationCount ?? 0");
266
276
  expect(durationCard).not.toContain("tasks.length");
267
277
  });
268
-
269
278
  it("formats average duration per task and per active execution day", () => {
270
279
  expect(
271
280
  countExecutionDays([
@@ -278,7 +287,6 @@ describe("execution average summary", () => {
278
287
  "20 min / tarefa (6 h / dia) (6 dias)",
279
288
  );
280
289
  });
281
-
282
290
  it("localizes English and shows zero for an empty population", () => {
283
291
  expect(formatExecutionAverageHint(3_600_000, 3, 1, "en-US")).toBe(
284
292
  "20 min / task (1 h / day) (1 day)",
@@ -287,14 +295,12 @@ describe("execution average summary", () => {
287
295
  expect(formatExecutionAverageHint(0, 0, 0, "en-US")).toBe("0");
288
296
  });
289
297
  });
290
-
291
298
  describe("token throughput summary", () => {
292
299
  it("formats average tokens per hour and per active day in pt-BR", () => {
293
300
  expect(formatTokenThroughputHint(1_911_000_000, 49 * 3_600_000, 7, "pt-BR")).toBe(
294
301
  "39 M/hora (273 M/dia)",
295
302
  );
296
303
  });
297
-
298
304
  it("localizes EN-US and preserves unavailable coverage", () => {
299
305
  expect(formatTokenThroughputHint(1_911_000_000, 49 * 3_600_000, 7, "en-US")).toBe(
300
306
  "39 M/hour (273 M/day)",
@@ -302,7 +308,6 @@ describe("token throughput summary", () => {
302
308
  expect(formatTokenThroughputHint(0, 0, 0, "pt-BR")).toBe("Throughput indisponível");
303
309
  });
304
310
  });
305
-
306
311
  describe("overviewText", () => {
307
312
  it("provides English copy for every shared overview card and summary label", () => {
308
313
  expect(overviewText("en-US")).toMatchObject({
@@ -326,7 +331,6 @@ describe("overviewText", () => {
326
331
  });
327
332
  });
328
333
  });
329
-
330
334
  describe("statusColors", () => {
331
335
  it("uses the same neutral gray for terminal non-success states", () => {
332
336
  expect(statusColors.failed).toBe(statusColors.blocked);
@@ -352,7 +356,6 @@ describe("overviewMetricAverages", () => {
352
356
  costBrl: null,
353
357
  });
354
358
  });
355
-
356
359
  it("keeps unknown totals null internally and renders zero only for an empty population", () => {
357
360
  const averages = overviewMetricAverages({ durationMs: null, tokens: null, costBrl: null }, 3);
358
361
  expect(averages).toEqual({ durationMs: null, tokens: null, costBrl: null });
@@ -390,7 +393,6 @@ describe("selectedOverviewCount", () => {
390
393
  });
391
394
  });
392
395
  });
393
-
394
396
  describe("aggregateTaskMetrics", () => {
395
397
  it("accumulates observed run metrics by task and ignores unlinked runs", () => {
396
398
  const metrics = aggregateTaskMetrics(
@@ -420,7 +422,6 @@ describe("aggregateTaskMetrics", () => {
420
422
  },
421
423
  ]);
422
424
  });
423
-
424
425
  it("does not count conversation time as task execution time", () => {
425
426
  const metrics = aggregateTaskMetrics(
426
427
  [{ id: "TASK-1", title: "Primeira" }],
@@ -434,7 +435,6 @@ describe("aggregateTaskMetrics", () => {
434
435
  { id: "TASK-1", title: "Primeira", durationMs: 100, tokens: 110, costBrl: 11, runCount: 1 },
435
436
  ]);
436
437
  });
437
-
438
438
  it("uses only root execution duration while retaining all related usage", () => {
439
439
  const metrics = aggregateTaskMetrics(
440
440
  [{ id: "TASK-1", title: "Primeira" }],
@@ -452,7 +452,6 @@ describe("aggregateTaskMetrics", () => {
452
452
  });
453
453
  });
454
454
  });
455
-
456
455
  describe("selectTopEntities", () => {
457
456
  it("keeps the complete selected SPEC population, ordering observed duration before unavailable", () => {
458
457
  const selected = selectTopEntities([
@@ -474,7 +473,6 @@ describe("selectTopEntities", () => {
474
473
  ]);
475
474
  expect(summarizeTopEntityMetrics(selected, selected).durationMs).toBe(500);
476
475
  });
477
-
478
476
  it("retains four selected SPEC entries when only one has observed duration", () => {
479
477
  const selected = selectTopEntities([
480
478
  entityMetric("SPEC-OBSERVED", 600, 10, 1, 1),
@@ -496,7 +494,6 @@ describe("selectTopEntities", () => {
496
494
  costBrl: 4,
497
495
  });
498
496
  });
499
-
500
497
  it("keeps all-unavailable selected SPECs and reports duration as unavailable, never zero", () => {
501
498
  const selected = selectTopEntities([
502
499
  entityMetric("SPEC-A", null, 4, 1, 1),
@@ -515,7 +512,6 @@ describe("selectTopEntities", () => {
515
512
  expect(source).toContain("duration(summary.durationMs, locale)");
516
513
  });
517
514
  });
518
-
519
515
  describe("aggregateMacroMetrics", () => {
520
516
  it("uses the materialized macro duration instead of partial Run rows", () => {
521
517
  const [metric] = aggregateMacroMetrics(
@@ -556,7 +552,6 @@ describe("aggregateMacroMetrics", () => {
556
552
  runCount: 4,
557
553
  });
558
554
  });
559
-
560
555
  it("keeps related metrics populated when the overview switches from Tasks to SPECs to PRDs", () => {
561
556
  const tasks = [{ id: "TASK-1" }, { id: "TASK-2" }];
562
557
  const specs = [{ id: "SPEC-1", title: "SPEC", kind: "spec", run_ids: ["RUN-SPEC"] }];
@@ -580,7 +575,6 @@ describe("aggregateMacroMetrics", () => {
580
575
  expect(specMetrics[0]).toMatchObject({ durationMs: 200, tokens: 20, costBrl: 2, runCount: 1 });
581
576
  expect(prdMetrics[0]).toMatchObject({ durationMs: 300, tokens: 30, costBrl: 3, runCount: 1 });
582
577
  });
583
-
584
578
  it("aggregates only Runs linked to each macro and honors resolved costs", () => {
585
579
  const metrics = aggregateMacroMetrics(
586
580
  [{ id: "SPEC-1", title: "Planejamento", kind: "spec", run_ids: ["RUN-DECLARED"] }],
@@ -607,245 +601,3 @@ describe("aggregateMacroMetrics", () => {
607
601
  ]);
608
602
  });
609
603
  });
610
-
611
- describe("macroClassificationStats", () => {
612
- it("keeps structure classes mutually exclusive", () => {
613
- const stats = macroClassificationStats(
614
- [
615
- { task_count: 0, rework_run_count: 0 },
616
- { task_count: 0, rework_run_count: 2 },
617
- { task_count: 2, rework_run_count: 0 },
618
- { task_count: 3, rework_run_count: 1 },
619
- ],
620
- "pt-BR",
621
- );
622
-
623
- expect(stats.map(({ key, label, count }) => ({ key, label, count }))).toEqual([
624
- { key: "empty", label: "Sem tarefas", count: 1 },
625
- { key: "structured", label: "Com tarefas", count: 1 },
626
- { key: "rework", label: "Com retrabalho", count: 2 },
627
- ]);
628
- expect(stats.reduce((total, row) => total + row.count, 0)).toBe(4);
629
- });
630
- });
631
-
632
- describe("taskStatusDistribution", () => {
633
- it("includes cancelled and failed statuses with the other task states", () => {
634
- const distribution = taskStatusDistribution(
635
- [
636
- { status: "draft", spec_id: "SPEC-1" },
637
- { status: "planned", spec_id: "SPEC-1" },
638
- { status: "draft", spec_id: null },
639
- {
640
- status: "planned",
641
- spec_id: null,
642
- attempt_count: 0,
643
- started_at: null,
644
- execution_started: false,
645
- },
646
- { status: "executing", spec_id: null },
647
- { status: "verifying", spec_id: null },
648
- { status: "completed", spec_id: null },
649
- { status: "blocked", spec_id: null },
650
- { status: "cancelled", spec_id: null },
651
- { status: "failed", spec_id: null },
652
- ],
653
- "pt-BR",
654
- );
655
-
656
- expect(distribution.map(({ key, label, count }) => ({ key, label, count }))).toEqual([
657
- { key: "definition", label: "Definição (PRD + Requisitos)", count: 2 },
658
- { key: "planning", label: "Planejamento (SPEC + Change)", count: 0 },
659
- { key: "ready", label: "Pronto para Executar", count: 2 },
660
- { key: "executing", label: "Execução", count: 1 },
661
- { key: "verifying", label: "Verificação", count: 1 },
662
- { key: "completed", label: "Concluído", count: 1 },
663
- { key: "blocked", label: "Bloqueado", count: 1 },
664
- { key: "cancelled", label: "Cancelado", count: 1 },
665
- { key: "failed", label: "Falhado", count: 1 },
666
- ]);
667
- });
668
-
669
- it("includes cancelled and failed statuses in the visible total", () => {
670
- const visible = taskStatusDistribution(
671
- [
672
- { status: "draft", spec_id: "SPEC-1" },
673
- { status: "planned", spec_id: "SPEC-1" },
674
- {
675
- status: "planned",
676
- spec_id: null,
677
- attempt_count: 0,
678
- started_at: null,
679
- execution_started: false,
680
- },
681
- { status: "completed", spec_id: null },
682
- { status: "executing", spec_id: null },
683
- { status: "blocked", spec_id: null },
684
- { status: "failed", spec_id: null },
685
- { status: "cancelled", spec_id: null },
686
- ],
687
- "pt-BR",
688
- );
689
-
690
- expect(visible.map(({ key, count }) => ({ key, count }))).toEqual([
691
- { key: "definition", count: 1 },
692
- { key: "planning", count: 0 },
693
- { key: "ready", count: 2 },
694
- { key: "executing", count: 1 },
695
- { key: "verifying", count: 0 },
696
- { key: "completed", count: 1 },
697
- { key: "blocked", count: 1 },
698
- { key: "cancelled", count: 1 },
699
- { key: "failed", count: 1 },
700
- ]);
701
- expect(visible.reduce((total, item) => total + item.count, 0)).toBe(8);
702
- });
703
- });
704
-
705
- describe("macroStatusDistribution", () => {
706
- it("includes every macro status so the distribution totals match the macro card", () => {
707
- const macros = [
708
- { kind: "spec", lifecycle_status: "draft", work_status: "planning" },
709
- { kind: "prd", lifecycle_status: "completed", work_status: "completed" },
710
- { kind: "spec", lifecycle_status: "failed", work_status: "failed" },
711
- { kind: "prd", lifecycle_status: "blocked", work_status: "blocked" },
712
- { kind: "spec", lifecycle_status: "cancelled", work_status: "cancelled" },
713
- ];
714
- const macroCount = macros.length;
715
-
716
- const visible = macroStatusDistribution(macros as never, [], "pt-BR");
717
-
718
- expect(visible.map(({ key, count }) => ({ key, count }))).toEqual([
719
- { key: "definition", count: 0 },
720
- { key: "planning", count: 1 },
721
- { key: "ready", count: 0 },
722
- { key: "executing", count: 0 },
723
- { key: "verifying", count: 0 },
724
- { key: "completed", count: 1 },
725
- { key: "blocked", count: 1 },
726
- { key: "cancelled", count: 1 },
727
- { key: "failed", count: 1 },
728
- ]);
729
- expect(visible.reduce((total, item) => total + item.count, 0)).toBe(macroCount);
730
- });
731
- });
732
-
733
- describe("findLatestTaskCreatedAt", () => {
734
- it("selects the newest task regardless of lifecycle status", () => {
735
- expect(
736
- findLatestTaskCreatedAt([
737
- { created_at: "2026-07-16T10:00:00.000Z" },
738
- { created_at: "2026-07-16T12:30:00.000Z" },
739
- { created_at: "2026-07-16T11:00:00.000Z" },
740
- ]),
741
- ).toBe("2026-07-16T12:30:00.000Z");
742
- });
743
-
744
- it("returns null when no valid task date exists", () => {
745
- expect(findLatestTaskCreatedAt([])).toBeNull();
746
- expect(findLatestTaskCreatedAt([{ created_at: "invalid" }])).toBeNull();
747
- });
748
- });
749
-
750
- describe("findLatestCreatedAt", () => {
751
- it("supports nullable macro dates", () => {
752
- expect(
753
- findLatestCreatedAt([{ created_at: null }, { created_at: "2026-07-16T10:00:00.000Z" }]),
754
- ).toBe("2026-07-16T10:00:00.000Z");
755
- });
756
- });
757
-
758
- describe("summarizeTopEntityMetrics", () => {
759
- it("summarizes the top entities against the selected entity total", () => {
760
- const first = entityMetric("ONE", 100, 10, 1, 1);
761
- const second = entityMetric("TWO", 300, 30, 3, 2);
762
- expect(summarizeTopEntityMetrics([second], [first, second])).toEqual({
763
- durationMs: 300,
764
- durationShare: 0.75,
765
- runCount: 2,
766
- tokens: 30,
767
- costBrl: 3,
768
- });
769
- });
770
- });
771
-
772
- describe("summarizeTopTaskMetrics", () => {
773
- it("summarizes the selected tasks against all measured run duration", () => {
774
- const runs = [run("TASK-1", 100, 10, 1), run("TASK-2", 200, 20, 2), run("TASK-3", 300, 30, 3)];
775
-
776
- expect(
777
- summarizeTopTaskMetrics(
778
- [
779
- { id: "TASK-1", durationMs: 100 },
780
- { id: "TASK-2", durationMs: 200 },
781
- ],
782
- runs,
783
- ),
784
- ).toEqual({ durationMs: 300, durationShare: 0.5, runCount: 2, tokens: 30, costBrl: 3 });
785
- });
786
-
787
- it("keeps tokens and cost unavailable when no related run has coverage", () => {
788
- expect(
789
- summarizeTopTaskMetrics(
790
- [{ id: "TASK-1", durationMs: 100 }],
791
- [
792
- {
793
- ...run("TASK-1", 100, 0, 0),
794
- usage: { total: { tokens: { total: null }, cost: { brl: null } } },
795
- },
796
- ],
797
- ),
798
- ).toMatchObject({ tokens: null, costBrl: null });
799
- });
800
-
801
- it("uses root execution duration but all related phases for top-task usage", () => {
802
- const root = run("TASK-1", 2_000, 10, 1, { id: "RUN-ROOT" });
803
- const child = {
804
- ...run("TASK-1", 1_000, 20, 2, { id: "RUN-CHILD" }),
805
- parent_run_id: "RUN-ROOT",
806
- };
807
- const conversation = {
808
- ...run("TASK-1", 9_000, 30, 3, { id: "RUN-CONVERSATION" }),
809
- phase: "conversation",
810
- };
811
-
812
- expect(
813
- summarizeTopTaskMetrics([{ id: "TASK-1", durationMs: 2_000 }], [root, child, conversation]),
814
- ).toEqual({
815
- durationMs: 2_000,
816
- durationShare: 1,
817
- runCount: 3,
818
- tokens: 60,
819
- costBrl: 6,
820
- });
821
- });
822
- });
823
-
824
- function run(
825
- taskId: string | null,
826
- durationMs: number,
827
- tokens: number,
828
- costBrl: number,
829
- links: { id?: string; specId?: string | null; prdId?: string | null } = {},
830
- ) {
831
- return {
832
- id: links.id ?? `RUN-${taskId ?? "NONE"}-${durationMs}`,
833
- phase: "execution",
834
- task_id: taskId,
835
- parent_run_id: null,
836
- spec_id: links.specId ?? null,
837
- prd_id: links.prdId ?? null,
838
- duration_ms: durationMs,
839
- usage: { total: { tokens: { total: tokens }, cost: { brl: costBrl } } },
840
- };
841
- }
842
-
843
- function entityMetric(
844
- id: string,
845
- durationMs: number | null,
846
- tokens: number | null,
847
- costBrl: number | null,
848
- runCount: number,
849
- ) {
850
- return { id, title: id, durationMs, tokens, costBrl, runCount };
851
- }