@event4u/agent-config 16.4.0 → 17.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 (1052) hide show
  1. package/.augment-plugin/marketplace.json +3 -3
  2. package/.augment-plugin/plugin.json +1 -1
  3. package/.claude-plugin/marketplace.json +2 -2
  4. package/.claude-plugin/skills/install-agent-config/SKILL.md +4 -4
  5. package/CHANGELOG.md +483 -669
  6. package/CONTRIBUTING.md +47 -0
  7. package/README.md +25 -25
  8. package/dist/agent-src/commands/{design.md → agent-design.md} +11 -7
  9. package/dist/agent-src/commands/agents/init.md +66 -3
  10. package/dist/agent-src/commands/agents/user/init.md +3 -0
  11. package/dist/agent-src/commands/{optimize/deep.md → analyze/and-optimize.md} +72 -33
  12. package/dist/agent-src/commands/analyze/inbox.md +168 -37
  13. package/dist/agent-src/commands/analyze/pr.md +144 -0
  14. package/dist/agent-src/commands/analyze/{repo.md → reference.md} +85 -14
  15. package/dist/agent-src/commands/analyze/roadmap-repos.md +19 -10
  16. package/dist/agent-src/commands/analyze.md +28 -12
  17. package/dist/agent-src/commands/audit.md +115 -0
  18. package/dist/agent-src/commands/brand/review.md +13 -2
  19. package/dist/agent-src/commands/brand/tokens.md +3 -3
  20. package/dist/agent-src/commands/brand/voice.md +8 -5
  21. package/dist/agent-src/commands/brand.md +2 -2
  22. package/dist/agent-src/commands/challenge-me/closure.md +25 -0
  23. package/dist/agent-src/commands/design-system/import.md +8 -3
  24. package/dist/agent-src/commands/design-system/sync.md +98 -0
  25. package/dist/agent-src/commands/design-system.md +6 -1
  26. package/dist/agent-src/commands/evals/analyze.json +44 -0
  27. package/dist/agent-src/commands/evals/audit.json +12 -0
  28. package/dist/agent-src/commands/evals/retro.json +12 -0
  29. package/dist/agent-src/commands/fix/ci.md +10 -8
  30. package/dist/agent-src/commands/ghostwriter/write.md +22 -0
  31. package/dist/agent-src/commands/memory/learn-low-impact.md +70 -83
  32. package/dist/agent-src/commands/memory/propose.md +12 -0
  33. package/dist/agent-src/commands/memory.md +1 -1
  34. package/dist/agent-src/commands/optimize.md +4 -3
  35. package/dist/agent-src/commands/post-as/me.md +18 -0
  36. package/dist/agent-src/commands/pr/create.md +17 -342
  37. package/dist/agent-src/commands/pr/merge.md +129 -368
  38. package/dist/agent-src/commands/retro.md +121 -0
  39. package/dist/agent-src/commands/review/routing.md +1 -1
  40. package/dist/agent-src/commands/roadmap/next.md +4 -1
  41. package/dist/agent-src/commands/roadmap/process-full.md +46 -333
  42. package/dist/agent-src/commands/roadmap/triage-parked.md +6 -2
  43. package/dist/agent-src/commands/team-knowledge/consolidate.md +2 -2
  44. package/dist/agent-src/commands/team-knowledge.md +1 -1
  45. package/dist/agent-src/commands/threat-model.md +1 -1
  46. package/dist/agent-src/commands/upstream-contribute.md +91 -101
  47. package/dist/agent-src/commands/worktree/cleanup.md +18 -11
  48. package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +54 -0
  49. package/dist/agent-src/contexts/execution/analysis-loop.md +137 -0
  50. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +3 -3
  51. package/dist/agent-src/contexts/execution/decision-closure-execution.md +1 -1
  52. package/dist/agent-src/contexts/execution/host-capability-manifest.md +6 -0
  53. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +11 -4
  54. package/dist/agent-src/contexts/execution/pr-create-branches-content.md +250 -0
  55. package/dist/agent-src/contexts/execution/pr-create-branches-freshness.md +150 -0
  56. package/dist/agent-src/contexts/execution/pr-merge-queue.md +287 -0
  57. package/dist/agent-src/contexts/execution/pr-merge-sync.md +276 -0
  58. package/dist/agent-src/contexts/execution/pr-merge-trust-boundary.md +69 -0
  59. package/dist/agent-src/contexts/execution/process-full-all.md +233 -0
  60. package/dist/agent-src/contexts/execution/process-full-delivery.md +231 -0
  61. package/dist/agent-src/contexts/execution/roadmap-execution-contract-branches.md +42 -0
  62. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -35
  63. package/dist/agent-src/contexts/execution/roadmap-process-loop-close.md +235 -0
  64. package/dist/agent-src/contexts/execution/roadmap-process-loop-prescan.md +216 -0
  65. package/dist/agent-src/contexts/execution/roadmap-process-loop-run.md +253 -0
  66. package/dist/agent-src/contexts/execution/roadmap-process-loop-set.md +212 -0
  67. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +25 -864
  68. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +14 -2
  69. package/dist/agent-src/contexts/execution/subagent-steering.md +65 -8
  70. package/dist/agent-src/contexts/model-recommendations.md +5 -5
  71. package/dist/agent-src/contexts/subagent-configuration.md +1 -1
  72. package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +4 -3
  73. package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +11 -5
  74. package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
  75. package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
  76. package/dist/agent-src/guidelines/design-antipatterns.md +6 -1
  77. package/dist/agent-src/guidelines/design-asset-discipline.md +17 -0
  78. package/dist/agent-src/guidelines/design-fidelity-routing.md +1 -0
  79. package/dist/agent-src/guidelines/php/api-design.md +10 -1
  80. package/dist/agent-src/rules/brand-source-of-truth.md +7 -6
  81. package/dist/agent-src/rules/code-provenance.md +1 -1
  82. package/dist/agent-src/rules/context-hygiene.md +0 -1
  83. package/dist/agent-src/rules/design-fidelity.md +12 -13
  84. package/dist/agent-src/rules/external-reference-deep-dive.md +2 -2
  85. package/dist/agent-src/rules/fix-what-you-see.md +1 -1
  86. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +14 -15
  87. package/dist/agent-src/rules/missing-skill-recovery.md +12 -11
  88. package/dist/agent-src/rules/neighbour-precedence.md +1 -1
  89. package/dist/agent-src/rules/recurring-criticism.md +1 -1
  90. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -2
  91. package/dist/agent-src/rules/self-repair-loop.md +2 -2
  92. package/dist/agent-src/rules/token-budget-discipline.md +2 -2
  93. package/dist/agent-src/scripts/dashboard_mode.ts +4 -1
  94. package/dist/agent-src/scripts/roadmap_age.ts +175 -0
  95. package/dist/agent-src/scripts/update_roadmap_progress.ts +10 -2
  96. package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -3
  97. package/dist/agent-src/skills/accessibility-auditor/data/aria-patterns.csv +2 -0
  98. package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +3 -3
  99. package/dist/agent-src/skills/agent-security-review/SKILL.md +2 -2
  100. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +12 -4
  101. package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +7 -0
  102. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +11 -1
  103. package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +7 -0
  104. package/dist/agent-src/skills/ai-council/references/execution-modes.md +7 -0
  105. package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +19 -0
  106. package/dist/agent-src/skills/ai-council/references/procedure.md +7 -0
  107. package/dist/agent-src/skills/api-design/SKILL.md +2 -2
  108. package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
  109. package/dist/agent-src/skills/authz-review/SKILL.md +5 -3
  110. package/dist/agent-src/skills/blade-ui/SKILL.md +2 -2
  111. package/dist/agent-src/skills/brand/SKILL.md +7 -3
  112. package/dist/agent-src/skills/brand-asset-generation/SKILL.md +13 -6
  113. package/dist/agent-src/skills/brand-audit/SKILL.md +2 -1
  114. package/dist/agent-src/skills/brand-identity/SKILL.md +5 -4
  115. package/dist/agent-src/skills/brand-strategy/SKILL.md +5 -4
  116. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +18 -39
  117. package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +2 -2
  118. package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +2 -2
  119. package/dist/agent-src/skills/canvas-design/SKILL.md +16 -4
  120. package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
  121. package/dist/agent-src/skills/composer-packages/SKILL.md +18 -0
  122. package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
  123. package/dist/agent-src/skills/content-funnel-design/SKILL.md +8 -1
  124. package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
  125. package/dist/agent-src/skills/context-document/SKILL.md +2 -2
  126. package/dist/agent-src/skills/corpus-grounding/SKILL.md +6 -6
  127. package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +13 -11
  128. package/dist/agent-src/skills/corpus-grounding/scripts/ground.mjs +1706 -0
  129. package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +7 -1
  130. package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
  131. package/dist/agent-src/skills/data-flow-mapper/SKILL.md +5 -2
  132. package/dist/agent-src/skills/database/SKILL.md +5 -4
  133. package/dist/agent-src/skills/decision-record/references/weighted-matrix.md +12 -0
  134. package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +1 -1
  135. package/dist/agent-src/skills/dependency-upgrade/SKILL.md +61 -11
  136. package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
  137. package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
  138. package/dist/agent-src/skills/design-intelligence/data/landing.csv +1 -1
  139. package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +10 -2
  140. package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
  141. package/dist/agent-src/skills/design-intelligence/references/design-rules-checklist.md +4 -3
  142. package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +25 -22
  143. package/dist/agent-src/skills/{wireframe → design-review}/references/story-beat-ledger.schema.json +1 -1
  144. package/dist/agent-src/skills/design-review/references/verification-automation.md +11 -3
  145. package/dist/agent-src/skills/design-system-capture/SKILL.md +15 -10
  146. package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -5
  147. package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +2 -2
  148. package/dist/agent-src/skills/design-tokens/SKILL.md +23 -23
  149. package/dist/agent-src/skills/design-tokens/scripts/tokens.mjs +1037 -0
  150. package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +336 -13
  151. package/dist/agent-src/skills/design-tokens/templates/design-tokens-starter.json +52 -53
  152. package/dist/agent-src/skills/docker/SKILL.md +1 -1
  153. package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
  154. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +14 -276
  155. package/dist/agent-src/skills/existing-ui-audit/procedure.yaml +44 -0
  156. package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +1 -1
  157. package/dist/agent-src/skills/existing-ui-audit/references/steps/00-inspect-stack-and-input.md +4 -0
  158. package/dist/agent-src/skills/existing-ui-audit/references/steps/01-enumerate-components.md +26 -0
  159. package/dist/agent-src/skills/existing-ui-audit/references/steps/01b-detect-component-taxonomy.md +7 -0
  160. package/dist/agent-src/skills/existing-ui-audit/references/steps/02-identify-design-system.md +12 -0
  161. package/dist/agent-src/skills/existing-ui-audit/references/steps/03-detect-design-tokens.md +35 -0
  162. package/dist/agent-src/skills/existing-ui-audit/references/steps/04-detect-shadcn-inventory.md +13 -0
  163. package/dist/agent-src/skills/existing-ui-audit/references/steps/04b-live-storybook-read.md +26 -0
  164. package/dist/agent-src/skills/existing-ui-audit/references/steps/05-list-reusable-patterns.md +14 -0
  165. package/dist/agent-src/skills/existing-ui-audit/references/steps/06-match-candidates.md +52 -0
  166. package/dist/agent-src/skills/existing-ui-audit/references/steps/07-greenfield-branch.md +29 -0
  167. package/dist/agent-src/skills/existing-ui-audit/references/steps/08-a11y-baseline.md +40 -0
  168. package/dist/agent-src/skills/existing-ui-audit/references/steps/09-validate-and-write.md +5 -0
  169. package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
  170. package/dist/agent-src/skills/fe-design/references/design-patterns.md +65 -4
  171. package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +1 -1
  172. package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
  173. package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +6 -6
  174. package/dist/agent-src/skills/flux/SKILL.md +1 -1
  175. package/dist/agent-src/skills/form-handler/SKILL.md +15 -2
  176. package/dist/agent-src/skills/frontend-render-security/SKILL.md +9 -0
  177. package/dist/agent-src/skills/git-workflow/SKILL.md +2 -2
  178. package/dist/agent-src/skills/git-workflow/references/branch-update.md +7 -0
  179. package/dist/agent-src/skills/git-workflow/references/commit-subject.md +12 -0
  180. package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +10 -0
  181. package/dist/agent-src/skills/gtm-launch/SKILL.md +8 -1
  182. package/dist/agent-src/skills/html-deck/SKILL.md +7 -2
  183. package/dist/agent-src/skills/humanizer/SKILL.md +16 -3
  184. package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +13 -1
  185. package/dist/agent-src/skills/humanizer/references/fixtures.md +8 -0
  186. package/dist/agent-src/skills/iconography/SKILL.md +4 -2
  187. package/dist/agent-src/skills/image-provider-routing/SKILL.md +16 -5
  188. package/dist/agent-src/skills/js-library-packaging/SKILL.md +5 -4
  189. package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.mjs +197 -0
  190. package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
  191. package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -2
  192. package/dist/agent-src/skills/launch-readiness/SKILL.md +18 -22
  193. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +5 -5
  194. package/dist/agent-src/skills/livewire/SKILL.md +1 -1
  195. package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +18 -0
  196. package/dist/agent-src/skills/logo-generation/SKILL.md +21 -11
  197. package/dist/agent-src/skills/market-entry-analysis/SKILL.md +6 -1
  198. package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
  199. package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
  200. package/dist/agent-src/skills/messaging-architecture/SKILL.md +8 -1
  201. package/dist/agent-src/skills/motion-choreographer/SKILL.md +2 -2
  202. package/dist/agent-src/skills/playwright-testing/SKILL.md +2 -0
  203. package/dist/agent-src/skills/positioning-strategy/SKILL.md +10 -2
  204. package/dist/agent-src/skills/prediction-pool-optimizer/references/ev-fixtures.md +13 -0
  205. package/dist/agent-src/skills/prediction-pool-optimizer/references/odds-and-bonus.md +7 -0
  206. package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
  207. package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -1
  208. package/dist/agent-src/skills/project-analyzer/SKILL.md +14 -75
  209. package/dist/agent-src/skills/project-analyzer/procedure.yaml +39 -0
  210. package/dist/agent-src/skills/project-analyzer/references/steps/01-project-overview.md +9 -0
  211. package/dist/agent-src/skills/project-analyzer/references/steps/02-architecture.md +7 -0
  212. package/dist/agent-src/skills/project-analyzer/references/steps/03-data-layer.md +6 -0
  213. package/dist/agent-src/skills/project-analyzer/references/steps/04-business-domains.md +7 -0
  214. package/dist/agent-src/skills/project-analyzer/references/steps/05-api-surface.md +6 -0
  215. package/dist/agent-src/skills/project-analyzer/references/steps/06-service-map.md +6 -0
  216. package/dist/agent-src/skills/project-analyzer/references/steps/07-module-inventory.md +6 -0
  217. package/dist/agent-src/skills/project-analyzer/references/steps/08-infrastructure-and-testing.md +5 -0
  218. package/dist/agent-src/skills/project-analyzer/references/steps/09-agent-docs-audit.md +6 -0
  219. package/dist/agent-src/skills/project-analyzer/references/steps/10-gap-analysis.md +6 -0
  220. package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +10 -0
  221. package/dist/agent-src/skills/quality-tools/references/php-tools.md +13 -0
  222. package/dist/agent-src/skills/quality-tools/references/python-tools.md +11 -0
  223. package/dist/agent-src/skills/react-native-setup/SKILL.md +7 -2
  224. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +5 -1
  225. package/dist/agent-src/skills/react-shadcn-ui/references/registry.md +13 -0
  226. package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.mjs +315 -0
  227. package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +6 -6
  228. package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
  229. package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
  230. package/dist/agent-src/skills/release-comms/SKILL.md +2 -1
  231. package/dist/agent-src/skills/repomix-packer/SKILL.md +2 -2
  232. package/dist/agent-src/skills/requesting-code-review/SKILL.md +3 -3
  233. package/dist/agent-src/skills/roadmap-management/references/archival.md +3 -3
  234. package/dist/agent-src/skills/roadmap-management/references/authoring.md +9 -2
  235. package/dist/agent-src/skills/roadmap-management/references/dashboard.md +3 -3
  236. package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +3 -3
  237. package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -4
  238. package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
  239. package/dist/agent-src/skills/rule-writing/SKILL.md +1 -2
  240. package/dist/agent-src/skills/security/SKILL.md +41 -5
  241. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
  242. package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
  243. package/dist/agent-src/skills/skill-writing/SKILL.md +23 -8
  244. package/dist/agent-src/skills/skill-writing/references/section-patterns.md +19 -1
  245. package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
  246. package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
  247. package/dist/agent-src/skills/standards-from-config/SKILL.md +2 -2
  248. package/dist/agent-src/skills/storybook-workshop/SKILL.md +5 -0
  249. package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.mjs +99 -0
  250. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +13 -13
  251. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +4 -3
  252. package/dist/agent-src/skills/svg-authoring/SKILL.md +324 -0
  253. package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
  254. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +8 -3
  255. package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.mjs +482 -0
  256. package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
  257. package/dist/agent-src/skills/threat-modeling/SKILL.md +8 -1
  258. package/dist/agent-src/skills/threat-modeling/data/manifest.json +5 -2
  259. package/dist/agent-src/skills/threat-modeling/data/reasoning.csv +10 -10
  260. package/dist/agent-src/skills/threat-modeling/data/surfaces.csv +11 -10
  261. package/dist/agent-src/skills/threat-modeling/data/threats.csv +34 -20
  262. package/dist/agent-src/skills/type-design/SKILL.md +196 -0
  263. package/dist/agent-src/skills/type-design/references/font-spec.md +90 -0
  264. package/dist/agent-src/skills/type-design/references/gates.md +113 -0
  265. package/dist/agent-src/skills/type-design/references/toolchain.md +66 -0
  266. package/dist/agent-src/skills/typography-system/SKILL.md +21 -11
  267. package/dist/agent-src/skills/typography-system/references/worked-scales.md +85 -0
  268. package/dist/agent-src/skills/ui-apply-generic/SKILL.md +1 -1
  269. package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
  270. package/dist/agent-src/skills/upstream-contribute/SKILL.md +120 -125
  271. package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -0
  272. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
  273. package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +71 -2
  274. package/dist/agent-src/skills/wireframe/SKILL.md +5 -2
  275. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +16 -14
  276. package/dist/agent-src/templates/AGENTS.md +1 -1
  277. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  278. package/dist/agent-src/templates/agents/proposal.example.md +1 -1
  279. package/dist/agent-src/templates/github-workflows/advisories-daily.yml +85 -0
  280. package/dist/agent-src/templates/roadmaps.md +39 -1
  281. package/dist/agent-src/templates/scripts/check_memory.ts +2 -2
  282. package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
  283. package/dist/agent-src/templates/scripts/work_engine/cli.ts +17 -0
  284. package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
  285. package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
  286. package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
  287. package/dist/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
  288. package/dist/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
  289. package/dist/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
  290. package/dist/agent-src/templates/scripts/work_engine/state.ts +3 -0
  291. package/dist/cli/commands/uiRender.js +265 -13
  292. package/dist/cli/commands/uiRenderAsset.js +1316 -0
  293. package/dist/cli/commands/uiRenderAssetCompare.js +752 -0
  294. package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
  295. package/dist/cli/commands/uiRenderAssetGrid.js +265 -0
  296. package/dist/cli/commands/uiRenderAssetGrounds.js +323 -0
  297. package/dist/cli/commands/uiRenderAssetIsolation.js +85 -0
  298. package/dist/cli/commands/uiRenderAssetTypes.js +133 -0
  299. package/dist/cli/initRouting.js +1 -1
  300. package/dist/cli/main.js +47 -1
  301. package/dist/cli/mcp/dispatch.js +31 -9
  302. package/dist/cli/python/knowledge_ingest.js +7 -39
  303. package/dist/cli/python/workspace_secrets.js +4 -177
  304. package/dist/cli/registry.js +5 -2
  305. package/dist/cli-delegate/archive_completed_roadmaps.js +3 -2
  306. package/dist/cli-delegate/check_update_banner.js +635 -266
  307. package/dist/cli-delegate/{chunk-AED2VQGM.js → chunk-2CX7NWRB.js} +233 -437
  308. package/dist/cli-delegate/{chunk-F3QDG2GT.js → chunk-2SFOOFJJ.js} +259 -159
  309. package/dist/cli-delegate/chunk-2Y5AMLMY.js +136 -0
  310. package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
  311. package/dist/cli-delegate/{chunk-6SRJTYJS.js → chunk-4SHNERBL.js} +37 -16
  312. package/dist/cli-delegate/chunk-5VO3RTMV.js +208 -0
  313. package/dist/cli-delegate/chunk-6E2LDY4F.js +27 -0
  314. package/dist/cli-delegate/{chunk-XQTPXKFA.js → chunk-6ZD2QZMN.js} +8 -17
  315. package/dist/cli-delegate/{chunk-6V5FMA3P.js → chunk-7CEI2YPS.js} +1 -1
  316. package/dist/cli-delegate/{chunk-DMSZHXZS.js → chunk-7DRWULEQ.js} +80 -7
  317. package/dist/cli-delegate/chunk-7NXCZSDL.js +54 -0
  318. package/dist/cli-delegate/chunk-AX3U3UWJ.js +328 -0
  319. package/dist/cli-delegate/{chunk-WOKWX5PL.js → chunk-BKALSTBZ.js} +18 -3
  320. package/dist/cli-delegate/chunk-BMGUGSY6.js +103 -0
  321. package/dist/cli-delegate/chunk-BYV46VRM.js +3309 -0
  322. package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CAL76ADI.js} +4215 -682
  323. package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
  324. package/dist/cli-delegate/chunk-E6XNBVE4.js +581 -0
  325. package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-ESUNQ5XR.js} +46 -10
  326. package/dist/cli-delegate/{chunk-G5VVIZRC.js → chunk-F7HLSW6P.js} +1 -1
  327. package/dist/cli-delegate/chunk-FIEEOH5C.js +133 -0
  328. package/dist/cli-delegate/chunk-FKYZOWVD.js +719 -0
  329. package/dist/cli-delegate/chunk-GOMILC3O.js +918 -0
  330. package/dist/cli-delegate/chunk-I4KJYVPB.js +69 -0
  331. package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
  332. package/dist/cli-delegate/chunk-IROAQ77A.js +137 -0
  333. package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
  334. package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-JHMMWNJ2.js} +54 -40
  335. package/dist/cli-delegate/{chunk-WQWXGIWB.js → chunk-M6CRG5O6.js} +165 -15
  336. package/dist/cli-delegate/{chunk-PHD7OOLE.js → chunk-MQ2UDEGV.js} +14 -3
  337. package/dist/cli-delegate/chunk-NTM7G2V4.js +220 -0
  338. package/dist/cli-delegate/chunk-PV7S5DPJ.js +175 -0
  339. package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
  340. package/dist/cli-delegate/{chunk-T7XSJSUQ.js → chunk-SIOMDAKL.js} +980 -784
  341. package/dist/cli-delegate/{chunk-KR6EM23A.js → chunk-TULVDQ4L.js} +3 -48
  342. package/dist/cli-delegate/chunk-UUYEKXKR.js +20 -0
  343. package/dist/cli-delegate/{chunk-7XGD2OEU.js → chunk-UXWHY6CQ.js} +2 -1
  344. package/dist/cli-delegate/{chunk-PWX7CKMD.js → chunk-VC3ECUEK.js} +1 -1
  345. package/dist/cli-delegate/{chunk-KXXWJTDO.js → chunk-WMNYVIYX.js} +1 -1
  346. package/dist/cli-delegate/chunk-XCY5KKUC.js +181 -0
  347. package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
  348. package/dist/cli-delegate/cmd_adr_effective.js +41 -2
  349. package/dist/cli-delegate/cmd_analyze_session.js +7 -7
  350. package/dist/cli-delegate/cmd_brand_status.js +1287 -10
  351. package/dist/cli-delegate/cmd_ci_settle.js +330 -0
  352. package/dist/cli-delegate/cmd_conformance.js +669 -822
  353. package/dist/cli-delegate/cmd_doctor.js +26 -16
  354. package/dist/cli-delegate/cmd_doctor_neighbours.js +10 -7
  355. package/dist/cli-delegate/cmd_explain.js +9 -24
  356. package/dist/cli-delegate/cmd_export.js +14 -11
  357. package/dist/cli-delegate/cmd_fleet.js +5 -3
  358. package/dist/cli-delegate/cmd_git_convention.js +8 -4
  359. package/dist/cli-delegate/cmd_handoff.js +79 -242
  360. package/dist/cli-delegate/cmd_mcp_available.js +1 -1
  361. package/dist/cli-delegate/cmd_memory_get.js +4 -2
  362. package/dist/cli-delegate/cmd_migrate.js +2 -2
  363. package/dist/cli-delegate/cmd_packs_active.js +2 -2
  364. package/dist/cli-delegate/cmd_preflight.js +7 -5
  365. package/dist/cli-delegate/cmd_prune.js +16 -13
  366. package/dist/cli-delegate/cmd_route_audit.js +11 -8
  367. package/dist/cli-delegate/cmd_route_explain.js +649 -16
  368. package/dist/cli-delegate/cmd_session_recycle.js +15 -6
  369. package/dist/cli-delegate/cmd_settings_check.js +2 -2
  370. package/dist/cli-delegate/cmd_settings_get.js +1 -1
  371. package/dist/cli-delegate/cmd_settings_migrate.js +14 -11
  372. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  373. package/dist/cli-delegate/cmd_sync.js +16 -13
  374. package/dist/cli-delegate/cmd_uninstall.js +185 -31
  375. package/dist/cli-delegate/cmd_update.js +67 -3
  376. package/dist/cli-delegate/cmd_upgrade.js +38 -7
  377. package/dist/cli-delegate/cmd_validate.js +16 -13
  378. package/dist/cli-delegate/cmd_versions.js +1 -1
  379. package/dist/cli-delegate/dashboard_mode.js +1 -1
  380. package/dist/cli-delegate/gate_execute.js +4 -3
  381. package/dist/cli-delegate/roadmap_age.js +22 -0
  382. package/dist/cli-delegate/roadmap_gates.js +4 -3
  383. package/dist/cli-delegate/update_roadmap_progress.js +3 -2
  384. package/dist/cli-delegate/upgrade_unattended-VVL6JLSX.js +541 -0
  385. package/dist/discovery/deprecation-report.md +1 -1
  386. package/dist/discovery/discovery-manifest.json +409 -201
  387. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  388. package/dist/discovery/discovery-manifest.summary.md +8 -8
  389. package/dist/discovery/dormancy-report.md +1 -1
  390. package/dist/discovery/orphan-report.md +1 -1
  391. package/dist/discovery/packs.json +36 -27
  392. package/dist/discovery/trust-report.md +3 -3
  393. package/dist/discovery/workspaces.json +25 -16
  394. package/dist/hooks/chat_history.chunk.cjs +6852 -0
  395. package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
  396. package/dist/hooks/dispatch.js +17706 -18627
  397. package/dist/hooks/dispatch.sha256 +1 -1
  398. package/dist/hooks/egress_engine.chunk.cjs +915 -0
  399. package/dist/hooks/egress_engine.chunk.cjs.sha256 +1 -0
  400. package/dist/hooks/svg_rules.chunk.cjs +1858 -0
  401. package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -0
  402. package/dist/install/conflict.js +36 -6
  403. package/dist/install/conflictTracker.js +81 -7
  404. package/dist/install/detect.js +3 -3
  405. package/dist/install/hostPermissionsAdapter.js +106 -0
  406. package/dist/install/install.mjs +3117 -1949
  407. package/dist/install/installThinLayer.js +1 -1
  408. package/dist/install/manifestFiles.js +21 -0
  409. package/dist/install/noGoDenyRows.js +300 -0
  410. package/dist/install/noGoRules.js +368 -0
  411. package/dist/install/ownershipLedger.js +133 -0
  412. package/dist/install/plan.js +1 -1
  413. package/dist/install/preflight.js +39 -8
  414. package/dist/install/preserve.js +74 -12
  415. package/dist/install/recordedOwnership.js +88 -5
  416. package/dist/install/rule_scope.js +20 -3
  417. package/dist/install/stagedRuntime.js +455 -0
  418. package/dist/install/toolsArg.js +19 -0
  419. package/dist/install/userPin.js +47 -0
  420. package/dist/install/wizard-plan.js +26 -4
  421. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  422. package/dist/mcp/mcp-cloudflare-catalogue.json +3 -2
  423. package/dist/mcp/registry-manifest.json +6 -5
  424. package/dist/mcp/server.json +3 -3
  425. package/dist/mcp/server.mjs +9814 -5333
  426. package/dist/router.json +1 -1
  427. package/dist/scripts/_lib/agent_settings.js +7 -12
  428. package/dist/scripts/_lib/asset_render_record.js +219 -0
  429. package/dist/scripts/_lib/claude_builtin_names.js +9 -4
  430. package/dist/scripts/_lib/claude_settings_hooks.js +102 -34
  431. package/dist/scripts/_lib/egress_rules.js +766 -0
  432. package/dist/scripts/_lib/environment_detector.js +24 -33
  433. package/dist/scripts/_lib/global_deploy_inventory.js +146 -9
  434. package/dist/scripts/_lib/guidelines_lane.js +10 -1
  435. package/dist/scripts/_lib/identifier_redaction.js +24 -0
  436. package/dist/scripts/_lib/installed_layer.js +17 -0
  437. package/dist/scripts/_lib/installed_layer_normalise.js +72 -0
  438. package/dist/scripts/_lib/lean_projection_mode.js +34 -152
  439. package/dist/scripts/_lib/project_tree_form.js +118 -0
  440. package/dist/scripts/_lib/scan_scope.js +105 -0
  441. package/dist/scripts/_lib/scoped_projection.js +133 -3
  442. package/dist/scripts/_lib/settings_removed_keys.js +29 -0
  443. package/dist/scripts/_lib/settings_renamed_keys.js +17 -5
  444. package/dist/scripts/_lib/subagent_native_fields.js +35 -0
  445. package/dist/scripts/_lib/svg_dom.js +284 -0
  446. package/dist/scripts/_lib/svg_filled_counter.js +285 -0
  447. package/dist/scripts/_lib/svg_geometry.js +477 -0
  448. package/dist/scripts/_lib/svg_motion.js +179 -0
  449. package/dist/scripts/_lib/svg_rules.js +1339 -0
  450. package/dist/scripts/_lib/svg_urls.js +67 -0
  451. package/dist/scripts/_lib/ui_surface.js +19 -0
  452. package/dist/scripts/_lib/verification_command.js +364 -0
  453. package/dist/scripts/_lib/workspace_secrets.js +229 -0
  454. package/dist/scripts/ai_council/seat_policy.js +27 -0
  455. package/dist/scripts/ai_council/transport_resolver.js +9 -10
  456. package/dist/scripts/condense.js +25 -29
  457. package/dist/scripts/lint_svg_asset.js +324 -0
  458. package/dist/server/io/substituteTemplate.js +2 -2
  459. package/dist/server/io/yamlIO.js +2 -2
  460. package/dist/server/routes/install.js +5 -1
  461. package/dist/server/routes/settings.js +2 -2
  462. package/dist/server/routes/wizard.js +1 -1
  463. package/dist/server/schemas/settings.js +22 -16
  464. package/dist/server/serverInfo.js +1 -1
  465. package/dist/shared/brandTokenDocument.js +47 -0
  466. package/dist/shared/brandTokenPaths.js +43 -0
  467. package/dist/shared/settingsCarveOut.js +0 -7
  468. package/dist/shared/skillRanking.js +103 -5
  469. package/dist/shared/userMd/formAdapter.js +16 -0
  470. package/dist/shared/userMd/schema.js +17 -0
  471. package/dist/ui/assets/index-w70Ado09.js +23 -0
  472. package/dist/ui/index.html +1 -1
  473. package/docs/MIGRATION.md +89 -2
  474. package/docs/THIRD-PARTY-NOTICES.md +27 -0
  475. package/docs/contracts/settings-classes.md +27 -9
  476. package/docs/guidelines/agent-infra/api-cost-levers.md +4 -3
  477. package/docs/guidelines/agent-infra/model-recommendation.md +11 -5
  478. package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
  479. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
  480. package/docs/guidelines/design-antipatterns.md +6 -1
  481. package/docs/guidelines/design-asset-discipline.md +17 -0
  482. package/docs/guidelines/design-fidelity-routing.md +1 -0
  483. package/docs/guidelines/php/api-design.md +10 -1
  484. package/llms.txt +12 -10
  485. package/package.json +15 -5
  486. package/src/agent-src/scripts/dashboard_mode.ts +4 -1
  487. package/src/agent-src/scripts/roadmap_age.ts +175 -0
  488. package/src/agent-src/scripts/update_roadmap_progress.ts +10 -2
  489. package/src/agent-src/templates/AGENTS.md +1 -1
  490. package/src/agent-src/templates/scripts/check_memory.ts +2 -2
  491. package/src/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
  492. package/src/agent-src/templates/scripts/work_engine/cli.ts +17 -0
  493. package/src/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
  494. package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
  495. package/src/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
  496. package/src/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
  497. package/src/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
  498. package/src/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
  499. package/src/agent-src/templates/scripts/work_engine/state.ts +3 -0
  500. package/src/config/agent-settings.template.yml +120 -57
  501. package/src/config/agents-paths.yml +13 -7
  502. package/src/config/ci-local-parity.yml +44 -0
  503. package/src/config/continuity-surface.json +51 -2
  504. package/src/config/depth-audit-samples.json +5 -0
  505. package/src/config/discovery/command-verbs.yml +1 -0
  506. package/src/config/dispatch-economy-metrics.json +1 -0
  507. package/src/config/egress-mutations/class-precedence-swapped.json +7 -0
  508. package/src/config/egress-mutations/credential-token-restores.json +7 -0
  509. package/src/config/egress-mutations/iban-checksum-disabled.json +7 -0
  510. package/src/config/egress-mutations/raw-value-in-the-count-record.json +7 -0
  511. package/src/config/evaluator-budgets.json +4 -4
  512. package/src/config/gate-coverage.yml +149 -3
  513. package/src/config/gate-reachability-exemptions.json +3 -5
  514. package/src/config/gate-violation-baselines.json +29 -25
  515. package/src/config/gitignore-block.txt +6 -3
  516. package/src/config/hook-bundle-budget.json +34 -3
  517. package/src/config/hook-carrier-probes.json +30 -0
  518. package/src/config/hook-latency-budget.json +4 -2
  519. package/src/config/host-injection-effect.json +8 -1
  520. package/src/config/host-skill-frontmatter-keys.json +56 -0
  521. package/src/config/layer-form-brakes.json +4 -0
  522. package/src/config/layer-form-comparison-corpus.json +42 -0
  523. package/src/config/loop-surfaces.yaml +28 -47
  524. package/src/config/memory-twin-verdicts.yml +9 -1
  525. package/src/config/metric-registry.yml +40 -3
  526. package/src/config/pack-size-budget.json +15 -0
  527. package/src/config/procedure-core-budget.json +21 -0
  528. package/src/config/profiles/minimal.ini +1 -1
  529. package/src/config/project-tree-form.json +24 -0
  530. package/src/config/reach-channels.yml +3 -3
  531. package/src/config/reach-prescriptions-intake.yml +1 -1
  532. package/src/config/roadmap-step-size-baseline.json +118 -0
  533. package/src/config/routing-coverage-seed.json +100 -2
  534. package/src/config/skill-body-budget.json +686 -0
  535. package/src/config/skill-fork-pilot.json +17 -0
  536. package/src/config/skill-lifecycle-probes-codex.json +57 -0
  537. package/src/config/skill-lifecycle-probes.json +57 -0
  538. package/src/config/skill-output-shape.json +316 -0
  539. package/src/config/step-depth-table.json +58 -0
  540. package/src/config/turnaround-budget.json +90 -0
  541. package/src/install/conflict.ts +38 -6
  542. package/src/install/conflictTracker.ts +126 -8
  543. package/src/install/detect.ts +3 -3
  544. package/src/install/hostPermissionsAdapter.ts +136 -0
  545. package/src/install/installThinLayer.ts +6 -1
  546. package/src/install/manifestFiles.ts +24 -0
  547. package/src/install/noGoDenyRows.ts +368 -0
  548. package/src/install/noGoRules.ts +438 -0
  549. package/src/install/ownershipLedger.ts +180 -0
  550. package/src/install/plan.ts +1 -1
  551. package/src/install/preflight.ts +42 -10
  552. package/src/install/preserve.ts +94 -12
  553. package/src/install/recordedOwnership.ts +121 -3
  554. package/src/install/rule_scope.ts +20 -3
  555. package/src/install/stagedRuntime.ts +528 -0
  556. package/src/install/toolsArg.ts +16 -0
  557. package/src/install/types.ts +23 -2
  558. package/src/install/userPin.ts +54 -0
  559. package/src/install/wizard-plan.ts +25 -4
  560. package/src/scripts/_cli/_doctor_emit.ts +24 -0
  561. package/src/scripts/_cli/cmd_brand_status.ts +223 -12
  562. package/src/scripts/_cli/cmd_ci_settle.ts +32 -0
  563. package/src/scripts/_cli/cmd_doctor.ts +23 -44
  564. package/src/scripts/_cli/cmd_route_explain.ts +176 -2
  565. package/src/scripts/_cli/cmd_uninstall.ts +270 -26
  566. package/src/scripts/_cli/cmd_update.ts +34 -1
  567. package/src/scripts/_cli/cmd_upgrade.ts +38 -2
  568. package/src/scripts/_cli/detection_report.ts +7 -0
  569. package/src/scripts/_cli/doctor_execution.ts +1 -2
  570. package/src/scripts/_cli/doctor_install_mode.ts +39 -0
  571. package/src/scripts/_cli/doctor_network_posture.ts +3 -3
  572. package/src/scripts/_cli/doctor_ownership_ledger.ts +126 -0
  573. package/src/scripts/_cli/doctor_update_verdict.ts +104 -0
  574. package/src/scripts/_cli/explain_last/scrubber.ts +9 -21
  575. package/src/scripts/_cli/upgrade_unattended.ts +548 -0
  576. package/src/scripts/_dispatch.bash +42 -9
  577. package/src/scripts/_lib/activation_ladder.ts +1 -1
  578. package/src/scripts/_lib/advisory_inventory.ts +405 -0
  579. package/src/scripts/_lib/advisory_notice.ts +270 -0
  580. package/src/scripts/_lib/advisory_sources.ts +752 -0
  581. package/src/scripts/_lib/advisory_verdicts.ts +363 -0
  582. package/src/scripts/_lib/agent_artifact_location.ts +177 -0
  583. package/src/scripts/_lib/agent_settings.ts +7 -12
  584. package/src/scripts/_lib/arrival_record.ts +217 -0
  585. package/src/scripts/_lib/asset_render_record.ts +247 -0
  586. package/src/scripts/_lib/billing_grant.ts +4 -2
  587. package/src/scripts/_lib/brand_voice_slot.ts +258 -0
  588. package/src/scripts/_lib/canary_status.ts +24 -0
  589. package/src/scripts/_lib/cc_transcript.ts +276 -0
  590. package/src/scripts/_lib/changelog_eras.ts +83 -0
  591. package/src/scripts/_lib/claim_phrases.ts +71 -0
  592. package/src/scripts/_lib/classify_update.ts +171 -0
  593. package/src/scripts/_lib/claude_builtin_names.ts +9 -4
  594. package/src/scripts/_lib/claude_hook_scope.ts +195 -0
  595. package/src/scripts/_lib/claude_settings_hooks.ts +118 -34
  596. package/src/scripts/_lib/codex_resident_set.ts +460 -0
  597. package/src/scripts/_lib/codex_skill_finder.ts +225 -0
  598. package/src/scripts/_lib/confusables.ts +19 -0
  599. package/src/scripts/_lib/consumer_impact.ts +199 -0
  600. package/src/scripts/_lib/content_class.ts +127 -0
  601. package/src/scripts/_lib/counted_probe.ts +68 -1
  602. package/src/scripts/_lib/credential_deny_rows.ts +151 -0
  603. package/src/scripts/_lib/credential_files.ts +367 -0
  604. package/src/scripts/_lib/delivery_arm_experiment.ts +2 -2
  605. package/src/scripts/_lib/depth_flip.ts +141 -0
  606. package/src/scripts/_lib/design_lock.ts +117 -0
  607. package/src/scripts/_lib/design_sync_ledger.ts +142 -0
  608. package/src/scripts/_lib/design_sync_plan.ts +177 -0
  609. package/src/scripts/_lib/design_sync_reconcile.ts +159 -0
  610. package/src/scripts/_lib/design_sync_verify.ts +99 -0
  611. package/src/scripts/_lib/design_system_claude_design.ts +323 -0
  612. package/src/scripts/_lib/design_system_import.ts +84 -6
  613. package/src/scripts/_lib/dispatch_import_closure.ts +42 -11
  614. package/src/scripts/_lib/egress_credential_env.ts +35 -0
  615. package/src/scripts/_lib/egress_engine.ts +22 -0
  616. package/src/scripts/_lib/egress_known_values.ts +223 -0
  617. package/src/scripts/_lib/egress_normalize.ts +67 -0
  618. package/src/scripts/_lib/egress_prefixes.ts +42 -0
  619. package/src/scripts/_lib/egress_rules.ts +896 -0
  620. package/src/scripts/_lib/egress_rules_linearity.ts +56 -0
  621. package/src/scripts/_lib/egress_sender_scan.ts +290 -0
  622. package/src/scripts/_lib/egress_session_table.ts +510 -0
  623. package/src/scripts/_lib/egress_text.ts +63 -0
  624. package/src/scripts/_lib/egress_token.ts +252 -0
  625. package/src/scripts/_lib/empty_cycles.ts +1 -1
  626. package/src/scripts/_lib/environment_detector.ts +45 -30
  627. package/src/scripts/_lib/exemption_shape.ts +75 -1
  628. package/src/scripts/_lib/floor_posture.ts +185 -0
  629. package/src/scripts/_lib/forge_protection.ts +140 -2
  630. package/src/scripts/_lib/global_deploy_inventory.ts +159 -6
  631. package/src/scripts/_lib/guidelines_lane.ts +12 -1
  632. package/src/scripts/_lib/hand_kinds.ts +65 -0
  633. package/src/scripts/_lib/headless_invocation.ts +3 -3
  634. package/src/scripts/_lib/host_capability.ts +34 -2
  635. package/src/scripts/_lib/host_env_write.ts +39 -18
  636. package/src/scripts/_lib/host_listing_model.ts +14 -7
  637. package/src/scripts/_lib/identifier_redaction.ts +26 -0
  638. package/src/scripts/_lib/impact_bump.ts +70 -0
  639. package/src/scripts/_lib/install_reach_checks.ts +53 -1
  640. package/src/scripts/_lib/installed_layer.ts +31 -0
  641. package/src/scripts/_lib/installed_layer_normalise.ts +75 -0
  642. package/src/scripts/_lib/instructions_loaded_classify.ts +75 -0
  643. package/src/scripts/_lib/instructions_loaded_event.ts +53 -0
  644. package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
  645. package/src/scripts/_lib/layer_form_corpus.ts +165 -0
  646. package/src/scripts/_lib/layer_form_decision.ts +248 -0
  647. package/src/scripts/_lib/layer_form_evidence.ts +112 -0
  648. package/src/scripts/_lib/lean_projection_mode.ts +32 -161
  649. package/src/scripts/_lib/llm_proposer_transport.ts +1 -0
  650. package/src/scripts/_lib/loop_guards.ts +8 -120
  651. package/src/scripts/_lib/major_surface.ts +207 -0
  652. package/src/scripts/_lib/mcp_bridge.ts +30 -69
  653. package/src/scripts/_lib/merge_clearance_record.ts +384 -0
  654. package/src/scripts/_lib/neighbour_census.ts +18 -1
  655. package/src/scripts/_lib/orchestration_record.ts +61 -0
  656. package/src/scripts/_lib/outcome_vocabularies.ts +15 -23
  657. package/src/scripts/_lib/pin_advice.ts +49 -0
  658. package/src/scripts/_lib/platform_anchor.ts +222 -0
  659. package/src/scripts/_lib/procedure_checks.ts +5 -0
  660. package/src/scripts/_lib/project_tree_form.ts +134 -0
  661. package/src/scripts/_lib/projection_key_migration.ts +122 -0
  662. package/src/scripts/_lib/prompt_shape.ts +13 -2
  663. package/src/scripts/_lib/provenance_verify.ts +272 -0
  664. package/src/scripts/_lib/quota_parked.ts +27 -1
  665. package/src/scripts/_lib/ratification_artifact.ts +64 -1
  666. package/src/scripts/_lib/ratification_subject.ts +508 -46
  667. package/src/scripts/_lib/release_findings_ingest.ts +52 -5
  668. package/src/scripts/_lib/release_highlights.ts +72 -2
  669. package/src/scripts/_lib/release_settings_surface.ts +392 -0
  670. package/src/scripts/_lib/review_round.ts +134 -0
  671. package/src/scripts/_lib/roadmap_checkboxes.ts +1 -1
  672. package/src/scripts/_lib/roadmap_slug_lock.ts +254 -0
  673. package/src/scripts/_lib/roadmap_step_size.ts +75 -0
  674. package/src/scripts/_lib/run_checkpoint.ts +60 -3
  675. package/src/scripts/_lib/runtime_wiring_checks.ts +15 -1
  676. package/src/scripts/_lib/scope_guard.sh +64 -5
  677. package/src/scripts/_lib/scoped_projection.ts +136 -3
  678. package/src/scripts/_lib/secret_detector.ts +24 -103
  679. package/src/scripts/_lib/security_fix.ts +429 -0
  680. package/src/scripts/_lib/security_fix_context.ts +133 -0
  681. package/src/scripts/_lib/self_repair.ts +69 -39
  682. package/src/scripts/_lib/self_repair_outgoing.ts +209 -0
  683. package/src/scripts/_lib/self_repair_payload.ts +86 -0
  684. package/src/scripts/_lib/session_eol.ts +3 -0
  685. package/src/scripts/_lib/session_pr_watch.ts +207 -0
  686. package/src/scripts/_lib/session_register.ts +51 -1
  687. package/src/scripts/_lib/session_tag.ts +51 -0
  688. package/src/scripts/_lib/settings_removed_keys.ts +30 -0
  689. package/src/scripts/_lib/settings_renamed_keys.ts +19 -5
  690. package/src/scripts/_lib/skill_catalogue.ts +66 -25
  691. package/src/scripts/_lib/skill_fork_pilot.ts +121 -0
  692. package/src/scripts/_lib/skill_leases.ts +203 -0
  693. package/src/scripts/_lib/skill_listing_overrides.ts +294 -0
  694. package/src/scripts/_lib/skill_materialisation.ts +388 -0
  695. package/src/scripts/_lib/skill_materialisation_gate.ts +210 -0
  696. package/src/scripts/_lib/skill_materialisation_lock.ts +149 -0
  697. package/src/scripts/_lib/skill_materialisation_triggers.ts +96 -0
  698. package/src/scripts/_lib/skill_origin.ts +21 -1
  699. package/src/scripts/_lib/skill_reach.ts +342 -0
  700. package/src/scripts/_lib/source_shape.ts +7 -2
  701. package/src/scripts/_lib/sqlite_guard.ts +1 -1
  702. package/src/scripts/_lib/step_anatomy.ts +330 -0
  703. package/src/scripts/_lib/subagent_capsule.ts +8 -2
  704. package/src/scripts/_lib/subagent_native_fields.ts +30 -0
  705. package/src/scripts/_lib/subagent_spawn.ts +36 -0
  706. package/src/scripts/_lib/subagent_steering.ts +367 -0
  707. package/src/scripts/_lib/svg_dom.ts +318 -0
  708. package/src/scripts/_lib/svg_filled_counter.ts +287 -0
  709. package/src/scripts/_lib/svg_geometry.ts +480 -0
  710. package/src/scripts/_lib/svg_motion.ts +208 -0
  711. package/src/scripts/_lib/svg_rules.ts +1455 -0
  712. package/src/scripts/_lib/svg_urls.ts +72 -0
  713. package/src/scripts/_lib/test_delta.ts +89 -6
  714. package/src/scripts/_lib/tier_downshift_verdict.ts +222 -0
  715. package/src/scripts/_lib/tool_result_census.ts +62 -0
  716. package/src/scripts/_lib/trigger_routers.ts +1 -0
  717. package/src/scripts/_lib/turnaround_throughput.ts +378 -0
  718. package/src/scripts/_lib/ui_surface.ts +22 -0
  719. package/src/scripts/_lib/unattended_gates.ts +100 -0
  720. package/src/scripts/_lib/undeployed_fixes.ts +34 -0
  721. package/src/scripts/_lib/update_check.ts +143 -12
  722. package/src/scripts/_lib/update_invite.ts +116 -0
  723. package/src/scripts/_lib/update_notice.ts +259 -0
  724. package/src/scripts/_lib/verification_command.ts +59 -0
  725. package/src/scripts/_lib/verify_clause.ts +31 -19
  726. package/src/scripts/_lib/version_order.ts +146 -0
  727. package/src/scripts/_lib/worker_reuse.ts +191 -0
  728. package/src/scripts/_lib/workspace_secrets.ts +273 -0
  729. package/src/scripts/_lib/worktree_git.ts +67 -0
  730. package/src/scripts/_lib/worktree_ignored.ts +116 -0
  731. package/src/scripts/adoption_status.ts +330 -3
  732. package/src/scripts/adr_cite_check.ts +93 -0
  733. package/src/scripts/advisories.ts +803 -0
  734. package/src/scripts/ai-image/adapters/flux.sh +1 -0
  735. package/src/scripts/ai-image/adapters/gemini-image.sh +1 -0
  736. package/src/scripts/ai-image/adapters/ideogram.sh +1 -0
  737. package/src/scripts/ai-image/adapters/recraft.sh +1 -0
  738. package/src/scripts/ai-video/adapters/comfyui.sh +1 -0
  739. package/src/scripts/ai-video/adapters/fal.sh +1 -0
  740. package/src/scripts/ai-video/adapters/gemini-veo.sh +1 -0
  741. package/src/scripts/ai-video/adapters/higgsfield.sh +1 -0
  742. package/src/scripts/ai-video/adapters/kling.sh +1 -0
  743. package/src/scripts/ai-video/adapters/musetalk.sh +1 -0
  744. package/src/scripts/ai-video/adapters/openai-images.sh +1 -0
  745. package/src/scripts/ai-video/adapters/replicate.sh +1 -0
  746. package/src/scripts/ai-video/adapters/sora.sh +1 -0
  747. package/src/scripts/ai-video/adapters/syncso.sh +1 -0
  748. package/src/scripts/ai-video/stitch.sh +115 -2
  749. package/src/scripts/ai_council/airgap.ts +1 -0
  750. package/src/scripts/ai_council/api_transport.ts +27 -4
  751. package/src/scripts/ai_council/budget_guard.ts +300 -11
  752. package/src/scripts/ai_council/bundler.ts +20 -29
  753. package/src/scripts/ai_council/chairman.ts +17 -2
  754. package/src/scripts/ai_council/cli_agency_bounds.ts +158 -0
  755. package/src/scripts/ai_council/cli_launch_env.ts +54 -0
  756. package/src/scripts/ai_council/cli_least_agency_canary.ts +18 -2
  757. package/src/scripts/ai_council/clients.ts +55 -73
  758. package/src/scripts/ai_council/config.ts +16 -22
  759. package/src/scripts/ai_council/council_egress.ts +167 -0
  760. package/src/scripts/ai_council/exposure_ledger.ts +117 -0
  761. package/src/scripts/ai_council/free_hand_shadow.ts +276 -0
  762. package/src/scripts/ai_council/free_route.ts +216 -0
  763. package/src/scripts/ai_council/free_route_catalog.ts +173 -0
  764. package/src/scripts/ai_council/free_route_client.ts +95 -0
  765. package/src/scripts/ai_council/free_rung.ts +61 -0
  766. package/src/scripts/ai_council/hand_payload.ts +230 -0
  767. package/src/scripts/ai_council/hand_schemas.ts +123 -0
  768. package/src/scripts/ai_council/jury_aggregate.ts +155 -1
  769. package/src/scripts/ai_council/kind_flip.ts +221 -0
  770. package/src/scripts/ai_council/kind_flip_state.ts +19 -0
  771. package/src/scripts/ai_council/learn_low_impact_preview.ts +50 -22
  772. package/src/scripts/ai_council/modification_review.ts +98 -5
  773. package/src/scripts/ai_council/necessity.ts +7 -0
  774. package/src/scripts/ai_council/orchestrator.ts +16 -16
  775. package/src/scripts/ai_council/pricing.ts +10 -0
  776. package/src/scripts/ai_council/redact_low_impact_entry.ts +5 -2
  777. package/src/scripts/ai_council/response_render.ts +27 -4
  778. package/src/scripts/ai_council/round_reservations.ts +119 -0
  779. package/src/scripts/ai_council/route_chooser.ts +161 -0
  780. package/src/scripts/ai_council/route_liveness.ts +152 -0
  781. package/src/scripts/ai_council/route_member.ts +52 -0
  782. package/src/scripts/ai_council/seat_policy.ts +40 -0
  783. package/src/scripts/ai_council/seat_resume.ts +40 -0
  784. package/src/scripts/ai_council/shadow_dispatch.ts +13 -3
  785. package/src/scripts/ai_council/spend_gate.ts +18 -2
  786. package/src/scripts/ai_council/status_surface.ts +37 -0
  787. package/src/scripts/ai_council/transport_resolver.ts +15 -18
  788. package/src/scripts/analysis_analysts.ts +226 -0
  789. package/src/scripts/analysis_anchors.ts +140 -0
  790. package/src/scripts/analysis_and_optimize.ts +44 -0
  791. package/src/scripts/analysis_emit.ts +150 -0
  792. package/src/scripts/analysis_exchange.ts +186 -0
  793. package/src/scripts/analysis_gate.ts +158 -0
  794. package/src/scripts/analysis_inbox_final.ts +173 -0
  795. package/src/scripts/analysis_ledger.ts +119 -0
  796. package/src/scripts/analysis_pr_optimize.ts +219 -0
  797. package/src/scripts/analysis_pr_review.ts +240 -0
  798. package/src/scripts/analysis_pr_target.ts +121 -0
  799. package/src/scripts/analysis_prompts.ts +130 -0
  800. package/src/scripts/analysis_publish.ts +358 -0
  801. package/src/scripts/analysis_questions.ts +78 -0
  802. package/src/scripts/analysis_run.ts +248 -0
  803. package/src/scripts/analysis_run_record.ts +210 -0
  804. package/src/scripts/analysis_target.ts +343 -0
  805. package/src/scripts/analysis_validate.ts +161 -0
  806. package/src/scripts/anchor_eval_falsify.ts +1 -1
  807. package/src/scripts/arrival_report.ts +115 -0
  808. package/src/scripts/ask_transport.ts +284 -35
  809. package/src/scripts/backfill_model_tier.ts +4 -5
  810. package/src/scripts/before_complete_hook.ts +48 -2
  811. package/src/scripts/bench_hook_latency.ts +3 -3
  812. package/src/scripts/bench_procedure_cursor.ts +440 -0
  813. package/src/scripts/bootstrap.sh +3 -3
  814. package/src/scripts/build_exit_code_register.ts +440 -0
  815. package/src/scripts/build_proof.ts +23 -1
  816. package/src/scripts/cache_realization_report.ts +155 -14
  817. package/src/scripts/canary_liveness.ts +117 -0
  818. package/src/scripts/chat_history.ts +12 -15
  819. package/src/scripts/check_account_surface.ts +318 -0
  820. package/src/scripts/check_agent_artifact_location.ts +17 -160
  821. package/src/scripts/check_bundle_path_leakage.ts +6 -0
  822. package/src/scripts/check_ci_local_parity.ts +21 -13
  823. package/src/scripts/check_claims.ts +77 -2
  824. package/src/scripts/check_completion_review.ts +34 -1
  825. package/src/scripts/check_concern_admissions.ts +41 -5
  826. package/src/scripts/check_consumer_scope_flip.ts +1 -1
  827. package/src/scripts/check_context_paths.ts +2 -0
  828. package/src/scripts/check_council_layout.ts +9 -0
  829. package/src/scripts/check_credential_spelling.ts +267 -0
  830. package/src/scripts/check_egress_mutations.ts +239 -0
  831. package/src/scripts/check_enforcement_coverage.ts +16 -3
  832. package/src/scripts/check_estate_count.ts +16 -1
  833. package/src/scripts/check_finding_dispositions.ts +147 -0
  834. package/src/scripts/check_gate_coverage.ts +123 -21
  835. package/src/scripts/check_gate_reachability.ts +16 -2
  836. package/src/scripts/check_generator_sync.ts +46 -0
  837. package/src/scripts/check_hook_bundle_composition.ts +139 -1
  838. package/src/scripts/check_host_docs_digest.ts +142 -5
  839. package/src/scripts/check_kernel_edit_ratified.ts +301 -76
  840. package/src/scripts/check_kernel_rule_bundle.ts +14 -10
  841. package/src/scripts/check_knowledge_cards.ts +83 -3
  842. package/src/scripts/check_memory.ts +13 -3
  843. package/src/scripts/check_pack_size.ts +1 -1
  844. package/src/scripts/check_permission_deny_syntax.ts +247 -0
  845. package/src/scripts/check_platform_anchor.ts +243 -0
  846. package/src/scripts/check_proposal.ts +183 -1
  847. package/src/scripts/check_reach_channels.ts +5 -3
  848. package/src/scripts/check_references.ts +5 -2
  849. package/src/scripts/check_release_manifest_content.ts +33 -0
  850. package/src/scripts/check_release_pr_shape.ts +5 -0
  851. package/src/scripts/check_rule_invariants.ts +9 -1
  852. package/src/scripts/check_skill_body_budget.ts +343 -0
  853. package/src/scripts/check_skill_requires.ts +137 -1
  854. package/src/scripts/check_step_receipts.ts +246 -0
  855. package/src/scripts/check_structural_breaking.ts +7 -1
  856. package/src/scripts/check_suppression_hygiene.ts +8 -0
  857. package/src/scripts/check_test_weakening.ts +14 -0
  858. package/src/scripts/check_token_quality_golden.ts +5 -1
  859. package/src/scripts/check_update_banner.ts +50 -3
  860. package/src/scripts/check_verify_expectation_delta.ts +2 -1
  861. package/src/scripts/check_voice_lexicon.ts +531 -0
  862. package/src/scripts/ci_os_attribution.ts +327 -0
  863. package/src/scripts/ci_platform_scope.ts +69 -0
  864. package/src/scripts/ci_settle.ts +4 -1
  865. package/src/scripts/ci_status.ts +0 -1
  866. package/src/scripts/ci_time_to_green.ts +748 -0
  867. package/src/scripts/classify_merge_risk.ts +407 -19
  868. package/src/scripts/code_graph/sqlite_store.ts +1 -1
  869. package/src/scripts/compile_trigger_evals.ts +353 -0
  870. package/src/scripts/condense.ts +25 -31
  871. package/src/scripts/consumer_matrix.ts +61 -3
  872. package/src/scripts/council_availability_hook.ts +12 -4
  873. package/src/scripts/council_cli.ts +48 -38
  874. package/src/scripts/cross_repo_retrieve.ts +9 -72
  875. package/src/scripts/design_lock.ts +106 -0
  876. package/src/scripts/design_slop_rules.ts +30 -0
  877. package/src/scripts/design_sync.ts +264 -0
  878. package/src/scripts/design_system_import.ts +30 -13
  879. package/src/scripts/dispatch_economy_report.ts +46 -1
  880. package/src/scripts/dispatch_r2_reviewer.ts +41 -5
  881. package/src/scripts/egress_canary.ts +166 -0
  882. package/src/scripts/egress_sender_census.ts +101 -0
  883. package/src/scripts/external_sources_denylist.json +94 -12
  884. package/src/scripts/generate_catalog.ts +6 -2
  885. package/src/scripts/generate_owned_digest.ts +163 -0
  886. package/src/scripts/generate_reference_toc.ts +143 -0
  887. package/src/scripts/generate_subagent_floor.ts +11 -1
  888. package/src/scripts/handoff_context_hook.ts +34 -0
  889. package/src/scripts/hook_carrier_census.ts +263 -0
  890. package/src/scripts/hook_chunks.d.mts +12 -0
  891. package/src/scripts/hook_chunks.mjs +114 -0
  892. package/src/scripts/hook_manifest.json +1 -1
  893. package/src/scripts/hook_manifest.yaml +65 -42
  894. package/src/scripts/hooks/block_config_weakening.ts +127 -3
  895. package/src/scripts/hooks/block_credential_reads.ts +165 -0
  896. package/src/scripts/hooks/block_no_verify.ts +47 -23
  897. package/src/scripts/hooks/block_speaking_inbox_dir.ts +54 -8
  898. package/src/scripts/hooks/category_a.ts +202 -25
  899. package/src/scripts/hooks/concern_failure_policy.ts +6 -6
  900. package/src/scripts/hooks/concern_registry.ts +31 -6
  901. package/src/scripts/hooks/concern_registry_types.ts +11 -0
  902. package/src/scripts/hooks/delegation_nudge_hook.ts +105 -15
  903. package/src/scripts/hooks/design_pass_hook.ts +199 -13
  904. package/src/scripts/hooks/dispatch_hook.ts +13 -12
  905. package/src/scripts/hooks/egress_engine_loader.ts +125 -0
  906. package/src/scripts/hooks/egress_stage.ts +440 -0
  907. package/src/scripts/hooks/hook_stdin.ts +29 -4
  908. package/src/scripts/hooks/host_docs_pages.ts +194 -0
  909. package/src/scripts/hooks/host_docs_pages.yaml +75 -0
  910. package/src/scripts/hooks/host_lowering.json +1 -1
  911. package/src/scripts/hooks/host_lowering.yaml +22 -21
  912. package/src/scripts/hooks/host_rate_marker_hook.ts +73 -0
  913. package/src/scripts/hooks/instructions_observer_hook.ts +170 -0
  914. package/src/scripts/hooks/interruption_ledger_hook.ts +1 -1
  915. package/src/scripts/hooks/lazy_concern.ts +148 -0
  916. package/src/scripts/hooks/orchestration_record_hook.ts +80 -2
  917. package/src/scripts/hooks/payload_stub.ts +16 -6
  918. package/src/scripts/hooks/permission_gate.ts +7 -7
  919. package/src/scripts/hooks/push_settle_hook.ts +32 -3
  920. package/src/scripts/hooks/replay_hook.ts +43 -0
  921. package/src/scripts/hooks/reread_guard_hook.ts +87 -10
  922. package/src/scripts/hooks/rtk_wrap_hook.ts +4 -3
  923. package/src/scripts/hooks/rule_inject_hook.ts +8 -1
  924. package/src/scripts/hooks/session_eol_hook.ts +48 -1
  925. package/src/scripts/hooks/source_first_gate_hook.ts +6 -8
  926. package/src/scripts/hooks/spawn_guard_shadow_hook.ts +203 -10
  927. package/src/scripts/hooks/state_io.ts +2 -2
  928. package/src/scripts/hooks/svg_obligation.ts +553 -0
  929. package/src/scripts/hooks/svg_rules_loader.ts +133 -0
  930. package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
  931. package/src/scripts/hooks/turn_end_gate_hook.ts +5 -3
  932. package/src/scripts/hooks/ui_route_nudge_hook.ts +2 -12
  933. package/src/scripts/hooks_doctor.ts +31 -0
  934. package/src/scripts/hooks_status.ts +58 -3
  935. package/src/scripts/inbox_source_census.ts +74 -13
  936. package/src/scripts/install +25 -3
  937. package/src/scripts/install.ts +60 -91
  938. package/src/scripts/interruption_report.ts +11 -1
  939. package/src/scripts/layer_baseline_report.ts +267 -0
  940. package/src/scripts/learning_sidecar.ts +1 -1
  941. package/src/scripts/lint_agents_layout.ts +3 -0
  942. package/src/scripts/lint_blocker_citations.ts +104 -0
  943. package/src/scripts/lint_breaking_changes_index.ts +40 -7
  944. package/src/scripts/lint_consolidation_lineage.ts +150 -19
  945. package/src/scripts/lint_consumer_internal_refs.ts +90 -42
  946. package/src/scripts/lint_context_spine_usage.ts +21 -0
  947. package/src/scripts/lint_design_antipattern_parity.ts +39 -7
  948. package/src/scripts/lint_design_quality.ts +60 -12
  949. package/src/scripts/lint_evidence_artifacts.ts +31 -0
  950. package/src/scripts/lint_example_fences.ts +11 -2
  951. package/src/scripts/lint_ghostwriter_source.ts +42 -10
  952. package/src/scripts/lint_hook_manifest.ts +94 -0
  953. package/src/scripts/lint_marketplace_install_completeness.ts +4 -0
  954. package/src/scripts/lint_mcp_config_security.ts +9 -11
  955. package/src/scripts/lint_motion_authority_drift.ts +27 -0
  956. package/src/scripts/lint_plan_risk_register.ts +28 -1
  957. package/src/scripts/lint_positioning.ts +4 -4
  958. package/src/scripts/lint_provenance.ts +1 -0
  959. package/src/scripts/lint_roadmap_blockers.ts +65 -4
  960. package/src/scripts/lint_roadmap_complexity.ts +98 -0
  961. package/src/scripts/lint_skill_link_reach.ts +251 -9
  962. package/src/scripts/lint_skill_procedures.ts +252 -0
  963. package/src/scripts/lint_skill_scripts_readonly.ts +12 -1
  964. package/src/scripts/lint_subagent_determinism.ts +14 -1
  965. package/src/scripts/lint_svg_asset.ts +365 -0
  966. package/src/scripts/lint_ticked_unmet_criteria.ts +300 -21
  967. package/src/scripts/mcp_registry_submit.sh +2 -2
  968. package/src/scripts/mcp_server/consumer_tool_catalog.json +4 -4
  969. package/src/scripts/mcp_server/suggest_skill.ts +89 -4
  970. package/src/scripts/mcp_server/tools.ts +2 -33
  971. package/src/scripts/measure_skill_ranker_baseline.ts +203 -5
  972. package/src/scripts/measure_turn_end_gate.ts +61 -1
  973. package/src/scripts/merge_clearance.ts +225 -0
  974. package/src/scripts/migrate_command_suggestions.ts +1 -1
  975. package/src/scripts/network_sources.ts +236 -0
  976. package/src/scripts/no_go_deny_rows.ts +225 -0
  977. package/src/scripts/orchestration_record.ts +15 -2
  978. package/src/scripts/plan_test_shards.ts +103 -0
  979. package/src/scripts/pr_url_reminder_hook.ts +10 -0
  980. package/src/scripts/print_required_checks.ts +5 -5
  981. package/src/scripts/probe_depth_shadow.ts +406 -0
  982. package/src/scripts/probe_turnaround.ts +342 -10
  983. package/src/scripts/ratification_subject.ts +176 -0
  984. package/src/scripts/rdp_gate_classify.ts +1 -0
  985. package/src/scripts/rdp_quality_eval.ts +1 -0
  986. package/src/scripts/release.ts +26 -55
  987. package/src/scripts/release_drill.ts +52 -23
  988. package/src/scripts/release_env.ts +37 -0
  989. package/src/scripts/release_publication.ts +11 -1
  990. package/src/scripts/report_consumer_gate_reach.ts +233 -0
  991. package/src/scripts/report_merge_gate_load.ts +295 -0
  992. package/src/scripts/report_project_contract.ts +123 -0
  993. package/src/scripts/report_reducible_classes.ts +342 -0
  994. package/src/scripts/report_required_checks_drift.ts +5 -3
  995. package/src/scripts/report_skill_host_census.ts +199 -0
  996. package/src/scripts/report_standing_payload_by_host.ts +7 -7
  997. package/src/scripts/retro.ts +758 -0
  998. package/src/scripts/retro_facts.ts +575 -0
  999. package/src/scripts/retro_queue.ts +739 -0
  1000. package/src/scripts/retro_session_facts.ts +218 -0
  1001. package/src/scripts/retro_sweep.ts +493 -0
  1002. package/src/scripts/retro_triage.ts +126 -0
  1003. package/src/scripts/roadmap_context.ts +2 -2
  1004. package/src/scripts/roadmap_drain_queue.ts +601 -0
  1005. package/src/scripts/run_supervise.ts +24 -2
  1006. package/src/scripts/schemas/agent-settings.schema.json +0 -16
  1007. package/src/scripts/schemas/command.schema.json +3 -3
  1008. package/src/scripts/schemas/review-findings.schema.json +8 -0
  1009. package/src/scripts/schemas/skill.schema.json +7 -6
  1010. package/src/scripts/schemas/subagent.schema.json +33 -2
  1011. package/src/scripts/score_skill_selection.ts +5 -2
  1012. package/src/scripts/second_brain_retrieval.ts +1 -0
  1013. package/src/scripts/second_brain_run.ts +1 -0
  1014. package/src/scripts/self_repair_cli.ts +563 -87
  1015. package/src/scripts/self_review_gate.ts +59 -4
  1016. package/src/scripts/session_register_hook.ts +91 -4
  1017. package/src/scripts/sessions_cli.ts +100 -5
  1018. package/src/scripts/skill_collision_clusters.ts +1 -1
  1019. package/src/scripts/skill_tools/score_skill_relevance.ts +31 -2
  1020. package/src/scripts/skill_trigger_eval.ts +4 -2
  1021. package/src/scripts/source_adapters.ts +183 -0
  1022. package/src/scripts/step_receipt.ts +100 -0
  1023. package/src/scripts/sync_pr_branch.ts +4 -0
  1024. package/src/scripts/test_council_qualification.ts +1 -1
  1025. package/src/scripts/trigger_eval_grandfather.json +3 -49
  1026. package/src/scripts/trigger_eval_rotation.ts +31 -3
  1027. package/src/scripts/ui_conformance_probe.ts +405 -1
  1028. package/src/scripts/update_counts.ts +230 -11
  1029. package/src/scripts/update_invite_hook.ts +245 -0
  1030. package/src/scripts/update_notice_hook.ts +298 -0
  1031. package/src/scripts/validate_frontmatter.ts +85 -0
  1032. package/src/scripts/worker_reuse_shadow_report.ts +121 -0
  1033. package/src/scripts/worktree_cleanup_check.ts +915 -121
  1034. package/src/server/io/yamlIO.ts +2 -2
  1035. package/src/server/schemas/settings.ts +37 -23
  1036. package/src/shared/brandTokenDocument.ts +46 -0
  1037. package/src/shared/brandTokenPaths.ts +43 -0
  1038. package/src/shared/settingsCarveOut.ts +0 -8
  1039. package/src/shared/skillRanking.ts +106 -5
  1040. package/src/shared/userMd/formAdapter.ts +15 -1
  1041. package/src/shared/userMd/schema.ts +22 -0
  1042. package/src/templates/agent-user.md +4 -0
  1043. package/src/templates/agent-user.yml +4 -0
  1044. package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
  1045. package/dist/cli-delegate/chunk-AL3RZ22D.js +0 -74
  1046. package/dist/cli-delegate/chunk-KB5FZ655.js +0 -208
  1047. package/dist/cli-delegate/chunk-MDPPKQCQ.js +0 -875
  1048. package/dist/cli-delegate/chunk-MSUL5NYP.js +0 -1123
  1049. package/dist/cli-delegate/chunk-OAFSJBHH.js +0 -272
  1050. package/dist/ui/assets/index-C3djEJah.js +0 -23
  1051. package/src/scripts/_lib/continuation_ladder.ts +0 -335
  1052. package/src/scripts/hooks/run_continuation_hook.ts +0 -1524
