@zaip-ai/cli 1.0.7 → 1.0.8

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 (410) hide show
  1. package/README.md +6 -4
  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 +15 -5
  5. package/dist/services/adapters.js.map +1 -1
  6. package/dist/services/adapters.test.js +1 -1
  7. package/dist/services/agent-adapters.d.ts +9 -0
  8. package/dist/services/agent-adapters.d.ts.map +1 -1
  9. package/dist/services/agent-adapters.js +38 -3
  10. package/dist/services/agent-adapters.js.map +1 -1
  11. package/dist/services/agent-adapters.test.js +8 -1
  12. package/dist/services/agent-adapters.test.js.map +1 -1
  13. package/dist/services/codex-config-template.d.ts +2 -1
  14. package/dist/services/codex-config-template.d.ts.map +1 -1
  15. package/dist/services/codex-config-template.js +13 -2
  16. package/dist/services/codex-config-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 +31 -7
  20. package/dist/services/codex-rules.js.map +1 -1
  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 +4 -1
  24. package/dist/services/codex-subagent-hook-template.js.map +1 -1
  25. package/dist/services/doctor.d.ts.map +1 -1
  26. package/dist/services/doctor.js +3 -1
  27. package/dist/services/doctor.js.map +1 -1
  28. package/dist/services/global-codex-config.d.ts +6 -3
  29. package/dist/services/global-codex-config.d.ts.map +1 -1
  30. package/dist/services/global-codex-config.js +82 -13
  31. package/dist/services/global-codex-config.js.map +1 -1
  32. package/dist/services/global-codex-config.test.js +57 -10
  33. package/dist/services/global-codex-config.test.js.map +1 -1
  34. package/dist/services/install-agents-template.d.ts.map +1 -1
  35. package/dist/services/install-agents-template.js +15 -2
  36. package/dist/services/install-agents-template.js.map +1 -1
  37. package/dist/services/logger.js +1 -1
  38. package/dist/services/logger.js.map +1 -1
  39. package/dist/services/logger.test.js +3 -3
  40. package/dist/services/logger.test.js.map +1 -1
  41. package/dist/services/runtime-template.test.js +21 -5
  42. package/dist/services/runtime-template.test.js.map +1 -1
  43. package/dist/services/template-manifest.d.ts.map +1 -1
  44. package/dist/services/template-manifest.js +2 -0
  45. package/dist/services/template-manifest.js.map +1 -1
  46. package/package.json +1 -1
  47. package/templates/.agents/config/agents/catalog.yaml +310 -10
  48. package/templates/.agents/config/clients/codex/agents/zaip-agent-brand-strategist.toml +30 -0
  49. package/templates/.agents/config/clients/codex/agents/zaip-agent-designer.toml +5 -5
  50. package/templates/.agents/config/clients/codex/agents/zaip-agent-finalizer.toml +1 -1
  51. package/templates/.agents/config/clients/codex/agents/zaip-agent-general-operations.toml +30 -0
  52. package/templates/.agents/config/clients/codex/agents/zaip-agent-governance-compliance.toml +30 -0
  53. package/templates/.agents/config/clients/codex/agents/zaip-agent-growth-strategist.toml +30 -0
  54. package/templates/.agents/config/clients/codex/agents/zaip-agent-marketing-analyst.toml +8 -8
  55. package/templates/.agents/config/clients/codex/agents/zaip-agent-orchestrator.toml +5 -3
  56. package/templates/.agents/config/clients/codex/agents/zaip-agent-sales-specialist.toml +30 -0
  57. package/templates/.agents/config/project.yaml +1 -1
  58. package/templates/.agents/dashboard/.zaip-managed.json +659 -163
  59. package/templates/.agents/dashboard/DATA-DICTIONARY.md +2227 -0
  60. package/templates/.agents/dashboard/README.md +48 -97
  61. package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-Z60df2r-.js +1 -0
  62. package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-Cv-JcoxP.js → DashboardHelpDialog-Cs6dzDmW.js} +294 -109
  63. package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-Coc6pA-1.js +1 -0
  64. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-QE1k9yZB.css +1 -0
  65. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-_Pf5DA_A.js +3 -0
  66. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BVlz3DLZ.js +1 -0
  67. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-CaKwQP43.css +1 -0
  68. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-BZ5WdaMN.css +1 -0
  69. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-Cf9ctPVt.js +68 -0
  70. package/templates/.agents/dashboard/apps/frontend/dist/assets/{dashboard-localization-C98LGC-Q.js → dashboard-localization-CLJ0lT9v.js} +1 -1
  71. package/templates/.agents/dashboard/apps/frontend/dist/assets/icons-vendor-DFBuc_qp.js +1 -0
  72. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-8A4DcNXM.js +2 -0
  73. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-DK_enB5Z.css +1 -0
  74. package/templates/.agents/dashboard/apps/frontend/dist/assets/react-vendor-CCQOHdVI.js +9 -0
  75. package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-D9-fqq9M.js +1 -0
  76. package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-DFY7ZDlu.css +1 -0
  77. package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-pC2_0J8x.js +1 -0
  78. package/templates/.agents/dashboard/apps/frontend/dist/index.html +9 -2
  79. package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
  80. package/templates/.agents/dashboard/apps/frontend/src/App.tsx +952 -595
  81. package/templates/.agents/dashboard/apps/frontend/src/AppLoadingBoundary.tsx +48 -0
  82. package/templates/.agents/dashboard/apps/frontend/src/AppLoadingPanels.tsx +2 -0
  83. package/templates/.agents/dashboard/apps/frontend/src/AppOverlays.tsx +247 -0
  84. package/templates/.agents/dashboard/apps/frontend/src/AppRequestGuards.tsx +95 -0
  85. package/templates/.agents/dashboard/apps/frontend/src/AppSetupRoutes.tsx +87 -0
  86. package/templates/.agents/dashboard/apps/frontend/src/CostCalculationGuidePage.tsx +641 -0
  87. package/templates/.agents/dashboard/apps/frontend/src/DashboardAlternateContent.tsx +159 -0
  88. package/templates/.agents/dashboard/apps/frontend/src/DashboardCapabilityNav.tsx +13 -13
  89. package/templates/.agents/dashboard/apps/frontend/src/DashboardGlobalSettings.tsx +56 -0
  90. package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +257 -313
  91. package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +149 -0
  92. package/templates/.agents/dashboard/apps/frontend/src/TraceabilityWorkspace.test.ts +35 -0
  93. package/templates/.agents/dashboard/apps/frontend/src/TraceabilityWorkspace.tsx +111 -12
  94. package/templates/.agents/dashboard/apps/frontend/src/app-preferences.ts +15 -0
  95. package/templates/.agents/dashboard/apps/frontend/src/app-session-token.ts +20 -0
  96. package/templates/.agents/dashboard/apps/frontend/src/cost-calculation-guide.css +267 -0
  97. package/templates/.agents/dashboard/apps/frontend/src/cost-calculation-guide.test.ts +69 -0
  98. package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +70 -0
  99. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.test.ts +111 -0
  100. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +432 -13
  101. package/templates/.agents/dashboard/apps/frontend/src/dashboard-localization.ts +1 -1
  102. package/templates/.agents/dashboard/apps/frontend/src/main.tsx +1 -0
  103. package/templates/.agents/dashboard/apps/frontend/src/operations-detail-hydration.test.ts +55 -0
  104. package/templates/.agents/dashboard/apps/frontend/src/operations-detail-hydration.ts +36 -0
  105. package/templates/.agents/dashboard/apps/frontend/src/operations-entity-page-projection.test.ts +126 -0
  106. package/templates/.agents/dashboard/apps/frontend/src/operations-entity-page-projection.ts +181 -0
  107. package/templates/.agents/dashboard/apps/frontend/src/operations-period-contract.test.ts +138 -0
  108. package/templates/.agents/dashboard/apps/frontend/src/operations-period-render.test.ts +105 -0
  109. package/templates/.agents/dashboard/apps/frontend/src/operations-period.test.ts +6 -3
  110. package/templates/.agents/dashboard/apps/frontend/src/operations-period.ts +9 -5
  111. package/templates/.agents/dashboard/apps/frontend/src/overview-status-page.test.ts +24 -0
  112. package/templates/.agents/dashboard/apps/frontend/src/period-transition-overlay.css +44 -0
  113. package/templates/.agents/dashboard/apps/frontend/src/project-settings-model.ts +121 -62
  114. package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +471 -2
  115. package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +84 -17
  116. package/templates/.agents/dashboard/apps/frontend/src/snapshot-banner-semantics.test.ts +44 -0
  117. package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +196 -39
  118. package/templates/.agents/dashboard/apps/frontend/src/snapshot-notice.ts +15 -0
  119. package/templates/.agents/dashboard/apps/frontend/src/sqlite-cost-adapters.ts +26 -0
  120. package/templates/.agents/dashboard/apps/frontend/src/styles.css +14 -2
  121. package/templates/.agents/dashboard/apps/frontend/src/traceability-workspace.css +38 -2
  122. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.test.ts +187 -0
  123. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.ts +190 -0
  124. package/templates/.agents/dashboard/apps/frontend/src/use-app-effects.ts +121 -0
  125. package/templates/.agents/dashboard/apps/frontend/src/use-app-operations-pages.ts +398 -0
  126. package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-documents.ts +141 -0
  127. package/templates/.agents/dashboard/apps/frontend/src/use-idle-cost-prefetch.ts +45 -0
  128. package/templates/.agents/dashboard/apps/frontend/src/work-list-pagination.test.ts +46 -0
  129. package/templates/.agents/dashboard/apps/frontend/src/work-list-pagination.ts +37 -0
  130. package/templates/.agents/dashboard/apps/frontend/vite.config.ts +55 -5
  131. package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
  132. package/templates/.agents/dashboard/modules/cost-monitor/src/contracts.ts +47 -6
  133. package/templates/.agents/dashboard/modules/cost-monitor/src/duration-estimate.ts +13 -0
  134. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CompactLifecycleCostTable.test.ts +64 -0
  135. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CompactLifecycleCostTable.tsx +275 -0
  136. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostCharts.test.ts +100 -15
  137. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostCharts.tsx +131 -40
  138. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostFilters.tsx +137 -19
  139. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostModelsAuditTable.test.ts +2 -0
  140. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostModelsAuditTable.tsx +13 -10
  141. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorContent.tsx +303 -0
  142. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.test.ts +226 -6
  143. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +479 -402
  144. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostSummary.tsx +5 -13
  145. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +312 -72
  146. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.tsx +373 -321
  147. package/templates/.agents/dashboard/modules/cost-monitor/src/react/MacroCostTable.test.ts +17 -0
  148. package/templates/.agents/dashboard/modules/cost-monitor/src/react/MacroCostTable.tsx +25 -6
  149. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-copy.ts +0 -2
  150. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-helpers.ts +17 -0
  151. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-responsive.css +6 -3
  152. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-row-filters.ts +123 -0
  153. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-summary.ts +8 -3
  154. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-views.ts +32 -0
  155. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor.css +52 -14
  156. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-table-presentation.ts +121 -0
  157. package/templates/.agents/dashboard/modules/cost-monitor/src/react/index.ts +3 -0
  158. package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.test.ts +68 -0
  159. package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.ts +32 -5
  160. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-compact-cost-page.ts +108 -0
  161. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.test.ts +12 -0
  162. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.ts +60 -0
  163. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-run-page.ts +106 -0
  164. package/templates/.agents/dashboard/modules/cost-monitor/src/server/aggregate.test.ts +2 -2
  165. package/templates/.agents/dashboard/modules/cost-monitor/src/server/aggregate.ts +5 -3
  166. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-pricing-fallback.test.ts +53 -0
  167. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.basics.test.ts +34 -0
  168. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.test.ts +168 -137
  169. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.ts +188 -29
  170. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.test.ts +956 -0
  171. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +775 -0
  172. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-terminal-day.test.ts +95 -0
  173. package/templates/.agents/dashboard/modules/cost-monitor/src/server/index.ts +1 -0
  174. package/templates/.agents/dashboard/modules/cost-monitor/src/server/refactor-map-xr9l.json +61 -0
  175. package/templates/.agents/dashboard/modules/cost-monitor/src/task-cost-groups.test.ts +41 -0
  176. package/templates/.agents/dashboard/modules/cost-monitor/src/task-cost-groups.ts +55 -11
  177. package/templates/.agents/dashboard/modules/operations/package.json +2 -1
  178. package/templates/.agents/dashboard/modules/operations/src/contracts.ts +182 -0
  179. package/templates/.agents/dashboard/modules/operations/src/duration-population.test.ts +63 -1
  180. package/templates/.agents/dashboard/modules/operations/src/duration-population.ts +60 -5
  181. package/templates/.agents/dashboard/modules/operations/src/react/EntityDetailsDialog.tsx +14 -3
  182. package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.test.ts +44 -1
  183. package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.tsx +325 -18
  184. package/templates/.agents/dashboard/modules/operations/src/react/MacroPlanningDialog.tsx +1 -0
  185. package/templates/.agents/dashboard/modules/operations/src/react/OperationDateFilters.test.ts +9 -5
  186. package/templates/.agents/dashboard/modules/operations/src/react/OperationDateFilters.tsx +2 -2
  187. package/templates/.agents/dashboard/modules/operations/src/react/OperationsMainContent.tsx +168 -0
  188. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.helpers.tsx +95 -6
  189. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.test.ts +365 -14
  190. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.tsx +532 -131
  191. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +314 -358
  192. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageNavigation.tsx +68 -0
  193. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageOverview.tsx +169 -0
  194. package/templates/.agents/dashboard/modules/operations/src/react/PeriodSummaryTable.tsx +51 -8
  195. package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.test.tsx +32 -0
  196. package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.tsx +62 -6
  197. package/templates/.agents/dashboard/modules/operations/src/react/TaskBoard.test.ts +55 -0
  198. package/templates/.agents/dashboard/modules/operations/src/react/TaskBoard.tsx +27 -19
  199. package/templates/.agents/dashboard/modules/operations/src/react/TaskDetailsDialog.tsx +99 -42
  200. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkBoard.priority.test.ts +19 -0
  201. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkBoard.tsx +255 -34
  202. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.test.ts +163 -8
  203. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.tsx +101 -68
  204. package/templates/.agents/dashboard/modules/operations/src/react/conversation-rows.test.ts +72 -1
  205. package/templates/.agents/dashboard/modules/operations/src/react/conversation-rows.ts +78 -16
  206. package/templates/.agents/dashboard/modules/operations/src/react/execution-metrics.ts +6 -4
  207. package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.test.ts +50 -1
  208. package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.tsx +143 -9
  209. package/templates/.agents/dashboard/modules/operations/src/react/export/export-layout.test.ts +29 -4
  210. package/templates/.agents/dashboard/modules/operations/src/react/macro-planning-dialog-content.css +49 -0
  211. package/templates/.agents/dashboard/modules/operations/src/react/macro-planning-dialog.css +93 -50
  212. package/templates/.agents/dashboard/modules/operations/src/react/manual-work-priority.test.ts +82 -0
  213. package/templates/.agents/dashboard/modules/operations/src/react/operation-date-range.test.ts +29 -2
  214. package/templates/.agents/dashboard/modules/operations/src/react/operation-date-range.ts +22 -1
  215. package/templates/.agents/dashboard/modules/operations/src/react/operation-duration.test.ts +77 -4
  216. package/templates/.agents/dashboard/modules/operations/src/react/operation-duration.ts +65 -5
  217. package/templates/.agents/dashboard/modules/operations/src/react/operations-coverage-toast.test.ts +54 -0
  218. package/templates/.agents/dashboard/modules/operations/src/react/operations-global-filters.test.ts +19 -0
  219. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +149 -12
  220. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview.status-cards.test.ts +27 -0
  221. package/templates/.agents/dashboard/modules/operations/src/react/operations-page-contract.ts +136 -0
  222. package/templates/.agents/dashboard/modules/operations/src/react/operations-period-scope.test.ts +160 -0
  223. package/templates/.agents/dashboard/modules/operations/src/react/operations-period-scope.ts +47 -0
  224. package/templates/.agents/dashboard/modules/operations/src/react/operations-query.ts +10 -0
  225. package/templates/.agents/dashboard/modules/operations/src/react/operations-responsive.css +3 -0
  226. package/templates/.agents/dashboard/modules/operations/src/react/operations-view-labels.ts +28 -0
  227. package/templates/.agents/dashboard/modules/operations/src/react/operations-view-order.test.ts +24 -7
  228. package/templates/.agents/dashboard/modules/operations/src/react/operations.css +42 -0
  229. package/templates/.agents/dashboard/modules/operations/src/react/period-summary-population.test.ts +54 -0
  230. package/templates/.agents/dashboard/modules/operations/src/react/period-summary-population.ts +32 -0
  231. package/templates/.agents/dashboard/modules/operations/src/react/period-summary.test.ts +165 -6
  232. package/templates/.agents/dashboard/modules/operations/src/react/period-summary.ts +148 -6
  233. package/templates/.agents/dashboard/modules/operations/src/react/popup-localization.test.ts +1 -1
  234. package/templates/.agents/dashboard/modules/operations/src/react/unified-work-board.css +132 -0
  235. package/templates/.agents/dashboard/modules/operations/src/react/unified-work-board.css.test.ts +13 -0
  236. package/templates/.agents/dashboard/modules/operations/src/react/unified-work-board.header.test.ts +16 -0
  237. package/templates/.agents/dashboard/modules/operations/src/react/use-infinite-column.ts +11 -5
  238. package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.test.ts +5 -3
  239. package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.ts +4 -83
  240. package/templates/.agents/dashboard/modules/operations/src/server/build-operations-projection.test.ts +291 -15
  241. package/templates/.agents/dashboard/modules/operations/src/server/build-operations-projection.ts +182 -472
  242. package/templates/.agents/dashboard/modules/operations/src/server/canonical-compat.test.ts +40 -0
  243. package/templates/.agents/dashboard/modules/operations/src/server/canonical-compat.ts +19 -6
  244. package/templates/.agents/dashboard/modules/operations/src/server/canonical-run-projection.ts +31 -6
  245. package/templates/.agents/dashboard/modules/operations/src/server/daily-duration-projection.ts +220 -0
  246. package/templates/.agents/dashboard/modules/operations/src/server/execution-duration-projection.ts +28 -0
  247. package/templates/.agents/dashboard/modules/operations/src/server/execution-relationship-counts.test.ts +27 -2
  248. package/templates/.agents/dashboard/modules/operations/src/server/execution-relationship-counts.ts +22 -13
  249. package/templates/.agents/dashboard/modules/operations/src/server/filter.test.ts +3 -3
  250. package/templates/.agents/dashboard/modules/operations/src/server/filter.ts +7 -2
  251. package/templates/.agents/dashboard/modules/operations/src/server/index.ts +3 -0
  252. package/templates/.agents/dashboard/modules/operations/src/server/macro.ts +3 -12
  253. package/templates/.agents/dashboard/modules/operations/src/server/manifest-usage.ts +65 -0
  254. package/templates/.agents/dashboard/modules/operations/src/server/operations-projection-aggregates.ts +297 -0
  255. package/templates/.agents/dashboard/modules/operations/src/server/quick-daily-operations-projection.ts +324 -0
  256. package/templates/.agents/dashboard/modules/operations/src/server/quick-operations-projection.test.ts +505 -0
  257. package/templates/.agents/dashboard/modules/operations/src/server/quick-operations-projection.ts +609 -0
  258. package/templates/.agents/dashboard/modules/operations/src/server/runs.ts +18 -19
  259. package/templates/.agents/dashboard/modules/operations/src/work-board-model.ts +76 -0
  260. package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
  261. package/templates/.agents/dashboard/modules/traceability/src/server/build-task-trace.ts +3 -1
  262. package/templates/.agents/dashboard/packages/branding/package.json +1 -1
  263. package/templates/.agents/dashboard/packages/branding/src/index.ts +1 -1
  264. package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
  265. package/templates/.agents/dashboard/packages/contracts/src/index.ts +1 -0
  266. package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
  267. package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +1756 -0
  268. package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +1608 -0
  269. package/templates/.agents/dashboard/packages/local-runtime/package.json +8 -3
  270. package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-dashboard.mjs +12 -0
  271. package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +83 -0
  272. package/templates/.agents/dashboard/packages/local-runtime/scripts/rebuild-sqlite-read-model.mjs +28 -0
  273. package/templates/.agents/dashboard/packages/local-runtime/scripts/test-sqlite-read-model.mjs +262 -0
  274. package/templates/.agents/dashboard/packages/local-runtime/scripts/test-unix-launchers.mjs +41 -0
  275. package/templates/.agents/dashboard/packages/local-runtime/scripts/validate-sqlite-read-model.mjs +105 -0
  276. package/templates/.agents/dashboard/packages/local-runtime/server.mjs +1643 -107
  277. package/templates/.agents/dashboard/packages/local-runtime/src/agent-adapter-sync.ts +30 -0
  278. package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.test.ts +3 -2
  279. package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.ts +5 -0
  280. package/templates/.agents/dashboard/packages/local-runtime/src/manifest-runs.ts +72 -33
  281. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +335 -4
  282. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +392 -1
  283. package/templates/.agents/dashboard/packages/local-runtime/src/runtime.mjs +5 -5
  284. package/templates/.agents/dashboard/packages/local-runtime/src/server-board.test.ts +71 -0
  285. package/templates/.agents/dashboard/packages/local-runtime/src/server-board.ts +179 -0
  286. package/templates/.agents/dashboard/packages/local-runtime/src/server-cross-layer-parity.test.ts +245 -0
  287. package/templates/.agents/dashboard/packages/local-runtime/src/server-daily-read-models-route.ts +64 -0
  288. package/templates/.agents/dashboard/packages/local-runtime/src/server-daily-read-models.test.ts +204 -0
  289. package/templates/.agents/dashboard/packages/local-runtime/src/server-daily-read-models.ts +194 -0
  290. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-pages.test.ts +163 -0
  291. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-pages.ts +354 -0
  292. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-runs-route.test.ts +74 -0
  293. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-runs-route.ts +113 -0
  294. package/templates/.agents/dashboard/packages/local-runtime/src/server-overview.test.ts +68 -0
  295. package/templates/.agents/dashboard/packages/local-runtime/src/server-period.ts +47 -0
  296. package/templates/.agents/dashboard/packages/local-runtime/src/server-projections.ts +483 -0
  297. package/templates/.agents/dashboard/packages/local-runtime/src/server-settings.test.ts +5 -2
  298. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot.test.ts +163 -84
  299. package/templates/.agents/dashboard/packages/local-runtime/src/server-workspace.ts +145 -0
  300. package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +551 -266
  301. package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +1145 -308
  302. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.test.ts +53 -0
  303. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.ts +708 -0
  304. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +2232 -0
  305. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.ts +6151 -0
  306. package/templates/.agents/dashboard/packages/local-runtime/src/work-priority-contract.test.ts +33 -0
  307. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-history.mjs +41 -0
  308. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-processes.mjs +210 -0
  309. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +437 -190
  310. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +299 -24
  311. package/templates/.agents/dashboard/packages/ui/package.json +1 -1
  312. package/templates/.agents/dashboard/packages/windows-launcher/LauncherVerificationBehaviorTests.cs +206 -0
  313. package/templates/.agents/dashboard/packages/windows-launcher/Program.cs +95 -8
  314. package/templates/.agents/dashboard/packages/windows-launcher/build-dashboard-launcher.ps1 +2 -2
  315. package/templates/.agents/dashboard/packages/windows-launcher/run-launcher-verification-tests.ps1 +22 -0
  316. package/templates/.agents/dashboard/read-model.dbml +2201 -0
  317. package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
  318. package/templates/.agents/dashboard/tests/e2e/playwright.config.ts +1 -1
  319. package/templates/.agents/dashboard/tests/e2e/specs/dashboard.spec.ts +214 -41
  320. package/templates/.agents/dashboard/work-priority.json +34 -0
  321. package/templates/.agents/dashboard/zaip-dashboard-linux.sh +45 -0
  322. package/templates/.agents/dashboard/zaip-dashboard-mac.command +3 -0
  323. package/templates/.agents/dashboard/zaip-dashboard-windows.exe +0 -0
  324. package/templates/.agents/design/.zaip-managed.json +3 -3
  325. package/templates/.agents/design/apps/catalog/package.json +1 -1
  326. package/templates/.agents/design/packages/local-runtime/package.json +1 -1
  327. package/templates/.agents/requirements/autonomous-assurance.md +1 -1
  328. package/templates/.agents/requirements/comparative-audit.md +1 -1
  329. package/templates/.agents/requirements/context-engine.md +1 -1
  330. package/templates/.agents/requirements/cost-observability.md +1 -1
  331. package/templates/.agents/requirements/dashboard-launch.md +24 -0
  332. package/templates/.agents/requirements/data-export.md +1 -1
  333. package/templates/.agents/requirements/design-system.md +1 -1
  334. package/templates/.agents/requirements/execution-engine.md +1 -1
  335. package/templates/.agents/requirements/kanban-dashboard.md +4 -3
  336. package/templates/.agents/requirements/model-orchestration.md +1 -1
  337. package/templates/.agents/requirements/public-distribution.md +9 -6
  338. package/templates/.agents/requirements/software-architecture.md +1 -1
  339. package/templates/.agents/requirements/strategic-improvements.md +1 -1
  340. package/templates/.agents/requirements/work-lifecycle.md +9 -3
  341. package/templates/.agents/requirements/zaip-strategic-95.md +4 -4
  342. package/templates/.agents/rules/autonomy-decision.md +15 -0
  343. package/templates/.agents/rules/core.md +1 -1
  344. package/templates/.agents/rules/run-lifecycle-closure.md +1 -1
  345. package/templates/.agents/rules/specialist-routing.md +19 -0
  346. package/templates/.agents/rules/workflow.md +1 -1
  347. package/templates/.agents/runtime/VERSION +1 -1
  348. package/templates/.agents/runtime/bin/zaip.mjs +114 -64
  349. package/templates/.agents/runtime/checksums.sha256 +6 -4
  350. package/templates/.agents/runtime/manifest.json +3 -1
  351. package/templates/.agents/runtime/pnpm-lock.sha256 +1 -0
  352. package/templates/.agents/runtime/provenance.json +11 -0
  353. package/templates/.agents/runtime/sbom.cdx.json +1929 -39
  354. package/templates/.agents/skills/zaip-aios/SKILL.md +1 -1
  355. package/templates/.agents/skills/zaip-skill-brand-governance/SKILL.md +15 -0
  356. package/templates/.agents/skills/zaip-skill-brand-governance/agents/openai.yaml +4 -0
  357. package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-standards.md +30 -0
  358. package/templates/.agents/skills/zaip-skill-dashboard-sqlite/SKILL.md +25 -0
  359. package/templates/.agents/skills/zaip-skill-dashboard-sqlite/agents/openai.yaml +4 -0
  360. package/templates/.agents/skills/zaip-skill-executar-fila-pronta/SKILL.md +18 -0
  361. package/templates/.agents/skills/zaip-skill-executar-fila-pronta/agents/openai.yaml +6 -0
  362. package/templates/.agents/skills/zaip-skill-executar-fila-pronta/scripts/ready-queue-fence.mjs +71 -0
  363. package/templates/.agents/skills/zaip-skill-executar-fila-pronta/scripts/ready-queue-fence.test.mjs +60 -0
  364. package/templates/.agents/skills/zaip-skill-executar-fila-pronta/scripts/scheduled-ready-queue-contract.test.mjs +111 -0
  365. package/templates/.agents/skills/zaip-skill-execution/SKILL.md +2 -2
  366. package/templates/.agents/skills/zaip-skill-frontend-launcher/references/launcher-contract.md +3 -1
  367. package/templates/.agents/skills/zaip-skill-general-operations/SKILL.md +12 -0
  368. package/templates/.agents/skills/zaip-skill-general-operations/agents/openai.yaml +4 -0
  369. package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +9 -7
  370. package/templates/.agents/skills/zaip-skill-github-deploy/agents/openai.yaml +2 -2
  371. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs +11 -38
  372. package/templates/.agents/skills/zaip-skill-governance-compliance/SKILL.md +12 -0
  373. package/templates/.agents/skills/zaip-skill-governance-compliance/agents/openai.yaml +4 -0
  374. package/templates/.agents/skills/zaip-skill-growth-strategy-revops/SKILL.md +15 -0
  375. package/templates/.agents/skills/zaip-skill-growth-strategy-revops/agents/openai.yaml +4 -0
  376. package/templates/.agents/skills/zaip-skill-growth-strategy-revops/references/growth-revops-framework.md +25 -0
  377. package/templates/.agents/skills/zaip-skill-instalar-agendamento/SKILL.md +17 -0
  378. package/templates/.agents/skills/zaip-skill-instalar-agendamento/agents/openai.yaml +6 -0
  379. package/templates/.agents/skills/zaip-skill-marketing/SKILL.md +3 -3
  380. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-local-telemetry.mjs +76 -27
  381. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.mjs +128 -24
  382. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.test.mjs +122 -4
  383. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.mjs +66 -19
  384. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.test.mjs +193 -7
  385. package/templates/.agents/skills/zaip-skill-sales-methodology/SKILL.md +14 -0
  386. package/templates/.agents/skills/zaip-skill-sales-methodology/agents/openai.yaml +4 -0
  387. package/templates/.agents/skills/zaip-skill-sales-methodology/references/sales-process-framework.md +77 -0
  388. package/templates/.agents/skills/zaip-skill-setup/SKILL.md +5 -0
  389. package/templates/.agents/skills/zaip-skill-sqlite-read-model/SKILL.md +96 -0
  390. package/templates/.agents/skills/zaip-skill-sqlite-read-model/agents/openai.yaml +4 -0
  391. package/templates/.agents/skills/zaip-skill-sqlite-read-model/scripts/ensure-node.mjs +18 -0
  392. package/templates/.agents/zaip-aios/INDEX.md +1 -0
  393. package/templates/.agents/zaip-aios/README.md +37 -8
  394. package/templates/.agents/zaip-aios/VERSION +1 -1
  395. package/templates/.agents/zaip-aios/guides/09-agentes-e-squads.md +43 -6
  396. package/templates/.agents/zaip-aios/guides/10-seguranca.md +21 -7
  397. package/templates/.agents/zaip-aios/guides/17-como-o-custo-e-calculado.md +32 -0
  398. package/templates/template-manifest.json +945 -214
  399. package/templates/.agents/dashboard/apps/frontend/dist/assets/AgentCatalogSettingsPage-CLYIi7Vo.js +0 -1
  400. package/templates/.agents/dashboard/apps/frontend/dist/assets/AgentCatalogSettingsPage-DTDNVQGX.css +0 -1
  401. package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-CzEggcRb.js +0 -1
  402. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-05YKn6Z4.js +0 -3
  403. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-YO3yqtgV.css +0 -1
  404. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-8AzCnl3a.js +0 -77
  405. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-DdBYQ_8D.css +0 -1
  406. package/templates/.agents/dashboard/apps/frontend/src/AgentCatalogSettingsPage.tsx +0 -617
  407. package/templates/.agents/dashboard/apps/frontend/src/agent-catalog-settings-page.css +0 -660
  408. package/templates/.agents/dashboard/apps/frontend/src/agent-catalog-settings.test.ts +0 -249
  409. package/templates/.agents/dashboard/dashboard.config.json +0 -4
  410. package/templates/.agents/dashboard/zaip-dashboard.exe +0 -0
