@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
@@ -1,10 +1,5 @@
1
- import {
2
- DataTable,
3
- formatCompactNumber,
4
- formatCurrency,
5
- formatDurationMs,
6
- } from "@zaip-ai/dashboard-ui";
7
- import type { CostGroupRow, CostRunRow, DurationCoverage } from "../contracts.js";
1
+ import { DataTable } from "@zaip-ai/dashboard-ui";
2
+ import type { CostRunRow } from "../contracts.js";
8
3
  import { invocationMetricDescription } from "./CostTableDisplay.js";
9
4
  import { MoreVerticalIcon } from "./CostTableIcons.js";
10
5
  import { type CostRunPagination, CostRunServerPagination } from "./CostTableLoading.js";
@@ -16,21 +11,13 @@ import {
16
11
  sumNumbers,
17
12
  } from "./cost-table-metrics.js";
18
13
  import {
19
- costGroupsScrollLabel,
20
- costPeriodTotalAriaLabel,
21
14
  costRunsDurationTotal,
22
15
  costRunsScrollLabel,
23
- formatBrlRate,
24
- formatCostPeriodLabel,
25
16
  formatDateTime,
26
- formatMultiplierPair,
27
- formatRate,
28
17
  formatReasoningEffort,
29
18
  formatServiceTier,
30
- formatUsd,
31
19
  isCompactRunColumnVisible,
32
20
  } from "./cost-table-presentation.js";
33
- import type { CostGroupTotals } from "./use-cost-group-page.js";
34
21
 
