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