@event4u/agent-config 14.22.0 → 15.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 (557) hide show
  1. package/.augment-plugin/marketplace.json +3 -3
  2. package/.augment-plugin/plugin.json +1 -1
  3. package/.claude-plugin/marketplace.json +1 -1
  4. package/CHANGELOG.md +333 -356
  5. package/README.md +1 -1
  6. package/dist/agent-src/commands/agent-handoff.md +8 -7
  7. package/dist/agent-src/commands/agents/init.md +1 -1
  8. package/dist/agent-src/commands/agents/user/accept.md +4 -4
  9. package/dist/agent-src/commands/agents/user/delete.md +2 -2
  10. package/dist/agent-src/commands/agents/user/init.md +3 -3
  11. package/dist/agent-src/commands/agents/user/review.md +3 -3
  12. package/dist/agent-src/commands/agents/user/show.md +3 -3
  13. package/dist/agent-src/commands/agents/user/update.md +2 -2
  14. package/dist/agent-src/commands/agents/user.md +6 -6
  15. package/dist/agent-src/commands/analytics/prune.md +1 -1
  16. package/dist/agent-src/commands/analytics/show.md +2 -2
  17. package/dist/agent-src/commands/analyze/decision.md +2 -2
  18. package/dist/agent-src/commands/analyze/inbox.md +5 -5
  19. package/dist/agent-src/commands/analyze/incident.md +3 -3
  20. package/dist/agent-src/commands/analyze/near-miss.md +3 -3
  21. package/dist/agent-src/commands/analyze/postmortem.md +4 -4
  22. package/dist/agent-src/commands/analyze/premortem.md +2 -2
  23. package/dist/agent-src/commands/analyze.md +2 -2
  24. package/dist/agent-src/commands/bug/fix.md +1 -1
  25. package/dist/agent-src/commands/bug/investigate.md +2 -2
  26. package/dist/agent-src/commands/cost/profile.md +3 -3
  27. package/dist/agent-src/commands/design.md +1 -1
  28. package/dist/agent-src/commands/feature/explore.md +1 -1
  29. package/dist/agent-src/commands/feature/plan.md +2 -2
  30. package/dist/agent-src/commands/feature/roadmap.md +2 -2
  31. package/dist/agent-src/commands/ghostwriter/fetch.md +4 -4
  32. package/dist/agent-src/commands/ghostwriter/list.md +1 -1
  33. package/dist/agent-src/commands/ghostwriter/show.md +1 -1
  34. package/dist/agent-src/commands/ghostwriter/write.md +9 -9
  35. package/dist/agent-src/commands/humanize.md +6 -6
  36. package/dist/agent-src/commands/jira-ticket.md +1 -1
  37. package/dist/agent-src/commands/judge/solo.md +1 -1
  38. package/dist/agent-src/commands/judge.md +1 -1
  39. package/dist/agent-src/commands/knowledge/cross-repo.md +1 -1
  40. package/dist/agent-src/commands/knowledge/forget.md +1 -1
  41. package/dist/agent-src/commands/knowledge/ingest.md +2 -2
  42. package/dist/agent-src/commands/knowledge/list.md +1 -1
  43. package/dist/agent-src/commands/memory/add.md +3 -3
  44. package/dist/agent-src/commands/memory/load.md +4 -4
  45. package/dist/agent-src/commands/memory/mine-session.md +1 -1
  46. package/dist/agent-src/commands/memory/promote.md +4 -4
  47. package/dist/agent-src/commands/memory/propose.md +2 -2
  48. package/dist/agent-src/commands/mode.md +5 -5
  49. package/dist/agent-src/commands/post-as/ghostwriter.md +3 -3
  50. package/dist/agent-src/commands/post-as/me.md +7 -7
  51. package/dist/agent-src/commands/pr/create.md +1 -1
  52. package/dist/agent-src/commands/pr/merge.md +48 -39
  53. package/dist/agent-src/commands/profile/activate.md +1 -1
  54. package/dist/agent-src/commands/profile/show.md +1 -1
  55. package/dist/agent-src/commands/research/deep.md +2 -2
  56. package/dist/agent-src/commands/research/report.md +2 -2
  57. package/dist/agent-src/commands/review/changes.md +1 -1
  58. package/dist/agent-src/commands/review/routing.md +1 -1
  59. package/dist/agent-src/commands/roadmap/create.md +1 -1
  60. package/dist/agent-src/commands/roadmap/materialize.md +2 -2
  61. package/dist/agent-src/commands/roadmap/next.md +9 -1
  62. package/dist/agent-src/commands/roadmap/process-full.md +2 -2
  63. package/dist/agent-src/commands/security-audit-config.md +3 -3
  64. package/dist/agent-src/commands/skill/preview.md +1 -1
  65. package/dist/agent-src/commands/skills/discover.md +1 -1
  66. package/dist/agent-src/commands/sync/agent-settings.md +2 -2
  67. package/dist/agent-src/commands/sync/gitignore/fix.md +1 -1
  68. package/dist/agent-src/commands/tests/create.md +1 -1
  69. package/dist/agent-src/commands/tests/e2e-heal.md +1 -1
  70. package/dist/agent-src/commands/tests/e2e-plan.md +1 -1
  71. package/dist/agent-src/contexts/authority/kernel-rule-edits.md +6 -6
  72. package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +1 -2
  73. package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
  74. package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +88 -1
  75. package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +1 -1
  76. package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -1
  77. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +1 -1
  78. package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
  79. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +13 -1
  80. package/dist/agent-src/contexts/execution/cheap-question-mechanics.md +1 -1
  81. package/dist/agent-src/contexts/execution/contract-decision-sheet.md +3 -3
  82. package/dist/agent-src/contexts/execution/mandated-lines.md +1 -1
  83. package/dist/agent-src/contexts/execution/non-interactive-contract.md +1 -1
  84. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -1
  85. package/dist/agent-src/contexts/execution/plan-confidence-gate.md +5 -5
  86. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -1
  87. package/dist/agent-src/contexts/execution/subagent-modes-detail.md +1 -1
  88. package/dist/agent-src/contexts/execution/subagent-routing.md +2 -2
  89. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +1 -1
  90. package/dist/agent-src/contexts/execution/user-memory-channels.md +3 -3
  91. package/dist/agent-src/contexts/execution/verification-mechanics.md +1 -1
  92. package/dist/agent-src/contexts/judges/persona-voice-rubric.md +2 -2
  93. package/dist/agent-src/guidelines/abstraction-thresholds.md +88 -0
  94. package/dist/agent-src/guidelines/agent-infra/5w2h-analysis.md +260 -0
  95. package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +99 -0
  96. package/dist/agent-src/guidelines/agent-infra/agent-interaction-and-decision-quality.md +325 -0
  97. package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +177 -0
  98. package/dist/agent-src/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +222 -0
  99. package/dist/agent-src/guidelines/agent-infra/ask-when-uncertain-demos.md +134 -0
  100. package/dist/agent-src/guidelines/agent-infra/asking-and-brevity-examples.md +198 -0
  101. package/dist/agent-src/guidelines/agent-infra/break-glass-usage.md +113 -0
  102. package/dist/agent-src/guidelines/agent-infra/carve-out-predicates.md +17 -0
  103. package/dist/agent-src/guidelines/agent-infra/comparison-matrix.md +179 -0
  104. package/dist/agent-src/guidelines/agent-infra/context-hygiene-mechanics.md +165 -0
  105. package/dist/agent-src/guidelines/agent-infra/corpus-grounding-authoring.md +91 -0
  106. package/dist/agent-src/guidelines/agent-infra/critical-thinking.md +156 -0
  107. package/dist/agent-src/guidelines/agent-infra/cross-source-consistency-mechanics.md +109 -0
  108. package/dist/agent-src/guidelines/agent-infra/developer-judgment.md +82 -0
  109. package/dist/agent-src/guidelines/agent-infra/direct-answers-demos.md +142 -0
  110. package/dist/agent-src/guidelines/agent-infra/domain-adoption-gates.md +112 -0
  111. package/dist/agent-src/guidelines/agent-infra/domain-eval-anti-pattern.md +53 -0
  112. package/dist/agent-src/guidelines/agent-infra/domain-pack-architecture.md +56 -0
  113. package/dist/agent-src/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
  114. package/dist/agent-src/guidelines/agent-infra/emphasis-budget.md +45 -0
  115. package/dist/agent-src/guidelines/agent-infra/engineering-memory-data-format.md +210 -0
  116. package/dist/agent-src/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
  117. package/dist/agent-src/guidelines/agent-infra/existence-question-verdicts.md +80 -0
  118. package/dist/agent-src/guidelines/agent-infra/failure-signatures.md +70 -0
  119. package/dist/agent-src/guidelines/agent-infra/false-green.md +233 -0
  120. package/dist/agent-src/guidelines/agent-infra/first-principles.md +192 -0
  121. package/dist/agent-src/guidelines/agent-infra/framework-neutrality-patterns.md +66 -0
  122. package/dist/agent-src/guidelines/agent-infra/frontier-reasoning-operating-profile.md +169 -0
  123. package/dist/agent-src/guidelines/agent-infra/gate-authoring.md +177 -0
  124. package/dist/agent-src/guidelines/agent-infra/guarded-baseline.md +39 -0
  125. package/dist/agent-src/guidelines/agent-infra/installed-tools-manifest.md +142 -0
  126. package/dist/agent-src/guidelines/agent-infra/inversion-thinking.md +388 -0
  127. package/dist/agent-src/guidelines/agent-infra/ios-simulator-guide.md +378 -0
  128. package/dist/agent-src/guidelines/agent-infra/language-and-tone-examples.md +141 -0
  129. package/dist/agent-src/guidelines/agent-infra/layered-settings.md +317 -0
  130. package/dist/agent-src/guidelines/agent-infra/linked-projects-onboarding-gate.md +80 -0
  131. package/dist/agent-src/guidelines/agent-infra/mcp-request-signing.md +197 -0
  132. package/dist/agent-src/guidelines/agent-infra/memory-access.md +149 -0
  133. package/dist/agent-src/guidelines/agent-infra/mental-models.md +314 -0
  134. package/dist/agent-src/guidelines/agent-infra/minimal-safe-diff-mechanics.md +241 -0
  135. package/dist/agent-src/guidelines/agent-infra/missing-tool-handling.md +66 -0
  136. package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +101 -0
  137. package/dist/agent-src/guidelines/agent-infra/naming.md +69 -0
  138. package/dist/agent-src/guidelines/agent-infra/notes-horizon-mechanics.md +90 -0
  139. package/dist/agent-src/guidelines/agent-infra/output-patterns.md +117 -0
  140. package/dist/agent-src/guidelines/agent-infra/recurring-criticism-mechanics.md +96 -0
  141. package/dist/agent-src/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
  142. package/dist/agent-src/guidelines/agent-infra/review-routing-data-format.md +143 -0
  143. package/dist/agent-src/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
  144. package/dist/agent-src/guidelines/agent-infra/roadmap-progress-mechanics.md +274 -0
  145. package/dist/agent-src/guidelines/agent-infra/role-contracts.md +209 -0
  146. package/dist/agent-src/guidelines/agent-infra/role-mode-router.md +89 -0
  147. package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +241 -0
  148. package/dist/agent-src/guidelines/agent-infra/rule-type-governance.md +73 -0
  149. package/dist/agent-src/guidelines/agent-infra/runtime-layer.md +89 -0
  150. package/dist/agent-src/guidelines/agent-infra/scqa-framework.md +526 -0
  151. package/dist/agent-src/guidelines/agent-infra/security-lint-containment.md +121 -0
  152. package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +134 -0
  153. package/dist/agent-src/guidelines/agent-infra/simplicity-and-goal-demos.md +211 -0
  154. package/dist/agent-src/guidelines/agent-infra/six-hats.md +353 -0
  155. package/dist/agent-src/guidelines/agent-infra/size-and-scope.md +229 -0
  156. package/dist/agent-src/guidelines/agent-infra/skill-quality-checklist.md +157 -0
  157. package/dist/agent-src/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
  158. package/dist/agent-src/guidelines/agent-infra/symptom-driven-harvest-loop.md +104 -0
  159. package/dist/agent-src/guidelines/agent-infra/systems-thinking.md +220 -0
  160. package/dist/agent-src/guidelines/agent-infra/tool-description-as-policy.md +35 -0
  161. package/dist/agent-src/guidelines/agent-infra/tool-integration.md +73 -0
  162. package/dist/agent-src/guidelines/agent-infra/traceability-field-mechanics.md +50 -0
  163. package/dist/agent-src/guidelines/agent-infra/untrusted-input-spotlighting.md +166 -0
  164. package/dist/agent-src/guidelines/agent-infra/verify-before-complete-demos.md +128 -0
  165. package/dist/agent-src/guidelines/augment-portability-patterns.md +70 -0
  166. package/dist/agent-src/guidelines/code-clarity.md +350 -0
  167. package/dist/agent-src/guidelines/component-oriented-and-oop-development.md +189 -0
  168. package/dist/agent-src/guidelines/cross-role-handoff.md +127 -0
  169. package/dist/agent-src/guidelines/design-antipatterns-triggers.json +18 -0
  170. package/dist/agent-src/guidelines/design-antipatterns.md +327 -0
  171. package/dist/agent-src/guidelines/design-asset-discipline.md +38 -0
  172. package/dist/agent-src/guidelines/design-canon.md +63 -0
  173. package/dist/agent-src/guidelines/design-fidelity-mechanics.md +293 -0
  174. package/dist/agent-src/guidelines/design-fidelity-routing.md +78 -0
  175. package/dist/agent-src/guidelines/design-handover-extraction.md +117 -0
  176. package/dist/agent-src/guidelines/design-modes.md +143 -0
  177. package/dist/agent-src/guidelines/design-reconciliation.md +172 -0
  178. package/dist/agent-src/guidelines/docs/readme-size-and-splitting.md +209 -0
  179. package/dist/agent-src/guidelines/e2e/playwright.md +363 -0
  180. package/dist/agent-src/guidelines/gtm-handoff.md +114 -0
  181. package/dist/agent-src/guidelines/monorepo-antipatterns.md +141 -0
  182. package/dist/agent-src/guidelines/php/api-design.md +115 -0
  183. package/dist/agent-src/guidelines/php/artisan-commands.md +81 -0
  184. package/dist/agent-src/guidelines/php/blade-ui.md +78 -0
  185. package/dist/agent-src/guidelines/php/controllers.md +90 -0
  186. package/dist/agent-src/guidelines/php/database.md +194 -0
  187. package/dist/agent-src/guidelines/php/eloquent.md +208 -0
  188. package/dist/agent-src/guidelines/php/flux.md +80 -0
  189. package/dist/agent-src/guidelines/php/general.md +207 -0
  190. package/dist/agent-src/guidelines/php/git.md +164 -0
  191. package/dist/agent-src/guidelines/php/jobs.md +111 -0
  192. package/dist/agent-src/guidelines/php/livewire.md +71 -0
  193. package/dist/agent-src/guidelines/php/logging.md +79 -0
  194. package/dist/agent-src/guidelines/php/naming.md +89 -0
  195. package/dist/agent-src/guidelines/php/patterns/dependency-injection.md +57 -0
  196. package/dist/agent-src/guidelines/php/patterns/dtos.md +199 -0
  197. package/dist/agent-src/guidelines/php/patterns/events.md +67 -0
  198. package/dist/agent-src/guidelines/php/patterns/factory.md +53 -0
  199. package/dist/agent-src/guidelines/php/patterns/pipelines.md +66 -0
  200. package/dist/agent-src/guidelines/php/patterns/policies.md +66 -0
  201. package/dist/agent-src/guidelines/php/patterns/repositories.md +122 -0
  202. package/dist/agent-src/guidelines/php/patterns/service-layer.md +64 -0
  203. package/dist/agent-src/guidelines/php/patterns/strategy.md +247 -0
  204. package/dist/agent-src/guidelines/php/patterns.md +28 -0
  205. package/dist/agent-src/guidelines/php/performance.md +92 -0
  206. package/dist/agent-src/guidelines/php/php-coding-patterns.md +80 -0
  207. package/dist/agent-src/guidelines/php/resources.md +100 -0
  208. package/dist/agent-src/guidelines/php/security.md +110 -0
  209. package/dist/agent-src/guidelines/php/sql.md +97 -0
  210. package/dist/agent-src/guidelines/php/validations.md +119 -0
  211. package/dist/agent-src/guidelines/php/websocket.md +100 -0
  212. package/dist/agent-src/guidelines/prompt-templates.md +189 -0
  213. package/dist/agent-src/guidelines/redundancy-taxonomy.md +208 -0
  214. package/dist/agent-src/guidelines/wing4-handoff.md +127 -0
  215. package/dist/agent-src/personas/README.md +1 -1
  216. package/dist/agent-src/personas/_template-specialist/persona.md +1 -1
  217. package/dist/agent-src/personas/product-owner.md +1 -1
  218. package/dist/agent-src/rules/active-remediation.md +1 -1
  219. package/dist/agent-src/rules/architecture.md +2 -2
  220. package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
  221. package/dist/agent-src/rules/ask-when-uncertain.md +2 -2
  222. package/dist/agent-src/rules/brand-source-of-truth.md +9 -7
  223. package/dist/agent-src/rules/code-comment-discipline.md +2 -2
  224. package/dist/agent-src/rules/code-provenance.md +1 -1
  225. package/dist/agent-src/rules/content-quoting-floor.md +1 -1
  226. package/dist/agent-src/rules/context-hygiene.md +5 -5
  227. package/dist/agent-src/rules/cross-source-consistency.md +1 -1
  228. package/dist/agent-src/rules/design-fidelity.md +36 -46
  229. package/dist/agent-src/rules/direct-answers.md +2 -2
  230. package/dist/agent-src/rules/domain-adoption-policy.md +1 -1
  231. package/dist/agent-src/rules/evaluator-independence.md +1 -1
  232. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
  233. package/dist/agent-src/rules/icon-consistency.md +5 -1
  234. package/dist/agent-src/rules/improve-before-implement.md +1 -1
  235. package/dist/agent-src/rules/language-and-tone.md +3 -3
  236. package/dist/agent-src/rules/minimal-safe-diff.md +1 -1
  237. package/dist/agent-src/rules/notes-first-reasoning.md +36 -25
  238. package/dist/agent-src/rules/recurring-criticism.md +1 -1
  239. package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
  240. package/dist/agent-src/rules/role-mode-adherence.md +2 -2
  241. package/dist/agent-src/rules/security-sensitive-stop.md +1 -1
  242. package/dist/agent-src/rules/size-enforcement.md +1 -1
  243. package/dist/agent-src/rules/source-confidentiality.md +2 -2
  244. package/dist/agent-src/rules/think-before-action.md +1 -1
  245. package/dist/agent-src/rules/token-efficiency.md +7 -5
  246. package/dist/agent-src/rules/ui-audit-gate.md +3 -2
  247. package/dist/agent-src/rules/untrusted-input-defense.md +3 -3
  248. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +106 -4
  249. package/dist/agent-src/skills/activation-design/SKILL.md +2 -2
  250. package/dist/agent-src/skills/adr-create/SKILL.md +5 -5
  251. package/dist/agent-src/skills/ai-council/SKILL.md +1 -1
  252. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +1 -1
  253. package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
  254. package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
  255. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +24 -3
  256. package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
  257. package/dist/agent-src/skills/build-buy-partner/SKILL.md +1 -1
  258. package/dist/agent-src/skills/churn-prevention/SKILL.md +2 -2
  259. package/dist/agent-src/skills/code-intelligence/SKILL.md +57 -1
  260. package/dist/agent-src/skills/code-refactoring/SKILL.md +3 -3
  261. package/dist/agent-src/skills/code-review/SKILL.md +3 -3
  262. package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
  263. package/dist/agent-src/skills/comp-banding/SKILL.md +1 -1
  264. package/dist/agent-src/skills/competitive-moat-analysis/SKILL.md +1 -1
  265. package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
  266. package/dist/agent-src/skills/complexity-first-planning/SKILL.md +1 -1
  267. package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
  268. package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -2
  269. package/dist/agent-src/skills/contracts-cognition/SKILL.md +1 -1
  270. package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +2 -2
  271. package/dist/agent-src/skills/corpus-grounding/SKILL.md +2 -2
  272. package/dist/agent-src/skills/customer-research/SKILL.md +2 -2
  273. package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
  274. package/dist/agent-src/skills/data-handling-judgment/SKILL.md +1 -1
  275. package/dist/agent-src/skills/deal-qualification-meddic/SKILL.md +2 -2
  276. package/dist/agent-src/skills/decision-record/SKILL.md +3 -3
  277. package/dist/agent-src/skills/decision-review/SKILL.md +8 -8
  278. package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +22 -22
  279. package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
  280. package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +2 -2
  281. package/dist/agent-src/skills/design-review/SKILL.md +4 -4
  282. package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -1
  283. package/dist/agent-src/skills/design-tokens/SKILL.md +17 -2
  284. package/dist/agent-src/skills/design-variations/SKILL.md +2 -2
  285. package/dist/agent-src/skills/developer-like-execution/SKILL.md +2 -2
  286. package/dist/agent-src/skills/discovery-interview/SKILL.md +2 -2
  287. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +3 -3
  288. package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -2
  289. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +44 -1
  290. package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +2 -2
  291. package/dist/agent-src/skills/expansion-playbook/SKILL.md +2 -2
  292. package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
  293. package/dist/agent-src/skills/experiment-loop/references/protocol.md +1 -1
  294. package/dist/agent-src/skills/fe-design/SKILL.md +3 -3
  295. package/dist/agent-src/skills/fe-design/references/design-patterns.md +1 -1
  296. package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +3 -3
  297. package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
  298. package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
  299. package/dist/agent-src/skills/flux/SKILL.md +1 -1
  300. package/dist/agent-src/skills/forecast-accuracy/SKILL.md +2 -2
  301. package/dist/agent-src/skills/forecasting/SKILL.md +2 -2
  302. package/dist/agent-src/skills/fundraising-narrative/SKILL.md +2 -2
  303. package/dist/agent-src/skills/funnel-analysis/SKILL.md +2 -2
  304. package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +9 -0
  305. package/dist/agent-src/skills/gtm-launch/SKILL.md +2 -2
  306. package/dist/agent-src/skills/hiring-loop-design/SKILL.md +1 -1
  307. package/dist/agent-src/skills/html-deck/SKILL.md +5 -5
  308. package/dist/agent-src/skills/humanizer/SKILL.md +1 -1
  309. package/dist/agent-src/skills/humanizer/data/patterns.md +1 -1
  310. package/dist/agent-src/skills/iconography/SKILL.md +3 -3
  311. package/dist/agent-src/skills/judge-synthesis/SKILL.md +1 -1
  312. package/dist/agent-src/skills/laravel-api-endpoint/SKILL.md +2 -2
  313. package/dist/agent-src/skills/launch-readiness/SKILL.md +3 -3
  314. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +6 -6
  315. package/dist/agent-src/skills/livewire/SKILL.md +1 -1
  316. package/dist/agent-src/skills/market-entry-analysis/SKILL.md +1 -1
  317. package/dist/agent-src/skills/mcp-builder/SKILL.md +1 -1
  318. package/dist/agent-src/skills/memory-consolidation/SKILL.md +3 -3
  319. package/dist/agent-src/skills/messaging-architecture/SKILL.md +2 -2
  320. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
  321. package/dist/agent-src/skills/onboarding-design/SKILL.md +2 -2
  322. package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
  323. package/dist/agent-src/skills/one-on-one-cadence/SKILL.md +1 -1
  324. package/dist/agent-src/skills/org-design/SKILL.md +1 -1
  325. package/dist/agent-src/skills/overbuild-review-lens/SKILL.md +3 -3
  326. package/dist/agent-src/skills/override-management/SKILL.md +1 -1
  327. package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
  328. package/dist/agent-src/skills/persona-writing/SKILL.md +1 -1
  329. package/dist/agent-src/skills/php-coder/SKILL.md +1 -1
  330. package/dist/agent-src/skills/pipeline-strategy/SKILL.md +2 -2
  331. package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -3
  332. package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
  333. package/dist/agent-src/skills/positioning-strategy/SKILL.md +2 -2
  334. package/dist/agent-src/skills/privacy-review/SKILL.md +1 -1
  335. package/dist/agent-src/skills/prompt-optimizer/SKILL.md +3 -3
  336. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
  337. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +2 -2
  338. package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
  339. package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
  340. package/dist/agent-src/skills/release-comms/SKILL.md +2 -2
  341. package/dist/agent-src/skills/retention-loops/SKILL.md +2 -2
  342. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  343. package/dist/agent-src/skills/roadmap-management/SKILL.md +1 -1
  344. package/dist/agent-src/skills/roadmap-management/references/archival.md +1 -1
  345. package/dist/agent-src/skills/roadmap-writing/SKILL.md +5 -5
  346. package/dist/agent-src/skills/rule-writing/SKILL.md +6 -6
  347. package/dist/agent-src/skills/runway-cognition/SKILL.md +2 -2
  348. package/dist/agent-src/skills/scenario-modeling/SKILL.md +2 -2
  349. package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
  350. package/dist/agent-src/skills/skill-writing/references/procedure.md +1 -1
  351. package/dist/agent-src/skills/skill-writing/references/section-patterns.md +3 -3
  352. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +1 -1
  353. package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +3 -3
  354. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
  355. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +1 -1
  356. package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
  357. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +60 -4
  358. package/dist/agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +1 -1
  359. package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
  360. package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
  361. package/dist/agent-src/skills/ui-component-architect/SKILL.md +28 -8
  362. package/dist/agent-src/skills/unit-economics-modeling/SKILL.md +2 -2
  363. package/dist/agent-src/skills/upstream-contribute/SKILL.md +1 -1
  364. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +2 -2
  365. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
  366. package/dist/agent-src/skills/vision-articulation/SKILL.md +1 -1
  367. package/dist/agent-src/skills/voc-extract/SKILL.md +2 -2
  368. package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +2 -2
  369. package/dist/agent-src/skills/wireframe/SKILL.md +1 -1
  370. package/dist/agent-src/skills/workspace-link/SKILL.md +1 -1
  371. package/dist/agent-src/templates/agent-settings.md +6 -6
  372. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  373. package/dist/agent-src/templates/contexts/knowledge-pages.md +2 -3
  374. package/dist/agent-src/templates/copilot-instructions.md +1 -1
  375. package/dist/agent-src/templates/roadmaps.md +1 -1
  376. package/dist/agent-src/templates/scripts/README.md +2 -2
  377. package/dist/agent-src/user-types/_template/user-type.md +1 -1
  378. package/dist/cli/registry.js +1 -1
  379. package/dist/cli-delegate/archive_completed_roadmaps.js +52 -4
  380. package/dist/cli-delegate/check_update_banner.js +12 -1
  381. package/dist/cli-delegate/{chunk-TGIPZBCW.js → chunk-2KKXJW25.js} +22 -8
  382. package/dist/cli-delegate/{chunk-NLP54U3J.js → chunk-2XY7ILBT.js} +13 -1
  383. package/dist/cli-delegate/{chunk-4FS4WRXP.js → chunk-3FKR64R5.js} +34 -6
  384. package/dist/cli-delegate/{chunk-J3RFNKG4.js → chunk-55ACLDUE.js} +2 -2
  385. package/dist/cli-delegate/{chunk-PKOBQADP.js → chunk-57PN4GYJ.js} +1 -1
  386. package/dist/cli-delegate/{chunk-BIXEDQPZ.js → chunk-AK6HODNQ.js} +4 -4
  387. package/dist/cli-delegate/{chunk-2FTMENJL.js → chunk-GYC3VRYN.js} +1 -1
  388. package/dist/cli-delegate/{chunk-LWTYTX6F.js → chunk-HZ52BRGG.js} +24 -18
  389. package/dist/cli-delegate/{chunk-6RJA2F5A.js → chunk-IVBPRCQO.js} +1 -1
  390. package/dist/cli-delegate/{chunk-I6RHFQEG.js → chunk-YUM5KURG.js} +17 -1
  391. package/dist/cli-delegate/cmd_analyze_session.js +1 -1
  392. package/dist/cli-delegate/cmd_brand_status.js +1 -1
  393. package/dist/cli-delegate/cmd_conformance.js +3 -3
  394. package/dist/cli-delegate/cmd_doctor.js +3 -3
  395. package/dist/cli-delegate/cmd_explain.js +2 -2
  396. package/dist/cli-delegate/cmd_export.js +4 -4
  397. package/dist/cli-delegate/cmd_handoff.js +24 -16
  398. package/dist/cli-delegate/cmd_mcp_available.js +1 -1
  399. package/dist/cli-delegate/cmd_memory_get.js +1 -1
  400. package/dist/cli-delegate/cmd_migrate.js +2 -2
  401. package/dist/cli-delegate/cmd_packs_active.js +2 -2
  402. package/dist/cli-delegate/cmd_prune.js +4 -4
  403. package/dist/cli-delegate/cmd_route_audit.js +3 -3
  404. package/dist/cli-delegate/cmd_route_explain.js +1 -1
  405. package/dist/cli-delegate/cmd_session_recycle.js +4 -14
  406. package/dist/cli-delegate/cmd_settings_get.js +15 -9
  407. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  408. package/dist/cli-delegate/cmd_settings_set.js +41 -11
  409. package/dist/cli-delegate/cmd_sync.js +4 -4
  410. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  411. package/dist/cli-delegate/cmd_update.js +1 -1
  412. package/dist/cli-delegate/cmd_upgrade.js +1 -1
  413. package/dist/cli-delegate/cmd_validate.js +4 -4
  414. package/dist/cli-delegate/cmd_versions.js +1 -1
  415. package/dist/discovery/deprecation-report.md +1 -1
  416. package/dist/discovery/discovery-manifest.json +27 -80
  417. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  418. package/dist/discovery/discovery-manifest.summary.md +3 -3
  419. package/dist/discovery/dormancy-report.md +1 -1
  420. package/dist/discovery/orphan-report.md +1 -1
  421. package/dist/discovery/packs.json +5 -7
  422. package/dist/discovery/trust-report.md +2 -2
  423. package/dist/discovery/workspaces.json +4 -6
  424. package/dist/hooks/dispatch.js +9249 -8981
  425. package/dist/install/install.mjs +47 -8
  426. package/dist/mcp/registry-manifest.json +3 -3
  427. package/dist/mcp/server.json +2 -2
  428. package/dist/mcp/server.mjs +5496 -2400
  429. package/dist/router.json +1 -1
  430. package/dist/scripts/_lib/agent_settings.js +73 -0
  431. package/dist/scripts/_lib/agent_src.js +20 -0
  432. package/dist/scripts/_lib/guidelines_lane.js +158 -0
  433. package/dist/scripts/_lib/lean_projection_mode.js +108 -0
  434. package/dist/scripts/_lib/router_match.js +243 -0
  435. package/dist/scripts/_lib/rule_injection.js +216 -0
  436. package/dist/scripts/condense.js +22 -25
  437. package/dist/scripts/project_thin_rules.js +139 -19
  438. package/dist/server/io/yamlIO.js +125 -17
  439. package/dist/server/schemas/settings.js +32 -5
  440. package/dist/shared/settingsSurface.js +6 -1
  441. package/docs/MIGRATION.md +56 -0
  442. package/docs/contracts/settings-classes.md +48 -7
  443. package/docs/guidelines/abstraction-thresholds.md +35 -0
  444. package/docs/guidelines/agent-infra/active-remediation-mechanics.md +3 -3
  445. package/docs/guidelines/agent-infra/false-green.md +2 -2
  446. package/docs/guidelines/agent-infra/notes-horizon-mechanics.md +90 -0
  447. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
  448. package/docs/guidelines/agent-infra/skill-quality-checklist.md +1 -1
  449. package/docs/guidelines/design-fidelity-mechanics.md +4 -0
  450. package/docs/guidelines/design-fidelity-routing.md +78 -0
  451. package/docs/guidelines/design-reconciliation.md +172 -0
  452. package/docs/guidelines/gtm-handoff.md +2 -2
  453. package/docs/guidelines/wing4-handoff.md +2 -2
  454. package/llms.txt +1 -1
  455. package/package.json +7 -3
  456. package/src/agent-src/scripts/archive_completed_roadmaps.ts +106 -4
  457. package/src/config/agent-settings.template.yml +94 -1
  458. package/src/config/ci-local-parity.yml +34 -0
  459. package/src/config/continuity-surface.json +8 -29
  460. package/src/config/evaluator-budgets.json +4 -4
  461. package/src/config/gate-coverage.yml +31 -8
  462. package/src/config/gate-reachability-exemptions.json +1 -0
  463. package/src/config/gate-violation-baselines.json +3 -3
  464. package/src/config/hook-token-budget.json +8 -7
  465. package/src/config/host-injection-effect.json +2 -2
  466. package/src/config/pack-size-budget.json +55 -4
  467. package/src/config/packed-binary-manifest.json +1 -1
  468. package/src/config/platform-anchor.json +47 -0
  469. package/src/config/preamble-payload-budget.json +2 -3
  470. package/src/config/publish-surface.json +4 -2
  471. package/src/config/ratification-policy.json +7 -0
  472. package/src/config/routing-coverage-seed.json +9 -2
  473. package/src/config/rule-stub-ceilings.json +16 -9
  474. package/src/scripts/_cli/cmd_session_recycle.ts +2 -25
  475. package/src/scripts/_cli/cmd_settings_get.ts +22 -7
  476. package/src/scripts/_cli/handoff_sessions.ts +14 -44
  477. package/src/scripts/_lib/agent_settings.ts +85 -0
  478. package/src/scripts/_lib/agent_src.ts +21 -0
  479. package/src/scripts/_lib/artifact_maturity.ts +242 -0
  480. package/src/scripts/_lib/conformance_report.ts +403 -0
  481. package/src/scripts/_lib/continuity_slot.ts +295 -0
  482. package/src/scripts/_lib/continuity_writer.ts +312 -0
  483. package/src/scripts/_lib/design_system_import.ts +20 -0
  484. package/src/scripts/_lib/design_tolerance.ts +281 -0
  485. package/src/scripts/_lib/guidelines_lane.ts +164 -0
  486. package/src/scripts/_lib/hook_settings.ts +85 -0
  487. package/src/scripts/_lib/lean_projection_mode.ts +127 -0
  488. package/src/scripts/_lib/obligation_frequency.ts +2 -3
  489. package/src/scripts/_lib/packed_binary_predicate.ts +37 -0
  490. package/src/scripts/_lib/platform_anchor.ts +1053 -0
  491. package/src/scripts/_lib/ratification_artifact.ts +278 -0
  492. package/src/scripts/_lib/recycle_envelope_paths.ts +109 -21
  493. package/src/scripts/_lib/regression_neighbourhood.ts +159 -22
  494. package/src/scripts/_lib/security_lint.ts +23 -2
  495. package/src/scripts/_lib/self_repair.ts +21 -0
  496. package/src/scripts/_lib/session_eol.ts +44 -0
  497. package/src/scripts/_lib/session_index_trust.ts +387 -0
  498. package/src/scripts/_lib/standing_bound_ratchet.ts +220 -0
  499. package/src/scripts/_lib/tolerance_shadow.ts +177 -0
  500. package/src/scripts/_lib/vendored_grammar_upstream.ts +280 -0
  501. package/src/scripts/ai_council/redact_low_impact_entry.ts +8 -0
  502. package/src/scripts/audit_mcp_tools.ts +69 -25
  503. package/src/scripts/autonomy_friction_traffic.ts +379 -0
  504. package/src/scripts/build_mcp_catalog.ts +24 -1
  505. package/src/scripts/check_host_tree_parity.ts +291 -0
  506. package/src/scripts/check_kernel_edit_ratified.ts +462 -0
  507. package/src/scripts/check_loss_class_declared.ts +793 -46
  508. package/src/scripts/check_platform_anchor.ts +390 -0
  509. package/src/scripts/check_preamble_payload_budget.ts +424 -7
  510. package/src/scripts/check_projected_rule_routes.ts +395 -0
  511. package/src/scripts/check_rule_projection_integrity.ts +102 -2
  512. package/src/scripts/ci_settle.ts +205 -5
  513. package/src/scripts/code_graph/build.ts +79 -0
  514. package/src/scripts/code_graph/cli.ts +264 -7
  515. package/src/scripts/code_graph/detect.ts +38 -0
  516. package/src/scripts/code_graph/query.ts +25 -2
  517. package/src/scripts/code_graph/sqlite_store.ts +16 -1
  518. package/src/scripts/code_graph/types.ts +52 -3
  519. package/src/scripts/code_graph/validate.ts +3 -1
  520. package/src/scripts/code_graph/verbs.ts +590 -0
  521. package/src/scripts/condense.ts +22 -26
  522. package/src/scripts/generate_host_cost_table.ts +354 -0
  523. package/src/scripts/handoff_context_hook.ts +39 -1
  524. package/src/scripts/hook_manifest.json +1 -1
  525. package/src/scripts/hook_manifest.yaml +59 -28
  526. package/src/scripts/hooks/block_speaking_inbox_dir.ts +182 -16
  527. package/src/scripts/hooks/category_a.ts +1 -1
  528. package/src/scripts/hooks/chain_nudge_hook.ts +311 -25
  529. package/src/scripts/hooks/code_graph_context_hook.ts +7 -18
  530. package/src/scripts/hooks/push_settle_hook.ts +3 -2
  531. package/src/scripts/hooks/rule_inject_hook.ts +107 -20
  532. package/src/scripts/hooks/session_eol_hook.ts +177 -145
  533. package/src/scripts/hooks/source_first_gate_hook.ts +12 -0
  534. package/src/scripts/hooks/ui_route_nudge_hook.ts +52 -15
  535. package/src/scripts/hot_context_hook.ts +103 -408
  536. package/src/scripts/lint_evidence_artifacts.ts +1 -0
  537. package/src/scripts/lint_knowledge_scale.ts +0 -26
  538. package/src/scripts/lint_roadmap_blockers.ts +164 -1
  539. package/src/scripts/mcp_server/consumer_tool_catalog.json +152 -2
  540. package/src/scripts/mcp_server/graph_tools.ts +294 -0
  541. package/src/scripts/mcp_server/path_util.ts +31 -0
  542. package/src/scripts/mcp_server/tool_catalog_source.ts +7 -1
  543. package/src/scripts/mcp_server/tools.ts +3 -13
  544. package/src/scripts/memory_lookup.ts +9 -9
  545. package/src/scripts/model_rule_injection.ts +61 -4
  546. package/src/scripts/project_thin_rules.ts +149 -16
  547. package/src/scripts/report_standing_payload_by_host.ts +650 -0
  548. package/src/scripts/schemas/agent-settings.schema.json +7 -1
  549. package/src/scripts/session_memory_index.ts +86 -8
  550. package/src/scripts/sync_agent_settings.ts +270 -10
  551. package/src/server/io/yamlIO.ts +127 -17
  552. package/src/server/schemas/settings.ts +45 -6
  553. package/src/shared/settingsSurface.ts +13 -2
  554. package/src/templates/compact-instructions.md +8 -3
  555. package/src/vendor/grammars/README.md +27 -2
  556. package/dist/agent-src/commands/chat-history/import.md +0 -170
  557. package/dist/agent-src/commands/chat-history.md +0 -63