@@ -2,58 +2,33 @@
2
2
  import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
3
3
 
4
4
  // src/scripts/check_update_banner.ts
5
- import * as fs6 from "node:fs";
6
- import * as path6 from "node:path";
5
+ import * as fs9 from "node:fs";
6
+ import * as tty from "node:tty";
7
+ import * as path9 from "node:path";
7
8
  import { fileURLToPath as fileURLToPath2, pathToFileURL } from "node:url";
8
9
 
9
- // src/scripts/_lib/agent_settings.ts
10
- import { createRequire } from "node:module";
10
+ // src/scripts/_cli/doctor_install_mode.ts
11
11
  import * as fs3 from "node:fs";
12
12
  import * as path3 from "node:path";
13
13
 
14
- // src/scripts/_lib/package_root.ts
15
- import * as fs from "node:fs";
16
- import * as path from "node:path";
17
- import { fileURLToPath } from "node:url";
18
- var PACKAGE_NAME = "@event4u/agent-config";
19
- var MAX_ASCENT = 16;
20
- function resolvePackageRoot(fromUrlOrPath, legacyHops = 3) {
21
- const start = fromUrlOrPath.startsWith("file:") ? fileURLToPath(fromUrlOrPath) : fromUrlOrPath;
22
- const startDir = path.dirname(start);
23
- let dir = startDir;
24
- for (let i = 0; i < MAX_ASCENT; i++) {
25
- const manifest = path.join(dir, "package.json");
26
- if (fs.existsSync(manifest)) {
27
- try {
28
- const parsed = JSON.parse(fs.readFileSync(manifest, "utf8"));
29
- if (parsed.name === PACKAGE_NAME) {
30
- return dir;
31
- }
32
- } catch {
33
- }
34
- }
35
- const parent = path.dirname(dir);
36
- if (parent === dir) {
37
- break;
38
- }
39
- dir = parent;
40
- }
41
- return path.resolve(startDir, ...Array.from({ length: legacyHops }, () => ".."));
42
- }
14
+ // src/scripts/_lib/update_check.ts
15
+ import { randomBytes } from "node:crypto";
16
+ import * as fs2 from "node:fs";
17
+ import * as path2 from "node:path";
43
18
 
