@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
@@ -0,0 +1,206 @@
1
+ using System;
2
+ using System.Diagnostics;
3
+ using System.IO;
4
+ using System.Net;
5
+ using System.Net.Sockets;
6
+ using System.Reflection;
7
+ using System.Security.Cryptography;
8
+ using System.Text;
9
+ using System.Threading;
10
+
11
+ namespace ZaipDashboardLauncher
12
+ {
13
+ internal static class LauncherVerificationBehaviorTests
14
+ {
15
+ private static int Main()
16
+ {
17
+ try
18
+ {
19
+ AcceptsSessionAndHealthThatBecomeReadyWithinTheWindow();
20
+ AcceptsCompletedHandoffWhenTheMutableSessionHasDisappeared();
21
+ RejectsMismatchedWorkspaceIdentity();
22
+ FailsWhenTheSessionNeverBecomesAvailable();
23
+ Console.WriteLine("Launcher verification behavior tests passed.");
24
+ return 0;
25
+ }
26
+ catch (Exception exception)
27
+ {
28
+ Console.Error.WriteLine(exception);
29
+ return 1;
30
+ }
31
+ }
32
+
33
+ private static void AcceptsSessionAndHealthThatBecomeReadyWithinTheWindow()
34
+ {
35
+ var workspaceRoot = NewWorkspaceRoot();
36
+ var expectedKey = WorkspaceKey(workspaceRoot);
37
+ using (var server = new HealthServer(expectedKey))
38
+ {
39
+ RemoveSession(workspaceRoot);
40
+ var writer = new Thread(delegate()
41
+ {
42
+ Thread.Sleep(350);
43
+ WriteSession(workspaceRoot, server.Port);
44
+ });
45
+ writer.Start();
46
+ string error;
47
+ var result = Verify(workspaceRoot, out error);
48
+ writer.Join();
49
+
50
+ Require(result, "Expected delayed session and matching health to be accepted: " + error);
51
+ RemoveSession(workspaceRoot);
52
+ }
53
+ }
54
+
55
+ private static void RejectsMismatchedWorkspaceIdentity()
56
+ {
57
+ var workspaceRoot = NewWorkspaceRoot();
58
+ using (var server = new HealthServer("other-workspace"))
59
+ {
60
+ WriteSession(workspaceRoot, server.Port);
61
+ var elapsed = Stopwatch.StartNew();
62
+ string error;
63
+ var result = Verify(workspaceRoot, out error);
64
+ elapsed.Stop();
65
+
66
+ Require(!result, "Expected mismatched workspace identity to be rejected.");
67
+ Require(elapsed.ElapsedMilliseconds >= 4500, "Expected mismatched identity polling to wait through the bounded window.");
68
+ RemoveSession(workspaceRoot);
69
+ }
70
+ }
71
+
72
+ private static void AcceptsCompletedHandoffWhenTheMutableSessionHasDisappeared()
73
+ {
74
+ var statusPath = Path.Combine(Path.GetTempPath(), "zaip-dashboard-launcher-status-" + Guid.NewGuid().ToString("N"));
75
+ try
76
+ {
77
+ // Node already observed health/readiness and atomically published `ok`.
78
+ // A later session-registry lookup must not turn that handoff into an error.
79
+ File.WriteAllText(statusPath, "ok");
80
+ var result = WaitForLaunchStatus(Process.GetCurrentProcess(), statusPath, "workspace-without-a-session");
81
+ Require(result == 0, "Expected an already confirmed handoff to succeed without rediscovering the session.");
82
+ }
83
+ finally
84
+ {
85
+ if (File.Exists(statusPath)) File.Delete(statusPath);
86
+ }
87
+ }
88
+
89
+ private static void FailsWhenTheSessionNeverBecomesAvailable()
90
+ {
91
+ var workspaceRoot = NewWorkspaceRoot();
92
+ RemoveSession(workspaceRoot);
93
+ var elapsed = Stopwatch.StartNew();
94
+ string error;
95
+ var result = Verify(workspaceRoot, out error);
96
+ elapsed.Stop();
97
+
98
+ Require(!result, "Expected permanently unavailable session to fail.");
99
+ Require(elapsed.ElapsedMilliseconds >= 4500, "Expected unavailable session polling to wait through the bounded window.");
100
+ Require(error != null && error.IndexOf("5 segundos", StringComparison.Ordinal) >= 0, "Expected the bounded timeout error.");
101
+ }
102
+
103
+ private static bool Verify(string workspaceRoot, out string error)
104
+ {
105
+ var method = typeof(Program).GetMethod("VerifyDashboardLaunch", BindingFlags.NonPublic | BindingFlags.Static);
106
+ var arguments = new object[] { workspaceRoot, null };
107
+ var result = (bool)method.Invoke(null, arguments);
108
+ error = (string)arguments[1];
109
+ return result;
110
+ }
111
+
112
+ private static int WaitForLaunchStatus(Process process, string statusPath, string workspaceRoot)
113
+ {
114
+ var method = typeof(Program).GetMethod("WaitForLaunchStatus", BindingFlags.NonPublic | BindingFlags.Static);
115
+ return (int)method.Invoke(null, new object[] { process, statusPath, workspaceRoot });
116
+ }
117
+
118
+ private static string NewWorkspaceRoot()
119
+ {
120
+ return "launcher-behavior-" + Guid.NewGuid().ToString("N");
121
+ }
122
+
123
+ private static string WorkspaceKey(string workspaceRoot)
124
+ {
125
+ using (var sha256 = SHA256.Create())
126
+ {
127
+ var hash = sha256.ComputeHash(Encoding.UTF8.GetBytes(workspaceRoot + ":dashboard-sqlite"));
128
+ var result = new StringBuilder(16);
129
+ for (var index = 0; index < 8; index++) result.Append(hash[index].ToString("x2"));
130
+ return result.ToString();
131
+ }
132
+ }
133
+
134
+ private static string SessionPath(string workspaceRoot)
135
+ {
136
+ return Path.Combine(Path.GetTempPath(), "zaip-aios", "dashboard-sqlite-" + WorkspaceKey(workspaceRoot), "dashboard-sqlite-session.json");
137
+ }
138
+
139
+ private static void WriteSession(string workspaceRoot, int port)
140
+ {
141
+ var path = SessionPath(workspaceRoot);
142
+ Directory.CreateDirectory(Path.GetDirectoryName(path));
143
+ File.WriteAllText(path, "{\"port\":" + port + "}");
144
+ }
145
+
146
+ private static void RemoveSession(string workspaceRoot)
147
+ {
148
+ var path = SessionPath(workspaceRoot);
149
+ if (File.Exists(path)) File.Delete(path);
150
+ }
151
+
152
+ private static void Require(bool condition, string message)
153
+ {
154
+ if (!condition) throw new InvalidOperationException(message);
155
+ }
156
+
157
+ private sealed class HealthServer : IDisposable
158
+ {
159
+ private readonly TcpListener listener;
160
+ private readonly string workspaceKey;
161
+ private readonly Thread worker;
162
+ private volatile bool disposed;
163
+
164
+ public HealthServer(string workspaceKey)
165
+ {
166
+ this.workspaceKey = workspaceKey;
167
+ listener = new TcpListener(System.Net.IPAddress.Loopback, 0);
168
+ listener.Start();
169
+ Port = ((IPEndPoint)listener.LocalEndpoint).Port;
170
+ worker = new Thread(Listen);
171
+ worker.IsBackground = true;
172
+ worker.Start();
173
+ }
174
+
175
+ public int Port { get; private set; }
176
+
177
+ public void Dispose()
178
+ {
179
+ disposed = true;
180
+ listener.Stop();
181
+ worker.Join(1000);
182
+ }
183
+
184
+ private void Listen()
185
+ {
186
+ while (!disposed)
187
+ {
188
+ try
189
+ {
190
+ using (var client = listener.AcceptTcpClient())
191
+ using (var stream = client.GetStream())
192
+ {
193
+ var payload = "{\"kind\":\"zaip-dashboard-sqlite-runtime\",\"workspaceKey\":\"" + workspaceKey + "\"}";
194
+ var bytes = Encoding.UTF8.GetBytes("HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nContent-Length: " + Encoding.UTF8.GetByteCount(payload) + "\r\nConnection: close\r\n\r\n" + payload);
195
+ stream.Write(bytes, 0, bytes.Length);
196
+ }
197
+ }
198
+ catch (SocketException)
199
+ {
200
+ if (!disposed) throw;
201
+ }
202
+ }
203
+ }
204
+ }
205
+ }
206
+ }
@@ -1,7 +1,10 @@
1
1
  using System;
