@event4u/agent-config 16.1.0 → 16.3.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 (467) hide show
  1. package/.augment-plugin/marketplace.json +3 -3
  2. package/.augment-plugin/plugin.json +1 -1
  3. package/.claude-plugin/marketplace.json +1 -1
  4. package/CHANGELOG.md +98 -257
  5. package/README.md +14 -12
  6. package/dist/agent-src/commands/analyze/inbox.md +1 -1
  7. package/dist/agent-src/commands/analyze/roadmap-repos.md +1 -1
  8. package/dist/agent-src/commands/bug/fix.md +17 -2
  9. package/dist/agent-src/commands/feature/plan.md +1 -1
  10. package/dist/agent-src/commands/feature/roadmap.md +1 -1
  11. package/dist/agent-src/commands/fix/ci.md +1 -1
  12. package/dist/agent-src/commands/implement-ticket.md +1 -1
  13. package/dist/agent-src/commands/jira-ticket.md +1 -1
  14. package/dist/agent-src/commands/roadmap/create.md +1 -1
  15. package/dist/agent-src/commands/roadmap/materialize.md +1 -1
  16. package/dist/agent-src/commands/roadmap/process-full.md +5 -5
  17. package/dist/agent-src/commands/roadmap/resolve-blockers.md +361 -0
  18. package/dist/agent-src/commands/roadmap/triage-parked.md +325 -0
  19. package/dist/agent-src/commands/roadmap.md +18 -4
  20. package/dist/agent-src/commands/tests/create.md +17 -3
  21. package/dist/agent-src/commands/tests/execute.md +22 -5
  22. package/dist/agent-src/commands/work.md +4 -0
  23. package/dist/agent-src/contexts/authority/decision-revisit-gate-enforcement.md +43 -0
  24. package/dist/agent-src/contexts/communication/rules-auto/design-fidelity-enforcement.md +24 -0
  25. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +6 -6
  26. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +4 -8
  27. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +32 -2
  28. package/dist/agent-src/contexts/execution/session-canary-enforcement-history.md +67 -0
  29. package/dist/agent-src/contexts/execution/toolchain-resolver.md +101 -7
  30. package/dist/agent-src/rules/active-remediation.md +1 -1
  31. package/dist/agent-src/rules/autonomous-execution.md +1 -0
  32. package/dist/agent-src/rules/broken-access-control.md +1 -0
  33. package/dist/agent-src/rules/command-suggestion-policy.md +1 -0
  34. package/dist/agent-src/rules/context-hygiene.md +1 -1
  35. package/dist/agent-src/rules/decision-revisit-gate.md +16 -33
  36. package/dist/agent-src/rules/design-fidelity.md +13 -16
  37. package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -0
  38. package/dist/agent-src/rules/domain-safety-disclaimer.md +1 -0
  39. package/dist/agent-src/rules/domain-safety-pii.md +1 -0
  40. package/dist/agent-src/rules/domain-safety-retention.md +1 -0
  41. package/dist/agent-src/rules/engineering-safety-floor.md +1 -0
  42. package/dist/agent-src/rules/evaluator-independence.md +3 -2
  43. package/dist/agent-src/rules/fast-path-marker-visibility.md +1 -0
  44. package/dist/agent-src/rules/finance-safety-floor.md +1 -0
  45. package/dist/agent-src/rules/git-history-discipline.md +1 -0
  46. package/dist/agent-src/rules/image-likeness-and-rights.md +1 -0
  47. package/dist/agent-src/rules/legal-safety-floor.md +3 -2
  48. package/dist/agent-src/rules/lethal-trifecta-guard.md +1 -0
  49. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +1 -0
  50. package/dist/agent-src/rules/media-governance-routing.md +14 -17
  51. package/dist/agent-src/rules/persona-governance.md +2 -2
  52. package/dist/agent-src/rules/provider-lifecycle-discipline.md +1 -1
  53. package/dist/agent-src/rules/question-not-instruction.md +1 -0
  54. package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
  55. package/dist/agent-src/rules/runtime-safety.md +1 -0
  56. package/dist/agent-src/rules/secret-vcs-guard.md +1 -0
  57. package/dist/agent-src/rules/security-sensitive-stop.md +3 -2
  58. package/dist/agent-src/rules/session-canary.md +8 -62
  59. package/dist/agent-src/rules/settings-ask-protocol.md +1 -0
  60. package/dist/agent-src/rules/source-confidentiality.md +1 -0
  61. package/dist/agent-src/rules/strategy-safety-floor.md +1 -0
  62. package/dist/agent-src/rules/tool-safety.md +1 -0
  63. package/dist/agent-src/rules/ui-audit-gate.md +1 -2
  64. package/dist/agent-src/rules/untrusted-input-defense.md +1 -0
  65. package/dist/agent-src/rules/user-interrupt-priority.md +1 -0
  66. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
  67. package/dist/agent-src/scripts/deferral_carry.ts +339 -0
  68. package/dist/agent-src/scripts/update_roadmap_progress.ts +4 -1
  69. package/dist/agent-src/skills/accessibility-auditor/data/aria-patterns.csv +1 -1
  70. package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +2 -2
  71. package/dist/agent-src/skills/api-design/data/manifest.json +2 -2
  72. package/dist/agent-src/skills/api-testing/SKILL.md +17 -0
  73. package/dist/agent-src/skills/code-intelligence/SKILL.md +14 -2
  74. package/dist/agent-src/skills/design-review/SKILL.md +30 -4
  75. package/dist/agent-src/skills/design-review/references/verification-automation.md +32 -0
  76. package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +1 -1
  77. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +18 -3
  78. package/dist/agent-src/skills/existing-ui-audit/references/component-taxonomy-detection.md +56 -0
  79. package/dist/agent-src/skills/fe-design/SKILL.md +1 -1
  80. package/dist/agent-src/skills/iconography/SKILL.md +1 -1
  81. package/dist/agent-src/skills/js-library-packaging/SKILL.md +2 -2
  82. package/dist/agent-src/skills/markitdown/SKILL.md +4 -0
  83. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
  84. package/dist/agent-src/skills/playwright-testing/SKILL.md +30 -6
  85. package/dist/agent-src/skills/quality-tools/SKILL.md +11 -1
  86. package/dist/agent-src/skills/quality-tools/references/go-tools.md +76 -0
  87. package/dist/agent-src/skills/quality-tools/references/python-tools.md +104 -0
  88. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  89. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +1 -1
  90. package/dist/agent-src/skills/storybook-workshop/SKILL.md +3 -3
  91. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +1 -1
  92. package/dist/agent-src/skills/test-case-discovery/SKILL.md +7 -0
  93. package/dist/agent-src/skills/test-driven-development/SKILL.md +17 -0
  94. package/dist/agent-src/skills/test-performance/SKILL.md +19 -1
  95. package/dist/agent-src/skills/ui-component-architect/SKILL.md +25 -2
  96. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  97. package/dist/agent-src/templates/roadmaps.md +30 -0
  98. package/dist/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +10 -4
  99. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +302 -21
  100. package/dist/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +22 -3
  101. package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +6 -1
  102. package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
  103. package/dist/agent-src/templates/scripts/work_engine/state.ts +57 -7
  104. package/dist/agent-src/templates/scripts/work_engine/taxonomy/detect.ts +500 -0
  105. package/dist/agent-src/templates/scripts/work_engine/taxonomy/place.ts +183 -0
  106. package/dist/cli/python/knowledge_ingest.js +1 -1
  107. package/dist/cli/python/workspace_drive.js +1 -1
  108. package/dist/cli/registry.js +1 -1
  109. package/dist/cli-delegate/archive_completed_roadmaps.js +92 -12
  110. package/dist/cli-delegate/check_update_banner.js +12 -1
  111. package/dist/cli-delegate/chunk-523HCFYO.js +90 -0
  112. package/dist/cli-delegate/{chunk-M2DPGFZ4.js → chunk-6V6TA25H.js} +22 -152
  113. package/dist/cli-delegate/chunk-7IQE3D5S.js +191 -0
  114. package/dist/cli-delegate/{chunk-6KFEC3G7.js → chunk-CQWX336L.js} +1 -1
  115. package/dist/cli-delegate/chunk-DEIV7XP7.js +108 -0
  116. package/dist/cli-delegate/chunk-EEHDXSYD.js +2040 -0
  117. package/dist/cli-delegate/{chunk-P6ZHP5W2.js → chunk-GKE7ZVFA.js} +4 -4
  118. package/dist/cli-delegate/chunk-JQOM7TTM.js +1201 -0
  119. package/dist/cli-delegate/{chunk-UNCRJBT3.js → chunk-JQVYKIZA.js} +41 -0
  120. package/dist/cli-delegate/{chunk-FC75PGJE.js → chunk-JY2I2DXV.js} +12 -1
  121. package/dist/cli-delegate/chunk-KB5FZ655.js +208 -0
  122. package/dist/cli-delegate/{chunk-YUM5KURG.js → chunk-KR6EM23A.js} +235 -1455
  123. package/dist/cli-delegate/{chunk-LTYVIY76.js → chunk-LIYTLH6O.js} +1 -1
  124. package/dist/cli-delegate/chunk-NQ7WT43P.js +2729 -0
  125. package/dist/cli-delegate/chunk-NXEILF2K.js +2160 -0
  126. package/dist/cli-delegate/{chunk-5R7HOLAF.js → chunk-NYX3L2PZ.js} +1 -1
  127. package/dist/cli-delegate/{chunk-4E2W63DA.js → chunk-OKJUIAPS.js} +62 -1
  128. package/dist/cli-delegate/{chunk-QAJS5YWY.js → chunk-PHD7OOLE.js} +2 -1
  129. package/dist/cli-delegate/{chunk-RGNIWTEA.js → chunk-QLDHIPWR.js} +1 -1
  130. package/dist/cli-delegate/{chunk-HDVVGPQW.js → chunk-RQNNW7IF.js} +1405 -567
  131. package/dist/cli-delegate/{chunk-S3VFXMTM.js → chunk-S4UMZNES.js} +1 -1
  132. package/dist/cli-delegate/{chunk-6KM6ORRY.js → chunk-S4YWNRKO.js} +24 -8
  133. package/dist/cli-delegate/{chunk-GJCBB2UG.js → chunk-TRI6DQZ6.js} +3054 -325
  134. package/dist/cli-delegate/chunk-ULQRUR23.js +208 -0
  135. package/dist/cli-delegate/{chunk-NUHLI2RX.js → chunk-YCU3TIXH.js} +2 -0
  136. package/dist/cli-delegate/chunk-ZBZV2G5R.js +210 -0
  137. package/dist/cli-delegate/{chunk-WGXTVKCQ.js → chunk-ZUZKZYCN.js} +5 -3
  138. package/dist/cli-delegate/cmd_analyze_session.js +1 -1
  139. package/dist/cli-delegate/cmd_brand_status.js +1 -1
  140. package/dist/cli-delegate/cmd_conformance.js +1862 -809
  141. package/dist/cli-delegate/cmd_doctor.js +13 -6
  142. package/dist/cli-delegate/cmd_doctor_neighbours.js +23 -0
  143. package/dist/cli-delegate/cmd_explain.js +5 -5
  144. package/dist/cli-delegate/cmd_export.js +11 -8
  145. package/dist/cli-delegate/cmd_fleet.js +3 -3
  146. package/dist/cli-delegate/cmd_handoff.js +10 -7
  147. package/dist/cli-delegate/cmd_mcp_available.js +1 -1
  148. package/dist/cli-delegate/cmd_memory_get.js +3 -1
  149. package/dist/cli-delegate/cmd_migrate.js +2 -2
  150. package/dist/cli-delegate/cmd_packs_active.js +3 -3
  151. package/dist/cli-delegate/cmd_preflight.js +6 -6
  152. package/dist/cli-delegate/cmd_prune.js +11 -8
  153. package/dist/cli-delegate/cmd_refresh.js +2 -1
  154. package/dist/cli-delegate/cmd_route_audit.js +8 -6
  155. package/dist/cli-delegate/cmd_route_explain.js +4 -4
  156. package/dist/cli-delegate/cmd_session_recycle.js +4 -3
  157. package/dist/cli-delegate/cmd_settings_get.js +1 -1
  158. package/dist/cli-delegate/cmd_settings_migrate.js +11 -8
  159. package/dist/cli-delegate/cmd_settings_set.js +4 -4
  160. package/dist/cli-delegate/cmd_sync.js +11 -8
  161. package/dist/cli-delegate/cmd_uninstall.js +11 -8
  162. package/dist/cli-delegate/cmd_update.js +1 -1
  163. package/dist/cli-delegate/cmd_upgrade.js +3 -2
  164. package/dist/cli-delegate/cmd_validate.js +11 -8
  165. package/dist/cli-delegate/cmd_versions.js +1 -1
  166. package/dist/cli-delegate/deferral_carry.js +16 -0
  167. package/dist/cli-delegate/gate_execute.js +2 -2
  168. package/dist/cli-delegate/roadmap_gates.js +5 -5
  169. package/dist/cli-delegate/update_roadmap_progress.js +1 -1
  170. package/dist/discovery/deprecation-report.md +1 -1
  171. package/dist/discovery/discovery-manifest.json +132 -80
  172. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  173. package/dist/discovery/discovery-manifest.summary.md +3 -3
  174. package/dist/discovery/dormancy-report.md +1 -1
  175. package/dist/discovery/orphan-report.md +1 -1
  176. package/dist/discovery/packs.json +7 -5
  177. package/dist/discovery/trust-report.md +2 -2
  178. package/dist/discovery/workspaces.json +6 -4
  179. package/dist/hooks/dispatch.js +7972 -5186
  180. package/dist/hooks/dispatch.sha256 +1 -0
  181. package/dist/install/claudePathsPlan.js +47 -6
  182. package/dist/install/claudeRuleRewrite.js +7 -0
  183. package/dist/install/emit_host_rules_cli.js +39 -36
  184. package/dist/install/globalRuleScope.js +87 -0
  185. package/dist/install/host_rule_ownership.js +160 -0
  186. package/dist/install/install.mjs +2226 -1055
  187. package/dist/install/installThinLayer.js +261 -0
  188. package/dist/install/installedRuleLinks.js +176 -0
  189. package/dist/install/wizard-plan.js +24 -0
  190. package/dist/mcp/registry-manifest.json +3 -3
  191. package/dist/mcp/server.json +2 -2
  192. package/dist/mcp/server.mjs +40913 -34865
  193. package/dist/scripts/_lib/agent_settings.js +11 -0
  194. package/dist/scripts/_lib/claude_settings_hooks.js +10 -8
  195. package/dist/scripts/_lib/installed_layer.js +378 -0
  196. package/dist/scripts/_lib/lean_projection_mode.js +218 -15
  197. package/dist/scripts/_lib/rule_consequence_class.js +45 -0
  198. package/dist/scripts/_lib/rule_injection.js +67 -10
  199. package/dist/scripts/_lib/rule_law_section.js +122 -0
  200. package/dist/scripts/_lib/thin_rules.js +458 -0
  201. package/dist/scripts/_lib/windsurf_render.js +60 -0
  202. package/dist/scripts/condense.js +14 -26
  203. package/dist/scripts/project_thin_rules.js +14 -294
  204. package/dist/server/schemas/settings.js +29 -0
  205. package/dist/shared/skillRanking.js +74 -13
  206. package/dist/ui/assets/index-Cwq4d0hX.js +23 -0
  207. package/dist/ui/assets/index-Cyjy8bWO.css +1 -0
  208. package/dist/ui/index.html +2 -2
  209. package/docs/contracts/settings-classes.md +10 -6
  210. package/package.json +4 -4
  211. package/src/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
  212. package/src/agent-src/scripts/deferral_carry.ts +339 -0
  213. package/src/agent-src/scripts/update_roadmap_progress.ts +4 -1
  214. package/src/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +10 -4
  215. package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +302 -21
  216. package/src/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +22 -3
  217. package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +6 -1
  218. package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
  219. package/src/agent-src/templates/scripts/work_engine/state.ts +57 -7
  220. package/src/agent-src/templates/scripts/work_engine/taxonomy/detect.ts +500 -0
  221. package/src/agent-src/templates/scripts/work_engine/taxonomy/place.ts +183 -0
  222. package/src/config/agent-settings.template.yml +91 -22
  223. package/src/config/ci-local-parity.yml +18 -0
  224. package/src/config/continuity-surface.json +9 -2
  225. package/src/config/evaluator-budgets.json +4 -4
  226. package/src/config/gate-coverage.yml +327 -3
  227. package/src/config/gate-violation-baselines.json +21 -9
  228. package/src/config/hook-bundle-budget.json +25 -0
  229. package/src/config/hook-latency-budget.json +21 -0
  230. package/src/config/hook-token-budget.json +8 -3
  231. package/src/config/host-instruction-limits.json +33 -0
  232. package/src/config/metric-registry.yml +114 -0
  233. package/src/config/placeholder-drift-budget.json +10 -0
  234. package/src/config/routing-coverage-seed.json +38 -3
  235. package/src/config/rule-activation-census.json +7 -3
  236. package/src/config/rule-consequence-class.json +161 -0
  237. package/src/config/rule-law-ceilings.json +99 -0
  238. package/src/install/claudePathsPlan.ts +46 -4
  239. package/src/install/claudeRuleRewrite.ts +10 -1
  240. package/src/install/emit_host_rules_cli.ts +43 -34
  241. package/src/install/globalRuleScope.ts +109 -0
  242. package/src/install/host_rule_ownership.ts +170 -0
  243. package/src/install/installThinLayer.ts +312 -0
  244. package/src/install/installedRuleLinks.ts +220 -0
  245. package/src/install/wizard-plan.ts +24 -0
  246. package/src/scripts/_cli/cmd_doctor.ts +28 -90
  247. package/src/scripts/_cli/cmd_doctor_neighbours.ts +293 -0
  248. package/src/scripts/_cli/doctor_execution.ts +100 -17
  249. package/src/scripts/_cli/doctor_network_posture.ts +226 -0
  250. package/src/scripts/_dispatch.bash +16 -2
  251. package/src/scripts/_lib/agent_settings.ts +11 -0
  252. package/src/scripts/_lib/body_portable.ts +102 -0
  253. package/src/scripts/_lib/cc_transcript.ts +132 -1
  254. package/src/scripts/_lib/claude_settings_hooks.ts +10 -8
  255. package/src/scripts/_lib/concern_sla_window.ts +200 -0
  256. package/src/scripts/_lib/estate_offsets.ts +241 -0
  257. package/src/scripts/_lib/exemption_shape.ts +143 -0
  258. package/src/scripts/_lib/fnv.ts +23 -0
  259. package/src/scripts/_lib/foreign_scan.ts +106 -0
  260. package/src/scripts/_lib/forge_protection.ts +114 -0
  261. package/src/scripts/_lib/forge_reader.ts +558 -0
  262. package/src/scripts/_lib/gitignore_block.ts +314 -0
  263. package/src/scripts/_lib/global_deploy_inventory.ts +32 -0
  264. package/src/scripts/_lib/graph_feeder_record.ts +214 -0
  265. package/src/scripts/_lib/hook_settings.ts +73 -0
  266. package/src/scripts/_lib/host_capability.ts +40 -19
  267. package/src/scripts/_lib/host_env_write.ts +111 -0
  268. package/src/scripts/_lib/host_hook_merge.ts +165 -0
  269. package/src/scripts/_lib/installed_layer.ts +538 -0
  270. package/src/scripts/_lib/json_merge.ts +82 -0
  271. package/src/scripts/_lib/json_pointers.ts +93 -11
  272. package/src/scripts/_lib/lean_projection_mode.ts +275 -15
  273. package/src/scripts/_lib/llm_proposer_transport.ts +14 -4
  274. package/src/scripts/_lib/machine_wake.ts +16 -3
  275. package/src/scripts/_lib/neighbour_census.ts +760 -0
  276. package/src/scripts/_lib/neighbour_scan.ts +122 -0
  277. package/src/scripts/_lib/neighbour_tool_use.ts +189 -0
  278. package/src/scripts/_lib/obligations.ts +119 -8
  279. package/src/scripts/_lib/probe_inputs.ts +271 -0
  280. package/src/scripts/_lib/prompt_shape.ts +46 -0
  281. package/src/scripts/_lib/read_surface_scan.ts +322 -0
  282. package/src/scripts/_lib/release_highlights.ts +2 -1
  283. package/src/scripts/_lib/release_migration_gate.ts +19 -3
  284. package/src/scripts/_lib/reserved_name_sweep.ts +73 -0
  285. package/src/scripts/_lib/retrieval_sanitize.ts +77 -16
  286. package/src/scripts/_lib/review_coverage.ts +134 -0
  287. package/src/scripts/_lib/rule_consequence_class.ts +71 -0
  288. package/src/scripts/_lib/rule_injection.ts +130 -10
  289. package/src/scripts/_lib/rule_law_section.ts +147 -0
  290. package/src/scripts/_lib/rule_layer_overlap.ts +58 -0
  291. package/src/scripts/_lib/shell_write_shapes.ts +108 -0
  292. package/src/scripts/_lib/skill_origin.ts +254 -0
  293. package/src/scripts/_lib/structural_hiding.ts +622 -0
  294. package/src/scripts/_lib/structured_ask.ts +64 -21
  295. package/src/scripts/_lib/thin_rules.ts +540 -0
  296. package/src/scripts/_lib/touched_file_quality.ts +434 -0
  297. package/src/scripts/_lib/turn_end_refusals.ts +600 -4
  298. package/src/scripts/_lib/turn_end_transcript.ts +216 -0
  299. package/src/scripts/_lib/verification_command.ts +324 -0
  300. package/src/scripts/_lib/verification_evidence.ts +647 -0
  301. package/src/scripts/_lib/verify_clause.ts +280 -0
  302. package/src/scripts/_lib/windsurf_render.ts +63 -0
  303. package/src/scripts/ai_council/cli_call_budget.ts +13 -5
  304. package/src/scripts/ai_council/clients.ts +26 -57
  305. package/src/scripts/ai_council/config.ts +1 -1
  306. package/src/scripts/ai_council/vendor_defaults.ts +45 -0
  307. package/src/scripts/ai_team/team_dispatch.ts +4 -0
  308. package/src/scripts/audit_skill_overlap.ts +261 -0
  309. package/src/scripts/before_complete_hook.ts +573 -25
  310. package/src/scripts/bench_hook_latency.ts +412 -5
  311. package/src/scripts/bench_touched_file_quality.ts +238 -0
  312. package/src/scripts/cache_realization_report.ts +61 -1
  313. package/src/scripts/check_argument_hint.ts +287 -0
  314. package/src/scripts/check_claims.ts +125 -1
  315. package/src/scripts/check_enforcement_coverage.ts +38 -9
  316. package/src/scripts/check_enforcement_matrix.ts +621 -22
  317. package/src/scripts/check_estate_count.ts +130 -153
  318. package/src/scripts/check_finding_dispositions.ts +138 -7
  319. package/src/scripts/check_generator_sync.ts +71 -0
  320. package/src/scripts/check_hook_bundle_composition.ts +370 -0
  321. package/src/scripts/check_host_docs_digest.ts +786 -0
  322. package/src/scripts/check_host_format_column.ts +559 -0
  323. package/src/scripts/check_input_references.ts +228 -0
  324. package/src/scripts/check_inputs_parity.ts +235 -0
  325. package/src/scripts/check_kernel_edit_ratified.ts +89 -9
  326. package/src/scripts/check_kill_switch_table.ts +294 -0
  327. package/src/scripts/check_memory.ts +7 -1
  328. package/src/scripts/check_placeholder_drift.ts +221 -0
  329. package/src/scripts/check_read_surface_coverage.ts +515 -0
  330. package/src/scripts/check_release_highlights.ts +10 -0
  331. package/src/scripts/check_release_holds.ts +2 -1
  332. package/src/scripts/check_release_pr_shape.ts +38 -15
  333. package/src/scripts/check_routing_coverage.ts +378 -11
  334. package/src/scripts/check_standing_rule_delivery.ts +33 -13
  335. package/src/scripts/check_static_parity.ts +17 -0
  336. package/src/scripts/check_verify_expectation_delta.ts +521 -0
  337. package/src/scripts/ci_settle.ts +145 -19
  338. package/src/scripts/closure_scan.ts +115 -1
  339. package/src/scripts/code_graph/detect.ts +127 -7
  340. package/src/scripts/code_graph/foreign.ts +194 -0
  341. package/src/scripts/code_graph/query.ts +217 -4
  342. package/src/scripts/code_graph/types.ts +26 -2
  343. package/src/scripts/code_graph/validate.ts +3 -1
  344. package/src/scripts/code_graph/verbs.ts +103 -0
  345. package/src/scripts/compile_hook_manifest.ts +90 -14
  346. package/src/scripts/condense.ts +14 -27
  347. package/src/scripts/estate_exemption_shape.ts +202 -0
  348. package/src/scripts/external_sources_denylist.json +29 -4
  349. package/src/scripts/generate_host_cost_table.ts +1 -1
  350. package/src/scripts/hook_manifest.json +1 -1
  351. package/src/scripts/hook_manifest.yaml +192 -14
  352. package/src/scripts/hooks/block_config_weakening.ts +294 -4
  353. package/src/scripts/hooks/block_kernel_rule_writes.ts +9 -78
  354. package/src/scripts/hooks/block_plumbing_writes.ts +342 -0
  355. package/src/scripts/hooks/bundle_integrity.ts +291 -0
  356. package/src/scripts/hooks/chain_nudge_hook.ts +1 -2
  357. package/src/scripts/hooks/code_graph_context_hook.ts +253 -25
  358. package/src/scripts/hooks/comment_discipline_hook.ts +1 -3
  359. package/src/scripts/hooks/concern_failure_policy.ts +280 -0
  360. package/src/scripts/hooks/concern_registry.ts +2 -0
  361. package/src/scripts/hooks/concern_timings.ts +94 -0
  362. package/src/scripts/hooks/delegation_nudge_hook.ts +1 -2
  363. package/src/scripts/hooks/design_pass_hook.ts +100 -9
  364. package/src/scripts/hooks/design_slop_hook.ts +1 -2
  365. package/src/scripts/hooks/dispatch_hook.ts +77 -71
  366. package/src/scripts/hooks/edit_shape_hook.ts +1 -2
  367. package/src/scripts/hooks/end_review_nudge_hook.ts +1 -1
  368. package/src/scripts/hooks/evidence_independence.ts +1 -2
  369. package/src/scripts/hooks/exit_codes.ts +129 -0
  370. package/src/scripts/hooks/host_lowering.json +1 -0
  371. package/src/scripts/hooks/host_lowering.ts +146 -3
  372. package/src/scripts/hooks/host_lowering.yaml +262 -46
  373. package/src/scripts/hooks/host_semantics.ts +30 -2
  374. package/src/scripts/hooks/injection_budget.ts +9 -2
  375. package/src/scripts/hooks/interruption_ledger_hook.ts +1 -2
  376. package/src/scripts/hooks/journal_record_hook.ts +1 -2
  377. package/src/scripts/hooks/memory_recall_hook.ts +1 -2
  378. package/src/scripts/hooks/obligation_settle_hook.ts +151 -5
  379. package/src/scripts/hooks/one_question_per_ask_hook.ts +43 -6
  380. package/src/scripts/hooks/orchestration_record_hook.ts +1 -2
  381. package/src/scripts/hooks/payload_stub.ts +10 -1
  382. package/src/scripts/hooks/permission_gate.ts +1 -2
  383. package/src/scripts/hooks/push_settle_hook.ts +1 -3
  384. package/src/scripts/hooks/replay_hook.ts +2 -1
  385. package/src/scripts/hooks/reread_guard_hook.ts +1 -2
  386. package/src/scripts/hooks/review_baseline_hook.ts +1 -2
  387. package/src/scripts/hooks/rtk_wrap_hook.ts +1 -2
  388. package/src/scripts/hooks/rule_inject_hook.ts +765 -68
  389. package/src/scripts/hooks/run_continuation_hook.ts +13 -15
  390. package/src/scripts/hooks/skill_route_hook.ts +1 -2
  391. package/src/scripts/hooks/source_first_gate_hook.ts +1 -2
  392. package/src/scripts/hooks/spawn_guard_shadow_hook.ts +1 -2
  393. package/src/scripts/hooks/subagent_ledger_hook.ts +1 -2
  394. package/src/scripts/hooks/suggestion_capture_hook.ts +1 -1
  395. package/src/scripts/hooks/table_fingerprint.ts +70 -0
  396. package/src/scripts/hooks/telemetry_flush_hook.ts +1 -2
  397. package/src/scripts/hooks/telemetry_usage_hook.ts +65 -10
  398. package/src/scripts/hooks/tool_result_bytes_hook.ts +93 -9
  399. package/src/scripts/hooks/turn_end_gate_hook.ts +421 -324
  400. package/src/scripts/hooks/ui_route_nudge_hook.ts +1 -2
  401. package/src/scripts/hooks_status.ts +112 -0
  402. package/src/scripts/injection_scan_hook.ts +7 -0
  403. package/src/scripts/install.ts +75 -189
  404. package/src/scripts/installed_layer_report.ts +103 -0
  405. package/src/scripts/language_mirror_hook.ts +15 -6
  406. package/src/scripts/learning_sidecar.ts +119 -8
  407. package/src/scripts/lint_deny_text.ts +419 -0
  408. package/src/scripts/lint_exit_codes.ts +262 -0
  409. package/src/scripts/lint_hook_manifest.ts +108 -0
  410. package/src/scripts/lint_major_migration_sections.ts +156 -26
  411. package/src/scripts/lint_pack_boundaries.ts +63 -5
  412. package/src/scripts/lint_roadmap_blockers.ts +78 -12
  413. package/src/scripts/lint_rule_law_section.ts +517 -0
  414. package/src/scripts/lint_skill_descriptions.ts +1 -1
  415. package/src/scripts/lint_skill_scripts_readonly.ts +1 -1
  416. package/src/scripts/lint_workflow_security.ts +161 -5
  417. package/src/scripts/mcp_server/consumer_tool_catalog.json +53 -0
  418. package/src/scripts/mcp_server/graph_tools.ts +72 -3
  419. package/src/scripts/mcp_server/prompts.ts +142 -1
  420. package/src/scripts/measure_routing_signal.ts +54 -16
  421. package/src/scripts/measure_skill_ranker_baseline.ts +515 -53
  422. package/src/scripts/measure_turn_end_gate.ts +193 -0
  423. package/src/scripts/memory_learn_hook.ts +91 -6
  424. package/src/scripts/memory_lookup.ts +1 -1
  425. package/src/scripts/model_rule_injection.ts +52 -5
  426. package/src/scripts/prepack-check.mjs +53 -0
  427. package/src/scripts/project_thin_rules.ts +34 -327
  428. package/src/scripts/release_publication.ts +13 -1
  429. package/src/scripts/report_evidence_temperature.ts +657 -0
  430. package/src/scripts/report_installed_rule_links.ts +157 -0
  431. package/src/scripts/report_invocation_surface.ts +383 -0
  432. package/src/scripts/report_label_agreement.ts +233 -0
  433. package/src/scripts/report_obligation_carriers.ts +699 -0
  434. package/src/scripts/report_obligation_mechanism.ts +230 -0
  435. package/src/scripts/report_obligation_writer_split.ts +236 -0
  436. package/src/scripts/report_single_token_triggers.ts +277 -0
  437. package/src/scripts/report_skill_menu_census.ts +208 -0
  438. package/src/scripts/report_skill_ranker_confusion.ts +442 -0
  439. package/src/scripts/report_standing_payload_by_host.ts +188 -15
  440. package/src/scripts/report_verification_record_coverage.ts +306 -0
  441. package/src/scripts/roadmap_verify_share.ts +213 -0
  442. package/src/scripts/rule_activation_census.ts +5 -2
  443. package/src/scripts/rule_trigger_eval.ts +9 -9
  444. package/src/scripts/schemas/command.schema.json +44 -0
  445. package/src/scripts/schemas/review-findings.schema.json +7 -2
  446. package/src/scripts/schemas/rule.schema.json +5 -0
  447. package/src/scripts/schemas/skill.schema.json +44 -0
  448. package/src/scripts/self_review_gate.ts +421 -17
  449. package/src/scripts/semantic_parity_census.ts +314 -0
  450. package/src/scripts/session_eol_report.ts +54 -1
  451. package/src/scripts/skill_tools/score_skill_relevance.ts +290 -25
  452. package/src/scripts/sweep_dead_scan_roots.ts +1 -1
  453. package/src/scripts/sweep_skill_ranker_signals.ts +129 -0
  454. package/src/scripts/sync_gitignore.ts +29 -235
  455. package/src/scripts/trigger_eval_grandfather.json +0 -7
  456. package/src/scripts/trigger_eval_rotation.ts +122 -27
  457. package/src/scripts/ui_conformance_probe.ts +156 -4
  458. package/src/scripts/update_prices.ts +85 -3
  459. package/src/scripts/write_bundle_digest.mjs +74 -0
  460. package/src/server/schemas/settings.ts +41 -0
  461. package/src/shared/skillRanking.ts +117 -11
  462. package/src/templates/consumer-settings/ONBOARDING.md +1 -0
  463. package/dist/cli-delegate/chunk-FXYUYU4N.js +0 -4416
  464. package/dist/cli-delegate/chunk-QJWAUMJW.js +0 -1072
  465. package/dist/cli-delegate/chunk-YDPILCOL.js +0 -152
  466. package/dist/ui/assets/index-DH1xc62v.js +0 -29
  467. package/dist/ui/assets/index-jSfMW8_t.css +0 -1