44
19
  // src/scripts/_lib/user_global_paths.ts
45
- import * as fs2 from "node:fs";
20
+ import * as fs from "node:fs";
46
21
  import * as os from "node:os";
47
- import * as path2 from "node:path";
22
+ import * as path from "node:path";
48
23
  var EVENT4U_HOME_ENV = "EVENT4U_CONFIG_HOME";
49
- var DEFAULT_EVENT4U_ROOT_RELATIVE = path2.join(".event4u", "agent-config");
50
- var LEGACY_XDG_ROOT_RELATIVE = path2.join(".config", "agent-config");
24
+ var DEFAULT_EVENT4U_ROOT_RELATIVE = path.join(".event4u", "agent-config");
25
+ var LEGACY_XDG_ROOT_RELATIVE = path.join(".config", "agent-config");
51
26
  function expanduser(p) {
52
27
  if (p === "~") {
53
28
  return os.homedir();
54
29
  }
55
30
  if (p.startsWith("~/") || process.platform === "win32" && p.startsWith("~\\")) {
56
- return path2.join(os.homedir(), p.slice(2));
31
+ return path.join(os.homedir(), p.slice(2));
57
32
  }
58
33
  return p;
59
34
  }
@@ -69,10 +44,10 @@ function event4u_root(env) {
69
44
  if (override) {
70
45
  return expanduser(override);
71
46
  }
72
- return path2.join(os.homedir(), DEFAULT_EVENT4U_ROOT_RELATIVE);
47
+ return path.join(os.homedir(), DEFAULT_EVENT4U_ROOT_RELATIVE);
73
48
  }