@@ -33,6 +33,14 @@
33
33
  * 7. Business-context SQL identifiers — caller-supplied table / column
34
34
  * allow-list. Default empty.
35
35
  * 8. Inline code excerpts > 40 chars — any backtick-fenced run > 40.
36
+ *
37
+ * loss_class: exact
38
+ *
39
+ * Named despite the module's name: the redactor never rewrites. It returns a
40
+ * {@link RedactionResult} verdict and the caller refuses, so no byte of the
41
+ * input is dropped or replaced here — "a rewritten secret is still a leaked
42
+ * secret". `exact` is the class that says nothing is lost, and it is what this
43
+ * module guarantees its callers.
36
44
  */
37
45
 
38
46
  import { _RAW_KEY_PREFIXES } from './config.js';
@@ -29,6 +29,30 @@ const _HERE = fileURLToPath(import.meta.url);
29
29
  export const ROOT = path.resolve(path.dirname(_HERE), '..', '..');
30
30
  export const CATALOG = path.join(ROOT, 'src/scripts/mcp_server/consumer_tool_catalog.json');
31
31
  export const TOOLS_TS = path.join(ROOT, 'src/scripts/mcp_server/tools.ts');
32
+ /**
33
+ * Modules that contribute records to `ALLOWLIST` from OUTSIDE `tools.ts`.
34
+ *
35
+ * `tools.ts` sits past the source-size ceiling, so a tool family whose records
36
+ * would cost ~250 units of excess there is defined in its own module and spread
37
+ * into the allowlist. This generator indexed `tools.ts` alone, so the five
38
+ * `graph_*` tools rendered `_stub-only_` in the published inventory — the doc
39
+ * asserting the exact opposite of the catalogue's own `implemented_on: ["stdio"]`,
40
+ * and `--check` staying green because it compared the doc against its own wrong
41
+ * render. Found by an independent review.
42
+ *
43
+ * A LIST rather than a directory walk: a walk would silently pick up any future
44
+ * file with a matching shape, and the point of this index is to say where a
45
+ * handler actually is. Adding a family here is one line in the same change that
46
+ * adds the family.
47
+ */
48
+ export const HANDLER_MODULES: readonly { file: string; label: string; block: string }[] = [
49
+ { file: path.join(ROOT, 'src/scripts/mcp_server/tools.ts'), label: 'tools.ts', block: 'export const ALLOWLIST' },
50
+ {
51
+ file: path.join(ROOT, 'src/scripts/mcp_server/graph_tools.ts'),
52
+ label: 'graph_tools.ts',
53
+ block: 'export const GRAPH_TOOLS',
54
+ },
55
+ ];
32
56
  export const OUT = path.join(ROOT, 'docs/contracts/mcp-tool-inventory.md');