2
2
  using System.Diagnostics;
3
3
  using System.IO;
4
+ using System.Net;
4
5
  using System.Runtime.InteropServices;
6
+ using System.Security.Cryptography;
7
+ using System.Text;
5
8
  using System.Text.RegularExpressions;
6
9
  using System.Threading;
7
10
 
@@ -10,6 +13,8 @@ namespace ZaipDashboardLauncher
10
13
  internal static class Program
11
14
  {
12
15
  private const int ErrorIcon = 0x00000010;
16
+ private const int LaunchVerificationTimeoutMilliseconds = 5000;
17
+ private const int LaunchVerificationRetryMilliseconds = 200;
13
18
 
14
19
  [DllImport("user32.dll", CharSet = CharSet.Unicode)]
15
20
  private static extern int MessageBox(IntPtr handle, string text, string caption, int type);
@@ -40,7 +45,7 @@ namespace ZaipDashboardLauncher
40
45
 
41
46
  statusPath = Path.Combine(
42
47
  Path.GetTempPath(),
43
- string.Format("zaip-dashboard-launch-{0}.status", Guid.NewGuid().ToString("N"))
48
+ string.Format("zaip-dashboard-sqlite-launch-{0}.status", Guid.NewGuid().ToString("N"))
44
49
  );
45
50
  var startInfo = new ProcessStartInfo(nodePath, string.Format("\"{0}\"", scriptPath))
46
51
  {
@@ -57,7 +62,7 @@ namespace ZaipDashboardLauncher
57
62
  return ReportFailure("Não foi possível iniciar o processo do dashboard.");
58
63
  }
59
64
 
60
- return WaitForLaunchStatus(process, statusPath);
65
+ return WaitForLaunchStatus(process, statusPath, workspaceRoot);
61
66
  }
