@zaip-ai/cli 2.2.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -13
- package/dist/services/adapters.d.ts +1 -1
- package/dist/services/adapters.d.ts.map +1 -1
- package/dist/services/adapters.js +26 -9
- package/dist/services/adapters.js.map +1 -1
- package/dist/services/agent-adapters.js +37 -18
- package/dist/services/agent-adapters.js.map +1 -1
- package/dist/services/agent-discovery.d.ts +27 -0
- package/dist/services/agent-discovery.d.ts.map +1 -0
- package/dist/services/agent-discovery.js +73 -0
- package/dist/services/agent-discovery.js.map +1 -0
- package/dist/services/codex-conversation-lifecycle-hook.d.ts.map +1 -1
- package/dist/services/codex-conversation-lifecycle-hook.js +164 -24
- package/dist/services/codex-conversation-lifecycle-hook.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 +146 -72
- 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 +3 -3
- 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 +117 -66
- package/dist/services/codex-subagent-hook-template.js.map +1 -1
- package/dist/services/install-agents-template.d.ts.map +1 -1
- package/dist/services/install-agents-template.js +65 -7
- 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 +22 -1
- package/dist/services/logger.test.js.map +1 -1
- package/dist/services/runtime-template.test.js +153 -1
- package/dist/services/runtime-template.test.js.map +1 -1
- package/dist/services/transactional-files.d.ts.map +1 -1
- package/dist/services/transactional-files.js +59 -14
- package/dist/services/transactional-files.js.map +1 -1
- package/package.json +1 -1
- package/templates/.agents/.env.example +9 -3
- package/templates/.agents/README-ENG.md +101 -15
- package/templates/.agents/README.md +102 -17
- package/templates/.agents/architecture/software-architecture.md +1 -59
- package/templates/.agents/branding/brandbook.md +3 -0
- package/templates/.agents/config/agents/catalog.yaml +25 -10
- package/templates/.agents/config/agents/discovery.json +319 -0
- package/templates/.agents/config/clients/codex/agents/zaip-agent-analyst.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-auditor.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-backend.toml +3 -3
- package/templates/.agents/config/clients/codex/agents/zaip-agent-brand-strategist.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-builder.toml +3 -3
- package/templates/.agents/config/clients/codex/agents/zaip-agent-cloud-engineer.toml +12 -9
- package/templates/.agents/config/clients/codex/agents/zaip-agent-data-analyst.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-designer.toml +3 -3
- package/templates/.agents/config/clients/codex/agents/zaip-agent-finalizer.toml +2 -2
- package/templates/.agents/config/clients/codex/agents/zaip-agent-frontend.toml +3 -3
- package/templates/.agents/config/clients/codex/agents/zaip-agent-general-operations.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-governance-compliance.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-growth-strategist.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-integrator.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-marketing-analyst.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-orchestrator.toml +13 -10
- package/templates/.agents/config/clients/codex/agents/zaip-agent-refactoring-specialist.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-reviewer.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-sales-specialist.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-security-auditor.toml +1 -1
- package/templates/.agents/config/clients/codex/agents/zaip-agent-task-executor.toml +3 -3
- package/templates/.agents/config/clients/codex/agents/zaip-agent-website-developer.toml +3 -3
- package/templates/.agents/config/clients/codex/agents/zaip-agent-writer.toml +1 -1
- package/templates/.agents/config/pricing/models.json +9 -5
- package/templates/.agents/config/project.yaml +22 -2
- package/templates/.agents/dashboard/.zaip-managed.json +530 -138
- package/templates/.agents/dashboard/README.md +16 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-CEDZjl4V.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-DaSllaJp.js → DashboardHelpDialog-TnrL1ZyZ.js} +967 -578
- package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-DjQpBqGU.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-B9GWkEyN.css +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-BAvLPAee.js +3 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BQZXUnQu.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-06__WZco.js +68 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/dashboard-localization-Basaw1NR.js +824 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{icons-vendor-TPUT2IUt.js → icons-vendor-DEmo6Tn2.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-BQe3zTvL.js +2 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/{react-vendor-Ct48XHGL.js → react-vendor-CadYsm83.js} +1 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-Bh1tDfsg.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-BzKK8kK3.js +1 -0
- package/templates/.agents/dashboard/apps/frontend/dist/index.html +6 -6
- package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
- package/templates/.agents/dashboard/apps/frontend/src/App.tsx +3 -1264
- package/templates/.agents/dashboard/apps/frontend/src/AppDashboardContent.tsx +368 -0
- package/templates/.agents/dashboard/apps/frontend/src/AutonomySettings.tsx +82 -0
- package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.dom.test.ts +130 -0
- package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +206 -157
- package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +3 -1
- package/templates/.agents/dashboard/apps/frontend/src/__tests__/app-composition-support.ts +12 -0
- package/templates/.agents/dashboard/apps/frontend/src/cost-monitor-population.test.tsx +149 -0
- package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +9 -7
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api-settings.ts +152 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.test.ts +19 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +50 -154
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-app-shell.tsx +33 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-cost-facts.test.ts +54 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-cost-facts.ts +48 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-localization.test.ts +37 -43
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-localization.ts +9 -251
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-project-overview.ts +35 -2
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-retry.ts +17 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-setup-route.ts +29 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-view-actions.test.ts +51 -0
- package/templates/.agents/dashboard/apps/frontend/src/dashboard-view-actions.ts +68 -0
- package/templates/.agents/dashboard/apps/frontend/src/operations-period-render.test.ts +38 -2
- package/templates/.agents/dashboard/apps/frontend/src/operations-period.test.ts +19 -4
- package/templates/.agents/dashboard/apps/frontend/src/operations-period.ts +5 -3
- package/templates/.agents/dashboard/apps/frontend/src/overview-status-page.test.ts +2 -2
- package/templates/.agents/dashboard/apps/frontend/src/project-installation-status.test.ts +137 -0
- package/templates/.agents/dashboard/apps/frontend/src/project-installation-status.ts +66 -0
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-copy.ts +181 -0
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-model.ts +11 -1
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +102 -51
- package/templates/.agents/dashboard/apps/frontend/src/project-settings-state.css +55 -0
- package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +14 -2
- package/templates/.agents/dashboard/apps/frontend/src/sao-paulo-day-rollover.test.ts +36 -0
- package/templates/.agents/dashboard/apps/frontend/src/sao-paulo-day-rollover.ts +30 -0
- package/templates/.agents/dashboard/apps/frontend/src/snapshot-banner-semantics.test.ts +2 -5
- package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +31 -20
- package/templates/.agents/dashboard/apps/frontend/src/traceability-task-pagination.ts +1 -2
- package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.test.ts +6 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.ts +2 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-effects.ts +9 -1
- package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-documents.ts +3 -1
- package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-task-pagination.ts +66 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-app-work-board.ts +397 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-dashboard-app-model.tsx +782 -0
- package/templates/.agents/dashboard/apps/frontend/src/use-snapshot-notice.tsx +49 -0
- package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/complete-cost-average.test.ts +73 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/contracts.ts +9 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/period-averages.ts +60 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostDeveloperPanelSlot.tsx +16 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostGroupsTable.tsx +459 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorContent.tsx +8 -22
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.test.ts +27 -17
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +64 -189
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorRunDialog.tsx +20 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostPeriodAverageCards.tsx +32 -8
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables-hides-calls-that-have-no-collected.test.ts +80 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables-keeps-legacy-codex-identity-fields-blank.test.ts +455 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +18 -525
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.tsx +32 -508
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-export-sources.ts +74 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-actions.ts +19 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-selectors.ts +49 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-summary.ts +3 -2
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-table-formatters.ts +115 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.ts +1 -42
- package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.ts +2 -1
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.test-fixtures.ts +2 -0
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.ts +3 -2
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +8 -2
- package/templates/.agents/dashboard/modules/cost-monitor/src/server/index.ts +1 -0
- package/templates/.agents/dashboard/modules/operations/package.json +1 -1
- package/templates/.agents/dashboard/modules/operations/src/contracts.ts +4 -0
- package/templates/.agents/dashboard/modules/operations/src/react/EntityTableBadges.tsx +34 -0
- package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.tsx +8 -38
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview-keeps-structure-classes-mutually-exclusive.test.ts +244 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.helpers.tsx +66 -3
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.test.ts +98 -276
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.tsx +105 -276
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverviewCharts.tsx +171 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverviewPanels.tsx +64 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +9 -17
- package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageOverview.tsx +3 -0
- package/templates/.agents/dashboard/modules/operations/src/react/OverviewCostKpi.tsx +46 -0
- package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.test.tsx +2 -1
- package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.test.ts +28 -1
- package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.tsx +11 -4
- package/templates/.agents/dashboard/modules/operations/src/react/index.ts +1 -0
- package/templates/.agents/dashboard/modules/operations/src/react/manual-work-priority.test.ts +2 -1
- package/templates/.agents/dashboard/modules/operations/src/react/operations-coverage-toast.test.ts +8 -4
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +34 -22
- package/templates/.agents/dashboard/modules/operations/src/react/operations-overview.status-cards.test.ts +3 -1
- package/templates/.agents/dashboard/modules/operations/src/react/operations-page-contract.ts +21 -2
- package/templates/.agents/dashboard/modules/operations/src/react/overview-cost-card.test.tsx +89 -0
- package/templates/.agents/dashboard/modules/operations/src/react/overview-metric-format.ts +32 -0
- package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.test.ts +3 -3
- package/templates/.agents/dashboard/modules/operations/src/work-board-model.ts +2 -1
- 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/data-export/package.json +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +1625 -1613
- package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +1592 -1582
- package/templates/.agents/dashboard/packages/local-runtime/package.json +3 -2
- package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +22 -28
- package/templates/.agents/dashboard/packages/local-runtime/server.mjs +1625 -1614
- package/templates/.agents/dashboard/packages/local-runtime/src/active-codex-telemetry.ts +25 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.test.ts +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/project-installation-summary.test.ts +142 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/project-installation-summary.ts +190 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +118 -8
- package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +92 -36
- package/templates/.agents/dashboard/packages/local-runtime/src/projection-refresh-diagnostics.ts +35 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-browser-lease.test.ts +91 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-browser-lease.ts +24 -4
- package/templates/.agents/dashboard/packages/local-runtime/src/server-costs-routes.ts +168 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-dual-reads-manifest-summaries-without-losing.test.ts +344 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-hono-security.test.ts +17 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-http-contracts.ts +31 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-routes.ts +364 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-read-projections.ts +461 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-reconciliation-refresh.test.ts +78 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-route-context.ts +13 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.test.ts +94 -2
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.ts +62 -12
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.test.ts +44 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.ts +22 -3
- package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot.test.ts +22 -21
- package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-task-trace.test.ts +97 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-task-trace.ts +10 -13
- package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-view-allowlist.test.ts +25 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-trace-routes.ts +56 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-traceability-index.test.ts +84 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.test.ts +2 -30
- package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.ts +6 -23
- package/templates/.agents/dashboard/packages/local-runtime/src/server.test-fixtures.ts +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +2 -330
- package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +87 -1060
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-dimension-facts.test.ts +12 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-file-index.test.ts +69 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-first-fold-cache.ts +3 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-force-canonical.test.ts +3 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-incremental-refresh.test.ts +2 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-first-fold.ts +78 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-projections.ts +570 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-runs.ts +600 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.test.ts +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-period-averages.ts +46 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-provider-alias-parity.test.ts +50 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-agent-dimension.ts +269 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-context.ts +32 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-entity-group.ts +244 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-filtered-dimension.ts +303 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-financial.ts +547 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-model-dimension.ts +360 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-provider-dimension.ts +169 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-summary.ts +493 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-temporal-dimension.ts +134 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-timing.ts +299 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-view-page.ts +692 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-counts-every-root-execution-day-returns.test.ts +763 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-does-not-convert-delayed-historical-finalizer.test.ts +706 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-filesystem.ts +762 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-first-fold-types.ts +1 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-keeps-orphan-telemetry-out-kanban-without.test.ts +710 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-marks-token-cost-telemetry-unavailable-when.test.ts +618 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-rebuild.ts +764 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-rebuilds-disposable-snapshot-serves-zaip-records.test.ts +276 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-schema.ts +193 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-source-fingerprint.test.ts +54 -1
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-source-fingerprint.ts +7 -3
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-types.ts +123 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +5 -2806
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.ts +17 -6930
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-risk-population.test.ts +98 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-schema-base-views.ts +390 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-schema-dashboard-views.ts +413 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-snapshot-seed.test.ts +2 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/verify-project-settings.mjs +57 -0
- package/templates/.agents/dashboard/packages/local-runtime/src/work-priority-contract.test.ts +4 -3
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-build.mjs +195 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-lifecycle.test.mjs +2 -7
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-logging.mjs +35 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-navigation.mjs +114 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-paths.mjs +90 -0
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +89 -418
- package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +22 -12
- package/templates/.agents/dashboard/packages/ui/package.json +1 -1
- package/templates/.agents/dashboard/scripts/qualify-observability.mjs +130 -0
- package/templates/.agents/dashboard/scripts/verify-autonomy-settings.mjs +175 -0
- package/templates/.agents/dashboard/scripts/verify-observability.mjs +254 -0
- package/templates/.agents/dashboard/scripts/verify-project-setup.mjs +64 -0
- package/templates/.agents/dashboard/tests/e2e/lease-global-setup.ts +37 -0
- package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
- package/templates/.agents/dashboard/tests/e2e/playwright.config.ts +9 -4
- package/templates/.agents/dashboard/tests/e2e/specs/cost-monitor-period-transition.spec.ts +22 -1
- package/templates/.agents/dashboard/tests/e2e/specs/dashboard-performance-matrix.spec.ts +17 -8
- package/templates/.agents/dashboard/tests/e2e/specs/dashboard.spec.ts +47 -6
- package/templates/.agents/dashboard/tests/e2e/specs/lease-lifetime.spec.ts +14 -0
- package/templates/.agents/dashboard/tests/observability-fixture.mjs +200 -0
- package/templates/.agents/design/.zaip-managed.json +86 -42
- package/templates/.agents/design/DESIGN.md +2 -186
- package/templates/.agents/design/README.md +12 -2
- package/templates/.agents/design/apps/catalog/dist/assets/index-BJV597iq.js +72 -0
- package/templates/.agents/design/apps/catalog/dist/assets/index-BOjCcUaU.js +72 -0
- package/templates/.agents/design/apps/catalog/dist/assets/index-B_WhrCZe.js +72 -0
- package/templates/.agents/design/apps/catalog/dist/assets/index-CqtYXZfV.js +72 -0
- package/templates/.agents/design/apps/catalog/dist/assets/index-D_lfqoyx.js +72 -0
- package/templates/.agents/design/apps/catalog/dist/assets/index-i_PO2k9R.js +9 -0
- package/templates/.agents/design/apps/catalog/dist/index.html +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/CatalogShell-Cstn1UwA.js +1 -0
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{Color-6AOWCN3U-B-kAgAjB.js → Color-6AOWCN3U-Cm-yJJz_.js} +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/Components.stories-D1WopB2L.js +137 -0
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/DesignSystem.stories-DQ9PJ3N3.js +1 -0
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{DocsRenderer-JROSPFPF-BVN7xHtv.js → DocsRenderer-JROSPFPF-Belk4jRr.js} +4 -4
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{WithTooltip-7X4HQR7L-CDHtKYkz.js → WithTooltip-7X4HQR7L-DoPvjkS1.js} +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{chunk-DRQKCCAG-D6AsDkMK.js → chunk-DRQKCCAG-B1itKXEN.js} +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{chunk-W22LQPXL-B4m5uloN.js → chunk-W22LQPXL-C-Eb5SPY.js} +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{components-CN8YyTUg.js → components-DnyKLwhj.js} +5 -5
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/formatter-L2YTDE3Q-D0OSgxWz.js +1 -0
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{iframe-9yZfIsdT.js → iframe-DcXBsFPz.js} +3 -3
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{react-18-BoCSnq6H.js → react-18-CRM89QRf.js} +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/react-C3tkVMIp.js +1 -0
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{syntaxhighlighter-YFXUGROL-Bnn_nMwJ.js → syntaxhighlighter-YFXUGROL-B03jQGTF.js} +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/{theming-DS_ue2sb.js → theming-4ZyufAga.js} +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/iframe.html +1 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/index.json +1 -1
- package/templates/.agents/design/apps/catalog/package.json +2 -2
- package/templates/.agents/design/apps/catalog/src/components/AutonomySpecimen.tsx +15 -0
- package/templates/.agents/design/apps/catalog/src/components/CostPopulationSpecimen.test.tsx +19 -0
- package/templates/.agents/design/apps/catalog/src/components/CostPopulationSpecimen.tsx +45 -0
- package/templates/.agents/design/apps/catalog/src/components/EstimatedCostSpecimen.tsx +48 -0
- package/templates/.agents/design/apps/catalog/src/components/ProjectStatusSpecimen.tsx +169 -0
- package/templates/.agents/design/apps/catalog/src/pages/ComponentsPage.tsx +55 -0
- package/templates/.agents/design/apps/catalog/src/stories/Components.stories.tsx +60 -0
- package/templates/.agents/design/packages/local-runtime/package.json +1 -1
- package/templates/.agents/growth/strategy.md +3 -0
- package/templates/.agents/marketing/strategy.md +3 -0
- package/templates/.agents/requirements/autonomous-assurance.md +2 -1
- package/templates/.agents/requirements/cloud-hostinger-autonomy.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 +1 -1
- package/templates/.agents/requirements/data-export.md +1 -1
- package/templates/.agents/requirements/design-system.md +13 -4
- package/templates/.agents/requirements/execution-engine.md +1 -1
- package/templates/.agents/requirements/kanban-dashboard.md +1 -1
- package/templates/.agents/requirements/model-orchestration.md +1 -1
- package/templates/.agents/requirements/public-distribution.md +4 -2
- 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 +6 -6
- package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
- package/templates/.agents/rules/architecture.md +2 -0
- package/templates/.agents/rules/astra-diagnostic.md +3 -1
- package/templates/.agents/rules/autonomy-decision.md +12 -2
- package/templates/.agents/rules/cloud-hostinger-autonomy.md +2 -0
- package/templates/.agents/rules/context.md +2 -1
- package/templates/.agents/rules/core.md +15 -4
- package/templates/.agents/rules/design-system-central-contract.md +17 -0
- package/templates/.agents/rules/evolution.md +3 -1
- package/templates/.agents/rules/frontend-lite.md +3 -1
- package/templates/.agents/rules/local-sqlite-storage.md +2 -2
- package/templates/.agents/rules/meta-mcp.md +3 -1
- package/templates/.agents/rules/model-orchestration.md +1 -1
- package/templates/.agents/rules/run-lifecycle-closure.md +11 -7
- package/templates/.agents/rules/security.md +3 -1
- package/templates/.agents/rules/specialist-routing.md +3 -1
- package/templates/.agents/rules/text-writing-utf8.md +1 -1
- package/templates/.agents/rules/workflow.md +7 -5
- package/templates/.agents/runtime/VERSION +1 -1
- package/templates/.agents/runtime/bin/zaip.mjs +821 -516
- 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 +3 -0
- package/templates/.agents/skills/zaip-aios/SKILL.md +5 -3
- package/templates/.agents/skills/zaip-skill-adapt-stack/SKILL.md +1 -0
- package/templates/.agents/skills/zaip-skill-api-contracts/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-api-contracts/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-application-observability/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-application-observability/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-application-observability/references/signal-design.md +3 -0
- package/templates/.agents/skills/zaip-skill-application-readiness/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-application-readiness/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-application-readiness/references/evidence-matrix.md +3 -0
- package/templates/.agents/skills/zaip-skill-architecture-design/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-architecture-design/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-async-jobs/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-async-jobs/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-auth-tenancy/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-auth-tenancy/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-auth-tenancy/references/data-access-paths.md +9 -0
- package/templates/.agents/skills/zaip-skill-auth-tenancy/references/worker-scenario.md +5 -0
- package/templates/.agents/skills/zaip-skill-auth-tenancy/scripts/worker-contract.test.mjs +27 -0
- package/templates/.agents/skills/zaip-skill-author-skills/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-author-skills/references/engineering-skill-index.md +9 -0
- package/templates/.agents/skills/zaip-skill-author-skills/scripts/audit-skill-catalog.mjs +5 -3
- package/templates/.agents/skills/zaip-skill-author-skills/scripts/author-skill-scripts.test.mjs +27 -0
- package/templates/.agents/skills/zaip-skill-backend/SKILL.md +4 -0
- package/templates/.agents/skills/zaip-skill-backend/references/deployment-environments.md +75 -0
- package/templates/.agents/skills/zaip-skill-backend/references/supabase-migration-contract.md +23 -0
- package/templates/.agents/skills/zaip-skill-brand-governance/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-cache-strategy/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-cache-strategy/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-change/SKILL.md +1 -1
- package/templates/.agents/skills/zaip-skill-cloud-engineering/SKILL.md +7 -0
- package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/SKILL.md +37 -0
- package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/agents/openai.yaml +6 -0
- package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/references/workers-static-assets.md +26 -0
- package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/references/workflow-templates.md +71 -0
- package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/scripts/cloudflare-github-deploy-contract.test.mjs +77 -0
- package/templates/.agents/skills/zaip-skill-config/SKILL.md +21 -11
- package/templates/.agents/skills/zaip-skill-config/agents/openai.yaml +2 -2
- package/templates/.agents/skills/zaip-skill-container-runtime/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-container-runtime/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-context/SKILL.md +6 -1
- package/templates/.agents/skills/zaip-skill-context/references/prd-spec-task-handoff.md +10 -0
- package/templates/.agents/skills/zaip-skill-context/references/rule-selection.md +20 -0
- package/templates/.agents/skills/zaip-skill-cqrs/SKILL.md +1 -0
- package/templates/.agents/skills/zaip-skill-cybersecurity/SKILL.md +18 -0
- package/templates/.agents/skills/zaip-skill-cybersecurity/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-cybersecurity/references/audit-contract.md +94 -0
- package/templates/.agents/skills/zaip-skill-cybersecurity/scripts/score-audit.mjs +185 -0
- package/templates/.agents/skills/zaip-skill-cybersecurity/scripts/score-audit.test.mjs +101 -0
- package/templates/.agents/skills/zaip-skill-data-modeling/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-data-modeling/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-database-migrations/SKILL.md +20 -0
- package/templates/.agents/skills/zaip-skill-database-migrations/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-database-migrations/references/manual-mode.md +15 -0
- package/templates/.agents/skills/zaip-skill-database-migrations/references/promotion-example.md +5 -0
- package/templates/.agents/skills/zaip-skill-database-migrations/scripts/export-manual-sql.mjs +145 -0
- package/templates/.agents/skills/zaip-skill-database-migrations/scripts/export-manual-sql.test.mjs +178 -0
- package/templates/.agents/skills/zaip-skill-dependency-upgrade/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-dependency-upgrade/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-deployment-pipeline/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-deployment-pipeline/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-deployment-pipeline/references/runtime-shapes.md +3 -0
- package/templates/.agents/skills/zaip-skill-design-system/SKILL.md +20 -9
- package/templates/.agents/skills/zaip-skill-dev-environment/SKILL.md +16 -0
- package/templates/.agents/skills/zaip-skill-dev-environment/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-dev-environment/references/inventory-contract.md +7 -0
- package/templates/.agents/skills/zaip-skill-dev-environment/scripts/inventory.mjs +77 -0
- package/templates/.agents/skills/zaip-skill-disaster-recovery/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-disaster-recovery/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-disaster-recovery/references/recovery-scope.md +3 -0
- package/templates/.agents/skills/zaip-skill-execution/SKILL.md +31 -8
- package/templates/.agents/skills/zaip-skill-execution/references/correction-cycle.md +7 -0
- package/templates/.agents/skills/zaip-skill-execution/references/runtime-governance.md +18 -8
- package/templates/.agents/skills/zaip-skill-external-integrations/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-external-integrations/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-frontend/SKILL.md +4 -0
- package/templates/.agents/skills/zaip-skill-frontend-componentization/SKILL.md +44 -0
- package/templates/.agents/skills/zaip-skill-frontend-componentization/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-frontend-data-flows/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-frontend-data-flows/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-general-operations/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/SKILL.md +36 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/references/cloudflare-pages.md +33 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/references/github.md +63 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/references/hostinger-vps.md +55 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/references/npm.md +30 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/check-skill.mjs +55 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-cloudflare.mjs +61 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-cloudflare.test.mjs +128 -0
- package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-ssh.integration.test.mjs +106 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +42 -76
- package/templates/.agents/skills/zaip-skill-github-deploy/references/deployment-workflow.md +135 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/references/github-release-workflow-template.md +31 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/references/release-gate-matrix.md +24 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/references/release-identity.md +44 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/references/release-notes.md +134 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/consumer-release-preparation.mjs +389 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/consumer-release-preparation.test.mjs +134 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs +25 -2
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness-api.test.mjs +134 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness.mjs +98 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness.test.mjs +25 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/install-github-readiness-workflow.mjs +159 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/install-github-readiness-workflow.test.mjs +160 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs +149 -12
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.test.mjs +64 -5
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/release-notes-coverage.test.mjs +126 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/resolve-release-identity.mjs +78 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/resolve-release-identity.test.mjs +51 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/validate-release-notes.mjs +184 -0
- package/templates/.agents/skills/zaip-skill-github-deploy/scripts/validate-release-notes.test.mjs +109 -0
- package/templates/.agents/skills/zaip-skill-growth-strategy-revops/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/SKILL.md +18 -10
- package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/agents/openai.yaml +3 -4
- package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/aws-cli-terraform.md +62 -0
- package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/guia-iniciante-hostinger-vps.md +183 -0
- package/templates/.agents/skills/zaip-skill-marketing/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-module-scaffold/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-module-scaffold/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-module-scaffold/references/scaffold-contract.md +9 -0
- package/templates/.agents/skills/zaip-skill-module-scaffold/scripts/helpers.test.mjs +121 -0
- package/templates/.agents/skills/zaip-skill-module-scaffold/scripts/scaffold.mjs +169 -0
- package/templates/.agents/skills/zaip-skill-move-prd/SKILL.md +3 -1
- package/templates/.agents/skills/zaip-skill-move-spec/SKILL.md +1 -1
- package/templates/.agents/skills/zaip-skill-performance-engineering/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-performance-engineering/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-prd/SKILL.md +3 -1
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-local-telemetry.mjs +1 -0
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.mjs +26 -9
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.test.mjs +39 -13
- package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.mjs +1 -0
- package/templates/.agents/skills/zaip-skill-refactor-landing-page/SKILL.md +66 -0
- package/templates/.agents/skills/zaip-skill-refactor-landing-page/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-refactor-landing-page/references/behavioral-dry-run.md +23 -0
- package/templates/.agents/skills/zaip-skill-release-qualification/SKILL.md +38 -1
- package/templates/.agents/skills/zaip-skill-release-qualification/references/local-preparation.md +122 -0
- package/templates/.agents/skills/zaip-skill-review/SKILL.md +1 -0
- package/templates/.agents/skills/zaip-skill-rules/SKILL.md +3 -3
- package/templates/.agents/skills/zaip-skill-sales-methodology/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-setup/SKILL.md +21 -21
- package/templates/.agents/skills/zaip-skill-setup/agents/openai.yaml +2 -2
- package/templates/.agents/skills/zaip-skill-spec/SKILL.md +3 -2
- package/templates/.agents/skills/zaip-skill-storage-uploads/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-storage-uploads/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-systematic-debugging/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-systematic-debugging/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-task/SKILL.md +16 -7
- package/templates/.agents/skills/zaip-skill-task/references/commit-policy.md +25 -0
- package/templates/.agents/skills/zaip-skill-test-data/SKILL.md +14 -0
- package/templates/.agents/skills/zaip-skill-test-data/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-test-data/scripts/generate.mjs +72 -0
- package/templates/.agents/skills/zaip-skill-testing-strategy/SKILL.md +15 -0
- package/templates/.agents/skills/zaip-skill-testing-strategy/agents/openai.yaml +4 -0
- package/templates/.agents/skills/zaip-skill-testing-strategy/references/example-map.md +3 -0
- package/templates/.agents/skills/zaip-skill-tool-setup/SKILL.md +2 -0
- package/templates/.agents/skills/zaip-skill-website-readiness/SKILL.md +8 -0
- package/templates/.agents/zaip-aios/INDEX.md +9 -1
- package/templates/.agents/zaip-aios/README.md +23 -2
- package/templates/.agents/zaip-aios/VERSION +1 -1
- package/templates/.agents/zaip-aios/guides/01-primeiros-passos.md +5 -1
- package/templates/.agents/zaip-aios/guides/03-tasks.md +15 -2
- package/templates/.agents/zaip-aios/guides/04-specs.md +13 -0
- package/templates/.agents/zaip-aios/guides/05-prds.md +13 -0
- package/templates/.agents/zaip-aios/guides/06-execucao.md +19 -4
- package/templates/.agents/zaip-aios/guides/07-revisao-e-validacao.md +14 -0
- package/templates/.agents/zaip-aios/guides/08-contexto-e-tokens.md +4 -3
- package/templates/.agents/zaip-aios/guides/09-agentes-e-squads.md +17 -9
- package/templates/.agents/zaip-aios/guides/10-seguranca.md +11 -1
- package/templates/.agents/zaip-aios/guides/11-observabilidade-e-custos.md +69 -0
- package/templates/.agents/zaip-aios/guides/12-instalacao-e-upgrade.md +9 -4
- package/templates/.agents/zaip-aios/guides/13-boas-praticas.md +7 -1
- package/templates/.agents/zaip-aios/guides/14-troubleshooting.md +18 -0
- package/templates/.agents/zaip-aios/guides/16-lifecycle-e-reconciliacao.md +54 -3
- package/templates/.agents/zaip-aios/guides/18-catalogo-de-agentes.md +10 -2
- package/templates/.agents/zaip-aios/guides/19-assurance-e-autonomia.md +186 -5
- package/templates/.agents/zaip-aios/guides/20-instalacao-detalhada.md +26 -18
- package/templates/.agents/zaip-aios/guides/21-telemetria-monitor-custos.md +18 -2
- package/templates/.agents/zaip-aios/guides/22-fluxos-e-roteamento.md +14 -2
- package/templates/.agents/zaip-aios/guides/23-orquestracao-de-modelos.md +190 -489
- package/templates/.agents/zaip-aios/guides/26-qualidade-e-release.md +61 -13
- package/templates/.agents/zaip-aios/guides/27-telemetria-git-native.md +18 -0
- package/templates/.agents/zaip-aios/guides/28-lifecycle-completo.md +18 -1
- package/templates/scripts/validate-cloud-hostinger-contract.mjs +34 -0
- package/templates/template-manifest.json +1229 -329
- package/templates/.agents/branding/.gitkeep +0 -0
- package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-snUCQYTC.js +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-BPtVUGgs.js +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-3Awyaovx.js +0 -3
- package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-GgzpZ_PY.css +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BCvZFMEf.js +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-DbaLbU2q.js +0 -68
- package/templates/.agents/dashboard/apps/frontend/dist/assets/dashboard-localization-CLJ0lT9v.js +0 -231
- package/templates/.agents/dashboard/apps/frontend/dist/assets/index-_MEktQNM.js +0 -2
- package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-D9-fqq9M.js +0 -1
- package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-BDe4_Ubl.js +0 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/CatalogShell-BWY-80s4.js +0 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/Components.stories-Be2mDUQj.js +0 -27
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/DesignSystem.stories-DRx9blDs.js +0 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/formatter-L2YTDE3Q-EwuTh8Zk.js +0 -1
- package/templates/.agents/design/apps/catalog/dist/storybook/assets/react-DyL61NPT.js +0 -1
- package/templates/.agents/growth/.gitkeep +0 -0
- package/templates/.agents/marketing/.gitkeep +0 -0
- package/templates/.agents/sales/.gitkeep +0 -0
|
@@ -1,29 +1,169 @@
|
|
|
1
|
-
export const CODEX_CONVERSATION_LIFECYCLE_HOOK = String.raw `import {
|
|
2
|
-
import {
|
|
1
|
+
export const CODEX_CONVERSATION_LIFECYCLE_HOOK = String.raw `import { writeSync } from "node:fs";
|
|
2
|
+
import { lstat, open, readFile, realpath, mkdir, rename, writeFile, appendFile, unlink } from "node:fs/promises";
|
|
3
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
3
4
|
import { spawn } from "node:child_process";
|
|
4
5
|
import { dirname, isAbsolute, relative, resolve } from "node:path";
|
|
5
6
|
import { fileURLToPath } from "node:url";
|
|
6
|
-
const root=resolve(dirname(fileURLToPath(import.meta.url)),"..","..");
|
|
7
|
-
const local=resolve(root,".local
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
function
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
7
|
+
const root = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
8
|
+
const local = resolve(root, ".local/hooks");
|
|
9
|
+
const deadline = Date.now() + 8000;
|
|
10
|
+
const readChunkBytes = 1024 * 1024, maxLineBytes = 8 * 1024 * 1024, maxReadBytes = 16 * 1024 * 1024;
|
|
11
|
+
const hash = value => createHash("sha256").update(value).digest("hex");
|
|
12
|
+
const parse = value => { try { return JSON.parse(value); } catch { return null; } };
|
|
13
|
+
const text = value => typeof value === "string" && value.length > 0 && value.length <= 4096 ? value : null;
|
|
14
|
+
const inside = path => { const p = relative(root, resolve(path)); return p === "" || (!p.startsWith("..") && !isAbsolute(p)); };
|
|
15
|
+
let raw = ""; for await (const chunk of process.stdin) raw += chunk;
|
|
16
|
+
const event = parse(raw), session = text(event?.session_id), turn = text(event?.turn_id);
|
|
17
|
+
let receipt, receiptPath, lease;
|
|
18
|
+
function reply(pending = false) {
|
|
19
|
+
const result = { hookSpecificOutput: { hookEventName: "Stop" } };
|
|
20
|
+
// One continuation at most. Persistent failures remain an explicit durable pending event.
|
|
21
|
+
if (pending && event?.stop_hook_active !== true) Object.assign(result, { decision: "block", reason: "ZAIP closure or telemetry is pending. Retry this exact turn using its durable Stop receipt; do not report Task completion before canonical closure." });
|
|
22
|
+
writeSync(1, JSON.stringify(result) + "\n");
|
|
23
|
+
}
|
|
24
|
+
async function save(path, value) {
|
|
25
|
+
await mkdir(dirname(path), { recursive: true });
|
|
26
|
+
const temporary = path + ".tmp-" + randomUUID();
|
|
27
|
+
await writeFile(temporary, JSON.stringify(value) + "\n", { flag: "wx", mode: 0o600 });
|
|
28
|
+
for (let retry = 0; ; retry++) {
|
|
29
|
+
try { await rename(temporary, path); break; }
|
|
30
|
+
catch (error) { if (!["EPERM", "EACCES", "EBUSY"].includes(error.code) || retry >= 5) throw error; await new Promise(done => setTimeout(done, 20 * (retry + 1))); }
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async function note(code) {
|
|
34
|
+
await mkdir(local, { recursive: true });
|
|
35
|
+
await appendFile(resolve(local, "codex-conversation.ndjson"), JSON.stringify({ code, session, turn, at: new Date().toISOString() }) + "\n");
|
|
36
|
+
}
|
|
37
|
+
async function acquire(path) {
|
|
38
|
+
try { const h = await open(path, "wx"); await h.writeFile(JSON.stringify({ pid: process.pid })); return h; }
|
|
39
|
+
catch (error) {
|
|
40
|
+
if (error.code !== "EEXIST") throw error;
|
|
41
|
+
const old = parse(await readFile(path, "utf8").catch(() => ""));
|
|
42
|
+
if (!Number.isSafeInteger(old?.pid) || old.pid <= 0) return null;
|
|
43
|
+
try { process.kill(old.pid, 0); return null; } catch (failure) { if (failure.code !== "ESRCH") return null; }
|
|
44
|
+
await unlink(path).catch(() => {});
|
|
45
|
+
try { const h = await open(path, "wx"); await h.writeFile(JSON.stringify({ pid: process.pid })); return h; } catch { return null; }
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function signature(stat) { return { dev: stat.dev, ino: stat.ino, birthtime_ms: stat.birthtimeMs, size: stat.size, mtime_ms: stat.mtimeMs, ctime_ms: stat.ctimeMs }; }
|
|
49
|
+
async function bytes(handle, offset, length) { const b = Buffer.alloc(length); const read = await handle.read(b, 0, length, offset); return b.subarray(0, read.bytesRead); }
|
|
50
|
+
function proof(offset, line) { return { offset, length: line.length, sha256: hash(line) }; }
|
|
51
|
+
function sessionOf(row) { return row?.type === "session_meta" ? row.payload?.id ?? row.payload?.session_id : row?.payload?.type === "session_meta" ? row.payload.id ?? row.payload.session_id : null; }
|
|
52
|
+
async function terminal(path) {
|
|
53
|
+
if (!path || !isAbsolute(path)) throw new Error("transcript_missing");
|
|
54
|
+
const link = await lstat(path);
|
|
55
|
+
if (!link.isFile() || link.isSymbolicLink() || (await realpath(path)).toLowerCase() !== resolve(path).toLowerCase()) throw new Error("transcript_unsafe");
|
|
56
|
+
const h = await open(path, "r");
|
|
57
|
+
try {
|
|
58
|
+
const stat = await h.stat(), sig = signature(stat), prior = receipt.cursor;
|
|
59
|
+
let same = prior?.path === path && prior.dev === sig.dev && prior.ino === sig.ino && prior.birthtime_ms === sig.birthtime_ms && prior.size <= sig.size && prior.offset <= sig.size;
|
|
60
|
+
if (same && prior.size === sig.size && (prior.mtime_ms !== sig.mtime_ms || prior.ctime_ms !== sig.ctime_ms)) same = false;
|
|
61
|
+
if (same && prior.anchor) same = hash(await bytes(h, prior.anchor.offset, prior.anchor.length)) === prior.anchor.sha256;
|
|
62
|
+
if (same && prior.session_proof) same = hash(await bytes(h, prior.session_proof.offset, prior.session_proof.length)) === prior.session_proof.sha256;
|
|
63
|
+
let offset = same ? prior.offset : 0, trusted = same && prior.trusted === true;
|
|
64
|
+
let sessionProof = same ? prior.session_proof : null, terminalProof = same ? prior.terminal_proof : null, status = same ? prior.terminal_status : null;
|
|
65
|
+
let readBytes = 0, scanOffset = offset, lineOffset = offset, lineBytes = 0, lineParts = [];
|
|
66
|
+
const consume = line => {
|
|
67
|
+
const row = parse(line.toString("utf8"));
|
|
68
|
+
if (!row && line.toString("utf8").trim()) throw new Error("transcript_invalid_jsonl");
|
|
69
|
+
const foundSession = sessionOf(row);
|
|
70
|
+
if (foundSession !== null) {
|
|
71
|
+
if (lineOffset !== 0 || foundSession !== session) throw new Error("transcript_session_mismatch");
|
|
72
|
+
trusted = true; sessionProof = proof(lineOffset, line);
|
|
73
|
+
}
|
|
74
|
+
const p = row?.payload;
|
|
75
|
+
if (trusted && p?.type === "task_complete" && p.turn_id === turn) {
|
|
76
|
+
status = p.status === "cancelled" ? "cancelled" : p.status === "failed" || p.error != null ? "failed" : "completed";
|
|
77
|
+
terminalProof = proof(lineOffset, line);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
while (scanOffset < sig.size && Date.now() < deadline - 1500 && readBytes < maxReadBytes) {
|
|
81
|
+
const buffer = await bytes(h, scanOffset, Math.min(readChunkBytes, sig.size - scanOffset, maxReadBytes - readBytes)); readBytes += buffer.length;
|
|
82
|
+
let partStart = 0;
|
|
83
|
+
for (let i = 0; i < buffer.length; i++) {
|
|
84
|
+
if (buffer[i] !== 10) continue;
|
|
85
|
+
const part = buffer.subarray(partStart, i + 1); lineBytes += part.length;
|
|
86
|
+
if (lineBytes > maxLineBytes) throw new Error("transcript_line_too_large");
|
|
87
|
+
lineParts.push(part);
|
|
88
|
+
const line = lineParts.length === 1 ? lineParts[0] : Buffer.concat(lineParts, lineBytes);
|
|
89
|
+
consume(line);
|
|
90
|
+
lineOffset = scanOffset + i + 1; offset = lineOffset; lineBytes = 0; lineParts = []; partStart = i + 1;
|
|
91
|
+
}
|
|
92
|
+
if (partStart < buffer.length) {
|
|
93
|
+
const part = buffer.subarray(partStart); lineBytes += part.length;
|
|
94
|
+
if (lineBytes > maxLineBytes) throw new Error("transcript_line_too_large");
|
|
95
|
+
lineParts.push(part);
|
|
96
|
+
}
|
|
97
|
+
scanOffset += buffer.length; // A partial tail advances only the scan, never the durable cursor.
|
|
98
|
+
}
|
|
99
|
+
const after = signature(await h.stat());
|
|
100
|
+
if (JSON.stringify(sig) !== JSON.stringify(after)) throw new Error("transcript_changed_during_read");
|
|
101
|
+
const anchorOffset = Math.max(0, offset - 256), anchor = proof(anchorOffset, await bytes(h, anchorOffset, offset - anchorOffset));
|
|
102
|
+
receipt.cursor = { path, ...sig, offset, trusted, session_proof: sessionProof, terminal_proof: terminalProof, terminal_status: status, anchor };
|
|
103
|
+
receipt.bytes_read = (receipt.bytes_read ?? 0) + readBytes;
|
|
104
|
+
receipt.observed_at = new Date().toISOString();
|
|
105
|
+
await save(receiptPath, receipt);
|
|
106
|
+
return trusted && terminalProof ? status : null;
|
|
107
|
+
} finally { await h.close(); }
|
|
108
|
+
}
|
|
109
|
+
function call(cli, args, path) {
|
|
110
|
+
return new Promise(done => {
|
|
111
|
+
const remaining = deadline - Date.now() - 150;
|
|
112
|
+
if (remaining <= 0) return done({ code: 1, out: "", timeout: true });
|
|
113
|
+
const child = spawn(process.execPath, [cli, ...args, "--workspace", root, "--json"], { cwd: root, windowsHide: true, env: { ...process.env, CODEX_THREAD_ID: session, CODEX_TURN_ID: turn, CODEX_TRANSCRIPT_PATH: path ?? "" }, stdio: ["ignore", "pipe", "ignore"] });
|
|
114
|
+
let out = "", settled = false;
|
|
115
|
+
const finish = (code, timeout = false) => { if (settled) return; settled = true; clearTimeout(timer); done({ code, out, timeout }); };
|
|
116
|
+
const timer = setTimeout(() => { child.kill(); finish(1, true); }, remaining);
|
|
117
|
+
child.stdout.on("data", data => { out = (out + String(data)).slice(0, 262144); });
|
|
118
|
+
child.once("error", () => finish(1)); child.once("close", code => finish(code ?? 1));
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
const config = await readFile(resolve(root, ".agents/config/project.yaml"), "utf8");
|
|
123
|
+
if (event?.hook_event_name !== "Stop" || !session || !turn || !text(event.cwd) || !inside(event.cwd) || !/zaip:\s*\r?\n\s*enabled:\s*true\s*(?:\r?\n|$)/.test(config)) { reply(); process.exit(0); }
|
|
124
|
+
await mkdir(local, { recursive: true });
|
|
125
|
+
receiptPath = resolve(local, "stop-" + hash(JSON.stringify([session, turn])) + ".json");
|
|
126
|
+
lease = await acquire(receiptPath + ".lock");
|
|
127
|
+
if (!lease) { await note("stop_worker_busy"); reply(true); process.exit(0); }
|
|
128
|
+
const old = parse(await readFile(receiptPath, "utf8").catch(() => ""));
|
|
129
|
+
receipt = old?.schema_version === 1 && old.session_id === session && old.turn_id === turn ? old : { schema_version: 1, session_id: session, turn_id: turn, state: "pending", attempts: 0 };
|
|
130
|
+
receipt.event = { hook_event_name: "Stop", cwd: root, session_id: session, turn_id: turn, transcript_path: text(event.transcript_path), stop_hook_active: true };
|
|
131
|
+
if (receipt.state === "persisted") { reply(); } else {
|
|
132
|
+
receipt.attempts += 1; receipt.state = "pending"; await save(receiptPath, receipt);
|
|
133
|
+
let status = null;
|
|
134
|
+
for (const delay of [0, 250, 750]) { if (delay) await new Promise(r => setTimeout(r, delay)); status = await terminal(text(event.transcript_path)); if (status) break; }
|
|
135
|
+
if (!status) throw new Error("transcript_pending");
|
|
136
|
+
const cli = resolve(root, ".agents/runtime/bin/zaip.mjs");
|
|
137
|
+
const correlationKey = hash(JSON.stringify(["codex", session, turn, null, null]));
|
|
138
|
+
const correlation = parse(await readFile(resolve(root, ".local/codex-telemetry-spool/v1/correlations", correlationKey + ".json"), "utf8").catch(() => ""));
|
|
139
|
+
let intake;
|
|
140
|
+
if (correlation?.schema_version === 1 && correlation.thread_id === session && correlation.turn_id === turn && correlation.agent_path === null && typeof correlation.run_id === "string") {
|
|
141
|
+
intake = { run: { run_id: correlation.run_id }, task: correlation.task_id === null ? null : { id: correlation.task_id } };
|
|
142
|
+
} else {
|
|
143
|
+
const started = await call(cli, ["conversation", "start", "--intent", "conversation"], text(event.transcript_path));
|
|
144
|
+
if (started.code !== 0) throw new Error("start_pending");
|
|
145
|
+
intake = parse(started.out);
|
|
146
|
+
}
|
|
147
|
+
const run = intake?.run?.run_id;
|
|
148
|
+
if (typeof run !== "string" || (intake.task !== null && typeof intake.task?.id !== "string")) throw new Error("start_pending");
|
|
149
|
+
receipt.run_id = run; await save(receiptPath, receipt);
|
|
150
|
+
const result = await call(cli, ["subagent", "reconcile-stop", "--session", session, "--turn", turn], text(event.transcript_path));
|
|
151
|
+
const outcome = parse(result.out);
|
|
152
|
+
const terminalStates = ["completed", "blocked", "failed", "cancelled"];
|
|
153
|
+
const closed = intake.task === null
|
|
154
|
+
? outcome?.run?.id === run && terminalStates.includes(outcome.run.status) && typeof outcome.run.finished_at === "string"
|
|
155
|
+
: outcome?.status === "closed" && outcome.parent_run_id === run && outcome.reconciliation?.tasks?.some(task => task.id === intake.task.id && terminalStates.includes(task.status));
|
|
156
|
+
if (result.code !== 0 || !closed) throw new Error("closure_pending");
|
|
157
|
+
if (intake.task !== null) {
|
|
158
|
+
const usage = await call(cli, ["run", "usage", run, "--disable-codex-raw"], text(event.transcript_path));
|
|
159
|
+
if (usage.code !== 0 || parse(usage.out) === null) throw new Error("telemetry_pending");
|
|
160
|
+
}
|
|
161
|
+
receipt.state = "persisted"; receipt.persisted_at = new Date().toISOString(); receipt.error = null;
|
|
162
|
+
await save(receiptPath, receipt); reply();
|
|
163
|
+
}
|
|
164
|
+
} catch (error) {
|
|
165
|
+
if (receipt && receiptPath) { receipt.state = "pending"; receipt.error = String(error.message ?? error); await save(receiptPath, receipt).catch(() => {}); }
|
|
166
|
+
await note(String(error.message ?? error)).catch(() => {}); reply(true);
|
|
167
|
+
} finally { if (lease) { await lease.close(); await unlink(receiptPath + ".lock").catch(() => {}); } }
|
|
28
168
|
`;
|
|
29
169
|
//# sourceMappingURL=codex-conversation-lifecycle-hook.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-conversation-lifecycle-hook.js","sourceRoot":"","sources":["../../src/services/codex-conversation-lifecycle-hook.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iCAAiC,GAAG,MAAM,CAAC,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"codex-conversation-lifecycle-hook.js","sourceRoot":"","sources":["../../src/services/codex-conversation-lifecycle-hook.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iCAAiC,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuK1D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-pre-tool-hook-template.d.ts","sourceRoot":"","sources":["../../src/services/codex-pre-tool-hook-template.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"codex-pre-tool-hook-template.d.ts","sourceRoot":"","sources":["../../src/services/codex-pre-tool-hook-template.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,QA+xB/B,CAAC"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
export const CODEX_PRE_TOOL_HOOK = String.raw `import {
|
|
2
|
-
import {
|
|
1
|
+
export const CODEX_PRE_TOOL_HOOK = String.raw `import { execFile } from "node:child_process";
|
|
2
|
+
import { writeSync } from "node:fs";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { lstat, readFile, realpath } from "node:fs/promises";
|
|
3
5
|
import { dirname, isAbsolute, relative, resolve } from "node:path";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
7
|
+
import { promisify } from "node:util";
|
|
5
8
|
|
|
9
|
+
const execute = promisify(execFile);
|
|
6
10
|
const repositoryRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
7
11
|
const deletionCommandPattern = /\b(?:Remove-Item|rm|rmdir|rd|del|erase)\b/i;
|
|
8
12
|
const allowedExplicitNetworkHosts = new Set([
|
|
@@ -212,7 +216,7 @@ function validateInlineExecution(command) {
|
|
|
212
216
|
}
|
|
213
217
|
}
|
|
214
218
|
|
|
215
|
-
function validateGitPublication(command) {
|
|
219
|
+
async function validateGitPublication(command) {
|
|
216
220
|
const tokens = tokenizeLiteralCommand(command);
|
|
217
221
|
if (tokens === null) {
|
|
218
222
|
if (/(?:^|[;&|]\s*)git(?:\.exe)?\b/i.test(command)) {
|
|
@@ -257,17 +261,83 @@ function validateGitPublication(command) {
|
|
|
257
261
|
deny("Remote, SSH, and credential configuration changes are blocked.");
|
|
258
262
|
}
|
|
259
263
|
if (subcommand !== "push") return;
|
|
260
|
-
const
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
264
|
+
const deployment = await configuredDeploymentBranches();
|
|
265
|
+
const requested = arguments_[1]?.match(/^HEAD:refs\/heads\/(.+)$/)?.[1];
|
|
266
|
+
if (arguments_.length !== 2 || arguments_[0] !== "origin" || !requested || !deployment.applicationBranches.includes(requested)) {
|
|
267
|
+
deny(
|
|
268
|
+
"Automated application publication is restricted to configured deploy.frontend.branch or deploy.backend.branch (" + deployment.applicationBranches.join(", ") +
|
|
269
|
+
"); database migrations are beta-only and use the migration request workflow. " +
|
|
270
|
+
"deploy.production_branch " + deployment.productionBranch + " requires human promotion.",
|
|
271
|
+
);
|
|
272
|
+
}
|
|
273
|
+
const scopes = Object.entries(deployment.scopeBranches).filter(([, branch]) => branch === requested).map(([scope]) => scope);
|
|
274
|
+
if (scopes.length === 0) deny("A Git push must resolve to a configured application scope.");
|
|
275
|
+
try {
|
|
276
|
+
await execute(process.execPath, [resolve(repositoryRoot, ".agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs"), "--repository", repositoryRoot, "--scope", scopes[0], "--resolve-branch", "--branch", requested], { cwd: repositoryRoot, encoding: "utf8", windowsHide: true });
|
|
277
|
+
} catch (error) {
|
|
278
|
+
deny("Application publication content preflight failed: " + (error?.stderr?.trim() || error?.message || "unknown failure"));
|
|
268
279
|
}
|
|
269
280
|
}
|
|
270
281
|
|
|
282
|
+
async function configuredDeploymentBranches() {
|
|
283
|
+
const defaults = { applicationBranches: ["beta"], scopeBranches: { frontend: "beta", backend: "beta" }, productionBranch: "main" };
|
|
284
|
+
let source;
|
|
285
|
+
try {
|
|
286
|
+
source = await readFile(resolve(repositoryRoot, ".agents/config/project.yaml"), "utf8");
|
|
287
|
+
} catch (error) {
|
|
288
|
+
if (error?.code === "ENOENT") return defaults;
|
|
289
|
+
deny("Could not read project.yaml deploy policy.");
|
|
290
|
+
}
|
|
291
|
+
let document;
|
|
292
|
+
try {
|
|
293
|
+
const parser = await import(
|
|
294
|
+
pathToFileURL(
|
|
295
|
+
resolve(repositoryRoot, ".agents/skills/zaip-skill-github-deploy/scripts/yaml-parser.mjs"),
|
|
296
|
+
).href,
|
|
297
|
+
);
|
|
298
|
+
document = parser.parseDocument(source, { strict: true, uniqueKeys: true });
|
|
299
|
+
} catch {
|
|
300
|
+
deny("Canonical deploy YAML parser is unavailable.");
|
|
301
|
+
}
|
|
302
|
+
if (document.errors.length > 0) deny("project.yaml deploy policy is malformed.");
|
|
303
|
+
const config = document.toJS();
|
|
304
|
+
if (config === null || typeof config !== "object" || Array.isArray(config)) {
|
|
305
|
+
deny("project.yaml must contain a mapping.");
|
|
306
|
+
}
|
|
307
|
+
const deploy = config.deploy;
|
|
308
|
+
if (deploy === undefined) return defaults;
|
|
309
|
+
if (deploy === null || typeof deploy !== "object" || Array.isArray(deploy)) {
|
|
310
|
+
deny("project.yaml deploy must be a mapping.");
|
|
311
|
+
}
|
|
312
|
+
if (!Object.keys(deploy).every((key) => ["branch", "production_branch", "allow_production", "frontend", "backend", "database"].includes(key))) {
|
|
313
|
+
deny("project.yaml deploy has unsupported keys.");
|
|
314
|
+
}
|
|
315
|
+
for (const key of ["frontend", "backend", "database"]) {
|
|
316
|
+
if (deploy[key] !== undefined && (deploy[key] === null || typeof deploy[key] !== "object" || Array.isArray(deploy[key]) || !Object.keys(deploy[key]).every((nested) => nested === "branch"))) deny("project.yaml deploy scope is invalid.");
|
|
317
|
+
}
|
|
318
|
+
const productionBranch = Object.hasOwn(deploy, "production_branch")
|
|
319
|
+
? deploy.production_branch
|
|
320
|
+
: defaults.productionBranch;
|
|
321
|
+
const frontend = deploy.frontend !== undefined && Object.hasOwn(deploy.frontend, "branch") ? deploy.frontend.branch : "beta";
|
|
322
|
+
const backend = deploy.backend !== undefined && Object.hasOwn(deploy.backend, "branch") ? deploy.backend.branch : "beta";
|
|
323
|
+
const database = deploy.database !== undefined && Object.hasOwn(deploy.database, "branch") ? deploy.database.branch : "beta";
|
|
324
|
+
if (database !== "beta") deny("project.yaml deploy.database.branch must be beta.");
|
|
325
|
+
if (
|
|
326
|
+
!isSafeBranchName(frontend) ||
|
|
327
|
+
!isSafeBranchName(backend) ||
|
|
328
|
+
!isSafeBranchName(productionBranch) ||
|
|
329
|
+
(frontend !== "main" && frontend === productionBranch) ||
|
|
330
|
+
(backend !== "main" && backend === productionBranch)
|
|
331
|
+
) {
|
|
332
|
+
deny("project.yaml application deploy policy is invalid.");
|
|
333
|
+
}
|
|
334
|
+
return { applicationBranches: [...new Set([frontend, backend])], scopeBranches: { frontend, backend }, productionBranch };
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
function isSafeBranchName(branch) {
|
|
338
|
+
return typeof branch === "string" && branch.length <= 255 && /^[A-Za-z0-9][A-Za-z0-9._/-]*$/.test(branch) && !branch.includes("..") && !branch.includes("//") && !branch.includes("@{") && !branch.endsWith(".") && !branch.endsWith("/") && !branch.split("/").some((segment) => segment.startsWith(".") || segment.endsWith(".lock"));
|
|
339
|
+
}
|
|
340
|
+
|
|
271
341
|
function gitInvocation(tokens) {
|
|
272
342
|
if (tokens === null || !/^(?:git|git\.exe)$/i.test(tokens[0] ?? "")) return null;
|
|
273
343
|
let index = 1;
|
|
@@ -609,7 +679,7 @@ function validatePatch(command) {
|
|
|
609
679
|
}
|
|
610
680
|
}
|
|
611
681
|
|
|
612
|
-
const lifecycleExemptPathPattern =
|
|
682
|
+
const lifecycleExemptPathPattern = /^(?:\.agents\/records|\.local)\//;
|
|
613
683
|
const shellMutationPattern = /\b(?:Set-Content|Add-Content|Out-File|New-Item|Copy-Item|Move-Item|Remove-Item|git\s+apply|npm\s+version|pnpm\s+version)\b/i;
|
|
614
684
|
|
|
615
685
|
function patchPaths(command) {
|
|
@@ -624,69 +694,73 @@ function requiresOrchestratorRun(event, command) {
|
|
|
624
694
|
return paths.length === 0 || paths.some((path) => !lifecycleExemptPathPattern.test(path));
|
|
625
695
|
}
|
|
626
696
|
if (event.tool_name === "Edit" || event.tool_name === "Write") {
|
|
627
|
-
return !lifecycleExemptPathPattern.test(
|
|
697
|
+
return !lifecycleExemptPathPattern.test(repositoryPath(resolve(event.cwd ?? repositoryRoot, command)));
|
|
628
698
|
}
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
} catch {
|
|
639
|
-
return;
|
|
699
|
+
// Only single literal writes claim exemptions; compound commands remain gated.
|
|
700
|
+
const tokens = tokenizeLiteralCommand(command);
|
|
701
|
+
if (tokens && /^(?:Set-Content|Add-Content)$/i.test(tokens[0]) && !/[$%<>*?{}\[\]]/.test(command)) {
|
|
702
|
+
const options = new Map();
|
|
703
|
+
let valid = true;
|
|
704
|
+
for (let i = 1; i < tokens.length; i += 2) {
|
|
705
|
+
const flag = tokens[i].toLowerCase(), value = tokens[i + 1];
|
|
706
|
+
if (!["-literalpath", "-value", "-encoding"].includes(flag) || value === undefined || options.has(flag)) { valid = false; break; }
|
|
707
|
+
options.set(flag, value);
|
|
640
708
|
}
|
|
641
|
-
|
|
642
|
-
const path = resolve(
|
|
643
|
-
if (
|
|
644
|
-
else if (entry.isFile() && entry.name.endsWith(".jsonl")) paths.push(path);
|
|
709
|
+
if (valid && options.has("-literalpath") && options.has("-value")) {
|
|
710
|
+
const path = repositoryPath(resolve(event.cwd ?? repositoryRoot, options.get("-literalpath")));
|
|
711
|
+
if (lifecycleExemptPathPattern.test(path)) return false;
|
|
645
712
|
}
|
|
646
713
|
}
|
|
647
|
-
|
|
648
|
-
return paths;
|
|
714
|
+
return shellMutationPattern.test(command);
|
|
649
715
|
}
|
|
650
716
|
|
|
651
|
-
async function
|
|
652
|
-
const
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
717
|
+
async function boundedCanonicalText(path, maximumBytes) {
|
|
718
|
+
const info = await lstat(path);
|
|
719
|
+
if (!info.isFile() || info.isSymbolicLink() || info.size > maximumBytes) throw new Error("Unsafe Run lookup file");
|
|
720
|
+
const physical = await realpath(path);
|
|
721
|
+
if (!isWithinRepository(physical) || physical.toLowerCase() !== resolve(path).toLowerCase()) throw new Error("Run lookup must not follow links");
|
|
722
|
+
return readFile(path, "utf8");
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
async function hasCurrentTaskOrchestratorRun(event) {
|
|
726
|
+
const threadId = event.session_id ?? process.env.CODEX_THREAD_ID;
|
|
727
|
+
const turnId = event.turn_id ?? process.env.CODEX_TURN_ID;
|
|
728
|
+
if (typeof threadId !== "string" || typeof turnId !== "string" || !threadId || !turnId) return false;
|
|
729
|
+
if ((event.session_id && process.env.CODEX_THREAD_ID && event.session_id !== process.env.CODEX_THREAD_ID) ||
|
|
730
|
+
(event.turn_id && process.env.CODEX_TURN_ID && event.turn_id !== process.env.CODEX_TURN_ID)) return false;
|
|
731
|
+
try {
|
|
732
|
+
// Same identity contract as persistCodexTelemetryCorrelation; no history scan.
|
|
733
|
+
const digest = createHash("sha256").update(JSON.stringify(["codex", threadId, turnId, null, null])).digest("hex");
|
|
734
|
+
const correlation = JSON.parse(await boundedCanonicalText(resolve(repositoryRoot, ".local/codex-telemetry-spool/v1/correlations", digest + ".json"), 65536));
|
|
735
|
+
const id = correlation.run_id;
|
|
736
|
+
const dated = typeof id === "string" ? /^RUN-(\d{4})-(\d{2})-(\d{2})-[A-Z0-9-]+-[A-Z0-9]{4}$/.exec(id) : null;
|
|
737
|
+
if (!dated || correlation.schema_version !== 1 || correlation.thread_id !== threadId || correlation.turn_id !== turnId || correlation.agent_path !== null) return false;
|
|
738
|
+
const candidates = [
|
|
739
|
+
".agents/records/runs/" + dated[1] + "/" + dated[2] + "/" + id + ".jsonl",
|
|
740
|
+
".agents/records/runs/" + dated[1] + "/" + dated[2] + "/" + dated[3] + "/" + id + ".jsonl",
|
|
741
|
+
".agents/data/runs/" + dated[1] + "/" + dated[2] + "/" + dated[3] + "/" + id + ".jsonl",
|
|
742
|
+
".local/runs/" + dated[1] + "/" + dated[2] + "/" + id + ".jsonl",
|
|
743
|
+
];
|
|
744
|
+
let selected = null;
|
|
745
|
+
for (const candidate of candidates) {
|
|
746
|
+
try {
|
|
747
|
+
const source = await boundedCanonicalText(resolve(repositoryRoot, candidate), 8388608);
|
|
748
|
+
if (selected !== null) return false; // Ambiguous migration state is never authority.
|
|
749
|
+
selected = source;
|
|
750
|
+
} catch (error) { if (error.code !== "ENOENT") return false; }
|
|
674
751
|
}
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
started.parent_run_id === null &&
|
|
684
|
-
started.
|
|
685
|
-
!records.some(
|
|
686
|
-
|
|
687
|
-
return true;
|
|
688
|
-
}
|
|
689
|
-
return false;
|
|
752
|
+
if (selected === null || !selected.endsWith("\n")) return false;
|
|
753
|
+
const records = selected.split(/\r?\n/).filter(Boolean).map(line => JSON.parse(line));
|
|
754
|
+
const started = records[0];
|
|
755
|
+
if (records.some((record, i) => record.run_id !== id || record.sequence !== i + 1 || record.schema_version !== 2)) return false;
|
|
756
|
+
return started?.type === "run.started" && started.client_thread_id === threadId && started.client_turn_id === turnId &&
|
|
757
|
+
["codex", "codex-desktop"].includes(started.client) && started.phase === "execution" &&
|
|
758
|
+
typeof started.task_id === "string" && started.task_id.startsWith("TASK-") &&
|
|
759
|
+
typeof started.execution_id === "string" && started.execution_id.startsWith("EXEC-") &&
|
|
760
|
+
started.agent === "agent-orchestrator" && started.run_role === "orchestrator" && started.parent_run_id === null && started.entrypoint === "task" &&
|
|
761
|
+
correlation.task_id === started.task_id && correlation.execution_id === started.execution_id &&
|
|
762
|
+
!records.some(record => record.type === "run.finished");
|
|
763
|
+
} catch { return false; }
|
|
690
764
|
}
|
|
691
765
|
|
|
692
766
|
let raw = "";
|
|
@@ -706,15 +780,15 @@ if (typeof event.cwd !== "string" || !isWithinRepository(event.cwd)) {
|
|
|
706
780
|
const command = event?.tool_input?.command;
|
|
707
781
|
if (typeof command !== "string") deny("A matched tool call without a command was rejected.");
|
|
708
782
|
|
|
709
|
-
if (requiresOrchestratorRun(event, command) && !(await hasCurrentTaskOrchestratorRun())) {
|
|
710
|
-
deny("Persistent mutation requires
|
|
783
|
+
if (requiresOrchestratorRun(event, command) && !(await hasCurrentTaskOrchestratorRun(event))) {
|
|
784
|
+
deny("Persistent mutation requires the exact active Task Run and its verified thread/turn correlation. Capture or reconcile this turn before retrying; no global Task fallback is allowed.");
|
|
711
785
|
}
|
|
712
786
|
|
|
713
787
|
if (event.tool_name === "apply_patch") validatePatch(command);
|
|
714
788
|
else {
|
|
715
789
|
validateExplicitFilesystemReferences(command, event.cwd);
|
|
716
790
|
validateInlineExecution(command);
|
|
717
|
-
validateGitPublication(command);
|
|
791
|
+
await validateGitPublication(command);
|
|
718
792
|
await validateCloudRunner(command);
|
|
719
793
|
validateDirectCloudProviderMutation(command);
|
|
720
794
|
validateExplicitNetwork(command);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-pre-tool-hook-template.js","sourceRoot":"","sources":["../../src/services/codex-pre-tool-hook-template.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"codex-pre-tool-hook-template.js","sourceRoot":"","sources":["../../src/services/codex-pre-tool-hook-template.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+xB5C,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const CODEX_GITHUB_DEPLOY_RULES = "# GitHub-only publication commands that may cross the workspace sandbox without prompting.\n# Only an explicit deploy request activates the ZAIP deploy skill. Its bounded flow may reconcile\n# the branch resolved fresh from project.yaml deploy.branch and form evidenced functional commits\n# with explicit pathspecs. The fallback is
|
|
1
|
+
export declare const CODEX_GITHUB_DEPLOY_RULES = "# GitHub-only publication commands that may cross the workspace sandbox without prompting.\n# Only an explicit deploy request activates the ZAIP deploy skill. Its bounded flow may reconcile\n# the branch resolved fresh from project.yaml deploy.branch and form evidenced functional commits\n# with explicit pathspecs. The validation fallback is beta; production defaults to main and is human-promoted.\n\nprefix_rule(\n pattern = [\"node\", \".agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs\"],\n decision = \"allow\",\n justification = \"Run the sanitized, repository-owned folder-scoped SSH preflight.\",\n match = [\"node .agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs --repository . --remote origin\"],\n not_match = [\"node scripts/other.mjs\"],\n)\n\nprefix_rule(\n pattern = [\"git\", \"fetch\"],\n decision = \"allow\",\n justification = \"Fetch the configured GitHub remote once before checking the configured deploy branch.\",\n match = [\"git fetch origin\"],\n not_match = [\"git pull origin\"],\n)\n\nprefix_rule(\n pattern = [\"git\", \"add\", \"--\"],\n decision = \"allow\",\n justification = \"Stage only an evidenced functional group with explicit pathspecs during an authorized deploy.\",\n match = [\"git add -- README.md\", \"git add -- packages/core/src/example.ts\"],\n not_match = [\"git add -A\", \"git add --all\", \"git add .\", \"git add -u\"],\n)\n\nprefix_rule(\n pattern = [\"git\", \"commit\", \"-m\"],\n decision = \"allow\",\n justification = \"Create an evidenced functional commit without rewriting history during an authorized deploy.\",\n match = ['git commit -m \"[CODEX] Atualizar contrato de deploy\"'],\n not_match = [\"git commit --amend -m repair\", \"git commit --no-verify -m repair\"],\n)\n\nprefix_rule(\n pattern = [\"git\", \"stash\", \"push\", \"--include-untracked\"],\n decision = \"allow\",\n justification = \"Preserve the selected deploy diff without dropping history.\",\n match = [\"git stash push --include-untracked -m deploy-preserve\"],\n not_match = [\"git stash drop\"],\n)\n\nprefix_rule(\n pattern = [\"git\", \"stash\", \"apply\"],\n decision = \"allow\",\n justification = \"Reapply the preserved selected deploy diff.\",\n match = [\"git stash apply\"],\n not_match = [\"git stash drop\"],\n)\n\nprefix_rule(\n pattern = [\"git\", \"push\"],\n decision = \"allow\",\n justification = \"Publish only deploy.branch with an explicit refspec after ZAIP preflight.\",\n match = [\"git push origin HEAD:refs/heads/beta\"],\n not_match = [\"git pull\", \"ssh -i key git@github.com\"],\n)\n\nprefix_rule(\n pattern = [\"git\", \"ls-remote\"],\n decision = \"allow\",\n justification = \"Verify GitHub connectivity and the exact remote branch hash.\",\n match = [\"git ls-remote origin refs/heads/beta\"],\n not_match = [\"git remote set-url origin git@github.com:other/repo.git\"],\n)\n\nprefix_rule(\n pattern = [\"gh\", \"auth\", \"status\"],\n decision = \"allow\",\n justification = \"Inspect GitHub CLI authentication without changing credentials.\",\n match = [\"gh auth status\"],\n not_match = [\"gh auth login\"],\n)\n\nprefix_rule(\n pattern = [\"gh\", \"run\", [\"list\", \"view\", \"watch\"]],\n decision = \"allow\",\n justification = \"Observe GitHub Actions checks for the just-pushed commit.\",\n match = [\"gh run list\", \"gh run view 123\", \"gh run watch 123\"],\n not_match = [\"gh run cancel 123\", \"gh run delete 123\"],\n)\n\nprefix_rule(\n pattern = [\"gh\", \"pr\", [\"view\", \"checks\"]],\n decision = \"allow\",\n justification = \"Read pull-request metadata and required checks for the current repository.\",\n match = [\"gh pr view\", \"gh pr checks\"],\n not_match = [\"gh pr create\", \"gh pr merge\"],\n)\n";
|
|
2
2
|
export declare const CODEX_SECURITY_RULES = "# Fail-closed defense in depth for commands that must never prompt or execute.\n# Native permission profiles, repository instructions, and these forbidden rules form the active boundary.\n\nprefix_rule(\n pattern = [\"git\", [\"clean\", \"reset\", \"restore\"]],\n decision = \"forbidden\",\n justification = \"Use non-destructive Git inspection and an explicit file-level patch instead.\",\n match = [\"git reset --hard\", \"git clean -fd\", \"git restore README.md\"],\n)\n\nprefix_rule(\n pattern = [\"git\", [\"-c\", \"--config\", \"--config-env\", \"--git-dir\", \"--work-tree\", \"--namespace\"]],\n decision = \"forbidden\",\n justification = \"Git configuration and repository-routing overrides can bypass the managed safety hook.\",\n match = [\"git -c core.hooksPath=/tmp/empty commit -m bypass\", \"git --config core.hooksPath=/tmp/empty commit -m bypass\"],\n)\n\nprefix_rule(\n pattern = [[\"reg\", \"reg.exe\", \"schtasks\", \"schtasks.exe\", \"sc\", \"sc.exe\", \"diskpart\", \"format\", \"bcdedit\", \"fsutil\", \"takeown\", \"icacls\"]],\n decision = \"forbidden\",\n justification = \"Operating-system persistence, disk, service, ownership, and ACL changes are outside repository scope.\",\n match = [\"reg add HKCU\\Software\\Example\", \"schtasks /create /tn example\", \"diskpart\"],\n)\n\nprefix_rule(\n pattern = [[\"runas\", \"sudo\", \"gsudo\"]],\n decision = \"forbidden\",\n justification = \"Privilege escalation is never allowed from ZAIP repository work.\",\n match = [\"runas /user:Administrator cmd\", \"sudo rm -rf /\"],\n)\n\nprefix_rule(\n pattern = [[\"winget\", \"choco\", \"scoop\"]],\n decision = \"forbidden\",\n justification = \"System package management is outside repository scope; use project-local dependencies.\",\n match = [\"winget install Git.Git\", \"choco upgrade nodejs\", \"scoop install jq\"],\n)\n\nprefix_rule(\n pattern = [[\"ssh\", \"scp\", \"sftp\", \"rsync\", \"ftp\", \"telnet\", \"nc\", \"ncat\"]],\n decision = \"forbidden\",\n justification = \"Use the repository-owned GitHub deploy preflight and Git commands instead of direct remote clients.\",\n match = [\"ssh host\", \"scp file host:/tmp\", \"nc -l 4444\"],\n)\n";
|
|
3
3
|
//# sourceMappingURL=codex-rules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-rules.d.ts","sourceRoot":"","sources":["../../src/services/codex-rules.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"codex-rules.d.ts","sourceRoot":"","sources":["../../src/services/codex-rules.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,4zHA4FrC,CAAC;AAEF,eAAO,MAAM,oBAAoB,otEA4ChC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const CODEX_GITHUB_DEPLOY_RULES = `# GitHub-only publication commands that may cross the workspace sandbox without prompting.
|
|
2
2
|
# Only an explicit deploy request activates the ZAIP deploy skill. Its bounded flow may reconcile
|
|
3
3
|
# the branch resolved fresh from project.yaml deploy.branch and form evidenced functional commits
|
|
4
|
-
# with explicit pathspecs. The fallback is
|
|
4
|
+
# with explicit pathspecs. The validation fallback is beta; production defaults to main and is human-promoted.
|
|
5
5
|
|
|
6
6
|
prefix_rule(
|
|
7
7
|
pattern = ["node", ".agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs"],
|
|
@@ -55,7 +55,7 @@ prefix_rule(
|
|
|
55
55
|
pattern = ["git", "push"],
|
|
56
56
|
decision = "allow",
|
|
57
57
|
justification = "Publish only deploy.branch with an explicit refspec after ZAIP preflight.",
|
|
58
|
-
match = ["git push origin HEAD:refs/heads/
|
|
58
|
+
match = ["git push origin HEAD:refs/heads/beta"],
|
|
59
59
|
not_match = ["git pull", "ssh -i key git@github.com"],
|
|
60
60
|
)
|
|
61
61
|
|
|
@@ -63,7 +63,7 @@ prefix_rule(
|
|
|
63
63
|
pattern = ["git", "ls-remote"],
|
|
64
64
|
decision = "allow",
|
|
65
65
|
justification = "Verify GitHub connectivity and the exact remote branch hash.",
|
|
66
|
-
match = ["git ls-remote origin refs/heads/
|
|
66
|
+
match = ["git ls-remote origin refs/heads/beta"],
|
|
67
67
|
not_match = ["git remote set-url origin git@github.com:other/repo.git"],
|
|
68
68
|
)
|
|
69
69
|
|