33
57
 
34
58
  // Match `<name>: {` entries at 4-space indent inside the TS ALLOWLIST record
@@ -71,28 +95,36 @@ function _relativeToRoot(p: string): string {
71
95
  return path.relative(ROOT, p).split(path.sep).join('/');
72
96
  }
73
97
 
74
- function _index_handlers(): Map<string, number> {
75
- const out = new Map<string, number>();
76
- const lines = _splitlines(fs.readFileSync(TOOLS_TS, 'utf-8'));
77
- // Only index entries inside the `export const ALLOWLIST` block.
78
- let inAllowlist = false;
79
- for (let idx = 0; idx < lines.length; idx += 1) {
80
- const i = idx + 1;
81
- const line = lines[idx] as string;
82
- if (line.startsWith('export const ALLOWLIST')) {
83
- inAllowlist = true;
84
- continue;
85
- }
86
- if (inAllowlist && line.startsWith('};')) {
87
- inAllowlist = false;
88
- continue;
89
- }
90
- if (!inAllowlist) {
98
+ function _index_handlers(): Map<string, { label: string; line: number }> {
99
+ const out = new Map<string, { label: string; line: number }>();
100
+ for (const mod of HANDLER_MODULES) {
101
+ let text: string;
102
+ try {
103
+ text = fs.readFileSync(mod.file, 'utf-8');
104
+ } catch {
91
105
  continue;
92
106
  }
93
- const m = HANDLER_RE.exec(line);
94
- if (m) {
95
- out.set(m[1] as string, i);
107
+ const lines = _splitlines(text);
108
+ // Only index entries inside the module's own registration block.
109
+ let inBlock = false;
110
+ for (let idx = 0; idx < lines.length; idx += 1) {
111
+ const i = idx + 1;
112
+ const line = lines[idx] as string;
113
+ if (line.startsWith(mod.block)) {
114
+ inBlock = true;
115
+ continue;
116
+ }
117
+ if (inBlock && line.startsWith('};')) {
118
+ inBlock = false;
119
+ continue;
120
+ }
121
+ if (!inBlock) {
122
+ continue;
123
+ }
124
+ const m = HANDLER_RE.exec(line);
125
+ if (m) {
126
+ out.set(m[1] as string, { label: mod.label, line: i });
127
+ }
96
128
  }
97
129
  }
98
130
  return out;
@@ -117,7 +149,11 @@ function _joinSorted(obj: Map<string, number>): string {
117
149
  return keys.map((k) => `${k}=${obj.get(k)}`).join(', ');
118
150
  }
119
151
 
120
- function _render(catalog: Catalog, handlers: Map<string, number>, cat_lines: Map<string, number>): string {
152
+ function _render(
153
+ catalog: Catalog,
154
+ handlers: Map<string, { label: string; line: number }>,
155
+ cat_lines: Map<string, number>,
156
+ ): string {
121
157
  const tools = catalog.tools;
122
158
  const total = tools.length;
123
159
  const by_transport = new Map<string, number>();
@@ -145,7 +181,14 @@ function _render(catalog: Catalog, handlers: Map<string, number>, cat_lines: Map
145
181
  lines.push('');
146
182
  lines.push('# MCP tool inventory');
147
183
  lines.push('');
148
- lines.push('> Generated by [`audit_mcp_tools`](../../audit_mcp_tools)');
184
+ // A BARE command name, and deliberately not a link to this file: an
185
+ // independent review flagged the previous `../../audit_mcp_tools` as a
186
+ // path that resolves nowhere and proposed `src/scripts/audit_mcp_tools.ts`.
187
+ // That fix is refused by `generated_by.test.ts` § 1.4, which forbids a
188
+ // generated artifact from hard-coding its generator's script path — the
189
+ // broken link and the literal path are two wrong answers, and the
190
+ // replacement form the rule names is the runnable command.
191
+ lines.push('> Generated by `audit_mcp_tools`. Do not edit.');
149
192
  lines.push('> from the source-of-truth catalog');
150
193
  lines.push('> [`src/scripts/mcp_server/consumer_tool_catalog.json`](../../src/scripts/mcp_server/consumer_tool_catalog.json).');
151
194
  lines.push('> Do **not** hand-edit; rerun `./scripts-run src/scripts/audit_mcp_tools --write`.');
@@ -172,10 +215,10 @@ function _render(catalog: Catalog, handlers: Map<string, number>, cat_lines: Map
172
215
  cat_line !== undefined
173
216
  ? `[\`consumer_tool_catalog.json:${cat_line}\`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L${cat_line})`
174
217
  : '_missing_';
175
- const h_line = handlers.get(name);
218
+ const h = handlers.get(name);
176
219
  const h_cite =
177
- h_line !== undefined
178
- ? `[\`tools.ts:${h_line}\`](../../src/scripts/mcp_server/tools.ts#L${h_line})`
220
+ h !== undefined
221
+ ? `[\`${h.label}:${h.line}\`](../../src/scripts/mcp_server/${h.label}#L${h.line})`
179
222
  : '_stub-only_';
180
223
  lines.push(`| \`${name}\` | \`${side}\` | ${transports} | ${cat_cite} | ${h_cite} |`);
181
224
  }
@@ -240,6 +283,7 @@ export function main(argv: string[] | null = null): number {
240
283
  candidates: [
241
284
  path.posix.join('src', 'scripts', 'mcp_server', 'consumer_tool_catalog.json'),
242
285
  path.posix.join('src', 'scripts', 'mcp_server', 'tools.ts'),
286
+ path.posix.join('src', 'scripts', 'mcp_server', 'graph_tools.ts'),
243
287
  ],
244
288
  repoRoot: ROOT,
245
289
  });
@@ -0,0 +1,379 @@
1
+ /**
2
+ * autonomy_friction_traffic — what share of REAL Bash traffic this package
3
+ * can spare a host confirmation, and what the rest is shaped like.
4
+ *
5
+ * WHY A SECOND FRICTION INSTRUMENT. `autonomy_friction_corpus` measures seven
6
+ * declared payload classes through the real dispatcher: it answers "does the
7
+ * classifier behave as designed" and it answers it exactly. What it cannot
8
+ * answer is "how much of what the agent actually types does the design
9
+ * cover", because a hand-written corpus contains the shapes its author
10
+ * thought of. That number turned out to be the one that mattered: measured
11
+ * over 7,569 distinct real Bash calls in 39 transcripts on 2026-09-10,
12
+ * category A covered 126 of them — 1.7 %.
13
+ *
14
+ * WHAT IT MEASURES, STATED NARROWLY. Three things, over a transcript store:
15
+ * the share of Bash calls that are category A (the calls this package hands
16
+ * the host an explicit `permissionDecision: allow` for); which disqualifier
17
+ * each remaining call hits FIRST; and how many carry one of the two shapes
18
+ * the chain-nudge concern flags. It is NOT a measurement of confirmations the
19
+ * operator saw. The host's own permission documentation records that
20
+ * `permissions.allow` does not bypass the auto-mode classifier, so a consumer
21
+ * whose settings already allow a call may see no prompt for a call counted
22
+ * here as uncovered, and a call inside category A may still be classified by
23
+ * the host. Reading this as host behaviour is the
24
+ * fact-about-our-plumbing-written-as-a-fact-about-the-host collapse the hook
25
+ * contract warns about three times.
26
+ *
27
+ * NOT A GATE. It has no baseline and fails nothing. A gate over this number
28
+ * would ratchet a figure that moves with how the operator happened to work
29
+ * that week, which is a measurement of the week and not of the tree. Exit 1
30
+ * means the store was unreadable or empty — a probe that reports zeros from
31
+ * an absent store is worse than one that refuses.
32
+ *
33
+ * SHARED DETECTORS, NOT A SECOND COPY. The avoidable-shape counts come from
34
+ * the concern's own exported `detectEditByShell` / `detectChaining`, and the
35
+ * metacharacter class is `category_a`'s own exported constant, so a change to
36
+ * either moves this report and the live carrier together. A private copy here
37
+ * would let the two drift and the report would then describe a carrier that
38
+ * does not exist — the first draft held exactly such a copy, and it computed
39
+ * the split the whole report turns on.
40
+ *
41
+ * WHAT MAKES A FIGURE FROM THIS PROBE COMPARABLE. Two properties, both of
42
+ * which the first draft lacked. Calls are deduplicated by tool-use id, because
43
+ * a resumed session rewrites its earlier turns into a new transcript and a
44
+ * window of files therefore counts them twice. And the running session's own
45
+ * transcript is excluded by default, because every call the probe itself makes
46
+ * lands in a file it is about to read — two runs minutes apart reported 7,518
47
+ * and 7,653 for the same tree before that. What remains uncontrolled is the
48
+ * window: `--limit 40` names the 40 most recent transcripts, and which files
49
+ * those are moves as new sessions appear. So pin the DATE with the figure and
50
+ * read a later run as measuring the window as well as the tree.
51
+ *
52
+ * Usage:
53
+ * ./scripts-run src/scripts/autonomy_friction_traffic [--store DIR] [--limit N] [--json]
54
+ * … [--include-current] include the running session's own transcript
55
+ */
56
+ import * as fs from "node:fs";
57
+ import * as os from "node:os";
58
+ import * as path from "node:path";
59
+ import process from "node:process";
60
+ import { fileURLToPath } from "node:url";
61
+
62
+ import { detectChaining, detectEditByShell } from "./hooks/chain_nudge_hook.js";
63
+ import {
64
+ isCategoryABashCommand,
65
+ namesConsequenceOperation,
66
+ SHELL_METACHARACTERS,
67
+ } from "./hooks/category_a.js";
68
+
69
+ // Re-exported so a test can assert this module refuses on the CLASSIFIER's
70
+ // metacharacter set rather than on a copy of it. The first draft held a private
71
+ // regex literal here while the header claimed shared detectors, and that copy
72
+ // computed the split the whole report turns on.
73
+ export { SHELL_METACHARACTERS };
74
+
75
+ /** How many transcripts to read when `--limit` is absent. */
76
+ const DEFAULT_LIMIT = 40;
77
+
78
+ /** One measured report. */
79
+ export interface TrafficReport {
80
+ store: string;
81
+ transcripts: number;
82
+ calls: number;
83
+ categoryA: number;
84
+ /** First disqualifier for each non-category-A call. */
85
+ disqualifiers: Record<string, number>;
86
+ /** Head token → count, for non-category-A calls only. */
87
+ heads: Record<string, number>;
88
+ /** The chain-nudge shape classes, counted over every call. */
89
+ shapes: { editByShell: number; chain: number };
90
+ /** Which write shapes, in the concern's own words. */
91
+ editShapes: Record<string, number>;
92
+ }
93
+
94
+ /** One Bash call, with the tool-use id that identifies it across files. */
95
+ export interface BashCall {
96
+ /** The host's `tool_use` id, or `""` when the record carries none. */
97
+ id: string;
98
+ command: string;
99
+ }
100
+
101
+ /**
102
+ * Every Bash call in one transcript's text.
103
+ *
104
+ * Line-delimited JSON, one record per line, so a malformed line is skipped
105
+ * rather than costing the file. The `"Bash"` pre-filter is a cheap reject: a
106
+ * transcript is megabytes and most lines carry no tool call at all.
107
+ *
108
+ * The id comes out with the command because a resumed session writes a new
109
+ * transcript carrying the earlier turns again — counting a window of files
110
+ * therefore counts some calls twice, and the id is what tells the copies apart
111
+ * from two genuinely identical commands.
112
+ */
113
+ export function extractCommands(text: string): BashCall[] {
114
+ const out: BashCall[] = [];
115
+ for (const line of text.split("\n")) {
116
+ if (!line.includes('"Bash"')) continue;
117
+ let rec: unknown;
118
+ try {
119
+ rec = JSON.parse(line) as unknown;
120
+ } catch {
121
+ continue;
122
+ }
123
+ const content = (rec as { message?: { content?: unknown } })?.message?.content;
124
+ if (!Array.isArray(content)) continue;
125
+ for (const block of content) {
126
+ const b = block as { type?: unknown; name?: unknown; id?: unknown; input?: { command?: unknown } };
127
+ if (b?.type !== "tool_use" || b?.name !== "Bash") continue;
128
+ if (typeof b.input?.command !== "string") continue;
129
+ out.push({ id: typeof b.id === "string" ? b.id : "", command: b.input.command });
130
+ }
131
+ }
132
+ return out;
133
+ }
134
+
135
+ /**
136
+ * The distinct calls in `calls`, keyed by tool-use id.
137
+ *
138
+ * A call with no id cannot be deduplicated and is kept — dropping it would
139
+ * silently shrink the denominator, and an over-count biases the report toward
140
+ * looking worse than it is, which is the safe direction for a friction figure.
141
+ */
142
+ export function dedupeCalls(calls: readonly BashCall[]): string[] {
143
+ const seen = new Set<string>();
144
+ const out: string[] = [];
145
+ for (const call of calls) {
146
+ if (call.id) {
147
+ if (seen.has(call.id)) continue;
148
+ seen.add(call.id);
149
+ }
150
+ out.push(call.command);
151
+ }
152
+ return out;
153
+ }
154
+
155
+ /**
156
+ * The transcript of the session running this probe, if the host names one.
157
+ *
158
+ * Excluded by default. A probe whose window includes its own session measures
159
+ * the measurement: every call this run makes lands in the file it is reading,
160
+ * so two runs minutes apart report different totals for the same tree and the
161
+ * figure cannot be pinned. `--include-current` opts back in.
162
+ */
163
+ export function currentSessionTranscript(store: string): string | null {
164
+ const id = process.env["CLAUDE_CODE_SESSION_ID"];
165
+ return id ? path.join(store, `${id}.jsonl`) : null;
166
+ }
167
+
168
+ /** The head token of a command, lower-cased, or `""`. */
169
+ export function headToken(command: string): string {
170
+ return (command.trim().split(/\s+/)[0] ?? "").toLowerCase();
171
+ }
172
+
173
+ /**
174
+ * Why this call is not category A, in one word.
175
+ *
176
+ * Only the FIRST disqualifier is reported, because that is the one a change
177
+ * would have to remove: a chained command whose head is also unlisted stays
178
+ * uncovered if only the head is added.
179
+ *
180
+ * The buckets mirror `category_a`'s own order of refusal, including the
181
+ * consequence-word check — without it `git push origin main` and `gh pr merge`
182
+ * landed in the head bucket, and a report saying "N fail on the head token"
183
+ * then counted operations that would be refused whatever the head list said.
184
+ *
185
+ * The last bucket is still an UPPER BOUND rather than an exact head count: a
186
+ * simple command can also be refused for a directory flag whose value escapes
187
+ * the working tree, and that case is not separable from here without
188
+ * reimplementing the argv walk. Read it as "refused after the shape and the
189
+ * operation were cleared", and never as "adding this head would cover it".
190
+ */
191
+ export function firstDisqualifier(command: string): string {
192
+ if (!command.trim()) return "empty-command";
193
+ if (SHELL_METACHARACTERS.test(command)) return "shell-metacharacter";
194
+ if (namesConsequenceOperation(command)) return "names-a-consequence-operation";
195
+ return "not-an-allowlisted-operation";
196
+ }
197
+
198
+ /** Classify a command set. Pure — the caller supplies the strings. */
199
+ export function classify(store: string, transcripts: number, commands: readonly string[]): TrafficReport {
200
+ const report: TrafficReport = {
201
+ store,
202
+ transcripts,
203
+ calls: commands.length,
204
+ categoryA: 0,
205
+ disqualifiers: {},
206
+ heads: {},
207
+ shapes: { editByShell: 0, chain: 0 },
208
+ editShapes: {},
209
+ };
210
+ for (const command of commands) {
211
+ const write = detectEditByShell(command);
212
+ if (write) {
213
+ report.shapes.editByShell += 1;
214
+ report.editShapes[write] = (report.editShapes[write] ?? 0) + 1;
215
+ } else if (detectChaining(command)) {
216
+ report.shapes.chain += 1;
217
+ }
218
+ if (isCategoryABashCommand(command)) {
219
+ report.categoryA += 1;
220
+ continue;
221
+ }
222
+ const why = firstDisqualifier(command);
223
+ report.disqualifiers[why] = (report.disqualifiers[why] ?? 0) + 1;
224
+ const head = headToken(command);
225
+ report.heads[head] = (report.heads[head] ?? 0) + 1;
226
+ }
227
+ return report;
228
+ }
229
+
230
+ /** The default transcript store for the checkout this file lives in. */
231
+ export function defaultStore(repoRoot: string): string {
232
+ const slug = repoRoot.replace(/\//g, "-");
233
+ return path.join(os.homedir(), ".claude", "projects", slug);
234
+ }
235
+
236
+ /** The `--limit` most recently modified transcripts in `store`. */
237
+ export function transcriptPaths(store: string, limit: number): string[] {
238
+ let names: string[];
239
+ try {
240
+ names = fs.readdirSync(store);
241
+ } catch {
242
+ return [];
243
+ }
244
+ return names
245
+ .filter((n) => n.endsWith(".jsonl"))
246
+ .map((n) => path.join(store, n))
247
+ .map((p) => {
248
+ try {
249
+ return { p, m: fs.statSync(p).mtimeMs };
250
+ } catch {
251
+ return { p, m: 0 };
252
+ }
253
+ })
254
+ .sort((a, b) => b.m - a.m)
255
+ .slice(0, limit)
256
+ .map((x) => x.p);
257
+ }
258
+
259
+ /** Top `n` entries of a histogram, descending. */
260
+ function top(hist: Record<string, number>, n: number): Array<[string, number]> {
261
+ return Object.entries(hist)
262
+ .sort((a, b) => b[1] - a[1])
263
+ .slice(0, n);
264
+ }
265
+
266
+ function pct(part: number, whole: number): string {
267
+ return whole === 0 ? "n/a" : `${((part / whole) * 100).toFixed(1)} %`;
268
+ }
269
+
270
+ export function render(r: TrafficReport): string {
271
+ const lines: string[] = [];
272
+ lines.push("autonomy_friction_traffic — category-A coverage over real Bash traffic\n");
273
+ lines.push(` store ${r.store}`);
274
+ lines.push(` transcripts ${r.transcripts}`);
275
+ lines.push(` Bash calls ${r.calls}\n`);
276
+ lines.push(` category A (this package hands the host an allow) ${r.categoryA} (${pct(r.categoryA, r.calls)})`);
277
+ lines.push(` no allow emitted ${r.calls - r.categoryA} (${pct(r.calls - r.categoryA, r.calls)})\n`);
278
+ lines.push(" first disqualifier:");
279
+ for (const [k, v] of top(r.disqualifiers, 10)) lines.push(` ${String(v).padStart(6)} ${k}`);
280
+ lines.push("\n top head tokens among the uncovered:");
281
+ for (const [k, v] of top(r.heads, 15)) lines.push(` ${String(v).padStart(6)} ${k}`);
282
+ lines.push("\n chain-nudge shape classes (counted over every call):");
283
+ lines.push(` ${String(r.shapes.editByShell).padStart(6)} edit-by-shell (${pct(r.shapes.editByShell, r.calls)})`);
284
+ lines.push(` ${String(r.shapes.chain).padStart(6)} chain (${pct(r.shapes.chain, r.calls)})`);
285
+ for (const [k, v] of top(r.editShapes, 6)) lines.push(` ${String(v).padStart(4)} ${k}`);
286
+ lines.push("\n Not a gate: no baseline, fails nothing. See this file's header for what");
287
+ lines.push(" the number does and does not say about what the operator was prompted for.\n");
288
+ return `${lines.join("\n")}\n`;
289
+ }
290
+
291
+ /**
292
+ * The value of `flag`, `undefined` when the flag is absent, `null` when it is
293
+ * present with no value.
294
+ *
295
+ * The three states are distinct because the caller must refuse the third. A
296
+ * valueless `--store` used to collapse into "absent" and fall back to the
297
+ * default store silently, which is the same class of defect as the `--limit`
298
+ * coercion beside it: an argument that silently changes the window.
299
+ */
300
+ function argValue(argv: readonly string[], flag: string): string | null | undefined {
301
+ const i = argv.indexOf(flag);
302
+ if (i === -1) return undefined;
303
+ const value = argv[i + 1];
304
+ return value === undefined || value.startsWith("--") ? null : value;
305
+ }
306
+
307
+ export function main(argv: string[] = process.argv.slice(2)): number {
308
+ if (argv.includes("--help") || argv.includes("-h")) {
309
+ process.stdout.write(
310
+ "usage: autonomy_friction_traffic [--store DIR] [--limit N] [--json] [--include-current]\n" +
311
+ " Category-A coverage over the Bash calls in a transcript store,\n" +
312
+ " plus the shape classes the chain-nudge concern flags. Calls are\n" +
313
+ " deduplicated by tool-use id and the running session's own\n" +
314
+ " transcript is excluded unless --include-current is passed.\n" +
315
+ " Exit 1 when the store is unreadable or holds no Bash call.\n",
316
+ );
317
+ return 0;
318
+ }
319
+ const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
320
+ const storeArg = argValue(argv, "--store");
321
+ if (storeArg === null) {
322
+ process.stderr.write("autonomy_friction_traffic: --store needs a directory\n");
323
+ return 1;
324
+ }
325
+ const store = storeArg ?? defaultStore(repoRoot);
326
+ const limitRaw = argValue(argv, "--limit");
327
+ let limit = DEFAULT_LIMIT;
328
+ if (limitRaw !== undefined) {
329
+ const parsed = limitRaw === null ? NaN : Number(limitRaw);
330
+ // Validated rather than coerced: `--limit -5` silently dropped the
331
+ // five OLDEST transcripts through `Array.slice`, `--limit 0` reported
332
+ // an empty store as the reason, and a typo fell back to 40 without
333
+ // saying so. A window is the report's denominator; a wrong one is a
334
+ // wrong measurement wearing the right shape.
335
+ if (!Number.isInteger(parsed) || parsed < 1) {
336
+ process.stderr.write(`autonomy_friction_traffic: --limit must be a positive integer, got ${limitRaw ?? "no value"}\n`);
337
+ return 1;
338
+ }
339
+ limit = parsed;
340
+ }
341
+
342
+ const current = argv.includes("--include-current") ? null : currentSessionTranscript(store);
343
+ const paths = transcriptPaths(store, limit).filter((p) => p !== current);
344
+ const calls: BashCall[] = [];
345
+ for (const p of paths) {
346
+ let text: string;
347
+ try {
348
+ text = fs.readFileSync(p, "utf8");
349
+ } catch {
350
+ continue;
351
+ }
352
+ calls.push(...extractCommands(text));
353
+ }
354
+ const commands = dedupeCalls(calls);
355
+ if (commands.length === 0) {
356
+ process.stderr.write(
357
+ `autonomy_friction_traffic: no Bash call found under ${store} ` +
358
+ `(${paths.length} transcript(s) read) — nothing measured\n`,
359
+ );
360
+ return 1;
361
+ }
362
+ const report = classify(store, paths.length, commands);
363
+ process.stdout.write(argv.includes("--json") ? `${JSON.stringify(report, null, 2)}\n` : render(report));
364
+ return 0;
365
+ }
366
+
367
+ function _isCliEntry(): boolean {
368
+ const argv1 = process.argv[1];
369
+ if (argv1 === undefined) return false;
370
+ try {
371
+ return fs.realpathSync(argv1) === fs.realpathSync(fileURLToPath(import.meta.url));
372
+ } catch {
373
+ return false;
374
+ }
375
+ }
376
+
377
+ if (_isCliEntry()) {
378
+ process.exit(main());
379
+ }
@@ -163,7 +163,30 @@ export function _buildCatalog(): Record<string, unknown> {
163
163
  return {
164
164
  schema_version: 1,
165
165
  description: CATALOG_DESCRIPTION,
166
- install_hint_stdio: `npx -y ${_packageName()} mcp-server`,
166
+ // `agent-config mcp-server`, not an `npx` form — AI council 2026-09-08,
167
+ // 2/2 convergent (road-to-a-graph-that-is-shipped 4.2, Fork 3 option 5).
168
+ //
169
+ // Both npx shapes are unusable here and for different reasons.
170
+ // `npx -y <pkg>@<version> mcp-server` is what `docs/mcp-server.md:97`
171
+ // documents and what the pin rationale at `docs/mcp-server.md:82` argues
172
+ // for, but the step's own verify requires the literal `npx -y` to be
173
+ // ABSENT from this file. Dropping the `-y` to satisfy that makes npx
174
+ // PROMPT before installing a package that is not present, which in a
175
+ // non-interactive MCP client start is a hang rather than a prompt.
176
+ //
177
+ // The installed binary is what the setup docs lead with
178
+ // (`docs/setup/mcp-client-config.md:35`,
179
+ // `docs/getting-started-local-stdio.md:9` — "the turnkey path … one
180
+ // command"), is non-interactive, and resolves no dist-tag at all
181
+ // because it IS whatever the consumer installed. Its cost is stated in
182
+ // the catalog description rather than hidden: it assumes the package is
183
+ // on PATH.
184
+ //
185
+ // RECORDED CONFLICT, per the same council verdict: this step's verify
186
+ // and the docs' pinned form contradict each other directly — the test
187
+ // forbids the string the documentation recommends. That is a defect in
188
+ // one of the two, and it is named here rather than silently normalised.
189
+ install_hint_stdio: `${_packageName().split('/').pop() ?? 'agent-config'} mcp-server`,
167
190
  tools: entries,
168
191
  };
169
192
  }