62
67
  catch (Exception exception)
63
68
  {
@@ -72,7 +77,7 @@ namespace ZaipDashboardLauncher
72
77
  }
73
78
  }
74
79
 
75
- private static int WaitForLaunchStatus(Process process, string statusPath)
80
+ private static int WaitForLaunchStatus(Process process, string statusPath, string workspaceRoot)
76
81
  {
77
82
  // The Node launcher coalesces concurrent clicks and may wait for a
78
83
  // healthy build/handoff. Keep this wrapper alive for that bounded
@@ -85,13 +90,22 @@ namespace ZaipDashboardLauncher
85
90
  if (File.Exists(statusPath))
86
91
  {
87
92
  var status = File.ReadAllText(statusPath);
88
- if (status.StartsWith("ok", StringComparison.OrdinalIgnoreCase)) return 0;
93
+ if (status.StartsWith("ok", StringComparison.OrdinalIgnoreCase))
94
+ {
95
+ // Node publishes `ok` only after confirming the selected
96
+ // runtime's health/readiness and handing off the browser.
97
+ // Re-reading the mutable session registry here can race a
98
+ // later launch or cleanup and show a false native popup.
99
+ return 0;
100
+ }
89
101
  if (status.StartsWith("warning", StringComparison.OrdinalIgnoreCase))
90
102
  {
91
103
  var warning = StatusMessage(status);
92
104
  LogFailure(warning);
93
- MessageBox(IntPtr.Zero, warning, "ZAIP Dashboard", 0x00000030);
94
- return 0;
105
+ string verificationError;
106
+ return VerifyDashboardLaunch(workspaceRoot, out verificationError)
107
+ ? 0
108
+ : ReportFailure(verificationError);
95
109
  }
96
110
  return ReportFailure(StatusMessage(status));
97
111
  }
@@ -111,6 +125,79 @@ namespace ZaipDashboardLauncher
111
125
  return ReportFailure("O dashboard demorou mais de 135 segundos para abrir. As tentativas foram interrompidas; tente novamente.");
112
126
  }
