@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.
- package/README.md +6 -4
- package/dist/services/adapters.d.ts +1 -1
- package/dist/services/adapters.d.ts.map +1 -1
- package/dist/services/adapters.js +15 -5
- package/dist/services/adapters.js.map +1 -1
- package/dist/services/adapters.test.js +1 -1
- package/dist/services/agent-adapters.d.ts +9 -0
- package/dist/services/agent-adapters.d.ts.map +1 -1
- package/dist/services/agent-adapters.js +38 -3
- package/dist/services/agent-adapters.js.map +1 -1
- package/dist/services/agent-adapters.test.js +8 -1
- package/dist/services/agent-adapters.test.js.map +1 -1
- package/dist/services/codex-config-template.d.ts +2 -1
- package/dist/services/codex-config-template.d.ts.map +1 -1
- package/dist/services/codex-config-template.js +13 -2
- package/dist/services/codex-config-template.js.map +1 -1
- package/dist/services/codex-rules.d.ts +1 -1
- package/dist/services/codex-rules.d.ts.map +1 -1
- package/dist/services/codex-rules.js +31 -7
- package/dist/services/codex-rules.js.map +1 -1
- package/dist/services/codex-subagent-hook-template.d.ts +1 -1
- package/dist/services/codex-subagent-hook-template.d.ts.map +1 -1
- package/dist/services/codex-subagent-hook-template.js +4 -1
- package/dist/services/codex-subagent-hook-template.js.map +1 -1
- package/dist/services/doctor.d.ts.map +1 -1
- package/dist/services/doctor.js +3 -1
- package/dist/services/doctor.js.map +1 -1
- package/dist/services/global-codex-config.d.ts +6 -3
- package/dist/services/global-codex-config.d.ts.map +1 -1
- package/dist/services/global-codex-config.js +82 -13
- package/dist/services/global-codex-config.js.map +1 -1
- package/dist/services/global-codex-config.test.js +57 -10
- package/dist/services/global-codex-config.test.js.map +1 -1
- package/dist/services/install-agents-template.d.ts.map +1 -1
- package/dist/services/install-agents-template.js +15 -2
- package/dist/services/install-agents-template.js.map +1 -1
- package/dist/services/logger.js +1 -1
- package/dist/services/logger.js.map +1 -1
- package/dist/services/logger.test.js +3 -3
- package/dist/services/logger.test.js.map +1 -1
- package/dist/services/runtime-template.test.js +21 -5
- package/dist/services/runtime-template.test.js.map +1 -1
- package/dist/services/template-manifest.d.ts.map +1 -1
- package/dist/services/template-manifest.js +2 -0
- package/dist/services/template-manifest.js.map +1 -1
- package/package.json +1 -1
- package/templates/.agents/config/agents/catalog.yaml +310 -10
- package/templates/.agents/config/clients/codex/agents/zaip-agent-brand-strategist.toml +30 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-designer.toml +5 -5
- package/templates/.agents/config/clients/codex/agents/zaip-agent-finalizer.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-general-operations.toml +30 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-governance-compliance.toml +30 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-growth-strategist.toml +30 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-marketing-analyst.toml +8 -8
- package/templates/.agents/config/clients/codex/agents/zaip-agent-orchestrator.toml +5 -3
- package/templates/.agents/config/clients/codex/agents/zaip-agent-sales-specialist.toml +30 -0
- package/templates/.agents/config/project.yaml +1 -1
- package/templates/.agents/dashboard/.zaip-managed.json +659 -163
- package/templates/.agents/dashboard/DATA-DICTIONARY.md +2227 -0
- package/templates/.agents/dashboard/README.md +48 -97
- package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-Z60df2r-.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-Cv-JcoxP.js → DashboardHelpDialog-Cs6dzDmW.js} +294 -109
- package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-Coc6pA-1.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-QE1k9yZB.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-_Pf5DA_A.js +3 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BVlz3DLZ.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-CaKwQP43.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-BZ5WdaMN.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-Cf9ctPVt.js +68 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{dashboard-localization-C98LGC-Q.js → dashboard-localization-CLJ0lT9v.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/icons-vendor-DFBuc_qp.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-8A4DcNXM.js +2 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-DK_enB5Z.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/react-vendor-CCQOHdVI.js +9 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-D9-fqq9M.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-DFY7ZDlu.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-pC2_0J8x.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/index.html +9 -2
- package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
- package/templates/.agents/dashboard/apps/frontend/src/App.tsx +952 -595
- package/templates/.agents/dashboard/apps/frontend/src/AppLoadingBoundary.tsx +48 -0
- package/templates/.agents/dashboard/apps/frontend/src/AppLoadingPanels.tsx +2 -0
- package/templates/.agents/dashboard/apps/frontend/src/AppOverlays.tsx +247 -0
- package/templates/.agents/dashboard/apps/frontend/src/AppRequestGuards.tsx +95 -0
- package/templates/.agents/dashboard/apps/frontend/src/AppSetupRoutes.tsx +87 -0
- package/templates/.agents/dashboard/apps/frontend/src/CostCalculationGuidePage.tsx +641 -0
- package/templates/.agents/dashboard/apps/frontend/src/DashboardAlternateContent.tsx +159 -0
- package/templates/.agents/dashboard/apps/frontend/src/DashboardCapabilityNav.tsx +13 -13
- package/templates/.agents/dashboard/apps/frontend/src/DashboardGlobalSettings.tsx +56 -0
- package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +257 -313
- package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +149 -0
- package/templates/.agents/dashboard/apps/frontend/src/TraceabilityWorkspace.test.ts +35 -0
- package/templates/.agents/dashboard/apps/frontend/src/TraceabilityWorkspace.tsx +111 -12
- package/templates/.agents/dashboard/apps/frontend/src/app-preferences.ts +15 -0
- package/templates/.agents/dashboard/apps/frontend/src/app-session-token.ts +20 -0
- package/templates/.agents/dashboard/apps/frontend/src/cost-calculation-guide.css +267 -0
- package/templates/.agents/dashboard/apps/frontend/src/cost-calculation-guide.test.ts +69 -0
- package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +70 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.test.ts +111 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +432 -13
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-localization.ts +1 -1
- package/templates/.agents/dashboard/apps/frontend/src/main.tsx +1 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-detail-hydration.test.ts +55 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-detail-hydration.ts +36 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-entity-page-projection.test.ts +126 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-entity-page-projection.ts +181 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-period-contract.test.ts +138 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-period-render.test.ts +105 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-period.test.ts +6 -3
- package/templates/.agents/dashboard/apps/frontend/src/operations-period.ts +9 -5
- package/templates/.agents/dashboard/apps/frontend/src/overview-status-page.test.ts +24 -0
- package/templates/.agents/dashboard/apps/frontend/src/period-transition-overlay.css +44 -0
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-model.ts +121 -62
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +471 -2
- package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +84 -17
- package/templates/.agents/dashboard/apps/frontend/src/snapshot-banner-semantics.test.ts +44 -0
- package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +196 -39
- package/templates/.agents/dashboard/apps/frontend/src/snapshot-notice.ts +15 -0
- package/templates/.agents/dashboard/apps/frontend/src/sqlite-cost-adapters.ts +26 -0
- package/templates/.agents/dashboard/apps/frontend/src/styles.css +14 -2
- package/templates/.agents/dashboard/apps/frontend/src/traceability-workspace.css +38 -2
- package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.test.ts +187 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.ts +190 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-effects.ts +121 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-operations-pages.ts +398 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-documents.ts +141 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-idle-cost-prefetch.ts +45 -0
- package/templates/.agents/dashboard/apps/frontend/src/work-list-pagination.test.ts +46 -0
- package/templates/.agents/dashboard/apps/frontend/src/work-list-pagination.ts +37 -0
- package/templates/.agents/dashboard/apps/frontend/vite.config.ts +55 -5
- package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/contracts.ts +47 -6
- package/templates/.agents/dashboard/modules/cost-monitor/src/duration-estimate.ts +13 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CompactLifecycleCostTable.test.ts +64 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CompactLifecycleCostTable.tsx +275 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostCharts.test.ts +100 -15
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostCharts.tsx +131 -40
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostFilters.tsx +137 -19
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostModelsAuditTable.test.ts +2 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostModelsAuditTable.tsx +13 -10
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorContent.tsx +303 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.test.ts +226 -6
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +479 -402
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostSummary.tsx +5 -13
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +312 -72
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.tsx +373 -321
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/MacroCostTable.test.ts +17 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/MacroCostTable.tsx +25 -6
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-copy.ts +0 -2
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-helpers.ts +17 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-responsive.css +6 -3
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-row-filters.ts +123 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-summary.ts +8 -3
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-views.ts +32 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor.css +52 -14
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-table-presentation.ts +121 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/index.ts +3 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.test.ts +68 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.ts +32 -5
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-compact-cost-page.ts +108 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.test.ts +12 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.ts +60 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-run-page.ts +106 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/aggregate.test.ts +2 -2
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/aggregate.ts +5 -3
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-pricing-fallback.test.ts +53 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.basics.test.ts +34 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.test.ts +168 -137
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.ts +188 -29
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.test.ts +956 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +775 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-terminal-day.test.ts +95 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/index.ts +1 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/refactor-map-xr9l.json +61 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/task-cost-groups.test.ts +41 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/task-cost-groups.ts +55 -11
- package/templates/.agents/dashboard/modules/operations/package.json +2 -1
- package/templates/.agents/dashboard/modules/operations/src/contracts.ts +182 -0
- package/templates/.agents/dashboard/modules/operations/src/duration-population.test.ts +63 -1
- package/templates/.agents/dashboard/modules/operations/src/duration-population.ts +60 -5
- package/templates/.agents/dashboard/modules/operations/src/react/EntityDetailsDialog.tsx +14 -3
- package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.test.ts +44 -1
- package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.tsx +325 -18
- package/templates/.agents/dashboard/modules/operations/src/react/MacroPlanningDialog.tsx +1 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationDateFilters.test.ts +9 -5
- package/templates/.agents/dashboard/modules/operations/src/react/OperationDateFilters.tsx +2 -2
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsMainContent.tsx +168 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.helpers.tsx +95 -6
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.test.ts +365 -14
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.tsx +532 -131
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +314 -358
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageNavigation.tsx +68 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageOverview.tsx +169 -0
- package/templates/.agents/dashboard/modules/operations/src/react/PeriodSummaryTable.tsx +51 -8
- package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.test.tsx +32 -0
- package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.tsx +62 -6
- package/templates/.agents/dashboard/modules/operations/src/react/TaskBoard.test.ts +55 -0
- package/templates/.agents/dashboard/modules/operations/src/react/TaskBoard.tsx +27 -19
- package/templates/.agents/dashboard/modules/operations/src/react/TaskDetailsDialog.tsx +99 -42
- package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkBoard.priority.test.ts +19 -0
- package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkBoard.tsx +255 -34
- package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.test.ts +163 -8
- package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.tsx +101 -68
- package/templates/.agents/dashboard/modules/operations/src/react/conversation-rows.test.ts +72 -1
- package/templates/.agents/dashboard/modules/operations/src/react/conversation-rows.ts +78 -16
- package/templates/.agents/dashboard/modules/operations/src/react/execution-metrics.ts +6 -4
- package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.test.ts +50 -1
- package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.tsx +143 -9
- package/templates/.agents/dashboard/modules/operations/src/react/export/export-layout.test.ts +29 -4
- package/templates/.agents/dashboard/modules/operations/src/react/macro-planning-dialog-content.css +49 -0
- package/templates/.agents/dashboard/modules/operations/src/react/macro-planning-dialog.css +93 -50
- package/templates/.agents/dashboard/modules/operations/src/react/manual-work-priority.test.ts +82 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operation-date-range.test.ts +29 -2
- package/templates/.agents/dashboard/modules/operations/src/react/operation-date-range.ts +22 -1
- package/templates/.agents/dashboard/modules/operations/src/react/operation-duration.test.ts +77 -4
- package/templates/.agents/dashboard/modules/operations/src/react/operation-duration.ts +65 -5
- package/templates/.agents/dashboard/modules/operations/src/react/operations-coverage-toast.test.ts +54 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-global-filters.test.ts +19 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +149 -12
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview.status-cards.test.ts +27 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-page-contract.ts +136 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-period-scope.test.ts +160 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-period-scope.ts +47 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-query.ts +10 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-responsive.css +3 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-view-labels.ts +28 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-view-order.test.ts +24 -7
- package/templates/.agents/dashboard/modules/operations/src/react/operations.css +42 -0
- package/templates/.agents/dashboard/modules/operations/src/react/period-summary-population.test.ts +54 -0
- package/templates/.agents/dashboard/modules/operations/src/react/period-summary-population.ts +32 -0
- package/templates/.agents/dashboard/modules/operations/src/react/period-summary.test.ts +165 -6
- package/templates/.agents/dashboard/modules/operations/src/react/period-summary.ts +148 -6
- package/templates/.agents/dashboard/modules/operations/src/react/popup-localization.test.ts +1 -1
- package/templates/.agents/dashboard/modules/operations/src/react/unified-work-board.css +132 -0
- package/templates/.agents/dashboard/modules/operations/src/react/unified-work-board.css.test.ts +13 -0
- package/templates/.agents/dashboard/modules/operations/src/react/unified-work-board.header.test.ts +16 -0
- package/templates/.agents/dashboard/modules/operations/src/react/use-infinite-column.ts +11 -5
- package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.test.ts +5 -3
- package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.ts +4 -83
- package/templates/.agents/dashboard/modules/operations/src/server/build-operations-projection.test.ts +291 -15
- package/templates/.agents/dashboard/modules/operations/src/server/build-operations-projection.ts +182 -472
- package/templates/.agents/dashboard/modules/operations/src/server/canonical-compat.test.ts +40 -0
- package/templates/.agents/dashboard/modules/operations/src/server/canonical-compat.ts +19 -6
- package/templates/.agents/dashboard/modules/operations/src/server/canonical-run-projection.ts +31 -6
- package/templates/.agents/dashboard/modules/operations/src/server/daily-duration-projection.ts +220 -0
- package/templates/.agents/dashboard/modules/operations/src/server/execution-duration-projection.ts +28 -0
- package/templates/.agents/dashboard/modules/operations/src/server/execution-relationship-counts.test.ts +27 -2
- package/templates/.agents/dashboard/modules/operations/src/server/execution-relationship-counts.ts +22 -13
- package/templates/.agents/dashboard/modules/operations/src/server/filter.test.ts +3 -3
- package/templates/.agents/dashboard/modules/operations/src/server/filter.ts +7 -2
- package/templates/.agents/dashboard/modules/operations/src/server/index.ts +3 -0
- package/templates/.agents/dashboard/modules/operations/src/server/macro.ts +3 -12
- package/templates/.agents/dashboard/modules/operations/src/server/manifest-usage.ts +65 -0
- package/templates/.agents/dashboard/modules/operations/src/server/operations-projection-aggregates.ts +297 -0
- package/templates/.agents/dashboard/modules/operations/src/server/quick-daily-operations-projection.ts +324 -0
- package/templates/.agents/dashboard/modules/operations/src/server/quick-operations-projection.test.ts +505 -0
- package/templates/.agents/dashboard/modules/operations/src/server/quick-operations-projection.ts +609 -0
- package/templates/.agents/dashboard/modules/operations/src/server/runs.ts +18 -19
- package/templates/.agents/dashboard/modules/operations/src/work-board-model.ts +76 -0
- package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
- package/templates/.agents/dashboard/modules/traceability/src/server/build-task-trace.ts +3 -1
- package/templates/.agents/dashboard/packages/branding/package.json +1 -1
- package/templates/.agents/dashboard/packages/branding/src/index.ts +1 -1
- package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
- package/templates/.agents/dashboard/packages/contracts/src/index.ts +1 -0
- package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +1756 -0
- package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +1608 -0
- package/templates/.agents/dashboard/packages/local-runtime/package.json +8 -3
- package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-dashboard.mjs +12 -0
- package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +83 -0
- package/templates/.agents/dashboard/packages/local-runtime/scripts/rebuild-sqlite-read-model.mjs +28 -0
- package/templates/.agents/dashboard/packages/local-runtime/scripts/test-sqlite-read-model.mjs +262 -0
- package/templates/.agents/dashboard/packages/local-runtime/scripts/test-unix-launchers.mjs +41 -0
- package/templates/.agents/dashboard/packages/local-runtime/scripts/validate-sqlite-read-model.mjs +105 -0
- package/templates/.agents/dashboard/packages/local-runtime/server.mjs +1643 -107
- package/templates/.agents/dashboard/packages/local-runtime/src/agent-adapter-sync.ts +30 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.test.ts +3 -2
- package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.ts +5 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/manifest-runs.ts +72 -33
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +335 -4
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +392 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/runtime.mjs +5 -5
- package/templates/.agents/dashboard/packages/local-runtime/src/server-board.test.ts +71 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-board.ts +179 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-cross-layer-parity.test.ts +245 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-daily-read-models-route.ts +64 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-daily-read-models.test.ts +204 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-daily-read-models.ts +194 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-pages.test.ts +163 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-pages.ts +354 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-runs-route.test.ts +74 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-runs-route.ts +113 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-overview.test.ts +68 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-period.ts +47 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-projections.ts +483 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-settings.test.ts +5 -2
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot.test.ts +163 -84
- package/templates/.agents/dashboard/packages/local-runtime/src/server-workspace.ts +145 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +551 -266
- package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +1145 -308
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.test.ts +53 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.ts +708 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +2232 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.ts +6151 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/work-priority-contract.test.ts +33 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-history.mjs +41 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-processes.mjs +210 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +437 -190
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +299 -24
- package/templates/.agents/dashboard/packages/ui/package.json +1 -1
- package/templates/.agents/dashboard/packages/windows-launcher/LauncherVerificationBehaviorTests.cs +206 -0
- package/templates/.agents/dashboard/packages/windows-launcher/Program.cs +95 -8
- package/templates/.agents/dashboard/packages/windows-launcher/build-dashboard-launcher.ps1 +2 -2
- package/templates/.agents/dashboard/packages/windows-launcher/run-launcher-verification-tests.ps1 +22 -0
- package/templates/.agents/dashboard/read-model.dbml +2201 -0
- package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
- package/templates/.agents/dashboard/tests/e2e/playwright.config.ts +1 -1
- package/templates/.agents/dashboard/tests/e2e/specs/dashboard.spec.ts +214 -41
- package/templates/.agents/dashboard/work-priority.json +34 -0
- package/templates/.agents/dashboard/zaip-dashboard-linux.sh +45 -0
- package/templates/.agents/dashboard/zaip-dashboard-mac.command +3 -0
- package/templates/.agents/dashboard/zaip-dashboard-windows.exe +0 -0
- package/templates/.agents/design/.zaip-managed.json +3 -3
- package/templates/.agents/design/apps/catalog/package.json +1 -1
- package/templates/.agents/design/packages/local-runtime/package.json +1 -1
- package/templates/.agents/requirements/autonomous-assurance.md +1 -1
- package/templates/.agents/requirements/comparative-audit.md +1 -1
- package/templates/.agents/requirements/context-engine.md +1 -1
- package/templates/.agents/requirements/cost-observability.md +1 -1
- package/templates/.agents/requirements/dashboard-launch.md +24 -0
- package/templates/.agents/requirements/data-export.md +1 -1
- package/templates/.agents/requirements/design-system.md +1 -1
- package/templates/.agents/requirements/execution-engine.md +1 -1
- package/templates/.agents/requirements/kanban-dashboard.md +4 -3
- package/templates/.agents/requirements/model-orchestration.md +1 -1
- package/templates/.agents/requirements/public-distribution.md +9 -6
- package/templates/.agents/requirements/software-architecture.md +1 -1
- package/templates/.agents/requirements/strategic-improvements.md +1 -1
- package/templates/.agents/requirements/work-lifecycle.md +9 -3
- package/templates/.agents/requirements/zaip-strategic-95.md +4 -4
- package/templates/.agents/rules/autonomy-decision.md +15 -0
- package/templates/.agents/rules/core.md +1 -1
- package/templates/.agents/rules/run-lifecycle-closure.md +1 -1
- package/templates/.agents/rules/specialist-routing.md +19 -0
- package/templates/.agents/rules/workflow.md +1 -1
- package/templates/.agents/runtime/VERSION +1 -1
- package/templates/.agents/runtime/bin/zaip.mjs +114 -64
- package/templates/.agents/runtime/checksums.sha256 +6 -4
- package/templates/.agents/runtime/manifest.json +3 -1
- package/templates/.agents/runtime/pnpm-lock.sha256 +1 -0
- package/templates/.agents/runtime/provenance.json +11 -0
- package/templates/.agents/runtime/sbom.cdx.json +1929 -39
- package/templates/.agents/skills/zaip-aios/SKILL.md +1 -1
- package/templates/.agents/skills/zaip-skill-brand-governance/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-brand-governance/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-standards.md +30 -0
- package/templates/.agents/skills/zaip-skill-dashboard-sqlite/SKILL.md +25 -0
- package/templates/.agents/skills/zaip-skill-dashboard-sqlite/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-executar-fila-pronta/SKILL.md +18 -0
- package/templates/.agents/skills/zaip-skill-executar-fila-pronta/agents/openai.yaml +6 -0
- package/templates/.agents/skills/zaip-skill-executar-fila-pronta/scripts/ready-queue-fence.mjs +71 -0
- package/templates/.agents/skills/zaip-skill-executar-fila-pronta/scripts/ready-queue-fence.test.mjs +60 -0
- package/templates/.agents/skills/zaip-skill-executar-fila-pronta/scripts/scheduled-ready-queue-contract.test.mjs +111 -0
- package/templates/.agents/skills/zaip-skill-execution/SKILL.md +2 -2
- package/templates/.agents/skills/zaip-skill-frontend-launcher/references/launcher-contract.md +3 -1
- package/templates/.agents/skills/zaip-skill-general-operations/SKILL.md +12 -0
- package/templates/.agents/skills/zaip-skill-general-operations/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +9 -7
- package/templates/.agents/skills/zaip-skill-github-deploy/agents/openai.yaml +2 -2
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs +11 -38
- package/templates/.agents/skills/zaip-skill-governance-compliance/SKILL.md +12 -0
- package/templates/.agents/skills/zaip-skill-governance-compliance/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-growth-strategy-revops/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-growth-strategy-revops/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-growth-strategy-revops/references/growth-revops-framework.md +25 -0
- package/templates/.agents/skills/zaip-skill-instalar-agendamento/SKILL.md +17 -0
- package/templates/.agents/skills/zaip-skill-instalar-agendamento/agents/openai.yaml +6 -0
- package/templates/.agents/skills/zaip-skill-marketing/SKILL.md +3 -3
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-local-telemetry.mjs +76 -27
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.mjs +128 -24
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.test.mjs +122 -4
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.mjs +66 -19
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.test.mjs +193 -7
- package/templates/.agents/skills/zaip-skill-sales-methodology/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-sales-methodology/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-sales-methodology/references/sales-process-framework.md +77 -0
- package/templates/.agents/skills/zaip-skill-setup/SKILL.md +5 -0
- package/templates/.agents/skills/zaip-skill-sqlite-read-model/SKILL.md +96 -0
- package/templates/.agents/skills/zaip-skill-sqlite-read-model/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-sqlite-read-model/scripts/ensure-node.mjs +18 -0
- package/templates/.agents/zaip-aios/INDEX.md +1 -0
- package/templates/.agents/zaip-aios/README.md +37 -8
- package/templates/.agents/zaip-aios/VERSION +1 -1
- package/templates/.agents/zaip-aios/guides/09-agentes-e-squads.md +43 -6
- package/templates/.agents/zaip-aios/guides/10-seguranca.md +21 -7
- package/templates/.agents/zaip-aios/guides/17-como-o-custo-e-calculado.md +32 -0
- package/templates/template-manifest.json +945 -214
- package/templates/.agents/dashboard/apps/frontend/dist/assets/AgentCatalogSettingsPage-CLYIi7Vo.js +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/AgentCatalogSettingsPage-DTDNVQGX.css +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-CzEggcRb.js +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-05YKn6Z4.js +0 -3
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-YO3yqtgV.css +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-8AzCnl3a.js +0 -77
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-DdBYQ_8D.css +0 -1
- package/templates/.agents/dashboard/apps/frontend/src/AgentCatalogSettingsPage.tsx +0 -617
- package/templates/.agents/dashboard/apps/frontend/src/agent-catalog-settings-page.css +0 -660
- package/templates/.agents/dashboard/apps/frontend/src/agent-catalog-settings.test.ts +0 -249
- package/templates/.agents/dashboard/dashboard.config.json +0 -4
- package/templates/.agents/dashboard/zaip-dashboard.exe +0 -0
|
@@ -18,7 +18,7 @@ export default defineConfig({
|
|
|
18
18
|
},
|
|
19
19
|
projects: [{ name: "chromium", use: { ...devices["Desktop Chrome"] } }],
|
|
20
20
|
webServer: {
|
|
21
|
-
command: "node .agents/dashboard/packages/local-runtime/dist/server.
|
|
21
|
+
command: "node .agents/dashboard/packages/local-runtime/dist/server.cjs",
|
|
22
22
|
cwd: workspaceRoot,
|
|
23
23
|
url: `${baseURL}/api/v2/health`,
|
|
24
24
|
reuseExistingServer: false,
|
|
@@ -85,12 +85,19 @@ test("exports the active Cost Monitor, Operations table, and Kanban view through
|
|
|
85
85
|
.getByRole("textbox", { name: "Busca" });
|
|
86
86
|
await globalSearch.fill("EXEC-");
|
|
87
87
|
await page.getByRole("button", { exact: true, name: "Execuções" }).click();
|
|
88
|
-
|
|
88
|
+
const executionRows = page.locator(".ui-table-row-action");
|
|
89
|
+
if ((await executionRows.count()) === 0) {
|
|
90
|
+
await expect(page.locator(".ui-empty")).toBeVisible();
|
|
91
|
+
} else {
|
|
92
|
+
await expect(page.getByRole("columnheader", { name: /Execução/ })).toBeVisible();
|
|
93
|
+
}
|
|
89
94
|
await expect(page.locator(".export-progress")).toContainText(/\d+%/);
|
|
90
|
-
await
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
95
|
+
if ((await executionRows.count()) > 0) {
|
|
96
|
+
await executionRows.first().click();
|
|
97
|
+
const executionDialog = page.getByRole("dialog", { name: "Detalhes de Execução ZAIP" });
|
|
98
|
+
await expect(executionDialog).toBeVisible();
|
|
99
|
+
await executionDialog.getByRole("button", { name: "Fechar" }).click();
|
|
100
|
+
}
|
|
94
101
|
await page.evaluate(() => {
|
|
95
102
|
(
|
|
96
103
|
window as Window & {
|
|
@@ -229,7 +236,9 @@ test("renders the modern read-only dashboard and meets accessibility gates", asy
|
|
|
229
236
|
const period = globalControls.getByRole("combobox", { name: "Período" });
|
|
230
237
|
await expect(startDate).toHaveValue(/^\d{4}-\d{2}-\d{2}$/);
|
|
231
238
|
await expect(endDate).toHaveValue(/^\d{4}-\d{2}-\d{2}$/);
|
|
232
|
-
await expect(period).toHaveValue("
|
|
239
|
+
await expect(period).toHaveValue("all");
|
|
240
|
+
await expect(startDate).toBeDisabled();
|
|
241
|
+
await expect(endDate).toBeDisabled();
|
|
233
242
|
const initialStart = await startDate.inputValue();
|
|
234
243
|
const today = await endDate.inputValue();
|
|
235
244
|
await expect(page.getByLabel("Data inicial nos filtros")).toHaveValue(initialStart);
|
|
@@ -251,9 +260,9 @@ test("renders the modern read-only dashboard and meets accessibility gates", asy
|
|
|
251
260
|
await expect(period).toHaveValue("custom");
|
|
252
261
|
await period.selectOption("all");
|
|
253
262
|
await expect(period).toHaveValue("all");
|
|
254
|
-
await expect(startDate).toHaveValue(
|
|
263
|
+
await expect(startDate).toHaveValue(/^\d{4}-\d{2}-\d{2}$/);
|
|
255
264
|
await expect(startDate).toBeDisabled();
|
|
256
|
-
await expect(endDate).toHaveValue(
|
|
265
|
+
await expect(endDate).toHaveValue(/^\d{4}-\d{2}-\d{2}$/);
|
|
257
266
|
await expect(endDate).toBeDisabled();
|
|
258
267
|
|
|
259
268
|
await page.getByLabel("Risco").selectOption("critical");
|
|
@@ -261,17 +270,34 @@ test("renders the modern read-only dashboard and meets accessibility gates", asy
|
|
|
261
270
|
page.locator(".operations-task-card .operations-risk:not(.is-critical)"),
|
|
262
271
|
).toHaveCount(0);
|
|
263
272
|
await expect(page.locator(".operations-risk.is-critical").first()).toBeVisible();
|
|
273
|
+
const filteredTaskTotal = Number(
|
|
274
|
+
await page
|
|
275
|
+
.getByRole("button", { name: /Tarefas:/ })
|
|
276
|
+
.first()
|
|
277
|
+
.locator("strong")
|
|
278
|
+
.textContent(),
|
|
279
|
+
);
|
|
280
|
+
const filteredStatusCounts = (
|
|
281
|
+
await page.locator(".operations-panel-wide .operations-legend-value strong").allTextContents()
|
|
282
|
+
).map(Number);
|
|
283
|
+
const filteredRiskCounts = (
|
|
284
|
+
await page.locator(".operations-panel-risk .operations-legend-value strong").allTextContents()
|
|
285
|
+
).map(Number);
|
|
286
|
+
expect(filteredStatusCounts.reduce((sum, value) => sum + value, 0)).toBe(filteredTaskTotal);
|
|
287
|
+
expect(filteredRiskCounts.reduce((sum, value) => sum + value, 0)).toBe(filteredTaskTotal);
|
|
264
288
|
await page.getByRole("button", { name: "Limpar filtros" }).click();
|
|
265
289
|
await expect(page.getByRole("dialog", { name: "Atualizar dashboard" })).toHaveCount(0);
|
|
266
290
|
await expect(startDate).toHaveValue(initialStart);
|
|
267
|
-
await expect(period).toHaveValue("
|
|
291
|
+
await expect(period).toHaveValue("all");
|
|
292
|
+
await expect(startDate).toBeDisabled();
|
|
293
|
+
await expect(endDate).toBeDisabled();
|
|
268
294
|
await expect(page.getByLabel("Risco")).toHaveValue("");
|
|
269
295
|
|
|
270
296
|
const results = await new AxeBuilder({ page }).analyze();
|
|
271
297
|
expect(results.violations).toEqual([]);
|
|
272
298
|
});
|
|
273
299
|
|
|
274
|
-
test("loads
|
|
300
|
+
test("loads a quick Operations summary and never hydrates full detail on selection", async ({
|
|
275
301
|
page,
|
|
276
302
|
}) => {
|
|
277
303
|
const operationsRequests: string[] = [];
|
|
@@ -282,22 +308,60 @@ test("loads one overview first and one full Operations projection only after sel
|
|
|
282
308
|
});
|
|
283
309
|
|
|
284
310
|
await openDashboard(page);
|
|
285
|
-
expect(operationsRequests).
|
|
286
|
-
expect(operationsRequests
|
|
311
|
+
expect(operationsRequests.some((url) => url.includes("scope=quick"))).toBe(true);
|
|
312
|
+
expect(operationsRequests.some((url) => url.includes("scope=detail"))).toBe(false);
|
|
313
|
+
expect(operationsRequests.some((url) => url.includes("/snapshot"))).toBe(false);
|
|
314
|
+
|
|
315
|
+
const requestsBeforeMacroSelection = operationsRequests.length;
|
|
316
|
+
await page.getByRole("button", { name: /^SPECs:/ }).click();
|
|
317
|
+
await expect(page.getByRole("heading", { name: "Status das SPECs" })).toBeVisible();
|
|
318
|
+
await expect(page.getByRole("heading", { name: "Top 5 SPECs" })).toBeVisible();
|
|
319
|
+
await expect(page.locator(".operations-run-bar")).toHaveCount(5);
|
|
320
|
+
expect(
|
|
321
|
+
(await page.locator(".operations-panel-wide .operations-legend-value strong").allTextContents())
|
|
322
|
+
.map(Number)
|
|
323
|
+
.reduce((sum, value) => sum + value, 0),
|
|
324
|
+
).toBe(32);
|
|
325
|
+
expect(
|
|
326
|
+
(await page.locator(".operations-panel-risk .operations-legend-value strong").allTextContents())
|
|
327
|
+
.map(Number)
|
|
328
|
+
.reduce((sum, value) => sum + value, 0),
|
|
329
|
+
).toBe(32);
|
|
330
|
+
await page.getByRole("button", { name: /^PRDs:/ }).click();
|
|
331
|
+
await expect(page.getByRole("heading", { name: "Status das PRDs" })).toBeVisible();
|
|
332
|
+
await expect(page.getByRole("heading", { name: "Top 5 PRDs" })).toBeVisible();
|
|
333
|
+
await expect(page.locator(".operations-run-bar")).toHaveCount(5);
|
|
334
|
+
expect(
|
|
335
|
+
(await page.locator(".operations-panel-wide .operations-legend-value strong").allTextContents())
|
|
336
|
+
.map(Number)
|
|
337
|
+
.reduce((sum, value) => sum + value, 0),
|
|
338
|
+
).toBe(12);
|
|
339
|
+
expect(
|
|
340
|
+
(await page.locator(".operations-panel-risk .operations-legend-value strong").allTextContents())
|
|
341
|
+
.map(Number)
|
|
342
|
+
.reduce((sum, value) => sum + value, 0),
|
|
343
|
+
).toBe(12);
|
|
344
|
+
expect(operationsRequests).toHaveLength(requestsBeforeMacroSelection);
|
|
287
345
|
|
|
288
346
|
await selectOperations(page);
|
|
289
347
|
await expect(page.getByLabel("Kanban de trabalho")).toBeVisible();
|
|
290
|
-
expect(operationsRequests).
|
|
291
|
-
expect(operationsRequests
|
|
348
|
+
expect(operationsRequests.some((url) => url.includes("scope=detail"))).toBe(false);
|
|
349
|
+
expect(operationsRequests.some((url) => url.includes("/snapshot"))).toBe(false);
|
|
292
350
|
|
|
293
351
|
await page
|
|
294
352
|
.getByRole("navigation", { name: "Áreas do dashboard" })
|
|
295
353
|
.getByRole("button", { name: /Operação/ })
|
|
296
354
|
.click();
|
|
297
|
-
expect(operationsRequests).
|
|
355
|
+
expect(operationsRequests.some((url) => url.includes("scope=detail"))).toBe(false);
|
|
298
356
|
});
|
|
299
357
|
|
|
300
358
|
test("integrates the detailed cost monitor into the main dashboard", async ({ page }) => {
|
|
359
|
+
const costRequests: string[] = [];
|
|
360
|
+
const pageErrors: string[] = [];
|
|
361
|
+
page.on("request", (request) => {
|
|
362
|
+
if (request.url().includes("/api/v2/")) costRequests.push(request.url());
|
|
363
|
+
});
|
|
364
|
+
page.on("pageerror", (error) => pageErrors.push(error.message));
|
|
301
365
|
await openDashboard(page);
|
|
302
366
|
const capabilityNav = page.getByRole("navigation", { name: "Áreas do dashboard" });
|
|
303
367
|
const globalControls = page.locator(".dashboard-global-controls");
|
|
@@ -333,9 +397,9 @@ test("integrates the detailed cost monitor into the main dashboard", async ({ pa
|
|
|
333
397
|
const modelHeader = page.getByRole("columnheader", { name: /Modelo/ });
|
|
334
398
|
if ((await modelHeader.count()) > 0) {
|
|
335
399
|
await expect(modelHeader).toBeVisible();
|
|
336
|
-
await expect(page.getByRole("columnheader", { name:
|
|
337
|
-
await expect(page.getByRole("columnheader", { name:
|
|
338
|
-
await expect(page.getByRole("columnheader", { name:
|
|
400
|
+
await expect(page.getByRole("columnheader", { name: /^Invocações / })).toBeVisible();
|
|
401
|
+
await expect(page.getByRole("columnheader", { name: /^Tokens / })).toBeVisible();
|
|
402
|
+
await expect(page.getByRole("columnheader", { name: /^Custo / })).toBeVisible();
|
|
339
403
|
} else {
|
|
340
404
|
await expect(page.locator(".cost-content-models .ui-empty")).toBeVisible();
|
|
341
405
|
}
|
|
@@ -346,10 +410,41 @@ test("integrates the detailed cost monitor into the main dashboard", async ({ pa
|
|
|
346
410
|
await expect(page.getByRole("button", { name: "Zaip Agentes" })).toBeVisible();
|
|
347
411
|
await expect(page.getByRole("button", { exact: true, name: "Conversas" })).toBeVisible();
|
|
348
412
|
|
|
413
|
+
for (const [tab, kind] of [
|
|
414
|
+
["Execuções", "executions"],
|
|
415
|
+
["Conversas", "conversations"],
|
|
416
|
+
["Tarefas", "tasks"],
|
|
417
|
+
["SPEC", "specs"],
|
|
418
|
+
["PRD", "prds"],
|
|
419
|
+
] as const) {
|
|
420
|
+
const response = page.waitForResponse(
|
|
421
|
+
(candidate) =>
|
|
422
|
+
candidate.url().includes("/api/v2/sqlite-views?") &&
|
|
423
|
+
candidate.url().includes(`view=cost_monitor_${kind}`),
|
|
424
|
+
);
|
|
425
|
+
await page.locator(".cost-tabs").getByRole("button", { exact: true, name: tab }).click();
|
|
426
|
+
expect((await response).status()).toBe(200);
|
|
427
|
+
await expect(
|
|
428
|
+
page
|
|
429
|
+
.getByRole("columnheader", { name: /Tempo observado/ })
|
|
430
|
+
.or(page.locator(".ui-empty")),
|
|
431
|
+
).toBeVisible();
|
|
432
|
+
await expect(
|
|
433
|
+
page.getByRole("navigation", { name: "Paginação dos dados agregados" }),
|
|
434
|
+
).toBeVisible();
|
|
435
|
+
expect(pageErrors).toEqual([]);
|
|
436
|
+
await expect(page.locator(".cost-tabs")).toBeVisible();
|
|
437
|
+
}
|
|
438
|
+
expect(costRequests.some((url) => url.includes("scope=detail"))).toBe(false);
|
|
439
|
+
|
|
349
440
|
await capabilityNav.getByRole("button", { name: /Operação/ }).click();
|
|
350
441
|
await page.getByRole("button", { exact: true, name: "Invocações de agentes" }).click();
|
|
351
442
|
await page.getByRole("button", { exact: true, name: "Execuções" }).click();
|
|
352
|
-
await expect(
|
|
443
|
+
await expect(
|
|
444
|
+
page
|
|
445
|
+
.getByRole("columnheader", { name: /Execução/ })
|
|
446
|
+
.or(page.getByRole("status").filter({ hasText: /Aguardando linhas canônicas de execuções/ })),
|
|
447
|
+
).toBeVisible();
|
|
353
448
|
await page.getByRole("button", { exact: true, name: "Invocações de agentes" }).click();
|
|
354
449
|
|
|
355
450
|
await page.getByRole("button", { name: "PT-BR" }).click();
|
|
@@ -362,11 +457,27 @@ test("integrates the detailed cost monitor into the main dashboard", async ({ pa
|
|
|
362
457
|
await expect(runRow).toBeVisible();
|
|
363
458
|
const initialRunCount = await runRows.count();
|
|
364
459
|
const englishStartDate = globalControls.getByLabel("Start date");
|
|
460
|
+
const narrowedResponse = page.waitForResponse(
|
|
461
|
+
(candidate) =>
|
|
462
|
+
candidate.status() === 200 &&
|
|
463
|
+
candidate.url().includes("/api/v2/sqlite-views?") &&
|
|
464
|
+
candidate.url().includes("view=operations_agent_invocations"),
|
|
465
|
+
);
|
|
365
466
|
await englishStartDate.fill(initialEnd);
|
|
467
|
+
await narrowedResponse;
|
|
366
468
|
await expect(englishStartDate).toHaveValue(initialEnd);
|
|
367
469
|
expect(await runRows.count()).toBeLessThanOrEqual(initialRunCount);
|
|
470
|
+
const restoredResponse = page.waitForResponse(
|
|
471
|
+
(candidate) =>
|
|
472
|
+
candidate.status() === 200 &&
|
|
473
|
+
candidate.url().includes("/api/v2/sqlite-views?") &&
|
|
474
|
+
candidate.url().includes("view=operations_agent_invocations"),
|
|
475
|
+
);
|
|
368
476
|
await englishStartDate.fill(initialStart);
|
|
369
|
-
await
|
|
477
|
+
const restoredPage = await restoredResponse;
|
|
478
|
+
expect(((await restoredPage.json()) as { rows: unknown[] }).rows.length).toBeGreaterThan(0);
|
|
479
|
+
await expect(runRows.first()).toBeVisible();
|
|
480
|
+
await runRows.first().click();
|
|
370
481
|
const runDetails = page.getByRole("dialog", { name: "Details for Agent Invocation" });
|
|
371
482
|
await expect(runDetails).toBeVisible();
|
|
372
483
|
await runDetails.getByRole("button", { name: "Close" }).click();
|
|
@@ -406,9 +517,10 @@ test("embeds traceability and keeps global settings and help available", async (
|
|
|
406
517
|
|
|
407
518
|
await page.getByRole("button", { name: "Configurações" }).click();
|
|
408
519
|
await page.getByLabel("Moeda").selectOption("USD");
|
|
409
|
-
await page.getByRole("button", { name: "
|
|
520
|
+
await page.getByRole("button", { name: "Central de Ajuda" }).click();
|
|
410
521
|
await expect(page.getByRole("dialog", { name: "Ajuda do ZAIP-AIOS" })).toBeVisible();
|
|
411
522
|
await expect(page.getByRole("button", { name: "README · ZAIP-AIOS" })).toBeVisible();
|
|
523
|
+
await expect(page.getByRole("button", { name: "Como o custo é calculado" })).toBeVisible();
|
|
412
524
|
await expect(page.getByText("Aprofundar no framework")).toBeVisible();
|
|
413
525
|
const helpDialog = page.getByRole("dialog", { name: "Ajuda do ZAIP-AIOS" });
|
|
414
526
|
await expect(
|
|
@@ -426,6 +538,7 @@ test("groups macro work in All and reveals descendant Tasks only in Tasks", asyn
|
|
|
426
538
|
await openDashboard(page);
|
|
427
539
|
await selectOperations(page);
|
|
428
540
|
const board = page.getByLabel("Kanban de trabalho");
|
|
541
|
+
await expect(board.locator(".operations-task-card").first()).toBeVisible();
|
|
429
542
|
const allItemCount = await boardItemCount(board);
|
|
430
543
|
|
|
431
544
|
await page.getByRole("button", { exact: true, name: "Tarefas" }).click();
|
|
@@ -437,23 +550,75 @@ test("groups macro work in All and reveals descendant Tasks only in Tasks", asyn
|
|
|
437
550
|
.locator(".operations-work-card")
|
|
438
551
|
.filter({ has: page.locator(".operations-work-kind.is-spec") })
|
|
439
552
|
.first();
|
|
440
|
-
await
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
553
|
+
if ((await spec.count()) === 0) {
|
|
554
|
+
await expect(page.getByLabel("Kanban de trabalho").locator(".operations-task-card")).toHaveCount(0);
|
|
555
|
+
} else {
|
|
556
|
+
await expect(spec).toBeVisible();
|
|
557
|
+
await expect(spec.locator(".operations-work-card-counts")).toHaveText(/Tasks \d+\/\d+/);
|
|
558
|
+
await spec.locator(".operations-work-card-open").click();
|
|
559
|
+
await expect(page.getByRole("dialog", { name: "Detalhes do SPEC" })).toBeVisible();
|
|
560
|
+
await page.getByRole("button", { name: "Fechar" }).click();
|
|
561
|
+
}
|
|
445
562
|
|
|
446
563
|
await page.getByRole("button", { exact: true, name: "PRDs" }).click();
|
|
447
564
|
const prd = page
|
|
448
565
|
.locator(".operations-work-card")
|
|
449
566
|
.filter({ has: page.locator(".operations-work-kind.is-prd") })
|
|
450
567
|
.first();
|
|
451
|
-
await
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
568
|
+
if ((await prd.count()) === 0) {
|
|
569
|
+
await expect(page.getByLabel("Kanban de trabalho").locator(".operations-task-card")).toHaveCount(0);
|
|
570
|
+
} else {
|
|
571
|
+
await expect(prd).toBeVisible();
|
|
572
|
+
await expect(prd.locator(".operations-work-card-counts")).toHaveText(
|
|
573
|
+
/SPECs \d+\/\d+ · Tasks \d+\/\d+/,
|
|
574
|
+
);
|
|
575
|
+
await prd.locator(".operations-work-card-open").click();
|
|
576
|
+
await expect(page.getByRole("dialog", { name: "Detalhes do PRD" })).toBeVisible();
|
|
577
|
+
}
|
|
578
|
+
});
|
|
579
|
+
|
|
580
|
+
test("loads monthly overview quickly and keeps PRD and SPEC chart totals reconciled", async ({
|
|
581
|
+
page,
|
|
582
|
+
}) => {
|
|
583
|
+
const openedAt = Date.now();
|
|
584
|
+
await openDashboard(page);
|
|
585
|
+
expect(Date.now() - openedAt).toBeLessThan(3_000);
|
|
586
|
+
|
|
587
|
+
const period = page.getByRole("combobox", { name: /Per/ }).first();
|
|
588
|
+
for (const preset of ["last-month", "this-month"] as const) {
|
|
589
|
+
const response = page.waitForResponse(
|
|
590
|
+
(candidate) =>
|
|
591
|
+
candidate.status() === 200 &&
|
|
592
|
+
candidate.url().includes("/api/v2/operations") &&
|
|
593
|
+
candidate.url().includes("scope=quick"),
|
|
594
|
+
);
|
|
595
|
+
const selectedAt = Date.now();
|
|
596
|
+
await period.selectOption(preset);
|
|
597
|
+
await response;
|
|
598
|
+
expect(Date.now() - selectedAt).toBeLessThan(3_000);
|
|
599
|
+
|
|
600
|
+
for (const kind of ["SPECs", "PRDs"] as const) {
|
|
601
|
+
const selector = page.locator(".operations-kpi.is-selectable").filter({ hasText: kind });
|
|
602
|
+
const cardCount = Number(await selector.locator("strong").textContent());
|
|
603
|
+
await selector.click();
|
|
604
|
+
|
|
605
|
+
const panels = page.locator(".operations-chart-grid > .operations-panel");
|
|
606
|
+
const donutCount = Number(
|
|
607
|
+
await panels.nth(1).locator(".operations-donut-wrap strong").textContent(),
|
|
608
|
+
);
|
|
609
|
+
const statusCounts = await panels
|
|
610
|
+
.nth(0)
|
|
611
|
+
.locator(".operations-legend-value strong")
|
|
612
|
+
.allTextContents();
|
|
613
|
+
const classificationCounts = await panels
|
|
614
|
+
.nth(1)
|
|
615
|
+
.locator(".operations-legend-value strong")
|
|
616
|
+
.allTextContents();
|
|
617
|
+
expect(donutCount).toBe(cardCount);
|
|
618
|
+
expect(statusCounts.reduce((sum, value) => sum + Number(value), 0)).toBe(cardCount);
|
|
619
|
+
expect(classificationCounts.reduce((sum, value) => sum + Number(value), 0)).toBe(cardCount);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
457
622
|
});
|
|
458
623
|
|
|
459
624
|
async function boardItemCount(board: Locator): Promise<number> {
|
|
@@ -475,7 +640,12 @@ test("opens entity-specific details for changes decisions executions and runs",
|
|
|
475
640
|
|
|
476
641
|
for (const [tab, dialogName, detailLabel] of cases) {
|
|
477
642
|
await page.getByRole("button", { exact: true, name: tab }).click();
|
|
478
|
-
|
|
643
|
+
const rows = page.locator(".ui-table-row-action");
|
|
644
|
+
if ((await rows.count()) === 0) {
|
|
645
|
+
await expect(page.locator(".ui-empty")).toBeVisible();
|
|
646
|
+
continue;
|
|
647
|
+
}
|
|
648
|
+
await rows.first().click();
|
|
479
649
|
const dialog = page.getByRole("dialog", { name: dialogName });
|
|
480
650
|
await expect(dialog).toBeVisible();
|
|
481
651
|
await expect(dialog.getByText(detailLabel, { exact: true })).toBeVisible();
|
|
@@ -484,6 +654,16 @@ test("opens entity-specific details for changes decisions executions and runs",
|
|
|
484
654
|
}
|
|
485
655
|
});
|
|
486
656
|
|
|
657
|
+
test("keeps aggregate KPIs visible without an obsolete coverage overlay", async ({ page }) => {
|
|
658
|
+
await openDashboard(page);
|
|
659
|
+
|
|
660
|
+
await expect(page.getByText(/Agregados do manifesto/)).toHaveCount(0);
|
|
661
|
+
await expect(page.locator(".operations-coverage-toast")).toHaveCount(0);
|
|
662
|
+
await expect(page.getByRole("article", { name: /Tempo total de execu/ })).toBeVisible();
|
|
663
|
+
await expect(page.getByRole("article", { name: /Tokens gastos/ })).toBeVisible();
|
|
664
|
+
await expect(page.getByRole("article", { name: /Custo Estimado/ })).toBeVisible();
|
|
665
|
+
});
|
|
666
|
+
|
|
487
667
|
async function globalThisScrollPosition(page: import("@playwright/test").Page) {
|
|
488
668
|
return page.evaluate("window.scrollY");
|
|
489
669
|
}
|
|
@@ -493,24 +673,17 @@ async function openDashboard(page: import("@playwright/test").Page) {
|
|
|
493
673
|
(response) =>
|
|
494
674
|
response.status() === 200 &&
|
|
495
675
|
response.url().includes("/api/v2/operations") &&
|
|
496
|
-
response.url().includes("scope=
|
|
676
|
+
response.url().includes("scope=quick"),
|
|
497
677
|
);
|
|
498
678
|
await page.goto("/?token=e2e-token");
|
|
499
679
|
await operations;
|
|
500
680
|
}
|
|
501
681
|
|
|
502
682
|
async function selectOperations(page: import("@playwright/test").Page) {
|
|
503
|
-
const operations = page.waitForResponse(
|
|
504
|
-
(response) =>
|
|
505
|
-
response.status() === 200 &&
|
|
506
|
-
response.url().includes("/api/v2/operations") &&
|
|
507
|
-
!response.url().includes("scope=overview"),
|
|
508
|
-
);
|
|
509
683
|
await page
|
|
510
684
|
.getByRole("navigation", { name: "Áreas do dashboard" })
|
|
511
685
|
.getByRole("button", { name: /Operação/ })
|
|
512
686
|
.click();
|
|
513
|
-
await operations;
|
|
514
687
|
}
|
|
515
688
|
|
|
516
689
|
test("protects dashboard reads and rejects mutating methods", async ({ request }) => {
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"item_ids": [
|
|
4
|
+
"TASK-2026-07-17-09-15-AUDITORIA-ESTRUTURAL-ZAIP-AIOS-JL7U",
|
|
5
|
+
"TASK-2026-07-17-22-37-INTAKE-OUTCOMES-V3-GA4Q",
|
|
6
|
+
"TASK-2026-07-18-11-54-LIBERAR-ACESSO-TOTAL-CODEX-KKP3",
|
|
7
|
+
"TASK-2026-07-18-12-26-FORMATAR-CUSTOS-CARD-XGRU",
|
|
8
|
+
"TASK-2026-07-18-12-42-REMOVE-OBSOLETE-TASKS-9RBB",
|
|
9
|
+
"TASK-2026-07-18-13-11-ALIGN-CODEX-FULL-ACCESS-A7C5",
|
|
10
|
+
"TASK-2026-07-22-00-26-GLOBAL-CODEX-CONFIG-W7R9",
|
|
11
|
+
"TASK-2026-08-09-11-12-DASHBOARD-FRESH-PORT-HANDOFF-GCAA",
|
|
12
|
+
"TASK-2026-08-09-18-59-REQUALIFICAR-CANDIDATO-ESCOPADO-T8WS",
|
|
13
|
+
"TASK-2026-08-09-20-01-FECHAR-LINT-SHA-LIMPO-RFWB",
|
|
14
|
+
"TASK-2026-08-10-09-42-SINCRONIZAR-EVIDENCIA-HAQ3-2WBT",
|
|
15
|
+
"TASK-2026-08-12-01-15-API-SQLITE-PAGINACAO-6D8V",
|
|
16
|
+
"TASK-2026-08-12-01-15-ASSURANCE-SQLITE-BROWSER-5K9T",
|
|
17
|
+
"TASK-2026-08-12-01-15-CONTRATO-INVENTARIO-SQLITE-METRICAS-9A2R",
|
|
18
|
+
"TASK-2026-08-12-01-15-EXPORTACAO-SQLITE-PARIDADE-7H3S",
|
|
19
|
+
"TASK-2026-08-12-01-15-PROJECAO-SQLITE-SEMANTICA-4C7P",
|
|
20
|
+
"PRD-2026-08-12-01-25-AUDITORIA-INTEGRAL-DASHBOARD-SQLITE-Q7MK",
|
|
21
|
+
"SPEC-2026-08-12-01-15-AUDITORIA-DASHBOARD-SQLITE-METRICAS-N5QK",
|
|
22
|
+
"TASK-2026-08-12-19-43-ADICIONAR-HERMES-README-5V8V",
|
|
23
|
+
"TASK-2026-08-12-22-14-COST-LIFECYCLE-SUBTOTAL-PARITY-LJTE",
|
|
24
|
+
"TASK-2026-08-12-23-43-RECONCILE-OPEN-ITEMS-CURRENT-TELEMETRY-XUH8",
|
|
25
|
+
"TASK-2026-08-12-23-54-RECALIBRAR-OPENCLAW-ECONOMIA-ZRXN",
|
|
26
|
+
"TASK-2026-08-13-00-02-COST-MONITOR-OVERVIEW-RECONCILIATION-T9RX",
|
|
27
|
+
"TASK-2026-08-13-00-15-CORRIGIR-PRIORIDADE-KANBAN-SQLITE-9D72",
|
|
28
|
+
"TASK-2026-08-13-00-17-RECALIBRAR-ZAIP-NOTA-95-GWHV",
|
|
29
|
+
"TASK-2026-08-13-00-28-RECALIBRAR-TRAYCER-HERMES-KDZB",
|
|
30
|
+
"TASK-2026-08-13-00-30-COST-DAILY-DURATION-PARITY-JMBS",
|
|
31
|
+
"TASK-2026-08-13-00-33-PADRONIZAR-METRICAS-LISTA-OPERACIONAL-YSS8"
|
|
32
|
+
],
|
|
33
|
+
"updated_at": "2026-08-13T12:46:29.552Z"
|
|
34
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
# Linux launcher for the local, loopback-only ZAIP SQLite dashboard.
|
|
3
|
+
set -eu
|
|
4
|
+
|
|
5
|
+
launcher_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
|
6
|
+
workspace_root=$(CDPATH= cd -- "$launcher_dir/../.." && pwd)
|
|
7
|
+
runtime="$workspace_root/.agents/dashboard/packages/local-runtime/start-dashboard.mjs"
|
|
8
|
+
|
|
9
|
+
if [ ! -f "$runtime" ]; then
|
|
10
|
+
printf '%s\n' "Erro: o runtime do ZAIP Dashboard não foi encontrado. Reinstale ou reconstrua o ZAIP-AIOS." >&2
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
node_bin=${ZAIP_NODE:-}
|
|
15
|
+
if [ -n "$node_bin" ]; then
|
|
16
|
+
if [ ! -x "$node_bin" ]; then
|
|
17
|
+
printf '%s\n' "Erro: ZAIP_NODE não aponta para um executável Node.js: $node_bin" >&2
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
elif node_bin=$(command -v node 2>/dev/null); then
|
|
21
|
+
:
|
|
22
|
+
else
|
|
23
|
+
printf '%s\n' "Erro: Node.js 22 ou superior não foi encontrado no PATH. Instale-o e tente novamente." >&2
|
|
24
|
+
exit 1
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
node_major=$("$node_bin" -p "process.versions.node.split('.')[0]" 2>/dev/null || true)
|
|
28
|
+
case "$node_major" in
|
|
29
|
+
''|*[!0-9]*)
|
|
30
|
+
printf '%s\n' "Erro: não foi possível determinar a versão do Node.js em $node_bin." >&2
|
|
31
|
+
exit 1
|
|
32
|
+
;;
|
|
33
|
+
esac
|
|
34
|
+
if [ "$node_major" -lt 22 ]; then
|
|
35
|
+
printf '%s\n' "Erro: o Dashboard SQLite requer Node.js 22 ou superior; encontrado Node.js $node_major." >&2
|
|
36
|
+
exit 1
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
if ! "$node_bin" -e "const { builtinModules } = require('node:module'); process.exit(builtinModules.includes('node:sqlite') ? 0 : 1)" >/dev/null 2>&1; then
|
|
40
|
+
printf '%s\n' "Erro: este Node.js não disponibiliza node:sqlite. Reinstale o Node.js 22 ou superior." >&2
|
|
41
|
+
exit 1
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
cd "$workspace_root"
|
|
45
|
+
exec "$node_bin" "$runtime" "$@"
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
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": "
|
|
223
|
+
"sha256": "cad5056abeda7f5134e9f5ef61bba5238439b9ec670b25f4cd245157e5b8ffdb"
|
|
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": "
|
|
307
|
+
"sha256": "62dc180ef9f26346fd1cca07f435719de48342575a9463014d4e854e1024a69f"
|
|
308
308
|
},
|
|
309
309
|
{
|
|
310
310
|
"path": "packages/local-runtime/runtime.mjs",
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 2
|
|
3
|
+
id: REQUIREMENTS-ZAIP-DASHBOARD-LAUNCH
|
|
4
|
+
area: dashboard-launch
|
|
5
|
+
title: Inicialização e hidratação confiável do dashboard
|
|
6
|
+
status: active
|
|
7
|
+
version: 1
|
|
8
|
+
source_change: null
|
|
9
|
+
source_release: "1.0.8"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Inicialização e hidratação confiável do dashboard
|
|
13
|
+
|
|
14
|
+
## REQ-ZAIP-DASHBOARD-LAUNCH-001 — Sessão local previsível
|
|
15
|
+
|
|
16
|
+
O dashboard local deve abrir uma única sessão saudável, preservar processos que não pertencem ao launcher e distinguir carregamento, ausência de dados e falha.
|
|
17
|
+
|
|
18
|
+
- `AC-ZAIP-DASHBOARD-LAUNCH-001`: a cada lançamento sequencial, o executável abre imediatamente uma aba de preparação em nova porta e inicia uma nova instância; somente após o handoff saudável dessa aba a instância anterior inequivocamente pertencente ao mesmo workspace pode ser encerrada. Invocações concorrentes do mesmo lançamento podem coalescer para a nova sessão saudável, redirecionando a própria aba de preparação sem deixá-la morta. Processos de outro proprietário nunca são encerrados.
|
|
19
|
+
- `AC-ZAIP-DASHBOARD-LAUNCH-002`: o launcher só reporta sucesso depois de observar a resposta saudável da instância escolhida e fornece erro acionável quando a inicialização ou o handoff para o navegador falha.
|
|
20
|
+
- `AC-ZAIP-DASHBOARD-LAUNCH-003`: a interface representa hidratação parcial com estado explícito de carregamento e retry, sem apresentar agregados ainda indisponíveis como zeros válidos.
|
|
21
|
+
|
|
22
|
+
## Verificação
|
|
23
|
+
|
|
24
|
+
Validar com testes do launcher, runtime local e projeções quick/detail, além de typecheck, teste do dashboard e paridade entre fonte, runtime instalado e distribuição.
|