74
49
  function legacy_xdg_root() {
75
- return path2.join(os.homedir(), LEGACY_XDG_ROOT_RELATIVE);
50
+ return path.join(os.homedir(), LEGACY_XDG_ROOT_RELATIVE);
76
51
  }
77
52
  function resolve_with_fallback(relative_name, options = {}) {
78
53
  if (is_absolute_like_python(relative_name)) {
@@ -80,12 +55,12 @@ function resolve_with_fallback(relative_name, options = {}) {
80
55
  `resolve_with_fallback expects a relative path, got '${relative_name}'`
81
56
  );
82
57
  }
83
- const new_path = path2.join(event4u_root(options.env ?? null), relative_name);
84
- if (fs2.existsSync(new_path)) {
58
+ const new_path = path.join(event4u_root(options.env ?? null), relative_name);
59
+ if (fs.existsSync(new_path)) {
85
60
  return new_path;
86
61
  }
87
- const legacy_path = path2.join(legacy_xdg_root(), relative_name);
88
- if (fs2.existsSync(legacy_path)) {
62
+ const legacy_path = path.join(legacy_xdg_root(), relative_name);
63
+ if (fs.existsSync(legacy_path)) {
89
64
  return legacy_path;
90
65
  }
91
66
  return null;
@@ -94,7 +69,295 @@ function write_target(relative_name, options = {}) {
94
69
  if (is_absolute_like_python(relative_name)) {
95
70
  throw new Error(`write_target expects a relative path, got '${relative_name}'`);
96
71
  }
97
- return path2.join(event4u_root(options.env ?? null), relative_name);
72
+ return path.join(event4u_root(options.env ?? null), relative_name);
73
+ }
74
+
75
+ // src/scripts/_lib/version_order.ts
76
+ var NUM = "(0|[1-9]\\d*)";
77
+ var IDENT = "[0-9A-Za-z-]+";
78
+ var VERSION_RE = new RegExp(
79
+ `^v*${NUM}\\.${NUM}\\.${NUM}(?:-(${IDENT}(?:\\.${IDENT})*))?(?:\\+${IDENT}(?:\\.${IDENT})*)?$`
80
+ );
81
+
82
+ // src/scripts/_lib/update_check.ts
83
+ var PACKAGE_NAME = "@event4u/agent-config";
84
+ var NPM_REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}/latest`;
85
+ var FETCH_TIMEOUT_S = 1;
86
+ var CHECK_WINDOW_MS = 24 * 60 * 60 * 1e3;
87
+ var STATE_FILENAME = "update-check.json";
88
+ var DEFAULT_STATE_PATH = write_target(STATE_FILENAME);
89
+ function _resolve_state_path() {
90
+ const found = resolve_with_fallback(STATE_FILENAME);
91
+ if (found !== null) {
92
+ return found;
93
+ }
94
+ return DEFAULT_STATE_PATH;
95
+ }
96
+ async function fetch_latest_document(options = {}) {
97
+ const timeout = options.timeout ?? FETCH_TIMEOUT_S;
98
+ const url = options.url ?? NPM_REGISTRY_URL;
99
+ const fetch_impl = options.fetch_impl ?? fetch;
100
+ try {
101
+ const resp = await fetch_impl(url, {
102
+ headers: {
103
+ Accept: "application/json",
104
+ "User-Agent": "agent-config-update-check"
105
+ },
106
+ signal: AbortSignal.timeout(timeout * 1e3)
107
+ });
108
+ const payload = await resp.json();
109
+ if (payload !== null && typeof payload === "object" && !Array.isArray(payload)) {
110
+ const doc = payload;
111
+ const version = doc["version"];
112
+ if (typeof version === "string" && version.trim()) {
113
+ const cfg = doc["agentConfig"];
114
+ const impact = cfg !== null && typeof cfg === "object" && !Array.isArray(cfg) ? cfg["impact"] : null;
115
+ return { version: version.trim(), impact: impact ?? null };
116
+ }
117
+ }
118
+ } catch {
119
+ return null;
120
+ }
121
+ return null;
122
+ }
123
+ function _cacheable_impact(impact) {
124
+ if (impact === null || typeof impact !== "object" || Array.isArray(impact)) return null;
125
+ const out = {};
126
+ for (const [version, entry] of Object.entries(impact)) {
127
+ if (!/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(version)) continue;
128
+ if (entry === null || typeof entry !== "object" || Array.isArray(entry)) continue;
129
+ const value = entry["impact"];
130
+ if (!["none", "automatic", "notice", "action"].includes(String(value))) continue;
131
+ out[version] = { impact: String(value), security: entry["security"] === true };
132
+ }
133
+ return Object.keys(out).length > 0 ? out : null;
134
+ }
135
+ function _read_state(state_path) {
136
+ try {
137
+ const raw = fs2.readFileSync(state_path, "utf-8");
138
+ const data = JSON.parse(raw);
139
+ if (data !== null && typeof data === "object" && !Array.isArray(data)) {
140
+ return data;
141
+ }
142
+ } catch {
143
+ }
144
+ return {};
145
+ }
146
+ function _write_state(state_path, payload) {
147
+ const parent = path2.dirname(state_path);
148
+ fs2.mkdirSync(parent, { recursive: true });
149
+ const tmp = path2.join(parent, `.update-check-${randomBytes(8).toString("hex")}`);
150
+ try {
151
+ const sorted = {};
152
+ for (const key of Object.keys(payload).sort()) {
153
+ sorted[key] = payload[key];
154
+ }
155
+ fs2.writeFileSync(tmp, JSON.stringify(sorted, null, 2), { encoding: "utf-8", mode: 384 });
156
+ fs2.chmodSync(tmp, 384);
157
+ fs2.renameSync(tmp, state_path);
158
+ } catch (err) {
159
+ try {
160
+ fs2.unlinkSync(tmp);
161
+ } catch {
162
+ }
163
+ throw err;
164
+ }
165
+ }
166
+ function _should_check(state, now) {
167
+ const last = state.last_check_utc;
168
+ if (typeof last !== "string") {
169
+ return true;
170
+ }
171
+ let normalized = last.replace(/Z/g, "+00:00");
172
+ if (!/[+-]\d{2}:?\d{2}$/.test(normalized)) {
173
+ normalized = `${normalized}+00:00`;
174
+ }
175
+ const last_ms = Date.parse(normalized);
176
+ if (Number.isNaN(last_ms)) {
177
+ return true;
178
+ }
179
+ return now.getTime() - last_ms >= CHECK_WINDOW_MS;
180
+ }
181
+ var GLOBAL_TREE = /[\\/](?:lib|npm)[\\/]node_modules[\\/]@event4u[\\/]agent-config[\\/]?$/;
182
+ function classify_install_origin(signals) {
183
+ const pin = signals.project_pin?.trim() ?? "";
184
+ if (pin !== "") {
185
+ return signals.latest && _is_newer(signals.latest, pin) ? "project-pin" : "unknown";
186
+ }
187
+ if (signals.package_root.split(/[\\/]+/).includes("_npx")) {
188
+ return "ephemeral";
189
+ }
190
+ if (signals.is_global_consumer || GLOBAL_TREE.test(signals.package_root)) {
191
+ return "global";
192
+ }
193
+ return "unknown";
194
+ }
195
+ function _format_banner(latest, installed, origin = "unknown") {
196
+ const head = `\u2139\uFE0F agent-config ${latest} available (you have ${installed}).`;
197
+ if (origin === "global") {
198
+ return `${head}
199
+ Update: agent-config upgrade`;
200
+ }
201
+ if (origin === "project-pin") {
202
+ return `${head}
203
+ Update: agent-config update`;
204
+ }
205
+ return head;
206
+ }
207
+ function _int_or_zero(part) {
208
+ const trimmed = part.trim();
209
+ if (/^[+-]?\d+$/.test(trimmed)) {
210
+ return parseInt(trimmed, 10);
211
+ }
212
+ return 0;
213
+ }
214
+ function _is_newer(latest, installed) {
215
+ const parse = (v) => {
216
+ const core = v.replace(/^v+/, "").split("-")[0] ?? "";
217
+ const parts = core.split(".");
218
+ const out = [];
219
+ for (const p of parts.slice(0, 3)) {
220
+ out.push(_int_or_zero(p));
221
+ }
222
+ while (out.length < 3) {
223
+ out.push(0);
224
+ }
225
+ return [out[0], out[1], out[2]];
226
+ };
227
+ const a = parse(latest);
228
+ const b = parse(installed);
229
+ for (let i = 0; i < 3; i += 1) {
230
+ if (a[i] > b[i]) {
231
+ return true;
232
+ }
233
+ if (a[i] < b[i]) {
234
+ return false;
235
+ }
236
+ }
237
+ return false;
238
+ }
239
+ function _resolve_origin(origin, latest) {
240
+ return typeof origin === "function" ? origin(latest) : origin;
241
+ }
242
+ function _format_utc(d) {
243
+ return d.toISOString().replace(/\.\d{3}Z$/, "Z");
244
+ }
245
+ async function check_for_update(installed_version, options = {}) {
246
+ const env = options.env ?? process.env;
247
+ if (env.AGENT_CONFIG_NO_UPDATE_CHECK === "1") {
248
+ return null;
249
+ }
250
+ if (env.CI === "1" || env.CI === "true" || env.GITHUB_ACTIONS === "true") {
251
+ return null;
252
+ }
253
+ const settings_enabled = options.settings_enabled ?? true;
254
+ if (!settings_enabled) {
255
+ return null;
256
+ }
257
+ let is_tty = options.is_tty ?? null;
258
+ if (is_tty === null) {
259
+ is_tty = Boolean(process.stdout.isTTY);
260
+ }
261
+ if (!is_tty) {
262
+ return null;
263
+ }
264
+ const now = options.now ?? /* @__PURE__ */ new Date();
265
+ const read_path = options.state_path ?? _resolve_state_path();
266
+ const write_path = options.state_path ?? DEFAULT_STATE_PATH;
267
+ const state = _read_state(read_path);
268
+ if (!_should_check(state, now)) {
269
+ const latest2 = state.last_seen_version;
270
+ if (typeof latest2 === "string" && _is_newer(latest2, installed_version)) {
271
+ return _format_banner(latest2, installed_version, _resolve_origin(options.origin, latest2));
272
+ }
273
+ return null;
274
+ }
275
+ let impact = null;
276
+ let latest;
277
+ if (options.fetcher === void 0) {
278
+ const doc = await fetch_latest_document();
279
+ latest = doc?.version ?? null;
280
+ impact = doc?.impact ?? null;
281
+ } else {
282
+ latest = await options.fetcher();
283
+ }
284
+ const fallback_seen = Object.prototype.hasOwnProperty.call(state, "last_seen_version") ? state.last_seen_version : "";
285
+ const payload = {
286
+ last_check_utc: _format_utc(now),
287
+ // Python: `latest or state.get("last_seen_version", "")`.
288
+ last_seen_version: latest ? latest : fallback_seen,
289
+ installed_version
290
+ };
291
+ const cacheable = _cacheable_impact(impact);
292
+ if (cacheable !== null) payload["last_seen_impact"] = cacheable;
293
+ else if (state["last_seen_impact"] !== void 0 && !latest) payload["last_seen_impact"] = state["last_seen_impact"];
294
+ try {
295
+ _write_state(write_path, payload);
296
+ } catch (err) {
297
+ const code = err.code;
298
+ if (typeof code !== "string") {
299
+ throw err;
300
+ }
301
+ }
302
+ if (!latest || !_is_newer(latest, installed_version)) {
303
+ return null;
304
+ }
305
+ return _format_banner(latest, installed_version, _resolve_origin(options.origin, latest));
306
+ }
307
+
308
+ // src/scripts/_cli/doctor_install_mode.ts
309
+ function isFile(p) {
310
+ try {
311
+ return fs3.statSync(p).isFile();
312
+ } catch {
313
+ return false;
314
+ }
315
+ }
316
+ function isDir(p) {
317
+ try {
318
+ return fs3.statSync(p).isDirectory();
319
+ } catch {
320
+ return false;
321
+ }
322
+ }
323
+ var INSTALL_MODE_MARKER_RELATIVE = "agents/.agent-state/install-mode.txt";
324
+ function _is_global_only_consumer(project_root) {
325
+ return isFile(path3.join(project_root, INSTALL_MODE_MARKER_RELATIVE)) || isDir(path3.join(project_root, "agents", "overrides"));
326
+ }
327
+
328
+ // src/scripts/_lib/agent_settings.ts
329
+ import { createRequire } from "node:module";
330
+ import * as fs5 from "node:fs";
331
+ import * as path5 from "node:path";
332
+
333
+ // src/scripts/_lib/package_root.ts
334
+ import * as fs4 from "node:fs";
335
+ import * as path4 from "node:path";
336
+ import { fileURLToPath } from "node:url";
337
+ var PACKAGE_NAME2 = "@event4u/agent-config";
338
+ var MAX_ASCENT = 16;
339
+ function resolvePackageRoot(fromUrlOrPath, legacyHops = 3) {
340
+ const start = fromUrlOrPath.startsWith("file:") ? fileURLToPath(fromUrlOrPath) : fromUrlOrPath;
341
+ const startDir = path4.dirname(start);
342
+ let dir = startDir;
343
+ for (let i = 0; i < MAX_ASCENT; i++) {
344
+ const manifest = path4.join(dir, "package.json");
345
+ if (fs4.existsSync(manifest)) {
346
+ try {
347
+ const parsed = JSON.parse(fs4.readFileSync(manifest, "utf8"));
348
+ if (parsed.name === PACKAGE_NAME2) {
349
+ return dir;
350
+ }
351
+ } catch {
352
+ }
353
+ }
354
+ const parent = path4.dirname(dir);
355
+ if (parent === dir) {
356
+ break;
357
+ }
358
+ dir = parent;
359
+ }
360
+ return path4.resolve(startDir, ...Array.from({ length: legacyHops }, () => ".."));
98
361
  }
99
362
 
100
363
  // src/shared/settingsCarveOut.ts
@@ -105,12 +368,6 @@ var SETTINGS_CARVE_OUT = [
105
368
  absentResolvesTo: "legacy-all",
106
369
  reason: "The template fallback applies only when NO global settings file exists. Once a file exists, an absent key means legacy-all by documented contract, so an existing install is never silently narrowed on upgrade."
107
370
  },
108
- {
109
- key: "projection.rule_workspaces",
110
- reader: "src/install/rule_scope.ts:96 ruleScopeFromSettings",
111
- absentResolvesTo: "null \u2014 LEGACY_ALL, i.e. every rule ships including maintainer-only ones",
112
- reason: "Same upgrade contract as projection.mode, and the failure is louder: an absent list widens the projection instead of narrowing it."
113
- },
114
371
  {
115
372
  key: "discipline_profile",
116
373
  reader: "work_engine/_lib/agent_settings.ts:1263",
@@ -153,6 +410,7 @@ function carveOutKeys() {
153
410
  }
154
411
 
155
412
  // src/scripts/_lib/settings_renamed_keys.ts
413
+ var SETTINGS_REMOVAL_RULE = "A settings key may be removed or renamed in a minor release only when no consumer project can rely on it \u2014 default-neutral and derivable, proven by a named test; any other removal or rename ships only in a major, and a renamed key's alias is dropped only in a major.";
156
414
  var RENAMED_KEYS = /* @__PURE__ */ new Map([
157
415
  ["planning.challenge_on_create", "planning.closure_pass"]
158
416
  ]);
@@ -183,7 +441,7 @@ function applyRenamedKeys(layer) {
183
441
  if (_warned.has(oldKey)) continue;
184
442
  _warned.add(oldKey);
185
443
  process.stderr.write(
186
- `\u26A0\uFE0F settings: \`${oldKey}\` was renamed to \`${newKey}\`. The old key still works for one minor; rename it in your .agent-settings.yml.
444
+ `\u26A0\uFE0F settings: \`${oldKey}\` was renamed to \`${newKey}\`; the old key still works. ${SETTINGS_REMOVAL_RULE} Rename it in your .agent-settings.yml.
187
445
  `
188
446
  );
189
447
  }