@@ -1,617 +0,0 @@
1
- import { useEffect, useMemo, useRef, useState } from "react";
2
- import type {
3
- AgentCatalogAgent,
4
- AgentCatalogSettings,
5
- AgentReasoningEffort,
6
- DashboardApiClient,
7
- } from "./dashboard-api.js";
8
- import "./agent-catalog-settings-page.css";
9
-
10
- const copy = {
11
- "pt-BR": {
12
- eyebrow: "Configurações",
13
- title: "Catálogo de agentes",
14
- intro: "Os agentes do framework possuem edições limitadas para garantir o funcionamento.",
15
- add: "Adicionar agente",
16
- edit: "Editar",
17
- save: "Salvar agente",
18
- saving: "Salvando e sincronizando…",
19
- cancel: "Cancelar",
20
- close: "Fechar",
21
- back: "Voltar ao dashboard",
22
- loading: "Carregando catálogo de agentes…",
23
- framework: "Framework",
24
- custom: "Customizado",
25
- codexName: "Identidade técnica",
26
- personaName: "Persona (nome)",
27
- personaRole: "Persona (cargo)",
28
- prompt: "Prompt base",
29
- model: "Modelo preferido",
30
- automaticPolicy: "Política automática (padrão: {value})",
31
- effort: "Reasoning effort",
32
- identityTitle: "Identidade e instrução",
33
- runtimeTitle: "Configuração de execução",
34
- runtimeHint: "Escolha um valor específico ou mantenha o padrão configurado no projeto.",
35
- lockedHint: "Identidade e Prompt base são protegidos pelo framework.",
36
- capabilities: "Capacidades",
37
- capabilitiesHint: "Selecione uma capacidade; remova qualquer badge pelo botão ×.",
38
- capabilitiesLockedHint: "As capacidades do framework são somente leitura.",
39
- capabilitySelect: "Selecionar capacidade",
40
- capabilityRemove: "Remover",
41
- photoUrl: "URL da foto",
42
- remove: "Remover agente",
43
- removePending: "A remoção será aplicada somente ao salvar.",
44
- saveRemoval: "Salvar remoção",
45
- modelSummary: "Modelo",
46
- effortSummary: "Esforço",
47
- editTitle: "Editar agente",
48
- createTitle: "Adicionar agente",
49
- modalHint: "Revise a configuração e salve para sincronizar o catálogo central e os adapters.",
50
- saved: "Catálogo salvo; adapters válidos e sem drift.",
51
- },
52
- "en-US": {
53
- eyebrow: "Settings",
54
- title: "Agent Catalog",
55
- intro: "Framework agents have limited editing to ensure proper operation.",
56
- add: "Add custom agent",
57
- edit: "Edit",
58
- save: "Save agent",
59
- saving: "Saving and syncing…",
60
- cancel: "Cancel",
61
- close: "Close",
62
- back: "Back to dashboard",
63
- loading: "Loading agent catalog…",
64
- framework: "Framework",
65
- custom: "Custom",
66
- codexName: "Technical identity",
67
- personaName: "Persona (name)",
68
- personaRole: "Persona (role)",
69
- prompt: "Base prompt",
70
- model: "Preferred model",
71
- automaticPolicy: "Automatic policy (default: {value})",
72
- effort: "Reasoning effort",
73
- identityTitle: "Identity and instruction",
74
- runtimeTitle: "Execution configuration",
75
- runtimeHint: "Choose a specific value or keep the default configured for this project.",
76
- lockedHint: "Identity and base prompt are protected by the framework.",
77
- capabilities: "Capabilities",
78
- capabilitiesHint: "Select a capability; remove any badge with its × button.",
79
- capabilitiesLockedHint: "Framework capabilities are read-only.",
80
- capabilitySelect: "Select capability",
81
- capabilityRemove: "Remove",
82
- photoUrl: "Photo URL",
83
- remove: "Remove agent",
84
- removePending: "Removal will be applied only when you save.",
85
- saveRemoval: "Save removal",
86
- modelSummary: "Model",
87
- effortSummary: "Effort",
88
- editTitle: "Edit agent",
89
- createTitle: "Add agent",
90
- modalHint: "Review the configuration and save to sync the central catalog and adapters.",
91
- saved: "Catalog saved; adapters are valid with no drift.",
92
- },
93
- } as const;
94
-
95
- export function AgentCatalogSettingsPage({
96
- api,
97
- locale,
98
- onClose,
99
- }: {
100
- api: DashboardApiClient;
101
- locale: keyof typeof copy;
102
- onClose: () => void;
103
- }) {
104
- const text = copy[locale];
105
- const [settings, setSettings] = useState<AgentCatalogSettings | null>(null);
106
- const [saving, setSaving] = useState(false);
107
- const [error, setError] = useState<string | null>(null);
108
- const [notice, setNotice] = useState<string | null>(null);
109
- const [editor, setEditor] = useState<AgentCatalogEditorState | null>(null);
110
- const [localPortraitFallbacks, setLocalPortraitFallbacks] = useState<Set<string>>(
111
- () => new Set(),
112
- );
113
- const [unavailablePortraits, setUnavailablePortraits] = useState<Set<string>>(() => new Set());
114
- const closeButtonRef = useRef<HTMLButtonElement>(null);
115
- const openerRef = useRef<HTMLButtonElement | null>(null);
116
- const addButtonRef = useRef<HTMLButtonElement>(null);
117
- const savingRef = useRef(saving);
118
- const isEditorOpen = editor !== null;
119
- const frameworkIds = useMemo(
120
- () => new Set(settings?.framework_agent_ids ?? []),
121
- [settings?.framework_agent_ids],
122
- );
123
-
124
- useEffect(() => {
125
- void api
126
- .agentCatalog()
127
- .then(setSettings)
128
- .catch((cause) => setError(cause instanceof Error ? cause.message : String(cause)));
129
- }, [api]);
130
-
131
- useEffect(() => {
132
- savingRef.current = saving;
133
- }, [saving]);
134
-
135
- useEffect(() => {
136
- if (!isEditorOpen) return;
137
- const onKeyDown = (event: KeyboardEvent) => {
138
- if (event.key === "Escape" && !savingRef.current) setEditor(null);
139
- if (event.key !== "Tab") return;
140
- const modal = closeButtonRef.current?.closest<HTMLElement>('[role="dialog"]');
141
- const focusable = modal
142
- ? [
143
- ...modal.querySelectorAll<HTMLElement>(
144
- 'button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])',
145
- ),
146
- ]
147
- : [];
148
- const first = focusable[0];
149
- const last = focusable.at(-1);
150
- if (!first || !last) return;
151
- if (event.shiftKey && document.activeElement === first) {
152
- event.preventDefault();
153
- last.focus();
154
- } else if (!event.shiftKey && document.activeElement === last) {
155
- event.preventDefault();
156
- first.focus();
157
- }
158
- };
159
- const previousOverflow = document.body.style.overflow;
160
- document.body.style.overflow = "hidden";
161
- document.addEventListener("keydown", onKeyDown);
162
- closeButtonRef.current?.focus();
163
- return () => {
164
- document.body.style.overflow = previousOverflow;
165
- document.removeEventListener("keydown", onKeyDown);
166
- restoreAgentCatalogFocus(openerRef.current, addButtonRef.current);
167
- };
168
- }, [isEditorOpen]);
169
-
170
- const updateDraft = (update: (agent: AgentCatalogAgent) => AgentCatalogAgent) => {
171
- setNotice(null);
172
- setEditor((current) =>
173
- current === null ? null : { ...current, agent: update(current.agent) },
174
- );
175
- };
176
-
177
- if (settings === null) {
178
- return (
179
- <main className="agent-catalog-state">
180
- <p>{text.eyebrow}</p>
181
- <h1>{error ?? text.loading}</h1>
182
- <button onClick={onClose} type="button">
183
- {text.back}
184
- </button>
185
- </main>
186
- );
187
- }
188
-
189
- const persistAgents = async (agents: AgentCatalogAgent[]) => {
190
- setSaving(true);
191
- setError(null);
192
- setNotice(null);
193
- try {
194
- const updated = await api.saveAgentCatalog(agents);
195
- setSettings(updated);
196
- setEditor(null);
197
- setNotice(text.saved);
198
- } catch (cause) {
199
- setError(cause instanceof Error ? cause.message : String(cause));
200
- } finally {
201
- setSaving(false);
202
- }
203
- };
204
-
205
- const saveDraft = async () => {
206
- if (editor === null) return;
207
- const nextAgents = applyAgentEditorDraft(settings.catalog.agents, editor);
208
- await persistAgents(nextAgents);
209
- };
210
-
211
- return (
212
- <main className="agent-catalog-page">
213
- <header className="agent-catalog-header">
214
- <div className="agent-catalog-header-actions">
215
- <button className="agent-catalog-back" onClick={onClose} type="button">
216
- {text.back}
217
- </button>
218
- <button
219
- className="agent-catalog-add"
220
- onClick={(event) => {
221
- openerRef.current = event.currentTarget;
222
- setEditor({
223
- sourceId: null,
224
- agent: createCustomAgent(settings.catalog.agents),
225
- removeOnSave: false,
226
- });
227
- }}
228
- ref={addButtonRef}
229
- type="button"
230
- >
231
- {text.add}
232
- </button>
233
- </div>
234
- <div className="agent-catalog-header-copy">
235
- <p>{text.eyebrow}</p>
236
- <h1>{text.title}</h1>
237
- <span>{text.intro}</span>
238
- </div>
239
- </header>
240
-
241
- {error ? <div className="agent-catalog-error">{error}</div> : null}
242
- {notice ? <div className="agent-catalog-success">{notice}</div> : null}
243
-
244
- <div className="agent-catalog-grid">
245
- {settings.catalog.agents.map((agent) => {
246
- const isFramework = frameworkIds.has(agent.id);
247
- const modelSummary = effectiveModelValue(agent.model.preferred[0]);
248
- const displayedModelSummary =
249
- modelSummary === "policy-selected"
250
- ? automaticPolicyLabel(text.automaticPolicy, settings.default_model)
251
- : modelSummary;
252
- const effortSummary = effectiveEffortValue(agent.model.reasoning_effort);
253
- const displayedEffortSummary =
254
- effortSummary === "policy-selected"
255
- ? automaticPolicyLabel(text.automaticPolicy, settings.default_reasoning_effort)
256
- : effortSummary;
257
- const externalPortrait = safePhotoUrl(agent.persona.foto_url);
258
- const usesLocalPortrait =
259
- externalPortrait === null || localPortraitFallbacks.has(agent.id);
260
- const hasPortrait = !unavailablePortraits.has(agent.id);
261
- return (
262
- <article className="agent-catalog-card" key={agent.id}>
263
- {hasPortrait ? (
264
- <div className="agent-catalog-card-portrait">
265
- <img
266
- alt={`Retrato de ${humanizeAgentLabel(agent.persona.nome)}`}
267
- onError={() => {
268
- if (!usesLocalPortrait && externalPortrait !== null) {
269
- setLocalPortraitFallbacks((current) => new Set([...current, agent.id]));
270
- return;
271
- }
272
- setUnavailablePortraits((current) => new Set([...current, agent.id]));
273
- }}
274
- referrerPolicy="no-referrer"
275
- src={usesLocalPortrait ? api.agentPortraitUrl(agent.id) : externalPortrait}
276
- />
277
- </div>
278
- ) : null}
279
- <div className="agent-catalog-card-heading">
280
- <div className="agent-catalog-card-title">
281
- <span className={isFramework ? "is-framework" : "is-custom"}>
282
- {isFramework ? text.framework : text.custom}
283
- </span>
284
- <h2>
285
- {humanizeAgentLabel(agent.persona.nome)} ·{" "}
286
- {humanizeAgentLabel(agent.persona.cargo)}
287
- </h2>
288
- <code>{agent.codex_name}</code>
289
- </div>
290
- </div>
291
- <div className="agent-catalog-card-body">
292
- <p className="agent-catalog-card-prompt" title={agent.purpose}>
293
- {agent.purpose}
294
- </p>
295
- <dl className="agent-catalog-runtime-summary">
296
- <div>
297
- <dt>{text.modelSummary}</dt>
298
- <dd>{displayedModelSummary}</dd>
299
- </div>
300
- <div>
301
- <dt>{text.effortSummary}</dt>
302
- <dd>{displayedEffortSummary}</dd>
303
- </div>
304
- </dl>
305
- <button
306
- className="agent-catalog-edit"
307
- onClick={(event) => {
308
- openerRef.current = event.currentTarget;
309
- setEditor({
310
- sourceId: agent.id,
311
- agent: cloneAgent(agent),
312
- removeOnSave: false,
313
- });
314
- }}
315
- type="button"
316
- >
317
- {text.edit}
318
- </button>
319
- </div>
320
- </article>
321
- );
322
- })}
323
- </div>
324
-
325
- {editor ? (
326
- /* biome-ignore lint/a11y/noStaticElementInteractions: the backdrop only detects an outside-pointer dismissal. */
327
- <div
328
- className="agent-catalog-modal-backdrop"
329
- onMouseDown={(event) => {
330
- if (event.target === event.currentTarget && !saving) setEditor(null);
331
- }}
332
- >
333
- <section
334
- aria-labelledby="agent-catalog-editor-title"
335
- aria-modal="true"
336
- className="agent-catalog-modal"
337
- role="dialog"
338
- >
339
- <header className="agent-catalog-modal-header">
340
- <div>
341
- <span>{editor.sourceId === null ? text.custom : text.edit}</span>
342
- <h2 id="agent-catalog-editor-title">
343
- {editor.sourceId === null ? text.createTitle : text.editTitle}
344
- </h2>
345
- <p>{text.modalHint}</p>
346
- </div>
347
- <button
348
- aria-label={text.close}
349
- className="agent-catalog-modal-close"
350
- disabled={saving}
351
- onClick={() => setEditor(null)}
352
- ref={closeButtonRef}
353
- type="button"
354
- >
355
- ×
356
- </button>
357
- </header>
358
-
359
- <div className="agent-catalog-modal-body">
360
- {frameworkIds.has(editor.sourceId ?? "") ? (
361
- <p className="agent-catalog-card-lock">{text.lockedHint}</p>
362
- ) : null}
363
- <section className="agent-catalog-card-section">
364
- <h3>{text.identityTitle}</h3>
365
- <label>
366
- <span>{text.personaName}</span>
367
- <input
368
- onChange={(event) =>
369
- updateDraft((current) =>
370
- withPersona(current, event.target.value, current.persona.cargo),
371
- )
372
- }
373
- value={editor.agent.persona.nome}
374
- />
375
- </label>
376
- <label>
377
- <span>{text.personaRole}</span>
378
- <input
379
- onChange={(event) =>
380
- updateDraft((current) =>
381
- withPersona(current, current.persona.nome, event.target.value),
382
- )
383
- }
384
- value={editor.agent.persona.cargo}
385
- />
386
- </label>
387
- </section>
388
-
389
- {error ? <div className="agent-catalog-error">{error}</div> : null}
390
- </div>
391
-
392
- <footer className="agent-catalog-modal-actions">
393
- <div>
394
- {editor.sourceId !== null && !frameworkIds.has(editor.sourceId) ? (
395
- <>
396
- <button
397
- aria-pressed={editor.removeOnSave}
398
- className="agent-catalog-remove"
399
- disabled={saving}
400
- onClick={() =>
401
- setEditor((current) =>
402
- current === null ? null : { ...current, removeOnSave: true },
403
- )
404
- }
405
- type="button"
406
- >
407
- {text.remove}
408
- </button>
409
- {editor.removeOnSave ? <small>{text.removePending}</small> : null}
410
- </>
411
- ) : null}
412
- </div>
413
- <div>
414
- <button
415
- className="agent-catalog-cancel"
416
- disabled={saving}
417
- onClick={() => setEditor(null)}
418
- type="button"
419
- >
420
- {text.cancel}
421
- </button>
422
- <button
423
- className="agent-catalog-save"
424
- disabled={saving}
425
- onClick={() => void saveDraft()}
426
- type="button"
427
- >
428
- {saving ? text.saving : editor.removeOnSave ? text.saveRemoval : text.save}
429
- </button>
430
- </div>
431
- </footer>
432
- </section>
433
- </div>
434
- ) : null}
435
- </main>
436
- );
437
- }
438
-
439
- export interface AgentCatalogEditorState {
440
- sourceId: string | null;
441
- agent: AgentCatalogAgent;
442
- removeOnSave: boolean;
443
- }
444
-
445
- export function safePhotoUrl(value: string | undefined): string | null {
446
- if (!value) return null;
447
- try {
448
- const url = new URL(value);
449
- return url.protocol === "http:" || url.protocol === "https:" ? url.toString() : null;
450
- } catch {
451
- return null;
452
- }
453
- }
454
-
455
- export interface AgentCatalogFocusTarget {
456
- isConnected: boolean;
457
- focus(): void;
458
- }
459
-
460
- export function restoreAgentCatalogFocus(
461
- opener: AgentCatalogFocusTarget | null,
462
- fallback: AgentCatalogFocusTarget | null,
463
- ): void {
464
- if (opener?.isConnected) {
465
- opener.focus();
466
- return;
467
- }
468
- fallback?.focus();
469
- }
470
-
471
- export function applyAgentEditorDraft(
472
- agents: readonly AgentCatalogAgent[],
473
- editor: AgentCatalogEditorState,
474
- ): AgentCatalogAgent[] {
475
- if (editor.sourceId !== null && editor.removeOnSave) {
476
- return agents.filter((candidate) => candidate.id !== editor.sourceId);
477
- }
478
- if (editor.sourceId === null) return [...agents, editor.agent];
479
- return agents.map((agent) =>
480
- agent.id === editor.sourceId
481
- ? {
482
- ...agent,
483
- persona: {
484
- ...agent.persona,
485
- nome: editor.agent.persona.nome,
486
- cargo: editor.agent.persona.cargo,
487
- },
488
- }
489
- : agent,
490
- );
491
- }
492
-
493
- export function cloneAgent(agent: AgentCatalogAgent): AgentCatalogAgent {
494
- return {
495
- ...agent,
496
- persona: { ...agent.persona },
497
- nickname_candidates: [...(agent.nickname_candidates as string[])],
498
- capabilities: [...agent.capabilities],
499
- model: {
500
- ...agent.model,
501
- preferred: [...agent.model.preferred],
502
- },
503
- };
504
- }
505
-
506
- export function createCustomAgent(existing: readonly AgentCatalogAgent[]): AgentCatalogAgent {
507
- let suffix = 1;
508
- let id = "agent-custom";
509
- while (existing.some((agent) => agent.id === id)) {
510
- suffix += 1;
511
- id = `agent-custom-${suffix}`;
512
- }
513
- const name = id.replace(/^agent-/, "");
514
- return {
515
- id,
516
- version: 1,
517
- purpose: "Execute a bounded custom task and return structured evidence to the orchestrator.",
518
- codex_name: `zaip-agent-${name}`,
519
- codex_task_name: `zaip_agent_${name.replaceAll("-", "_")}`,
520
- persona: { nome: "custom", cargo: suffix === 1 ? "agent" : `agent_${suffix}` },
521
- nickname_candidates: [
522
- `custom_${suffix === 1 ? "agent" : `agent_${suffix}`}_zaip_agent_${name.replaceAll("-", "_")}`,
523
- ],
524
- role: "task-executor",
525
- priority: 50,
526
- inherits: null,
527
- capabilities: ["custom-task-delivery"],
528
- execution_eligibility: ["delivery"],
529
- tools: ["shell-read", "test-runner"],
530
- skills: ["zaip-skill-change"],
531
- write_scopes: ["declared-write-scope"],
532
- permissions: {
533
- filesystem: { allow: ["declared-write-scope"], deny: ["outside-workspace"] },
534
- network: { allow: [], deny: ["external"] },
535
- shell: { allow: ["tests", "validation"], deny: ["destructive", "deploy"] },
536
- deployment: { allow: [], deny: ["all"] },
537
- },
538
- model: {
539
- required_capabilities: ["tool-use", "structured-output"],
540
- preferred: ["policy-selected"],
541
- },
542
- budget: { soft_cycles: 20 },
543
- contract: {
544
- inputs: ["task", "requirements", "context-pack"],
545
- outputs: ["structured-outcome"],
546
- evidence: ["acceptance-evidence"],
547
- },
548
- review: { can_approve: false, cannot_review_roles: ["task-executor"] },
549
- escalation: ["agent-orchestrator"],
550
- };
551
- }
552
-
553
- export function effectiveConfiguredValue(value: string | null): string {
554
- return value ?? "—";
555
- }
556
-
557
- export function humanizeAgentLabel(value: string): string {
558
- return value
559
- .split(/[_-]+/)
560
- .filter(Boolean)
561
- .map((part) =>
562
- part.toLowerCase() === "qa" ? "QA" : `${part[0]?.toUpperCase()}${part.slice(1)}`,
563
- )
564
- .join(" ");
565
- }
566
-
567
- export function automaticPolicyLabel(template: string, configuredDefault: string | null): string {
568
- return template.replace("{value}", effectiveConfiguredValue(configuredDefault));
569
- }
570
-
571
- export function effectiveModelValue(preferred: string | undefined): string {
572
- return preferred ?? "policy-selected";
573
- }
574
-
575
- export function effectiveEffortValue(effort: AgentReasoningEffort | undefined): string {
576
- return effort ?? "policy-selected";
577
- }
578
-
579
- export function withCustomName(agent: AgentCatalogAgent, rawName: string): AgentCatalogAgent {
580
- return withPersona(agent, rawName, agent.persona.cargo);
581
- }
582
-
583
- export function withPersona(
584
- agent: AgentCatalogAgent,
585
- rawName: string,
586
- rawRole: string,
587
- ): AgentCatalogAgent {
588
- const personaName = normalizePersonaPart(rawName);
589
- const personaRole = normalizePersonaPart(rawRole);
590
- if (!personaName || !personaRole) return agent;
591
- return {
592
- ...agent,
593
- persona: { nome: personaName, cargo: personaRole },
594
- nickname_candidates: [`${personaName}_${personaRole}_zaip_agent`],
595
- };
596
- }
597
-
598
- function normalizePersonaPart(rawName: string): string {
599
- const normalized = rawName
600
- .trim()
601
- .toLowerCase()
602
- .replace(/[^a-z0-9-]+/g, "-")
603
- .replace(/^-+|-+$/g, "")
604
- .replaceAll("-", "_");
605
- return normalized;
606
- }
607
-
608
- function _commaSeparatedValues(value: string): string[] {
609
- return [
610
- ...new Set(
611
- value
612
- .split(",")
613
- .map((item) => item.trim())
614
- .filter(Boolean),
615
- ),
616
- ];
617
- }