113
127
 
128
+ private static bool VerifyDashboardLaunch(string workspaceRoot, out string error)
129
+ {
130
+ error = null;
131
+ var workspaceKey = DashboardWorkspaceKey(workspaceRoot);
132
+ var sessionDirectory = Path.Combine(Path.GetTempPath(), "zaip-aios", "dashboard-sqlite-" + workspaceKey);
133
+ var sessionPath = Path.Combine(sessionDirectory, "dashboard-sqlite-session.json");
134
+ var deadline = DateTime.UtcNow.AddMilliseconds(LaunchVerificationTimeoutMilliseconds);
135
+ while (DateTime.UtcNow < deadline)
136
+ {
137
+ var currentPort = ReadJsonInteger(sessionPath, "port");
138
+ if (currentPort.HasValue && IsOwnedDashboardHealthy(currentPort.Value, workspaceKey))
139
+ {
140
+ // The new same-workspace healthy port is definitive success.
141
+ // Previous-port cleanup remains best-effort and auditable in Node.
142
+ return true;
143
+ }
144
+
145
+ Thread.Sleep(LaunchVerificationRetryMilliseconds);
146
+ }
147
+
148
+ error = "O launcher recebeu sucesso, mas não confirmou o carregamento do novo dashboard em 5 segundos.";
149
+ return false;
150
+ }
151
+
152
+ private static int? ReadJsonInteger(string path, string property)
153
+ {
154
+ try
155
+ {
156
+ if (!File.Exists(path)) return null;
157
+ var match = Regex.Match(File.ReadAllText(path), "\\\"" + Regex.Escape(property) + "\\\"\\s*:\\s*(\\d+)");
158
+ int value;
159
+ return match.Success && int.TryParse(match.Groups[1].Value, out value) ? value : (int?)null;
160
+ }
161
+ catch
162
+ {
163
+ return null;
164
+ }
165
+ }
166
+
167
+ private static bool IsOwnedDashboardHealthy(int port, string workspaceKey)
168
+ {
169
+ try
170
+ {
171
+ var request = (HttpWebRequest)WebRequest.Create(string.Format("http://127.0.0.1:{0}/api/v2/health", port));
172
+ request.Method = "GET";
173
+ request.Timeout = 1000;
174
+ request.ReadWriteTimeout = 1000;
175
+ using (var response = (HttpWebResponse)request.GetResponse())
176
+ using (var reader = new StreamReader(response.GetResponseStream()))
177
+ {
178
+ var payload = reader.ReadToEnd();
179
+ return response.StatusCode == HttpStatusCode.OK
180
+ && Regex.IsMatch(payload, "\\\"kind\\\"\\s*:\\s*\\\"zaip-dashboard-sqlite-runtime\\\"")
181
+ && Regex.IsMatch(payload, "\\\"workspaceKey\\\"\\s*:\\s*\\\"" + Regex.Escape(workspaceKey) + "\\\"");
182
+ }
183
+ }
184
+ catch
185
+ {
186
+ return false;
187
+ }
188
+ }
189
+
190
+ private static string DashboardWorkspaceKey(string workspaceRoot)
191
+ {
192
+ using (var sha256 = SHA256.Create())
193
+ {
194
+ var hash = sha256.ComputeHash(Encoding.UTF8.GetBytes(workspaceRoot + ":dashboard-sqlite"));
195
+ var builder = new StringBuilder(16);
196
+ for (var index = 0; index < 8; index++) builder.Append(hash[index].ToString("x2"));
197
+ return builder.ToString();
198
+ }
199
+ }
200
+
114
201
  private static string StatusMessage(string status)