@@ -259,7 +517,11 @@ var REMOVED_KEYS = /* @__PURE__ */ new Map([
259
517
  ["pipelines.skill_improvement", "the skill-improvement-trigger rule; the capture is a proposal the user confirms"],
260
518
  ["consistency.cross_source", "the cross-source-consistency rule, always on; batching and the no-cheap-questions floor bound the noise"],
261
519
  ["subagents.downshift", "the model_tier each sub-task declares; downshift is always on"],
262
- ["ai_team.suppress_setup_hint", "nothing: the one-line team-mode setup hint is always shown"]
520
+ ["ai_team.suppress_setup_hint", "nothing: the one-line team-mode setup hint is always shown"],
521
+ // 2026-10-20 — the projection keys (ADR-293, road-to-a-setup-that-decides-itself Phase 4)
522
+ ["lean_projection.mode", "the computed layer-form decision (_lib/layer_form_decision.ts), plus `install --full` and src/config/layer-form-brakes.json as the two brakes. For one release window an installer converts a leftover `eager-all` into the install receipt pin and drops any other value, saying which (_lib/projection_key_migration.ts); the project tree reads the package-owned src/config/project-tree-form.json, never this key"],
523
+ ["lean_projection.hosts", "THINNABLE_HOSTS in _lib/lean_projection_mode.ts and the per-host row in src/config/host-injection-effect.json; no reader of this key remains"],
524
+ ["projection.rule_workspaces", "consumerRuleWorkspaces() in _lib/scoped_projection.ts, which derives the consumer workspace set from src/config/discovery/packs.yml \u2014 every id minus `agent-config-maintainer` \u2014 so a new pack reaches consumers without a settings edit"]
263
525
  ]);
