@zaip-ai/cli 1.0.8 → 1.3.1
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 +1 -1
- package/dist/services/adapters.d.ts +1 -1
- package/dist/services/adapters.js +1 -1
- package/dist/services/agent-adapters.js +3 -3
- package/dist/services/agent-adapters.js.map +1 -1
- package/dist/services/agent-adapters.test.js +7 -1
- package/dist/services/agent-adapters.test.js.map +1 -1
- package/dist/services/codex-pre-tool-hook-template.d.ts.map +1 -1
- package/dist/services/codex-pre-tool-hook-template.js +89 -7
- package/dist/services/codex-pre-tool-hook-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 +7 -0
- package/dist/services/codex-rules.js.map +1 -1
- package/dist/services/install-agents-template.d.ts.map +1 -1
- package/dist/services/install-agents-template.js +1 -0
- package/dist/services/install-agents-template.js.map +1 -1
- package/dist/services/logger.test.js +2 -2
- package/dist/services/runtime-template.test.js +31 -7
- 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 +12 -3
- package/dist/services/template-manifest.js.map +1 -1
- package/package.json +1 -1
- package/templates/.agents/architecture/software-architecture.md +131 -0
- package/templates/.agents/branding/brandbook.docx +0 -0
- package/templates/.agents/branding/brandbook.md +60 -0
- package/templates/.agents/config/agents/catalog.yaml +7 -7
- package/templates/.agents/config/clients/codex/agents/zaip-agent-backend.toml +2 -2
- package/templates/.agents/config/clients/codex/agents/zaip-agent-designer.toml +2 -2
- package/templates/.agents/config/clients/codex/agents/zaip-agent-finalizer.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-frontend.toml +8 -8
- package/templates/.agents/config/clients/codex/agents/zaip-agent-orchestrator.toml +1 -1
- package/templates/.agents/dashboard/.tmp-run-list.json +254 -0
- package/templates/.agents/dashboard/.zaip-managed.json +457 -173
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{CostCalculationGuidePage-Z60df2r-.js → CostCalculationGuidePage-ovxurkIk.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/DashboardHelpDialog-BgVgrfhQ.js +2310 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{PricingSettingsDialog-Coc6pA-1.js → PricingSettingsDialog-vSvvOHQp.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-BomxqCBU.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-zH758vfs.js +3 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-DLn-Mz2M.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{TraceabilityWorkspace-CaKwQP43.css → TraceabilityWorkspace-DvvavDLY.css} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-DKwP1stV.js +68 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-PoJA2PI1.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{icons-vendor-DFBuc_qp.js → icons-vendor-B_lDDHn1.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-B31GMG5O.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-CZQlsLV9.js +2 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{react-vendor-CCQOHdVI.js → react-vendor-B3TJrD4O.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{traceability-pC2_0J8x.js → traceability-7f1j5wx3.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/index.html +7 -7
- package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
- package/templates/.agents/dashboard/apps/frontend/playwright.dom.config.ts +32 -0
- package/templates/.agents/dashboard/apps/frontend/src/App.tsx +199 -140
- package/templates/.agents/dashboard/apps/frontend/src/AppOverlays.tsx +0 -21
- package/templates/.agents/dashboard/apps/frontend/src/DashboardAlternateContent.tsx +20 -11
- package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +14 -7
- package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +4 -2
- package/templates/.agents/dashboard/apps/frontend/src/TraceabilityWorkspace.dom.e2e.ts +56 -0
- package/templates/.agents/dashboard/apps/frontend/src/TraceabilityWorkspace.test.ts +21 -2
- package/templates/.agents/dashboard/apps/frontend/src/TraceabilityWorkspace.tsx +89 -19
- package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +19 -4
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.test.ts +49 -3
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +29 -10
- package/templates/.agents/dashboard/apps/frontend/src/operations-period-render.test.ts +4 -4
- package/templates/.agents/dashboard/apps/frontend/src/overview-status-page.test.ts +4 -2
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +36 -26
- package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +2 -2
- package/templates/.agents/dashboard/apps/frontend/src/snapshot-banner-semantics.test.ts +47 -6
- package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +59 -9
- package/templates/.agents/dashboard/apps/frontend/src/sqlite-page-export.test.ts +32 -0
- package/templates/.agents/dashboard/apps/frontend/src/sqlite-page-export.ts +21 -0
- package/templates/.agents/dashboard/apps/frontend/src/styles.css +19 -0
- package/templates/.agents/dashboard/apps/frontend/src/traceability-task-pagination.test.ts +32 -0
- package/templates/.agents/dashboard/apps/frontend/src/traceability-task-pagination.ts +36 -0
- package/templates/.agents/dashboard/apps/frontend/src/traceability-workspace.css +6 -2
- package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.test.ts +137 -23
- package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.ts +229 -35
- package/templates/.agents/dashboard/apps/frontend/src/use-app-effects.ts +61 -7
- package/templates/.agents/dashboard/apps/frontend/src/use-app-operations-pages.ts +3 -6
- package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-documents.ts +7 -1
- package/templates/.agents/dashboard/apps/frontend/src/use-app-work-list-page.test.ts +163 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-work-list-page.ts +136 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-operations-detail-export.ts +76 -0
- package/templates/.agents/dashboard/apps/frontend/src/work-list-load-dedup.test.ts +23 -0
- package/templates/.agents/dashboard/apps/frontend/src/work-list-load-dedup.ts +27 -0
- package/templates/.agents/dashboard/apps/frontend/src/work-list-pagination.test.ts +39 -15
- package/templates/.agents/dashboard/apps/frontend/src/work-list-pagination.ts +3 -4
- package/templates/.agents/dashboard/apps/frontend/vite.config.ts +4 -1
- package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CompactLifecycleCostTable.test.ts +89 -19
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CompactLifecycleCostTable.tsx +31 -16
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostCharts.test.ts +43 -14
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostCharts.tsx +5 -5
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostDeveloperAttributionPanel.tsx +60 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostDeveloperAttributionTable.tsx +191 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostFilters.loading.test.ts +14 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostFilters.run-page.test.ts +18 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostFilters.tsx +18 -3
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostModelsAuditTable.tsx +1 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorContent.tsx +75 -44
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorLoadErrors.tsx +35 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.test.ts +162 -40
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +221 -79
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTableLoading.test.ts +132 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTableLoading.tsx +70 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +203 -155
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.tsx +164 -125
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-copy.ts +2 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-views.ts +3 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor.css +5 -2
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-page-range.ts +35 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/index.ts +2 -2
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.ts +2 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-compact-cost-page.ts +32 -9
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.test.ts +37 -2
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.ts +131 -9
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-run-page.ts +34 -17
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.test.ts +0 -24
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.test.ts +225 -424
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +24 -15
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-terminal-day.test.ts +6 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/source-size-cost-server/build-cost-monitor-projection-agents.test.ts +31 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/source-size-cost-server/build-cost-summary-projection-duration.test.ts +414 -0
- package/templates/.agents/dashboard/modules/operations/package.json +1 -1
- package/templates/.agents/dashboard/modules/operations/src/contracts.ts +46 -26
- package/templates/.agents/dashboard/modules/operations/src/react/DeveloperAttributionPanel.test.ts +54 -0
- package/templates/.agents/dashboard/modules/operations/src/react/DeveloperAttributionPanel.tsx +247 -0
- package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.tsx +31 -11
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsMainContent.tsx +39 -13
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.helpers.tsx +107 -2
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.macro-metrics.test.ts +55 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.test.ts +23 -29
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.tsx +211 -184
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverviewTopPanel.tsx +127 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +60 -51
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageNavigation.tsx +1 -4
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageOverview.tsx +3 -0
- package/templates/.agents/dashboard/modules/operations/src/react/PagedWorkList.test.tsx +43 -0
- package/templates/.agents/dashboard/modules/operations/src/react/PagedWorkList.tsx +181 -0
- package/templates/.agents/dashboard/modules/operations/src/react/PeriodSummaryTable.tsx +32 -10
- package/templates/.agents/dashboard/modules/operations/src/react/TaskDetailsDialog.tsx +9 -3
- package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkBoard.tsx +13 -5
- package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.test.ts +16 -6
- package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.tsx +14 -4
- package/templates/.agents/dashboard/modules/operations/src/react/conversation-rows.ts +1 -2
- package/templates/.agents/dashboard/modules/operations/src/react/developer-identities.test.ts +18 -0
- package/templates/.agents/dashboard/modules/operations/src/react/developer-identities.ts +30 -0
- package/templates/.agents/dashboard/modules/operations/src/react/execution-metrics.ts +1 -0
- package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.test.ts +393 -4
- package/templates/.agents/dashboard/modules/operations/src/react/export/ExcelExportAction.tsx +484 -61
- package/templates/.agents/dashboard/modules/operations/src/react/export/export-layout.test.ts +23 -1
- package/templates/.agents/dashboard/modules/operations/src/react/export/xlsx-runtime-e2e.test.ts +248 -0
- package/templates/.agents/dashboard/modules/operations/src/react/index.ts +1 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operation-duration.test.ts +4 -4
- package/templates/.agents/dashboard/modules/operations/src/react/operation-duration.ts +6 -4
- package/templates/.agents/dashboard/modules/operations/src/react/operations-coverage-toast.test.ts +4 -3
- package/templates/.agents/dashboard/modules/operations/src/react/operations-date-filters.css +1 -1
- package/templates/.agents/dashboard/modules/operations/src/react/operations-global-filters.test.ts +4 -1
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +22 -12
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview.css +4 -0
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview.status-cards.test.ts +1 -1
- package/templates/.agents/dashboard/modules/operations/src/react/operations-page-contract.ts +53 -6
- package/templates/.agents/dashboard/modules/operations/src/react/operations-view-order.test.ts +2 -4
- package/templates/.agents/dashboard/modules/operations/src/react/period-summary.test.ts +82 -6
- package/templates/.agents/dashboard/modules/operations/src/react/period-summary.ts +1 -0
- package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.test.ts +2 -1
- package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.ts +1 -1
- package/templates/.agents/dashboard/modules/operations/src/server/execution-relationship-counts.test.ts +19 -7
- package/templates/.agents/dashboard/modules/operations/src/server/execution-relationship-counts.ts +4 -1
- package/templates/.agents/dashboard/modules/operations/src/server/metric-coverage.ts +1 -0
- package/templates/.agents/dashboard/modules/operations/src/server/quick-daily-operations-projection.ts +11 -5
- package/templates/.agents/dashboard/modules/traceability/package.json +1 -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 +533 -338
- package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +506 -311
- package/templates/.agents/dashboard/packages/local-runtime/gitignore.template +2 -0
- package/templates/.agents/dashboard/packages/local-runtime/package.json +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-dashboard.mjs +15 -7
- package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +44 -13
- package/templates/.agents/dashboard/packages/local-runtime/scripts/rebuild-sqlite-read-model.mjs +8 -3
- package/templates/.agents/dashboard/packages/local-runtime/scripts/source-size-runtime-scripts/sqlite-read-model-fixture.mjs +397 -0
- package/templates/.agents/dashboard/packages/local-runtime/scripts/test-sqlite-read-model.mjs +472 -145
- package/templates/.agents/dashboard/packages/local-runtime/scripts/test-unix-launchers.mjs +15 -3
- package/templates/.agents/dashboard/packages/local-runtime/scripts/validate-sqlite-read-model.mjs +141 -33
- package/templates/.agents/dashboard/packages/local-runtime/server.mjs +533 -338
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +6 -2
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +3 -3
- package/templates/.agents/dashboard/packages/local-runtime/src/server-board.test.ts +89 -16
- package/templates/.agents/dashboard/packages/local-runtime/src/server-board.ts +33 -16
- package/templates/.agents/dashboard/packages/local-runtime/src/server-classification-page.test.ts +87 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-period-macro-metric.test.ts +44 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-period-macro-metric.ts +125 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-reconciliation-refresh.test.ts +66 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-request-authority.test.ts +61 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-request-authority.ts +18 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-run-projections.test.ts +42 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.ts +97 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot.test.ts +22 -5
- package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-task-trace.ts +91 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-workspace.ts +7 -3
- package/templates/.agents/dashboard/packages/local-runtime/src/server.test-fixtures.ts +36 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +230 -132
- package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +224 -182
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-artifact-counts.ts +28 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-agent-page.test.ts +63 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-agent-page.ts +109 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-aggregates.ts +497 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-fast-page-parity.test-support.ts +65 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-group-page.test.ts +176 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-group-page.ts +119 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-group-projection.ts +41 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-invocation-page.test.ts +16 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-invocation-page.ts +29 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-first-fold-cache.ts +355 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-first-fold-persistence.ts +121 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-first-fold-timing.ts +27 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.ts +16 -2
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-operations-projection.ts +15 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-operations-work-list.test.ts +223 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-operations-work-list.ts +304 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-cache.test-support.ts +23 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-first-fold-types.ts +89 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-multi-provider-fixture.ts +227 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-multi-provider.test.ts +691 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-source-fingerprint.ts +81 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +1655 -567
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.ts +2168 -1268
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-snapshot-cache.ts +129 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-snapshot-install.test.ts +26 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-snapshot-install.ts +28 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-snapshot-seed.test.ts +116 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-launch-page.mjs +146 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-launch-page.test.mjs +165 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-refresh.mjs +140 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +255 -289
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +94 -88
- package/templates/.agents/dashboard/packages/ui/package.json +1 -1
- package/templates/.agents/dashboard/packages/windows-launcher/Program.cs +5 -2
- package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
- package/templates/.agents/dashboard/tests/e2e/playwright.config.ts +4 -1
- package/templates/.agents/dashboard/tests/e2e/specs/cost-monitor-loading.spec.ts +142 -0
- package/templates/.agents/dashboard/tests/e2e/specs/cost-monitor-pagination.spec.ts +232 -0
- package/templates/.agents/dashboard/tests/e2e/specs/dashboard-performance-matrix.spec.ts +743 -0
- package/templates/.agents/dashboard/tests/e2e/specs/dashboard.spec.ts +189 -214
- 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/growth/estrategia-bootstrap-90-dias.md +169 -0
- package/templates/.agents/growth/strategy.md +27 -0
- package/templates/.agents/marketing/estrategia-marketing-zaip-90-dias.md +197 -0
- package/templates/.agents/marketing/strategy.md +29 -0
- package/templates/.agents/requirements/autonomous-assurance.md +6 -6
- 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 +1 -1
- 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 +3 -3
- package/templates/.agents/requirements/kanban-dashboard.md +10 -2
- package/templates/.agents/requirements/model-orchestration.md +1 -1
- package/templates/.agents/requirements/public-distribution.md +1 -1
- 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 +4 -4
- package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
- package/templates/.agents/rules/dashboard-ui-consistency.md +14 -0
- package/templates/.agents/rules/frontend-lite.md +4 -4
- package/templates/.agents/rules/run-lifecycle-closure.md +4 -4
- package/templates/.agents/runtime/VERSION +1 -1
- package/templates/.agents/runtime/bin/zaip.mjs +1142 -1041
- package/templates/.agents/runtime/checksums.sha256 +6 -6
- package/templates/.agents/runtime/manifest.json +1 -1
- package/templates/.agents/runtime/pnpm-lock.sha256 +1 -1
- package/templates/.agents/runtime/provenance.json +5 -5
- package/templates/.agents/runtime/sbom.cdx.json +3 -3
- package/templates/.agents/sales/playbook.md +32 -0
- package/templates/.agents/sales/roteiro-comercial-zaip.md +252 -0
- package/templates/.agents/skills/criar-pasta-obsidian/scripts/generate-obsidian-vault.test.mjs +20 -16
- package/templates/.agents/skills/zaip-aios/SKILL.md +1 -1
- package/templates/.agents/skills/zaip-skill-agent-catalog/SKILL.md +22 -0
- package/templates/.agents/skills/zaip-skill-agent-catalog/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-author-skills/SKILL.md +3 -2
- package/templates/.agents/skills/zaip-skill-author-skills/scripts/audit-skill-catalog.mjs +49 -0
- package/templates/.agents/skills/zaip-skill-author-skills/scripts/author-skill-scripts.test.mjs +27 -0
- package/templates/.agents/skills/zaip-skill-author-skills/scripts/run-skill-tests.mjs +37 -0
- package/templates/.agents/skills/zaip-skill-backend/SKILL.md +1 -0
- package/templates/.agents/skills/zaip-skill-brand-governance/SKILL.md +9 -2
- package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-framework.md +39 -0
- package/templates/.agents/skills/zaip-skill-brand-governance/references/brandbook-standards.md +1 -1
- package/templates/.agents/skills/zaip-skill-change/SKILL.md +1 -1
- package/templates/.agents/skills/zaip-skill-change/references/observable-evidence.md +83 -0
- package/templates/.agents/skills/zaip-skill-dashboard-diagnostics/SKILL.md +22 -0
- package/templates/.agents/skills/zaip-skill-dashboard-diagnostics/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-enforce-architecture/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-execution/SKILL.md +1 -1
- package/templates/.agents/skills/zaip-skill-frontend/SKILL.md +4 -3
- package/templates/.agents/skills/zaip-skill-frontend/agents/openai.yaml +2 -2
- package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +10 -10
- package/templates/.agents/skills/zaip-skill-growth-strategy-revops/SKILL.md +6 -0
- package/templates/.agents/skills/zaip-skill-lifecycle-closure/SKILL.md +27 -0
- package/templates/.agents/skills/zaip-skill-lifecycle-closure/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-marketing/SKILL.md +6 -0
- package/templates/.agents/skills/zaip-skill-prd/SKILL.md +4 -0
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-local-telemetry.mjs +111 -104
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-explicit-recovery.mjs +223 -0
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.mjs +55 -9
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.test.mjs +145 -14
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.mjs +19 -9
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.test.mjs +82 -5
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/source-size-telemetry/model-identity-reconciliation.mjs +77 -0
- package/templates/.agents/skills/zaip-skill-release-qualification/SKILL.md +20 -0
- package/templates/.agents/skills/zaip-skill-release-qualification/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-review/SKILL.md +5 -0
- package/templates/.agents/skills/zaip-skill-rules/SKILL.md +1 -1
- package/templates/.agents/skills/zaip-skill-sales-methodology/SKILL.md +6 -0
- package/templates/.agents/skills/zaip-skill-spec/SKILL.md +4 -0
- package/templates/.agents/skills/zaip-skill-sqlite-read-model/SKILL.md +22 -90
- package/templates/.agents/skills/zaip-skill-sqlite-read-model/scripts/ensure-node.mjs +28 -5
- package/templates/.agents/zaip-aios/INDEX.md +57 -22
- package/templates/.agents/zaip-aios/README.md +24 -13
- package/templates/.agents/zaip-aios/VERSION +1 -1
- package/templates/.agents/zaip-aios/guides/02-requirements.md +5 -0
- package/templates/.agents/zaip-aios/guides/06-execucao.md +13 -4
- package/templates/.agents/zaip-aios/guides/07-revisao-e-validacao.md +7 -0
- package/templates/.agents/zaip-aios/guides/10-seguranca.md +23 -0
- package/templates/.agents/zaip-aios/guides/11-observabilidade-e-custos.md +6 -6
- package/templates/.agents/zaip-aios/guides/13-boas-praticas.md +3 -0
- package/templates/.agents/zaip-aios/guides/16-lifecycle-e-reconciliacao.md +12 -3
- package/templates/.agents/zaip-aios/guides/17-como-o-custo-e-calculado.md +5 -5
- package/templates/.agents/zaip-aios/guides/18-catalogo-de-agentes.md +76 -0
- package/templates/.agents/zaip-aios/guides/19-assurance-e-autonomia.md +95 -0
- package/templates/.agents/zaip-aios/guides/20-instalacao-detalhada.md +366 -0
- package/templates/.agents/zaip-aios/guides/21-telemetria-monitor-custos.md +46 -0
- package/templates/.agents/zaip-aios/guides/22-fluxos-e-roteamento.md +74 -0
- package/templates/.agents/zaip-aios/guides/23-orquestracao-de-modelos.md +483 -0
- package/templates/.agents/zaip-aios/guides/24-calculo-de-custos-openai.md +85 -0
- package/templates/.agents/zaip-aios/guides/25-fontes-de-precos-openai.md +19 -0
- package/templates/.agents/zaip-aios/guides/26-qualidade-e-release.md +111 -0
- package/templates/.agents/zaip-aios/guides/27-telemetria-git-native.md +172 -0
- package/templates/.agents/zaip-aios/guides/28-lifecycle-completo.md +149 -0
- package/templates/.agents/zaip-aios/guides/assets/diagrams/lifecycles-task-spec-prd.png +0 -0
- package/templates/.agents/zaip-aios/guides/assets/diagrams/prd-lifecycle.png +0 -0
- package/templates/.agents/zaip-aios/guides/assets/diagrams/spec-lifecycle.png +0 -0
- package/templates/.agents/zaip-aios/guides/assets/diagrams/task-lifecycle.png +0 -0
- package/templates/template-manifest.json +756 -235
- package/templates/.agents/dashboard/apps/frontend/dist/assets/DashboardHelpDialog-Cs6dzDmW.js +0 -1505
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-QE1k9yZB.css +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-_Pf5DA_A.js +0 -3
- package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BVlz3DLZ.js +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-BZ5WdaMN.css +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-Cf9ctPVt.js +0 -68
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-8A4DcNXM.js +0 -2
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-DK_enB5Z.css +0 -1
- package/templates/.agents/dashboard/apps/frontend/src/use-idle-cost-prefetch.ts +0 -45
|
@@ -14,7 +14,7 @@ declare global {
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
test("exports
|
|
17
|
+
test("exports Kanban, Lista and Cost Monitor through a save picker while the dashboard remains responsive", async ({
|
|
18
18
|
page,
|
|
19
19
|
}) => {
|
|
20
20
|
await page.addInitScript(() => {
|
|
@@ -80,24 +80,9 @@ test("exports the active Cost Monitor, Operations table, and Kanban view through
|
|
|
80
80
|
)
|
|
81
81
|
.toMatchObject({ pickerCalls: 1, writesBeforePicker: 0, writes: expect.any(Number) });
|
|
82
82
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
.getByRole("textbox", { name: "Busca" });
|
|
86
|
-
await globalSearch.fill("EXEC-");
|
|
87
|
-
await page.getByRole("button", { exact: true, name: "Execuções" }).click();
|
|
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
|
-
}
|
|
83
|
+
await page.getByRole("button", { exact: true, name: "Filtros" }).click();
|
|
84
|
+
await expect(page.getByText("Filtrar dashboard")).toBeVisible();
|
|
94
85
|
await expect(page.locator(".export-progress")).toContainText(/\d+%/);
|
|
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
|
-
}
|
|
101
86
|
await page.evaluate(() => {
|
|
102
87
|
(
|
|
103
88
|
window as Window & {
|
|
@@ -119,12 +104,13 @@ test("exports the active Cost Monitor, Operations table, and Kanban view through
|
|
|
119
104
|
)
|
|
120
105
|
.toBe(true);
|
|
121
106
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
107
|
+
await page
|
|
108
|
+
.getByRole("navigation", { name: "Entidades do ciclo de trabalho" })
|
|
109
|
+
.getByRole("button", { exact: true, name: "Visão de Lista" })
|
|
110
|
+
.click();
|
|
111
|
+
const workList = page.locator(".operations-work-list");
|
|
112
|
+
await expect(workList).toBeVisible();
|
|
113
|
+
await expect(workList.locator("table.ui-table tbody tr, .ui-empty").first()).toBeVisible();
|
|
128
114
|
await expect(exportButton).toHaveCount(1);
|
|
129
115
|
await exportButton.click();
|
|
130
116
|
await expect
|
|
@@ -141,13 +127,12 @@ test("exports the active Cost Monitor, Operations table, and Kanban view through
|
|
|
141
127
|
.poll(() =>
|
|
142
128
|
page.evaluate(() =>
|
|
143
129
|
(window as Window & { __exportProbe: { files: string[] } }).__exportProbe.files.some(
|
|
144
|
-
(name) => name.endsWith("-operations-
|
|
130
|
+
(name) => name.endsWith("-operations-work-list.xlsx"),
|
|
145
131
|
),
|
|
146
132
|
),
|
|
147
133
|
)
|
|
148
134
|
.toBe(true);
|
|
149
135
|
|
|
150
|
-
await globalSearch.fill("");
|
|
151
136
|
await page
|
|
152
137
|
.locator(".dashboard-capability-nav")
|
|
153
138
|
.getByRole("button", { name: /Monitor de Custos/ })
|
|
@@ -226,9 +211,21 @@ test("renders the modern read-only dashboard and meets accessibility gates", asy
|
|
|
226
211
|
await expect(page.locator(".operations-risk.is-standard").first()).toBeVisible();
|
|
227
212
|
const visibleCards = page.locator(".operations-task-card:visible");
|
|
228
213
|
await expect(visibleCards).not.toHaveCount(0);
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
214
|
+
await expect
|
|
215
|
+
.poll(() =>
|
|
216
|
+
visibleCards.evaluateAll(
|
|
217
|
+
(cards) =>
|
|
218
|
+
cards.length > 0 &&
|
|
219
|
+
cards.every((card) => {
|
|
220
|
+
const values = card.querySelectorAll("dl.operations-task-usage dd");
|
|
221
|
+
return (
|
|
222
|
+
values.length === 3 &&
|
|
223
|
+
[...values].every((value) => Boolean(value.textContent?.trim()))
|
|
224
|
+
);
|
|
225
|
+
}),
|
|
226
|
+
),
|
|
227
|
+
)
|
|
228
|
+
.toBe(true);
|
|
232
229
|
await page.getByRole("button", { exact: true, name: "Filtros" }).click();
|
|
233
230
|
await expect(page.getByText("Filtrar dashboard")).toBeVisible();
|
|
234
231
|
const startDate = globalControls.getByLabel("Data inicial");
|
|
@@ -236,9 +233,7 @@ test("renders the modern read-only dashboard and meets accessibility gates", asy
|
|
|
236
233
|
const period = globalControls.getByRole("combobox", { name: "Período" });
|
|
237
234
|
await expect(startDate).toHaveValue(/^\d{4}-\d{2}-\d{2}$/);
|
|
238
235
|
await expect(endDate).toHaveValue(/^\d{4}-\d{2}-\d{2}$/);
|
|
239
|
-
await expect(period).toHaveValue("
|
|
240
|
-
await expect(startDate).toBeDisabled();
|
|
241
|
-
await expect(endDate).toBeDisabled();
|
|
236
|
+
await expect(period).toHaveValue("this-month");
|
|
242
237
|
const initialStart = await startDate.inputValue();
|
|
243
238
|
const today = await endDate.inputValue();
|
|
244
239
|
await expect(page.getByLabel("Data inicial nos filtros")).toHaveValue(initialStart);
|
|
@@ -261,45 +256,16 @@ test("renders the modern read-only dashboard and meets accessibility gates", asy
|
|
|
261
256
|
await period.selectOption("all");
|
|
262
257
|
await expect(period).toHaveValue("all");
|
|
263
258
|
await expect(startDate).toHaveValue(/^\d{4}-\d{2}-\d{2}$/);
|
|
264
|
-
await expect(startDate).toBeDisabled();
|
|
265
259
|
await expect(endDate).toHaveValue(/^\d{4}-\d{2}-\d{2}$/);
|
|
266
|
-
await expect(endDate).toBeDisabled();
|
|
267
260
|
|
|
268
|
-
await page.getByLabel("Risco").selectOption("critical");
|
|
269
|
-
await expect(
|
|
270
|
-
page.locator(".operations-task-card .operations-risk:not(.is-critical)"),
|
|
271
|
-
).toHaveCount(0);
|
|
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);
|
|
288
261
|
await page.getByRole("button", { name: "Limpar filtros" }).click();
|
|
289
|
-
await expect(page.
|
|
290
|
-
await expect(startDate).toHaveValue(initialStart);
|
|
291
|
-
await expect(period).toHaveValue("all");
|
|
292
|
-
await expect(startDate).toBeDisabled();
|
|
293
|
-
await expect(endDate).toBeDisabled();
|
|
294
|
-
await expect(page.getByLabel("Risco")).toHaveValue("");
|
|
262
|
+
await expect(page.getByText("Filtrar dashboard")).toBeVisible();
|
|
295
263
|
|
|
296
264
|
const results = await new AxeBuilder({ page }).analyze();
|
|
297
265
|
expect(results.violations).toEqual([]);
|
|
298
266
|
});
|
|
299
267
|
|
|
300
|
-
test("loads a quick Operations summary
|
|
301
|
-
page,
|
|
302
|
-
}) => {
|
|
268
|
+
test("loads a quick Operations summary without full snapshot hydration", async ({ page }) => {
|
|
303
269
|
const operationsRequests: string[] = [];
|
|
304
270
|
page.on("request", (request) => {
|
|
305
271
|
if (request.method() === "GET" && request.url().includes("/api/v2/operations")) {
|
|
@@ -312,50 +278,30 @@ test("loads a quick Operations summary and never hydrates full detail on selecti
|
|
|
312
278
|
expect(operationsRequests.some((url) => url.includes("scope=detail"))).toBe(false);
|
|
313
279
|
expect(operationsRequests.some((url) => url.includes("/snapshot"))).toBe(false);
|
|
314
280
|
|
|
315
|
-
const requestsBeforeMacroSelection = operationsRequests.length;
|
|
316
281
|
await page.getByRole("button", { name: /^SPECs:/ }).click();
|
|
317
282
|
await expect(page.getByRole("heading", { name: "Status das SPECs" })).toBeVisible();
|
|
318
283
|
await expect(page.getByRole("heading", { name: "Top 5 SPECs" })).toBeVisible();
|
|
319
|
-
await expect(page.locator(".operations-run-bar")).
|
|
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);
|
|
284
|
+
await expect(page.locator(".operations-run-bar").first()).toBeVisible();
|
|
330
285
|
await page.getByRole("button", { name: /^PRDs:/ }).click();
|
|
331
286
|
await expect(page.getByRole("heading", { name: "Status das PRDs" })).toBeVisible();
|
|
332
287
|
await expect(page.getByRole("heading", { name: "Top 5 PRDs" })).toBeVisible();
|
|
333
|
-
await expect(page.locator(".operations-run-bar")).
|
|
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);
|
|
288
|
+
await expect(page.locator(".operations-run-bar").first()).toBeVisible();
|
|
289
|
+
expect(operationsRequests.some((url) => url.includes("scope=detail"))).toBe(true);
|
|
345
290
|
|
|
346
291
|
await selectOperations(page);
|
|
347
292
|
await expect(page.getByLabel("Kanban de trabalho")).toBeVisible();
|
|
348
|
-
expect(operationsRequests.some((url) => url.includes("scope=detail"))).toBe(false);
|
|
349
293
|
expect(operationsRequests.some((url) => url.includes("/snapshot"))).toBe(false);
|
|
350
294
|
|
|
351
295
|
await page
|
|
352
296
|
.getByRole("navigation", { name: "Áreas do dashboard" })
|
|
353
297
|
.getByRole("button", { name: /Operação/ })
|
|
354
298
|
.click();
|
|
355
|
-
expect(operationsRequests.some((url) => url.includes("
|
|
299
|
+
expect(operationsRequests.some((url) => url.includes("/snapshot"))).toBe(false);
|
|
356
300
|
});
|
|
357
301
|
|
|
358
|
-
test("integrates the
|
|
302
|
+
test("integrates the bounded Cost Monitor without snapshot or detail hydration", async ({
|
|
303
|
+
page,
|
|
304
|
+
}) => {
|
|
359
305
|
const costRequests: string[] = [];
|
|
360
306
|
const pageErrors: string[] = [];
|
|
361
307
|
page.on("request", (request) => {
|
|
@@ -364,45 +310,10 @@ test("integrates the detailed cost monitor into the main dashboard", async ({ pa
|
|
|
364
310
|
page.on("pageerror", (error) => pageErrors.push(error.message));
|
|
365
311
|
await openDashboard(page);
|
|
366
312
|
const capabilityNav = page.getByRole("navigation", { name: "Áreas do dashboard" });
|
|
367
|
-
const globalControls = page.locator(".dashboard-global-controls");
|
|
368
313
|
await expect(capabilityNav).toBeVisible();
|
|
369
|
-
await page.getByRole("button", { exact: true, name: "Filtros" }).click();
|
|
370
|
-
const startDate = globalControls.getByLabel("Data inicial");
|
|
371
|
-
const endDate = globalControls.getByLabel("Data final");
|
|
372
|
-
const initialStart = await startDate.inputValue();
|
|
373
|
-
const initialEnd = await endDate.inputValue();
|
|
374
314
|
await capabilityNav.getByRole("button", { name: /Monitor de Custos/ }).click();
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
await expect(page).toHaveURL("/");
|
|
378
|
-
await expect(page.getByRole("navigation", { name: "Dashboard Zaip AIOS menu" })).toBeVisible();
|
|
379
|
-
await expect(page.getByRole("heading", { name: "Status das tarefas" })).toBeVisible();
|
|
380
|
-
await expect(page.getByRole("button", { name: /^Cancelado:/ })).toBeVisible();
|
|
381
|
-
await expect(page.getByRole("button", { name: /^Falhado:/ })).toBeVisible();
|
|
382
|
-
await expect(page.getByRole("heading", { name: "Classificação de Tarefa" })).toBeVisible();
|
|
383
|
-
await expect(page.getByRole("heading", { name: "Top 5 tarefas" })).toBeVisible();
|
|
384
|
-
await expect(page.getByRole("region", { name: "Resumo de custos" })).toHaveCount(0);
|
|
385
|
-
await expect(page.getByLabel("Quadro de tasks")).toHaveCount(0);
|
|
386
|
-
await expect(startDate).toHaveValue(initialStart);
|
|
387
|
-
await expect(endDate).toHaveValue(initialEnd);
|
|
388
|
-
await expect(globalControls.getByRole("combobox", { name: "Período" })).toHaveCount(1);
|
|
389
|
-
await expect(page.getByRole("navigation", { name: "Navegação do Cost Monitor" })).toHaveCount(0);
|
|
390
|
-
await expect(page.locator(".cost-hero")).toHaveCount(0);
|
|
391
|
-
await expect(page.locator(".cost-period")).toHaveCount(0);
|
|
392
|
-
await page
|
|
393
|
-
.locator(".cost-tabs")
|
|
394
|
-
.getByRole("button", { exact: true, name: "Modelos LLM" })
|
|
395
|
-
.click();
|
|
396
|
-
await expect(page.locator(".cost-content-models")).toBeVisible();
|
|
397
|
-
const modelHeader = page.getByRole("columnheader", { name: /Modelo/ });
|
|
398
|
-
if ((await modelHeader.count()) > 0) {
|
|
399
|
-
await expect(modelHeader).toBeVisible();
|
|
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();
|
|
403
|
-
} else {
|
|
404
|
-
await expect(page.locator(".cost-content-models .ui-empty")).toBeVisible();
|
|
405
|
-
}
|
|
315
|
+
const tabs = page.locator(".cost-tabs");
|
|
316
|
+
await expect(tabs).toBeVisible();
|
|
406
317
|
await expect(page.getByRole("button", { name: "Diário" })).toBeVisible();
|
|
407
318
|
await expect(page.getByRole("button", { name: "Mensal" })).toBeVisible();
|
|
408
319
|
await expect(page.getByRole("button", { name: "Anual" })).toBeVisible();
|
|
@@ -411,6 +322,7 @@ test("integrates the detailed cost monitor into the main dashboard", async ({ pa
|
|
|
411
322
|
await expect(page.getByRole("button", { exact: true, name: "Conversas" })).toBeVisible();
|
|
412
323
|
|
|
413
324
|
for (const [tab, kind] of [
|
|
325
|
+
["Modelos LLM", "models"],
|
|
414
326
|
["Execuções", "executions"],
|
|
415
327
|
["Conversas", "conversations"],
|
|
416
328
|
["Tarefas", "tasks"],
|
|
@@ -419,68 +331,20 @@ test("integrates the detailed cost monitor into the main dashboard", async ({ pa
|
|
|
419
331
|
] as const) {
|
|
420
332
|
const response = page.waitForResponse(
|
|
421
333
|
(candidate) =>
|
|
334
|
+
candidate.status() === 200 &&
|
|
422
335
|
candidate.url().includes("/api/v2/sqlite-views?") &&
|
|
423
336
|
candidate.url().includes(`view=cost_monitor_${kind}`),
|
|
424
337
|
);
|
|
425
|
-
await
|
|
338
|
+
await tabs.getByRole("button", { exact: true, name: tab }).click();
|
|
426
339
|
expect((await response).status()).toBe(200);
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
.or(page.locator(".ui-empty")),
|
|
431
|
-
).toBeVisible();
|
|
432
|
-
await expect(
|
|
433
|
-
page.getByRole("navigation", { name: "Paginação dos dados agregados" }),
|
|
434
|
-
).toBeVisible();
|
|
340
|
+
const surface = page.locator(`.cost-content-${kind}`);
|
|
341
|
+
await expect(surface).not.toHaveAttribute("aria-busy", "true");
|
|
342
|
+
await expect(surface.locator(".ui-table tbody tr, .ui-empty").first()).toBeVisible();
|
|
435
343
|
expect(pageErrors).toEqual([]);
|
|
436
|
-
await expect(
|
|
344
|
+
await expect(tabs).toBeVisible();
|
|
437
345
|
}
|
|
438
346
|
expect(costRequests.some((url) => url.includes("scope=detail"))).toBe(false);
|
|
439
|
-
|
|
440
|
-
await capabilityNav.getByRole("button", { name: /Operação/ }).click();
|
|
441
|
-
await page.getByRole("button", { exact: true, name: "Invocações de agentes" }).click();
|
|
442
|
-
await page.getByRole("button", { exact: true, name: "Execuções" }).click();
|
|
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();
|
|
448
|
-
await page.getByRole("button", { exact: true, name: "Invocações de agentes" }).click();
|
|
449
|
-
|
|
450
|
-
await page.getByRole("button", { name: "PT-BR" }).click();
|
|
451
|
-
await page.getByRole("button", { name: /English/ }).click();
|
|
452
|
-
await page.getByRole("button", { exact: true, name: "Filters" }).click();
|
|
453
|
-
|
|
454
|
-
await page.getByRole("textbox", { exact: true, name: "Search" }).fill("RUN-");
|
|
455
|
-
const runRows = page.locator(".ui-table-row-action");
|
|
456
|
-
const runRow = runRows.first();
|
|
457
|
-
await expect(runRow).toBeVisible();
|
|
458
|
-
const initialRunCount = await runRows.count();
|
|
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
|
-
);
|
|
466
|
-
await englishStartDate.fill(initialEnd);
|
|
467
|
-
await narrowedResponse;
|
|
468
|
-
await expect(englishStartDate).toHaveValue(initialEnd);
|
|
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
|
-
);
|
|
476
|
-
await englishStartDate.fill(initialStart);
|
|
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();
|
|
481
|
-
const runDetails = page.getByRole("dialog", { name: "Details for Agent Invocation" });
|
|
482
|
-
await expect(runDetails).toBeVisible();
|
|
483
|
-
await runDetails.getByRole("button", { name: "Close" }).click();
|
|
347
|
+
expect(costRequests.some((url) => url.includes("/api/v2/snapshot"))).toBe(false);
|
|
484
348
|
});
|
|
485
349
|
|
|
486
350
|
test("embeds traceability and keeps global settings and help available", async ({ page }) => {
|
|
@@ -490,9 +354,12 @@ test("embeds traceability and keeps global settings and help available", async (
|
|
|
490
354
|
await expect(capabilityNav.getByRole("button", { name: /Monitor de Custos/ })).toBeVisible();
|
|
491
355
|
await capabilityNav.getByRole("button", { name: /Rastreabilidade/ }).click();
|
|
492
356
|
|
|
493
|
-
const taskSelector = page.
|
|
357
|
+
const taskSelector = page.getByRole("combobox", { name: "Buscar task por nome ou ID" });
|
|
494
358
|
await expect(taskSelector).toBeVisible();
|
|
495
|
-
await
|
|
359
|
+
await taskSelector.click();
|
|
360
|
+
const taskList = page.getByRole("listbox", { name: "Buscar task por nome ou ID" });
|
|
361
|
+
await expect(taskList).toBeVisible();
|
|
362
|
+
await taskList.getByRole("option").first().click();
|
|
496
363
|
await expect(page.getByRole("dialog", { name: "Rastreabilidade da task" })).toBeVisible({
|
|
497
364
|
timeout: 15_000,
|
|
498
365
|
});
|
|
@@ -551,7 +418,9 @@ test("groups macro work in All and reveals descendant Tasks only in Tasks", asyn
|
|
|
551
418
|
.filter({ has: page.locator(".operations-work-kind.is-spec") })
|
|
552
419
|
.first();
|
|
553
420
|
if ((await spec.count()) === 0) {
|
|
554
|
-
await expect(
|
|
421
|
+
await expect(
|
|
422
|
+
page.getByLabel("Kanban de trabalho").locator(".operations-task-card"),
|
|
423
|
+
).toHaveCount(0);
|
|
555
424
|
} else {
|
|
556
425
|
await expect(spec).toBeVisible();
|
|
557
426
|
await expect(spec.locator(".operations-work-card-counts")).toHaveText(/Tasks \d+\/\d+/);
|
|
@@ -566,7 +435,9 @@ test("groups macro work in All and reveals descendant Tasks only in Tasks", asyn
|
|
|
566
435
|
.filter({ has: page.locator(".operations-work-kind.is-prd") })
|
|
567
436
|
.first();
|
|
568
437
|
if ((await prd.count()) === 0) {
|
|
569
|
-
await expect(
|
|
438
|
+
await expect(
|
|
439
|
+
page.getByLabel("Kanban de trabalho").locator(".operations-task-card"),
|
|
440
|
+
).toHaveCount(0);
|
|
570
441
|
} else {
|
|
571
442
|
await expect(prd).toBeVisible();
|
|
572
443
|
await expect(prd.locator(".operations-work-card-counts")).toHaveText(
|
|
@@ -577,6 +448,75 @@ test("groups macro work in All and reveals descendant Tasks only in Tasks", asyn
|
|
|
577
448
|
}
|
|
578
449
|
});
|
|
579
450
|
|
|
451
|
+
test("shows the observed default-month macro duration consistently for SPEC and PRD", async ({
|
|
452
|
+
page,
|
|
453
|
+
}) => {
|
|
454
|
+
const response = await openDashboard(page);
|
|
455
|
+
const projection = (await response.json()) as {
|
|
456
|
+
summary: {
|
|
457
|
+
overview_metrics?: {
|
|
458
|
+
macro_metrics?: Record<
|
|
459
|
+
"specs" | "prds",
|
|
460
|
+
{
|
|
461
|
+
total_duration_ms: number | null;
|
|
462
|
+
average_duration_ms: number | null;
|
|
463
|
+
top_entities?: Array<{ duration_ms: number | null }>;
|
|
464
|
+
}
|
|
465
|
+
>;
|
|
466
|
+
};
|
|
467
|
+
};
|
|
468
|
+
};
|
|
469
|
+
await expect(page.getByRole("combobox", { name: /Per/ }).first()).toHaveValue("this-month");
|
|
470
|
+
|
|
471
|
+
for (const kind of ["SPECs", "PRDs"] as const) {
|
|
472
|
+
const macroKey = kind === "SPECs" ? "specs" : "prds";
|
|
473
|
+
const macroMetric = projection.summary.overview_metrics?.macro_metrics?.[macroKey];
|
|
474
|
+
expect(macroMetric).toBeDefined();
|
|
475
|
+
expect(macroMetric?.total_duration_ms).not.toBeNull();
|
|
476
|
+
await page.locator(".operations-kpi.is-selectable").filter({ hasText: kind }).click();
|
|
477
|
+
const duration = page.getByRole("article", {
|
|
478
|
+
name: new RegExp(`Tempo total de execu[cç][aã]o de ${kind}`),
|
|
479
|
+
});
|
|
480
|
+
await expect(duration.locator("strong")).toHaveText(
|
|
481
|
+
formatDashboardDuration(macroMetric?.total_duration_ms ?? 0),
|
|
482
|
+
);
|
|
483
|
+
await expect(duration).not.toContainText("83,4 h");
|
|
484
|
+
|
|
485
|
+
const average = page
|
|
486
|
+
.getByRole("heading", { name: `Média por ${kind === "SPECs" ? "SPEC" : "PRD"}` })
|
|
487
|
+
.locator("xpath=../../..");
|
|
488
|
+
await expect(average).toContainText("Tempo médio");
|
|
489
|
+
if (
|
|
490
|
+
macroMetric?.average_duration_ms !== null &&
|
|
491
|
+
macroMetric?.average_duration_ms !== undefined
|
|
492
|
+
) {
|
|
493
|
+
await expect(average).toContainText(formatDashboardDuration(macroMetric.average_duration_ms));
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
const top = page.getByRole("heading", { name: `Top 5 ${kind}` }).locator("xpath=../../..");
|
|
497
|
+
const topEntities = macroMetric?.top_entities ?? [];
|
|
498
|
+
const expectedUnavailableCount = topEntities.filter(
|
|
499
|
+
(entity) => entity.duration_ms === null,
|
|
500
|
+
).length;
|
|
501
|
+
await expect(top.locator(".operations-run-bar")).toHaveCount(topEntities.length);
|
|
502
|
+
await expect(top.locator(".operations-run-bar.is-duration-unavailable")).toHaveCount(
|
|
503
|
+
expectedUnavailableCount,
|
|
504
|
+
);
|
|
505
|
+
if (topEntities.length > 0) {
|
|
506
|
+
const firstDuration = topEntities[0]?.duration_ms;
|
|
507
|
+
await expect(top.locator(".operations-run-bar").first()).toContainText(
|
|
508
|
+
firstDuration === null || firstDuration === undefined
|
|
509
|
+
? "Indisponível"
|
|
510
|
+
: formatDashboardDuration(firstDuration),
|
|
511
|
+
);
|
|
512
|
+
await expect(top.locator(".operations-run-bar").first()).toHaveAttribute(
|
|
513
|
+
"aria-label",
|
|
514
|
+
new RegExp(kind === "SPECs" ? "^SPEC " : "^PRD "),
|
|
515
|
+
);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
});
|
|
519
|
+
|
|
580
520
|
test("loads monthly overview quickly and keeps PRD and SPEC chart totals reconciled", async ({
|
|
581
521
|
page,
|
|
582
522
|
}) => {
|
|
@@ -585,7 +525,7 @@ test("loads monthly overview quickly and keeps PRD and SPEC chart totals reconci
|
|
|
585
525
|
expect(Date.now() - openedAt).toBeLessThan(3_000);
|
|
586
526
|
|
|
587
527
|
const period = page.getByRole("combobox", { name: /Per/ }).first();
|
|
588
|
-
for (const preset of ["
|
|
528
|
+
for (const preset of ["all", "this-month"] as const) {
|
|
589
529
|
const response = page.waitForResponse(
|
|
590
530
|
(candidate) =>
|
|
591
531
|
candidate.status() === 200 &&
|
|
@@ -594,7 +534,22 @@ test("loads monthly overview quickly and keeps PRD and SPEC chart totals reconci
|
|
|
594
534
|
);
|
|
595
535
|
const selectedAt = Date.now();
|
|
596
536
|
await period.selectOption(preset);
|
|
597
|
-
await response;
|
|
537
|
+
const quickResponse = await response;
|
|
538
|
+
const quickUrl = new URL(quickResponse.url());
|
|
539
|
+
const dateControls = page.locator(".dashboard-global-controls");
|
|
540
|
+
const expectedFrom =
|
|
541
|
+
preset === "all" ? null : await dateControls.getByLabel("Data inicial").inputValue();
|
|
542
|
+
const expectedTo =
|
|
543
|
+
preset === "all" ? null : await dateControls.getByLabel("Data final").inputValue();
|
|
544
|
+
expect(quickUrl.searchParams.get("from")).toBe(expectedFrom);
|
|
545
|
+
expect(quickUrl.searchParams.get("to")).toBe(expectedTo);
|
|
546
|
+
const quickProjection = (await quickResponse.json()) as {
|
|
547
|
+
summary: {
|
|
548
|
+
overview_metrics?: {
|
|
549
|
+
macro_metrics?: Record<"specs" | "prds", { total_duration_ms: number | null }>;
|
|
550
|
+
};
|
|
551
|
+
};
|
|
552
|
+
};
|
|
598
553
|
expect(Date.now() - selectedAt).toBeLessThan(3_000);
|
|
599
554
|
|
|
600
555
|
for (const kind of ["SPECs", "PRDs"] as const) {
|
|
@@ -617,40 +572,64 @@ test("loads monthly overview quickly and keeps PRD and SPEC chart totals reconci
|
|
|
617
572
|
expect(donutCount).toBe(cardCount);
|
|
618
573
|
expect(statusCounts.reduce((sum, value) => sum + Number(value), 0)).toBe(cardCount);
|
|
619
574
|
expect(classificationCounts.reduce((sum, value) => sum + Number(value), 0)).toBe(cardCount);
|
|
575
|
+
|
|
576
|
+
const macroKey = kind === "SPECs" ? "specs" : "prds";
|
|
577
|
+
const macroDuration =
|
|
578
|
+
quickProjection.summary.overview_metrics?.macro_metrics?.[macroKey]?.total_duration_ms;
|
|
579
|
+
expect(macroDuration).not.toBeUndefined();
|
|
580
|
+
if (macroDuration === null) {
|
|
581
|
+
await expect(
|
|
582
|
+
page
|
|
583
|
+
.getByRole("article", {
|
|
584
|
+
name: new RegExp(`Tempo total de execu[cç][aã]o de ${kind}`),
|
|
585
|
+
})
|
|
586
|
+
.locator("strong"),
|
|
587
|
+
).toHaveText("Indisponível");
|
|
588
|
+
}
|
|
620
589
|
}
|
|
621
590
|
}
|
|
622
591
|
});
|
|
623
592
|
|
|
593
|
+
function formatDashboardDuration(value: number): string {
|
|
594
|
+
if (value >= 3_600_000) {
|
|
595
|
+
return `${new Intl.NumberFormat("pt-BR", { maximumFractionDigits: 1 }).format(value / 3_600_000)} h`;
|
|
596
|
+
}
|
|
597
|
+
if (value >= 60_000) return `${Math.round(value / 60_000)} min`;
|
|
598
|
+
return `${Math.round(value / 1_000)} seg`;
|
|
599
|
+
}
|
|
600
|
+
|
|
624
601
|
async function boardItemCount(board: Locator): Promise<number> {
|
|
625
602
|
const counts = await board.locator(".operations-column-count").allTextContents();
|
|
626
603
|
return counts.reduce((total, value) => total + Number(value), 0);
|
|
627
604
|
}
|
|
628
605
|
|
|
629
|
-
test("
|
|
606
|
+
test("uses canonical Kanban and paginated work-list views instead of obsolete entity tabs", async ({
|
|
630
607
|
page,
|
|
631
608
|
}) => {
|
|
632
609
|
await openDashboard(page);
|
|
633
610
|
await selectOperations(page);
|
|
634
|
-
const
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
await
|
|
653
|
-
await
|
|
611
|
+
const viewTabs = page.getByRole("navigation", { name: "Entidades do ciclo de trabalho" });
|
|
612
|
+
await expect(viewTabs.getByRole("button", { name: "Execuções", exact: true })).toHaveCount(0);
|
|
613
|
+
await expect(
|
|
614
|
+
viewTabs.getByRole("button", { name: "Invocações de agentes", exact: true }),
|
|
615
|
+
).toHaveCount(0);
|
|
616
|
+
await expect(page.locator(".operations-work-board")).toBeVisible();
|
|
617
|
+
|
|
618
|
+
await viewTabs.getByRole("button", { name: "Visão de Lista", exact: true }).click();
|
|
619
|
+
const workList = page.locator(".operations-work-list");
|
|
620
|
+
await expect(workList).toBeVisible();
|
|
621
|
+
await expect(workList.locator("table.ui-table tbody tr, .ui-empty").first()).toBeVisible();
|
|
622
|
+
expect(await workList.locator("table.ui-table tbody tr").count()).toBeLessThanOrEqual(10);
|
|
623
|
+
await expect(
|
|
624
|
+
workList.getByRole("navigation", { name: "Paginação da lista de trabalho" }),
|
|
625
|
+
).toBeVisible();
|
|
626
|
+
|
|
627
|
+
const filters = workList.getByRole("navigation", { name: "Filtrar tipo de trabalho" });
|
|
628
|
+
for (const kind of ["Tudo", "Tarefas", "Tarefa Avulsa", "PRDs", "SPECs"] as const) {
|
|
629
|
+
await filters.getByRole("button", { name: kind, exact: true }).click();
|
|
630
|
+
await expect(workList).not.toHaveAttribute("aria-busy", "true");
|
|
631
|
+
await expect(workList.locator("table.ui-table tbody tr, .ui-empty").first()).toBeVisible();
|
|
632
|
+
expect(await workList.locator("table.ui-table tbody tr").count()).toBeLessThanOrEqual(10);
|
|
654
633
|
}
|
|
655
634
|
});
|
|
656
635
|
|
|
@@ -664,10 +643,6 @@ test("keeps aggregate KPIs visible without an obsolete coverage overlay", async
|
|
|
664
643
|
await expect(page.getByRole("article", { name: /Custo Estimado/ })).toBeVisible();
|
|
665
644
|
});
|
|
666
645
|
|
|
667
|
-
async function globalThisScrollPosition(page: import("@playwright/test").Page) {
|
|
668
|
-
return page.evaluate("window.scrollY");
|
|
669
|
-
}
|
|
670
|
-
|
|
671
646
|
async function openDashboard(page: import("@playwright/test").Page) {
|
|
672
647
|
const operations = page.waitForResponse(
|
|
673
648
|
(response) =>
|
|
@@ -676,7 +651,7 @@ async function openDashboard(page: import("@playwright/test").Page) {
|
|
|
676
651
|
response.url().includes("scope=quick"),
|
|
677
652
|
);
|
|
678
653
|
await page.goto("/?token=e2e-token");
|
|
679
|
-
|
|
654
|
+
return operations;
|
|
680
655
|
}
|
|
681
656
|
|
|
682
657
|
async function selectOperations(page: import("@playwright/test").Page) {
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"version": "1.0
|
|
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": "
|
|
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": "
|
|
307
|
+
"sha256": "73bbd424a00481ca49bd3265183e0b505cc313484459d0701361a987f2b89057"
|
|
308
308
|
},
|
|
309
309
|
{
|
|
310
310
|
"path": "packages/local-runtime/runtime.mjs",
|