@zaip-ai/cli 2.2.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. package/README.md +36 -13
  2. package/dist/services/adapters.d.ts +1 -1
  3. package/dist/services/adapters.d.ts.map +1 -1
  4. package/dist/services/adapters.js +26 -9
  5. package/dist/services/adapters.js.map +1 -1
  6. package/dist/services/agent-adapters.js +37 -18
  7. package/dist/services/agent-adapters.js.map +1 -1
  8. package/dist/services/agent-discovery.d.ts +27 -0
  9. package/dist/services/agent-discovery.d.ts.map +1 -0
  10. package/dist/services/agent-discovery.js +73 -0
  11. package/dist/services/agent-discovery.js.map +1 -0
  12. package/dist/services/codex-conversation-lifecycle-hook.d.ts.map +1 -1
  13. package/dist/services/codex-conversation-lifecycle-hook.js +164 -24
  14. package/dist/services/codex-conversation-lifecycle-hook.js.map +1 -1
  15. package/dist/services/codex-pre-tool-hook-template.d.ts.map +1 -1
  16. package/dist/services/codex-pre-tool-hook-template.js +146 -72
  17. package/dist/services/codex-pre-tool-hook-template.js.map +1 -1
  18. package/dist/services/codex-rules.d.ts +1 -1
  19. package/dist/services/codex-rules.d.ts.map +1 -1
  20. package/dist/services/codex-rules.js +3 -3
  21. package/dist/services/codex-subagent-hook-template.d.ts +1 -1
  22. package/dist/services/codex-subagent-hook-template.d.ts.map +1 -1
  23. package/dist/services/codex-subagent-hook-template.js +117 -66
  24. package/dist/services/codex-subagent-hook-template.js.map +1 -1
  25. package/dist/services/install-agents-template.d.ts.map +1 -1
  26. package/dist/services/install-agents-template.js +65 -7
  27. package/dist/services/install-agents-template.js.map +1 -1
  28. package/dist/services/logger.js +1 -1
  29. package/dist/services/logger.js.map +1 -1
  30. package/dist/services/logger.test.js +22 -1
  31. package/dist/services/logger.test.js.map +1 -1
  32. package/dist/services/runtime-template.test.js +153 -1
  33. package/dist/services/runtime-template.test.js.map +1 -1
  34. package/dist/services/transactional-files.d.ts.map +1 -1
  35. package/dist/services/transactional-files.js +59 -14
  36. package/dist/services/transactional-files.js.map +1 -1
  37. package/package.json +1 -1
  38. package/templates/.agents/.env.example +9 -3
  39. package/templates/.agents/README-ENG.md +101 -15
  40. package/templates/.agents/README.md +102 -17
  41. package/templates/.agents/architecture/software-architecture.md +1 -59
  42. package/templates/.agents/branding/brandbook.md +3 -0
  43. package/templates/.agents/config/agents/catalog.yaml +25 -10
  44. package/templates/.agents/config/agents/discovery.json +319 -0
  45. package/templates/.agents/config/clients/codex/agents/zaip-agent-analyst.toml +1 -1
  46. package/templates/.agents/config/clients/codex/agents/zaip-agent-auditor.toml +1 -1
  47. package/templates/.agents/config/clients/codex/agents/zaip-agent-backend.toml +3 -3
  48. package/templates/.agents/config/clients/codex/agents/zaip-agent-brand-strategist.toml +1 -1
  49. package/templates/.agents/config/clients/codex/agents/zaip-agent-builder.toml +3 -3
  50. package/templates/.agents/config/clients/codex/agents/zaip-agent-cloud-engineer.toml +12 -9
  51. package/templates/.agents/config/clients/codex/agents/zaip-agent-data-analyst.toml +1 -1
  52. package/templates/.agents/config/clients/codex/agents/zaip-agent-designer.toml +3 -3
  53. package/templates/.agents/config/clients/codex/agents/zaip-agent-finalizer.toml +2 -2
  54. package/templates/.agents/config/clients/codex/agents/zaip-agent-frontend.toml +3 -3
  55. package/templates/.agents/config/clients/codex/agents/zaip-agent-general-operations.toml +1 -1
  56. package/templates/.agents/config/clients/codex/agents/zaip-agent-governance-compliance.toml +1 -1
  57. package/templates/.agents/config/clients/codex/agents/zaip-agent-growth-strategist.toml +1 -1
  58. package/templates/.agents/config/clients/codex/agents/zaip-agent-integrator.toml +1 -1
  59. package/templates/.agents/config/clients/codex/agents/zaip-agent-marketing-analyst.toml +1 -1
  60. package/templates/.agents/config/clients/codex/agents/zaip-agent-orchestrator.toml +13 -10
  61. package/templates/.agents/config/clients/codex/agents/zaip-agent-refactoring-specialist.toml +1 -1
  62. package/templates/.agents/config/clients/codex/agents/zaip-agent-reviewer.toml +1 -1
  63. package/templates/.agents/config/clients/codex/agents/zaip-agent-sales-specialist.toml +1 -1
  64. package/templates/.agents/config/clients/codex/agents/zaip-agent-security-auditor.toml +1 -1
  65. package/templates/.agents/config/clients/codex/agents/zaip-agent-task-executor.toml +3 -3
  66. package/templates/.agents/config/clients/codex/agents/zaip-agent-website-developer.toml +3 -3
  67. package/templates/.agents/config/clients/codex/agents/zaip-agent-writer.toml +1 -1
  68. package/templates/.agents/config/pricing/models.json +9 -5
  69. package/templates/.agents/config/project.yaml +22 -2
  70. package/templates/.agents/dashboard/.zaip-managed.json +530 -138
  71. package/templates/.agents/dashboard/README.md +16 -0
  72. package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-CEDZjl4V.js +1 -0
  73. package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-DaSllaJp.js → DashboardHelpDialog-TnrL1ZyZ.js} +967 -578
  74. package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-DjQpBqGU.js +1 -0
  75. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-B9GWkEyN.css +1 -0
  76. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-BAvLPAee.js +3 -0
  77. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BQZXUnQu.js +1 -0
  78. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-06__WZco.js +68 -0
  79. package/templates/.agents/dashboard/apps/frontend/dist/assets/dashboard-localization-Basaw1NR.js +824 -0
  80. package/templates/.agents/dashboard/apps/frontend/dist/assets/{icons-vendor-TPUT2IUt.js → icons-vendor-DEmo6Tn2.js} +1 -1
  81. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-BQe3zTvL.js +2 -0
  82. package/templates/.agents/dashboard/apps/frontend/dist/assets/{react-vendor-Ct48XHGL.js → react-vendor-CadYsm83.js} +1 -1
  83. package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-Bh1tDfsg.js +1 -0
  84. package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-BzKK8kK3.js +1 -0
  85. package/templates/.agents/dashboard/apps/frontend/dist/index.html +6 -6
  86. package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
  87. package/templates/.agents/dashboard/apps/frontend/src/App.tsx +3 -1264
  88. package/templates/.agents/dashboard/apps/frontend/src/AppDashboardContent.tsx +368 -0
  89. package/templates/.agents/dashboard/apps/frontend/src/AutonomySettings.tsx +82 -0
  90. package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.dom.test.ts +130 -0
  91. package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +206 -157
  92. package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +3 -1
  93. package/templates/.agents/dashboard/apps/frontend/src/__tests__/app-composition-support.ts +12 -0
  94. package/templates/.agents/dashboard/apps/frontend/src/cost-monitor-population.test.tsx +149 -0
  95. package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +9 -7
  96. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api-settings.ts +152 -0
  97. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.test.ts +19 -0
  98. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +50 -154
  99. package/templates/.agents/dashboard/apps/frontend/src/dashboard-app-shell.tsx +33 -0
  100. package/templates/.agents/dashboard/apps/frontend/src/dashboard-cost-facts.test.ts +54 -0
  101. package/templates/.agents/dashboard/apps/frontend/src/dashboard-cost-facts.ts +48 -0
  102. package/templates/.agents/dashboard/apps/frontend/src/dashboard-localization.test.ts +37 -43
  103. package/templates/.agents/dashboard/apps/frontend/src/dashboard-localization.ts +9 -251
  104. package/templates/.agents/dashboard/apps/frontend/src/dashboard-project-overview.ts +35 -2
  105. package/templates/.agents/dashboard/apps/frontend/src/dashboard-retry.ts +17 -0
  106. package/templates/.agents/dashboard/apps/frontend/src/dashboard-setup-route.ts +29 -0
  107. package/templates/.agents/dashboard/apps/frontend/src/dashboard-view-actions.test.ts +51 -0
  108. package/templates/.agents/dashboard/apps/frontend/src/dashboard-view-actions.ts +68 -0
  109. package/templates/.agents/dashboard/apps/frontend/src/operations-period-render.test.ts +38 -2
  110. package/templates/.agents/dashboard/apps/frontend/src/operations-period.test.ts +19 -4
  111. package/templates/.agents/dashboard/apps/frontend/src/operations-period.ts +5 -3
  112. package/templates/.agents/dashboard/apps/frontend/src/overview-status-page.test.ts +2 -2
  113. package/templates/.agents/dashboard/apps/frontend/src/project-installation-status.test.ts +137 -0
  114. package/templates/.agents/dashboard/apps/frontend/src/project-installation-status.ts +66 -0
  115. package/templates/.agents/dashboard/apps/frontend/src/project-settings-copy.ts +181 -0
  116. package/templates/.agents/dashboard/apps/frontend/src/project-settings-model.ts +11 -1
  117. package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +102 -51
  118. package/templates/.agents/dashboard/apps/frontend/src/project-settings-state.css +55 -0
  119. package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +14 -2
  120. package/templates/.agents/dashboard/apps/frontend/src/sao-paulo-day-rollover.test.ts +36 -0
  121. package/templates/.agents/dashboard/apps/frontend/src/sao-paulo-day-rollover.ts +30 -0
  122. package/templates/.agents/dashboard/apps/frontend/src/snapshot-banner-semantics.test.ts +2 -5
  123. package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +31 -20
  124. package/templates/.agents/dashboard/apps/frontend/src/traceability-task-pagination.ts +1 -2
  125. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.test.ts +6 -0
  126. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.ts +2 -0
  127. package/templates/.agents/dashboard/apps/frontend/src/use-app-effects.ts +9 -1
  128. package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-documents.ts +3 -1
  129. package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-task-pagination.ts +66 -0
  130. package/templates/.agents/dashboard/apps/frontend/src/use-app-work-board.ts +397 -0
  131. package/templates/.agents/dashboard/apps/frontend/src/use-dashboard-app-model.tsx +782 -0
  132. package/templates/.agents/dashboard/apps/frontend/src/use-snapshot-notice.tsx +49 -0
  133. package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
  134. package/templates/.agents/dashboard/modules/cost-monitor/src/complete-cost-average.test.ts +73 -0
  135. package/templates/.agents/dashboard/modules/cost-monitor/src/contracts.ts +9 -0
  136. package/templates/.agents/dashboard/modules/cost-monitor/src/period-averages.ts +60 -0
  137. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostDeveloperPanelSlot.tsx +16 -0
  138. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostGroupsTable.tsx +459 -0
  139. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorContent.tsx +8 -22
  140. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.test.ts +27 -17
  141. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +64 -189
  142. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorRunDialog.tsx +20 -0
  143. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostPeriodAverageCards.tsx +32 -8
  144. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables-hides-calls-that-have-no-collected.test.ts +80 -0
  145. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables-keeps-legacy-codex-identity-fields-blank.test.ts +455 -0
  146. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +18 -525
  147. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.tsx +32 -508
  148. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-export-sources.ts +74 -0
  149. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-actions.ts +19 -0
  150. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-selectors.ts +49 -0
  151. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-summary.ts +3 -2
  152. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-table-formatters.ts +115 -0
  153. package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.ts +1 -42
  154. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.ts +2 -1
  155. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.test-fixtures.ts +2 -0
  156. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.ts +3 -2
  157. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +8 -2
  158. package/templates/.agents/dashboard/modules/cost-monitor/src/server/index.ts +1 -0
  159. package/templates/.agents/dashboard/modules/operations/package.json +1 -1
  160. package/templates/.agents/dashboard/modules/operations/src/contracts.ts +4 -0
  161. package/templates/.agents/dashboard/modules/operations/src/react/EntityTableBadges.tsx +34 -0
  162. package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.tsx +8 -38
  163. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview-keeps-structure-classes-mutually-exclusive.test.ts +244 -0
  164. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.helpers.tsx +66 -3
  165. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.test.ts +98 -276
  166. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.tsx +105 -276
  167. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverviewCharts.tsx +171 -0
  168. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverviewPanels.tsx +64 -0
  169. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +9 -17
  170. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageOverview.tsx +3 -0
  171. package/templates/.agents/dashboard/modules/operations/src/react/OverviewCostKpi.tsx +46 -0
  172. package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.test.tsx +2 -1
  173. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.test.ts +28 -1
  174. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.tsx +11 -4
  175. package/templates/.agents/dashboard/modules/operations/src/react/index.ts +1 -0
  176. package/templates/.agents/dashboard/modules/operations/src/react/manual-work-priority.test.ts +2 -1
  177. package/templates/.agents/dashboard/modules/operations/src/react/operations-coverage-toast.test.ts +8 -4
  178. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +34 -22
  179. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview.status-cards.test.ts +3 -1
  180. package/templates/.agents/dashboard/modules/operations/src/react/operations-page-contract.ts +21 -2
  181. package/templates/.agents/dashboard/modules/operations/src/react/overview-cost-card.test.tsx +89 -0
  182. package/templates/.agents/dashboard/modules/operations/src/react/overview-metric-format.ts +32 -0
  183. package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.test.ts +3 -3
  184. package/templates/.agents/dashboard/modules/operations/src/work-board-model.ts +2 -1
  185. package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
  186. package/templates/.agents/dashboard/packages/branding/package.json +1 -1
  187. package/templates/.agents/dashboard/packages/branding/src/index.ts +1 -1
  188. package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
  189. package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
  190. package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +1625 -1613
  191. package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +1592 -1582
  192. package/templates/.agents/dashboard/packages/local-runtime/package.json +3 -2
  193. package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +22 -28
  194. package/templates/.agents/dashboard/packages/local-runtime/server.mjs +1625 -1614
  195. package/templates/.agents/dashboard/packages/local-runtime/src/active-codex-telemetry.ts +25 -0
  196. package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.test.ts +1 -1
  197. package/templates/.agents/dashboard/packages/local-runtime/src/project-installation-summary.test.ts +142 -0
  198. package/templates/.agents/dashboard/packages/local-runtime/src/project-installation-summary.ts +190 -0
  199. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +118 -8
  200. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +92 -36
  201. package/templates/.agents/dashboard/packages/local-runtime/src/projection-refresh-diagnostics.ts +35 -0
  202. package/templates/.agents/dashboard/packages/local-runtime/src/server-browser-lease.test.ts +91 -0
  203. package/templates/.agents/dashboard/packages/local-runtime/src/server-browser-lease.ts +24 -4
  204. package/templates/.agents/dashboard/packages/local-runtime/src/server-costs-routes.ts +168 -0
  205. package/templates/.agents/dashboard/packages/local-runtime/src/server-dual-reads-manifest-summaries-without-losing.test.ts +344 -0
  206. package/templates/.agents/dashboard/packages/local-runtime/src/server-hono-security.test.ts +17 -0
  207. package/templates/.agents/dashboard/packages/local-runtime/src/server-http-contracts.ts +31 -0
  208. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-routes.ts +364 -0
  209. package/templates/.agents/dashboard/packages/local-runtime/src/server-read-projections.ts +461 -0
  210. package/templates/.agents/dashboard/packages/local-runtime/src/server-reconciliation-refresh.test.ts +78 -0
  211. package/templates/.agents/dashboard/packages/local-runtime/src/server-route-context.ts +13 -0
  212. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.test.ts +94 -2
  213. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.ts +62 -12
  214. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.test.ts +44 -0
  215. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.ts +22 -3
  216. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot.test.ts +22 -21
  217. package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-task-trace.test.ts +97 -0
  218. package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-task-trace.ts +10 -13
  219. package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-view-allowlist.test.ts +25 -0
  220. package/templates/.agents/dashboard/packages/local-runtime/src/server-trace-routes.ts +56 -0
  221. package/templates/.agents/dashboard/packages/local-runtime/src/server-traceability-index.test.ts +84 -0
  222. package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.test.ts +2 -30
  223. package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.ts +6 -23
  224. package/templates/.agents/dashboard/packages/local-runtime/src/server.test-fixtures.ts +1 -1
  225. package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +2 -330
  226. package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +87 -1060
  227. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-dimension-facts.test.ts +12 -1
  228. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-file-index.test.ts +69 -0
  229. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-first-fold-cache.ts +3 -1
  230. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-force-canonical.test.ts +3 -1
  231. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-incremental-refresh.test.ts +2 -0
  232. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-first-fold.ts +78 -0
  233. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-projections.ts +570 -0
  234. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-runs.ts +600 -0
  235. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.test.ts +1 -1
  236. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-period-averages.ts +46 -0
  237. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-provider-alias-parity.test.ts +50 -0
  238. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-agent-dimension.ts +269 -0
  239. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-context.ts +32 -0
  240. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-entity-group.ts +244 -0
  241. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-filtered-dimension.ts +303 -0
  242. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-financial.ts +547 -0
  243. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-model-dimension.ts +360 -0
  244. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-provider-dimension.ts +169 -0
  245. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-summary.ts +493 -0
  246. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-temporal-dimension.ts +134 -0
  247. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-timing.ts +299 -0
  248. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-view-page.ts +692 -0
  249. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-counts-every-root-execution-day-returns.test.ts +763 -0
  250. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-does-not-convert-delayed-historical-finalizer.test.ts +706 -0
  251. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-filesystem.ts +762 -0
  252. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-first-fold-types.ts +1 -1
  253. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-keeps-orphan-telemetry-out-kanban-without.test.ts +710 -0
  254. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-marks-token-cost-telemetry-unavailable-when.test.ts +618 -0
  255. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-rebuild.ts +764 -0
  256. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-rebuilds-disposable-snapshot-serves-zaip-records.test.ts +276 -0
  257. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-schema.ts +193 -0
  258. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-source-fingerprint.test.ts +54 -1
  259. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-source-fingerprint.ts +7 -3
  260. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-types.ts +123 -0
  261. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +5 -2806
  262. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.ts +17 -6930
  263. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-risk-population.test.ts +98 -0
  264. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-schema-base-views.ts +390 -0
  265. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-schema-dashboard-views.ts +413 -0
  266. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-snapshot-seed.test.ts +2 -0
  267. package/templates/.agents/dashboard/packages/local-runtime/src/verify-project-settings.mjs +57 -0
  268. package/templates/.agents/dashboard/packages/local-runtime/src/work-priority-contract.test.ts +4 -3
  269. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-build.mjs +195 -0
  270. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-lifecycle.test.mjs +2 -7
  271. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-logging.mjs +35 -0
  272. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-navigation.mjs +114 -0
  273. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-paths.mjs +90 -0
  274. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +89 -418
  275. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +22 -12
  276. package/templates/.agents/dashboard/packages/ui/package.json +1 -1
  277. package/templates/.agents/dashboard/scripts/qualify-observability.mjs +130 -0
  278. package/templates/.agents/dashboard/scripts/verify-autonomy-settings.mjs +175 -0
  279. package/templates/.agents/dashboard/scripts/verify-observability.mjs +254 -0
  280. package/templates/.agents/dashboard/scripts/verify-project-setup.mjs +64 -0
  281. package/templates/.agents/dashboard/tests/e2e/lease-global-setup.ts +37 -0
  282. package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
  283. package/templates/.agents/dashboard/tests/e2e/playwright.config.ts +9 -4
  284. package/templates/.agents/dashboard/tests/e2e/specs/cost-monitor-period-transition.spec.ts +22 -1
  285. package/templates/.agents/dashboard/tests/e2e/specs/dashboard-performance-matrix.spec.ts +17 -8
  286. package/templates/.agents/dashboard/tests/e2e/specs/dashboard.spec.ts +47 -6
  287. package/templates/.agents/dashboard/tests/e2e/specs/lease-lifetime.spec.ts +14 -0
  288. package/templates/.agents/dashboard/tests/observability-fixture.mjs +200 -0
  289. package/templates/.agents/design/.zaip-managed.json +86 -42
  290. package/templates/.agents/design/DESIGN.md +2 -186
  291. package/templates/.agents/design/README.md +12 -2
  292. package/templates/.agents/design/apps/catalog/dist/assets/index-BJV597iq.js +72 -0
  293. package/templates/.agents/design/apps/catalog/dist/assets/index-BOjCcUaU.js +72 -0
  294. package/templates/.agents/design/apps/catalog/dist/assets/index-B_WhrCZe.js +72 -0
  295. package/templates/.agents/design/apps/catalog/dist/assets/index-CqtYXZfV.js +72 -0
  296. package/templates/.agents/design/apps/catalog/dist/assets/index-D_lfqoyx.js +72 -0
  297. package/templates/.agents/design/apps/catalog/dist/assets/index-i_PO2k9R.js +9 -0
  298. package/templates/.agents/design/apps/catalog/dist/index.html +1 -1
  299. package/templates/.agents/design/apps/catalog/dist/storybook/assets/CatalogShell-Cstn1UwA.js +1 -0
  300. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{Color-6AOWCN3U-B-kAgAjB.js → Color-6AOWCN3U-Cm-yJJz_.js} +1 -1
  301. package/templates/.agents/design/apps/catalog/dist/storybook/assets/Components.stories-D1WopB2L.js +137 -0
  302. package/templates/.agents/design/apps/catalog/dist/storybook/assets/DesignSystem.stories-DQ9PJ3N3.js +1 -0
  303. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{DocsRenderer-JROSPFPF-BVN7xHtv.js → DocsRenderer-JROSPFPF-Belk4jRr.js} +4 -4
  304. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{WithTooltip-7X4HQR7L-CDHtKYkz.js → WithTooltip-7X4HQR7L-DoPvjkS1.js} +1 -1
  305. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{chunk-DRQKCCAG-D6AsDkMK.js → chunk-DRQKCCAG-B1itKXEN.js} +1 -1
  306. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{chunk-W22LQPXL-B4m5uloN.js → chunk-W22LQPXL-C-Eb5SPY.js} +1 -1
  307. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{components-CN8YyTUg.js → components-DnyKLwhj.js} +5 -5
  308. package/templates/.agents/design/apps/catalog/dist/storybook/assets/formatter-L2YTDE3Q-D0OSgxWz.js +1 -0
  309. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{iframe-9yZfIsdT.js → iframe-DcXBsFPz.js} +3 -3
  310. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{react-18-BoCSnq6H.js → react-18-CRM89QRf.js} +1 -1
  311. package/templates/.agents/design/apps/catalog/dist/storybook/assets/react-C3tkVMIp.js +1 -0
  312. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{syntaxhighlighter-YFXUGROL-Bnn_nMwJ.js → syntaxhighlighter-YFXUGROL-B03jQGTF.js} +1 -1
  313. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{theming-DS_ue2sb.js → theming-4ZyufAga.js} +1 -1
  314. package/templates/.agents/design/apps/catalog/dist/storybook/iframe.html +1 -1
  315. package/templates/.agents/design/apps/catalog/dist/storybook/index.json +1 -1
  316. package/templates/.agents/design/apps/catalog/package.json +2 -2
  317. package/templates/.agents/design/apps/catalog/src/components/AutonomySpecimen.tsx +15 -0
  318. package/templates/.agents/design/apps/catalog/src/components/CostPopulationSpecimen.test.tsx +19 -0
  319. package/templates/.agents/design/apps/catalog/src/components/CostPopulationSpecimen.tsx +45 -0
  320. package/templates/.agents/design/apps/catalog/src/components/EstimatedCostSpecimen.tsx +48 -0
  321. package/templates/.agents/design/apps/catalog/src/components/ProjectStatusSpecimen.tsx +169 -0
  322. package/templates/.agents/design/apps/catalog/src/pages/ComponentsPage.tsx +55 -0
  323. package/templates/.agents/design/apps/catalog/src/stories/Components.stories.tsx +60 -0
  324. package/templates/.agents/design/packages/local-runtime/package.json +1 -1
  325. package/templates/.agents/growth/strategy.md +3 -0
  326. package/templates/.agents/marketing/strategy.md +3 -0
  327. package/templates/.agents/requirements/autonomous-assurance.md +2 -1
  328. package/templates/.agents/requirements/cloud-hostinger-autonomy.md +1 -1
  329. package/templates/.agents/requirements/comparative-audit.md +1 -1
  330. package/templates/.agents/requirements/context-engine.md +1 -1
  331. package/templates/.agents/requirements/cost-observability.md +1 -1
  332. package/templates/.agents/requirements/dashboard-launch.md +1 -1
  333. package/templates/.agents/requirements/data-export.md +1 -1
  334. package/templates/.agents/requirements/design-system.md +13 -4
  335. package/templates/.agents/requirements/execution-engine.md +1 -1
  336. package/templates/.agents/requirements/kanban-dashboard.md +1 -1
  337. package/templates/.agents/requirements/model-orchestration.md +1 -1
  338. package/templates/.agents/requirements/public-distribution.md +4 -2
  339. package/templates/.agents/requirements/software-architecture.md +1 -1
  340. package/templates/.agents/requirements/strategic-improvements.md +1 -1
  341. package/templates/.agents/requirements/work-lifecycle.md +6 -6
  342. package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
  343. package/templates/.agents/rules/architecture.md +2 -0
  344. package/templates/.agents/rules/astra-diagnostic.md +3 -1
  345. package/templates/.agents/rules/autonomy-decision.md +12 -2
  346. package/templates/.agents/rules/cloud-hostinger-autonomy.md +2 -0
  347. package/templates/.agents/rules/context.md +2 -1
  348. package/templates/.agents/rules/core.md +15 -4
  349. package/templates/.agents/rules/design-system-central-contract.md +17 -0
  350. package/templates/.agents/rules/evolution.md +3 -1
  351. package/templates/.agents/rules/frontend-lite.md +3 -1
  352. package/templates/.agents/rules/local-sqlite-storage.md +2 -2
  353. package/templates/.agents/rules/meta-mcp.md +3 -1
  354. package/templates/.agents/rules/model-orchestration.md +1 -1
  355. package/templates/.agents/rules/run-lifecycle-closure.md +11 -7
  356. package/templates/.agents/rules/security.md +3 -1
  357. package/templates/.agents/rules/specialist-routing.md +3 -1
  358. package/templates/.agents/rules/text-writing-utf8.md +1 -1
  359. package/templates/.agents/rules/workflow.md +7 -5
  360. package/templates/.agents/runtime/VERSION +1 -1
  361. package/templates/.agents/runtime/bin/zaip.mjs +821 -516
  362. package/templates/.agents/runtime/checksums.sha256 +6 -6
  363. package/templates/.agents/runtime/manifest.json +1 -1
  364. package/templates/.agents/runtime/pnpm-lock.sha256 +1 -1
  365. package/templates/.agents/runtime/provenance.json +5 -5
  366. package/templates/.agents/runtime/sbom.cdx.json +3 -3
  367. package/templates/.agents/sales/playbook.md +3 -0
  368. package/templates/.agents/skills/zaip-aios/SKILL.md +5 -3
  369. package/templates/.agents/skills/zaip-skill-adapt-stack/SKILL.md +1 -0
  370. package/templates/.agents/skills/zaip-skill-api-contracts/SKILL.md +14 -0
  371. package/templates/.agents/skills/zaip-skill-api-contracts/agents/openai.yaml +4 -0
  372. package/templates/.agents/skills/zaip-skill-application-observability/SKILL.md +15 -0
  373. package/templates/.agents/skills/zaip-skill-application-observability/agents/openai.yaml +4 -0
  374. package/templates/.agents/skills/zaip-skill-application-observability/references/signal-design.md +3 -0
  375. package/templates/.agents/skills/zaip-skill-application-readiness/SKILL.md +15 -0
  376. package/templates/.agents/skills/zaip-skill-application-readiness/agents/openai.yaml +4 -0
  377. package/templates/.agents/skills/zaip-skill-application-readiness/references/evidence-matrix.md +3 -0
  378. package/templates/.agents/skills/zaip-skill-architecture-design/SKILL.md +14 -0
  379. package/templates/.agents/skills/zaip-skill-architecture-design/agents/openai.yaml +4 -0
  380. package/templates/.agents/skills/zaip-skill-async-jobs/SKILL.md +14 -0
  381. package/templates/.agents/skills/zaip-skill-async-jobs/agents/openai.yaml +4 -0
  382. package/templates/.agents/skills/zaip-skill-auth-tenancy/SKILL.md +15 -0
  383. package/templates/.agents/skills/zaip-skill-auth-tenancy/agents/openai.yaml +4 -0
  384. package/templates/.agents/skills/zaip-skill-auth-tenancy/references/data-access-paths.md +9 -0
  385. package/templates/.agents/skills/zaip-skill-auth-tenancy/references/worker-scenario.md +5 -0
  386. package/templates/.agents/skills/zaip-skill-auth-tenancy/scripts/worker-contract.test.mjs +27 -0
  387. package/templates/.agents/skills/zaip-skill-author-skills/SKILL.md +2 -0
  388. package/templates/.agents/skills/zaip-skill-author-skills/references/engineering-skill-index.md +9 -0
  389. package/templates/.agents/skills/zaip-skill-author-skills/scripts/audit-skill-catalog.mjs +5 -3
  390. package/templates/.agents/skills/zaip-skill-author-skills/scripts/author-skill-scripts.test.mjs +27 -0
  391. package/templates/.agents/skills/zaip-skill-backend/SKILL.md +4 -0
  392. package/templates/.agents/skills/zaip-skill-backend/references/deployment-environments.md +75 -0
  393. package/templates/.agents/skills/zaip-skill-backend/references/supabase-migration-contract.md +23 -0
  394. package/templates/.agents/skills/zaip-skill-brand-governance/SKILL.md +2 -0
  395. package/templates/.agents/skills/zaip-skill-cache-strategy/SKILL.md +14 -0
  396. package/templates/.agents/skills/zaip-skill-cache-strategy/agents/openai.yaml +4 -0
  397. package/templates/.agents/skills/zaip-skill-change/SKILL.md +1 -1
  398. package/templates/.agents/skills/zaip-skill-cloud-engineering/SKILL.md +7 -0
  399. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/SKILL.md +37 -0
  400. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/agents/openai.yaml +6 -0
  401. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/references/workers-static-assets.md +26 -0
  402. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/references/workflow-templates.md +71 -0
  403. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/scripts/cloudflare-github-deploy-contract.test.mjs +77 -0
  404. package/templates/.agents/skills/zaip-skill-config/SKILL.md +21 -11
  405. package/templates/.agents/skills/zaip-skill-config/agents/openai.yaml +2 -2
  406. package/templates/.agents/skills/zaip-skill-container-runtime/SKILL.md +14 -0
  407. package/templates/.agents/skills/zaip-skill-container-runtime/agents/openai.yaml +4 -0
  408. package/templates/.agents/skills/zaip-skill-context/SKILL.md +6 -1
  409. package/templates/.agents/skills/zaip-skill-context/references/prd-spec-task-handoff.md +10 -0
  410. package/templates/.agents/skills/zaip-skill-context/references/rule-selection.md +20 -0
  411. package/templates/.agents/skills/zaip-skill-cqrs/SKILL.md +1 -0
  412. package/templates/.agents/skills/zaip-skill-cybersecurity/SKILL.md +18 -0
  413. package/templates/.agents/skills/zaip-skill-cybersecurity/agents/openai.yaml +4 -0
  414. package/templates/.agents/skills/zaip-skill-cybersecurity/references/audit-contract.md +94 -0
  415. package/templates/.agents/skills/zaip-skill-cybersecurity/scripts/score-audit.mjs +185 -0
  416. package/templates/.agents/skills/zaip-skill-cybersecurity/scripts/score-audit.test.mjs +101 -0
  417. package/templates/.agents/skills/zaip-skill-data-modeling/SKILL.md +14 -0
  418. package/templates/.agents/skills/zaip-skill-data-modeling/agents/openai.yaml +4 -0
  419. package/templates/.agents/skills/zaip-skill-database-migrations/SKILL.md +20 -0
  420. package/templates/.agents/skills/zaip-skill-database-migrations/agents/openai.yaml +4 -0
  421. package/templates/.agents/skills/zaip-skill-database-migrations/references/manual-mode.md +15 -0
  422. package/templates/.agents/skills/zaip-skill-database-migrations/references/promotion-example.md +5 -0
  423. package/templates/.agents/skills/zaip-skill-database-migrations/scripts/export-manual-sql.mjs +145 -0
  424. package/templates/.agents/skills/zaip-skill-database-migrations/scripts/export-manual-sql.test.mjs +178 -0
  425. package/templates/.agents/skills/zaip-skill-dependency-upgrade/SKILL.md +14 -0
  426. package/templates/.agents/skills/zaip-skill-dependency-upgrade/agents/openai.yaml +4 -0
  427. package/templates/.agents/skills/zaip-skill-deployment-pipeline/SKILL.md +15 -0
  428. package/templates/.agents/skills/zaip-skill-deployment-pipeline/agents/openai.yaml +4 -0
  429. package/templates/.agents/skills/zaip-skill-deployment-pipeline/references/runtime-shapes.md +3 -0
  430. package/templates/.agents/skills/zaip-skill-design-system/SKILL.md +20 -9
  431. package/templates/.agents/skills/zaip-skill-dev-environment/SKILL.md +16 -0
  432. package/templates/.agents/skills/zaip-skill-dev-environment/agents/openai.yaml +4 -0
  433. package/templates/.agents/skills/zaip-skill-dev-environment/references/inventory-contract.md +7 -0
  434. package/templates/.agents/skills/zaip-skill-dev-environment/scripts/inventory.mjs +77 -0
  435. package/templates/.agents/skills/zaip-skill-disaster-recovery/SKILL.md +15 -0
  436. package/templates/.agents/skills/zaip-skill-disaster-recovery/agents/openai.yaml +4 -0
  437. package/templates/.agents/skills/zaip-skill-disaster-recovery/references/recovery-scope.md +3 -0
  438. package/templates/.agents/skills/zaip-skill-execution/SKILL.md +31 -8
  439. package/templates/.agents/skills/zaip-skill-execution/references/correction-cycle.md +7 -0
  440. package/templates/.agents/skills/zaip-skill-execution/references/runtime-governance.md +18 -8
  441. package/templates/.agents/skills/zaip-skill-external-integrations/SKILL.md +14 -0
  442. package/templates/.agents/skills/zaip-skill-external-integrations/agents/openai.yaml +4 -0
  443. package/templates/.agents/skills/zaip-skill-frontend/SKILL.md +4 -0
  444. package/templates/.agents/skills/zaip-skill-frontend-componentization/SKILL.md +44 -0
  445. package/templates/.agents/skills/zaip-skill-frontend-componentization/agents/openai.yaml +4 -0
  446. package/templates/.agents/skills/zaip-skill-frontend-data-flows/SKILL.md +14 -0
  447. package/templates/.agents/skills/zaip-skill-frontend-data-flows/agents/openai.yaml +4 -0
  448. package/templates/.agents/skills/zaip-skill-general-operations/SKILL.md +2 -0
  449. package/templates/.agents/skills/zaip-skill-github-actions-setup/SKILL.md +36 -0
  450. package/templates/.agents/skills/zaip-skill-github-actions-setup/agents/openai.yaml +4 -0
  451. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/cloudflare-pages.md +33 -0
  452. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/github.md +63 -0
  453. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/hostinger-vps.md +55 -0
  454. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/npm.md +30 -0
  455. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/check-skill.mjs +55 -0
  456. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-cloudflare.mjs +61 -0
  457. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-cloudflare.test.mjs +128 -0
  458. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-ssh.integration.test.mjs +106 -0
  459. package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +42 -76
  460. package/templates/.agents/skills/zaip-skill-github-deploy/references/deployment-workflow.md +135 -0
  461. package/templates/.agents/skills/zaip-skill-github-deploy/references/github-release-workflow-template.md +31 -0
  462. package/templates/.agents/skills/zaip-skill-github-deploy/references/release-gate-matrix.md +24 -0
  463. package/templates/.agents/skills/zaip-skill-github-deploy/references/release-identity.md +44 -0
  464. package/templates/.agents/skills/zaip-skill-github-deploy/references/release-notes.md +134 -0
  465. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/consumer-release-preparation.mjs +389 -0
  466. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/consumer-release-preparation.test.mjs +134 -0
  467. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs +25 -2
  468. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness-api.test.mjs +134 -0
  469. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness.mjs +98 -0
  470. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness.test.mjs +25 -0
  471. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/install-github-readiness-workflow.mjs +159 -0
  472. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/install-github-readiness-workflow.test.mjs +160 -0
  473. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs +149 -12
  474. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.test.mjs +64 -5
  475. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/release-notes-coverage.test.mjs +126 -0
  476. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/resolve-release-identity.mjs +78 -0
  477. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/resolve-release-identity.test.mjs +51 -0
  478. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/validate-release-notes.mjs +184 -0
  479. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/validate-release-notes.test.mjs +109 -0
  480. package/templates/.agents/skills/zaip-skill-growth-strategy-revops/SKILL.md +2 -0
  481. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/SKILL.md +18 -10
  482. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/agents/openai.yaml +3 -4
  483. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/aws-cli-terraform.md +62 -0
  484. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/guia-iniciante-hostinger-vps.md +183 -0
  485. package/templates/.agents/skills/zaip-skill-marketing/SKILL.md +2 -0
  486. package/templates/.agents/skills/zaip-skill-module-scaffold/SKILL.md +14 -0
  487. package/templates/.agents/skills/zaip-skill-module-scaffold/agents/openai.yaml +4 -0
  488. package/templates/.agents/skills/zaip-skill-module-scaffold/references/scaffold-contract.md +9 -0
  489. package/templates/.agents/skills/zaip-skill-module-scaffold/scripts/helpers.test.mjs +121 -0
  490. package/templates/.agents/skills/zaip-skill-module-scaffold/scripts/scaffold.mjs +169 -0
  491. package/templates/.agents/skills/zaip-skill-move-prd/SKILL.md +3 -1
  492. package/templates/.agents/skills/zaip-skill-move-spec/SKILL.md +1 -1
  493. package/templates/.agents/skills/zaip-skill-performance-engineering/SKILL.md +14 -0
  494. package/templates/.agents/skills/zaip-skill-performance-engineering/agents/openai.yaml +4 -0
  495. package/templates/.agents/skills/zaip-skill-prd/SKILL.md +3 -1
  496. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-local-telemetry.mjs +1 -0
  497. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.mjs +26 -9
  498. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.test.mjs +39 -13
  499. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.mjs +1 -0
  500. package/templates/.agents/skills/zaip-skill-refactor-landing-page/SKILL.md +66 -0
  501. package/templates/.agents/skills/zaip-skill-refactor-landing-page/agents/openai.yaml +4 -0
  502. package/templates/.agents/skills/zaip-skill-refactor-landing-page/references/behavioral-dry-run.md +23 -0
  503. package/templates/.agents/skills/zaip-skill-release-qualification/SKILL.md +38 -1
  504. package/templates/.agents/skills/zaip-skill-release-qualification/references/local-preparation.md +122 -0
  505. package/templates/.agents/skills/zaip-skill-review/SKILL.md +1 -0
  506. package/templates/.agents/skills/zaip-skill-rules/SKILL.md +3 -3
  507. package/templates/.agents/skills/zaip-skill-sales-methodology/SKILL.md +2 -0
  508. package/templates/.agents/skills/zaip-skill-setup/SKILL.md +21 -21
  509. package/templates/.agents/skills/zaip-skill-setup/agents/openai.yaml +2 -2
  510. package/templates/.agents/skills/zaip-skill-spec/SKILL.md +3 -2
  511. package/templates/.agents/skills/zaip-skill-storage-uploads/SKILL.md +14 -0
  512. package/templates/.agents/skills/zaip-skill-storage-uploads/agents/openai.yaml +4 -0
  513. package/templates/.agents/skills/zaip-skill-systematic-debugging/SKILL.md +14 -0
  514. package/templates/.agents/skills/zaip-skill-systematic-debugging/agents/openai.yaml +4 -0
  515. package/templates/.agents/skills/zaip-skill-task/SKILL.md +16 -7
  516. package/templates/.agents/skills/zaip-skill-task/references/commit-policy.md +25 -0
  517. package/templates/.agents/skills/zaip-skill-test-data/SKILL.md +14 -0
  518. package/templates/.agents/skills/zaip-skill-test-data/agents/openai.yaml +4 -0
  519. package/templates/.agents/skills/zaip-skill-test-data/scripts/generate.mjs +72 -0
  520. package/templates/.agents/skills/zaip-skill-testing-strategy/SKILL.md +15 -0
  521. package/templates/.agents/skills/zaip-skill-testing-strategy/agents/openai.yaml +4 -0
  522. package/templates/.agents/skills/zaip-skill-testing-strategy/references/example-map.md +3 -0
  523. package/templates/.agents/skills/zaip-skill-tool-setup/SKILL.md +2 -0
  524. package/templates/.agents/skills/zaip-skill-website-readiness/SKILL.md +8 -0
  525. package/templates/.agents/zaip-aios/INDEX.md +9 -1
  526. package/templates/.agents/zaip-aios/README.md +23 -2
  527. package/templates/.agents/zaip-aios/VERSION +1 -1
  528. package/templates/.agents/zaip-aios/guides/01-primeiros-passos.md +5 -1
  529. package/templates/.agents/zaip-aios/guides/03-tasks.md +15 -2
  530. package/templates/.agents/zaip-aios/guides/04-specs.md +13 -0
  531. package/templates/.agents/zaip-aios/guides/05-prds.md +13 -0
  532. package/templates/.agents/zaip-aios/guides/06-execucao.md +19 -4
  533. package/templates/.agents/zaip-aios/guides/07-revisao-e-validacao.md +14 -0
  534. package/templates/.agents/zaip-aios/guides/08-contexto-e-tokens.md +4 -3
  535. package/templates/.agents/zaip-aios/guides/09-agentes-e-squads.md +17 -9
  536. package/templates/.agents/zaip-aios/guides/10-seguranca.md +11 -1
  537. package/templates/.agents/zaip-aios/guides/11-observabilidade-e-custos.md +69 -0
  538. package/templates/.agents/zaip-aios/guides/12-instalacao-e-upgrade.md +9 -4
  539. package/templates/.agents/zaip-aios/guides/13-boas-praticas.md +7 -1
  540. package/templates/.agents/zaip-aios/guides/14-troubleshooting.md +18 -0
  541. package/templates/.agents/zaip-aios/guides/16-lifecycle-e-reconciliacao.md +54 -3
  542. package/templates/.agents/zaip-aios/guides/18-catalogo-de-agentes.md +10 -2
  543. package/templates/.agents/zaip-aios/guides/19-assurance-e-autonomia.md +186 -5
  544. package/templates/.agents/zaip-aios/guides/20-instalacao-detalhada.md +26 -18
  545. package/templates/.agents/zaip-aios/guides/21-telemetria-monitor-custos.md +18 -2
  546. package/templates/.agents/zaip-aios/guides/22-fluxos-e-roteamento.md +14 -2
  547. package/templates/.agents/zaip-aios/guides/23-orquestracao-de-modelos.md +190 -489
  548. package/templates/.agents/zaip-aios/guides/26-qualidade-e-release.md +61 -13
  549. package/templates/.agents/zaip-aios/guides/27-telemetria-git-native.md +18 -0
  550. package/templates/.agents/zaip-aios/guides/28-lifecycle-completo.md +18 -1
  551. package/templates/scripts/validate-cloud-hostinger-contract.mjs +34 -0
  552. package/templates/template-manifest.json +1229 -329
  553. package/templates/.agents/branding/.gitkeep +0 -0
  554. package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-snUCQYTC.js +0 -1
  555. package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-BPtVUGgs.js +0 -1
  556. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-3Awyaovx.js +0 -3
  557. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-GgzpZ_PY.css +0 -1
  558. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BCvZFMEf.js +0 -1
  559. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-DbaLbU2q.js +0 -68
  560. package/templates/.agents/dashboard/apps/frontend/dist/assets/dashboard-localization-CLJ0lT9v.js +0 -231
  561. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-_MEktQNM.js +0 -2
  562. package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-D9-fqq9M.js +0 -1
  563. package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-BDe4_Ubl.js +0 -1
  564. package/templates/.agents/design/apps/catalog/dist/storybook/assets/CatalogShell-BWY-80s4.js +0 -1
  565. package/templates/.agents/design/apps/catalog/dist/storybook/assets/Components.stories-Be2mDUQj.js +0 -27
  566. package/templates/.agents/design/apps/catalog/dist/storybook/assets/DesignSystem.stories-DRx9blDs.js +0 -1
  567. package/templates/.agents/design/apps/catalog/dist/storybook/assets/formatter-L2YTDE3Q-EwuTh8Zk.js +0 -1
  568. package/templates/.agents/design/apps/catalog/dist/storybook/assets/react-DyL61NPT.js +0 -1
  569. package/templates/.agents/growth/.gitkeep +0 -0
  570. package/templates/.agents/marketing/.gitkeep +0 -0
  571. package/templates/.agents/sales/.gitkeep +0 -0