35
22
  export {
36
23
  type CostDeveloperAttributionRow,
@@ -64,110 +51,32 @@ export {
64
51
  isCompactRunColumnVisible,
65
52
  } from "./cost-table-presentation.js";
66
53
 
67
- export function displayCostGroupLabel(label: string, locale: CostLocale): string {
68
- const normalized = label.trim().toLowerCase();
69
- return normalized.length === 0 || normalized === "unknown"
70
- ? locale === "pt-BR"
71
- ? "Sem modelo/provedor atribuído"
72
- : "No model/provider assigned"
73
- : label;
74
- }
75
-
76
- export function formatAuditableNumber(value: number | null, locale: CostLocale): string {
77
- return new Intl.NumberFormat(locale, { maximumFractionDigits: 0 }).format(value ?? 0);
78
- }
79
-
80
- function formatFactualCount(value: number | null, locale: CostLocale): string {
81
- return value === null
82
- ? locale === "pt-BR"
83
- ? "Indisponível"
84
- : "Unavailable"
85
- : formatAuditableNumber(value, locale);
86
- }
87
-
88
- export function formatAuditableCompactNumber(value: number | null, locale: CostLocale): string {
89
- return formatCompactNumber(value ?? 0, locale);
90
- }
91
-
92
- export function formatAuditableCurrency(
93
- value: number | null,
94
- currency: CostCurrency,
95
- locale: CostLocale,
96
- ): string {
97
- if (value === null) return locale === "pt-BR" ? "Indispon\u00edvel" : "Unavailable";
98
- return formatCurrency(value, currency, locale);
99
- }
100
-
101
- export function formatAuditableDuration(value: number | null, locale: CostLocale): string {
102
- if (value === null) return locale === "pt-BR" ? "Indisponível" : "Unavailable";
103
- return value === 0 ? "0" : formatDurationMs(value, locale);
104
- }
105
-
106
- const formatInvocationNumber = (value: number | null, locale: CostLocale) =>
107
- formatAuditableNumber(value, locale);
108
- const formatInvocationCurrency = (
109
- value: number | null,
110
- currency: CostCurrency,
111
- locale: CostLocale,
112
- ) => formatAuditableCurrency(value, currency, locale);
113
- const formatInvocationDuration = (value: number | null, locale: CostLocale) =>
114
- formatAuditableDuration(value, locale);
115
- const formatInvocationRate = (value: number | null, locale: CostLocale) =>
116
- formatRate(value, locale);
117
- const formatInvocationUsd = (value: number | null, locale: CostLocale) => formatUsd(value, locale);
118
- const formatInvocationBrlRate = (value: number | null, locale: CostLocale) =>
119
- formatBrlRate(value, locale);
120
- const formatInvocationMultiplierPair = (
121
- input: number | null,
122
- output: number | null,
123
- locale: CostLocale,
124
- ) => formatMultiplierPair(input, output, locale);
125
-
126
- export function formatDurationCoverage(value: DurationCoverage, locale: CostLocale): string {
127
- // `known_sum` is a factual elapsed-time observation even when another
128
- // activity in the population is unavailable. Keep completeness and the
129
- // unknown count as coverage metadata; hiding the known portion would turn a
130
- // true observation into an indistinguishable absence.
131
- if (value.known_sum <= 0 && !value.complete)
132
- return locale === "pt-BR" ? "Indisponível" : "Unavailable";
133
- return value.known_sum <= 0 ? "0" : formatDurationMs(value.known_sum, locale);
134
- }
135
-
136
- export function hasKnownDuration(value: DurationCoverage): boolean {
137
- return value.known_sum > 0 || value.coverage_ratio > 0;
138
- }
139
-
140
- export function formatTokenBackedDuration(
141
- value: DurationCoverage,
142
- _totalTokens: number | null,
143
- locale: CostLocale,
144
- ): string {
145
- // Token presence is a financial observation, not evidence of elapsed time.
146
- return formatDurationCoverage(value, locale);
147
- }
148
-
149
- export function costRunsFooterLabel(locale: CostLocale, pageOnly: boolean): string {
150
- if (!pageOnly) return locale === "pt-BR" ? "Total" : "Total";
151
- return locale === "pt-BR" ? "Subtotal da página" : "Page subtotal";
152
- }
153
-
154
- /** Keeps table ordering tied to the raw monetary value, not its localized label. */
155
- export function sortCostValue(
156
- currency: CostCurrency,
157
- brl: number | null,
158
- usd: number | null,
159
- ): number | null {
160
- return currency === "BRL" ? brl : usd;
161
- }
54
+ import {
55
+ costRunsFooterLabel,
56
+ formatInvocationBrlRate,
57
+ formatInvocationCurrency,
58
+ formatInvocationDuration,
59
+ formatInvocationMultiplierPair,
60
+ formatInvocationNumber,
61
+ formatInvocationRate,
62
+ formatInvocationUsd,
63
+ runOriginBadge,
64
+ sortCostValue,
65
+ } from "./cost-table-formatters.js";
162
66
 
163
- export function runOriginBadge(row: Pick<CostRunRow, "prd_id" | "spec_id" | "task_id">): {
164
- label: "PRD" | "SPEC" | "Tarefa avulsa";
165
- tone: "prd" | "spec" | "task";
166
- } {
167
- if (row.prd_id !== null) return { label: "PRD", tone: "prd" };
168
- if (row.spec_id !== null) return { label: "SPEC", tone: "spec" };
169
- return { label: "Tarefa avulsa", tone: "task" };
170
- }
67
+ export {
68
+ costRunsFooterLabel,
69
+ displayCostGroupLabel,
70
+ formatAuditableCompactNumber,
71
+ formatAuditableCurrency,
72
+ formatAuditableDuration,
73
+ formatAuditableNumber,
74
+ formatDurationCoverage,
75
+ formatTokenBackedDuration,
76
+ hasKnownDuration,
77
+ runOriginBadge,
78
+ sortCostValue,
79
+ } from "./cost-table-formatters.js";
171
80
 
172
81
  export function CostRunsTable({
173
82
  rows,
@@ -503,399 +412,14 @@ function inclusiveTokenTotal(
503
412
  : row.total_tokens;
504
413
  }
505
414
 
506
- function costPeriodHeading(period: "daily" | "monthly" | "annual", locale: CostLocale): string {
415
+ export function costPeriodHeading(
416
+ period: "daily" | "monthly" | "annual",
417
+ locale: CostLocale,
418
+ ): string {
507
419
  if (locale === "en-US") {
508
420
  return period === "daily" ? "Day" : period === "monthly" ? "Month" : "Year";
509
421
  }
510
422
  return period === "daily" ? "Dia" : period === "monthly" ? "Mês" : "Ano";
511
423
  }
512
424
 
513
- export function CostGroupsTable({
514
- rows,
515
- currency,
516
- locale,
517
- onOpenTrace,
518
- period,
519
- showDateTime = true,
520
- showAgentIdentity = false,
521
- showInvocationTasks = false,
522
- showModelLifecycleDetails = false,
523
- dateHeading,
524
- labelHeading,
525
- totals: suppliedTotals,
526
- loading = false,
527
- }: {
528
- rows: readonly CostGroupRow[];
529
- currency: CostCurrency;
530
- locale: CostLocale;
531
- onOpenTrace?: (taskId: string) => void;
532
- period?: "daily" | "monthly" | "annual";
533
- showDateTime?: boolean;
534
- showAgentIdentity?: boolean;
535
- showInvocationTasks?: boolean;
536
- showModelLifecycleDetails?: boolean;
537
- dateHeading?: string;
538
- labelHeading?: string;
539
- totals?: CostGroupTotals;
540
- loading?: boolean;
541
- }) {
542
- const displayCount = (value: number | null) =>
543
- formatFactualCount(
544
- showAgentIdentity || showModelLifecycleDetails ? (value ?? 0) : value,
545
- locale,
546
- );
547
- const displayDuration = (value: DurationCoverage) =>
548
- (showAgentIdentity || showModelLifecycleDetails) && value.known_sum <= 0
549
- ? "0"
550
- : formatDurationCoverage(value, locale);
551
- const displayCurrency = (value: number | null) =>
552
- formatAuditableCurrency(
553
- showAgentIdentity || showModelLifecycleDetails ? (value ?? 0) : value,
554
- currency,
555
- locale,
556
- );
557
- const conversationCount = (row: unknown): number | null =>
558
- (row as { conversation_count?: number | null }).conversation_count ?? null;
559
- const pageTotals = {
560
- runs: rows.reduce((sum, row) => sum + row.run_count, 0),
561
- tasks: sumNumbers(rows.map((row) => row.task_count)),
562
- prds: sumNumbers(rows.map((row) => row.prd_count)),
563
- specs: sumNumbers(rows.map((row) => row.spec_count)),
564
- evidences: sumNumbers(rows.map((row) => row.evidence_count)),
565
- tests: sumNumbers(rows.map((row) => row.test_count)),
566
- conversations: sumNumbers(rows.map(conversationCount)),
567
- durationKnownMs: rows.reduce((sum, row) => sum + row.duration.known_sum, 0),
568
- durationPartial: rows.some((row) => !row.duration.complete),
569
- tokens: sumNumbers(rows.map((row) => row.total_tokens)),
570
- usd: sumNumbers(rows.map((row) => row.estimated_usd)),
571
- brl: sumNumbers(rows.map((row) => row.estimated_brl)),
572
- };
573
- const totals =
574
- suppliedTotals === undefined
575
- ? pageTotals
576
- : {
577
- runs: suppliedTotals.run_count,
578
- tasks: suppliedTotals.task_count,
579
- prds: suppliedTotals.prd_count,
580
- specs: suppliedTotals.spec_count,
581
- evidences: suppliedTotals.evidence_count,
582
- tests: suppliedTotals.test_count,
583
- conversations: conversationCount(suppliedTotals) ?? pageTotals.conversations,
584
- durationKnownMs: suppliedTotals.duration.known_sum,
585
- durationPartial: !suppliedTotals.duration.complete,
586
- tokens: suppliedTotals.total_tokens,
587
- usd: suppliedTotals.estimated_usd,
588
- brl: suppliedTotals.estimated_brl,
589
- };
590
- const totalDurationDisplay = displayDuration(
591
- suppliedTotals?.duration ?? {
592
- known_sum: totals.durationKnownMs,
593
- unknown: totals.durationPartial ? 1 : 0,
594
- complete: !totals.durationPartial,
595
- // Group-level coverage is intentionally preserved separately from the
596
- // factual known sum. Individual rows retain their original provenance.
597
- coverage_ratio: totals.durationPartial ? 0 : 1,
598
- },
599
- );
600
- const totalTokensDisplay = formatAuditableCompactNumber(
601
- showModelLifecycleDetails ? (totals.tokens ?? 0) : totals.tokens,
602
- locale,
603
- );
604
- const totalCostDisplay = displayCurrency(currency === "BRL" ? totals.brl : totals.usd);
605
- const totalAriaLabel = costPeriodTotalAriaLabel({
606
- locale,
607
- duration: totalDurationDisplay,
608
- tokens: totalTokensDisplay,
609
- cost: totalCostDisplay,
610
- currency,
611
- });
612
- const totalLabel = locale === "pt-BR" ? "Total geral" : "Grand total";
613
- return (
614
- <DataTable
615
- columns={[
616
- {
617
- key: "latestStartedAt",
618
- label: dateHeading ?? (locale === "pt-BR" ? "Data e hora" : "Date and time"),
619
- render: (row) => formatDateTime(row.latest_started_at, locale),
620
- hidden: !showDateTime,
621
- footer: showDateTime ? <output aria-label={totalLabel}>Total</output> : undefined,
622
- },
623
- ...(showAgentIdentity
624
- ? [
625
- {
626
- key: "persona",
627
- label: locale === "pt-BR" ? "Persona" : "Persona",
628
- render: (row: CostGroupRow) => row.persona ?? "",
629
- },
630
- {
631
- key: "job",
632
- label: locale === "pt-BR" ? "Cargo" : "Job",
633
- render: (row: CostGroupRow) => row.job ?? "",
634
- },
635
- ]
636
- : []),
637
- {
638
- key: "label",
639
- label:
640
- period === undefined
641
- ? (labelHeading ?? (locale === "pt-BR" ? "Grupo" : "Group"))
642
- : costPeriodHeading(period, locale),
643
- render: (row) => {
644
- if (period !== undefined) {
645
- return <strong>{formatCostPeriodLabel(row.key, period, locale)}</strong>;
646
- }
647
- const displayLabel = displayCostGroupLabel(row.label, locale);
648
- const unavailableLabel = displayLabel !== row.label;
649
- return (
650
- <>
651
- <strong>{displayLabel}</strong>
652
- {unavailableLabel || row.key === row.label ? null : <small>{row.key}</small>}
653
- </>
654
- );
655
- },
656
- sortValue: (row) => row.key,
657
- footer: showDateTime ? undefined : <output aria-label={totalLabel}>Total</output>,
658
- },
659
- ...(period === undefined && !showAgentIdentity && !showModelLifecycleDetails
660
- ? [
661
- {
662
- key: "runs",
663
- label: locale === "pt-BR" ? "Invocações" : "Agent invocations",
664
- render: (row: CostGroupRow) => row.run_count,
665
- align: "right" as const,
666
- footer: totals.runs,
667
- },
668
- ...(showAgentIdentity
669
- ? []
670
- : [
671
- {
672
- key: "tasks",
673
- label:
674
- showAgentIdentity || showInvocationTasks
675
- ? locale === "pt-BR"
676
- ? "Tarefas com invocação"
677
- : "Tasks with invocations"
678
- : locale === "pt-BR"
679
- ? "Tarefas criadas"
680
- : "Tasks created",
681
- render: (row: CostGroupRow) => row.task_count ?? 0,
682
- align: "right" as const,
683
- footer: totals.tasks,
684
- },
685
- ]),
686
- ]
687
- : [
688
- {
689
- key: "prds",
690
- label: "PRDs",
691
- render: (row: CostGroupRow) => displayCount(row.prd_count),
692
- sortValue: (row: CostGroupRow) => row.prd_count ?? 0,
693
- align: "right" as const,
694
- footer: displayCount(totals.prds),
695
- description: localizedDescription(
696
- locale,
697
- showAgentIdentity
698
- ? "PRDs com criação atribuída ao agente por Run registrado. Conta apenas vínculos observados, sem duplicar IDs."
699
- : "PRDs criados por vínculo canônico com um único modelo financeiro observado. Sem essa prova, o indicador exibido é 0.",
700
- "PRDs created through a canonical link to one observed financial model. Without that evidence, the displayed indicator is 0.",
701
- ),
702
- },
703
- {
704
- key: "specs",
705
- label: "SPECs",
706
- render: (row: CostGroupRow) => displayCount(row.spec_count),
707
- sortValue: (row: CostGroupRow) => row.spec_count ?? 0,
708
- align: "right" as const,
709
- footer: displayCount(totals.specs),
710
- description: localizedDescription(
711
- locale,
712
- showAgentIdentity
713
- ? "SPECs com criação atribuída ao agente por Run registrado. Conta apenas vínculos observados, sem duplicar IDs."
714
- : "SPECs criadas por vínculo canônico com um único modelo financeiro observado. Sem essa prova, o indicador exibido é 0.",
715
- "SPECs created through a canonical link to one observed financial model. Without that evidence, the displayed indicator is 0.",
716
- ),
717
- },
718
- {
719
- key: "tasks",
720
- label: showAgentIdentity
721
- ? locale === "pt-BR"
722
- ? "Tarefas"
723
- : "Tasks"
724
- : showModelLifecycleDetails
725
- ? "Tasks"
726
- : locale === "pt-BR"
727
- ? "Tarefas criadas"
728
- : "Tasks created",
729
- render: (row: CostGroupRow) => displayCount(row.task_count),
730
- sortValue: (row: CostGroupRow) => row.task_count ?? 0,
731
- align: "right" as const,
732
- footer: displayCount(totals.tasks),
733
- description: localizedDescription(
734
- locale,
735
- showAgentIdentity
736
- ? "Tasks distintas em que o agente participou no período. Uma Task pode contar em vários agentes; o total soma essas participações entre agentes. Sem participação, mostra 0."
737
- : "Tasks contam apenas quando creation_run_id tem um único modelo financeiro observável. Participação posterior não é criação; ausência ou multi-modelo exibe 0.",
738
- "Tasks count only when creation_run_id has one observed financial model. Later participation is not creation; missing or multi-model linkage displays 0.",
739
- ),
740
- },
741
- ...(showModelLifecycleDetails
742
- ? [
743
- {
744
- key: "conversations",
745
- label: "Conversations",
746
- render: (row: CostGroupRow) => displayCount(conversationCount(row)),
747
- sortValue: (row: CostGroupRow) => conversationCount(row) ?? 0,
748
- align: "right" as const,
749
- footer: displayCount(totals.conversations),
750
- description: localizedDescription(
751
- locale,
752
- "Conversas canônicas, incluindo turns unassisted legados. Cada ID conta uma vez por modelo; um modelo múltiplo pode repetir. Run com Task e conversa de origem não cria Task adicional.",
753
- "Canonical conversations, including legacy unassisted turns. Each ID counts once per model; a multi-model conversation may repeat. A Run with a Task and source conversation does not create an additional Task.",
754
- ),
755
- },
756
- ]
757
- : []),
758
- {
759
- key: "runs",
760
- label: "Runs",
761
- render: (row: CostGroupRow) => row.run_count,
762
- sortValue: (row: CostGroupRow) => row.run_count,
763
- align: "right" as const,
764
- footer: totals.runs,
765
- description: localizedDescription(
766
- locale,
767
- showAgentIdentity
768
- ? "Chamadas observadas atribuídas ao agente no período selecionado."
769
- : "Runs financeiros observados neste modelo, sem distribuir ou duplicar custo, tokens e tempo entre modelos.",
770
- "Observed financial Runs for this model, without allocating or duplicating cost, tokens, or time across models.",
771
- ),
772
- },
773
- {
774
- key: "tests",
775
- label: locale === "pt-BR" ? "Testes" : "Tests",
776
- render: (row: CostGroupRow) => displayCount(row.test_count),
777
- sortValue: (row: CostGroupRow) => row.test_count ?? 0,
778
- align: "right" as const,
779
- footer: displayCount(totals.tests),
780
- description: localizedDescription(
781
- locale,
782
- showAgentIdentity
783
- ? "Registros de testes distintos vinculados ao Run do agente no período. Revisões e outras validações não são contadas como testes."
784
- : "Validações canônicas cuja artifact_run_id coincide com a Run registradora deste modelo; ausência de prova exibe 0.",
785
- "Canonical validations whose artifact_run_id matches this model's registering Run; missing evidence displays 0.",
786
- ),
787
- },
788
- {
789
- key: "evidences",
790
- label: locale === "pt-BR" ? "Evidências" : "Evidence",
791
- render: (row: CostGroupRow) => displayCount(row.evidence_count),
792
- sortValue: (row: CostGroupRow) => row.evidence_count ?? 0,
793
- align: "right" as const,
794
- footer: displayCount(totals.evidences),
795
- description: localizedDescription(
796
- locale,
797
- showAgentIdentity
798
- ? "Evidências distintas vinculadas ao Run do agente no período. Conta apenas vínculos registrados."
799
- : "Evidências canônicas cuja artifact_run_id coincide com a Run registradora deste modelo; o total não duplica a mesma evidência. Sem prova, exibe 0.",
800
- "Canonical evidence whose artifact_run_id matches this model's registering Run; the total does not duplicate the same evidence. Missing proof displays 0.",
801
- ),
802
- },
803
- ]),
804
- {
805
- key: "duration",
806
- label: "Tempo",
807
- render: (row) => displayDuration(row.duration),
808
- sortValue: (row) =>
809
- hasKnownDuration(row.duration)
810
- ? row.duration.known_sum
811
- : showModelLifecycleDetails
812
- ? 0
813
- : null,
814
- align: "right",
815
- footer: <output aria-label={totalAriaLabel}>{totalDurationDisplay}</output>,
816
- },
817
- {
818
- key: "tokens",
819
- label: "Tokens",
820
- render: (row) =>
821
- formatAuditableCompactNumber(
822
- showModelLifecycleDetails ? (row.total_tokens ?? 0) : row.total_tokens,
823
- locale,
824
- ),
825
- sortValue: (row) =>
826
- showModelLifecycleDetails ? (row.total_tokens ?? 0) : row.total_tokens,
827
- align: "right",
828
- footer: <output aria-label={totalAriaLabel}>{totalTokensDisplay}</output>,
829
- },
830
- {
831
- key: "cost",
832
- label:
833
- showAgentIdentity || showModelLifecycleDetails || period !== undefined
834
- ? locale === "pt-BR"
835
- ? "Custos"
836
- : "Costs"
837
- : period === undefined
838
- ? locale === "pt-BR"
839
- ? "Custo"
840
- : "Cost"
841
- : locale === "pt-BR"
842
- ? "Custos"
843
- : "Costs",
844
- render: (row) =>
845
- displayCurrency(currency === "BRL" ? row.estimated_brl : row.estimated_usd),
846
- sortValue: (row) =>
847
- showModelLifecycleDetails
848
- ? (sortCostValue(currency, row.estimated_brl, row.estimated_usd) ?? 0)
849
- : sortCostValue(currency, row.estimated_brl, row.estimated_usd),
850
- align: "right",
851
- footer: <output aria-label={totalAriaLabel}>{totalCostDisplay}</output>,
852
- },
853
- ...(onOpenTrace
854
- ? [
855
- {
856
- key: "trace",
857
- label: "",
858
- render: (row: CostGroupRow) => (
859
- <button
860
- aria-label="Abrir detalhes"
861
- className="cost-row-action"
862
- onClick={(event) => {
863
- event.stopPropagation();
864
- onOpenTrace(row.key);
865
- }}
866
- type="button"
867
- >
868
- <MoreVerticalIcon />
869
- </button>
870
- ),
871
- },
872
- ]
873
- : []),
874
- ]}
875
- defaultSort={
876
- showAgentIdentity
877
- ? { key: "cost", direction: "desc" }
878
- : period === undefined
879
- ? null
880
- : { key: "label", direction: "desc" }
881
- }
882
- locale={locale}
883
- emptyMessage={
884
- loading
885
- ? locale === "pt-BR"
886
- ? "Carregando…"
887
- : "Loading…"
888
- : locale === "pt-BR"
889
- ? "Nenhum dado disponível."
890
- : "No data available."
891
- }
892
- pageSize={100}
893
- rowKey={(row) => row.key}
894
- onRowClick={onOpenTrace === undefined ? undefined : (row) => onOpenTrace(row.key)}
895
- rows={rows}
896
- scrollLabel={costGroupsScrollLabel(locale)}
897
- showColumnInfo
898
- sortable
899
- />
900
- );
901
- }
425
+ export { CostGroupsTable } from "./CostGroupsTable.js";
@@ -0,0 +1,74 @@
1
+ import { loadCostDeveloperAttribution } from "./CostDeveloperAttributionPanel.js";
2
+
3
+ export function buildCostMonitorExportSources(context: Record<string, any>) {
4
+ const { developerAttributionRange, filters, globalFilters, groupPageRange, loadGroupPage, view } =
5
+ context;
6
+ // The developer table is paginated only by the DataTable in the browser.
7
+ // Its API response is the full attributed population, so export from the
8
+ // same endpoint and exact active period instead of the visible ten rows.
9
+ const developerExportSource =
10
+ view === "developers"
11
+ ? {
12
+ prepare: async () => {
13
+ const developerRows = await loadCostDeveloperAttribution({
14
+ ...(developerAttributionRange === undefined ? {} : developerAttributionRange),
15
+ });
16
+ return {
17
+ totalRows: developerRows.length,
18
+ pages: async function* () {
19
+ yield developerRows as readonly Record<string, unknown>[];
20
+ },
21
+ };
22
+ },
23
+ }
24
+ : undefined;
25
+ // Period views are paginated SQLite projections too. Exporting their
26
+ // already-rendered group rows truncates the workbook to the visible page
27
+ // (and can lose the projection's factual duration). Capture the same
28
+ // paged query used by the table so an All Time selection keeps its unbound
29
+ // range and every other selection retains its exact range and filters.
30
+ const costGroupExportSource =
31
+ (view === "daily" ||
32
+ view === "monthly" ||
33
+ view === "annual" ||
34
+ view === "agents" ||
35
+ view === "models" ||
36
+ view === "providers") &&
37
+ loadGroupPage !== undefined
38
+ ? {
39
+ prepare: async () => {
40
+ const query = filters.query || globalFilters?.query || "";
41
+ const firstPage = await loadGroupPage({
42
+ view,
43
+ offset: 0,
44
+ limit: 50,
45
+ filters,
46
+ ...(query ? { query } : {}),
47
+ ...(groupPageRange === undefined ? {} : groupPageRange),
48
+ });
49
+ return {
50
+ totalRows: firstPage.total_count,
51
+ pages: async function* () {
52
+ let page = firstPage;
53
+ while (true) {
54
+ if (page.rows.length === 0) return;
55
+ yield page.rows as unknown as readonly Record<string, unknown>[];
56
+ const nextOffset = page.offset + page.rows.length;
57
+ if (nextOffset >= page.total_count || !page.has_more) return;
58
+ page = await loadGroupPage({
59
+ view,
60
+ offset: nextOffset,
61
+ limit: page.limit,
62
+ filters,
63
+ ...(query ? { query } : {}),
64
+ ...(groupPageRange === undefined ? {} : groupPageRange),
65
+ });
66
+ }
67
+ },
68
+ };
69
+ },
70
+ }
71
+ : undefined;
72
+
73
+ return { developerExportSource, costGroupExportSource };
74
+ }
@@ -0,0 +1,19 @@
1
+ import type { RunProjection } from "@zaip-ai/dashboard-operations/contracts";
2
+ import { type CostCurrency, type CostLocale, localeCurrency } from "./cost-monitor-copy.js";
3
+ import { findRunDetails } from "./cost-monitor-page-helpers.js";
4
+ export function changeCostLocale(
5
+ next: CostLocale,
6
+ onLocaleChange: (value: CostLocale) => void,
7
+ setCurrency: (value: CostCurrency) => void,
8
+ ) {
9
+ onLocaleChange(next);
10
+ setCurrency(localeCurrency(next));
11
+ }
12
+ export function openCostRunDetails(
13
+ runId: string,
14
+ runs: readonly RunProjection[],
15
+ setSelectedRun: (run: RunProjection) => void,
16
+ ) {
17
+ const run = findRunDetails(runs, runId);
18
+ if (run) setSelectedRun(run);
19
+ }