264
526
  var _warnedRemovedKeys = /* @__PURE__ */ new Set();
265
527
  function _readDotted(root, dotted) {
@@ -326,10 +588,10 @@ var DEFAULT_PROJECT_FILE = ".agent-settings.yml";
326
588
  var LOCAL_PROJECT_FILE = ".agent-settings.local.yml";
327
589
  var LOCAL_PROJECT_SUBDIR = ["agents", "settings"];
328
590
  function _local_settings_path(project_root) {
329
- return path3.join(project_root, ...LOCAL_PROJECT_SUBDIR, LOCAL_PROJECT_FILE);
591
+ return path5.join(project_root, ...LOCAL_PROJECT_SUBDIR, LOCAL_PROJECT_FILE);
330
592
  }
331
593
  function _canonical_settings_path(project_root) {
332
- return path3.join(project_root, ...LOCAL_PROJECT_SUBDIR, DEFAULT_PROJECT_FILE);
594
+ return path5.join(project_root, ...LOCAL_PROJECT_SUBDIR, DEFAULT_PROJECT_FILE);
333
595
  }
334
596
  var USER_GLOBAL_FILENAME = "agent-settings.yml";
335
597
  function DEFAULT_USER_GLOBAL_FILE() {
@@ -385,22 +647,17 @@ var MERGEABLE_KEYS = [
385
647
  // GUI; whitelisting decides only whether the value SURVIVES the merge
386
648
  // (ADR-271, road-to-design-intent-conformance 2.3).
387
649
  "design.fidelity_mode",
388
- // `lean_projection.*` is a per-MACHINE setting and the install it governs is
389
- // a user-scope one: the layer being thinned is `~/.claude/rules`, which
390
- // belongs to the machine and not to any checkout. Without these two rows a
391
- // consumer who wrote the opt-in into the user-global file got no error, no
392
- // warning and no effect — the same silent-filter defect the two entries
393
- // above repair, reaching a third key, and unsatisfiable-by-construction on
394
- // an ADR-020 global-only install, where no project layer exists to carry it.
395
- // Whitelisting decides only whether a value SURVIVES the merge: it sets
396
- // nothing, and `installerThinsHost` still refuses a template-only value.
397
- "lean_projection.mode",
398
- "lean_projection.hosts"
650
+ // `retro.enabled` is the one switch over the automatic retro (ADR-292). It
651
+ // ships `true`, so the only value worth writing is `false`, and a user who
652
+ // writes it once in the user-global file expects every checkout without its
653
+ // own value to honour it — without this row the off switch would be
654
+ // discarded silently. A project value still wins.
655
+ "retro.enabled"
399
656
  ];
400
- var TEMPLATE_RELATIVE = path3.join("src", "config", "agent-settings.template.yml");
657
+ var TEMPLATE_RELATIVE = path5.join("src", "config", "agent-settings.template.yml");
401
658
  var _PACKAGE_ROOT = resolvePackageRoot(import.meta.url);
402
659
  function default_template_path() {
403
- return path3.join(_PACKAGE_ROOT, TEMPLATE_RELATIVE);
660
+ return path5.join(_PACKAGE_ROOT, TEMPLATE_RELATIVE);
404
661
  }
405
662
  function _is_placeholder(value) {
406
663
  return typeof value === "string" && /^__[A-Z0-9_]+__$/.test(value);
@@ -451,8 +708,8 @@ var _AGENTS_DIR_MARKERS = [
451
708
  var _LEGACY_ANCHOR_ENV = "AGENT_CONFIG_LEGACY_ANCHOR";
452
709
  function _exists(p) {
453
710
  try {
454
- fs3.lstatSync(p);
455
- fs3.statSync(p);
711
+ fs5.lstatSync(p);
712
+ fs5.statSync(p);
456
713
  return true;
457
714
  } catch {
458
715
  return false;
@@ -460,22 +717,22 @@ function _exists(p) {
460
717
  }
461
718
  function _is_dir(p) {
462
719
  try {
463
- return fs3.statSync(p).isDirectory();
720
+ return fs5.statSync(p).isDirectory();
464
721
  } catch {
465
722
  return false;
466
723
  }
467
724
  }
468
725
  function _is_file(p) {
469
726
  try {
470
- return fs3.statSync(p).isFile();
727
+ return fs5.statSync(p).isFile();
471
728
  } catch {
472
729
  return false;
473
730
  }
474
731
  }
475
732
  function _resolve(p) {
476
- const absolute = path3.resolve(p);
733
+ const absolute = path5.resolve(p);
477
734
  try {
478
- return fs3.realpathSync(absolute);
735
+ return fs5.realpathSync(absolute);
479
736
  } catch {
480
737
  return absolute;
481
738
  }
@@ -485,7 +742,7 @@ function _ancestor_chain(start) {
485
742
  let cursor = start;
486
743
  for (; ; ) {
487
744
  chain.push(cursor);
488
- const parent = path3.dirname(cursor);
745
+ const parent = path5.dirname(cursor);
489
746
  if (parent === cursor) {
490
747
  break;
491
748
  }
@@ -494,15 +751,15 @@ function _ancestor_chain(start) {
494
751
  return chain;
495
752
  }
496
753
  function _boundary_anchor_at(dir) {
497
- const agents_dir = path3.join(dir, "agents");
754
+ const agents_dir = path5.join(dir, "agents");
498
755
  if (_is_dir(agents_dir)) {
499
756
  for (const marker of _AGENTS_DIR_MARKERS) {
500
- if (_exists(path3.join(agents_dir, marker))) {
757
+ if (_exists(path5.join(agents_dir, marker))) {
501
758
  return ANCHOR_AGENTS_DIR;
502
759
  }
503
760
  }
504
761
  }
505
- if (_exists(path3.join(dir, ".git"))) {
762
+ if (_exists(path5.join(dir, ".git"))) {
506
763
  return ANCHOR_GIT;
507
764
  }
508
765
  return null;
@@ -513,7 +770,7 @@ function find_project_root_with_anchor(start) {
513
770
  const chain = _ancestor_chain(current);
514
771
  if (legacy) {
515
772
  for (const candidate of chain) {
516
- if (_exists(path3.join(candidate, ".git"))) {
773
+ if (_exists(path5.join(candidate, ".git"))) {
517
774
  return [candidate, ANCHOR_GIT];
518
775
  }
519
776
  }
@@ -527,7 +784,7 @@ function find_project_root_with_anchor(start) {
527
784
  }
528
785
  let outermost = null;
529
786
  for (const candidate of chain) {
530
- if (_exists(path3.join(candidate, DEFAULT_PROJECT_FILE))) {
787
+ if (_exists(path5.join(candidate, DEFAULT_PROJECT_FILE))) {
531
788
  outermost = candidate;
532
789
  }
533
790
  }
@@ -543,13 +800,13 @@ function find_project_root(start) {
543
800
  function _resolve_cascade_paths(cwd, project_path) {
544
801
  if (cwd === null) {
545
802
  const legacy = project_path ? project_path : DEFAULT_PROJECT_FILE;
546
- const parent = path3.dirname(legacy);
803
+ const parent = path5.dirname(legacy);
547
804
  return [legacy, _canonical_settings_path(parent), _local_settings_path(parent)];
548
805
  }
549
806
  const root = find_project_root(cwd);
550
807
  if (root === null) {
551
808
  const legacy = project_path ? project_path : DEFAULT_PROJECT_FILE;
552
- const parent = path3.dirname(legacy);
809
+ const parent = path5.dirname(legacy);
553
810
  return [legacy, _canonical_settings_path(parent), _local_settings_path(parent)];
554
811
  }
555
812
  const cwd_resolved = _resolve(cwd);
@@ -560,7 +817,7 @@ function _resolve_cascade_paths(cwd, project_path) {
560
817
  if (cursor === root) {
561
818
  break;
562
819
  }
563
- const parent = path3.dirname(cursor);
820
+ const parent = path5.dirname(cursor);
564
821
  if (parent === cursor) {
565
822
  break;
566
823
  }
@@ -568,11 +825,37 @@ function _resolve_cascade_paths(cwd, project_path) {
568
825
  }
569
826
  chain.reverse();
570
827
  return [
571
- ...chain.map((d) => path3.join(d, DEFAULT_PROJECT_FILE)),
828
+ ...chain.map((d) => path5.join(d, DEFAULT_PROJECT_FILE)),
572
829
  _canonical_settings_path(root),
573
830
  _local_settings_path(root)
574
831
  ];
575
832
  }
833
+ function _probe_yaml(p) {
834
+ if (!_is_file(p)) return "absent";
835
+ let YAML;
836
+ try {
837
+ YAML = _require("yaml");
838
+ } catch {
839
+ return "malformed";
840
+ }
841
+ try {
842
+ YAML.parse(fs5.readFileSync(p, "utf-8"), { version: "1.1" });
843
+ return "valid";
844
+ } catch (err) {
845
+ if (_is_yaml_error(err) || _is_os_error(err)) return "malformed";
846
+ throw err;
847
+ }
848
+ }
849
+ function settings_layer_states(options = {}) {
850
+ const project_path = options.project_path ?? null;
851
+ const cwd = options.cwd ?? null;
852
+ const user_global = options.user_global_path ? [options.user_global_path] : user_global_settings_paths();
853
+ const out = [];
854
+ for (const p of [...user_global, ..._resolve_cascade_paths(cwd, project_path)]) {
855
+ out.push({ path: p, state: _probe_yaml(p) });
856
+ }
857
+ return out;
858
+ }
576
859
  function load_agent_settings(options = {}) {
577
860
  const project_path = options.project_path ?? null;
578
861
  const user_global_path = options.user_global_path ?? null;
@@ -614,7 +897,7 @@ function _read_yaml(p) {
614
897
  }
615
898
  let data;
616
899
  try {
617
- const text = fs3.readFileSync(p, "utf-8");
900
+ const text = fs5.readFileSync(p, "utf-8");
618
901
  data = YAML.parse(text, { version: "1.1" });
619
902
  if (data === null || data === void 0) {
620
903
  data = {};
@@ -713,216 +996,269 @@ function _is_plain_dict(value) {
713
996
  return typeof value === "object" && value !== null && !Array.isArray(value);
714
997
  }
715
998
 
716
- // src/scripts/_lib/scan_scope.ts
717
- import * as fs4 from "node:fs";
718
- import * as path4 from "node:path";
719
- var DeadScopeError = class extends Error {
720
- gate;
721
- constructor(gate, message) {
722
- super(message);
723
- this.name = "DeadScopeError";
724
- this.gate = gate;
725
- }
726
- };
727
- function assertWatchlistResolves(opts) {
728
- const resolved = opts.candidates.filter((rel) => {
729
- try {
730
- return fs4.statSync(path4.join(opts.repoRoot, rel)).isFile();
731
- } catch {
732
- return false;
733
- }
734
- });
735
- if (resolved.length === 0) {
736
- throw new DeadScopeError(
737
- opts.gate,
738
- `${opts.gate}: none of its ${opts.candidates.length} guarded path(s) exist under ${opts.repoRoot} \u2014 the guard is watching phantoms and can never fire. Checked: ${opts.candidates.join(", ")}`
739
- );
740
- }
741
- return resolved;
742
- }
999
+ // src/scripts/_lib/advisory_notice.ts
1000
+ import { createHash } from "node:crypto";
1001
+ import * as fs7 from "node:fs";
1002
+ import * as path7 from "node:path";
743
1003
 
744
- // src/scripts/_lib/update_check.ts
745
- import { randomBytes } from "node:crypto";
746
- import * as fs5 from "node:fs";
747
- import * as path5 from "node:path";
748
- var PACKAGE_NAME2 = "@event4u/agent-config";
749
- var NPM_REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME2}/latest`;
750
- var FETCH_TIMEOUT_S = 1;
751
- var CHECK_WINDOW_MS = 24 * 60 * 60 * 1e3;
752
- var STATE_FILENAME = "update-check.json";
753
- var DEFAULT_STATE_PATH = write_target(STATE_FILENAME);
754
- function _resolve_state_path() {
755
- const found = resolve_with_fallback(STATE_FILENAME);
756
- if (found !== null) {
757
- return found;
1004
+ // src/scripts/_lib/git_common_dir.ts
1005
+ import fs6 from "node:fs";
1006
+ import path6 from "node:path";
1007
+ function realpath_or_self(p) {
1008
+ try {
1009
+ return fs6.realpathSync(p);
1010
+ } catch {
1011
+ return p;
758
1012
  }
759
- return DEFAULT_STATE_PATH;
760
1013
  }
761
- async function fetch_latest_from_npm(options = {}) {
762
- const timeout = options.timeout ?? FETCH_TIMEOUT_S;
763
- const url = options.url ?? NPM_REGISTRY_URL;
764
- const fetch_impl = options.fetch_impl ?? fetch;
1014
+ function git_common_dir(project_root) {
1015
+ const dot_git = path6.join(project_root, ".git");
765
1016
  try {
766
- const resp = await fetch_impl(url, {
767
- headers: {
768
- Accept: "application/json",
769
- "User-Agent": "agent-config-update-check"
770
- },
771
- signal: AbortSignal.timeout(timeout * 1e3)
772
- });
773
- const payload = await resp.json();
774
- if (payload !== null && typeof payload === "object" && !Array.isArray(payload)) {
775
- const version = payload.version;
776
- if (typeof version === "string" && version.trim()) {
777
- return version.trim();
778
- }
1017
+ const st = fs6.statSync(dot_git);
1018
+ if (st.isDirectory()) {
1019
+ return realpath_or_self(dot_git);
1020
+ }
1021
+ const m = fs6.readFileSync(dot_git, "utf-8").match(/^gitdir:\s*(.+)\s*$/m);
1022
+ if (m === null) {
1023
+ return null;
1024
+ }
1025
+ const gitdir = path6.resolve(project_root, m[1].trim());
1026
+ const commondir_file = path6.join(gitdir, "commondir");
1027
+ if (fs6.existsSync(commondir_file)) {
1028
+ const common = path6.resolve(gitdir, fs6.readFileSync(commondir_file, "utf-8").trim());
1029
+ return realpath_or_self(common);
779
1030
  }
1031
+ return realpath_or_self(gitdir);
780
1032
  } catch {
781
1033
  return null;
782
1034
  }
783
- return null;
784
1035
  }
785
- function _read_state(state_path) {
1036
+
1037
+ // src/scripts/_lib/undeployed_fixes.ts
1038
+ var UNDEPLOYED_AFTER_HOURS = 24;
1039
+ function mergedNotDeployed(all, findings, now = /* @__PURE__ */ new Date()) {
1040
+ const byKey = new Map(findings.map((f) => [f.key, f]));
1041
+ const rows = [];
1042
+ for (const r of Object.values(all)) {
1043
+ if (r.state !== "fixed-in-trunk" && r.state !== "fixed-released") continue;
1044
+ const since = r.stamps["fixed-in-trunk"];
1045
+ if (since === void 0) continue;
1046
+ const hours = (now.getTime() - Date.parse(since)) / 36e5;
1047
+ if (!Number.isFinite(hours) || hours < UNDEPLOYED_AFTER_HOURS) continue;
1048
+ const f = byKey.get(r.key);
1049
+ if (f !== void 0 && f.tier !== "T0" && f.tier !== "T1") continue;
1050
+ rows.push({ id: r.key.split("|")[0] ?? r.key, mergeSha: r.merge_sha, hours: Math.floor(hours) });
1051
+ }
1052
+ return rows;
1053
+ }
1054
+
1055
+ // src/scripts/_lib/advisory_notice.ts
1056
+ var STALE_AFTER_HOURS = 24;
1057
+ var SILENCE_NOTICE_DAYS = 3;
1058
+ function readAdvisorySettings(root) {
786
1059
  try {
787
- const raw = fs5.readFileSync(state_path, "utf-8");
788
- const data = JSON.parse(raw);
789
- if (data !== null && typeof data === "object" && !Array.isArray(data)) {
790
- return data;
791
- }
1060
+ if (settings_layer_states({ cwd: root }).some((l) => l.state === "malformed")) return { mode: "off", egress: "none", kev: "off" };
1061
+ const section = load_agent_settings({ cwd: root })["advisories"];
1062
+ const s = section !== null && typeof section === "object" && !Array.isArray(section) ? section : {};
1063
+ return {
1064
+ // An unquoted `off` is YAML's boolean false: both mean off.
1065
+ mode: s["mode"] === "off" || s["mode"] === false ? "off" : "notify",
1066
+ egress: s["egress"] === "none" ? "none" : "query",
1067
+ kev: s["kev"] === "off" || s["kev"] === false ? "off" : "on"
1068
+ };
792
1069
  } catch {
1070
+ return { mode: "off", egress: "none", kev: "off" };
793
1071
  }
794
- return {};
795
1072
  }
796
- function _write_state(state_path, payload) {
797
- const parent = path5.dirname(state_path);
798
- fs5.mkdirSync(parent, { recursive: true });
799
- const tmp = path5.join(parent, `.update-check-${randomBytes(8).toString("hex")}`);
1073
+ function statePath(root) {
1074
+ const common = git_common_dir(root);
1075
+ if (common === null) return null;
1076
+ let real = path7.resolve(root);
800
1077
  try {
801
- const sorted = {};
802
- for (const key of Object.keys(payload).sort()) {
803
- sorted[key] = payload[key];
804
- }
805
- fs5.writeFileSync(tmp, JSON.stringify(sorted, null, 2), { encoding: "utf-8", mode: 384 });
806
- fs5.chmodSync(tmp, 384);
807
- fs5.renameSync(tmp, state_path);
808
- } catch (err) {
1078
+ real = fs7.realpathSync(root);
1079
+ } catch {
1080
+ }
1081
+ const key = createHash("sha256").update(real).digest("hex").slice(0, 16);
1082
+ return path7.join(common, "agent-config", "advisories", `${key}.json`);
1083
+ }
1084
+ function remediationsPath(root) {
1085
+ const common = git_common_dir(root);
1086
+ return common === null ? null : path7.join(common, "agent-config", "advisories", "remediations.json");
1087
+ }
1088
+ function readRemediations(root) {
1089
+ const p = remediationsPath(root);
1090
+ if (p !== null) {
809
1091
  try {
810
- fs5.unlinkSync(tmp);
1092
+ const doc = JSON.parse(fs7.readFileSync(p, "utf-8"));
1093
+ if (isObject(doc)) return doc;
811
1094
  } catch {
812
1095
  }
813
- throw err;
814
1096
  }
1097
+ return readState(root)?.remediations ?? {};
815
1098
  }
816
- function _should_check(state, now) {
817
- const last = state.last_check_utc;
818
- if (typeof last !== "string") {
819
- return true;
820
- }
821
- let normalized = last.replace(/Z/g, "+00:00");
822
- if (!/[+-]\d{2}:?\d{2}$/.test(normalized)) {
823
- normalized = `${normalized}+00:00`;
824
- }
825
- const last_ms = Date.parse(normalized);
826
- if (Number.isNaN(last_ms)) {
827
- return true;
1099
+ function readState(root) {
1100
+ const p = statePath(root);
1101
+ if (p === null) return null;
1102
+ try {
1103
+ const doc = JSON.parse(fs7.readFileSync(p, "utf-8"));
1104
+ return isState(doc) ? doc : null;
1105
+ } catch {
1106
+ return null;
828
1107
  }
829
- return now.getTime() - last_ms >= CHECK_WINDOW_MS;
830
1108
  }
831
- function _format_banner(latest, installed) {
832
- return `\u2139\uFE0F agent-config ${latest} available (you have ${installed}).
833
- Update: npx ${PACKAGE_NAME2} update`;
1109
+ var isObject = (v) => v !== null && typeof v === "object" && !Array.isArray(v);
1110
+ function isState(doc) {
1111
+ if (!isObject(doc) || doc["schema"] !== 1 || typeof doc["at"] !== "string") return false;
1112
+ if (!Array.isArray(doc["findings"]) || !doc["findings"].every((f) => isObject(f) && typeof f["key"] === "string")) return false;
1113
+ const n = doc["notice"];
1114
+ if (n !== null && n !== void 0 && !(isObject(n) && Array.isArray(n["interrupt"]) && typeof n["digest"] === "number")) return false;
1115
+ if (doc["silent_since"] !== void 0 && !isObject(doc["silent_since"])) return false;
1116
+ if (doc["remediations"] !== void 0 && !isObject(doc["remediations"])) return false;
1117
+ return true;
834
1118
  }
835
- function _int_or_zero(part) {
836
- const trimmed = part.trim();
837
- if (/^[+-]?\d+$/.test(trimmed)) {
838
- return parseInt(trimmed, 10);
839
- }
840
- return 0;
1119
+ var MAX_NOTICE_LINES = 8;
1120
+ var FIELD = /^[A-Za-z0-9@._:/+~^<>=*-]{1,200}$/;
1121
+ function safeField(v, max = 80) {
1122
+ if (typeof v === "number" && Number.isInteger(v) && v >= 0 && v < 1e7) return String(v);
1123
+ if (typeof v !== "string" || v.length > max || !FIELD.test(v)) return "?";
1124
+ return v;
841
1125
  }
842
- function _is_newer(latest, installed) {
843
- const parse = (v) => {
844
- const core = v.replace(/^v+/, "").split("-")[0] ?? "";
845
- const parts = core.split(".");
846
- const out = [];
847
- for (const p of parts.slice(0, 3)) {
848
- out.push(_int_or_zero(p));
849
- }
850
- while (out.length < 3) {
851
- out.push(0);
852
- }
853
- return [out[0], out[1], out[2]];
854
- };
855
- const a = parse(latest);
856
- const b = parse(installed);
857
- for (let i = 0; i < 3; i += 1) {
858
- if (a[i] > b[i]) {
859
- return true;
860
- }
861
- if (a[i] < b[i]) {
862
- return false;
863
- }
864
- }
865
- return false;
1126
+ var TIERS = /* @__PURE__ */ new Set(["T0", "T1", "T2", "T3"]);
1127
+ var VERDICTS = /* @__PURE__ */ new Set([
1128
+ "affected",
1129
+ "fix-available",
1130
+ "fix-fresh",
1131
+ "no-fix",
1132
+ "malware",
1133
+ "eol",
1134
+ "eol-soon",
1135
+ "pre-announced",
1136
+ "unknown",
1137
+ "accepted"
1138
+ ]);
1139
+ function enumField(v, allowed) {
1140
+ return typeof v === "string" && allowed.has(v) ? v : "?";
866
1141
  }
867
- function _format_utc(d) {
868
- return d.toISOString().replace(/\.\d{3}Z$/, "Z");
1142
+ function where(f) {
1143
+ return f.file === "" ? "" : ` (${safeField(f.file, 200)}:${safeField(f.line)})`;
869
1144
  }
870
- async function check_for_update(installed_version, options = {}) {
871
- const env = options.env ?? process.env;
872
- if (env.AGENT_CONFIG_NO_UPDATE_CHECK === "1") {
873
- return null;
1145
+ function describe(f) {
1146
+ const tier = enumField(f.tier, TIERS);
1147
+ const verdict = enumField(f.verdict, VERDICTS);
1148
+ const pkg = safeField(f.package);
1149
+ const ver = f.version === null ? "" : ` ${safeField(f.version)}`;
1150
+ const fix = f.fixed === null ? "" : ` \u2192 ${safeField(f.fixed)}`;
1151
+ const date = safeField(f.date);
1152
+ const ids = [f.id, ...Array.isArray(f.aliases) ? f.aliases : []].slice(0, 3).map((i) => safeField(i)).join(", ");
1153
+ const kev = f.kev === true ? " \u2014 known exploited (KEV)" : "";
1154
+ switch (verdict) {
1155
+ case "pre-announced":
1156
+ return `${tier} ${pkg}: a security release is pre-announced (${date}); fixed versions not yet named${where(f)}`;
1157
+ case "eol":
1158
+ return `${tier} ${pkg}${ver}: security support ended ${date}${where(f)}`;
1159
+ case "eol-soon":
1160
+ return `${tier} ${pkg}${ver}: security support ends ${date}${where(f)}`;
1161
+ case "unknown":
1162
+ if (typeof f.note === "string" && f.note.includes("egress-none")) return `${tier} ${pkg}: not checked \u2014 advisories.egress is none`;
1163
+ if (typeof f.note === "string" && f.note.includes("lockfile-unsupported")) return `${tier} ${pkg}: not checked \u2014 a lockfile format this audit cannot read (yarn, pnpm, bun or npm v1)`;
1164
+ if (typeof f.note === "string" && f.note.startsWith("vendor-patched")) return `${tier} ${pkg}${ver}: distro-patched \u2014 judge it by the distro's own advisory${where(f)}`;
1165
+ return `${tier} ${pkg}: unknown \u2014 the source did not answer`;
1166
+ default:
1167
+ return `${tier} ${pkg}${ver}${fix} [${verdict}] ${ids}${kev}${where(f)}`;
874
1168
  }
875
- if (env.CI === "1" || env.CI === "true" || env.GITHUB_ACTIONS === "true") {
876
- return null;
1169
+ }
1170
+ function noticeLines(state, now = /* @__PURE__ */ new Date(), remediations = null) {
1171
+ if (state === null) return [];
1172
+ const lines = [];
1173
+ const atMs = Date.parse(state.at);
1174
+ const ageH = Number.isFinite(atMs) && atMs <= now.getTime() ? (now.getTime() - atMs) / 36e5 : Number.POSITIVE_INFINITY;
1175
+ const byKey = new Map(state.findings.map((f) => [f.key, f]));
1176
+ const pending = state.notice?.interrupt.map((k) => byKey.get(k)).filter((f) => f !== void 0) ?? [];
1177
+ for (const f of pending) {
1178
+ lines.push(`advisory ${describe(f)} \u2014 fix now: /audit deps fix ${safeField(f.id)} (here or in its own worktree), or later`);
1179
+ }
1180
+ if ((state.notice?.digest ?? 0) > 0) lines.push(`advisories: ${safeField(state.notice.digest)} more in the digest \u2014 /audit deps`);
1181
+ for (const [source, since] of Object.entries(state.silent_since ?? {}).slice(0, 4)) {
1182
+ const sinceMs = Date.parse(String(since));
1183
+ if (!Number.isFinite(sinceMs) || sinceMs > now.getTime()) {
1184
+ lines.push(`advisories: ${safeField(source)} silent since an unreadable date \u2014 findings from it are unknown, not clear`);
1185
+ continue;
1186
+ }
1187
+ const days = (now.getTime() - sinceMs) / 864e5;
1188
+ if (days >= SILENCE_NOTICE_DAYS) lines.push(`advisories: ${safeField(source)} has not answered for ${Math.floor(days)} days \u2014 findings from it are unknown, not clear`);
877
1189
  }
878
- const settings_enabled = options.settings_enabled ?? true;
879
- if (!settings_enabled) {
880
- return null;
1190
+ for (const u of mergedNotDeployed(remediations ?? state.remediations ?? {}, state.findings, now)) {
1191
+ const sha = u.mergeSha === null ? "" : ` (${safeField(u.mergeSha.slice(0, 12))})`;
1192
+ lines.push(`advisory ${safeField(u.id)}: merged${sha} but not deployed for ${safeField(u.hours)} h \u2014 deploy it the way this project deploys`);
881
1193
  }
882
- let is_tty = options.is_tty ?? null;
883
- if (is_tty === null) {
884
- is_tty = Boolean(process.stdout.isTTY);
1194
+ if (ageH === Number.POSITIVE_INFINITY) {
1195
+ lines.push("advisories: data age unreadable \u2014 run `agent-config audit:deps refresh`");
1196
+ } else if (ageH >= STALE_AFTER_HOURS) {
1197
+ lines.push(`advisories: data is ${Math.floor(ageH / 24) || 1} day(s) old \u2014 run \`agent-config audit:deps refresh\``);
885
1198
  }
886
- if (!is_tty) {
887
- return null;
1199
+ return lines.length > MAX_NOTICE_LINES ? [...lines.slice(0, MAX_NOTICE_LINES - 1), `advisories: ${lines.length - MAX_NOTICE_LINES + 1} more \u2014 /audit deps`] : lines;
1200
+ }
1201
+ function sessionNotice(root, now = /* @__PURE__ */ new Date(), deliver) {
1202
+ if (readAdvisorySettings(root).mode === "off") return null;
1203
+ const state = readState(root);
1204
+ if (state === null) return null;
1205
+ const stamp = statePath(root) + ".shown";
1206
+ let prev = {};
1207
+ try {
1208
+ prev = JSON.parse(fs7.readFileSync(stamp, "utf-8"));
1209
+ } catch {
1210
+ prev = {};
1211
+ }
1212
+ const day = now.toISOString().slice(0, 10);
1213
+ const lines = noticeLines(state, now, readRemediations(root));
1214
+ const keyOf = (l) => createHash("sha256").update(l.replace(/\b\d+ (?:h|days?|day\(s\))\b/g, "#")).digest("hex").slice(0, 16);
1215
+ const isReminder = (l) => /^advisories: (?:data|\S+ (?:has not answered|silent since))|: merged/.test(l);
1216
+ const once = new Set(Array.isArray(prev.once) ? prev.once : []);
1217
+ const today = new Set(prev.day === day && Array.isArray(prev.today) ? prev.today : []);
1218
+ const out = lines.filter((l) => isReminder(l) ? !today.has(keyOf(l)) : !once.has(keyOf(l)));
1219
+ if (out.length === 0) return null;
1220
+ const text = out.join("\n");
1221
+ if (deliver !== void 0 && !deliver(text)) return null;
1222
+ for (const l of out) (isReminder(l) ? today : once).add(keyOf(l));
1223
+ try {
1224
+ fs7.writeFileSync(stamp, `${JSON.stringify({ day, once: [...once].slice(-200), today: [...today] })}
1225
+ `);
1226
+ } catch {
888
1227
  }
889
- const now = options.now ?? /* @__PURE__ */ new Date();
890
- const read_path = options.state_path ?? _resolve_state_path();
891
- const write_path = options.state_path ?? DEFAULT_STATE_PATH;
892
- const state = _read_state(read_path);
893
- if (!_should_check(state, now)) {
894
- const latest2 = state.last_seen_version;
895
- if (typeof latest2 === "string" && _is_newer(latest2, installed_version)) {
896
- return _format_banner(latest2, installed_version);
897
- }
898
- return null;
1228
+ return text;
1229
+ }
1230
+
1231
+ // src/scripts/_lib/scan_scope.ts
1232
+ import * as fs8 from "node:fs";
1233
+ import * as path8 from "node:path";
1234
+ var DeadScopeError = class extends Error {
1235
+ gate;
1236
+ constructor(gate, message) {
1237
+ super(message);
1238
+ this.name = "DeadScopeError";
1239
+ this.gate = gate;
899
1240
  }
900
- const fetcher = options.fetcher ?? (() => fetch_latest_from_npm());
901
- const latest = await fetcher();
902
- const fallback_seen = Object.prototype.hasOwnProperty.call(state, "last_seen_version") ? state.last_seen_version : "";
903
- const payload = {
904
- last_check_utc: _format_utc(now),
905
- // Python: `latest or state.get("last_seen_version", "")`.
906
- last_seen_version: latest ? latest : fallback_seen,
907
- installed_version
908
- };
909
- try {
910
- _write_state(write_path, payload);
911
- } catch (err) {
912
- const code = err.code;
913
- if (typeof code !== "string") {
914
- throw err;
1241
+ };
1242
+ function assertWatchlistResolves(opts) {
1243
+ const resolved = opts.candidates.filter((rel) => {
1244
+ try {
1245
+ return fs8.statSync(path8.join(opts.repoRoot, rel)).isFile();
1246
+ } catch {
1247
+ return false;
915
1248
  }
1249
+ });
1250
+ if (resolved.length === 0) {
1251
+ throw new DeadScopeError(
1252
+ opts.gate,
1253
+ `${opts.gate}: none of its ${opts.candidates.length} guarded path(s) exist under ${opts.repoRoot} \u2014 the guard is watching phantoms and can never fire. Checked: ${opts.candidates.join(", ")}`
1254
+ );
916
1255
  }
917
- if (!latest || !_is_newer(latest, installed_version)) {
918
- return null;
919
- }
920
- return _format_banner(latest, installed_version);
1256
+ return resolved;
921
1257
  }
922
1258
 
923
1259
  // src/scripts/check_update_banner.ts
924
1260
  var _HERE = fileURLToPath2(import.meta.url);
925
- var ROOT = path6.resolve(path6.dirname(_HERE), "..", "..");
1261
+ var ROOT = path9.resolve(path9.dirname(_HERE), "..", "..");
926
1262
  var DOC = `Thin CLI wrapper: emit the daily update-check banner to stderr.
927
1263
 
928
1264
  Invoked by the \`scripts/agent-config\` dispatcher **after** a
@@ -936,9 +1272,9 @@ Usage:
936
1272
  When \`--installed-version\` is omitted, reads \`package.json\` next to
937
1273
  the package root (\`$PACKAGE_ROOT/package.json\`).`;
938
1274
  function _read_installed_version(package_root) {
939
- const candidate = path6.join(package_root, "package.json");
1275
+ const candidate = path9.join(package_root, "package.json");
940
1276
  try {
941
- const data = JSON.parse(fs6.readFileSync(candidate, "utf-8"));
1277
+ const data = JSON.parse(fs9.readFileSync(candidate, "utf-8"));
942
1278
  const version = data["version"];
943
1279
  if (typeof version === "string" && version.trim()) {
944
1280
  return version.trim();
@@ -962,6 +1298,22 @@ function _read_settings_flag(cwd) {
962
1298
  }
963
1299
  return true;
964
1300
  }
1301
+ function _read_project_pin(cwd) {
1302
+ try {
1303
+ const pin = load_agent_settings({ cwd })["agent_config_version"];
1304
+ return typeof pin === "string" && pin.trim() !== "" ? pin.trim() : null;
1305
+ } catch {
1306
+ return null;
1307
+ }
1308
+ }
1309
+ function _detect_origin(package_root, cwd, latest) {
1310
+ return classify_install_origin({
1311
+ package_root,
1312
+ project_pin: _read_project_pin(cwd),
1313
+ latest,
1314
+ is_global_consumer: _is_global_only_consumer(cwd)
1315
+ });
1316
+ }
965
1317
  function parse_args(argv) {
966
1318
  let installed_version = "";
967
1319
  let cwd = process.cwd();
@@ -988,6 +1340,19 @@ async function main(argv = process.argv.slice(2)) {
988
1340
  process.stdout.write(DOC + "\n");
989
1341
  return 0;
990
1342
  }
1343
+ try {
1344
+ sessionNotice(path9.resolve(args.cwd), void 0, (text) => {
1345
+ if (!tty.isatty(3)) return false;
1346
+ try {
1347
+ fs9.writeSync(3, `${text}
1348
+ `);
1349
+ return true;
1350
+ } catch {
1351
+ return false;
1352
+ }
1353
+ });
1354
+ } catch {
1355
+ }
991
1356
  if (!args.installed_version) {
992
1357
  try {
993
1358
  assertWatchlistResolves({
@@ -1010,14 +1375,17 @@ async function main(argv = process.argv.slice(2)) {
1010
1375
  }
1011
1376
  let cwd;
1012
1377
  try {
1013
- cwd = path6.resolve(args.cwd);
1378
+ cwd = path9.resolve(args.cwd);
1014
1379
  } catch {
1015
1380
  cwd = ROOT;
1016
1381
  }
1017
1382
  const enabled = _read_settings_flag(cwd);
1018
1383
  let banner;
1019
1384
  try {
1020
- banner = await check_for_update(installed, { settings_enabled: enabled });
1385
+ banner = await check_for_update(installed, {
1386
+ settings_enabled: enabled,
1387
+ origin: (latest) => _detect_origin(ROOT, cwd, latest)
1388
+ });
1021
1389
  } catch {
1022
1390
  return 0;
1023
1391
  }
@@ -1031,17 +1399,17 @@ function _isCliEntry() {
1031
1399
  return false;
1032
1400
  }
1033
1401
  if (true) {
1034
- if (path6.basename(process.argv[1], ".js") === "check_update_banner") {
1402
+ if (path9.basename(process.argv[1], ".js") === "check_update_banner") {
1035
1403
  return true;
1036
1404
  }
1037
1405
  }
1038
- const argvUrl = pathToFileURL(path6.resolve(process.argv[1])).href;
1406
+ const argvUrl = pathToFileURL(path9.resolve(process.argv[1])).href;
1039
1407
  if (import.meta.url === argvUrl) {
1040
1408
  return true;
1041
1409
  }
1042
1410
  try {
1043
- const here = fs6.realpathSync(fileURLToPath2(import.meta.url));
1044
- const argv = fs6.realpathSync(path6.resolve(process.argv[1]));
1411
+ const here = fs9.realpathSync(fileURLToPath2(import.meta.url));
1412
+ const argv = fs9.realpathSync(path9.resolve(process.argv[1]));
1045
1413
  return here === argv;
1046
1414
  } catch {
1047
1415
  return false;
@@ -1052,6 +1420,7 @@ if (_isCliEntry() || process.argv[1] === _HERE) {
1052
1420
  }
1053
1421
  export {
1054
1422
  ROOT,
1423
+ _detect_origin,
1055
1424
  _read_installed_version,
1056
1425
  _read_settings_flag,
1057
1426
  main,