@zaip-ai/cli 1.0.8 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/README.md +1 -1
  2. package/dist/services/adapters.d.ts +1 -1
  3. package/dist/services/adapters.js +1 -1
  4. package/dist/services/agent-adapters.js +2 -2
  5. package/dist/services/agent-adapters.js.map +1 -1
  6. package/dist/services/agent-adapters.test.js +5 -0
  7. package/dist/services/agent-adapters.test.js.map +1 -1
  8. package/dist/services/logger.test.js +2 -2
  9. package/dist/services/runtime-template.test.js +6 -6
  10. package/dist/services/template-manifest.d.ts.map +1 -1
  11. package/dist/services/template-manifest.js +5 -0
  12. package/dist/services/template-manifest.js.map +1 -1
  13. package/package.json +1 -1
  14. package/templates/.agents/architecture/software-architecture.md +131 -0
  15. package/templates/.agents/branding/brandbook.docx +0 -0
  16. package/templates/.agents/branding/brandbook.md +60 -0
  17. package/templates/.agents/config/clients/codex/agents/zaip-agent-finalizer.toml +1 -1
  18. package/templates/.agents/config/clients/codex/agents/zaip-agent-orchestrator.toml +1 -1
  19. package/templates/.agents/dashboard/.tmp-run-list.json +254 -0
  20. package/templates/.agents/dashboard/.zaip-managed.json +252 -136
  21. package/templates/.agents/dashboard/apps/frontend/dist/assets/{CostCalculationGuidePage-Z60df2r-.js → CostCalculationGuidePage-DxR_pgSV.js} +1 -1
  22. package/templates/.agents/dashboard/apps/frontend/dist/assets/DashboardHelpDialog-4jZLTWE_.js +2156 -0
  23. package/templates/.agents/dashboard/apps/frontend/dist/assets/{PricingSettingsDialog-Coc6pA-1.js → PricingSettingsDialog-CKcsqb-r.js} +1 -1
  24. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-BomxqCBU.css +1 -0
  25. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-DmmJD2Th.js +3 -0
  26. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BwtitWa_.js +1 -0
  27. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-N5Csr0RP.js +68 -0
  28. package/templates/.agents/dashboard/apps/frontend/dist/assets/{icons-vendor-DFBuc_qp.js → icons-vendor-C0fj2uU9.js} +1 -1
  29. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-C4aIB1PV.js +2 -0
  30. package/templates/.agents/dashboard/apps/frontend/dist/assets/{react-vendor-CCQOHdVI.js → react-vendor-BEsJ-FYH.js} +1 -1
  31. package/templates/.agents/dashboard/apps/frontend/dist/assets/{traceability-pC2_0J8x.js → traceability-B6y6Gw12.js} +1 -1
  32. package/templates/.agents/dashboard/apps/frontend/dist/index.html +5 -5
  33. package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
  34. package/templates/.agents/dashboard/apps/frontend/src/App.tsx +204 -32
  35. package/templates/.agents/dashboard/apps/frontend/src/DashboardAlternateContent.tsx +11 -11
  36. package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +14 -7
  37. package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +4 -2
  38. package/templates/.agents/dashboard/apps/frontend/src/TraceabilityWorkspace.test.ts +3 -1
  39. package/templates/.agents/dashboard/apps/frontend/src/TraceabilityWorkspace.tsx +14 -11
  40. package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +19 -4
  41. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.test.ts +24 -2
  42. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +22 -1
  43. package/templates/.agents/dashboard/apps/frontend/src/overview-status-page.test.ts +3 -1
  44. package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +36 -26
  45. package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +2 -2
  46. package/templates/.agents/dashboard/apps/frontend/src/snapshot-banner-semantics.test.ts +40 -6
  47. package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +39 -1
  48. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.test.ts +89 -23
  49. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.ts +219 -29
  50. package/templates/.agents/dashboard/apps/frontend/src/use-app-effects.ts +61 -7
  51. package/templates/.agents/dashboard/apps/frontend/src/use-app-operations-pages.ts +3 -6
  52. package/templates/.agents/dashboard/apps/frontend/src/work-list-pagination.test.ts +2 -2
  53. package/templates/.agents/dashboard/apps/frontend/src/work-list-pagination.ts +3 -4
  54. package/templates/.agents/dashboard/apps/frontend/vite.config.ts +4 -1
  55. package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
  56. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CompactLifecycleCostTable.test.ts +89 -19
  57. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CompactLifecycleCostTable.tsx +31 -16
  58. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostCharts.test.ts +43 -14
  59. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostCharts.tsx +5 -5
  60. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostModelsAuditTable.tsx +1 -1
  61. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorContent.tsx +67 -42
  62. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.test.ts +115 -39
  63. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +188 -38
  64. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +75 -17
  65. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.tsx +147 -58
  66. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor.css +5 -2
  67. package/templates/.agents/dashboard/modules/cost-monitor/src/react/index.ts +2 -2
  68. package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.ts +2 -1
  69. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-compact-cost-page.ts +18 -7
  70. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.ts +95 -9
  71. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-run-page.ts +29 -17
  72. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.test.ts +0 -24
  73. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.test.ts +225 -424
  74. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +24 -15
  75. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-terminal-day.test.ts +6 -1
  76. package/templates/.agents/dashboard/modules/cost-monitor/src/server/source-size-cost-server/build-cost-monitor-projection-agents.test.ts +31 -0
  77. package/templates/.agents/dashboard/modules/cost-monitor/src/server/source-size-cost-server/build-cost-summary-projection-duration.test.ts +414 -0
  78. package/templates/.agents/dashboard/modules/operations/package.json +1 -1
  79. package/templates/.agents/dashboard/modules/operations/src/contracts.ts +26 -23
  80. package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.tsx +31 -11
  81. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.test.ts +3 -1
  82. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.tsx +51 -21
  83. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +47 -5
  84. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageNavigation.tsx +1 -4
  85. package/templates/.agents/dashboard/modules/operations/src/react/PeriodSummaryTable.tsx +32 -10
  86. package/templates/.agents/dashboard/modules/operations/src/react/TaskDetailsDialog.tsx +9 -3
  87. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkBoard.tsx +13 -5
  88. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.test.ts +12 -4
  89. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.tsx +1 -4
  90. package/templates/.agents/dashboard/modules/operations/src/react/conversation-rows.ts +1 -2
  91. package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.test.ts +385 -4
  92. package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.tsx +481 -61
  93. package/templates/.agents/dashboard/modules/operations/src/react/export/export-layout.test.ts +14 -1
  94. package/templates/.agents/dashboard/modules/operations/src/react/export/xlsx-runtime-e2e.test.ts +248 -0
  95. package/templates/.agents/dashboard/modules/operations/src/react/operation-duration.test.ts +4 -4
  96. package/templates/.agents/dashboard/modules/operations/src/react/operation-duration.ts +6 -4
  97. package/templates/.agents/dashboard/modules/operations/src/react/operations-global-filters.test.ts +4 -1
  98. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +1 -1
  99. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview.status-cards.test.ts +1 -1
  100. package/templates/.agents/dashboard/modules/operations/src/react/operations-page-contract.ts +46 -6
  101. package/templates/.agents/dashboard/modules/operations/src/react/operations-view-order.test.ts +1 -4
  102. package/templates/.agents/dashboard/modules/operations/src/react/period-summary.test.ts +82 -6
  103. package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.test.ts +2 -1
  104. package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.ts +1 -1
  105. package/templates/.agents/dashboard/modules/operations/src/server/execution-relationship-counts.test.ts +19 -7
  106. package/templates/.agents/dashboard/modules/operations/src/server/execution-relationship-counts.ts +4 -1
  107. package/templates/.agents/dashboard/modules/operations/src/server/quick-daily-operations-projection.ts +11 -5
  108. package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
  109. package/templates/.agents/dashboard/packages/branding/package.json +1 -1
  110. package/templates/.agents/dashboard/packages/branding/src/index.ts +1 -1
  111. package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
  112. package/templates/.agents/dashboard/packages/contracts/src/index.ts +1 -0
  113. package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
  114. package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +152 -149
  115. package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs.metafile.json +7333 -0
  116. package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +149 -146
  117. package/templates/.agents/dashboard/packages/local-runtime/package.json +1 -1
  118. package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-dashboard.mjs +15 -7
  119. package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +44 -13
  120. package/templates/.agents/dashboard/packages/local-runtime/scripts/rebuild-sqlite-read-model.mjs +5 -2
  121. package/templates/.agents/dashboard/packages/local-runtime/scripts/source-size-runtime-scripts/sqlite-read-model-fixture.mjs +397 -0
  122. package/templates/.agents/dashboard/packages/local-runtime/scripts/test-sqlite-read-model.mjs +472 -145
  123. package/templates/.agents/dashboard/packages/local-runtime/scripts/test-unix-launchers.mjs +15 -3
  124. package/templates/.agents/dashboard/packages/local-runtime/scripts/validate-sqlite-read-model.mjs +129 -31
  125. package/templates/.agents/dashboard/packages/local-runtime/server.mjs +153 -150
  126. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +6 -2
  127. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +3 -3
  128. package/templates/.agents/dashboard/packages/local-runtime/src/server-board.test.ts +55 -16
  129. package/templates/.agents/dashboard/packages/local-runtime/src/server-board.ts +23 -13
  130. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot.test.ts +19 -4
  131. package/templates/.agents/dashboard/packages/local-runtime/src/server-workspace.ts +7 -3
  132. package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +132 -9
  133. package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +126 -60
  134. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.ts +16 -2
  135. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +1861 -350
  136. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.ts +1218 -352
  137. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +119 -42
  138. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +45 -20
  139. package/templates/.agents/dashboard/packages/ui/package.json +1 -1
  140. package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
  141. package/templates/.agents/dashboard/tests/e2e/specs/dashboard.spec.ts +7 -5
  142. package/templates/.agents/design/.zaip-managed.json +3 -3
  143. package/templates/.agents/design/apps/catalog/package.json +1 -1
  144. package/templates/.agents/design/packages/local-runtime/package.json +1 -1
  145. package/templates/.agents/growth/estrategia-bootstrap-90-dias.md +169 -0
  146. package/templates/.agents/growth/strategy.md +27 -0
  147. package/templates/.agents/marketing/estrategia-marketing-zaip-90-dias.md +197 -0
  148. package/templates/.agents/marketing/strategy.md +29 -0
  149. package/templates/.agents/requirements/autonomous-assurance.md +1 -1
  150. package/templates/.agents/requirements/comparative-audit.md +1 -1
  151. package/templates/.agents/requirements/context-engine.md +1 -1
  152. package/templates/.agents/requirements/cost-observability.md +1 -1
  153. package/templates/.agents/requirements/dashboard-launch.md +1 -1
  154. package/templates/.agents/requirements/data-export.md +1 -1
  155. package/templates/.agents/requirements/design-system.md +1 -1
  156. package/templates/.agents/requirements/execution-engine.md +1 -1
  157. package/templates/.agents/requirements/kanban-dashboard.md +1 -1
  158. package/templates/.agents/requirements/model-orchestration.md +1 -1
  159. package/templates/.agents/requirements/public-distribution.md +1 -1
  160. package/templates/.agents/requirements/software-architecture.md +1 -1
  161. package/templates/.agents/requirements/strategic-improvements.md +1 -1
  162. package/templates/.agents/requirements/work-lifecycle.md +1 -1
  163. package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
  164. package/templates/.agents/runtime/VERSION +1 -1
  165. package/templates/.agents/runtime/bin/zaip.mjs +30 -29
  166. package/templates/.agents/runtime/checksums.sha256 +6 -6
  167. package/templates/.agents/runtime/manifest.json +1 -1
  168. package/templates/.agents/runtime/pnpm-lock.sha256 +1 -1
  169. package/templates/.agents/runtime/provenance.json +5 -5
  170. package/templates/.agents/runtime/sbom.cdx.json +3 -3
  171. package/templates/.agents/sales/playbook.md +32 -0
  172. package/templates/.agents/sales/roteiro-comercial-zaip.md +252 -0
  173. package/templates/.agents/skills/zaip-aios/SKILL.md +1 -1
  174. package/templates/.agents/skills/zaip-skill-brand-governance/SKILL.md +9 -2
  175. package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-framework.md +39 -0
  176. package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-standards.md +1 -1
  177. package/templates/.agents/skills/zaip-skill-enforce-architecture/SKILL.md +2 -0
  178. package/templates/.agents/skills/zaip-skill-growth-strategy-revops/SKILL.md +6 -0
  179. package/templates/.agents/skills/zaip-skill-marketing/SKILL.md +6 -0
  180. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-local-telemetry.mjs +39 -82
  181. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.mjs +13 -8
  182. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.test.mjs +44 -14
  183. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.mjs +19 -9
  184. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.test.mjs +29 -5
  185. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/source-size-telemetry/model-identity-reconciliation.mjs +77 -0
  186. package/templates/.agents/skills/zaip-skill-sales-methodology/SKILL.md +6 -0
  187. package/templates/.agents/skills/zaip-skill-sqlite-read-model/scripts/ensure-node.mjs +28 -5
  188. package/templates/.agents/zaip-aios/INDEX.md +10 -0
  189. package/templates/.agents/zaip-aios/README.md +2 -1
  190. package/templates/.agents/zaip-aios/VERSION +1 -1
  191. package/templates/.agents/zaip-aios/guides/18-catalogo-de-agentes.md +76 -0
  192. package/templates/.agents/zaip-aios/guides/19-assurance-e-autonomia.md +72 -0
  193. package/templates/.agents/zaip-aios/guides/20-instalacao-detalhada.md +330 -0
  194. package/templates/.agents/zaip-aios/guides/21-telemetria-monitor-custos.md +52 -0
  195. package/templates/.agents/zaip-aios/guides/22-fluxos-e-roteamento.md +69 -0
  196. package/templates/.agents/zaip-aios/guides/23-orquestracao-de-modelos.md +483 -0
  197. package/templates/.agents/zaip-aios/guides/24-calculo-de-custos-openai.md +85 -0
  198. package/templates/.agents/zaip-aios/guides/25-fontes-de-precos-openai.md +18 -0
  199. package/templates/.agents/zaip-aios/guides/26-qualidade-e-release.md +44 -0
  200. package/templates/.agents/zaip-aios/guides/27-telemetria-git-native.md +167 -0
  201. package/templates/.agents/zaip-aios/guides/28-lifecycle-completo.md +144 -0
  202. package/templates/.agents/zaip-aios/guides/assets/diagrams/lifecycles-task-spec-prd.png +0 -0
  203. package/templates/.agents/zaip-aios/guides/assets/diagrams/prd-lifecycle.png +0 -0
  204. package/templates/.agents/zaip-aios/guides/assets/diagrams/spec-lifecycle.png +0 -0
  205. package/templates/.agents/zaip-aios/guides/assets/diagrams/task-lifecycle.png +0 -0
  206. package/templates/template-manifest.json +313 -177
  207. package/templates/.agents/dashboard/apps/frontend/dist/assets/DashboardHelpDialog-Cs6dzDmW.js +0 -1505
  208. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-QE1k9yZB.css +0 -1
  209. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-_Pf5DA_A.js +0 -3
  210. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BVlz3DLZ.js +0 -1
  211. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-Cf9ctPVt.js +0 -68
  212. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-8A4DcNXM.js +0 -2