@@ -1,4 +1,23 @@
1
1
  import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
2
+ import {
3
+ DEFAULT_GITIGNORE,
4
+ DEFAULT_TEMPLATE,
5
+ LEGACY_PATTERNS,
6
+ SECTION_FOOTER,
7
+ SECTION_HEADER,
8
+ TemplateNotFoundError,
9
+ _isFile,
10
+ _splitlines,
11
+ _strip,
12
+ block_entries,
13
+ build_fresh_block,
14
+ cleanup_legacy,
15
+ find_block,
16
+ format_file,
17
+ load_template,
18
+ sync_block,
19
+ template_entries
20
+ } from "./chunk-ULQRUR23.js";
2
21
  import {
3
22
  resolvePackageRoot
4
23
  } from "./chunk-MCJYCQPF.js";
@@ -82,156 +101,7 @@ import * as fs2 from "node:fs";
82
101
  import * as path2 from "node:path";
83
102
  import process from "node:process";
84
103
  import { fileURLToPath as fileURLToPath2, pathToFileURL } from "node:url";
85
- var SECTION_HEADER = "# event4u/agent-config";
86
- var SECTION_FOOTER = "# event4u/agent-config \u2014 END";
87
- var DEFAULT_GITIGNORE = ".gitignore";
88
104
  var _HERE = fileURLToPath2(import.meta.url);
