@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.
Files changed (571) hide show
  1. package/README.md +36 -13
  2. package/dist/services/adapters.d.ts +1 -1
  3. package/dist/services/adapters.d.ts.map +1 -1
  4. package/dist/services/adapters.js +26 -9
  5. package/dist/services/adapters.js.map +1 -1
  6. package/dist/services/agent-adapters.js +37 -18
  7. package/dist/services/agent-adapters.js.map +1 -1
  8. package/dist/services/agent-discovery.d.ts +27 -0
  9. package/dist/services/agent-discovery.d.ts.map +1 -0
  10. package/dist/services/agent-discovery.js +73 -0
  11. package/dist/services/agent-discovery.js.map +1 -0
  12. package/dist/services/codex-conversation-lifecycle-hook.d.ts.map +1 -1
  13. package/dist/services/codex-conversation-lifecycle-hook.js +164 -24
  14. package/dist/services/codex-conversation-lifecycle-hook.js.map +1 -1
  15. package/dist/services/codex-pre-tool-hook-template.d.ts.map +1 -1
  16. package/dist/services/codex-pre-tool-hook-template.js +146 -72
  17. package/dist/services/codex-pre-tool-hook-template.js.map +1 -1
  18. package/dist/services/codex-rules.d.ts +1 -1
  19. package/dist/services/codex-rules.d.ts.map +1 -1
  20. package/dist/services/codex-rules.js +3 -3
  21. package/dist/services/codex-subagent-hook-template.d.ts +1 -1
  22. package/dist/services/codex-subagent-hook-template.d.ts.map +1 -1
  23. package/dist/services/codex-subagent-hook-template.js +117 -66
  24. package/dist/services/codex-subagent-hook-template.js.map +1 -1
  25. package/dist/services/install-agents-template.d.ts.map +1 -1
  26. package/dist/services/install-agents-template.js +65 -7
  27. package/dist/services/install-agents-template.js.map +1 -1
  28. package/dist/services/logger.js +1 -1
  29. package/dist/services/logger.js.map +1 -1
  30. package/dist/services/logger.test.js +22 -1
  31. package/dist/services/logger.test.js.map +1 -1
  32. package/dist/services/runtime-template.test.js +153 -1
  33. package/dist/services/runtime-template.test.js.map +1 -1
  34. package/dist/services/transactional-files.d.ts.map +1 -1
  35. package/dist/services/transactional-files.js +59 -14
  36. package/dist/services/transactional-files.js.map +1 -1
  37. package/package.json +1 -1
  38. package/templates/.agents/.env.example +9 -3
  39. package/templates/.agents/README-ENG.md +101 -15
  40. package/templates/.agents/README.md +102 -17
  41. package/templates/.agents/architecture/software-architecture.md +1 -59
  42. package/templates/.agents/branding/brandbook.md +3 -0
  43. package/templates/.agents/config/agents/catalog.yaml +25 -10
  44. package/templates/.agents/config/agents/discovery.json +319 -0
  45. package/templates/.agents/config/clients/codex/agents/zaip-agent-analyst.toml +1 -1
  46. package/templates/.agents/config/clients/codex/agents/zaip-agent-auditor.toml +1 -1
  47. package/templates/.agents/config/clients/codex/agents/zaip-agent-backend.toml +3 -3
  48. package/templates/.agents/config/clients/codex/agents/zaip-agent-brand-strategist.toml +1 -1
  49. package/templates/.agents/config/clients/codex/agents/zaip-agent-builder.toml +3 -3
  50. package/templates/.agents/config/clients/codex/agents/zaip-agent-cloud-engineer.toml +12 -9
  51. package/templates/.agents/config/clients/codex/agents/zaip-agent-data-analyst.toml +1 -1
  52. package/templates/.agents/config/clients/codex/agents/zaip-agent-designer.toml +3 -3
  53. package/templates/.agents/config/clients/codex/agents/zaip-agent-finalizer.toml +2 -2
  54. package/templates/.agents/config/clients/codex/agents/zaip-agent-frontend.toml +3 -3
  55. package/templates/.agents/config/clients/codex/agents/zaip-agent-general-operations.toml +1 -1
  56. package/templates/.agents/config/clients/codex/agents/zaip-agent-governance-compliance.toml +1 -1
  57. package/templates/.agents/config/clients/codex/agents/zaip-agent-growth-strategist.toml +1 -1
  58. package/templates/.agents/config/clients/codex/agents/zaip-agent-integrator.toml +1 -1
  59. package/templates/.agents/config/clients/codex/agents/zaip-agent-marketing-analyst.toml +1 -1
  60. package/templates/.agents/config/clients/codex/agents/zaip-agent-orchestrator.toml +13 -10
  61. package/templates/.agents/config/clients/codex/agents/zaip-agent-refactoring-specialist.toml +1 -1
  62. package/templates/.agents/config/clients/codex/agents/zaip-agent-reviewer.toml +1 -1
  63. package/templates/.agents/config/clients/codex/agents/zaip-agent-sales-specialist.toml +1 -1
  64. package/templates/.agents/config/clients/codex/agents/zaip-agent-security-auditor.toml +1 -1
  65. package/templates/.agents/config/clients/codex/agents/zaip-agent-task-executor.toml +3 -3
  66. package/templates/.agents/config/clients/codex/agents/zaip-agent-website-developer.toml +3 -3
  67. package/templates/.agents/config/clients/codex/agents/zaip-agent-writer.toml +1 -1
  68. package/templates/.agents/config/pricing/models.json +9 -5
  69. package/templates/.agents/config/project.yaml +22 -2
  70. package/templates/.agents/dashboard/.zaip-managed.json +530 -138
  71. package/templates/.agents/dashboard/README.md +16 -0
  72. package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-CEDZjl4V.js +1 -0
  73. package/templates/.agents/dashboard/apps/frontend/dist/assets/{DashboardHelpDialog-DaSllaJp.js → DashboardHelpDialog-TnrL1ZyZ.js} +967 -578
  74. package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-DjQpBqGU.js +1 -0
  75. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-B9GWkEyN.css +1 -0
  76. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-BAvLPAee.js +3 -0
  77. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BQZXUnQu.js +1 -0
  78. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-06__WZco.js +68 -0
  79. package/templates/.agents/dashboard/apps/frontend/dist/assets/dashboard-localization-Basaw1NR.js +824 -0
  80. package/templates/.agents/dashboard/apps/frontend/dist/assets/{icons-vendor-TPUT2IUt.js → icons-vendor-DEmo6Tn2.js} +1 -1
  81. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-BQe3zTvL.js +2 -0
  82. package/templates/.agents/dashboard/apps/frontend/dist/assets/{react-vendor-Ct48XHGL.js → react-vendor-CadYsm83.js} +1 -1
  83. package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-Bh1tDfsg.js +1 -0
  84. package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-BzKK8kK3.js +1 -0
  85. package/templates/.agents/dashboard/apps/frontend/dist/index.html +6 -6
  86. package/templates/.agents/dashboard/apps/frontend/package.json +1 -1
  87. package/templates/.agents/dashboard/apps/frontend/src/App.tsx +3 -1264
  88. package/templates/.agents/dashboard/apps/frontend/src/AppDashboardContent.tsx +368 -0
  89. package/templates/.agents/dashboard/apps/frontend/src/AutonomySettings.tsx +82 -0
  90. package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.dom.test.ts +130 -0
  91. package/templates/.agents/dashboard/apps/frontend/src/ProjectSettingsPage.tsx +206 -157
  92. package/templates/.agents/dashboard/apps/frontend/src/ProjectStackEditor.tsx +3 -1
  93. package/templates/.agents/dashboard/apps/frontend/src/__tests__/app-composition-support.ts +12 -0
  94. package/templates/.agents/dashboard/apps/frontend/src/cost-monitor-population.test.tsx +149 -0
  95. package/templates/.agents/dashboard/apps/frontend/src/cost-period-refresh.test.ts +9 -7
  96. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api-settings.ts +152 -0
  97. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.test.ts +19 -0
  98. package/templates/.agents/dashboard/apps/frontend/src/dashboard-api.ts +50 -154
  99. package/templates/.agents/dashboard/apps/frontend/src/dashboard-app-shell.tsx +33 -0
  100. package/templates/.agents/dashboard/apps/frontend/src/dashboard-cost-facts.test.ts +54 -0
  101. package/templates/.agents/dashboard/apps/frontend/src/dashboard-cost-facts.ts +48 -0
  102. package/templates/.agents/dashboard/apps/frontend/src/dashboard-localization.test.ts +37 -43
  103. package/templates/.agents/dashboard/apps/frontend/src/dashboard-localization.ts +9 -251
  104. package/templates/.agents/dashboard/apps/frontend/src/dashboard-project-overview.ts +35 -2
  105. package/templates/.agents/dashboard/apps/frontend/src/dashboard-retry.ts +17 -0
  106. package/templates/.agents/dashboard/apps/frontend/src/dashboard-setup-route.ts +29 -0
  107. package/templates/.agents/dashboard/apps/frontend/src/dashboard-view-actions.test.ts +51 -0
  108. package/templates/.agents/dashboard/apps/frontend/src/dashboard-view-actions.ts +68 -0
  109. package/templates/.agents/dashboard/apps/frontend/src/operations-period-render.test.ts +38 -2
  110. package/templates/.agents/dashboard/apps/frontend/src/operations-period.test.ts +19 -4
  111. package/templates/.agents/dashboard/apps/frontend/src/operations-period.ts +5 -3
  112. package/templates/.agents/dashboard/apps/frontend/src/overview-status-page.test.ts +2 -2
  113. package/templates/.agents/dashboard/apps/frontend/src/project-installation-status.test.ts +137 -0
  114. package/templates/.agents/dashboard/apps/frontend/src/project-installation-status.ts +66 -0
  115. package/templates/.agents/dashboard/apps/frontend/src/project-settings-copy.ts +181 -0
  116. package/templates/.agents/dashboard/apps/frontend/src/project-settings-model.ts +11 -1
  117. package/templates/.agents/dashboard/apps/frontend/src/project-settings-page.css +102 -51
  118. package/templates/.agents/dashboard/apps/frontend/src/project-settings-state.css +55 -0
  119. package/templates/.agents/dashboard/apps/frontend/src/project-settings.test.ts +14 -2
  120. package/templates/.agents/dashboard/apps/frontend/src/sao-paulo-day-rollover.test.ts +36 -0
  121. package/templates/.agents/dashboard/apps/frontend/src/sao-paulo-day-rollover.ts +30 -0
  122. package/templates/.agents/dashboard/apps/frontend/src/snapshot-banner-semantics.test.ts +2 -5
  123. package/templates/.agents/dashboard/apps/frontend/src/snapshot-coherence.test.ts +31 -20
  124. package/templates/.agents/dashboard/apps/frontend/src/traceability-task-pagination.ts +1 -2
  125. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.test.ts +6 -0
  126. package/templates/.agents/dashboard/apps/frontend/src/use-app-cost-loaders.ts +2 -0
  127. package/templates/.agents/dashboard/apps/frontend/src/use-app-effects.ts +9 -1
  128. package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-documents.ts +3 -1
  129. package/templates/.agents/dashboard/apps/frontend/src/use-app-trace-task-pagination.ts +66 -0
  130. package/templates/.agents/dashboard/apps/frontend/src/use-app-work-board.ts +397 -0
  131. package/templates/.agents/dashboard/apps/frontend/src/use-dashboard-app-model.tsx +782 -0
  132. package/templates/.agents/dashboard/apps/frontend/src/use-snapshot-notice.tsx +49 -0
  133. package/templates/.agents/dashboard/modules/cost-monitor/package.json +1 -1
  134. package/templates/.agents/dashboard/modules/cost-monitor/src/complete-cost-average.test.ts +73 -0
  135. package/templates/.agents/dashboard/modules/cost-monitor/src/contracts.ts +9 -0
  136. package/templates/.agents/dashboard/modules/cost-monitor/src/period-averages.ts +60 -0
  137. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostDeveloperPanelSlot.tsx +16 -0
  138. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostGroupsTable.tsx +459 -0
  139. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorContent.tsx +8 -22
  140. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.test.ts +27 -17
  141. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorPage.tsx +64 -189
  142. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostMonitorRunDialog.tsx +20 -0
  143. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostPeriodAverageCards.tsx +32 -8
  144. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables-hides-calls-that-have-no-collected.test.ts +80 -0
  145. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables-keeps-legacy-codex-identity-fields-blank.test.ts +455 -0
  146. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.test.ts +18 -525
  147. package/templates/.agents/dashboard/modules/cost-monitor/src/react/CostTables.tsx +32 -508
  148. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-export-sources.ts +74 -0
  149. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-actions.ts +19 -0
  150. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-page-selectors.ts +49 -0
  151. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-monitor-summary.ts +3 -2
  152. package/templates/.agents/dashboard/modules/cost-monitor/src/react/cost-table-formatters.ts +115 -0
  153. package/templates/.agents/dashboard/modules/cost-monitor/src/react/period-cost-groups.ts +1 -42
  154. package/templates/.agents/dashboard/modules/cost-monitor/src/react/use-cost-group-page.ts +2 -1
  155. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.test-fixtures.ts +2 -0
  156. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-monitor-projection.ts +3 -2
  157. package/templates/.agents/dashboard/modules/cost-monitor/src/server/build-cost-summary-projection.ts +8 -2
  158. package/templates/.agents/dashboard/modules/cost-monitor/src/server/index.ts +1 -0
  159. package/templates/.agents/dashboard/modules/operations/package.json +1 -1
  160. package/templates/.agents/dashboard/modules/operations/src/contracts.ts +4 -0
  161. package/templates/.agents/dashboard/modules/operations/src/react/EntityTableBadges.tsx +34 -0
  162. package/templates/.agents/dashboard/modules/operations/src/react/EntityTables.tsx +8 -38
  163. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview-keeps-structure-classes-mutually-exclusive.test.ts +244 -0
  164. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.helpers.tsx +66 -3
  165. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.test.ts +98 -276
  166. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverview.tsx +105 -276
  167. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverviewCharts.tsx +171 -0
  168. package/templates/.agents/dashboard/modules/operations/src/react/OperationsOverviewPanels.tsx +64 -0
  169. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPage.tsx +9 -17
  170. package/templates/.agents/dashboard/modules/operations/src/react/OperationsPageOverview.tsx +3 -0
  171. package/templates/.agents/dashboard/modules/operations/src/react/OverviewCostKpi.tsx +46 -0
  172. package/templates/.agents/dashboard/modules/operations/src/react/PrdDocumentDialog.test.tsx +2 -1
  173. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.test.ts +28 -1
  174. package/templates/.agents/dashboard/modules/operations/src/react/UnifiedWorkList.tsx +11 -4
  175. package/templates/.agents/dashboard/modules/operations/src/react/index.ts +1 -0
  176. package/templates/.agents/dashboard/modules/operations/src/react/manual-work-priority.test.ts +2 -1
  177. package/templates/.agents/dashboard/modules/operations/src/react/operations-coverage-toast.test.ts +8 -4
  178. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview-period-filter.test.ts +34 -22
  179. package/templates/.agents/dashboard/modules/operations/src/react/operations-overview.status-cards.test.ts +3 -1
  180. package/templates/.agents/dashboard/modules/operations/src/react/operations-page-contract.ts +21 -2
  181. package/templates/.agents/dashboard/modules/operations/src/react/overview-cost-card.test.tsx +89 -0
  182. package/templates/.agents/dashboard/modules/operations/src/react/overview-metric-format.ts +32 -0
  183. package/templates/.agents/dashboard/modules/operations/src/react/work-board-model.test.ts +3 -3
  184. package/templates/.agents/dashboard/modules/operations/src/work-board-model.ts +2 -1
  185. package/templates/.agents/dashboard/modules/traceability/package.json +1 -1
  186. package/templates/.agents/dashboard/packages/branding/package.json +1 -1
  187. package/templates/.agents/dashboard/packages/branding/src/index.ts +1 -1
  188. package/templates/.agents/dashboard/packages/contracts/package.json +1 -1
  189. package/templates/.agents/dashboard/packages/data-export/package.json +1 -1
  190. package/templates/.agents/dashboard/packages/local-runtime/dist/server.cjs +1625 -1613
  191. package/templates/.agents/dashboard/packages/local-runtime/dist/sqlite-read-model.cjs +1592 -1582
  192. package/templates/.agents/dashboard/packages/local-runtime/package.json +3 -2
  193. package/templates/.agents/dashboard/packages/local-runtime/scripts/build-sqlite-runtime.mjs +22 -28
  194. package/templates/.agents/dashboard/packages/local-runtime/server.mjs +1625 -1614
  195. package/templates/.agents/dashboard/packages/local-runtime/src/active-codex-telemetry.ts +25 -0
  196. package/templates/.agents/dashboard/packages/local-runtime/src/agent-catalog-settings.test.ts +1 -1
  197. package/templates/.agents/dashboard/packages/local-runtime/src/project-installation-summary.test.ts +142 -0
  198. package/templates/.agents/dashboard/packages/local-runtime/src/project-installation-summary.ts +190 -0
  199. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.test.ts +118 -8
  200. package/templates/.agents/dashboard/packages/local-runtime/src/project-settings.ts +92 -36
  201. package/templates/.agents/dashboard/packages/local-runtime/src/projection-refresh-diagnostics.ts +35 -0
  202. package/templates/.agents/dashboard/packages/local-runtime/src/server-browser-lease.test.ts +91 -0
  203. package/templates/.agents/dashboard/packages/local-runtime/src/server-browser-lease.ts +24 -4
  204. package/templates/.agents/dashboard/packages/local-runtime/src/server-costs-routes.ts +168 -0
  205. package/templates/.agents/dashboard/packages/local-runtime/src/server-dual-reads-manifest-summaries-without-losing.test.ts +344 -0
  206. package/templates/.agents/dashboard/packages/local-runtime/src/server-hono-security.test.ts +17 -0
  207. package/templates/.agents/dashboard/packages/local-runtime/src/server-http-contracts.ts +31 -0
  208. package/templates/.agents/dashboard/packages/local-runtime/src/server-operations-routes.ts +364 -0
  209. package/templates/.agents/dashboard/packages/local-runtime/src/server-read-projections.ts +461 -0
  210. package/templates/.agents/dashboard/packages/local-runtime/src/server-reconciliation-refresh.test.ts +78 -0
  211. package/templates/.agents/dashboard/packages/local-runtime/src/server-route-context.ts +13 -0
  212. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.test.ts +94 -2
  213. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-refresh.ts +62 -12
  214. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.test.ts +44 -0
  215. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot-synchronization.ts +22 -3
  216. package/templates/.agents/dashboard/packages/local-runtime/src/server-snapshot.test.ts +22 -21
  217. package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-task-trace.test.ts +97 -0
  218. package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-task-trace.ts +10 -13
  219. package/templates/.agents/dashboard/packages/local-runtime/src/server-sqlite-view-allowlist.test.ts +25 -0
  220. package/templates/.agents/dashboard/packages/local-runtime/src/server-trace-routes.ts +56 -0
  221. package/templates/.agents/dashboard/packages/local-runtime/src/server-traceability-index.test.ts +84 -0
  222. package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.test.ts +2 -30
  223. package/templates/.agents/dashboard/packages/local-runtime/src/server-work-reconciliation.ts +6 -23
  224. package/templates/.agents/dashboard/packages/local-runtime/src/server.test-fixtures.ts +1 -1
  225. package/templates/.agents/dashboard/packages/local-runtime/src/server.test.ts +2 -330
  226. package/templates/.agents/dashboard/packages/local-runtime/src/server.ts +87 -1060
  227. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-cost-dimension-facts.test.ts +12 -1
  228. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-file-index.test.ts +69 -0
  229. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-first-fold-cache.ts +3 -1
  230. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-force-canonical.test.ts +3 -1
  231. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-incremental-refresh.test.ts +2 -0
  232. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-first-fold.ts +78 -0
  233. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-projections.ts +570 -0
  234. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-materialize-runs.ts +600 -0
  235. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-metric-contract.test.ts +1 -1
  236. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-period-averages.ts +46 -0
  237. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-provider-alias-parity.test.ts +50 -0
  238. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-agent-dimension.ts +269 -0
  239. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-context.ts +32 -0
  240. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-entity-group.ts +244 -0
  241. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-filtered-dimension.ts +303 -0
  242. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-financial.ts +547 -0
  243. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-model-dimension.ts +360 -0
  244. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-provider-dimension.ts +169 -0
  245. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-summary.ts +493 -0
  246. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-temporal-dimension.ts +134 -0
  247. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-timing.ts +299 -0
  248. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-query-view-page.ts +692 -0
  249. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-counts-every-root-execution-day-returns.test.ts +763 -0
  250. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-does-not-convert-delayed-historical-finalizer.test.ts +706 -0
  251. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-filesystem.ts +762 -0
  252. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-first-fold-types.ts +1 -1
  253. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-keeps-orphan-telemetry-out-kanban-without.test.ts +710 -0
  254. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-marks-token-cost-telemetry-unavailable-when.test.ts +618 -0
  255. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-rebuild.ts +764 -0
  256. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-rebuilds-disposable-snapshot-serves-zaip-records.test.ts +276 -0
  257. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-schema.ts +193 -0
  258. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-source-fingerprint.test.ts +54 -1
  259. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-source-fingerprint.ts +7 -3
  260. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model-types.ts +123 -0
  261. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.test.ts +5 -2806
  262. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-read-model.ts +17 -6930
  263. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-risk-population.test.ts +98 -0
  264. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-schema-base-views.ts +390 -0
  265. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-schema-dashboard-views.ts +413 -0
  266. package/templates/.agents/dashboard/packages/local-runtime/src/sqlite-snapshot-seed.test.ts +2 -0
  267. package/templates/.agents/dashboard/packages/local-runtime/src/verify-project-settings.mjs +57 -0
  268. package/templates/.agents/dashboard/packages/local-runtime/src/work-priority-contract.test.ts +4 -3
  269. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-build.mjs +195 -0
  270. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-lifecycle.test.mjs +2 -7
  271. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-logging.mjs +35 -0
  272. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-navigation.mjs +114 -0
  273. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard-paths.mjs +90 -0
  274. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.mjs +89 -418
  275. package/templates/.agents/dashboard/packages/local-runtime/start-dashboard.test.mjs +22 -12
  276. package/templates/.agents/dashboard/packages/ui/package.json +1 -1
  277. package/templates/.agents/dashboard/scripts/qualify-observability.mjs +130 -0
  278. package/templates/.agents/dashboard/scripts/verify-autonomy-settings.mjs +175 -0
  279. package/templates/.agents/dashboard/scripts/verify-observability.mjs +254 -0
  280. package/templates/.agents/dashboard/scripts/verify-project-setup.mjs +64 -0
  281. package/templates/.agents/dashboard/tests/e2e/lease-global-setup.ts +37 -0
  282. package/templates/.agents/dashboard/tests/e2e/package.json +1 -1
  283. package/templates/.agents/dashboard/tests/e2e/playwright.config.ts +9 -4
  284. package/templates/.agents/dashboard/tests/e2e/specs/cost-monitor-period-transition.spec.ts +22 -1
  285. package/templates/.agents/dashboard/tests/e2e/specs/dashboard-performance-matrix.spec.ts +17 -8
  286. package/templates/.agents/dashboard/tests/e2e/specs/dashboard.spec.ts +47 -6
  287. package/templates/.agents/dashboard/tests/e2e/specs/lease-lifetime.spec.ts +14 -0
  288. package/templates/.agents/dashboard/tests/observability-fixture.mjs +200 -0
  289. package/templates/.agents/design/.zaip-managed.json +86 -42
  290. package/templates/.agents/design/DESIGN.md +2 -186
  291. package/templates/.agents/design/README.md +12 -2
  292. package/templates/.agents/design/apps/catalog/dist/assets/index-BJV597iq.js +72 -0
  293. package/templates/.agents/design/apps/catalog/dist/assets/index-BOjCcUaU.js +72 -0
  294. package/templates/.agents/design/apps/catalog/dist/assets/index-B_WhrCZe.js +72 -0
  295. package/templates/.agents/design/apps/catalog/dist/assets/index-CqtYXZfV.js +72 -0
  296. package/templates/.agents/design/apps/catalog/dist/assets/index-D_lfqoyx.js +72 -0
  297. package/templates/.agents/design/apps/catalog/dist/assets/index-i_PO2k9R.js +9 -0
  298. package/templates/.agents/design/apps/catalog/dist/index.html +1 -1
  299. package/templates/.agents/design/apps/catalog/dist/storybook/assets/CatalogShell-Cstn1UwA.js +1 -0
  300. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{Color-6AOWCN3U-B-kAgAjB.js → Color-6AOWCN3U-Cm-yJJz_.js} +1 -1
  301. package/templates/.agents/design/apps/catalog/dist/storybook/assets/Components.stories-D1WopB2L.js +137 -0
  302. package/templates/.agents/design/apps/catalog/dist/storybook/assets/DesignSystem.stories-DQ9PJ3N3.js +1 -0
  303. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{DocsRenderer-JROSPFPF-BVN7xHtv.js → DocsRenderer-JROSPFPF-Belk4jRr.js} +4 -4
  304. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{WithTooltip-7X4HQR7L-CDHtKYkz.js → WithTooltip-7X4HQR7L-DoPvjkS1.js} +1 -1
  305. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{chunk-DRQKCCAG-D6AsDkMK.js → chunk-DRQKCCAG-B1itKXEN.js} +1 -1
  306. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{chunk-W22LQPXL-B4m5uloN.js → chunk-W22LQPXL-C-Eb5SPY.js} +1 -1
  307. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{components-CN8YyTUg.js → components-DnyKLwhj.js} +5 -5
  308. package/templates/.agents/design/apps/catalog/dist/storybook/assets/formatter-L2YTDE3Q-D0OSgxWz.js +1 -0
  309. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{iframe-9yZfIsdT.js → iframe-DcXBsFPz.js} +3 -3
  310. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{react-18-BoCSnq6H.js → react-18-CRM89QRf.js} +1 -1
  311. package/templates/.agents/design/apps/catalog/dist/storybook/assets/react-C3tkVMIp.js +1 -0
  312. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{syntaxhighlighter-YFXUGROL-Bnn_nMwJ.js → syntaxhighlighter-YFXUGROL-B03jQGTF.js} +1 -1
  313. package/templates/.agents/design/apps/catalog/dist/storybook/assets/{theming-DS_ue2sb.js → theming-4ZyufAga.js} +1 -1
  314. package/templates/.agents/design/apps/catalog/dist/storybook/iframe.html +1 -1
  315. package/templates/.agents/design/apps/catalog/dist/storybook/index.json +1 -1
  316. package/templates/.agents/design/apps/catalog/package.json +2 -2
  317. package/templates/.agents/design/apps/catalog/src/components/AutonomySpecimen.tsx +15 -0
  318. package/templates/.agents/design/apps/catalog/src/components/CostPopulationSpecimen.test.tsx +19 -0
  319. package/templates/.agents/design/apps/catalog/src/components/CostPopulationSpecimen.tsx +45 -0
  320. package/templates/.agents/design/apps/catalog/src/components/EstimatedCostSpecimen.tsx +48 -0
  321. package/templates/.agents/design/apps/catalog/src/components/ProjectStatusSpecimen.tsx +169 -0
  322. package/templates/.agents/design/apps/catalog/src/pages/ComponentsPage.tsx +55 -0
  323. package/templates/.agents/design/apps/catalog/src/stories/Components.stories.tsx +60 -0
  324. package/templates/.agents/design/packages/local-runtime/package.json +1 -1
  325. package/templates/.agents/growth/strategy.md +3 -0
  326. package/templates/.agents/marketing/strategy.md +3 -0
  327. package/templates/.agents/requirements/autonomous-assurance.md +2 -1
  328. package/templates/.agents/requirements/cloud-hostinger-autonomy.md +1 -1
  329. package/templates/.agents/requirements/comparative-audit.md +1 -1
  330. package/templates/.agents/requirements/context-engine.md +1 -1
  331. package/templates/.agents/requirements/cost-observability.md +1 -1
  332. package/templates/.agents/requirements/dashboard-launch.md +1 -1
  333. package/templates/.agents/requirements/data-export.md +1 -1
  334. package/templates/.agents/requirements/design-system.md +13 -4
  335. package/templates/.agents/requirements/execution-engine.md +1 -1
  336. package/templates/.agents/requirements/kanban-dashboard.md +1 -1
  337. package/templates/.agents/requirements/model-orchestration.md +1 -1
  338. package/templates/.agents/requirements/public-distribution.md +4 -2
  339. package/templates/.agents/requirements/software-architecture.md +1 -1
  340. package/templates/.agents/requirements/strategic-improvements.md +1 -1
  341. package/templates/.agents/requirements/work-lifecycle.md +6 -6
  342. package/templates/.agents/requirements/zaip-strategic-95.md +1 -1
  343. package/templates/.agents/rules/architecture.md +2 -0
  344. package/templates/.agents/rules/astra-diagnostic.md +3 -1
  345. package/templates/.agents/rules/autonomy-decision.md +12 -2
  346. package/templates/.agents/rules/cloud-hostinger-autonomy.md +2 -0
  347. package/templates/.agents/rules/context.md +2 -1
  348. package/templates/.agents/rules/core.md +15 -4
  349. package/templates/.agents/rules/design-system-central-contract.md +17 -0
  350. package/templates/.agents/rules/evolution.md +3 -1
  351. package/templates/.agents/rules/frontend-lite.md +3 -1
  352. package/templates/.agents/rules/local-sqlite-storage.md +2 -2
  353. package/templates/.agents/rules/meta-mcp.md +3 -1
  354. package/templates/.agents/rules/model-orchestration.md +1 -1
  355. package/templates/.agents/rules/run-lifecycle-closure.md +11 -7
  356. package/templates/.agents/rules/security.md +3 -1
  357. package/templates/.agents/rules/specialist-routing.md +3 -1
  358. package/templates/.agents/rules/text-writing-utf8.md +1 -1
  359. package/templates/.agents/rules/workflow.md +7 -5
  360. package/templates/.agents/runtime/VERSION +1 -1
  361. package/templates/.agents/runtime/bin/zaip.mjs +821 -516
  362. package/templates/.agents/runtime/checksums.sha256 +6 -6
  363. package/templates/.agents/runtime/manifest.json +1 -1
  364. package/templates/.agents/runtime/pnpm-lock.sha256 +1 -1
  365. package/templates/.agents/runtime/provenance.json +5 -5
  366. package/templates/.agents/runtime/sbom.cdx.json +3 -3
  367. package/templates/.agents/sales/playbook.md +3 -0
  368. package/templates/.agents/skills/zaip-aios/SKILL.md +5 -3
  369. package/templates/.agents/skills/zaip-skill-adapt-stack/SKILL.md +1 -0
  370. package/templates/.agents/skills/zaip-skill-api-contracts/SKILL.md +14 -0
  371. package/templates/.agents/skills/zaip-skill-api-contracts/agents/openai.yaml +4 -0
  372. package/templates/.agents/skills/zaip-skill-application-observability/SKILL.md +15 -0
  373. package/templates/.agents/skills/zaip-skill-application-observability/agents/openai.yaml +4 -0
  374. package/templates/.agents/skills/zaip-skill-application-observability/references/signal-design.md +3 -0
  375. package/templates/.agents/skills/zaip-skill-application-readiness/SKILL.md +15 -0
  376. package/templates/.agents/skills/zaip-skill-application-readiness/agents/openai.yaml +4 -0
  377. package/templates/.agents/skills/zaip-skill-application-readiness/references/evidence-matrix.md +3 -0
  378. package/templates/.agents/skills/zaip-skill-architecture-design/SKILL.md +14 -0
  379. package/templates/.agents/skills/zaip-skill-architecture-design/agents/openai.yaml +4 -0
  380. package/templates/.agents/skills/zaip-skill-async-jobs/SKILL.md +14 -0
  381. package/templates/.agents/skills/zaip-skill-async-jobs/agents/openai.yaml +4 -0
  382. package/templates/.agents/skills/zaip-skill-auth-tenancy/SKILL.md +15 -0
  383. package/templates/.agents/skills/zaip-skill-auth-tenancy/agents/openai.yaml +4 -0
  384. package/templates/.agents/skills/zaip-skill-auth-tenancy/references/data-access-paths.md +9 -0
  385. package/templates/.agents/skills/zaip-skill-auth-tenancy/references/worker-scenario.md +5 -0
  386. package/templates/.agents/skills/zaip-skill-auth-tenancy/scripts/worker-contract.test.mjs +27 -0
  387. package/templates/.agents/skills/zaip-skill-author-skills/SKILL.md +2 -0
  388. package/templates/.agents/skills/zaip-skill-author-skills/references/engineering-skill-index.md +9 -0
  389. package/templates/.agents/skills/zaip-skill-author-skills/scripts/audit-skill-catalog.mjs +5 -3
  390. package/templates/.agents/skills/zaip-skill-author-skills/scripts/author-skill-scripts.test.mjs +27 -0
  391. package/templates/.agents/skills/zaip-skill-backend/SKILL.md +4 -0
  392. package/templates/.agents/skills/zaip-skill-backend/references/deployment-environments.md +75 -0
  393. package/templates/.agents/skills/zaip-skill-backend/references/supabase-migration-contract.md +23 -0
  394. package/templates/.agents/skills/zaip-skill-brand-governance/SKILL.md +2 -0
  395. package/templates/.agents/skills/zaip-skill-cache-strategy/SKILL.md +14 -0
  396. package/templates/.agents/skills/zaip-skill-cache-strategy/agents/openai.yaml +4 -0
  397. package/templates/.agents/skills/zaip-skill-change/SKILL.md +1 -1
  398. package/templates/.agents/skills/zaip-skill-cloud-engineering/SKILL.md +7 -0
  399. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/SKILL.md +37 -0
  400. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/agents/openai.yaml +6 -0
  401. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/references/workers-static-assets.md +26 -0
  402. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/references/workflow-templates.md +71 -0
  403. package/templates/.agents/skills/zaip-skill-cloudflare-github-deploy/scripts/cloudflare-github-deploy-contract.test.mjs +77 -0
  404. package/templates/.agents/skills/zaip-skill-config/SKILL.md +21 -11
  405. package/templates/.agents/skills/zaip-skill-config/agents/openai.yaml +2 -2
  406. package/templates/.agents/skills/zaip-skill-container-runtime/SKILL.md +14 -0
  407. package/templates/.agents/skills/zaip-skill-container-runtime/agents/openai.yaml +4 -0
  408. package/templates/.agents/skills/zaip-skill-context/SKILL.md +6 -1
  409. package/templates/.agents/skills/zaip-skill-context/references/prd-spec-task-handoff.md +10 -0
  410. package/templates/.agents/skills/zaip-skill-context/references/rule-selection.md +20 -0
  411. package/templates/.agents/skills/zaip-skill-cqrs/SKILL.md +1 -0
  412. package/templates/.agents/skills/zaip-skill-cybersecurity/SKILL.md +18 -0
  413. package/templates/.agents/skills/zaip-skill-cybersecurity/agents/openai.yaml +4 -0
  414. package/templates/.agents/skills/zaip-skill-cybersecurity/references/audit-contract.md +94 -0
  415. package/templates/.agents/skills/zaip-skill-cybersecurity/scripts/score-audit.mjs +185 -0
  416. package/templates/.agents/skills/zaip-skill-cybersecurity/scripts/score-audit.test.mjs +101 -0
  417. package/templates/.agents/skills/zaip-skill-data-modeling/SKILL.md +14 -0
  418. package/templates/.agents/skills/zaip-skill-data-modeling/agents/openai.yaml +4 -0
  419. package/templates/.agents/skills/zaip-skill-database-migrations/SKILL.md +20 -0
  420. package/templates/.agents/skills/zaip-skill-database-migrations/agents/openai.yaml +4 -0
  421. package/templates/.agents/skills/zaip-skill-database-migrations/references/manual-mode.md +15 -0
  422. package/templates/.agents/skills/zaip-skill-database-migrations/references/promotion-example.md +5 -0
  423. package/templates/.agents/skills/zaip-skill-database-migrations/scripts/export-manual-sql.mjs +145 -0
  424. package/templates/.agents/skills/zaip-skill-database-migrations/scripts/export-manual-sql.test.mjs +178 -0
  425. package/templates/.agents/skills/zaip-skill-dependency-upgrade/SKILL.md +14 -0
  426. package/templates/.agents/skills/zaip-skill-dependency-upgrade/agents/openai.yaml +4 -0
  427. package/templates/.agents/skills/zaip-skill-deployment-pipeline/SKILL.md +15 -0
  428. package/templates/.agents/skills/zaip-skill-deployment-pipeline/agents/openai.yaml +4 -0
  429. package/templates/.agents/skills/zaip-skill-deployment-pipeline/references/runtime-shapes.md +3 -0
  430. package/templates/.agents/skills/zaip-skill-design-system/SKILL.md +20 -9
  431. package/templates/.agents/skills/zaip-skill-dev-environment/SKILL.md +16 -0
  432. package/templates/.agents/skills/zaip-skill-dev-environment/agents/openai.yaml +4 -0
  433. package/templates/.agents/skills/zaip-skill-dev-environment/references/inventory-contract.md +7 -0
  434. package/templates/.agents/skills/zaip-skill-dev-environment/scripts/inventory.mjs +77 -0
  435. package/templates/.agents/skills/zaip-skill-disaster-recovery/SKILL.md +15 -0
  436. package/templates/.agents/skills/zaip-skill-disaster-recovery/agents/openai.yaml +4 -0
  437. package/templates/.agents/skills/zaip-skill-disaster-recovery/references/recovery-scope.md +3 -0
  438. package/templates/.agents/skills/zaip-skill-execution/SKILL.md +31 -8
  439. package/templates/.agents/skills/zaip-skill-execution/references/correction-cycle.md +7 -0
  440. package/templates/.agents/skills/zaip-skill-execution/references/runtime-governance.md +18 -8
  441. package/templates/.agents/skills/zaip-skill-external-integrations/SKILL.md +14 -0
  442. package/templates/.agents/skills/zaip-skill-external-integrations/agents/openai.yaml +4 -0
  443. package/templates/.agents/skills/zaip-skill-frontend/SKILL.md +4 -0
  444. package/templates/.agents/skills/zaip-skill-frontend-componentization/SKILL.md +44 -0
  445. package/templates/.agents/skills/zaip-skill-frontend-componentization/agents/openai.yaml +4 -0
  446. package/templates/.agents/skills/zaip-skill-frontend-data-flows/SKILL.md +14 -0
  447. package/templates/.agents/skills/zaip-skill-frontend-data-flows/agents/openai.yaml +4 -0
  448. package/templates/.agents/skills/zaip-skill-general-operations/SKILL.md +2 -0
  449. package/templates/.agents/skills/zaip-skill-github-actions-setup/SKILL.md +36 -0
  450. package/templates/.agents/skills/zaip-skill-github-actions-setup/agents/openai.yaml +4 -0
  451. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/cloudflare-pages.md +33 -0
  452. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/github.md +63 -0
  453. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/hostinger-vps.md +55 -0
  454. package/templates/.agents/skills/zaip-skill-github-actions-setup/references/npm.md +30 -0
  455. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/check-skill.mjs +55 -0
  456. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-cloudflare.mjs +61 -0
  457. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-cloudflare.test.mjs +128 -0
  458. package/templates/.agents/skills/zaip-skill-github-actions-setup/scripts/verify-ssh.integration.test.mjs +106 -0
  459. package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +42 -76
  460. package/templates/.agents/skills/zaip-skill-github-deploy/references/deployment-workflow.md +135 -0
  461. package/templates/.agents/skills/zaip-skill-github-deploy/references/github-release-workflow-template.md +31 -0
  462. package/templates/.agents/skills/zaip-skill-github-deploy/references/release-gate-matrix.md +24 -0
  463. package/templates/.agents/skills/zaip-skill-github-deploy/references/release-identity.md +44 -0
  464. package/templates/.agents/skills/zaip-skill-github-deploy/references/release-notes.md +134 -0
  465. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/consumer-release-preparation.mjs +389 -0
  466. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/consumer-release-preparation.test.mjs +134 -0
  467. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-deploy-contract.test.mjs +25 -2
  468. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness-api.test.mjs +134 -0
  469. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness.mjs +98 -0
  470. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/github-readiness.test.mjs +25 -0
  471. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/install-github-readiness-workflow.mjs +159 -0
  472. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/install-github-readiness-workflow.test.mjs +160 -0
  473. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.mjs +149 -12
  474. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/preflight.test.mjs +64 -5
  475. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/release-notes-coverage.test.mjs +126 -0
  476. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/resolve-release-identity.mjs +78 -0
  477. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/resolve-release-identity.test.mjs +51 -0
  478. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/validate-release-notes.mjs +184 -0
  479. package/templates/.agents/skills/zaip-skill-github-deploy/scripts/validate-release-notes.test.mjs +109 -0
  480. package/templates/.agents/skills/zaip-skill-growth-strategy-revops/SKILL.md +2 -0
  481. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/SKILL.md +18 -10
  482. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/agents/openai.yaml +3 -4
  483. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/aws-cli-terraform.md +62 -0
  484. package/templates/.agents/skills/zaip-skill-hostinger-cloudflare-terraform/references/guia-iniciante-hostinger-vps.md +183 -0
  485. package/templates/.agents/skills/zaip-skill-marketing/SKILL.md +2 -0
  486. package/templates/.agents/skills/zaip-skill-module-scaffold/SKILL.md +14 -0
  487. package/templates/.agents/skills/zaip-skill-module-scaffold/agents/openai.yaml +4 -0
  488. package/templates/.agents/skills/zaip-skill-module-scaffold/references/scaffold-contract.md +9 -0
  489. package/templates/.agents/skills/zaip-skill-module-scaffold/scripts/helpers.test.mjs +121 -0
  490. package/templates/.agents/skills/zaip-skill-module-scaffold/scripts/scaffold.mjs +169 -0
  491. package/templates/.agents/skills/zaip-skill-move-prd/SKILL.md +3 -1
  492. package/templates/.agents/skills/zaip-skill-move-spec/SKILL.md +1 -1
  493. package/templates/.agents/skills/zaip-skill-performance-engineering/SKILL.md +14 -0
  494. package/templates/.agents/skills/zaip-skill-performance-engineering/agents/openai.yaml +4 -0
  495. package/templates/.agents/skills/zaip-skill-prd/SKILL.md +3 -1
  496. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-local-telemetry.mjs +1 -0
  497. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.mjs +26 -9
  498. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-lib.test.mjs +39 -13
  499. package/templates/.agents/skills/zaip-skill-reconcile-telemetry/scripts/reconcile-telemetry-remeasurement.mjs +1 -0
  500. package/templates/.agents/skills/zaip-skill-refactor-landing-page/SKILL.md +66 -0
  501. package/templates/.agents/skills/zaip-skill-refactor-landing-page/agents/openai.yaml +4 -0
  502. package/templates/.agents/skills/zaip-skill-refactor-landing-page/references/behavioral-dry-run.md +23 -0
  503. package/templates/.agents/skills/zaip-skill-release-qualification/SKILL.md +38 -1
  504. package/templates/.agents/skills/zaip-skill-release-qualification/references/local-preparation.md +122 -0
  505. package/templates/.agents/skills/zaip-skill-review/SKILL.md +1 -0
  506. package/templates/.agents/skills/zaip-skill-rules/SKILL.md +3 -3
  507. package/templates/.agents/skills/zaip-skill-sales-methodology/SKILL.md +2 -0
  508. package/templates/.agents/skills/zaip-skill-setup/SKILL.md +21 -21
  509. package/templates/.agents/skills/zaip-skill-setup/agents/openai.yaml +2 -2
  510. package/templates/.agents/skills/zaip-skill-spec/SKILL.md +3 -2
  511. package/templates/.agents/skills/zaip-skill-storage-uploads/SKILL.md +14 -0
  512. package/templates/.agents/skills/zaip-skill-storage-uploads/agents/openai.yaml +4 -0
  513. package/templates/.agents/skills/zaip-skill-systematic-debugging/SKILL.md +14 -0
  514. package/templates/.agents/skills/zaip-skill-systematic-debugging/agents/openai.yaml +4 -0
  515. package/templates/.agents/skills/zaip-skill-task/SKILL.md +16 -7
  516. package/templates/.agents/skills/zaip-skill-task/references/commit-policy.md +25 -0
  517. package/templates/.agents/skills/zaip-skill-test-data/SKILL.md +14 -0
  518. package/templates/.agents/skills/zaip-skill-test-data/agents/openai.yaml +4 -0
  519. package/templates/.agents/skills/zaip-skill-test-data/scripts/generate.mjs +72 -0
  520. package/templates/.agents/skills/zaip-skill-testing-strategy/SKILL.md +15 -0
  521. package/templates/.agents/skills/zaip-skill-testing-strategy/agents/openai.yaml +4 -0
  522. package/templates/.agents/skills/zaip-skill-testing-strategy/references/example-map.md +3 -0
  523. package/templates/.agents/skills/zaip-skill-tool-setup/SKILL.md +2 -0
  524. package/templates/.agents/skills/zaip-skill-website-readiness/SKILL.md +8 -0
  525. package/templates/.agents/zaip-aios/INDEX.md +9 -1
  526. package/templates/.agents/zaip-aios/README.md +23 -2
  527. package/templates/.agents/zaip-aios/VERSION +1 -1
  528. package/templates/.agents/zaip-aios/guides/01-primeiros-passos.md +5 -1
  529. package/templates/.agents/zaip-aios/guides/03-tasks.md +15 -2
  530. package/templates/.agents/zaip-aios/guides/04-specs.md +13 -0
  531. package/templates/.agents/zaip-aios/guides/05-prds.md +13 -0
  532. package/templates/.agents/zaip-aios/guides/06-execucao.md +19 -4
  533. package/templates/.agents/zaip-aios/guides/07-revisao-e-validacao.md +14 -0
  534. package/templates/.agents/zaip-aios/guides/08-contexto-e-tokens.md +4 -3
  535. package/templates/.agents/zaip-aios/guides/09-agentes-e-squads.md +17 -9
  536. package/templates/.agents/zaip-aios/guides/10-seguranca.md +11 -1
  537. package/templates/.agents/zaip-aios/guides/11-observabilidade-e-custos.md +69 -0
  538. package/templates/.agents/zaip-aios/guides/12-instalacao-e-upgrade.md +9 -4
  539. package/templates/.agents/zaip-aios/guides/13-boas-praticas.md +7 -1
  540. package/templates/.agents/zaip-aios/guides/14-troubleshooting.md +18 -0
  541. package/templates/.agents/zaip-aios/guides/16-lifecycle-e-reconciliacao.md +54 -3
  542. package/templates/.agents/zaip-aios/guides/18-catalogo-de-agentes.md +10 -2
  543. package/templates/.agents/zaip-aios/guides/19-assurance-e-autonomia.md +186 -5
  544. package/templates/.agents/zaip-aios/guides/20-instalacao-detalhada.md +26 -18
  545. package/templates/.agents/zaip-aios/guides/21-telemetria-monitor-custos.md +18 -2
  546. package/templates/.agents/zaip-aios/guides/22-fluxos-e-roteamento.md +14 -2
  547. package/templates/.agents/zaip-aios/guides/23-orquestracao-de-modelos.md +190 -489
  548. package/templates/.agents/zaip-aios/guides/26-qualidade-e-release.md +61 -13
  549. package/templates/.agents/zaip-aios/guides/27-telemetria-git-native.md +18 -0
  550. package/templates/.agents/zaip-aios/guides/28-lifecycle-completo.md +18 -1
  551. package/templates/scripts/validate-cloud-hostinger-contract.mjs +34 -0
  552. package/templates/template-manifest.json +1229 -329
  553. package/templates/.agents/branding/.gitkeep +0 -0
  554. package/templates/.agents/dashboard/apps/frontend/dist/assets/CostCalculationGuidePage-snUCQYTC.js +0 -1
  555. package/templates/.agents/dashboard/apps/frontend/dist/assets/PricingSettingsDialog-BPtVUGgs.js +0 -1
  556. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-3Awyaovx.js +0 -3
  557. package/templates/.agents/dashboard/apps/frontend/dist/assets/ProjectSettingsPage-GgzpZ_PY.css +0 -1
  558. package/templates/.agents/dashboard/apps/frontend/dist/assets/TraceabilityWorkspace-BCvZFMEf.js +0 -1
  559. package/templates/.agents/dashboard/apps/frontend/dist/assets/cost-monitor-DbaLbU2q.js +0 -68
  560. package/templates/.agents/dashboard/apps/frontend/dist/assets/dashboard-localization-CLJ0lT9v.js +0 -231
  561. package/templates/.agents/dashboard/apps/frontend/dist/assets/index-_MEktQNM.js +0 -2
  562. package/templates/.agents/dashboard/apps/frontend/dist/assets/rolldown-runtime-D9-fqq9M.js +0 -1
  563. package/templates/.agents/dashboard/apps/frontend/dist/assets/traceability-BDe4_Ubl.js +0 -1
  564. package/templates/.agents/design/apps/catalog/dist/storybook/assets/CatalogShell-BWY-80s4.js +0 -1
  565. package/templates/.agents/design/apps/catalog/dist/storybook/assets/Components.stories-Be2mDUQj.js +0 -27
  566. package/templates/.agents/design/apps/catalog/dist/storybook/assets/DesignSystem.stories-DRx9blDs.js +0 -1
  567. package/templates/.agents/design/apps/catalog/dist/storybook/assets/formatter-L2YTDE3Q-EwuTh8Zk.js +0 -1
  568. package/templates/.agents/design/apps/catalog/dist/storybook/assets/react-DyL61NPT.js +0 -1
  569. package/templates/.agents/growth/.gitkeep +0 -0
  570. package/templates/.agents/marketing/.gitkeep +0 -0
  571. package/templates/.agents/sales/.gitkeep +0 -0