@@ -38,7 +38,10 @@ export const maxPortAttempts = 25;
38
38
  export const runtimeKind = "zaip-dashboard-sqlite-runtime";
39
39
  const packageRoot = dirname(fileURLToPath(import.meta.url));
40
40
  export const workspaceRoot = resolve(packageRoot, "../../../..");
41
- export const workspaceKey = createHash("sha256").update(`${workspaceRoot}:dashboard-sqlite`).digest("hex").slice(0, 16);
41
+ export const workspaceKey = createHash("sha256")
42
+ .update(`${workspaceRoot}:dashboard-sqlite`)
43
+ .digest("hex")
44
+ .slice(0, 16);
42
45
  export const sessionDirectory = join(tmpdir(), "zaip-aios", `dashboard-sqlite-${workspaceKey}`);
43
46
  export const sessionPath = join(sessionDirectory, "dashboard-sqlite-session.json");
44
47
  export const portRegistryPath = join(sessionDirectory, "dashboard-sqlite-ports.json");
@@ -283,9 +286,18 @@ async function runSqliteBuild(target) {
283
286
  const command = process.execPath;
284
287
  const args = frontend
285
288
  ? [resolve(workspaceRoot, "node_modules/vite/bin/vite.js"), "build"]
286
- : [resolve(workspaceRoot, ".agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs")];
289
+ : [
290
+ resolve(
291
+ workspaceRoot,
292
+ ".agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs",
293
+ ),
294
+ ];
287
295
  const output = await new Promise((resolveBuild, rejectBuild) => {
288
- const child = spawn(command, args, { cwd: frontend ? resolve(workspaceRoot, ".agents/dashboard/apps/frontend") : packageRoot, windowsHide: true, stdio: "pipe" });
296
+ const child = spawn(command, args, {
297
+ cwd: frontend ? resolve(workspaceRoot, ".agents/dashboard/apps/frontend") : packageRoot,
298
+ windowsHide: true,
299
+ stdio: "pipe",
300
+ });
289
301
  let outputText = "";
290
302
  const appendOutput = (chunk) => {
291
303
  outputText = `${outputText}${chunk}`.slice(-8_000);
@@ -299,7 +311,9 @@ async function runSqliteBuild(target) {
299
311
  if (code === 0) resolveBuild();
300
312
  else
301
313
  rejectBuild(
302
- new Error(`SQLite dashboard ${target} build failed (${code}): ${formatLauncherError(outputText)}`),
314
+ new Error(
315
+ `SQLite dashboard ${target} build failed (${code}): ${formatLauncherError(outputText)}`,
316
+ ),
303
317
  );
304
318
  });
305
319
  });
@@ -544,7 +558,11 @@ export async function startDashboardLaunchPage(port) {
544
558
  redirectUrl = target;
545
559
  },
546
560
  setProgress: (next) => {
547
- progress = { ...progress, ...next, percent: Math.max(progress.percent, next.percent ?? progress.percent) };
561
+ progress = {
562
+ ...progress,
563
+ ...next,
564
+ percent: Math.max(progress.percent, next.percent ?? progress.percent),
565
+ };
548
566
  },
549
567
  waitForRedirect: async (timeoutMs = 1_500) =>
550
568
  Promise.race([redirectObserved, delay(timeoutMs).then(() => false)]),
@@ -628,7 +646,13 @@ export async function previousDashboardSessions({
628
646
  workspaceKey,
629
647
  });
630
648
  }