@@ -1,10 +1,19 @@
1
- import { type FormEvent, type ReactNode, useEffect, useState } from "react";
1
+ import { type FormEvent, type ReactNode, useCallback, useEffect, useState } from "react";
2
2
  import type {
3
3
  DashboardApiClient,
4
4
  ProjectConfigSettings,
5
5
  ProjectOverview,
6
6
  } from "./dashboard-api.js";
7
7
  import { StackComponentEditor, StackVersions } from "./ProjectStackEditor.js";
8
+ import {
9
+ type InstallationDimensionStatus,
10
+ projectInstallationStatus,
11
+ projectSettingsSummaryMetrics,
12
+ } from "./project-installation-status.js";
13
+ import {
14
+ projectSettingsCopy as copy,
15
+ type ProjectSettingsLocale as Locale,
16
+ } from "./project-settings-copy.js";
8
17
  import {
9
18
  buildProjectSettingsPayload,
10
19
  defaultAutonomousExecution,
@@ -16,131 +25,7 @@ import {
16
25
  } from "./project-settings-model.js";
17
26
  import "./project-settings-page.css";
18
27
  import "./project-stack-versions.css";
19
-
20
- type Locale = "pt-BR" | "en-US";
21
- const copy = {
22
- "pt-BR": {
23
- eyebrow: "Configurações",
24
- title: "Configuração do projeto",
25
- intro: "Edite o arquivo central do projeto com validação do schema antes da gravação.",
26
- loading: "Carregando…",
27
- back: "Voltar ao dashboard",
28
- save: "Salvar configurações",
29
- saving: "Validando e salvando…",
30
- saved: "Configurações salvas e validadas.",
31
- framework: "Framework ZAIP-AIOS",
32
- frameworkHint: "Ativa ou desativa o framework para este projeto.",
33
- identity: "Identidade do projeto",
34
- stack: "Stack e linguagens",
35
- execution: "Execução",
36
- assurance: "Assurance",
37
- executionToggleHint:
38
- "Grava ou remove o bloco execution. Sem ele, o projeto usa execução manual.",
39
- runtimeHint:
40
- "Manual apenas materializa o trabalho; autonomous executa a DAG pelo provider configurado quando as precondições passam.",
41
- providerHint: "Provider que inicia os agentes da execução autônoma: Codex ou Claude.",
42
- executionModelHint:
43
- "Modelo-base do runtime autônomo. A política automática de PRD/SPEC ainda pode selecionar um modelo permitido por agente.",
44
- parallelismHint:
45
- "Teto de agentes simultâneos. O valor efetivo é o menor limite entre projeto, DAG, provider e squad.",
46
- leaseHint:
47
- "Valor persistido no projeto. O coordenador atual ainda usa internamente um lease fixo de 60 segundos.",
48
- assuranceToggleHint:
49
- "Ativa ou remove os gates de evidência, revisão e qualidade do projeto. Recomenda-se manter ativo.",
50
- assuranceVersionHint: "Versão do contrato de assurance. É fixa e somente leitura.",
51
- assuranceDepthHint:
52
- "Auto ajusta o rigor ao escopo; base exige o conjunto padrão; elevated amplia validações para mudanças mais abrangentes.",
53
- finalCommitHint:
54
- "Exige que as evidências comprovem o commit final integrado. Sinais de produção ou migração ainda podem exigir isso mesmo quando desativado.",
55
- context: "Contexto",
56
- overview: "Visão geral do projeto",
57
- available: "Criado",
58
- unavailable: "Ainda não criado",
59
- componentGuide:
60
- "Preencha cada responsabilidade separadamente. A versão fica sem prefixos (^, ~, >=) e a referência identifica o pacote, imagem ou serviço.",
61
- versionHint: "Versão exata: 22.16.0 ou 17.6. Deixe vazio para serviços sem versão fixada.",
62
- referenceHint:
63
- "Ex.: npm:hono, docker:node:22.16.0-bookworm-slim, service:supabase ou provider:cloudflare-pages.",
64
- overrides: "Opções avançadas (JSON)",
65
- overridesHint:
66
- "Use apenas fatos técnicos transversais confirmados. Deixe vazio quando não houver exceções.",
67
- versions: "Versões detectadas no workspace",
68
- exact: "Verificada",
69
- constraint: "Requisito",
70
- versionUnavailable: "Não encontrada",
71
- runtime: "Runtime do Dashboard",
72
- installed: "Instalado no projeto",
73
- missing: "Ausente no projeto",
74
- bundled: "Empacotado no Dashboard",
75
- current: "Atual",
76
- configured: "Configurado",
77
- contextGuide:
78
- "O contexto começa pelas fontes canônicas e inclui somente arquivos relevantes para a tarefa. Saídas geradas são consultadas apenas em setup, release ou checagem de paridade.",
79
- contextDomains:
80
- "Branding, Marketing, Growth e Sales são usados sob demanda pelos respectivos especialistas, quando houver uma tarefa e artefatos desses domínios. Não os adicione aqui apenas por existirem como capacidades.",
81
- },
82
- "en-US": {
83
- eyebrow: "Settings",
84
- title: "Project settings",
85
- intro: "Edit the central project file with schema validation before writing.",
86
- loading: "Loading project settings…",
87
- back: "Back to dashboard",
88
- save: "Save settings",
89
- saving: "Validating and saving…",
90
- saved: "Settings saved and validated.",
91
- framework: "ZAIP-AIOS framework",
92
- frameworkHint: "Enable or disable the framework for this project.",
93
- identity: "Project identity",
94
- stack: "Stack and languages",
95
- execution: "Execution",
96
- assurance: "Assurance",
97
- executionToggleHint:
98
- "Writes or removes the execution block. Without it, the project uses manual execution.",
99
- runtimeHint:
100
- "Manual only materializes work; autonomous runs the DAG through the configured provider after preconditions pass.",
101
- providerHint: "Provider that starts autonomous execution agents: Codex or Claude.",
102
- executionModelHint:
103
- "Base model for the autonomous runtime. PRD/SPEC automatic policy may still select an allowed model per agent.",
104
- parallelismHint:
105
- "Maximum simultaneous agents. Effective parallelism is the smallest project, DAG, provider, and squad limit.",
106
- leaseHint:
107
- "Value persisted in the project. The current coordinator still uses a fixed internal 60-second lease.",
108
- assuranceToggleHint:
109
- "Enables or removes project evidence, review, and quality gates. Keeping it enabled is recommended.",
110
- assuranceVersionHint: "Assurance contract version. It is fixed and read-only.",
111
- assuranceDepthHint:
112
- "Auto adapts rigor to scope; base uses the standard set; elevated expands validation for broader changes.",
113
- finalCommitHint:
114
- "Requires evidence for the final integrated commit. Production or migration signals may still require it when disabled.",
115
- context: "Context",
116
- overview: "Project overview",
117
- available: "Created",
118
- unavailable: "Not created yet",
119
- componentGuide:
120
- "Fill each responsibility separately. Versions have no prefixes (^, ~, >=), and the reference identifies the package, image, or service.",
121
- versionHint:
122
- "Exact version: 22.16.0 or 17.6. Leave blank for services without a pinned version.",
123
- referenceHint:
124
- "E.g. npm:hono, docker:node:22.16.0-bookworm-slim, service:supabase, or provider:cloudflare-pages.",
125
- overrides: "Advanced options (JSON)",
126
- overridesHint:
127
- "Use only confirmed cross-cutting technical facts. Leave empty when there are no exceptions.",
128
- versions: "Versions detected in the workspace",
129
- exact: "Verified",
130
- constraint: "Requirement",
131
- versionUnavailable: "Not found",
132
- runtime: "Dashboard runtime",
133
- installed: "Installed in project",
134
- missing: "Missing from project",
135
- bundled: "Bundled in Dashboard",
136
- current: "Current",
137
- configured: "Configured",
138
- contextGuide:
139
- "Context starts from canonical sources and includes only files relevant to the task. Generated outputs are consulted only for setup, release, or parity checks.",
140
- contextDomains:
141
- "Branding, Marketing, Growth, and Sales are used on demand by their respective specialists when there is a task and artifacts in those domains. Do not add them here merely because they exist as capabilities.",
142
- },
143
- } as const;
28
+ import { AutonomySettings } from "./AutonomySettings.js";
144
29
 
145
30
  export function ProjectSettingsPage({
146
31
  api,
@@ -157,23 +42,44 @@ export function ProjectSettingsPage({
157
42
  const [stackComponents, setStackComponents] = useState<StackComponentsDraft | null>(null);
158
43
  const [otherOverrides, setOtherOverrides] = useState("{}");
159
44
  const [saving, setSaving] = useState(false);
45
+ const [loading, setLoading] = useState(true);
160
46
  const [error, setError] = useState<string | null>(null);
161
47
  const [notice, setNotice] = useState<string | null>(null);
48
+ const [installationToastVisible, setInstallationToastVisible] = useState(false);
49
+ const installation = overview === null ? null : projectInstallationStatus(overview);
162
50
 
163
- useEffect(() => {
164
- void Promise.all([api.projectSettings(), api.projectOverview()])
165
- .then(([loaded, projectOverview]) => {
166
- const draft = projectSettingsDraft(loaded);
167
- setConfig(loaded);
168
- setOverview(projectOverview);
169
- setStackComponents(
170
- withDetectedStackVersions(draft.components, projectOverview.stack_components),
171
- );
172
- setOtherOverrides(draft.otherOverrides);
173
- })
174
- .catch((cause) => setError(cause instanceof Error ? cause.message : String(cause)));
51
+ const loadProjectSettings = useCallback(async () => {
52
+ setLoading(true);
53
+ setError(null);
54
+ try {
55
+ const [loaded, projectOverview] = await Promise.all([
56
+ api.projectSettings(),
57
+ api.projectOverview(),
58
+ ]);
59
+ const draft = projectSettingsDraft(loaded);
60
+ setConfig(loaded);
61
+ setOverview(projectOverview);
62
+ setStackComponents(
63
+ withDetectedStackVersions(draft.components, projectOverview.stack_components),
64
+ );
65
+ setOtherOverrides(draft.otherOverrides);
66
+ } catch (cause) {
67
+ setError(cause instanceof Error ? cause.message : String(cause));
68
+ } finally {
69
+ setLoading(false);
70
+ }
175
71
  }, [api]);
176
72
 
73
+ useEffect(() => {
74
+ void loadProjectSettings();
75
+ }, [loadProjectSettings]);
76
+
77
+ useEffect(() => {
78
+ setInstallationToastVisible(
79
+ overview !== null && projectInstallationStatus(overview).hasMissingDependencies,
80
+ );
81
+ }, [overview]);
82
+
177
83
  async function submit(event: FormEvent<HTMLFormElement>) {
178
84
  event.preventDefault();
179
85
  if (config === null) return;
@@ -203,7 +109,7 @@ export function ProjectSettingsPage({
203
109
  }
204
110
 
205
111
  if (config === null) {
206
- const isLoading = error === null;
112
+ const isLoading = loading && error === null;
207
113
  return (
208
114
  <main aria-busy={isLoading} className="project-settings-state">
209
115
  <div
@@ -213,7 +119,13 @@ export function ProjectSettingsPage({
213
119
  >
214
120
  {isLoading ? <span aria-hidden="true" className="project-settings-loader" /> : null}
215
121
  <p>{text.eyebrow}</p>
216
- <h1>{error ?? text.loading}</h1>
122
+ <h1>{error ? text.loadError : text.loading}</h1>
123
+ {error ? <p className="project-settings-state-error">{error}</p> : null}
124
+ {error ? (
125
+ <button onClick={() => void loadProjectSettings()} type="button">
126
+ {text.retry}
127
+ </button>
128
+ ) : null}
217
129
  <button onClick={onClose} type="button">
218
130
  ← {text.back}
219
131
  </button>
@@ -236,7 +148,11 @@ export function ProjectSettingsPage({
236
148
  </button>
237
149
  </header>
238
150
 
239
- {error ? <div className="project-settings-message is-error">{error}</div> : null}
151
+ {error ? (
152
+ <div className="project-settings-message is-error" role="alert">
153
+ {error}
154
+ </div>
155
+ ) : null}
240
156
  {notice ? (
241
157
  <div className="project-settings-message is-success" role="status">
242
158
  {notice}
@@ -261,12 +177,16 @@ export function ProjectSettingsPage({
261
177
  </section>
262
178
 
263
179
  <section className="project-settings-summary" aria-label={text.overview}>
264
- {overview?.metrics.map((metric) => (
265
- <div className="project-settings-metric" key={metric.id}>
266
- <strong>{metric.value}</strong>
267
- <span>{metric.label}</span>
268
- </div>
269
- ))}
180
+ {overview &&
181
+ projectSettingsSummaryMetrics(overview.metrics).map((metric) => (
182
+ <div className="project-settings-metric" key={metric.id}>
183
+ <strong>{metric.value}</strong>
184
+ <span>{text.metricLabels[metric.id]}</span>
185
+ </div>
186
+ ))}
187
+ {installation ? (
188
+ <InstallationMetrics installation={installation} locale={locale} />
189
+ ) : null}
270
190
  </section>
271
191
 
272
192
  <SettingsCard className="is-wide" title={text.overview}>
@@ -274,17 +194,29 @@ export function ProjectSettingsPage({
274
194
  {overview?.areas.map((area) => (
275
195
  <div className="project-overview-item" key={area.id}>
276
196
  <div>
277
- <strong>{area.label}</strong>
197
+ <strong>{text.areaLabels[area.id]}</strong>
278
198
  <code>{area.artifact}</code>
279
199
  </div>
280
200
  <span className={area.available ? "is-available" : "is-unavailable"}>
281
- {area.available ? text.available : text.unavailable}
201
+ {area.available === true
202
+ ? text.available
203
+ : area.available === false
204
+ ? text.artifactUnavailable
205
+ : text.unavailable}
282
206
  </span>
283
207
  </div>
284
208
  ))}
285
209
  </div>
286
210
  </SettingsCard>
287
211
 
212
+ <SettingsCard className="is-wide project-detected-versions" title={text.versions}>
213
+ <StackVersions
214
+ components={overview?.stack_components ?? []}
215
+ text={text}
216
+ showTitle={false}
217
+ />
218
+ </SettingsCard>
219
+
288
220
  <div className="project-settings-grid">
289
221
  <SettingsCard className="is-wide project-identity-card" title={text.identity}>
290
222
  <Field label="Schema">
@@ -339,7 +271,6 @@ export function ProjectSettingsPage({
339
271
  versionHint={text.versionHint}
340
272
  />
341
273
  ) : null}
342
- <StackVersions components={overview?.stack_components ?? []} text={text} />
343
274
  <details className="project-settings-advanced">
344
275
  <summary>{text.overrides}</summary>
345
276
  <Field
@@ -367,7 +298,9 @@ export function ProjectSettingsPage({
367
298
  onChange={(checked) =>
368
299
  setConfig({
369
300
  ...config,
370
- execution: checked ? { runtime: "manual" } : undefined,
301
+ execution: checked
302
+ ? { ...defaultAutonomousExecution(), runtime: "managed" }
303
+ : undefined,
371
304
  })
372
305
  }
373
306
  />
@@ -376,27 +309,44 @@ export function ProjectSettingsPage({
376
309
  <Field hint={text.runtimeHint} label="Runtime">
377
310
  <select
378
311
  value={config.execution.runtime}
312
+ aria-label="Runtime"
379
313
  onChange={(event) =>
380
314
  setConfig({
381
315
  ...config,
382
316
  execution:
383
317
  event.target.value === "manual"
384
318
  ? { runtime: "manual" }
385
- : defaultAutonomousExecution(),
319
+ : {
320
+ ...defaultAutonomousExecution(),
321
+ runtime:
322
+ event.target.value === "managed" ? "managed" : "autonomous",
323
+ },
386
324
  })
387
325
  }
388
326
  >
389
327
  <option value="manual">manual</option>
328
+ <option value="managed">managed (PRD/SPEC)</option>
390
329
  <option value="autonomous">autonomous</option>
391
330
  </select>
392
331
  </Field>
393
- {config.execution.runtime === "autonomous" ? (
332
+ {config.execution.runtime !== "manual" ? (
394
333
  <AutonomousExecutionFields config={config} setConfig={setConfig} text={text} />
395
334
  ) : null}
396
335
  </>
397
336
  ) : null}
398
337
  </SettingsCard>
399
338
 
339
+ <SettingsCard
340
+ title={locale === "pt-BR" ? "Autonomia e recuperação" : "Autonomy and recovery"}
341
+ >
342
+ <AutonomySettings
343
+ value={config.autonomy}
344
+ disabled={saving}
345
+ locale={locale}
346
+ onChange={(autonomy) => setConfig({ ...config, autonomy })}
347
+ />
348
+ </SettingsCard>
349
+
400
350
  <SettingsCard title={text.assurance}>
401
351
  <OptionalSectionToggle
402
352
  checked={config.assurance !== undefined}
@@ -554,10 +504,101 @@ export function ProjectSettingsPage({
554
504
  </button>
555
505
  </footer>
556
506
  </form>
507
+ {installationToastVisible && installation?.hasMissingDependencies ? (
508
+ <div aria-live="assertive" className="project-installation-toast" role="alert">
509
+ <span>{text.incompleteInstallation}</span>
510
+ <button
511
+ aria-label={text.dismiss}
512
+ onClick={() => setInstallationToastVisible(false)}
513
+ type="button"
514
+ >
515
+ ×
516
+ </button>
517
+ </div>
518
+ ) : null}
557
519
  </main>
558
520
  );
559
521
  }
560
522
 
523
+ function formatInstallationPercentage(percentage: number, locale: Locale) {
524
+ return `${new Intl.NumberFormat(locale, { maximumFractionDigits: 2 }).format(percentage)}%`;
525
+ }
526
+
527
+ function InstallationMetrics({
528
+ installation,
529
+ locale,
530
+ }: {
531
+ installation: ReturnType<typeof projectInstallationStatus>;
532
+ locale: Locale;
533
+ }) {
534
+ const text = copy[locale];
535
+ return (
536
+ <>
537
+ <p className="project-installation-health">
538
+ {text.health}:{" "}
539
+ {installation.health.state === "healthy"
540
+ ? locale === "pt-BR"
541
+ ? "Saudável"
542
+ : "Healthy"
543
+ : installation.health.state === "degraded"
544
+ ? locale === "pt-BR"
545
+ ? "Degradada"
546
+ : "Degraded"
547
+ : text.unknown}
548
+ </p>
549
+ <InstallationMetric
550
+ dimension={installation.dependencies}
551
+ label={text.dependencies}
552
+ locale={locale}
553
+ />
554
+ <InstallationMetric
555
+ dimension={installation.documentation}
556
+ label={text.documentation}
557
+ locale={locale}
558
+ />
559
+ </>
560
+ );
561
+ }
562
+
563
+ function InstallationMetric({
564
+ dimension,
565
+ label,
566
+ locale,
567
+ }: {
568
+ dimension: InstallationDimensionStatus;
569
+ label: string;
570
+ locale: Locale;
571
+ }) {
572
+ const text = copy[locale];
573
+ const detail =
574
+ dimension.state === "not_applicable"
575
+ ? text.notApplicable
576
+ : dimension.percentage === null
577
+ ? text.unknown
578
+ : formatInstallationPercentage(dimension.percentage, locale);
579
+ const stateLabel = installationStateLabel(dimension.state, locale);
580
+ return (
581
+ <div className={`project-settings-metric installation-metric is-${dimension.state}`}>
582
+ <strong>{detail}</strong>
583
+ <span>
584
+ {dimension.total === null || dimension.completed === null
585
+ ? label
586
+ : `${label} · ${dimension.completed}/${dimension.total}`}
587
+ </span>
588
+ <small>{stateLabel}</small>
589
+ </div>
590
+ );
591
+ }
592
+
593
+ function installationStateLabel(state: InstallationDimensionStatus["state"], locale: Locale) {
594
+ const text = copy[locale];
595
+ if (state === "complete") return text.complete;
596
+ if (state === "incomplete") return text.incomplete;
597
+ if (state === "not_applicable") return text.notApplicable;
598
+ if (state === "unavailable") return text.unavailable;
599
+ return text.unknown;
600
+ }
601
+
561
602
  function SettingsCard({
562
603
  children,
563
604
  className = "",
@@ -626,14 +667,20 @@ function AutonomousExecutionFields({
626
667
  text: (typeof copy)[Locale];
627
668
  }) {
628
669
  const execution =
629
- config.execution?.runtime === "autonomous" ? config.execution : defaultAutonomousExecution();
670
+ config.execution && config.execution.runtime !== "manual"
671
+ ? config.execution
672
+ : defaultAutonomousExecution();
630
673
  const update = (autonomous: typeof execution.autonomous) =>
631
- setConfig({ ...config, execution: { runtime: "autonomous", autonomous } });
674
+ setConfig({ ...config, execution: { runtime: execution.runtime, autonomous } });
632
675
  return (
633
676
  <>
634
- <Field hint={text.providerHint} label="Provider">
677
+ <Field
678
+ hint={config.autonomy?.version === 1 ? text.autonomyProviderHint : text.providerHint}
679
+ label="Provider"
680
+ >
635
681
  <select
636
682
  value={execution.autonomous.provider}
683
+ aria-label="Provider"
637
684
  onChange={(event) =>
638
685
  update({
639
686
  ...execution.autonomous,
@@ -642,7 +689,9 @@ function AutonomousExecutionFields({
642
689
  }
643
690
  >
644
691
  <option value="codex">codex</option>
645
- <option value="claude">claude</option>
692
+ <option value="claude" disabled={config.autonomy?.version === 1}>
693
+ claude
694
+ </option>
646
695
  </select>
647
696
  </Field>
648
697
  <Field hint={text.executionModelHint} label="Model">
@@ -125,9 +125,11 @@ export function StackComponentEditor({
125
125
 
126
126
  export function StackVersions({
127
127
  components,
128
+ showTitle = true,
128
129
  text,
129
130
  }: {
130
131
  components: ProjectOverview["stack_components"];
132
+ showTitle?: boolean;
131
133
  text: {
132
134
  versions: string;
133
135
  versionUnavailable: string;
@@ -144,7 +146,7 @@ export function StackVersions({
144
146
  if (components.length === 0) return null;
145
147
  return (
146
148
  <section className="project-stack-versions" aria-label={text.versions}>
147
- <h3>{text.versions}</h3>
149
+ {showTitle ? <h3>{text.versions}</h3> : null}
148
150
  <div>
149
151
  {components.map((component) => (
150
152
  <article key={component.name}>
@@ -0,0 +1,12 @@
1
+ import { readFileSync } from "node:fs";
2
+ /** Explicit composition owners; moving a boundary must keep its contract checks. */
3
+ export function readAppCompositionSource(): string {
4
+ return [
5
+ "use-dashboard-app-model.tsx",
6
+ "AppDashboardContent.tsx",
7
+ "use-app-work-board.ts",
8
+ "dashboard-cost-facts.ts",
9
+ ]
10
+ .map((path) => readFileSync(new URL(`../${path}`, import.meta.url), "utf8"))
11
+ .join("\n");
12
+ }
@@ -0,0 +1,149 @@
1
+ import type { ComponentProps } from "react";
2
+ import { renderToStaticMarkup } from "react-dom/server";
3
+ import { describe, expect, it } from "vitest";
4
+ import { CostMonitorContent } from "../../../modules/cost-monitor/src/react/CostMonitorContent.js";
5
+ import { CostPeriodAverageCards } from "../../../modules/cost-monitor/src/react/CostPeriodAverageCards.js";
6
+
7
+ const metric = {
8
+ events: 0,
9
+ tokens: { input: null, cached_input: null, output: null, reasoning: null, total: null },
10
+ cost: { usd: null, brl: null },
11
+ coverage: { events: 0, tokens: 0, usd: 0, brl: 0 },
12
+ };
13
+ const totals = {
14
+ run_count: 2,
15
+ task_count: 1,
16
+ prd_count: 0,
17
+ spec_count: 0,
18
+ evidence_count: 0,
19
+ test_count: 0,
20
+ event_count: 2,
21
+ total_tokens: 20,
22
+ estimated_usd: 10,
23
+ estimated_brl: 50,
24
+ duration_ms: 2000,
25
+ duration: { known_sum: 2000, unknown: 0, complete: true, coverage_ratio: 1 },
26
+ };
27
+ const row = {
28
+ ...totals,
29
+ key: "openai",
30
+ label: "openai",
31
+ latest_started_at: "2026-09-10T12:00:00Z",
32
+ coverage: { events: 2, tokens: 2, usd: 2, brl: 2 },
33
+ };
34
+ function props(): ComponentProps<typeof CostMonitorContent> {
35
+ return {
36
+ canonicalDurationTotal: 2000,
37
+ compactPage: null,
38
+ compactPageError: null,
39
+ compactPageLoading: false,
40
+ compactPageOffset: 0,
41
+ currency: "BRL",
42
+ detailError: null,
43
+ detailLoading: false,
44
+ developerPanel: null,
45
+ dimensionalDetailPending: false,
46
+ dimensionalRows: [],
47
+ groups: {
48
+ agents: [],
49
+ annual: [],
50
+ conversations: [],
51
+ daily: [],
52
+ models: [],
53
+ monthly: [],
54
+ providers: [row],
55
+ tasks: [],
56
+ },
57
+ groupPage: { offset: 0, limit: 10, total_count: 1, has_more: false, totals },
58
+ groupPageLoading: false,
59
+ groupPageOffset: 0,
60
+ locale: "pt-BR",
61
+ macroDetails: undefined,
62
+ onOpenRun: () => {},
63
+ onOpenTrace: () => {},
64
+ pagedRunRows: [],
65
+ retryCompactPage: () => {},
66
+ retryRunPage: () => {},
67
+ rows: [],
68
+ runPageData: null,
69
+ runPageError: null,
70
+ runPageLoading: false,
71
+ runPageOffset: 0,
72
+ serverPagingEligible: true,
73
+ setCompactPageOffset: () => {},
74
+ setGroupPageOffset: () => {},
75
+ setDetailAttempt: () => {},
76
+ setRunPageOffset: () => {},
77
+ summaryUsage: { conversation: metric, planning: metric, execution: metric, total: metric },
78
+ summaryTotals: { ...totals, estimated_brl: 999, estimated_usd: 199 },
79
+ useAggregateGroups: true,
80
+ usingCompactPage: false,
81
+ view: "providers",
82
+ visibleExecutions: [],
83
+ visiblePrds: [],
84
+ visibleSpecs: [],
85
+ };
86
+ }
87
+
88
+ describe("Cost monitor rendered populations", () => {
89
+ it("retains temporal query totals instead of overwriting them with unrelated cards", () => {
90
+ const base = props();
91
+ const html = renderToStaticMarkup(
92
+ <CostMonitorContent
93
+ {...base}
94
+ view="daily"
95
+ groups={{ ...base.groups, daily: [{ ...row, key: "2026-09-10", label: "2026-09-10" }] }}
96
+ />,
97
+ );
98
+ expect(html).toContain("50,00");
99
+ expect(html).not.toContain("999");
100
+ });
101
+ it("renders full-period averages independently of page rows and distinguishes missing metadata", () => {
102
+ const base = props();
103
+ const averages = { tasks: 1.5, specs: 0, prds: 0, durationMs: 1000, tokens: 500, cost: 75 };
104
+ if (base.groupPage === null) throw new Error("Expected fixture page");
105
+ const page = {
106
+ ...base.groupPage,
107
+ period_averages: { BRL: averages, USD: { ...averages, cost: 15 } },
108
+ };
109
+ const html = renderToStaticMarkup(
110
+ <CostMonitorContent {...base} view="daily" groupPage={page} />,
111
+ );
112
+ expect(html).toContain("75,00");
113
+ expect(html).toContain("1,5");
114
+ const absent = renderToStaticMarkup(<CostMonitorContent {...base} view="daily" />);
115
+ expect(absent).toContain("Indisponível");
116
+ expect(absent).not.toContain("75,00");
117
+ });
118
+ it.each([
119
+ "BRL",
120
+ "USD",
121
+ ] as const)("uses provider query totals, not unrelated global totals (%s)", (currency) => {
122
+ const html = renderToStaticMarkup(<CostMonitorContent {...props()} currency={currency} />);
123
+ expect(html).toContain("openai");
124
+ expect(html).not.toContain("999");
125
+ expect(html).not.toContain("199");
126
+ expect(html).toContain(currency === "BRL" ? "50,00" : "10,00");
127
+ });
128
+
129
+ it("shows a loading status rather than zero or stale averages on a pending period", () => {
130
+ const html = renderToStaticMarkup(
131
+ <CostMonitorContent {...props()} view="daily" groupPageLoading />,
132
+ );
133
+ expect(html).toContain("Carregando médias");
134
+ expect(html).not.toContain("Médio por dia");
135
+ });
136
+
137
+ it("distinguishes loaded zero from loading, including English", () => {
138
+ const loaded = renderToStaticMarkup(
139
+ <CostPeriodAverageCards currency="BRL" locale="pt-BR" period="daily" rows={[]} />,
140
+ );
141
+ expect(loaded).toContain("Médio por dia");
142
+ expect(loaded).not.toContain("Carregando");
143
+ const loading = renderToStaticMarkup(
144
+ <CostPeriodAverageCards currency="USD" locale="en-US" period="monthly" rows={[]} loading />,
145
+ );
146
+ expect(loading).toContain("Loading averages");
147
+ expect(loading).not.toContain("Monthly average");
148
+ });
149
+ });