89
- var DEFAULT_TEMPLATE = path2.join(
90
- path2.dirname(_HERE),
91
- "..",
92
- "..",
93
- "src",
94
- "config",
95
- "gitignore-block.txt"
96
- );
97
- var LEGACY_PATTERNS = [
98
- ".agent-chat-history",
99
- ".agent-chat-history.bak",
100
- ".agent-chat-history.*.bak",
101
- ".agent-prices.md",
102
- ".council-tmp/",
103
- // 2.x intermediate: prices cache lived directly under agents/ before
104
- // consolidating under agents/runtime/.
105
- "agents/.agent-prices.md",
106
- // Budget history JSONLs — previously listed explicitly at project
107
- // root or under agents/; now covered by the /agents/runtime/
108
- // catch-all in the managed block.
109
- ".augment-budget-history.jsonl",
110
- ".rule-budget-history.jsonl",
111
- "agents/.augment-budget-history.jsonl",
112
- "agents/.rule-budget-history.jsonl"
113
- ];
114
- function _strip(ln) {
115
- return ln.replace(/\n+$/, "").replace(/\s+$/, "");
116
- }
117
- function _is_entry(ln) {
118
- const s = _strip(ln).replace(/^\s+/, "");
119
- return Boolean(s) && !s.startsWith("#");
120
- }
121
- var TemplateNotFoundError = class extends Error {
122
- constructor(p) {
123
- super(`template not found: ${p}`);
124
- this.name = "TemplateNotFoundError";
125
- }
126
- };
127
- function _isFile(p) {
128
- try {
129
- return fs2.statSync(p).isFile();
130
- } catch {
131
- return false;
132
- }
133
- }
134
- function _splitlines(text) {
135
- if (text === "") return [];
136
- const parts = text.split(/\r\n|\r|\n/);
137
- if (parts.length > 0 && parts[parts.length - 1] === "") parts.pop();
138
- return parts;
139
- }
140
- function load_template(p) {
141
- if (!_isFile(p)) {
142
- throw new TemplateNotFoundError(p);
143
- }
144
- const text = fs2.readFileSync(p, "utf-8");
145
- return _splitlines(text).map(_strip);
146
- }
147
- function find_block(lines) {
148
- for (let i = 0; i < lines.length; i += 1) {
149
- if (_strip(lines[i]) === SECTION_HEADER) {
150
- const start = i;
151
- for (let j = i + 1; j < lines.length; j += 1) {
152
- if (_strip(lines[j]) === SECTION_FOOTER) {
153
- return [start, j + 1];
154
- }
155
- }
156
- let end = lines.length;
157
- for (let j = i + 1; j < lines.length; j += 1) {
158
- const s = _strip(lines[j]).replace(/^\s+/, "");
159
- if (s.startsWith("#") && !s.startsWith("# Agent config") && s !== SECTION_HEADER) {
160
- end = j;
161
- while (end > i + 1 && _strip(lines[end - 1]) === "") {
162
- end -= 1;
163
- }
164
- break;
165
- }
166
- }
167
- return [start, end];
168
- }
169
- }
170
- return null;
171
- }
172
- function block_entries(block_lines) {
173
- return block_lines.filter((ln) => _is_entry(ln)).map((ln) => _strip(ln).replace(/^\s+/, ""));
174
- }
175
- function template_entries(template_lines) {
176
- return template_lines.filter((ln) => _is_entry(ln)).map((ln) => ln.replace(/^\s+/, ""));
177
- }
178
- function build_fresh_block(template_lines) {
179
- return [SECTION_HEADER, ...template_lines, SECTION_FOOTER];
180
- }
181
- function sync_block(existing_lines, template_lines, options = {}) {
182
- const replace = options.replace ?? false;
183
- const loc = find_block(existing_lines);
184
- const fresh = build_fresh_block(template_lines);
185
- if (loc === null) {
186
- const newLines = [...existing_lines];
187
- if (newLines.length > 0 && _strip(newLines[newLines.length - 1]) !== "") {
188
- newLines.push("");
189
- }
190
- newLines.push(...fresh);
191
- return [newLines, template_entries(template_lines)];
192
- }
193
- const [start, end] = loc;
194
- const head = existing_lines.slice(0, start);
195
- let block = existing_lines.slice(start, end);
196
- const tail = existing_lines.slice(end);
197
- if (replace) {
198
- const existing = new Set(block_entries(block));
199
- const added = template_entries(template_lines).filter((e) => !existing.has(e));
200
- return [[...head, ...fresh, ...tail], added];
201
- }
202
- const existing_entries = new Set(block_entries(block));
203
- const missing = template_entries(template_lines).filter((e) => !existing_entries.has(e));
204
- if (missing.length === 0) {
205
- return [[...existing_lines], []];
206
- }
207
- let insert_at;
208
- if (block.length > 0 && _strip(block[block.length - 1]) === SECTION_FOOTER) {
209
- insert_at = block.length - 1;
210
- } else {
211
- block = [...block, SECTION_FOOTER];
212
- insert_at = block.length - 1;
213
- }
214
- const new_block = [...block.slice(0, insert_at), ...missing, ...block.slice(insert_at)];
215
- return [[...head, ...new_block, ...tail], missing];
216
- }
217
- function cleanup_legacy(lines) {
218
- const legacy = new Set(LEGACY_PATTERNS);
219
- const kept = [];
220
- const removed = [];
221
- for (const ln of lines) {
222
- const s = _strip(ln).replace(/^\s+/, "");
223
- if (legacy.has(s) || s.startsWith("/") && legacy.has(s.slice(1))) {
224
- removed.push(s);
225
- continue;
226
- }
227
- kept.push(ln);
228
- }
229
- return [kept, removed];
230
- }
231
- function format_file(lines) {
232
- const text = lines.join("\n");
233
- return text.replace(/\n+$/, "") + "\n";
234
- }
235
105
  function render_diff(old_text, new_text, p) {
236
106
  return unified_diff(
237
107
  _splitlinesKeepends(old_text),
@@ -591,7 +461,7 @@ var DEFAULT_TEMPLATE2 = path3.join(
591
461
  function _strip2(ln) {
592
462
  return ln.replace(/\n+$/, "").replace(/\s+$/, "");
593
463
  }
594
- function _is_entry2(ln) {
464
+ function _is_entry(ln) {
595
465
  const s = _strip2(ln).replace(/^\s+/, "");
596
466
  return Boolean(s) && !s.startsWith("#");
597
467
  }
@@ -635,10 +505,10 @@ function find_block2(lines) {
635
505
  return null;
636
506
  }
637
507
  function block_entries2(block_lines) {
638
- return block_lines.filter((ln) => _is_entry2(ln)).map((ln) => _strip2(ln).replace(/^\s+/, ""));
508
+ return block_lines.filter((ln) => _is_entry(ln)).map((ln) => _strip2(ln).replace(/^\s+/, ""));
639
509
  }
640
510
  function template_entries2(template_lines) {
641
- return template_lines.filter((ln) => _is_entry2(ln)).map((ln) => ln.replace(/^\s+/, ""));
511
+ return template_lines.filter((ln) => _is_entry(ln)).map((ln) => ln.replace(/^\s+/, ""));
642
512
  }
643
513
  function build_fresh_block2(template_lines) {
644
514
  return [SECTION_HEADER2, ...template_lines, SECTION_FOOTER2];
@@ -0,0 +1,191 @@
1
+ import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
2
+
3
+ // src/agent-src/scripts/deferral_carry.ts
4
+ import * as fs from "node:fs";
5
+ import * as path from "node:path";
6
+ var DEFERRED_RESOLUTION_RE = /<!--\s*deferred-resolution:\s*(carried-to|merged-into)\s*=\s*([A-Za-z0-9._-]+)\s*-->/;
7
+ var DEFERRED_STEP_RE = /^[ \t]*[-*][ \t]+\[~\][ \t]*(.*)$/;
8
+ var BLOCK_END_RE = /^[ \t]*[-*][ \t]+\[[ xX~-]\]|^#{1,6}[ \t]/;
9
+ var BLOCKED_BY_RE = /blocked-by:\s*([A-Za-z0-9._-]+)/g;
10
+ var BLOCKER_HEAD_RE = /^###[ \t]+blocker:[ \t]*(.+?)[ \t]*$/i;
11
+ var STATUS_LINE_RE = /^([ \t]*-[ \t]+\*\*Status:\*\*[ \t]*)(.*)$/;
12
+ var AC_HEADING_RE = /^##[ \t]+acceptance/i;
13
+ var OWNER_LINE_RE = /^[ \t]*-[ \t]+\*\*Owner:\*\*[ \t]*`?([A-Za-z]+)/;
14
+ var AGENT_SIDE_OWNERS = /* @__PURE__ */ new Set(["implementer", "council", "agent", "ai"]);
15
+ var LIGHTWEIGHT_LINE_BUDGET = 500;
16
+ var DISPOSITION_DIRS = ["", "later", "archive", "skipped"];
17
+ function _bareSteps(lines) {
18
+ const out = [];
19
+ let inAcceptance = false;
20
+ for (let i = 0; i < lines.length; i++) {
21
+ const line = lines[i];
22
+ if (/^##[ \t]/.test(line)) inAcceptance = AC_HEADING_RE.test(line);
23
+ const m = DEFERRED_STEP_RE.exec(line);
24
+ if (m === null) continue;
25
+ let end = i + 1;
26
+ while (end < lines.length && !BLOCK_END_RE.test(lines[end])) end++;
27
+ const raw = lines.slice(i, end);
28
+ if (DEFERRED_RESOLUTION_RE.test(raw.join("\n"))) continue;
29
+ while (raw.length > 1 && raw[raw.length - 1].trim() === "") raw.pop();
30
+ const indent = /^[ \t]*/.exec(line)[0].length;
31
+ const block = raw.map((l) => l.slice(0, indent).trim() === "" ? l.slice(indent) : l);
32
+ const ids = /* @__PURE__ */ new Set();
33
+ for (const b of raw) for (const hit of b.matchAll(BLOCKED_BY_RE)) ids.add(hit[1]);
34
+ out.push({ line: i, block, isAcceptance: inAcceptance, blockerIds: [...ids] });
35
+ }
36
+ return out;
37
+ }
38
+ function _blockerSpans(lines) {
39
+ const start = lines.findIndex((l) => /^##[ \t]+Blockers[ \t]*$/i.test(l));
40
+ if (start === -1) return [];
41
+ let sectionEnd = lines.length;
42
+ for (let i = start + 1; i < lines.length; i++) {
43
+ if (/^##[ \t]+\S/.test(lines[i])) {
44
+ sectionEnd = i;
45
+ break;
46
+ }
47
+ }
48
+ const spans = [];
49
+ for (let i = start + 1; i < sectionEnd; i++) {
50
+ const m = BLOCKER_HEAD_RE.exec(lines[i]);
51
+ if (m === null) continue;
52
+ let end = i + 1;
53
+ while (end < sectionEnd && !/^###?[ \t]/.test(lines[end])) end++;
54
+ const status = lines.slice(i, end).map((l) => STATUS_LINE_RE.exec(l)).find((s) => s !== null);
55
+ const value = (status?.[2] ?? "open").trim().toLowerCase();
56
+ const owner = lines.slice(i, end).map((l) => OWNER_LINE_RE.exec(l)).find((o) => o !== null);
57
+ spans.push({
58
+ id: m[1].trim(),
59
+ start: i,
60
+ end,
61
+ open: !/^resolved\b/.test(value),
62
+ ownerDependent: !AGENT_SIDE_OWNERS.has((owner?.[1] ?? "").toLowerCase())
63
+ });
64
+ }
65
+ return spans;
66
+ }
67
+ function _plusDays(date, days) {
68
+ const d = /* @__PURE__ */ new Date(`${date}T00:00:00Z`);
69
+ d.setUTCDate(d.getUTCDate() + days);
70
+ return d.toISOString().slice(0, 10);
71
+ }
72
+ function nextCarrySlug(root, sourceSlug) {
73
+ const base = sourceSlug.replace(/-carried(-\d+)?$/, "");
74
+ for (let n = 1; ; n++) {
75
+ const slug = n === 1 ? `${base}-carried` : `${base}-carried-${n}`;
76
+ const taken = DISPOSITION_DIRS.some(
77
+ (d) => fs.existsSync(path.join(root, "agents", "roadmaps", d, `${slug}.md`))
78
+ );
79
+ if (!taken) return slug;
80
+ }
81
+ }
82
+ function _title(sourceText, sourceSlug) {
83
+ const h1 = /^#[ \t]+(.+?)[ \t]*$/m.exec(sourceText.replace(/^---\n[\s\S]*?\n---\n/, ""));
84
+ return h1 !== null ? h1[1] : sourceSlug.replace(/-/g, " ");
85
+ }
86
+ function planCarry(root, rel, text, openBlockerIds, date, ownerDecision = "ask") {
87
+ const sourceSlug = rel.replace(/\.md$/, "");
88
+ const lines = text.split("\n");
89
+ const steps = _bareSteps(lines);
90
+ if (steps.length === 0) return { refused: "no bare `[~]` step to carry" };
91
+ const named = new Set(steps.flatMap((s) => s.blockerIds));
92
+ const stranded = openBlockerIds.filter((id) => !named.has(id));
93
+ if (stranded.length > 0) {
94
+ return {
95
+ refused: `open blocker(s) no deferred step names (${stranded.join(", ")}) \u2014 carrying around them would not let this roadmap archive`
96
+ };
97
+ }
98
+ const moved = _blockerSpans(lines).filter((b) => b.open && named.has(b.id));
99
+ const ownerBlockers = moved.filter((b) => b.ownerDependent).map((b) => b.id);
100
+ const parked = ownerBlockers.length > 0 && ownerDecision === "later";
101
+ const destSlug = nextCarrySlug(root, sourceSlug);
102
+ const annotation = `<!-- deferred-resolution: carried-to=${destSlug} -->`;
103
+ const out = [...lines];
104
+ for (const b of moved) {
105
+ for (let i = b.start; i < b.end; i++) {
106
+ const s = STATUS_LINE_RE.exec(out[i]);
107
+ if (s === null) continue;
108
+ out[i] = `${s[1]}resolved \u2014 carried, still open, to \`${destSlug}\` with the steps it blocks (was: ${s[2].trim()})`;
109
+ break;
110
+ }
111
+ }
112
+ for (const s of steps) out[s.line] = `${out[s.line]} ${annotation}`;
113
+ const toOpen = (block) => block.map((l, i) => i === 0 ? l.replace(/\[~\]/, "[ ]") : l).join("\n");
114
+ const phaseSteps = steps.filter((s) => !s.isAcceptance).map((s) => toOpen(s.block));
115
+ const acSteps = steps.filter((s) => s.isAcceptance).map((s) => toOpen(s.block));
116
+ const phaseName = `Deferred steps carried from ${sourceSlug}`;
117
+ const blockerText = moved.map((b) => lines.slice(b.start, b.end).join("\n").trimEnd());
118
+ const body = [
119
+ `# ${_title(text, sourceSlug)} \u2014 carried`,
120
+ "",
121
+ `> **Source:** carried by the archival sweep on ${date} from`,
122
+ `> [\`${sourceSlug}\`](${parked ? "../" : ""}archive/${sourceSlug}.md), which closed every other step.`,
123
+ "> Each step below was `[~]` there and is restated verbatim as open work, so",
124
+ "> archiving the parent buried nothing. Blockers the steps name moved with them.",
125
+ "",
126
+ "## Goal",
127
+ "",
128
+ `Every step ${sourceSlug} deferred is either done here or explicitly disposed`,
129
+ "of \u2014 a step that still cannot run is re-deferred with its reason, never",
130
+ "left to read as finished.",
131
+ "",
132
+ `## Phase 1 \u2014 ${phaseName}`,
133
+ "",
134
+ phaseSteps.length > 0 ? phaseSteps.join("\n") : "- [ ] **1.1 Close the carried acceptance criteria below.** The parent deferred\n only acceptance criteria; this step is done when each is checked or disposed of.\n verify: every criterion under `## Acceptance Criteria` is `[x]` or `[-]`",
135
+ "",
136
+ ...blockerText.length > 0 ? ["## Blockers", "", blockerText.join("\n\n"), ""] : [],
137
+ "## Risk Register",
138
+ `<!-- risk-review: v1 | reviewed: ${date} | reviewer: archive-sweep/auto-carry -->`,
139
+ "",
140
+ "| Rank | Item | Risk type | Description | Mitigation | Anchored under |",
141
+ "|------|------|-----------|-------------|------------|----------------|",
142
+ `| 1 | Carried steps stay blocked indefinitely | implementation | A step deferred once for elapsed time or a decision can sit here as long as it sat in the parent | It now counts as open work in the dashboard instead of as 100 %, and its blocker is listed where the estate gates count it | Phase 1 \u2014 ${phaseName} |`,
143
+ "",
144
+ "## Acceptance Criteria",
145
+ "",
146
+ acSteps.length > 0 ? acSteps.join("\n") : `- [ ] AC-1 \u2014 No step carried from \`${sourceSlug}\` is still \`[ ]\` without a recorded disposition.`,
147
+ ""
148
+ ].join("\n");
149
+ const complexity = body.split("\n").length > LIGHTWEIGHT_LINE_BUDGET ? "structural" : "lightweight";
150
+ const ids = ownerBlockers.join(", ");
151
+ const parkedKeys = parked ? `entry_condition:
152
+ what: the owner resolves blocker(s) ${ids}
153
+ when: whenever the owner takes the next step
154
+ who: owner
155
+ review_by: ${_plusDays(date, 90)}
156
+ estate_growth_exempt: >-
157
+ Owner-chosen archive of ${sourceSlug}: its deferred steps wait on owner
158
+ blocker(s) ${ids} and are parked here instead of left active. The parent
159
+ is archived in the same change, so the active count drops by one.
160
+ ` : "";
161
+ const destText = `---
162
+ complexity: ${complexity}
163
+ status: ${parked ? "later" : "ready"}
164
+ execution:
165
+ mode: phase-checkpoints
166
+ parent_roadmap: ${sourceSlug}
167
+ ${parkedKeys}---
168
+ ${body}`;
169
+ const destRel = parked ? `agents/roadmaps/later/${destSlug}.md` : `agents/roadmaps/${destSlug}.md`;
170
+ return {
171
+ plan: {
172
+ destSlug,
173
+ destRel,
174
+ destText,
175
+ sourceText: out.join("\n"),
176
+ carried: steps.length,
177
+ movedBlockers: moved.map((b) => b.id),
178
+ ownerBlockers,
179
+ firstStep: steps[0].block.join("\n"),
180
+ parked
181
+ }
182
+ };
183
+ }
184
+
185
+ export {
186
+ DEFERRED_RESOLUTION_RE,
187
+ DEFERRED_STEP_RE,
188
+ BLOCK_END_RE,
189
+ nextCarrySlug,
190
+ planCarry
191
+ };
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-MCJYCQPF.js";
5
5
  import {
6
6
  resolve_project_root
7
- } from "./chunk-FC75PGJE.js";
7
+ } from "./chunk-JY2I2DXV.js";
8
8
 
9
9
  // src/scripts/_cli/cmd_migrate.ts
10
10
  import { spawnSync } from "node:child_process";
@@ -0,0 +1,108 @@
1
+ import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
2
+
3
+ // src/scripts/_lib/json_merge.ts
4
+ function isPlainObject(v) {
5
+ return typeof v === "object" && v !== null && !Array.isArray(v);
6
+ }
7
+ function deepcopy(v) {
8
+ if (v === null || typeof v !== "object") return v;
9
+ if (Array.isArray(v)) return v.map((x) => deepcopy(x));
10
+ const out = {};
11
+ for (const k of Object.keys(v)) {
12
+ out[k] = deepcopy(v[k]);
13
+ }
14
+ return out;
15
+ }
16
+ function deepMerge(base, overlay) {
17
+ const result = deepcopy(base);
18
+ for (const key of Object.keys(overlay)) {
19
+ const value = overlay[key];
20
+ if (Object.prototype.hasOwnProperty.call(result, key) && isPlainObject(result[key]) && isPlainObject(value)) {
21
+ result[key] = deepMerge(result[key], value);
22
+ } else {
23
+ result[key] = deepcopy(value);
24
+ }
25
+ }
26
+ return result;
27
+ }
28
+ function jsonEqual(a, b) {
29
+ if (a === b) return true;
30
+ if (typeof a !== typeof b) return false;
31
+ if (Array.isArray(a) || Array.isArray(b)) {
32
+ if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;
33
+ return a.every((v, i) => jsonEqual(v, b[i]));
34
+ }
35
+ if (isPlainObject(a) && isPlainObject(b)) {
36
+ const ka = Object.keys(a);
37
+ const kb = Object.keys(b);
38
+ if (ka.length !== kb.length) return false;
39
+ return ka.every(
40
+ (k) => Object.prototype.hasOwnProperty.call(b, k) && jsonEqual(a[k], b[k])
41
+ );
42
+ }
43
+ return false;
44
+ }
45
+
46
+ // src/scripts/_lib/host_hook_merge.ts
47
+ var HOOK_SIGNATURES = {
48
+ "~/.augment/settings.json": "augment-dispatcher.sh",
49
+ ".cursor/hooks.json": "dispatch:hook --platform cursor",
50
+ "~/.cursor/hooks.json": "cursor-dispatcher.sh",
51
+ ".windsurf/hooks.json": "dispatch:hook --platform windsurf",
52
+ "~/.codeium/windsurf/hooks.json": "windsurf-dispatcher.sh",
53
+ ".gemini/settings.json": "dispatch:hook --platform gemini",
54
+ "~/.gemini/settings.json": "gemini-dispatcher.sh"
55
+ };
56
+ function entryCommands(entry) {
57
+ if (!isPlainObject(entry)) return [];
58
+ const out = [];
59
+ if (typeof entry["command"] === "string") out.push(entry["command"]);
60
+ const nested = entry["hooks"];
61
+ if (Array.isArray(nested)) {
62
+ for (const inner of nested) {
63
+ if (isPlainObject(inner) && typeof inner["command"] === "string") {
64
+ out.push(inner["command"]);
65
+ }
66
+ }
67
+ }
68
+ return out;
69
+ }
70
+ function isManagedEntry(entry, signature) {
71
+ if (signature === "") return false;
72
+ return entryCommands(entry).some((cmd) => cmd.includes(signature));
73
+ }
74
+ function mergeEventEntries(existing, incoming, signature) {
75
+ const kept = existing.filter((entry) => !isManagedEntry(entry, signature));
76
+ return [...kept.map((e) => deepcopy(e)), ...incoming.map((e) => deepcopy(e))];
77
+ }
78
+ function mergeHookEvents(existingHooks, patchHooks, signature) {
79
+ if (!isPlainObject(existingHooks)) return deepcopy(patchHooks);
80
+ const out = deepcopy(existingHooks);
81
+ for (const event of Object.keys(patchHooks)) {
82
+ const incoming = patchHooks[event];
83
+ const current = out[event];
84
+ if (!Array.isArray(incoming)) {
85
+ out[event] = deepcopy(incoming);
86
+ continue;
87
+ }
88
+ out[event] = mergeEventEntries(Array.isArray(current) ? current : [], incoming, signature);
89
+ }
90
+ return out;
91
+ }
92
+ function mergeHostConfig(existing, patch, signature, deepMergeFn) {
93
+ const merged = deepMergeFn(existing, patch);
94
+ const patchHooks = patch["hooks"];
95
+ if (signature === "" || !isPlainObject(patchHooks)) return merged;
96
+ merged["hooks"] = mergeHookEvents(existing["hooks"], patchHooks, signature);
97
+ return merged;
98
+ }
99
+
100
+ export {
101
+ isPlainObject,
102
+ deepMerge,
103
+ jsonEqual,
104
+ HOOK_SIGNATURES,
105
+ entryCommands,
106
+ isManagedEntry,
107
+ mergeHostConfig
108
+ };