@event4u/agent-config 7.5.0 → 8.1.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 (429) hide show
  1. package/.claude-plugin/marketplace.json +8 -1
  2. package/AGENTS.md +9 -9
  3. package/CHANGELOG.md +317 -260
  4. package/README.md +35 -5
  5. package/dist/agent-src/commands/analytics/prune.md +1 -1
  6. package/dist/agent-src/commands/analytics/show.md +1 -1
  7. package/dist/agent-src/commands/analyze/decision.md +2 -2
  8. package/dist/agent-src/commands/analyze/incident.md +2 -2
  9. package/dist/agent-src/commands/analyze/near-miss.md +2 -2
  10. package/dist/agent-src/commands/analyze/postmortem.md +2 -2
  11. package/dist/agent-src/commands/analyze/premortem.md +2 -2
  12. package/dist/agent-src/commands/cost-report.md +25 -0
  13. package/dist/agent-src/commands/evals/analyze.json +30 -0
  14. package/dist/agent-src/commands/evals/mission-upgrade.json +30 -0
  15. package/dist/agent-src/commands/implement-ticket.md +1 -1
  16. package/dist/agent-src/commands/knowledge/forget.md +1 -1
  17. package/dist/agent-src/commands/knowledge/ingest.md +1 -1
  18. package/dist/agent-src/commands/knowledge/list.md +1 -1
  19. package/dist/agent-src/commands/memory/load.md +12 -11
  20. package/dist/agent-src/commands/memory/promote.md +30 -0
  21. package/dist/agent-src/commands/memory/propose.md +16 -2
  22. package/dist/agent-src/commands/mission/upgrade.md +1 -1
  23. package/dist/agent-src/commands/module/explore.md +11 -7
  24. package/dist/agent-src/commands/optimize-project.md +243 -0
  25. package/dist/agent-src/commands/optimize.md +5 -0
  26. package/dist/agent-src/commands/pr/create.md +37 -8
  27. package/dist/agent-src/commands/prediction-pool.md +2 -2
  28. package/dist/agent-src/commands/profile/activate.md +3 -3
  29. package/dist/agent-src/commands/profile/deactivate.md +2 -2
  30. package/dist/agent-src/commands/profile/show.md +3 -3
  31. package/dist/agent-src/commands/research/deep.md +5 -0
  32. package/dist/agent-src/commands/research/report.md +2 -1
  33. package/dist/agent-src/commands/roadmap/create.md +88 -10
  34. package/dist/agent-src/commands/roadmap/materialize.md +1 -1
  35. package/dist/agent-src/commands/roadmap/process-full.md +15 -2
  36. package/dist/agent-src/commands/roadmap/process-phase.md +18 -6
  37. package/dist/agent-src/commands/roadmap/process-step.md +4 -0
  38. package/dist/agent-src/commands/roadmap.md +1 -1
  39. package/dist/agent-src/commands/security-audit-config.md +1 -1
  40. package/dist/agent-src/commands/sync-agent-settings.md +1 -1
  41. package/dist/agent-src/commands/sync-gitignore/fix.md +42 -6
  42. package/dist/agent-src/commands/team-knowledge/bootstrap.md +106 -0
  43. package/dist/agent-src/commands/team-knowledge/consolidate.md +105 -0
  44. package/dist/agent-src/commands/team-knowledge.md +64 -0
  45. package/dist/agent-src/contexts/authority/commit-mechanics.md +8 -0
  46. package/dist/agent-src/contexts/authority/destructive-mechanics.md +11 -0
  47. package/dist/agent-src/contexts/authority/scope-mechanics.md +25 -0
  48. package/dist/agent-src/contexts/communication/rules-auto/reply-close-mechanics.md +43 -0
  49. package/dist/agent-src/contexts/contracts/agents-md-anatomy.md +1 -1
  50. package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +2 -2
  51. package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -0
  52. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +14 -4
  53. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +11 -0
  54. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +32 -8
  55. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +107 -0
  56. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +71 -15
  57. package/dist/agent-src/contexts/execution/subagent-steering.md +41 -1
  58. package/dist/agent-src/contexts/override-system.md +1 -1
  59. package/dist/agent-src/personas/brand-strategist.md +0 -1
  60. package/dist/agent-src/personas/data-integrity.md +66 -0
  61. package/dist/agent-src/personas/design-director.md +0 -1
  62. package/dist/agent-src/personas/performance-engineer.md +66 -0
  63. package/dist/agent-src/personas/production-validator.md +73 -0
  64. package/dist/agent-src/rules/agent-authority.md +3 -4
  65. package/dist/agent-src/rules/analysis-skill-routing.md +3 -5
  66. package/dist/agent-src/rules/architecture.md +2 -4
  67. package/dist/agent-src/rules/artifact-drafting-protocol.md +35 -6
  68. package/dist/agent-src/rules/artifact-engagement-recording.md +2 -4
  69. package/dist/agent-src/rules/ask-when-uncertain.md +10 -14
  70. package/dist/agent-src/rules/augment-edit-discipline.md +3 -5
  71. package/dist/agent-src/rules/autonomous-execution.md +3 -5
  72. package/dist/agent-src/rules/brand-consistency.md +3 -5
  73. package/dist/agent-src/rules/brand-source-of-truth.md +3 -5
  74. package/dist/agent-src/rules/cli-output-handling.md +4 -6
  75. package/dist/agent-src/rules/command-suggestion-policy.md +3 -5
  76. package/dist/agent-src/rules/commit-conventions.md +3 -5
  77. package/dist/agent-src/rules/commit-policy.md +18 -10
  78. package/dist/agent-src/rules/content-quoting-floor.md +88 -0
  79. package/dist/agent-src/rules/context-hygiene.md +3 -5
  80. package/dist/agent-src/rules/copilot-routing.md +4 -6
  81. package/dist/agent-src/rules/decision-revisit-gate.md +120 -0
  82. package/dist/agent-src/rules/delegation-policy.md +10 -6
  83. package/dist/agent-src/rules/design-fidelity.md +3 -5
  84. package/dist/agent-src/rules/devcontainer-routing.md +4 -6
  85. package/dist/agent-src/rules/direct-answers.md +13 -17
  86. package/dist/agent-src/rules/docker-commands.md +3 -5
  87. package/dist/agent-src/rules/domain-adoption-policy.md +3 -5
  88. package/dist/agent-src/rules/domain-safety-disclaimer.md +3 -5
  89. package/dist/agent-src/rules/domain-safety-pii.md +3 -5
  90. package/dist/agent-src/rules/domain-safety-retention.md +3 -5
  91. package/dist/agent-src/rules/downstream-changes.md +3 -4
  92. package/dist/agent-src/rules/engineering-safety-floor.md +3 -5
  93. package/dist/agent-src/rules/external-reference-deep-dive.md +3 -5
  94. package/dist/agent-src/rules/fast-path-marker-visibility.md +3 -5
  95. package/dist/agent-src/rules/finance-safety-floor.md +3 -6
  96. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +3 -5
  97. package/dist/agent-src/rules/git-history-discipline.md +3 -5
  98. package/dist/agent-src/rules/guidelines.md +2 -4
  99. package/dist/agent-src/rules/icon-consistency.md +3 -5
  100. package/dist/agent-src/rules/image-likeness-and-rights.md +3 -5
  101. package/dist/agent-src/rules/improve-before-implement.md +5 -5
  102. package/dist/agent-src/rules/invite-challenge.md +3 -5
  103. package/dist/agent-src/rules/language-and-tone.md +13 -15
  104. package/dist/agent-src/rules/laravel-routing.md +3 -5
  105. package/dist/agent-src/rules/laravel-translations.md +3 -5
  106. package/dist/agent-src/rules/legal-safety-floor.md +3 -5
  107. package/dist/agent-src/rules/lethal-trifecta-guard.md +3 -5
  108. package/dist/agent-src/rules/linked-projects-onboarding-gate.md +4 -7
  109. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +3 -5
  110. package/dist/agent-src/rules/markdown-safe-codeblocks.md +2 -4
  111. package/dist/agent-src/rules/media-governance-routing.md +3 -5
  112. package/dist/agent-src/rules/media-sync-ground-truth.md +3 -5
  113. package/dist/agent-src/rules/minimal-safe-diff.md +5 -5
  114. package/dist/agent-src/rules/missing-tool-handling.md +3 -5
  115. package/dist/agent-src/rules/model-recommendation.md +4 -6
  116. package/dist/agent-src/rules/no-attribution-footers.md +3 -5
  117. package/dist/agent-src/rules/no-cheap-questions.md +5 -8
  118. package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +3 -6
  119. package/dist/agent-src/rules/no-pr-progress-comments.md +3 -6
  120. package/dist/agent-src/rules/no-roadmap-references.md +3 -5
  121. package/dist/agent-src/rules/non-destructive-by-default.md +11 -13
  122. package/dist/agent-src/rules/notes-first-reasoning.md +3 -5
  123. package/dist/agent-src/rules/onboarding-gate.md +4 -6
  124. package/dist/agent-src/rules/output-discipline.md +3 -5
  125. package/dist/agent-src/rules/package-ci-checks.md +3 -5
  126. package/dist/agent-src/rules/persona-governance.md +2 -4
  127. package/dist/agent-src/rules/php-coding.md +3 -5
  128. package/dist/agent-src/rules/preservation-guard.md +2 -4
  129. package/dist/agent-src/rules/provider-lifecycle-discipline.md +3 -5
  130. package/dist/agent-src/rules/reviewer-awareness.md +5 -6
  131. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +3 -5
  132. package/dist/agent-src/rules/roadmap-progress-sync.md +5 -5
  133. package/dist/agent-src/rules/role-mode-adherence.md +2 -4
  134. package/dist/agent-src/rules/rule-type-governance.md +3 -5
  135. package/dist/agent-src/rules/runtime-safety.md +2 -4
  136. package/dist/agent-src/rules/scope-control.md +10 -11
  137. package/dist/agent-src/rules/security-sensitive-stop.md +4 -5
  138. package/dist/agent-src/rules/size-enforcement.md +2 -4
  139. package/dist/agent-src/rules/skill-improvement-trigger.md +3 -5
  140. package/dist/agent-src/rules/skill-quality.md +3 -5
  141. package/dist/agent-src/rules/slash-command-routing-policy.md +3 -5
  142. package/dist/agent-src/rules/source-confidentiality.md +3 -5
  143. package/dist/agent-src/rules/source-discovery-gate.md +3 -5
  144. package/dist/agent-src/rules/source-of-truth.md +3 -5
  145. package/dist/agent-src/rules/strategy-safety-floor.md +3 -5
  146. package/dist/agent-src/rules/symfony-routing.md +4 -6
  147. package/dist/agent-src/rules/telegraph-speak.md +4 -5
  148. package/dist/agent-src/rules/think-before-action.md +7 -4
  149. package/dist/agent-src/rules/token-budget-discipline.md +29 -5
  150. package/dist/agent-src/rules/token-efficiency.md +3 -5
  151. package/dist/agent-src/rules/token-optimizer-maintenance.md +3 -5
  152. package/dist/agent-src/rules/tool-safety.md +2 -4
  153. package/dist/agent-src/rules/ui-audit-gate.md +3 -6
  154. package/dist/agent-src/rules/untrusted-input-defense.md +3 -5
  155. package/dist/agent-src/rules/upstream-proposal.md +4 -6
  156. package/dist/agent-src/rules/user-interaction.md +7 -5
  157. package/dist/agent-src/rules/user-interrupt-priority.md +17 -8
  158. package/dist/agent-src/rules/verify-before-complete.md +12 -22
  159. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +3 -3
  160. package/dist/agent-src/scripts/update_roadmap_progress.ts +197 -7
  161. package/dist/agent-src/skills/adr-create/SKILL.md +48 -42
  162. package/dist/agent-src/skills/agent-docs-writing/SKILL.md +18 -0
  163. package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
  164. package/dist/agent-src/skills/ai-council/SKILL.md +14 -1
  165. package/dist/agent-src/skills/blameless-post-mortem/SKILL.md +0 -3
  166. package/dist/agent-src/skills/brand/SKILL.md +1 -1
  167. package/dist/agent-src/skills/brand-identity/SKILL.md +3 -3
  168. package/dist/agent-src/skills/brand-strategy/SKILL.md +1 -1
  169. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +3 -3
  170. package/dist/agent-src/skills/canvas-design/SKILL.md +6 -0
  171. package/dist/agent-src/skills/check-refs/SKILL.md +7 -4
  172. package/dist/agent-src/skills/code-review/SKILL.md +1 -0
  173. package/dist/agent-src/skills/complexity-first-planning/SKILL.md +6 -5
  174. package/dist/agent-src/skills/condense-memory/SKILL.md +11 -11
  175. package/dist/agent-src/skills/context-document/SKILL.md +17 -0
  176. package/dist/agent-src/skills/corpus-grounding/SKILL.md +3 -3
  177. package/dist/agent-src/skills/decision-record/SKILL.md +6 -0
  178. package/dist/agent-src/skills/decision-review/SKILL.md +5 -3
  179. package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +6 -1
  180. package/dist/agent-src/skills/design-intelligence/SKILL.md +5 -2
  181. package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
  182. package/dist/agent-src/skills/design-tokens/SKILL.md +10 -4
  183. package/dist/agent-src/skills/design-variations/SKILL.md +127 -0
  184. package/dist/agent-src/skills/design-variations/evals/triggers.json +17 -0
  185. package/dist/agent-src/skills/emit-tickets/SKILL.md +4 -4
  186. package/dist/agent-src/skills/fe-design/SKILL.md +20 -0
  187. package/dist/agent-src/skills/html-deck/SKILL.md +123 -0
  188. package/dist/agent-src/skills/html-deck/evals/triggers.json +17 -0
  189. package/dist/agent-src/skills/html-deck/templates/deck-shell.html +77 -0
  190. package/dist/agent-src/skills/judge-code-quality/SKILL.md +1 -0
  191. package/dist/agent-src/skills/laravel/SKILL.md +0 -1
  192. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +46 -0
  193. package/dist/agent-src/skills/lint-skills/SKILL.md +6 -6
  194. package/dist/agent-src/skills/md-language-check/SKILL.md +3 -3
  195. package/dist/agent-src/skills/memory-consolidation/SKILL.md +66 -1
  196. package/dist/agent-src/skills/migration-architect/SKILL.md +1 -0
  197. package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +2 -2
  198. package/dist/agent-src/skills/performance-analysis/SKILL.md +2 -0
  199. package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +4 -4
  200. package/dist/agent-src/skills/premortem/SKILL.md +0 -3
  201. package/dist/agent-src/skills/project-analysis-core/SKILL.md +16 -0
  202. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +3 -1
  203. package/dist/agent-src/skills/release-comms/SKILL.md +46 -45
  204. package/dist/agent-src/skills/roadmap-management/SKILL.md +21 -0
  205. package/dist/agent-src/skills/roadmap-writing/SKILL.md +32 -2
  206. package/dist/agent-src/skills/root-cause-frameworks/SKILL.md +0 -3
  207. package/dist/agent-src/skills/security-audit/SKILL.md +1 -0
  208. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +4 -0
  209. package/dist/agent-src/skills/source-discovery/SKILL.md +22 -3
  210. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +33 -14
  211. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +11 -0
  212. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-steps.md +8 -0
  213. package/dist/agent-src/skills/systematic-debugging/SKILL.md +29 -0
  214. package/dist/agent-src/skills/threat-modeling/SKILL.md +2 -2
  215. package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
  216. package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -0
  217. package/dist/agent-src/skills/wireframe/SKILL.md +118 -0
  218. package/dist/agent-src/skills/wireframe/evals/triggers.json +17 -0
  219. package/dist/agent-src/templates/agent-settings.md +22 -1
  220. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  221. package/dist/agent-src/templates/command.md +2 -2
  222. package/dist/agent-src/templates/contexts/knowledge-pages.md +116 -0
  223. package/dist/agent-src/templates/hooks/pre-commit-frontmatter +1 -1
  224. package/dist/agent-src/templates/roadmaps.md +70 -2
  225. package/dist/agent-src/templates/rule.md +1 -1
  226. package/dist/agent-src/templates/scripts/README.md +3 -3
  227. package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +109 -0
  228. package/dist/agent-src/templates/tickets.md +8 -8
  229. package/dist/cli/commands/recordTriggerEval.test.js +1 -1
  230. package/dist/cli/commands/recordTriggerEval.test.js.map +1 -1
  231. package/dist/cli/initRouting.js +4 -2
  232. package/dist/cli/initRouting.js.map +1 -1
  233. package/dist/cli/registry.js +1 -0
  234. package/dist/cli/registry.js.map +1 -1
  235. package/dist/discovery/deprecation-report.md +1 -1
  236. package/dist/discovery/discovery-manifest.json +718 -240
  237. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  238. package/dist/discovery/discovery-manifest.summary.md +8 -8
  239. package/dist/discovery/orphan-report.md +1 -1
  240. package/dist/discovery/packs.json +43 -28
  241. package/dist/discovery/trust-report.md +12 -11
  242. package/dist/discovery/workspaces.json +29 -18
  243. package/dist/install/preflight.js +173 -0
  244. package/dist/install/preflight.js.map +1 -0
  245. package/dist/mcp/registry-manifest.json +4 -4
  246. package/dist/router.json +1 -1
  247. package/dist/server/routes/settings.js +4 -0
  248. package/dist/server/routes/settings.js.map +1 -1
  249. package/dist/server/schemas/settings.js +3 -1
  250. package/dist/server/schemas/settings.js.map +1 -1
  251. package/docs/CLAIMS.md +108 -0
  252. package/docs/MIGRATION.md +3 -3
  253. package/docs/architecture.md +5 -5
  254. package/docs/archive/CHANGELOG-pre-8.0.0.md +301 -0
  255. package/docs/benchmark.md +133 -2
  256. package/docs/benchmark.pinned.yml +31 -0
  257. package/docs/capability-matrix.md +1 -0
  258. package/docs/catalog.md +70 -60
  259. package/docs/command-flows.md +15 -3
  260. package/docs/comparison.yaml +35 -0
  261. package/docs/contracts/agents-layout.md +148 -0
  262. package/docs/contracts/brand-token-consumption.md +5 -0
  263. package/docs/contracts/capability-boundary.md +5 -0
  264. package/docs/contracts/command-category-governance.md +5 -0
  265. package/docs/contracts/command-clusters.md +1 -0
  266. package/docs/contracts/command-surface-tiers.md +1 -1
  267. package/docs/contracts/conformance.md +84 -0
  268. package/docs/contracts/creative-pack-boundary.md +5 -0
  269. package/docs/contracts/discovery-manifest.schema.json +5 -4
  270. package/docs/contracts/file-ownership-matrix.json +4605 -985
  271. package/docs/contracts/governance-enforcement-projection.md +5 -0
  272. package/docs/contracts/gui-wizard.md +1 -1
  273. package/docs/contracts/hook-architecture-v1.md +2 -2
  274. package/docs/contracts/implement-ticket-flow.md +1 -1
  275. package/docs/contracts/kernel-membership.md +13 -0
  276. package/docs/contracts/mcp-tool-inventory.md +23 -23
  277. package/docs/contracts/no-runtime-boundary.md +6 -1
  278. package/docs/contracts/review-lens-schema.md +5 -0
  279. package/docs/contracts/rule-router.md +102 -8
  280. package/docs/contracts/skill-bundled-assets.md +1 -1
  281. package/docs/contracts/skill-dry-run.md +1 -1
  282. package/docs/contracts/subagent-boundary.md +5 -0
  283. package/docs/contracts/ticket-bundle-format.md +9 -4
  284. package/docs/contracts/tier-3-contrib-plugin.md +2 -2
  285. package/docs/contracts/write-engine.md +3 -0
  286. package/docs/customization.md +87 -15
  287. package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +1 -1
  288. package/docs/decisions/ADR-109-subagent-v1-contract.md +246 -0
  289. package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +105 -0
  290. package/docs/decisions/INDEX.md +2 -0
  291. package/docs/distribution/awesome-list-submission.md +46 -0
  292. package/docs/distribution/launch-story-draft.md +58 -0
  293. package/docs/end-to-end-walkthroughs.md +2 -2
  294. package/docs/getting-started.md +2 -2
  295. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +24 -0
  296. package/docs/guidelines/agent-infra/corpus-grounding-authoring.md +1 -1
  297. package/docs/guidelines/agent-infra/linked-projects-onboarding-gate.md +2 -2
  298. package/docs/guidelines/agent-infra/missing-tool-handling.md +3 -3
  299. package/docs/guidelines/agent-infra/verify-before-complete-demos.md +2 -2
  300. package/docs/guidelines/augment-portability-patterns.md +1 -1
  301. package/docs/guidelines/code-clarity.md +19 -0
  302. package/docs/guidelines/design-antipatterns-triggers.json +2 -1
  303. package/docs/guidelines/design-antipatterns.md +10 -1
  304. package/docs/guidelines/design-modes.md +6 -0
  305. package/docs/guidelines/php/general.md +9 -1
  306. package/docs/guidelines/php/php-coding-patterns.md +7 -0
  307. package/docs/guides/cross-repo-retrieval.md +1 -1
  308. package/docs/guides/frontend-design-corpus-refresh.md +2 -2
  309. package/docs/guides/local-analytics.md +4 -4
  310. package/docs/guides/skill-discovery.md +1 -1
  311. package/docs/guides/skill-preview.md +1 -1
  312. package/docs/hook-payload-capture.md +6 -6
  313. package/docs/install-friction-report.md +66 -0
  314. package/docs/installation.md +1 -1
  315. package/docs/maintainers/optional-media-deps.md +50 -0
  316. package/docs/mcp-server.md +11 -12
  317. package/docs/media/proof-demo.cast +14 -0
  318. package/docs/media/proof-demo.gif +0 -0
  319. package/docs/migration/consumer-template-consumption-model.md +1 -1
  320. package/docs/migration/divergences/bench-stats-float-precision.md +1 -1
  321. package/docs/migration/node-floor.md +1 -1
  322. package/docs/migration/yaml-roundtrip-spike.md +1 -1
  323. package/docs/personas.md +16 -5
  324. package/docs/positioning-evidence.md +86 -0
  325. package/docs/proof.md +86 -0
  326. package/docs/skills-catalog.md +1 -1
  327. package/docs/troubleshooting.md +8 -8
  328. package/docs/wedge/production-validator/README.md +57 -0
  329. package/docs/wedge/production-validator/production-validator.md +56 -0
  330. package/docs/wizard.md +2 -2
  331. package/package.json +1 -1
  332. package/src/config/agent-settings.template.yml +59 -4
  333. package/src/config/agents-paths.yml +254 -0
  334. package/src/config/budgets.yml +16 -0
  335. package/src/config/discovery/packs.yml +1 -0
  336. package/src/config/discovery/unassigned-artefacts.yml +2 -0
  337. package/src/config/gitignore-block.txt +25 -0
  338. package/src/config/host-capabilities.yml +31 -0
  339. package/src/config/profiles/balanced.ini +4 -0
  340. package/src/config/profiles/full.ini +4 -0
  341. package/src/config/profiles/minimal.ini +4 -0
  342. package/src/scripts/_cli/cmd_conformance.ts +716 -0
  343. package/src/scripts/_cli/cmd_doctor.ts +23 -2
  344. package/src/scripts/_cli/cmd_fleet.ts +401 -0
  345. package/src/scripts/_cli/cmd_preflight.ts +159 -0
  346. package/src/scripts/_dispatch.bash +10 -0
  347. package/src/scripts/_lib/knowledge_events.ts +193 -0
  348. package/src/scripts/_lib/subagent_steering.ts +115 -3
  349. package/src/scripts/_lib/text_similarity.ts +75 -0
  350. package/src/scripts/ai-video/test-pipeline.sh +1 -1
  351. package/src/scripts/ai_council/clients.ts +19 -3
  352. package/src/scripts/append_contested.ts +112 -0
  353. package/src/scripts/audit_auto_rules.ts +11 -1
  354. package/src/scripts/audit_mcp_tools.ts +25 -11
  355. package/src/scripts/bench_ab_v2_run.ts +527 -40
  356. package/src/scripts/bench_ab_v2_stats.ts +6 -0
  357. package/src/scripts/bench_matrix.ts +266 -0
  358. package/src/scripts/bootstrap_knowledge.ts +267 -0
  359. package/src/scripts/build_discovery_manifest.ts +42 -2
  360. package/src/scripts/build_proof.ts +214 -0
  361. package/src/scripts/check_always_budget.ts +3 -0
  362. package/src/scripts/check_augment_description_cap.ts +2 -2
  363. package/src/scripts/check_claims.ts +270 -0
  364. package/src/scripts/check_comparison.ts +79 -0
  365. package/src/scripts/check_generated_artefact_headers.ts +109 -0
  366. package/src/scripts/check_generator_output_coverage.ts +142 -0
  367. package/src/scripts/check_gitignore_freshness.ts +127 -0
  368. package/src/scripts/check_knowledge_pages.ts +210 -0
  369. package/src/scripts/check_knowledge_sharing.ts +162 -0
  370. package/src/scripts/check_media_deps.ts +91 -0
  371. package/src/scripts/check_memory_contradiction.ts +280 -0
  372. package/src/scripts/check_memory_similarity.ts +134 -0
  373. package/src/scripts/check_quality_regression.ts +56 -10
  374. package/src/scripts/check_references.ts +3 -1
  375. package/src/scripts/check_release_pr_shape.ts +4 -0
  376. package/src/scripts/check_site_links.ts +135 -0
  377. package/src/scripts/check_skill_gaps.ts +99 -0
  378. package/src/scripts/check_token_quality_golden.ts +197 -11
  379. package/src/scripts/check_tracked_but_ignored.ts +67 -0
  380. package/src/scripts/cluster_near_miss_patterns.ts +0 -0
  381. package/src/scripts/compile_router.ts +30 -3
  382. package/src/scripts/condense.ts +350 -14
  383. package/src/scripts/consolidate_knowledge_events.ts +192 -0
  384. package/src/scripts/degrade_to_pointer.ts +136 -0
  385. package/src/scripts/design_slop_rules.test.ts +15 -0
  386. package/src/scripts/design_slop_rules.ts +28 -0
  387. package/src/scripts/emit_knowledge_event.ts +158 -0
  388. package/src/scripts/export_replay_corpus.ts +187 -0
  389. package/src/scripts/external_sources_denylist.json +7 -2
  390. package/src/scripts/fold_intake.ts +281 -0
  391. package/src/scripts/generate_capability_matrix.ts +9 -1
  392. package/src/scripts/generate_knowledge_index.ts +222 -0
  393. package/src/scripts/hook_manifest.yaml +26 -14
  394. package/src/scripts/hooks/dispatch_hook.ts +18 -0
  395. package/src/scripts/hot_context_hook.ts +372 -0
  396. package/src/scripts/install +47 -0
  397. package/src/scripts/install-hooks.sh +17 -0
  398. package/src/scripts/inventory_meta_layers.ts +11 -0
  399. package/src/scripts/janitor.ts +258 -0
  400. package/src/scripts/lint_agents_layout.ts +74 -15
  401. package/src/scripts/lint_bench_ab.ts +4 -1
  402. package/src/scripts/lint_featured_skills.ts +0 -0
  403. package/src/scripts/lint_framework_leakage_allowlist.json +26 -3
  404. package/src/scripts/lint_knowledge_scale.ts +250 -0
  405. package/src/scripts/lint_legal_pack.ts +67 -0
  406. package/src/scripts/lint_persona_governance.ts +8 -3
  407. package/src/scripts/lint_regression.ts +15 -0
  408. package/src/scripts/lint_roadmap_blockers.ts +202 -0
  409. package/src/scripts/lint_roadmap_complexity.ts +81 -2
  410. package/src/scripts/lint_subagent_determinism.ts +125 -0
  411. package/src/scripts/measure_augment_budget.ts +46 -6
  412. package/src/scripts/measure_patterns.ts +4 -3
  413. package/src/scripts/measure_skill_reduction.ts +6 -6
  414. package/src/scripts/migration_status.ts +6 -2
  415. package/src/scripts/mine_missing_guardrails.ts +189 -0
  416. package/src/scripts/parity/phase_gate.ts +1 -1
  417. package/src/scripts/parity/replay.ts +21 -0
  418. package/src/scripts/project_thin_rules.ts +120 -16
  419. package/src/scripts/release.ts +39 -1
  420. package/src/scripts/render_benchmark_composite.ts +378 -0
  421. package/src/scripts/roadmap_progress_hook.ts +101 -43
  422. package/src/scripts/schemas/skill.schema.json +27 -0
  423. package/src/scripts/schemas/subagent.schema.json +106 -0
  424. package/src/scripts/skill_linter.ts +1 -0
  425. package/src/scripts/smoke/kernel.sh +5 -4
  426. package/src/scripts/surface-tiers.yml +1 -0
  427. package/src/scripts/sync_gitignore.ts +4 -0
  428. package/src/scripts/update_skill_candidates.ts +172 -0
  429. package/src/scripts/validate_frontmatter.ts +1 -0
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Pointer degradation — road-to-knowledge-system Phase 4 (self-learning
4
+ * wiring). After `learning-to-rule-or-skill` promotes a knowledge-page
5
+ * entry into a real skill/rule/guideline, the SOURCE entry is rewritten to
6
+ * a pointer stub instead of staying as full duplicated prose. This is the
7
+ * staging → promotion → pointer lifecycle: it prevents double-maintenance
8
+ * between the knowledge page and the new artifact, and keeps
9
+ * `agents/knowledge/INDEX.md` honest about what still needs attention.
10
+ *
11
+ * Two source shapes:
12
+ * - Whole page: `--source agents/knowledge/concepts/x.md` — the page
13
+ * BODY (below frontmatter) is replaced with a pointer line;
14
+ * frontmatter (and its provenance) is preserved untouched.
15
+ * - Named section: `--source agents/knowledge/procedures/skill-candidates.md#<topic>`
16
+ * — only the matching `## <topic>` section's body is replaced; the
17
+ * heading and every other section stay untouched.
18
+ *
19
+ * Usage:
20
+ * degrade_to_pointer.ts --source <path[#anchor]> --artifact <path> --date <YYYY-MM-DD>
21
+ *
22
+ * Exit codes: 0 = degraded, 1 = usage error / source not found, 3 = internal error.
23
+ */
24
+ import * as fs from 'node:fs';
25
+ import * as path from 'node:path';
26
+ import process from 'node:process';
27
+ import { fileURLToPath } from 'node:url';
28
+
29
+ import { main as generateIndexMain } from './generate_knowledge_index.js';
30
+
31
+ const PROG = 'degrade_to_pointer.ts';
32
+ const FRONTMATTER_RE = /^(---[ \t]*\r?\n[\s\S]*?\r?\n---[ \t]*\r?\n)/;
33
+
34
+ export function pointerLine(artifact: string, date: string): string {
35
+ return `> Promoted to \`${artifact}\` on ${date}; see that artifact for current guidance.`;
36
+ }
37
+
38
+ /** Replace a whole page's body (below frontmatter, if any) with a pointer line. Preserves frontmatter and the first H1 heading, if present, so the page stays a resolvable link target. */
39
+ export function degradeWholeFile(content: string, artifact: string, date: string): string {
40
+ const fmMatch = FRONTMATTER_RE.exec(content);
41
+ const frontmatter = fmMatch?.[1] ?? '';
42
+ const rest = fmMatch ? content.slice(frontmatter.length) : content;
43
+
44
+ const headingMatch = /^(#\s+.+)$/m.exec(rest);
45
+ const heading = headingMatch?.[1] !== undefined ? `${headingMatch[1]}\n\n` : '';
46
+
47
+ return `${frontmatter}${heading}${pointerLine(artifact, date)}\n`;
48
+ }
49
+
50
+ /** Replace one `## <anchor>` section's body (up to the next `## ` heading or EOF) with a pointer line, byte-for-byte outside that span. Throws if the anchor is not found. */
51
+ export function degradeSection(content: string, anchor: string, artifact: string, date: string): string {
52
+ const headingLine = `## ${anchor}`;
53
+ const lines = content.split('\n');
54
+ const startIdx = lines.findIndex((l) => l.trim() === headingLine);
55
+ if (startIdx === -1) {
56
+ throw new Error(`section "${anchor}" not found`);
57
+ }
58
+ let endIdx = lines.length;
59
+ for (let i = startIdx + 1; i < lines.length; i++) {
60
+ if (/^##\s/.test(lines[i] ?? '')) {
61
+ endIdx = i;
62
+ break;
63
+ }
64
+ }
65
+ const before = lines.slice(0, startIdx + 1);
66
+ const after = lines.slice(endIdx);
67
+ const body = ['', pointerLine(artifact, date), ''];
68
+ return [...before, ...body, ...after].join('\n');
69
+ }
70
+
71
+ function printUsage(): void {
72
+ process.stdout.write(`usage: ${PROG} --source PATH[#ANCHOR] --artifact PATH --date YYYY-MM-DD\n`);
73
+ }
74
+
75
+ export function main(argv: string[]): number {
76
+ let source: string | null = null;
77
+ let artifact: string | null = null;
78
+ let date: string | null = null;
79
+
80
+ for (let i = 0; i < argv.length; i++) {
81
+ const arg = argv[i];
82
+ if (arg === '-h' || arg === '--help') {
83
+ printUsage();
84
+ return 0;
85
+ } else if (arg === '--source') {
86
+ source = argv[++i] ?? null;
87
+ } else if (arg === '--artifact') {
88
+ artifact = argv[++i] ?? null;
89
+ } else if (arg === '--date') {
90
+ date = argv[++i] ?? null;
91
+ } else {
92
+ process.stderr.write(`${PROG}: error: unrecognized argument: ${arg}\n`);
93
+ printUsage();
94
+ return 1;
95
+ }
96
+ }
97
+
98
+ if (!source || !artifact || !date) {
99
+ process.stderr.write(`${PROG}: error: --source, --artifact, and --date are required\n`);
100
+ printUsage();
101
+ return 1;
102
+ }
103
+
104
+ const [filePath = '', anchor] = source.split('#');
105
+
106
+ let content: string;
107
+ try {
108
+ content = fs.readFileSync(filePath, 'utf8');
109
+ } catch {
110
+ process.stderr.write(`${PROG}: error: source file not found: ${filePath}\n`);
111
+ return 1;
112
+ }
113
+
114
+ let updated: string;
115
+ try {
116
+ updated = anchor ? degradeSection(content, anchor, artifact, date) : degradeWholeFile(content, artifact, date);
117
+ } catch (err) {
118
+ process.stderr.write(`${PROG}: error: ${(err as Error).message}\n`);
119
+ return 1;
120
+ }
121
+
122
+ fs.writeFileSync(filePath, updated, 'utf8');
123
+ process.stdout.write(`${PROG}: degraded ${source} → pointer to ${artifact}.\n`);
124
+
125
+ // Regenerate the index so the pointer's new one-line summary is
126
+ // reflected immediately, not left stale until the next unrelated write.
127
+ // Assumes the standard invocation cwd (repo root), matching every other
128
+ // script in this package (generate_knowledge_index.ts defaults the same way).
129
+ generateIndexMain(['--dir', process.cwd(), '--quiet']);
130
+
131
+ return 0;
132
+ }
133
+
134
+ if (fileURLToPath(import.meta.url) === path.resolve(process.argv[1] ?? '')) {
135
+ process.exit(main(process.argv.slice(2)));
136
+ }
@@ -93,6 +93,13 @@ const FIXTURES: Record<string, { ext: string; positive: string; negative: string
93
93
  positive: "We streamline and empower your robust, world-class workflow.",
94
94
  negative: "We cut page load by 40% and remove three steps from checkout.",
95
95
  },
96
+ "slop-cp5-emoji-ui": {
97
+ ext: "html",
98
+ positive: '<h1>🚀 Get Started</h1><button>✅ Track progress</button>',
99
+ // Functional placements stay clean: mid-sentence emoji, status-cell emoji.
100
+ negative:
101
+ '<h1>Get Started</h1><p>Deploys are marked ✅ when healthy.</p><td>✅</td><button>Track progress</button>',
102
+ },
96
103
  "slop-lock-shape": {
97
104
  ext: "css",
98
105
  positive: ".a{border-radius:4px}.b{border-radius:8px}.c{border-radius:12px}.d{border-radius:20px}",
@@ -171,6 +178,14 @@ describe("context gates suppress when DESIGN.md declares intent", () => {
171
178
  ).toBe(0);
172
179
  });
173
180
 
181
+ it("cp5 emoji-ui is suppressed when DESIGN.md declares an emoji strategy", () => {
182
+ const fx = FIXTURES["slop-cp5-emoji-ui"]!;
183
+ expect(findingsFor("slop-cp5-emoji-ui", fx.positive, "html", NO_CTX).length).toBeGreaterThan(0);
184
+ expect(
185
+ findingsFor("slop-cp5-emoji-ui", fx.positive, "html", ctxWith("Voice: playful; emoji are part of the brand voice in headings and CTAs")).length,
186
+ ).toBe(0);
187
+ });
188
+
174
189
  it("c5 cream-palette is suppressed under a declared warm-neutral language", () => {
175
190
  const fx = FIXTURES["slop-c5-cream-palette"]!;
176
191
  expect(findingsFor("slop-c5-cream-palette", fx.positive, "css", NO_CTX).length).toBeGreaterThan(0);
@@ -408,6 +408,34 @@ export const SLOP_RULES: SlopRule[] = [
408
408
  return [];
409
409
  },
410
410
  },
411
+ {
412
+ id: "slop-cp5-emoji-ui",
413
+ catalogId: "CP5",
414
+ severity: "P2",
415
+ engines: ["html", "jsx"],
416
+ description: "Emoji-decoration prepending headings, buttons, list items, or CTAs",
417
+ message:
418
+ "Emoji-prepended UI text (🚀 Get Started) is the default-startup-template tell — no emoji beats decorative emoji (CP5). Functional status/category emojis and brand-declared emoji strategies are exempt.",
419
+ gated: (ctx) => ctx.has("emoji"),
420
+ detect: ({ content }) => {
421
+ // Emoji as the FIRST visible character inside a heading, button, list
422
+ // item, or link — decoration position. Emojis elsewhere (mid-sentence,
423
+ // table cells, status chips) are not matched: those are the functional
424
+ // placements CP5 explicitly exempts.
425
+ const re =
426
+ /<(h[1-6]|button|li|a)\b[^>]*>\s*(?:<(?!\/)[^>]*>\s*)*(\p{Extended_Pictographic})/giu;
427
+ const hits: RawHit[] = [];
428
+ let m: RegExpExecArray | null;
429
+ while ((m = re.exec(content)) !== null) {
430
+ const before = content.slice(0, m.index);
431
+ hits.push({
432
+ line: (before.match(/\n/g) ?? []).length + 1,
433
+ snippet: content.slice(m.index, m.index + 60).replace(/\n/g, " "),
434
+ });
435
+ }
436
+ return hits;
437
+ },
438
+ },
411
439
  {
412
440
  id: "slop-lock-shape",
413
441
  catalogId: "V8",
@@ -0,0 +1,158 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * CLI wrapper for `appendEvent` (src/scripts/_lib/knowledge_events.ts) —
4
+ * road-to-knowledge-system Phase 5. This is the actual command an agent
5
+ * runs to append a typed observation event; the `_lib` module holds the
6
+ * pure schema + validation logic only (this repo's convention: `_lib/`
7
+ * files are never directly invoked).
8
+ *
9
+ * Usage (one flag set per event type — see --help for the full list):
10
+ * emit_knowledge_event.ts --type convention_detected --pattern "<p>" --evidence "file:line" [--evidence "file:line" ...] --sample-size N --scope project|global
11
+ * emit_knowledge_event.ts --type mistake_made --error-category "<c>" --context-source "<path>|null" --correction "<text>" --recurrence-key "<key>"
12
+ * emit_knowledge_event.ts --type api_shape_learned --endpoint "<path>" --method "<verb>" --request-schema "<json>" --response-schema "<json>"
13
+ * emit_knowledge_event.ts --type context_stale --page-path "<path>" --field "<field>" --expected "<text>" --actual "<text>" --evidence "<text>"
14
+ *
15
+ * Exit codes: 0 = appended, 1 = usage / validation error.
16
+ */
17
+ import process from 'node:process';
18
+ import { fileURLToPath } from 'node:url';
19
+ import * as path from 'node:path';
20
+
21
+ import { appendEvent, type KnowledgeEvent } from './_lib/knowledge_events.js';
22
+
23
+ const PROG = 'emit_knowledge_event.ts';
24
+
25
+ function printUsage(): void {
26
+ process.stdout.write(
27
+ [
28
+ `usage: ${PROG} --type TYPE [type-specific flags]`,
29
+ '',
30
+ ' --type convention_detected --pattern P --evidence E [--evidence E ...] --sample-size N --scope project|global',
31
+ ' --type mistake_made --error-category C --context-source PATH|null --correction TEXT --recurrence-key KEY',
32
+ ' --type api_shape_learned --endpoint PATH --method VERB --request-schema JSON --response-schema JSON',
33
+ ' --type context_stale --page-path PATH --field FIELD --expected TEXT --actual TEXT --evidence TEXT',
34
+ '',
35
+ ].join('\n'),
36
+ );
37
+ }
38
+
39
+ function parseFlags(argv: string[]): Map<string, string[]> {
40
+ const flags = new Map<string, string[]>();
41
+ for (let i = 0; i < argv.length; i++) {
42
+ const arg = argv[i];
43
+ if (arg === undefined || !arg.startsWith('--')) continue;
44
+ const key = arg.slice(2);
45
+ const value = argv[++i] ?? '';
46
+ const existing = flags.get(key) ?? [];
47
+ existing.push(value);
48
+ flags.set(key, existing);
49
+ }
50
+ return flags;
51
+ }
52
+
53
+ function one(flags: Map<string, string[]>, key: string): string | null {
54
+ return flags.get(key)?.[0] ?? null;
55
+ }
56
+
57
+ export function main(argv: string[]): number {
58
+ if (argv.includes('-h') || argv.includes('--help')) {
59
+ printUsage();
60
+ return 0;
61
+ }
62
+
63
+ const flags = parseFlags(argv);
64
+ const type = one(flags, 'type');
65
+ const ts = new Date().toISOString();
66
+
67
+ let event: KnowledgeEvent;
68
+ try {
69
+ switch (type) {
70
+ case 'convention_detected': {
71
+ const pattern = one(flags, 'pattern');
72
+ const evidence = flags.get('evidence') ?? [];
73
+ const sampleSizeRaw = one(flags, 'sample-size');
74
+ const scope = one(flags, 'scope');
75
+ if (!pattern || evidence.length === 0 || !sampleSizeRaw || (scope !== 'project' && scope !== 'global')) {
76
+ throw new Error('missing/invalid --pattern, --evidence, --sample-size, or --scope');
77
+ }
78
+ event = {
79
+ type: 'convention_detected',
80
+ ts,
81
+ pattern,
82
+ evidence,
83
+ sampleSize: Number.parseInt(sampleSizeRaw, 10),
84
+ scope,
85
+ };
86
+ break;
87
+ }
88
+ case 'mistake_made': {
89
+ const errorCategory = one(flags, 'error-category');
90
+ const contextSourceRaw = one(flags, 'context-source');
91
+ const correction = one(flags, 'correction');
92
+ const recurrenceKey = one(flags, 'recurrence-key');
93
+ if (!errorCategory || contextSourceRaw === null || !correction || !recurrenceKey) {
94
+ throw new Error('missing --error-category, --context-source, --correction, or --recurrence-key');
95
+ }
96
+ event = {
97
+ type: 'mistake_made',
98
+ ts,
99
+ errorCategory,
100
+ contextSource: contextSourceRaw === 'null' ? null : contextSourceRaw,
101
+ correction,
102
+ recurrenceKey,
103
+ };
104
+ break;
105
+ }
106
+ case 'api_shape_learned': {
107
+ const endpoint = one(flags, 'endpoint');
108
+ const method = one(flags, 'method');
109
+ const requestSchemaRaw = one(flags, 'request-schema');
110
+ const responseSchemaRaw = one(flags, 'response-schema');
111
+ if (!endpoint || !method || requestSchemaRaw === null || responseSchemaRaw === null) {
112
+ throw new Error('missing --endpoint, --method, --request-schema, or --response-schema');
113
+ }
114
+ event = {
115
+ type: 'api_shape_learned',
116
+ ts,
117
+ endpoint,
118
+ method,
119
+ requestSchema: JSON.parse(requestSchemaRaw),
120
+ responseSchema: JSON.parse(responseSchemaRaw),
121
+ };
122
+ break;
123
+ }
124
+ case 'context_stale': {
125
+ const pagePath = one(flags, 'page-path');
126
+ const field = one(flags, 'field');
127
+ const expected = one(flags, 'expected');
128
+ const actual = one(flags, 'actual');
129
+ const evidence = one(flags, 'evidence');
130
+ if (!pagePath || !field || expected === null || actual === null || !evidence) {
131
+ throw new Error('missing --page-path, --field, --expected, --actual, or --evidence');
132
+ }
133
+ event = { type: 'context_stale', ts, pagePath, field, expected, actual, evidence };
134
+ break;
135
+ }
136
+ default:
137
+ throw new Error(`--type must be one of convention_detected|mistake_made|api_shape_learned|context_stale (got "${type}")`);
138
+ }
139
+ } catch (err) {
140
+ process.stderr.write(`${PROG}: error: ${(err as Error).message}\n`);
141
+ printUsage();
142
+ return 1;
143
+ }
144
+
145
+ try {
146
+ appendEvent(event);
147
+ } catch (err) {
148
+ process.stderr.write(`${PROG}: error: ${(err as Error).message}\n`);
149
+ return 1;
150
+ }
151
+
152
+ process.stdout.write(`${PROG}: appended ${type} event to agents/knowledge/intake/.\n`);
153
+ return 0;
154
+ }
155
+
156
+ if (fileURLToPath(import.meta.url) === path.resolve(process.argv[1] ?? '')) {
157
+ process.exit(main(process.argv.slice(2)));
158
+ }
@@ -0,0 +1,187 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Field-corpus exporter for router-telemetry replays
4
+ * (road-to-token-proof-and-story Phase 2).
5
+ *
6
+ * Reads one or more `.agent-chat-history` JSONL logs (schema: one JSON object
7
+ * per line; user turns are `{"t": "user", "text": "..."}`), extracts real
8
+ * prompts, applies a built-in redaction pass, and emits a
9
+ * `router_telemetry`-compatible corpus (`prompts:` entries with
10
+ * `{id, text, command}`), so the three/four replay arms run on
11
+ * consumer-shaped traffic instead of synthetic tasks.
12
+ *
13
+ * PRIVACY GATE (operator, non-optional): the built-in redaction is a
14
+ * mechanical first pass — emails, home paths, key-shaped tokens, long hex,
15
+ * URLs with credentials. The exported file MUST be human-reviewed under the
16
+ * low-impact-corpus privacy floor BEFORE it is stored, committed, or fed to
17
+ * any report that leaves the machine. The tool prints this reminder and
18
+ * defaults to a `.local.yaml` output name so an unreviewed export cannot be
19
+ * committed silently (gitignored pattern).
20
+ *
21
+ * Usage:
22
+ * ./scripts-run src/scripts/export_replay_corpus \
23
+ * --history agents/runtime/.agent-chat-history \
24
+ * [--history <other-repo>/agents/runtime/.agent-chat-history ...] \
25
+ * [--out internal/bench/corpora/field-prompts.local.yaml] \
26
+ * [--limit 200] [--min-chars 20]
27
+ *
28
+ * Exit codes: 0 written · 1 usage/file error.
29
+ */
30
+ import * as fs from 'node:fs';
31
+ import * as path from 'node:path';
32
+ import process from 'node:process';
33
+ import { fileURLToPath, pathToFileURL } from 'node:url';
34
+
35
+ const _HERE = fileURLToPath(import.meta.url);
36
+ const REPO_ROOT = path.resolve(path.dirname(_HERE), '..', '..');
37
+ const DEFAULT_OUT = path.join(REPO_ROOT, 'internal/bench/corpora/field-prompts.local.yaml');
38
+
39
+ export interface FieldPrompt {
40
+ id: string;
41
+ text: string;
42
+ command: string | null;
43
+ }
44
+
45
+ const REDACTIONS: Array<[RegExp, string]> = [
46
+ // emails
47
+ [/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g, '<EMAIL>'],
48
+ // API-key-shaped tokens (sk-…, ghp_…, xox…, AKIA…, long base64-ish runs)
49
+ [/\b(?:sk-[A-Za-z0-9_-]{10,}|ghp_[A-Za-z0-9]{20,}|gho_[A-Za-z0-9]{20,}|xox[a-z]-[A-Za-z0-9-]{10,}|AKIA[A-Z0-9]{12,})\b/g, '<KEY>'],
50
+ // credentials embedded in URLs
51
+ [/(https?:\/\/)[^\s/@]+:[^\s/@]+@/g, '$1<CREDENTIALS>@'],
52
+ // absolute home paths (macOS/Linux)
53
+ [/(?:\/Users|\/home)\/[A-Za-z0-9._-]+/g, '<HOME>'],
54
+ // long hex blobs (hashes, tokens)
55
+ [/\b[a-f0-9]{32,}\b/gi, '<HEX>'],
56
+ // IPv4
57
+ [/\b(?:\d{1,3}\.){3}\d{1,3}\b/g, '<IP>'],
58
+ ];
59
+
60
+ /** Mechanical first-pass redaction — NOT a substitute for the operator review. */
61
+ export function redact(text: string): string {
62
+ let out = text;
63
+ for (const [re, sub] of REDACTIONS) {
64
+ out = out.replace(re, sub);
65
+ }
66
+ return out;
67
+ }
68
+
69
+ /** Extract user prompts from one .agent-chat-history JSONL file. */
70
+ export function extract_prompts(jsonlText: string, minChars: number): string[] {
71
+ const out: string[] = [];
72
+ for (const line of jsonlText.split('\n')) {
73
+ const trimmed = line.trim();
74
+ if (!trimmed) continue;
75
+ let obj: Record<string, unknown>;
76
+ try {
77
+ obj = JSON.parse(trimmed) as Record<string, unknown>;
78
+ } catch {
79
+ continue; // tolerate partial/corrupt lines — logs are append-only
80
+ }
81
+ if (obj['t'] !== 'user' || typeof obj['text'] !== 'string') continue;
82
+ const text = (obj['text'] as string).trim();
83
+ if (text.length < minChars) continue;
84
+ out.push(text);
85
+ }
86
+ return out;
87
+ }
88
+
89
+ /** First `/token` of a prompt that looks like a slash command. */
90
+ export function detect_command(text: string): string | null {
91
+ const m = /^\/([a-z0-9:_-]+)/i.exec(text.trim());
92
+ return m ? `/${(m[1] as string).toLowerCase()}` : null;
93
+ }
94
+
95
+ /** Build the corpus entries: redacted, de-duplicated, capped. */
96
+ export function build_corpus(rawPrompts: string[], limit: number): FieldPrompt[] {
97
+ const seen = new Set<string>();
98
+ const out: FieldPrompt[] = [];
99
+ for (const raw of rawPrompts) {
100
+ const text = redact(raw);
101
+ const key = text.slice(0, 200);
102
+ if (seen.has(key)) continue;
103
+ seen.add(key);
104
+ out.push({
105
+ id: `field-${String(out.length + 1).padStart(3, '0')}`,
106
+ text,
107
+ command: detect_command(text),
108
+ });
109
+ if (out.length >= limit) break;
110
+ }
111
+ return out;
112
+ }
113
+
114
+ function _yamlQuote(s: string): string {
115
+ return JSON.stringify(s); // JSON string is valid YAML double-quoted scalar
116
+ }
117
+
118
+ export function to_yaml(prompts: FieldPrompt[]): string {
119
+ const lines: string[] = [
120
+ '# Field replay corpus — exported by export_replay_corpus.',
121
+ '# PRIVACY: operator review REQUIRED before this file is stored/committed',
122
+ '# (low-impact-corpus privacy floor). Redaction here is a mechanical first',
123
+ '# pass only. Replay caveat: intent triggers are informational-only in',
124
+ '# router_telemetry — replay UNDERCOUNTS intent-triggered rule loads.',
125
+ 'prompts:',
126
+ ];
127
+ for (const p of prompts) {
128
+ lines.push(` - id: ${p.id}`);
129
+ lines.push(` text: ${_yamlQuote(p.text)}`);
130
+ if (p.command) lines.push(` command: ${_yamlQuote(p.command)}`);
131
+ }
132
+ return lines.join('\n') + '\n';
133
+ }
134
+
135
+ export function main(argv: string[]): number {
136
+ const histories: string[] = [];
137
+ let out = DEFAULT_OUT;
138
+ let limit = 200;
139
+ let minChars = 20;
140
+ for (let i = 0; i < argv.length; i += 1) {
141
+ const a = argv[i] as string;
142
+ if (a === '--history') histories.push(String(argv[(i += 1)] ?? ''));
143
+ else if (a === '--out') out = path.resolve(String(argv[(i += 1)] ?? ''));
144
+ else if (a === '--limit') limit = Number(argv[(i += 1)]);
145
+ else if (a === '--min-chars') minChars = Number(argv[(i += 1)]);
146
+ else if (a === '-h' || a === '--help') {
147
+ process.stdout.write(
148
+ 'usage: export_replay_corpus --history <jsonl> [--history ...] [--out FILE] [--limit N] [--min-chars N]\n',
149
+ );
150
+ return 0;
151
+ } else {
152
+ process.stderr.write(`error: unknown argument: ${a}\n`);
153
+ return 1;
154
+ }
155
+ }
156
+ if (histories.length === 0 || !Number.isFinite(limit) || limit <= 0) {
157
+ process.stderr.write('error: at least one --history <path> is required\n');
158
+ return 1;
159
+ }
160
+ const raw: string[] = [];
161
+ for (const h of histories) {
162
+ let text: string;
163
+ try {
164
+ text = fs.readFileSync(h, 'utf-8');
165
+ } catch (e) {
166
+ process.stderr.write(`error: cannot read ${h}: ${(e as Error).message}\n`);
167
+ return 1;
168
+ }
169
+ raw.push(...extract_prompts(text, minChars));
170
+ }
171
+ const corpus = build_corpus(raw, limit);
172
+ fs.mkdirSync(path.dirname(out), { recursive: true });
173
+ fs.writeFileSync(out, to_yaml(corpus), 'utf-8');
174
+ process.stdout.write(
175
+ `wrote ${corpus.length} prompt(s) → ${path.relative(REPO_ROOT, out)}\n` +
176
+ '⚠️ PRIVACY GATE: operator review required before this corpus is stored,\n' +
177
+ ' committed, or used in any report (low-impact-corpus privacy floor).\n',
178
+ );
179
+ return 0;
180
+ }
181
+
182
+ const _IS_MAIN =
183
+ process.argv[1] !== undefined &&
184
+ import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
185
+ if (_IS_MAIN) {
186
+ process.exit(main(process.argv.slice(2)));
187
+ }
@@ -82,14 +82,19 @@
82
82
  "internal/workers/mcp/content.json.gz",
83
83
  "internal/workers/mcp/manifest.json",
84
84
  "src/rules/source-confidentiality.md",
85
- "dist/agent-src/rules/source-confidentiality.md"
85
+ "dist/agent-src/rules/source-confidentiality.md",
86
+ "agents/roadmaps/archive/road-to-final-state-and-market-readiness.md",
87
+ "agents/roadmaps/archive/road-to-image-brand-typography.md",
88
+ "agents/roadmaps/archive/road-to-subagent-value-realization.md",
89
+ "agents/roadmap-assets/road-to-image-brand-typography.assets.md"
86
90
  ],
87
91
  "skip_reason": {
88
92
  "vendored_cluster": "design-intelligence/corpus-grounding/design-tokens/react-shadcn-ui/tailwind-engineer + cost/*.mjs ship vendored Apache/MIT code; their upstream attribution is license-required and must NOT be stripped (ADR-061).",
89
93
  "recommendation_docs": "mcp.md, mcp-registries.md, DISTRIBUTION_CHECKLIST.md, ADR-086, marketing-copy.yml reference registries (Smithery/Glama) as recommendations/distribution targets — allowed.",
90
94
  "generated_bundles": "content.json* bundle the vendored-cluster skill bodies above.",
91
95
  "self": "the linter + its denylist + the source-confidentiality rule necessarily contain the deny tokens as data.",
92
- "validate_safe_paths": "telegraph-derived (MIT) ported code; upstream attribution is license-required."
96
+ "validate_safe_paths": "telegraph-derived (MIT) ported code; upstream attribution is license-required.",
97
+ "archived_roadmaps_newly_tracked": "Archived roadmaps (and their assets) that predate the source-confidentiality sweep became tracked via the 2026-07 agents-dir gitignore hygiene change. They are frozen historical records; the claudekit mentions are ADR-061 license-attribution work and the remaining names are historical planning references. New roadmaps stay subject to the gate."
93
98
  },
94
99
  "_excluded_tokens": {
95
100
  "agent-os": "collides with our own coined 'Agent-OS primitive' term (universal-skills) — too FP-prone to auto-deny; scrub external 'agent-os' mentions by review.",