115
202
  {
116
203
  var separator = status.IndexOf('\n');
@@ -130,7 +217,7 @@ namespace ZaipDashboardLauncher
130
217
  var sanitized = Regex.Replace(message, "\\x1B\\[[0-?]*[ -/]*[@-~]", string.Empty)
131
218
  .Replace("\r", string.Empty)
132
219
  .Trim();
133
- const int maximumLength = 3600;
220
+ const int maximumLength = 900;
134
221
  if (sanitized.Length <= maximumLength) return sanitized;
135
222
 
136
223
  const int firstHalf = maximumLength / 2;
@@ -155,7 +242,7 @@ namespace ZaipDashboardLauncher
155
242
  try
156
243
  {
157
244
  var tempPath = Path.GetTempPath();
158
- var logPath = Path.Combine(tempPath, "zaip-dashboard-launcher.log");
245
+ var logPath = Path.Combine(tempPath, "zaip-dashboard-sqlite-launcher.log");
159
246
  File.AppendAllText(logPath, string.Format("[{0}] {1}{2}", DateTime.UtcNow.ToString("O"), message, Environment.NewLine));
160
247
  }
161
248
  catch
@@ -1,5 +1,5 @@
1
1
  param(
2
- [string]$OutputPath = ".agents/dashboard/zaip-dashboard.exe",
2
+ [string]$OutputPath = ".agents/dashboard/zaip-dashboard-windows.exe",
3
3
  [string]$IconPath = ".agents/config/src/icon_zaip.png",
4
4
  [switch]$SkipReleaseSync
5
5
  )
@@ -9,7 +9,7 @@ $ErrorActionPreference = "Stop"
9
9
  $repoRoot = (Resolve-Path (Join-Path $PSScriptRoot "../../../..")).Path
10
10
  $sourcePath = Join-Path $PSScriptRoot "Program.cs"
11
11
  $targetPath = Join-Path $repoRoot $OutputPath
12
- $canonicalTargetPath = Join-Path $repoRoot ".agents/dashboard/zaip-dashboard.exe"
12
+ $canonicalTargetPath = Join-Path $repoRoot ".agents/dashboard/zaip-dashboard-windows.exe"
13
13
  $resolvedIconPath = if ([System.IO.Path]::IsPathRooted($IconPath)) { $IconPath } else { Join-Path $repoRoot $IconPath }
14
14
 
15
15
  function Get-PngDimension {
@@ -0,0 +1,22 @@
1
+ $ErrorActionPreference = "Stop"
2
+
3
+ $compiler = @(
4
+ "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe",
5
+ "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe"
6
+ ) | Where-Object { Test-Path $_ } | Select-Object -First 1
7
+
8
+ if (-not $compiler) {
9
+ throw "Nenhum compilador C# local encontrado para executar os testes comportamentais do launcher."
10
+ }
11
+
12
+ $outputPath = Join-Path ([System.IO.Path]::GetTempPath()) ("zaip-dashboard-launcher-tests-" + [Guid]::NewGuid().ToString("N") + ".exe")
13
+ try {
14
+ & $compiler /nologo /target:exe /main:ZaipDashboardLauncher.LauncherVerificationBehaviorTests /out:$outputPath (Join-Path $PSScriptRoot "Program.cs") (Join-Path $PSScriptRoot "LauncherVerificationBehaviorTests.cs")
15
+ if ($LASTEXITCODE -ne 0) { throw "Falha ao compilar os testes comportamentais do launcher." }
16
+
17
+ & $outputPath
18
+ if ($LASTEXITCODE -ne 0) { throw "Falha nos testes comportamentais do launcher." }
19
+ }
20
+ finally {
21
+ if (Test-Path $outputPath) { Remove-Item -LiteralPath $outputPath -Force }
22
+ }