@@ -1,29 +1,169 @@
1
- export const CODEX_CONVERSATION_LIFECYCLE_HOOK = String.raw `import { existsSync, readFileSync, writeSync } from "node:fs";
2
- import { promises as fs } from "node:fs";
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","hooks");
8
- let raw=""; for await (const chunk of process.stdin) raw+=chunk;
9
- let eventName=null;
10
- try { const event=JSON.parse(raw); eventName=text(event.hook_event_name); const session=text(event.session_id),turn=text(event.turn_id),transcript=text(event.transcript_path);
11
- if(!enabled()||!inside(text(event.cwd))||!session||!turn){ respond(eventName); process.exit(0); }
12
- const cli=[resolve(root,"packages","cli","dist","index.js"),resolve(root,".agents","runtime","bin","zaip.mjs")].find(existsSync); if(!cli){diagnostic("cli_not_found",{});respond(eventName);process.exit(0);}
13
- // Prompt submission is context-only. An early intake would claim the host
14
- // turn and block an explicit same-turn new-work command.
15
- if(eventName==="Stop"){ const started=await invoke(cli,["conversation","start","--intent","conversation","--json"],session,turn,transcript); const value=json(started.stdout); const run=runId(started.stdout); if(started.code===0&&run&&value?.task===null){ const status=await terminalAfterStop(transcript,session,turn); if(status!==null){ const result=await invoke(cli,["conversation","finish","--run",run,"--summary","Codex host turn completed","--status",status,"--json"],session,turn,transcript); if(result.code!==0) diagnostic("finish_deferred",{code:result.code}); } else diagnostic("transcript_pending",{turn_id:turn,attempts:3}); } else if(started.code===0&&!run) diagnostic("start_invalid_result",{}); else if(started.code!==0) diagnostic("start_failed",{code:started.code}); }
16
- respond(eventName);
17
- } catch(error) { diagnostic("hook_exception",{error:error instanceof Error?error.message:String(error)}); respond(eventName); }
18
- function enabled(){ try{return /zaip:\s*\r?\n\s*enabled:\s*true\s*(?:\r?\n|$)/.test(readFileSync(resolve(root,".agents","config","project.yaml"),"utf8"));}catch{return false;} }
19
- function inside(cwd){if(!cwd)return false;const scoped=relative(root,resolve(cwd));return scoped===""||(!scoped.startsWith("..")&&!isAbsolute(scoped));}
20
- function text(value){if(typeof value!=="string")return null;const normalized=value.trim();return normalized.length>0&&normalized.length<=4096?normalized:null;}
21
- async function terminal(path,session,turn){if(!path||!isAbsolute(path))return null;try{const content=await fs.readFile(path,"utf8");let trusted=false;for(const line of content.split(/\r?\n/)){try{const item=JSON.parse(line),p=item?.payload;if(item?.type==="session_meta")trusted=p?.id===session||p?.session_id===session;if(trusted&&p?.turn_id===turn&&p?.type==="task_complete")return p?.status==="cancelled"?"cancelled":p?.status==="failed"||p?.error!==undefined?"failed":"completed";}catch{}}return null;}catch{return null;}}
22
- async function terminalAfterStop(path,session,turn){for(const delay of [0,250,750]){if(delay)await new Promise(done=>setTimeout(done,delay));const status=await terminal(path,session,turn);if(status!==null)return status;}return null;}
23
- function invoke(cli,args,session,turn,transcript){return new Promise(done=>{const child=spawn(process.execPath,[cli,...args],{cwd:root,windowsHide:true,env:{...process.env,CODEX_THREAD_ID:session,CODEX_TURN_ID:turn,CODEX_TRANSCRIPT_PATH:transcript??""},stdio:["ignore","pipe","pipe"]});let stdout="",stderr="",settled=false;const finish=code=>{if(settled)return;settled=true;clearTimeout(timer);done({code,stdout,stderr});};child.stdout.on("data",c=>stdout=(stdout+String(c)).slice(0,262144));child.stderr.on("data",c=>stderr=(stderr+String(c)).slice(0,8192));child.once("error",()=>finish(1));child.once("close",code=>finish(code??1));const timer=setTimeout(()=>{child.kill();finish(1);},60000);});}
24
- function json(stdout){try{return JSON.parse(stdout);}catch{return null;}}
25
- function runId(stdout){const value=json(stdout);const id=value?.run?.run_id??value?.run?.id;return typeof id==="string"?id:null;}
26
- function diagnostic(code,detail){fs.mkdir(local,{recursive:true}).then(()=>fs.appendFile(resolve(local,"codex-conversation.ndjson"),JSON.stringify({code,detail,at:new Date().toISOString()})+"\n")).catch(()=>{});}
27
- function respond(name){if(name==="Stop")writeSync(1,JSON.stringify({hookSpecificOutput:{hookEventName:"Stop"}})+"\n");}
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;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B1D,CAAC"}
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,QAqtB/B,CAAC"}
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 { writeSync } from "node:fs";
2
- import { lstat, readFile, readdir, realpath } from "node:fs/promises";
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 branch =
261
- arguments_.length === 2 && arguments_[0] === "origin"
262
- ? arguments_[1]
263
- : arguments_.length === 3 && arguments_[0] === "-u" && arguments_[1] === "origin"
264
- ? arguments_[2]
265
- : null;
266
- if (branch === null || !/^[A-Za-z0-9][A-Za-z0-9._/-]*$/.test(branch)) {
267
- deny("Git publication must use an explicit valid branch on origin.");
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 = /(?:^|\/)(?:\.git|node_modules|dist|build|coverage|tmp|temp|\.cache)(?:\/|$)|^\.agents\/records\/|^\.zaip-aios\/local\//i;
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(command.replaceAll("\\", "/"));
697
+ return !lifecycleExemptPathPattern.test(repositoryPath(resolve(event.cwd ?? repositoryRoot, command)));
628
698
  }
629
- return shellMutationPattern.test(command);
630
- }
631
-
632
- async function runRecordPaths(root) {
633
- const paths = [];
634
- async function visit(directory) {
635
- let entries;
636
- try {
637
- entries = await readdir(directory, { withFileTypes: true });
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
- for (const entry of entries) {
642
- const path = resolve(directory, entry.name);
643
- if (entry.isDirectory()) await visit(path);
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
- await visit(root);
648
- return paths;
714
+ return shellMutationPattern.test(command);
649
715
  }
650
716
 
651
- async function hasCurrentTaskOrchestratorRun() {
652
- const threadId = process.env.CODEX_THREAD_ID;
653
- const turnId = process.env.CODEX_TURN_ID;
654
- if (!threadId || !turnId) return false;
655
- const root = resolve(repositoryRoot, ".agents", "records", "runs");
656
- for (const path of await runRecordPaths(root)) {
657
- let records;
658
- try {
659
- records = (await readFile(path, "utf8"))
660
- .split(/\r?\n/)
661
- .filter(Boolean)
662
- .map((line) => JSON.parse(line));
663
- } catch {
664
- continue;
665
- }
666
- const started = records.find((record) => record.type === "run.started");
667
- if (
668
- started?.client_thread_id !== threadId ||
669
- started?.client_turn_id !== turnId ||
670
- started?.phase !== "execution" ||
671
- typeof started?.task_id !== "string"
672
- ) {
673
- continue;
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
- const role =
676
- started.run_role === "owner"
677
- ? "orchestrator"
678
- : started.run_role === "contributor"
679
- ? "subagent"
680
- : (started.run_role ?? (started.parent_run_id ? "subagent" : "orchestrator"));
681
- if (
682
- role === "orchestrator" &&
683
- started.parent_run_id === null &&
684
- started.entrypoint === "task" &&
685
- !records.some((record) => record.type === "run.finished")
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 an active execution Run owning a Task for this Codex turn.");
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqtB5C,CAAC"}
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 main only when that file or key is absent.\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/main\"],\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/main\"],\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";
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,myHA4FrC,CAAC;AAEF,eAAO,MAAM,oBAAoB,otEA4ChC,CAAC"}
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 main only when that file or key is absent.
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/main"],
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/main"],
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