631
- async function startDashboardServer(serverPath, token, excludedPorts, initialPort = null, onProgress = () => {}) {
649
+ async function startDashboardServer(
650
+ serverPath,
651
+ token,
652
+ excludedPorts,
653
+ initialPort = null,
654
+ onProgress = () => {},
655
+ ) {
632
656
  const failures = [];
633
657
  for (let attempt = 1; attempt <= maxServerStartAttempts; attempt += 1) {
634
658
  const port =
@@ -677,15 +701,31 @@ async function startDashboardServer(serverPath, token, excludedPorts, initialPor
677
701
  onProgress({
678
702
  percent: event.percent,
679
703
  phase: "Configurando o banco SQLite local",
680
- detail: "Esta é a instalação/atualização da cópia local descartável; nenhum servidor externo é instalado.",
704
+ detail:
705
+ "Esta é a instalação/atualização da cópia local descartável; nenhum servidor externo é instalado.",
681
706
  });
682
707
  if (event?.event === "dashboard_sqlite_startup_phase" && event.phase === "main_entered")
683
- onProgress({ percent: 50, phase: "Lendo os registros do projeto", detail: "Preparando o read model SQLite local." });
708
+ onProgress({
709
+ percent: 50,
710
+ phase: "Lendo os registros do projeto",
711
+ detail: "Preparando o read model SQLite local.",
712
+ });
684
713
  if (event?.event === "dashboard_sqlite_read_model") snapshotCache = event.cache;
685
714
  if (event?.event === "dashboard_sqlite_read_model")
686
- onProgress({ percent: 82, phase: "Banco local pronto", detail: event.cache === "rebuilt" ? "O read model SQLite foi reconstruído para os dados atuais." : "Uma cópia local do read model foi preparada." });
715
+ onProgress({
716
+ percent: 82,
717
+ phase: "Banco local pronto",
718
+ detail:
719
+ event.cache === "rebuilt"
720
+ ? "O read model SQLite foi reconstruído para os dados atuais."
721
+ : "Uma cópia local do read model foi preparada.",
722
+ });
687
723
  if (event?.event === "dashboard_sqlite_startup_phase" && event.phase === "listening")
688
- onProgress({ percent: 88, phase: "Iniciando a interface", detail: "Verificando saúde e disponibilidade dos dados." });
724
+ onProgress({
725
+ percent: 88,
726
+ phase: "Iniciando a interface",
727
+ detail: "Verificando saúde e disponibilidade dos dados.",
728
+ });
689
729
  } catch {
690
730
  // Only structured startup telemetry affects the user-facing progress.
691
731
  }
@@ -707,10 +747,15 @@ async function startDashboardServer(serverPath, token, excludedPorts, initialPor
707
747
  await removeGeneratedReadModel(dbPath);
708
748
  const detail = stripTerminalControlCodes(stderr)
709
749
  .split("\n")
710
- .filter((line) => !line.includes("ExperimentalWarning") && !line.includes("node --trace-warnings"))
750
+ .filter(
751
+ (line) =>
752
+ !line.includes("ExperimentalWarning") && !line.includes("node --trace-warnings"),
753
+ )
711
754
  .join("\n")
712
755
  .trim();
713
- failures.push(`porta ${port}: ${error.message}${detail ? ` — ${formatLauncherError(detail, 600)}` : ""}`);
756
+ failures.push(
757
+ `porta ${port}: ${error.message}${detail ? ` — ${formatLauncherError(detail, 600)}` : ""}`,
758
+ );
714
759
  appendLauncherLog(
715
760
  `Dashboard start attempt ${attempt} failed on port ${port}: ${error.message}`,
716
761
  );
@@ -744,33 +789,42 @@ async function removeGeneratedReadModel(candidate) {
744
789
  if (attempt < 20) await delay(250);
745
790
  }
746
791
  }
747
- appendLauncherLog(`Could not remove closed SQLite read model after retries: ${resolvedCandidate}`);
792
+ appendLauncherLog(
793
+ `Could not remove closed SQLite read model after retries: ${resolvedCandidate}`,
794
+ );
748
795
  return false;
749
796
  }
750
797
  function refreshSnapshotSeedInBackground() {
751
- const refreshPath = resolve(sqliteReadModelDirectory, `refresh-${process.pid}-${randomBytes(4).toString("hex")}.sqlite`);
798
+ const refreshPath = resolve(
799
+ sqliteReadModelDirectory,
800
+ `refresh-${process.pid}-${randomBytes(4).toString("hex")}.sqlite`,
801
+ );
752
802
  const refreshStatusPath = join(sessionDirectory, "dashboard-sqlite-refresh.json");
753
803
  const refreshLogPath = join(sessionDirectory, "dashboard-sqlite-refresh.log");
754
804
  mkdirSync(sessionDirectory, { recursive: true });
755
805
  const refreshLogDescriptor = openSync(refreshLogPath, "a");
756
806
  let worker;
757
807
  try {
758
- worker = spawn(process.execPath, [resolve(packageRoot, "scripts/rebuild-sqlite-read-model.mjs")], {
759
- cwd: workspaceRoot,
760
- env: {
761
- ...process.env,
762
- ZAIP_SQLITE_DB_PATH: refreshPath,
763
- ZAIP_SQLITE_PREFER_LAST_VALID_SEED: "0",
764
- ZAIP_DASHBOARD_LAUNCH_PROGRESS: "0",
765
- ZAIP_SQLITE_REFRESH_CLEANUP: "1",
766
- ZAIP_SQLITE_CACHE_DIR: sqliteSnapshotCacheDirectory,
808
+ worker = spawn(
809
+ process.execPath,
810
+ [resolve(packageRoot, "scripts/rebuild-sqlite-read-model.mjs")],
811
+ {
812
+ cwd: workspaceRoot,
813
+ env: {
814
+ ...process.env,
815
+ ZAIP_SQLITE_DB_PATH: refreshPath,
816
+ ZAIP_SQLITE_PREFER_LAST_VALID_SEED: "0",
817
+ ZAIP_DASHBOARD_LAUNCH_PROGRESS: "0",
818
+ ZAIP_SQLITE_REFRESH_CLEANUP: "1",
819
+ ZAIP_SQLITE_CACHE_DIR: sqliteSnapshotCacheDirectory,
820
+ },
821
+ // A detached worker keeps its own append-only evidence file. Pipes can
822
+ // disappear with a fast launcher exit and silently abort the refresh.
823
+ stdio: ["ignore", refreshLogDescriptor, refreshLogDescriptor],
824
+ detached: true,
825
+ windowsHide: true,
767
826
  },
768
- // A detached worker keeps its own append-only evidence file. Pipes can
769
- // disappear with a fast launcher exit and silently abort the refresh.
770
- stdio: ["ignore", refreshLogDescriptor, refreshLogDescriptor],
771
- detached: true,
772
- windowsHide: true,
773
- });
827
+ );
774
828
  } finally {
775
829
  closeSync(refreshLogDescriptor);
776
830
  }
@@ -783,11 +837,17 @@ function refreshSnapshotSeedInBackground() {
783
837
  }).catch(() => {});
784
838
  worker.once("error", (error) => {
785
839
  appendLauncherLog(`Background SQLite seed refresh failed to start: ${error.message}`);
786
- void writeJsonAtomic(refreshStatusPath, { status: "failed", error: error.message, finishedAt: new Date().toISOString() }).catch(() => {});
840
+ void writeJsonAtomic(refreshStatusPath, {
841
+ status: "failed",
842
+ error: error.message,
843
+ finishedAt: new Date().toISOString(),
844
+ }).catch(() => {});
787
845
  });
788
846
  worker.once("exit", (code) => {
789
847
  const status = code === 0 ? "completed" : "failed";
790
- appendLauncherLog(`Background SQLite seed refresh ${status} (${code ?? "unknown"}); inspect ${refreshLogPath}.`);
848
+ appendLauncherLog(
849
+ `Background SQLite seed refresh ${status} (${code ?? "unknown"}); inspect ${refreshLogPath}.`,
850
+ );
791
851
  void writeJsonAtomic(refreshStatusPath, {
792
852
  status,
793
853
  exitCode: code ?? null,
@@ -796,7 +856,9 @@ function refreshSnapshotSeedInBackground() {
796
856
  }).catch(() => {});
797
857
  });
798
858
  worker.unref();
799
- appendLauncherLog(`Started background SQLite seed refresh at ${refreshPath}; cache ${sqliteSnapshotCacheDirectory}; worker log ${refreshLogPath}.`);
859
+ appendLauncherLog(
860
+ `Started background SQLite seed refresh at ${refreshPath}; cache ${sqliteSnapshotCacheDirectory}; worker log ${refreshLogPath}.`,
861
+ );
800
862
  }
801
863
  async function writeLauncherStatus(status, message = "") {
802
864
  const path = process.env.ZAIP_LAUNCH_STATUS;
@@ -806,7 +868,15 @@ async function writeLauncherStatus(status, message = "") {
806
868
  await rename(temporaryPath, path);
807
869
  }
808
870
  function phaseTiming(phase, startedAt, details = {}) {
809
- appendLauncherLog(JSON.stringify({ event: "dashboard_sqlite_phase", phase, elapsed_ms: Date.now() - startedAt, launcher_pid: process.pid, ...details }));
871
+ appendLauncherLog(
872
+ JSON.stringify({
873
+ event: "dashboard_sqlite_phase",
874
+ phase,
875
+ elapsed_ms: Date.now() - startedAt,
876
+ launcher_pid: process.pid,
877
+ ...details,
878
+ }),
879
+ );
810
880
  }
811
881
  async function main() {
812
882
  let ownedChild = null;
@@ -827,7 +897,8 @@ async function main() {
827
897
  launchPage.setProgress({
828
898
  percent: 10,
829
899
  phase: "Validando pré-requisitos locais",
830
- detail: "Verificando Node.js 22 e o suporte a node:sqlite; isto não instala um banco de dados.",
900
+ detail:
901
+ "Verificando Node.js 22 e o suporte a node:sqlite; isto não instala um banco de dados.",
831
902
  });
832
903
  await assertDashboardPrerequisites();
833
904
  launchPage.setProgress({
@@ -853,7 +924,9 @@ async function main() {
853
924
  expectedSnapshotState: "current",
854
925
  });
855
926
  if (reusable !== null) {
856
- appendLauncherLog(`Reused healthy compatible dashboard session on port ${reusable.port}, PID ${reusable.serverPid ?? "unknown"}.`);
927
+ appendLauncherLog(
928
+ `Reused healthy compatible dashboard session on port ${reusable.port}, PID ${reusable.serverPid ?? "unknown"}.`,
929
+ );
857
930
  await redirectLaunchPage(launchPage, dashboardUrl(reusable.port, reusable.token));
858
931
  launchPage = null;
859
932
  await writeLauncherStatus("ok");
@@ -883,17 +956,21 @@ async function main() {
883
956
  try {
884
957
  launchPage.setProgress({
885
958
  percent: 92,
886
- phase: snapshotCache === "stale_seed" ? "Abrindo snapshot local validado" : "Dashboard pronto",
887
- detail: snapshotCache === "stale_seed"
888
- ? "Os dados canônicos estão sendo atualizados em segundo plano para a próxima abertura."
889
- : "Validando saúde e dados iniciais antes de abrir a tela principal.",
959
+ phase:
960
+ snapshotCache === "stale_seed" ? "Abrindo snapshot local validado" : "Dashboard pronto",
961
+ detail:
962
+ snapshotCache === "stale_seed"
963
+ ? "Os dados canônicos estão sendo atualizados em segundo plano para a próxima abertura."
964
+ : "Validando saúde e dados iniciais antes de abrir a tela principal.",
890
965
  });
891
966
  if (snapshotCache === "stale_seed") await delay(350);
892
- await redirectLaunchPage(launchPage, dashboardUrl(port, token, snapshotCache === "stale_seed"));
967
+ await redirectLaunchPage(
968
+ launchPage,
969
+ dashboardUrl(port, token, snapshotCache === "stale_seed"),
970
+ );
893
971
  phaseTiming("handoff_complete", launchStartedAt, { server_pid: child.pid, port });
894
972
  launchPage = null;
895
- if (snapshotCache === "stale_seed")
896
- refreshSnapshotSeedInBackground();
973
+ if (snapshotCache === "stale_seed") refreshSnapshotSeedInBackground();
897
974
  currentSession = {
898
975
  kind: runtimeKind,
899
976
  workspace: workspaceRoot,
@@ -5,8 +5,8 @@ import { tmpdir } from "node:os";
5
5
  import { join } from "node:path";
6
6
  import { afterEach, describe, expect, it } from "vitest";
7
7
  import {
8
- browserLaunchCommands,
9
8
  assertDashboardPrerequisites,
9
+ browserLaunchCommands,
10
10
  findAvailablePort,
11
11
  findAvailablePortWithFallback,
12
12
  findReusableDashboardSession,
@@ -59,7 +59,7 @@ describe("dashboard executable session", () => {
59
59
 
60
60
  expect(source).toContain("export async function assertDashboardPrerequisites()");
61
61
  expect(source).toContain('await import("node:sqlite")');
62
- expect(source).not.toContain("builtinModules.includes(\"node:sqlite\")");
62
+ expect(source).not.toContain('builtinModules.includes("node:sqlite")');
63
63
  expect(source).toContain("Node.js 22 ou superior");
64
64
  expect(source.indexOf("await openBrowser(dashboardUrl(launchPort, token))")).toBeLessThan(
65
65
  source.indexOf("await assertDashboardPrerequisites();"),
@@ -78,8 +78,12 @@ describe("dashboard executable session", () => {
78
78
  const source = await readFile(new URL("./start-dashboard.mjs", import.meta.url), "utf8");
79
79
  expect(source).toContain("expectedBuildSignature: buildSignature,");
80
80
  expect(source).toContain('expectedSnapshotState: "current",');
81
- expect(source).toContain("Reused healthy compatible dashboard session on port ${reusable.port}");
82
- expect(source).toContain("await redirectLaunchPage(launchPage, dashboardUrl(reusable.port, reusable.token));");
81
+ expect(source).toContain(
82
+ "Reused healthy compatible dashboard session on port ${reusable.port}",
83
+ );
84
+ expect(source).toContain(
85
+ "await redirectLaunchPage(launchPage, dashboardUrl(reusable.port, reusable.token));",
86
+ );
83
87
  expect(source).toContain("const previousSessions = await previousDashboardSessions();");
84
88
  const excludedPorts = source.slice(
85
89
  source.indexOf("const excludedPorts = new Set(["),
@@ -94,10 +98,10 @@ describe("dashboard executable session", () => {
94
98
  const lock = source.indexOf("await withLauncherLock(async () => {");
95
99
  const preparation = source.indexOf("launchPage = await startDashboardLaunchPage(0);");
96
100
  const freshness = source.indexOf("const buildSignature = await ensureFreshDashboardBuild();");
97
- const server = source.indexOf("const { child, port, dbPath, snapshotCache } = await startDashboardServer(");
98
- const redirectAfterServer = source.indexOf(
99
- "await redirectLaunchPage(launchPage, dashboardUrl(port, token, snapshotCache === \"stale_seed\"));",
101
+ const server = source.indexOf(
102
+ "const { child, port, dbPath, snapshotCache } = await startDashboardServer(",
100
103
  );
104
+ const redirectAfterServer = source.indexOf("await redirectLaunchPage(", server);
101
105
 
102
106
  expect(lock).toBeGreaterThan(-1);
103
107
  expect(preparation).toBeLessThan(lock);
@@ -108,7 +112,10 @@ describe("dashboard executable session", () => {
108
112
 
109
113
  it("reports readiness failures as actionable without retrying a build storm", async () => {
110
114
  const source = await readFile(new URL("./start-dashboard.mjs", import.meta.url), "utf8");
111
- const wait = source.slice(source.indexOf("async function waitForDashboard"), source.indexOf("function exists"));
115
+ const wait = source.slice(
116
+ source.indexOf("async function waitForDashboard"),
117
+ source.indexOf("function exists"),
118
+ );
112
119
  expect(wait).toContain("Dashboard data readiness returned ${readiness.status}");
113
120
  expect(wait).toContain("unavailable.retryable = false;");
114
121
  expect(wait).toContain("if (error?.retryable === false) throw error;");
@@ -118,8 +125,10 @@ describe("dashboard executable session", () => {
118
125
  it("streams complete structured rebuild progress records even when stderr chunks split a line", async () => {
119
126
  const source = await readFile(new URL("./start-dashboard.mjs", import.meta.url), "utf8");
120
127
 
121
- expect(source).toContain("let startupTelemetryBuffer = \"\";");
122
- expect(source).toContain("startupTelemetryBuffer = `${startupTelemetryBuffer}${String(chunk)}`;");
128
+ expect(source).toContain('let startupTelemetryBuffer = "";');
129
+ expect(source).toContain(
130
+ "startupTelemetryBuffer = `${startupTelemetryBuffer}${String(chunk)}`;",
131
+ );
123
132
  expect(source).toContain('event?.event === "dashboard_sqlite_rebuild_progress"');
124
133
  expect(source).toContain('ZAIP_DASHBOARD_LAUNCH_PROGRESS: "1"');
125
134
  });
@@ -127,10 +136,14 @@ describe("dashboard executable session", () => {
127
136
  it("uses one durable cache and an append-only worker log for a stale snapshot refresh", async () => {
128
137
  const source = await readFile(new URL("./start-dashboard.mjs", import.meta.url), "utf8");
129
138
 
130
- expect(source).toContain('const sqliteSnapshotCacheDirectory = join(sqliteReadModelDirectory, "cache");');
139
+ expect(source).toContain(
140
+ 'const sqliteSnapshotCacheDirectory = join(sqliteReadModelDirectory, "cache");',
141
+ );
131
142
  expect(source).toContain("ZAIP_SQLITE_CACHE_DIR: sqliteSnapshotCacheDirectory,");
132
- expect(source).toContain('const refreshLogPath = join(sessionDirectory, "dashboard-sqlite-refresh.log");');
133
- expect(source).toContain("stdio: [\"ignore\", refreshLogDescriptor, refreshLogDescriptor]");
143
+ expect(source).toContain(
144
+ 'const refreshLogPath = join(sessionDirectory, "dashboard-sqlite-refresh.log");',
145
+ );
146
+ expect(source).toContain('stdio: ["ignore", refreshLogDescriptor, refreshLogDescriptor]');
134
147
  expect(source).toContain("worker log ${refreshLogPath}");
135
148
  });
136
149
 
@@ -147,9 +160,10 @@ describe("dashboard executable session", () => {
147
160
 
148
161
  it("tears down prior owned sessions only after the new browser handoff", async () => {
149
162
  const source = await readFile(new URL("./start-dashboard.mjs", import.meta.url), "utf8");
150
- const redirect = source.indexOf(
151
- "await redirectLaunchPage(launchPage, dashboardUrl(port, token, snapshotCache === \"stale_seed\"));",
163
+ const server = source.indexOf(
164
+ "const { child, port, dbPath, snapshotCache } = await startDashboardServer(",
152
165
  );
166
+ const redirect = source.indexOf("await redirectLaunchPage(", server);
153
167
  const teardown = source.indexOf("for (const previous of previousSessions)");
154
168
 
155
169
  expect(redirect).toBeGreaterThan(-1);
@@ -217,7 +231,9 @@ describe("dashboard executable session", () => {
217
231
  );
218
232
 
219
233
  const ok = source.indexOf('if (status.StartsWith("ok", StringComparison.OrdinalIgnoreCase))');
220
- const warning = source.indexOf('if (status.StartsWith("warning", StringComparison.OrdinalIgnoreCase))');
234
+ const warning = source.indexOf(
235
+ 'if (status.StartsWith("warning", StringComparison.OrdinalIgnoreCase))',
236
+ );
221
237
  const okBranch = source.slice(ok, warning);
222
238
 
223
239
  expect(ok).toBeGreaterThan(-1);
@@ -227,7 +243,10 @@ describe("dashboard executable session", () => {
227
243
 
228
244
  it("publishes ok only after Node observed both health and readiness", async () => {
229
245
  const source = await readFile(new URL("./start-dashboard.mjs", import.meta.url), "utf8");
230
- const wait = source.slice(source.indexOf("async function waitForDashboard"), source.indexOf("function exists"));
246
+ const wait = source.slice(
247
+ source.indexOf("async function waitForDashboard"),
248
+ source.indexOf("function exists"),
249
+ );
231
250
 
232
251
  expect(wait).toContain("dashboardHealthUrl(port)");
233
252
  expect(wait).toContain("/api/v2/ready");
@@ -612,14 +631,20 @@ describe("dashboard executable session", () => {
612
631
  const source = await readFile(new URL("./start-dashboard.mjs", import.meta.url), "utf8");
613
632
  const preparation = source.indexOf("launchPage = await startDashboardLaunchPage(0);");
614
633
  const lock = source.indexOf("await withLauncherLock(async () => {");
615
- const buildSignature = source.indexOf("const buildSignature = await ensureFreshDashboardBuild();");
634
+ const buildSignature = source.indexOf(
635
+ "const buildSignature = await ensureFreshDashboardBuild();",
636
+ );
616
637
  const reusable = source.indexOf("const reusable = await findReusableDashboardSession({");
617
638
 
618
639
  expect(preparation).toBeLessThan(lock);
619
640
  expect(buildSignature).toBeGreaterThan(lock);
620
641
  expect(reusable).toBeGreaterThan(buildSignature);
621
- expect(source).toContain("await redirectLaunchPage(launchPage, dashboardUrl(reusable.port, reusable.token));");
622
- expect(source).toContain('snapshotState: snapshotCache === "stale_seed" ? "updating" : "current",');
642
+ expect(source).toContain(
643
+ "await redirectLaunchPage(launchPage, dashboardUrl(reusable.port, reusable.token));",
644
+ );
645
+ expect(source).toContain(
646
+ 'snapshotState: snapshotCache === "stale_seed" ? "updating" : "current",',
647
+ );
623
648
  expect(source).toContain("if (launchPage !== null) await launchPage.close().catch(() => {});");
624
649
  expect(source).toContain('await writeLauncherStatus("ok");');
625
650
  });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaip-ai/dashboard-ui",
3
- "version": "1.0.8",
3
+ "version": "1.3.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaip-ai/dashboard-e2e",
3
- "version": "1.0.8",
3
+ "version": "1.3.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -425,9 +425,7 @@ test("integrates the detailed cost monitor into the main dashboard", async ({ pa
425
425
  await page.locator(".cost-tabs").getByRole("button", { exact: true, name: tab }).click();
426
426
  expect((await response).status()).toBe(200);
427
427
  await expect(
428
- page
429
- .getByRole("columnheader", { name: /Tempo observado/ })
430
- .or(page.locator(".ui-empty")),
428
+ page.getByRole("columnheader", { name: /Tempo observado/ }).or(page.locator(".ui-empty")),
431
429
  ).toBeVisible();
432
430
  await expect(
433
431
  page.getByRole("navigation", { name: "Paginação dos dados agregados" }),
@@ -551,7 +549,9 @@ test("groups macro work in All and reveals descendant Tasks only in Tasks", asyn
551
549
  .filter({ has: page.locator(".operations-work-kind.is-spec") })
552
550
  .first();
553
551
  if ((await spec.count()) === 0) {
554
- await expect(page.getByLabel("Kanban de trabalho").locator(".operations-task-card")).toHaveCount(0);
552
+ await expect(
553
+ page.getByLabel("Kanban de trabalho").locator(".operations-task-card"),
554
+ ).toHaveCount(0);
555
555
  } else {
556
556
  await expect(spec).toBeVisible();
557
557
  await expect(spec.locator(".operations-work-card-counts")).toHaveText(/Tasks \d+\/\d+/);
@@ -566,7 +566,9 @@ test("groups macro work in All and reveals descendant Tasks only in Tasks", asyn
566
566
  .filter({ has: page.locator(".operations-work-kind.is-prd") })
567
567
  .first();
568
568
  if ((await prd.count()) === 0) {
569
- await expect(page.getByLabel("Kanban de trabalho").locator(".operations-task-card")).toHaveCount(0);
569
+ await expect(
570
+ page.getByLabel("Kanban de trabalho").locator(".operations-task-card"),
571
+ ).toHaveCount(0);
570
572
  } else {
571
573
  await expect(prd).toBeVisible();
572
574
  await expect(prd.locator(".operations-work-card-counts")).toHaveText(
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "1.0.8",
3
+ "version": "1.3.0",
4
4
  "files": [
5
5
  {
6
6
  "path": "apps/catalog/.storybook/main.ts",
@@ -220,7 +220,7 @@
220
220
  },
221
221
  {
222
222
  "path": "apps/catalog/package.json",
223
- "sha256": "cad5056abeda7f5134e9f5ef61bba5238439b9ec670b25f4cd245157e5b8ffdb"
223
+ "sha256": "e9ffdce8dcc8ed1fed3888add953e7e789261307b8d037a6001d98a38f644279"
224
224
  },
225
225
  {
226
226
  "path": "apps/catalog/public/logo_novo_azul.png",
@@ -304,7 +304,7 @@
304
304
  },
305
305
  {
306
306
  "path": "packages/local-runtime/package.json",
307
- "sha256": "62dc180ef9f26346fd1cca07f435719de48342575a9463014d4e854e1024a69f"
307
+ "sha256": "73bbd424a00481ca49bd3265183e0b505cc313484459d0701361a987f2b89057"
308
308
  },
309
309
  {
310
310
  "path": "packages/local-runtime/runtime.mjs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaip-ai/design-catalog",
3
- "version": "1.0.8",
3
+ "version": "1.3.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaip-ai/design-local-runtime",
3
- "version": "1.0.8",
3
+ "version": "1.3.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "scripts": {