@event4u/agent-config 7.4.0 → 8.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 (469) hide show
  1. package/.claude-plugin/marketplace.json +11 -1
  2. package/AGENTS.md +9 -9
  3. package/CHANGELOG.md +373 -0
  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/review-changes.md +14 -7
  34. package/dist/agent-src/commands/roadmap/create.md +88 -10
  35. package/dist/agent-src/commands/roadmap/materialize.md +1 -1
  36. package/dist/agent-src/commands/roadmap/process-full.md +15 -2
  37. package/dist/agent-src/commands/roadmap/process-phase.md +18 -6
  38. package/dist/agent-src/commands/roadmap/process-step.md +4 -0
  39. package/dist/agent-src/commands/roadmap.md +1 -1
  40. package/dist/agent-src/commands/security-audit-config.md +1 -1
  41. package/dist/agent-src/commands/sync-agent-settings.md +1 -1
  42. package/dist/agent-src/commands/sync-gitignore/fix.md +42 -6
  43. package/dist/agent-src/commands/team-knowledge/bootstrap.md +106 -0
  44. package/dist/agent-src/commands/team-knowledge/consolidate.md +105 -0
  45. package/dist/agent-src/commands/team-knowledge.md +64 -0
  46. package/dist/agent-src/contexts/authority/commit-mechanics.md +8 -0
  47. package/dist/agent-src/contexts/authority/destructive-mechanics.md +11 -0
  48. package/dist/agent-src/contexts/authority/scope-mechanics.md +25 -0
  49. package/dist/agent-src/contexts/communication/rules-auto/reply-close-mechanics.md +43 -0
  50. package/dist/agent-src/contexts/contracts/agents-md-anatomy.md +1 -1
  51. package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +2 -2
  52. package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -0
  53. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +14 -4
  54. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +11 -0
  55. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +32 -8
  56. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +107 -0
  57. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +71 -15
  58. package/dist/agent-src/contexts/execution/subagent-steering.md +41 -1
  59. package/dist/agent-src/contexts/override-system.md +1 -1
  60. package/dist/agent-src/personas/brand-strategist.md +0 -1
  61. package/dist/agent-src/personas/data-integrity.md +66 -0
  62. package/dist/agent-src/personas/design-director.md +0 -1
  63. package/dist/agent-src/personas/performance-engineer.md +66 -0
  64. package/dist/agent-src/personas/production-validator.md +73 -0
  65. package/dist/agent-src/rules/agent-authority.md +3 -4
  66. package/dist/agent-src/rules/analysis-skill-routing.md +3 -5
  67. package/dist/agent-src/rules/architecture.md +2 -4
  68. package/dist/agent-src/rules/artifact-drafting-protocol.md +35 -6
  69. package/dist/agent-src/rules/artifact-engagement-recording.md +11 -4
  70. package/dist/agent-src/rules/ask-when-uncertain.md +10 -14
  71. package/dist/agent-src/rules/augment-edit-discipline.md +3 -5
  72. package/dist/agent-src/rules/autonomous-execution.md +3 -5
  73. package/dist/agent-src/rules/brand-consistency.md +3 -5
  74. package/dist/agent-src/rules/brand-source-of-truth.md +3 -5
  75. package/dist/agent-src/rules/cli-output-handling.md +4 -6
  76. package/dist/agent-src/rules/command-suggestion-policy.md +3 -5
  77. package/dist/agent-src/rules/commit-conventions.md +3 -5
  78. package/dist/agent-src/rules/commit-policy.md +8 -10
  79. package/dist/agent-src/rules/content-quoting-floor.md +88 -0
  80. package/dist/agent-src/rules/context-hygiene.md +3 -5
  81. package/dist/agent-src/rules/copilot-routing.md +4 -6
  82. package/dist/agent-src/rules/decision-revisit-gate.md +120 -0
  83. package/dist/agent-src/rules/delegation-policy.md +10 -6
  84. package/dist/agent-src/rules/design-fidelity.md +3 -5
  85. package/dist/agent-src/rules/devcontainer-routing.md +4 -6
  86. package/dist/agent-src/rules/direct-answers.md +13 -17
  87. package/dist/agent-src/rules/docker-commands.md +3 -5
  88. package/dist/agent-src/rules/domain-adoption-policy.md +3 -5
  89. package/dist/agent-src/rules/domain-safety-disclaimer.md +3 -5
  90. package/dist/agent-src/rules/domain-safety-pii.md +7 -8
  91. package/dist/agent-src/rules/domain-safety-retention.md +3 -5
  92. package/dist/agent-src/rules/downstream-changes.md +3 -4
  93. package/dist/agent-src/rules/engineering-safety-floor.md +3 -5
  94. package/dist/agent-src/rules/external-reference-deep-dive.md +3 -5
  95. package/dist/agent-src/rules/fast-path-marker-visibility.md +3 -5
  96. package/dist/agent-src/rules/finance-safety-floor.md +3 -6
  97. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +3 -5
  98. package/dist/agent-src/rules/git-history-discipline.md +3 -5
  99. package/dist/agent-src/rules/guidelines.md +2 -4
  100. package/dist/agent-src/rules/icon-consistency.md +4 -5
  101. package/dist/agent-src/rules/image-likeness-and-rights.md +3 -5
  102. package/dist/agent-src/rules/improve-before-implement.md +5 -5
  103. package/dist/agent-src/rules/invite-challenge.md +3 -5
  104. package/dist/agent-src/rules/language-and-tone.md +13 -15
  105. package/dist/agent-src/rules/laravel-routing.md +3 -5
  106. package/dist/agent-src/rules/laravel-translations.md +3 -5
  107. package/dist/agent-src/rules/legal-safety-floor.md +5 -7
  108. package/dist/agent-src/rules/lethal-trifecta-guard.md +3 -5
  109. package/dist/agent-src/rules/linked-projects-onboarding-gate.md +4 -7
  110. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +3 -5
  111. package/dist/agent-src/rules/markdown-safe-codeblocks.md +2 -4
  112. package/dist/agent-src/rules/media-governance-routing.md +3 -5
  113. package/dist/agent-src/rules/media-sync-ground-truth.md +3 -5
  114. package/dist/agent-src/rules/minimal-safe-diff.md +5 -5
  115. package/dist/agent-src/rules/missing-tool-handling.md +3 -5
  116. package/dist/agent-src/rules/model-recommendation.md +4 -6
  117. package/dist/agent-src/rules/no-attribution-footers.md +3 -5
  118. package/dist/agent-src/rules/no-cheap-questions.md +5 -8
  119. package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +3 -6
  120. package/dist/agent-src/rules/no-pr-progress-comments.md +3 -6
  121. package/dist/agent-src/rules/no-roadmap-references.md +3 -5
  122. package/dist/agent-src/rules/non-destructive-by-default.md +11 -13
  123. package/dist/agent-src/rules/notes-first-reasoning.md +3 -5
  124. package/dist/agent-src/rules/onboarding-gate.md +4 -6
  125. package/dist/agent-src/rules/output-discipline.md +3 -5
  126. package/dist/agent-src/rules/package-ci-checks.md +3 -5
  127. package/dist/agent-src/rules/persona-governance.md +2 -4
  128. package/dist/agent-src/rules/php-coding.md +3 -5
  129. package/dist/agent-src/rules/preservation-guard.md +2 -4
  130. package/dist/agent-src/rules/provider-lifecycle-discipline.md +3 -5
  131. package/dist/agent-src/rules/reviewer-awareness.md +5 -6
  132. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +3 -5
  133. package/dist/agent-src/rules/roadmap-progress-sync.md +5 -5
  134. package/dist/agent-src/rules/role-mode-adherence.md +2 -4
  135. package/dist/agent-src/rules/rule-type-governance.md +3 -5
  136. package/dist/agent-src/rules/runtime-safety.md +2 -4
  137. package/dist/agent-src/rules/scope-control.md +10 -11
  138. package/dist/agent-src/rules/security-sensitive-stop.md +4 -5
  139. package/dist/agent-src/rules/size-enforcement.md +2 -4
  140. package/dist/agent-src/rules/skill-improvement-trigger.md +3 -5
  141. package/dist/agent-src/rules/skill-quality.md +3 -5
  142. package/dist/agent-src/rules/slash-command-routing-policy.md +3 -5
  143. package/dist/agent-src/rules/source-confidentiality.md +3 -5
  144. package/dist/agent-src/rules/source-discovery-gate.md +3 -5
  145. package/dist/agent-src/rules/source-of-truth.md +3 -5
  146. package/dist/agent-src/rules/strategy-safety-floor.md +3 -5
  147. package/dist/agent-src/rules/symfony-routing.md +4 -6
  148. package/dist/agent-src/rules/telegraph-speak.md +4 -5
  149. package/dist/agent-src/rules/think-before-action.md +7 -4
  150. package/dist/agent-src/rules/token-budget-discipline.md +29 -5
  151. package/dist/agent-src/rules/token-efficiency.md +3 -5
  152. package/dist/agent-src/rules/token-optimizer-maintenance.md +3 -5
  153. package/dist/agent-src/rules/tool-safety.md +2 -4
  154. package/dist/agent-src/rules/ui-audit-gate.md +3 -6
  155. package/dist/agent-src/rules/untrusted-input-defense.md +11 -10
  156. package/dist/agent-src/rules/upstream-proposal.md +4 -6
  157. package/dist/agent-src/rules/user-interaction.md +7 -5
  158. package/dist/agent-src/rules/user-interrupt-priority.md +17 -8
  159. package/dist/agent-src/rules/verify-before-complete.md +12 -22
  160. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +3 -3
  161. package/dist/agent-src/scripts/update_roadmap_progress.ts +197 -7
  162. package/dist/agent-src/skills/adr-create/SKILL.md +52 -42
  163. package/dist/agent-src/skills/adversarial-review/SKILL.md +1 -1
  164. package/dist/agent-src/skills/agent-docs-writing/SKILL.md +18 -0
  165. package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
  166. package/dist/agent-src/skills/ai-council/SKILL.md +14 -1
  167. package/dist/agent-src/skills/blade-ui/SKILL.md +4 -0
  168. package/dist/agent-src/skills/blameless-post-mortem/SKILL.md +0 -3
  169. package/dist/agent-src/skills/brand/SKILL.md +1 -1
  170. package/dist/agent-src/skills/brand-identity/SKILL.md +3 -3
  171. package/dist/agent-src/skills/brand-strategy/SKILL.md +1 -1
  172. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +5 -4
  173. package/dist/agent-src/skills/canvas-design/SKILL.md +6 -0
  174. package/dist/agent-src/skills/check-refs/SKILL.md +7 -4
  175. package/dist/agent-src/skills/code-review/SKILL.md +5 -0
  176. package/dist/agent-src/skills/complexity-first-planning/SKILL.md +6 -5
  177. package/dist/agent-src/skills/condense-memory/SKILL.md +11 -11
  178. package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
  179. package/dist/agent-src/skills/context-document/SKILL.md +17 -0
  180. package/dist/agent-src/skills/corpus-grounding/SKILL.md +3 -3
  181. package/dist/agent-src/skills/decision-record/SKILL.md +6 -0
  182. package/dist/agent-src/skills/decision-review/SKILL.md +5 -3
  183. package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +6 -1
  184. package/dist/agent-src/skills/design-intelligence/SKILL.md +45 -2
  185. package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
  186. package/dist/agent-src/skills/design-review/SKILL.md +23 -11
  187. package/dist/agent-src/skills/design-system-capture/SKILL.md +41 -0
  188. package/dist/agent-src/skills/design-system-capture/reference/design-system-json.md +62 -0
  189. package/dist/agent-src/skills/design-tokens/SKILL.md +11 -4
  190. package/dist/agent-src/skills/design-variations/SKILL.md +127 -0
  191. package/dist/agent-src/skills/design-variations/evals/triggers.json +17 -0
  192. package/dist/agent-src/skills/emit-tickets/SKILL.md +4 -4
  193. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +6 -0
  194. package/dist/agent-src/skills/fe-design/SKILL.md +20 -0
  195. package/dist/agent-src/skills/flux/SKILL.md +4 -0
  196. package/dist/agent-src/skills/html-deck/SKILL.md +123 -0
  197. package/dist/agent-src/skills/html-deck/evals/triggers.json +17 -0
  198. package/dist/agent-src/skills/html-deck/templates/deck-shell.html +77 -0
  199. package/dist/agent-src/skills/iconography/SKILL.md +1 -0
  200. package/dist/agent-src/skills/image-editing/evals/triggers.json +13 -13
  201. package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +136 -0
  202. package/dist/agent-src/skills/judge-artifact-completeness/calibration/fixtures.json +149 -0
  203. package/dist/agent-src/skills/judge-artifact-completeness/evals/triggers.json +17 -0
  204. package/dist/agent-src/skills/judge-artifact-completeness/rubrics/architecture-score.json +73 -0
  205. package/dist/agent-src/skills/judge-artifact-completeness/rubrics/pr-review-score.json +65 -0
  206. package/dist/agent-src/skills/judge-artifact-completeness/rubrics/roadmap-score.json +73 -0
  207. package/dist/agent-src/skills/judge-artifact-completeness/rubrics/ticket-quality-score.json +73 -0
  208. package/dist/agent-src/skills/judge-code-quality/SKILL.md +1 -0
  209. package/dist/agent-src/skills/judge-injection-defense/SKILL.md +99 -0
  210. package/dist/agent-src/skills/judge-injection-defense/calibration/fixtures.json +24 -0
  211. package/dist/agent-src/skills/judge-injection-defense/evals/triggers.json +17 -0
  212. package/dist/agent-src/skills/judge-injection-defense/fixtures/behavioral-fixtures.json +63 -0
  213. package/dist/agent-src/skills/judge-injection-defense/fixtures/coverage-report.md +53 -0
  214. package/dist/agent-src/skills/judge-injection-defense/fixtures/perturbation-taxonomy.json +110 -0
  215. package/dist/agent-src/skills/judge-synthesis/SKILL.md +134 -0
  216. package/dist/agent-src/skills/judge-synthesis/evals/triggers.json +17 -0
  217. package/dist/agent-src/skills/laravel/SKILL.md +0 -1
  218. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +46 -0
  219. package/dist/agent-src/skills/lint-skills/SKILL.md +6 -6
  220. package/dist/agent-src/skills/logo-generation/SKILL.md +1 -1
  221. package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
  222. package/dist/agent-src/skills/md-language-check/SKILL.md +3 -3
  223. package/dist/agent-src/skills/memory-consolidation/SKILL.md +66 -1
  224. package/dist/agent-src/skills/migration-architect/SKILL.md +1 -0
  225. package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +2 -2
  226. package/dist/agent-src/skills/performance-analysis/SKILL.md +2 -0
  227. package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +4 -4
  228. package/dist/agent-src/skills/premortem/SKILL.md +0 -3
  229. package/dist/agent-src/skills/project-analysis-core/SKILL.md +16 -0
  230. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +18 -0
  231. package/dist/agent-src/skills/react-shadcn-ui/reference/registry.md +59 -0
  232. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +3 -1
  233. package/dist/agent-src/skills/refine-ticket/SKILL.md +5 -1
  234. package/dist/agent-src/skills/release-comms/SKILL.md +47 -46
  235. package/dist/agent-src/skills/roadmap-management/SKILL.md +25 -0
  236. package/dist/agent-src/skills/roadmap-writing/SKILL.md +33 -3
  237. package/dist/agent-src/skills/root-cause-frameworks/SKILL.md +0 -3
  238. package/dist/agent-src/skills/script-writing/SKILL.md +1 -1
  239. package/dist/agent-src/skills/security-audit/SKILL.md +1 -0
  240. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +4 -0
  241. package/dist/agent-src/skills/source-discovery/SKILL.md +22 -3
  242. package/dist/agent-src/skills/sql-writing/SKILL.md +1 -1
  243. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +33 -14
  244. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +11 -0
  245. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-steps.md +8 -0
  246. package/dist/agent-src/skills/systematic-debugging/SKILL.md +30 -1
  247. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +4 -0
  248. package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
  249. package/dist/agent-src/skills/threat-modeling/SKILL.md +2 -2
  250. package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
  251. package/dist/agent-src/skills/typography-system/SKILL.md +4 -3
  252. package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -0
  253. package/dist/agent-src/skills/wireframe/SKILL.md +118 -0
  254. package/dist/agent-src/skills/wireframe/evals/triggers.json +17 -0
  255. package/dist/agent-src/templates/agent-settings.md +22 -1
  256. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  257. package/dist/agent-src/templates/command.md +2 -2
  258. package/dist/agent-src/templates/contexts/knowledge-pages.md +116 -0
  259. package/dist/agent-src/templates/hooks/pre-commit-frontmatter +1 -1
  260. package/dist/agent-src/templates/roadmaps.md +70 -2
  261. package/dist/agent-src/templates/rule.md +1 -1
  262. package/dist/agent-src/templates/scripts/README.md +3 -3
  263. package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +109 -0
  264. package/dist/agent-src/templates/tickets.md +8 -8
  265. package/dist/cli/commands/recordTriggerEval.test.js +1 -1
  266. package/dist/cli/commands/recordTriggerEval.test.js.map +1 -1
  267. package/dist/cli/initRouting.js +4 -2
  268. package/dist/cli/initRouting.js.map +1 -1
  269. package/dist/cli/registry.js +1 -0
  270. package/dist/cli/registry.js.map +1 -1
  271. package/dist/discovery/deprecation-report.md +1 -1
  272. package/dist/discovery/discovery-manifest.json +802 -258
  273. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  274. package/dist/discovery/discovery-manifest.summary.md +8 -8
  275. package/dist/discovery/orphan-report.md +1 -1
  276. package/dist/discovery/packs.json +46 -28
  277. package/dist/discovery/trust-report.md +12 -11
  278. package/dist/discovery/workspaces.json +32 -18
  279. package/dist/install/preflight.js +173 -0
  280. package/dist/install/preflight.js.map +1 -0
  281. package/dist/mcp/registry-manifest.json +4 -4
  282. package/dist/router.json +1 -1
  283. package/dist/server/routes/settings.js +4 -0
  284. package/dist/server/routes/settings.js.map +1 -1
  285. package/dist/server/schemas/settings.js +6 -1
  286. package/dist/server/schemas/settings.js.map +1 -1
  287. package/docs/CLAIMS.md +108 -0
  288. package/docs/MIGRATION.md +3 -3
  289. package/docs/architecture.md +6 -6
  290. package/docs/benchmark.md +133 -2
  291. package/docs/benchmark.pinned.yml +31 -0
  292. package/docs/capability-matrix.md +1 -0
  293. package/docs/catalog.md +92 -74
  294. package/docs/command-flows.md +16 -4
  295. package/docs/comparison.yaml +35 -0
  296. package/docs/contracts/agents-layout.md +148 -0
  297. package/docs/contracts/brand-token-consumption.md +5 -0
  298. package/docs/contracts/capability-boundary.md +5 -0
  299. package/docs/contracts/command-category-governance.md +5 -0
  300. package/docs/contracts/command-clusters.md +1 -0
  301. package/docs/contracts/command-surface-tiers.md +1 -1
  302. package/docs/contracts/conformance.md +84 -0
  303. package/docs/contracts/creative-pack-boundary.md +5 -0
  304. package/docs/contracts/discovery-manifest.schema.json +5 -4
  305. package/docs/contracts/file-ownership-matrix.json +4605 -985
  306. package/docs/contracts/governance-enforcement-projection.md +5 -0
  307. package/docs/contracts/gui-wizard.md +1 -1
  308. package/docs/contracts/hook-architecture-v1.md +2 -2
  309. package/docs/contracts/implement-ticket-flow.md +1 -1
  310. package/docs/contracts/kernel-membership.md +13 -0
  311. package/docs/contracts/mcp-tool-inventory.md +23 -23
  312. package/docs/contracts/no-runtime-boundary.md +6 -1
  313. package/docs/contracts/review-lens-schema.md +5 -0
  314. package/docs/contracts/rule-router.md +102 -8
  315. package/docs/contracts/skill-bundled-assets.md +1 -1
  316. package/docs/contracts/skill-dry-run.md +1 -1
  317. package/docs/contracts/subagent-boundary.md +5 -0
  318. package/docs/contracts/ticket-bundle-format.md +9 -4
  319. package/docs/contracts/tier-3-contrib-plugin.md +2 -2
  320. package/docs/contracts/write-engine.md +3 -0
  321. package/docs/customization.md +87 -15
  322. package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +1 -1
  323. package/docs/decisions/ADR-109-subagent-v1-contract.md +246 -0
  324. package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +105 -0
  325. package/docs/decisions/INDEX.md +2 -0
  326. package/docs/distribution/awesome-list-submission.md +46 -0
  327. package/docs/distribution/launch-story-draft.md +58 -0
  328. package/docs/end-to-end-walkthroughs.md +2 -2
  329. package/docs/getting-started.md +2 -2
  330. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +24 -0
  331. package/docs/guidelines/agent-infra/corpus-grounding-authoring.md +1 -1
  332. package/docs/guidelines/agent-infra/linked-projects-onboarding-gate.md +2 -2
  333. package/docs/guidelines/agent-infra/missing-tool-handling.md +3 -3
  334. package/docs/guidelines/agent-infra/verify-before-complete-demos.md +2 -2
  335. package/docs/guidelines/augment-portability-patterns.md +1 -1
  336. package/docs/guidelines/code-clarity.md +19 -0
  337. package/docs/guidelines/design-antipatterns-triggers.json +2 -1
  338. package/docs/guidelines/design-antipatterns.md +35 -0
  339. package/docs/guidelines/design-canon.md +62 -0
  340. package/docs/guidelines/design-modes.md +6 -0
  341. package/docs/guidelines/php/general.md +9 -1
  342. package/docs/guidelines/php/php-coding-patterns.md +7 -0
  343. package/docs/guides/cross-repo-retrieval.md +1 -1
  344. package/docs/guides/frontend-design-corpus-refresh.md +2 -2
  345. package/docs/guides/local-analytics.md +4 -4
  346. package/docs/guides/skill-discovery.md +1 -1
  347. package/docs/guides/skill-preview.md +1 -1
  348. package/docs/hook-payload-capture.md +6 -6
  349. package/docs/install-friction-report.md +66 -0
  350. package/docs/installation.md +1 -1
  351. package/docs/maintainers/optional-media-deps.md +50 -0
  352. package/docs/mcp-server.md +11 -12
  353. package/docs/media/proof-demo.cast +14 -0
  354. package/docs/media/proof-demo.gif +0 -0
  355. package/docs/migration/consumer-template-consumption-model.md +1 -1
  356. package/docs/migration/divergences/bench-stats-float-precision.md +1 -1
  357. package/docs/migration/node-floor.md +1 -1
  358. package/docs/migration/yaml-roundtrip-spike.md +1 -1
  359. package/docs/personas.md +16 -5
  360. package/docs/positioning-evidence.md +86 -0
  361. package/docs/proof.md +86 -0
  362. package/docs/skills-catalog.md +1 -1
  363. package/docs/troubleshooting.md +8 -8
  364. package/docs/wedge/production-validator/README.md +57 -0
  365. package/docs/wedge/production-validator/production-validator.md +56 -0
  366. package/docs/wizard.md +2 -2
  367. package/package.json +1 -1
  368. package/src/config/agent-settings.template.yml +71 -4
  369. package/src/config/agents-paths.yml +254 -0
  370. package/src/config/budgets.yml +16 -0
  371. package/src/config/discovery/packs.yml +1 -0
  372. package/src/config/discovery/unassigned-artefacts.yml +2 -0
  373. package/src/config/gitignore-block.txt +25 -0
  374. package/src/config/host-capabilities.yml +31 -0
  375. package/src/config/profiles/balanced.ini +4 -0
  376. package/src/config/profiles/full.ini +4 -0
  377. package/src/config/profiles/minimal.ini +4 -0
  378. package/src/scripts/_cli/cmd_conformance.ts +716 -0
  379. package/src/scripts/_cli/cmd_doctor.ts +23 -2
  380. package/src/scripts/_cli/cmd_fleet.ts +401 -0
  381. package/src/scripts/_cli/cmd_preflight.ts +159 -0
  382. package/src/scripts/_dispatch.bash +10 -0
  383. package/src/scripts/_lib/knowledge_events.ts +193 -0
  384. package/src/scripts/_lib/subagent_steering.ts +115 -3
  385. package/src/scripts/_lib/text_similarity.ts +75 -0
  386. package/src/scripts/ai-video/test-pipeline.sh +1 -1
  387. package/src/scripts/ai_council/clients.ts +19 -3
  388. package/src/scripts/append_contested.ts +112 -0
  389. package/src/scripts/audit_auto_rules.ts +11 -1
  390. package/src/scripts/audit_mcp_tools.ts +25 -11
  391. package/src/scripts/bench_ab_v2_run.ts +527 -40
  392. package/src/scripts/bench_ab_v2_stats.ts +6 -0
  393. package/src/scripts/bench_matrix.ts +266 -0
  394. package/src/scripts/bootstrap_knowledge.ts +267 -0
  395. package/src/scripts/build_discovery_manifest.ts +42 -2
  396. package/src/scripts/build_proof.ts +214 -0
  397. package/src/scripts/check_always_budget.ts +3 -0
  398. package/src/scripts/check_augment_description_cap.ts +2 -2
  399. package/src/scripts/check_claims.ts +270 -0
  400. package/src/scripts/check_comparison.ts +79 -0
  401. package/src/scripts/check_generated_artefact_headers.ts +109 -0
  402. package/src/scripts/check_generator_output_coverage.ts +142 -0
  403. package/src/scripts/check_gitignore_freshness.ts +127 -0
  404. package/src/scripts/check_knowledge_pages.ts +210 -0
  405. package/src/scripts/check_knowledge_sharing.ts +162 -0
  406. package/src/scripts/check_media_deps.ts +91 -0
  407. package/src/scripts/check_memory_contradiction.ts +280 -0
  408. package/src/scripts/check_memory_similarity.ts +134 -0
  409. package/src/scripts/check_quality_regression.ts +56 -10
  410. package/src/scripts/check_references.ts +3 -1
  411. package/src/scripts/check_release_pr_shape.ts +4 -0
  412. package/src/scripts/check_site_links.ts +135 -0
  413. package/src/scripts/check_skill_gaps.ts +99 -0
  414. package/src/scripts/check_token_quality_golden.ts +197 -11
  415. package/src/scripts/check_tracked_but_ignored.ts +67 -0
  416. package/src/scripts/cluster_near_miss_patterns.ts +0 -0
  417. package/src/scripts/compile_router.ts +30 -3
  418. package/src/scripts/condense.ts +350 -14
  419. package/src/scripts/consolidate_knowledge_events.ts +192 -0
  420. package/src/scripts/degrade_to_pointer.ts +136 -0
  421. package/src/scripts/design_slop_rules.test.ts +208 -0
  422. package/src/scripts/design_slop_rules.ts +530 -0
  423. package/src/scripts/emit_knowledge_event.ts +158 -0
  424. package/src/scripts/export_replay_corpus.ts +187 -0
  425. package/src/scripts/external_sources_denylist.json +14 -3
  426. package/src/scripts/fold_intake.ts +281 -0
  427. package/src/scripts/generate_capability_matrix.ts +9 -1
  428. package/src/scripts/generate_knowledge_index.ts +222 -0
  429. package/src/scripts/hook_manifest.yaml +40 -17
  430. package/src/scripts/hooks/design_slop_hook.ts +181 -0
  431. package/src/scripts/hooks/dispatch_hook.ts +18 -0
  432. package/src/scripts/hot_context_hook.ts +372 -0
  433. package/src/scripts/install +47 -0
  434. package/src/scripts/install-hooks.sh +17 -0
  435. package/src/scripts/inventory_meta_layers.ts +11 -0
  436. package/src/scripts/janitor.ts +258 -0
  437. package/src/scripts/lint_agent_security.ts +1 -0
  438. package/src/scripts/lint_agents_layout.ts +74 -15
  439. package/src/scripts/lint_bench_ab.ts +4 -1
  440. package/src/scripts/lint_confusables.ts +197 -0
  441. package/src/scripts/lint_design_slop.ts +245 -0
  442. package/src/scripts/lint_featured_skills.ts +0 -0
  443. package/src/scripts/lint_framework_leakage_allowlist.json +26 -3
  444. package/src/scripts/lint_knowledge_scale.ts +250 -0
  445. package/src/scripts/lint_legal_pack.ts +67 -0
  446. package/src/scripts/lint_persona_governance.ts +8 -3
  447. package/src/scripts/lint_regression.ts +15 -0
  448. package/src/scripts/lint_roadmap_blockers.ts +202 -0
  449. package/src/scripts/lint_roadmap_complexity.ts +81 -2
  450. package/src/scripts/lint_subagent_determinism.ts +125 -0
  451. package/src/scripts/measure_augment_budget.ts +46 -6
  452. package/src/scripts/measure_patterns.ts +4 -3
  453. package/src/scripts/measure_skill_reduction.ts +6 -6
  454. package/src/scripts/migration_status.ts +6 -2
  455. package/src/scripts/mine_missing_guardrails.ts +189 -0
  456. package/src/scripts/parity/phase_gate.ts +1 -1
  457. package/src/scripts/parity/replay.ts +21 -0
  458. package/src/scripts/project_thin_rules.ts +120 -16
  459. package/src/scripts/release.ts +39 -1
  460. package/src/scripts/render_benchmark_composite.ts +378 -0
  461. package/src/scripts/roadmap_progress_hook.ts +101 -43
  462. package/src/scripts/schemas/skill.schema.json +27 -0
  463. package/src/scripts/schemas/subagent.schema.json +106 -0
  464. package/src/scripts/skill_linter.ts +1 -0
  465. package/src/scripts/smoke/kernel.sh +5 -4
  466. package/src/scripts/surface-tiers.yml +1 -0
  467. package/src/scripts/sync_gitignore.ts +4 -0
  468. package/src/scripts/update_skill_candidates.ts +172 -0
  469. package/src/scripts/validate_frontmatter.ts +1 -0
@@ -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
+ }
@@ -48,7 +48,13 @@
48
48
  "agency-agents",
49
49
  "msitarzewski",
50
50
  "610ClaudeSubagents",
51
- "ChrisRoyse"
51
+ "ChrisRoyse",
52
+ "pbakaus",
53
+ "leonxlnx",
54
+ "gztchan",
55
+ "amaancoderx",
56
+ "npxskillui",
57
+ "\\bskillui\\b"
52
58
  ],
53
59
  "skip_paths": [
54
60
  "src/scripts/check_no_external_sources.py",
@@ -76,14 +82,19 @@
76
82
  "internal/workers/mcp/content.json.gz",
77
83
  "internal/workers/mcp/manifest.json",
78
84
  "src/rules/source-confidentiality.md",
79
- "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"
80
90
  ],
81
91
  "skip_reason": {
82
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).",
83
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.",
84
94
  "generated_bundles": "content.json* bundle the vendored-cluster skill bodies above.",
85
95
  "self": "the linter + its denylist + the source-confidentiality rule necessarily contain the deny tokens as data.",
86
- "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."
87
98
  },
88
99
  "_excluded_tokens": {
89
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.",
@@ -0,0 +1,281 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Idempotent extractive fold rollup over the gitignored intake JSONL —
4
+ * road-to-second-brain Phase 3 (council 2026-07-07, verdict:
5
+ * `agents/settings/contexts/second-brain-delta-verdict.md`).
6
+ *
7
+ * Deterministic compression for the linearly-growing intake stream:
8
+ * - **2^k batching** — consecutive, non-overlapping batches of
9
+ * `--batch-size` events (default 32; must be a power of two) in stable
10
+ * file+line order. Only COMPLETE batches fold; the tail stays live.
11
+ * - **Deterministic fold IDs** — sha256 over the batch's raw JSONL lines,
12
+ * first 12 hex chars. Same input → same ID, always.
13
+ * - **Children never mutated** — the intake files are read-only to this
14
+ * script; a fold is an ADDITIVE archive page with link-backs
15
+ * (`<file>:<first-line>-<last-line>` per child range), never a rewrite.
16
+ * - **Idempotent** — an existing `fold-<id>.md` is skipped, so re-runs are
17
+ * no-ops and interrupted runs resume cleanly.
18
+ *
19
+ * MANUAL TRIGGER ONLY (council decision): this script is deliberately NOT
20
+ * wired into hooks or CI. The Phase-0 intake tripwire
21
+ * (`lint_knowledge_scale.ts`, intake > 2000 events) names this script as its
22
+ * pre-decided activation path — when it fires, wire the script into the
23
+ * post-session/CI cadence. Tracked files (`agents/knowledge/sessions/`) are
24
+ * NEVER fold-compressed here; that path requires the consolidate gate.
25
+ *
26
+ * Usage:
27
+ * fold_intake.ts [--intake-dir agents/knowledge/intake]
28
+ * [--out-dir agents/memory/archive]
29
+ * [--batch-size 32] [--dry-run] [--format text|json]
30
+ *
31
+ * Exit codes: 0 = ok (including nothing-to-fold), 2 = usage error,
32
+ * 3 = internal error.
33
+ */
34
+ import { createHash } from 'node:crypto';
35
+ import * as fs from 'node:fs';
36
+ import * as path from 'node:path';
37
+ import process from 'node:process';
38
+ import { fileURLToPath } from 'node:url';
39
+
40
+ const PROG = 'fold_intake.ts';
41
+
42
+ export const DEFAULT_BATCH_SIZE = 32;
43
+ const DEFAULT_INTAKE_DIR = path.join('agents', 'knowledge', 'intake');
44
+ const DEFAULT_OUT_DIR = path.join('agents', 'memory', 'archive');
45
+ const SNIPPET_CHARS = 140;
46
+
47
+ export interface IntakeLine {
48
+ file: string; // relative or absolute path as discovered
49
+ line: number; // 1-based line number within the file
50
+ raw: string; // raw JSONL line (trimmed)
51
+ }
52
+
53
+ export interface FoldPlan {
54
+ id: string;
55
+ index: number; // 0-based batch index in the stable order
56
+ children: IntakeLine[];
57
+ }
58
+
59
+ function listIntakeFiles(dir: string): string[] {
60
+ let names: string[];
61
+ try {
62
+ names = fs.readdirSync(dir);
63
+ } catch {
64
+ return [];
65
+ }
66
+ return names
67
+ .filter((n) => n.startsWith('events-') && n.endsWith('.jsonl'))
68
+ .sort()
69
+ .map((n) => path.join(dir, n));
70
+ }
71
+
72
+ /** Stable event order: sorted(files) then line order. Children read-only. */
73
+ export function readIntakeLines(dir: string): IntakeLine[] {
74
+ const out: IntakeLine[] = [];
75
+ for (const file of listIntakeFiles(dir)) {
76
+ let text: string;
77
+ try {
78
+ text = fs.readFileSync(file, 'utf-8');
79
+ } catch {
80
+ continue;
81
+ }
82
+ const lines = text.split('\n');
83
+ for (let i = 0; i < lines.length; i++) {
84
+ const raw = (lines[i] ?? '').trim();
85
+ if (!raw) continue;
86
+ out.push({ file, line: i + 1, raw });
87
+ }
88
+ }
89
+ return out;
90
+ }
91
+
92
+ export function foldId(children: IntakeLine[]): string {
93
+ const h = createHash('sha256');
94
+ for (const c of children) {
95
+ h.update(c.raw);
96
+ h.update('\n');
97
+ }
98
+ return h.digest('hex').slice(0, 12);
99
+ }
100
+
101
+ /** Consecutive complete batches of `batchSize`; the tail stays unfolded. */
102
+ export function planFolds(lines: IntakeLine[], batchSize: number): FoldPlan[] {
103
+ const plans: FoldPlan[] = [];
104
+ const complete = Math.floor(lines.length / batchSize);
105
+ for (let b = 0; b < complete; b++) {
106
+ const children = lines.slice(b * batchSize, (b + 1) * batchSize);
107
+ plans.push({ id: foldId(children), index: b, children });
108
+ }
109
+ return plans;
110
+ }
111
+
112
+ function snippet(raw: string): string {
113
+ let parsed: unknown;
114
+ try {
115
+ parsed = JSON.parse(raw);
116
+ } catch {
117
+ return raw.slice(0, SNIPPET_CHARS);
118
+ }
119
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
120
+ return raw.slice(0, SNIPPET_CHARS);
121
+ }
122
+ const e = parsed as Record<string, unknown>;
123
+ const ts = typeof e.ts === 'string' ? e.ts : '';
124
+ const type = typeof e.type === 'string' ? e.type : 'event';
125
+ // First string field that carries the claim, by event-type precedence.
126
+ const claim =
127
+ [e.pattern, e.correction, e.endpoint, e.observation, e.body, e.text].find(
128
+ (v): v is string => typeof v === 'string' && v.trim().length > 0,
129
+ ) ?? '';
130
+ const oneLine = claim.replace(/\s+/g, ' ').trim();
131
+ const clipped = oneLine.length > SNIPPET_CHARS ? oneLine.slice(0, SNIPPET_CHARS - 1) + '…' : oneLine;
132
+ return [ts, type, clipped].filter(Boolean).join(' · ');
133
+ }
134
+
135
+ /** Contiguous per-file line ranges for the link-back section. */
136
+ export function childRanges(children: IntakeLine[]): string[] {
137
+ const ranges: string[] = [];
138
+ let start: IntakeLine | null = null;
139
+ let prev: IntakeLine | null = null;
140
+ const flush = (): void => {
141
+ if (start && prev) {
142
+ ranges.push(
143
+ start.line === prev.line
144
+ ? `${start.file}:${start.line}`
145
+ : `${start.file}:${start.line}-${prev.line}`,
146
+ );
147
+ }
148
+ };
149
+ for (const c of children) {
150
+ if (prev && c.file === prev.file && c.line === prev.line + 1) {
151
+ prev = c;
152
+ continue;
153
+ }
154
+ flush();
155
+ start = c;
156
+ prev = c;
157
+ }
158
+ flush();
159
+ return ranges;
160
+ }
161
+
162
+ export function renderFold(plan: FoldPlan, batchSize: number): string {
163
+ const lines: string[] = [
164
+ `# Fold ${plan.id}`,
165
+ '',
166
+ '> Idempotent extractive rollup of a completed intake batch',
167
+ `> (batch ${plan.index}, size ${batchSize}). Children are never mutated —`,
168
+ '> this page is an additive archive with link-backs, not a rewrite.',
169
+ '> Generated by `src/scripts/fold_intake.ts` (deterministic, no LLM).',
170
+ '',
171
+ `Fold ID: ${plan.id}`,
172
+ `Batch index: ${plan.index}`,
173
+ `Events: ${plan.children.length}`,
174
+ '',
175
+ '## Extract',
176
+ '',
177
+ ];
178
+ for (const c of plan.children) {
179
+ lines.push(`- ${snippet(c.raw)}`);
180
+ }
181
+ lines.push('', '## Children (link-backs)', '');
182
+ for (const r of childRanges(plan.children)) {
183
+ lines.push(`- ${r}`);
184
+ }
185
+ lines.push('');
186
+ return lines.join('\n');
187
+ }
188
+
189
+ function main(argv: string[]): number {
190
+ let intakeDir = DEFAULT_INTAKE_DIR;
191
+ let outDir = DEFAULT_OUT_DIR;
192
+ let batchSize = DEFAULT_BATCH_SIZE;
193
+ let dryRun = false;
194
+ let format = 'text';
195
+
196
+ for (let i = 0; i < argv.length; i++) {
197
+ const a = argv[i];
198
+ const next = (): string => {
199
+ const v = argv[++i];
200
+ if (v === undefined) {
201
+ process.stderr.write(`${PROG}: error: ${a} requires a value\n`);
202
+ process.exit(2);
203
+ }
204
+ return v;
205
+ };
206
+ if (a === '--intake-dir') intakeDir = next();
207
+ else if (a === '--out-dir') outDir = next();
208
+ else if (a === '--batch-size') {
209
+ batchSize = Number(next());
210
+ if (!Number.isInteger(batchSize) || batchSize < 2 || (batchSize & (batchSize - 1)) !== 0) {
211
+ process.stderr.write(`${PROG}: error: --batch-size must be a power of two >= 2\n`);
212
+ return 2;
213
+ }
214
+ } else if (a === '--dry-run') dryRun = true;
215
+ else if (a === '--format') {
216
+ format = next();
217
+ if (format !== 'text' && format !== 'json') {
218
+ process.stderr.write(`${PROG}: error: --format must be text|json\n`);
219
+ return 2;
220
+ }
221
+ } else if (a === '-h' || a === '--help') {
222
+ process.stdout.write(
223
+ `usage: ${PROG} [--intake-dir <dir>] [--out-dir <dir>] ` +
224
+ `[--batch-size <2^k>] [--dry-run] [--format text|json]\n`,
225
+ );
226
+ return 0;
227
+ } else {
228
+ process.stderr.write(`${PROG}: error: unknown argument ${a}\n`);
229
+ return 2;
230
+ }
231
+ }
232
+
233
+ try {
234
+ const lines = readIntakeLines(intakeDir);
235
+ const plans = planFolds(lines, batchSize);
236
+ const results: Array<{ id: string; index: number; events: number; action: string }> = [];
237
+
238
+ for (const plan of plans) {
239
+ const target = path.join(outDir, `fold-${plan.id}.md`);
240
+ let action: string;
241
+ if (fs.existsSync(target)) {
242
+ action = 'exists (skipped — idempotent)';
243
+ } else if (dryRun) {
244
+ action = 'would write';
245
+ } else {
246
+ fs.mkdirSync(outDir, { recursive: true });
247
+ const tmp = `${target}.tmp-${process.pid}`;
248
+ fs.writeFileSync(tmp, renderFold(plan, batchSize), 'utf-8');
249
+ fs.renameSync(tmp, target);
250
+ action = 'written';
251
+ }
252
+ results.push({ id: plan.id, index: plan.index, events: plan.children.length, action });
253
+ }
254
+
255
+ const tail = lines.length - plans.length * batchSize;
256
+ if (format === 'json') {
257
+ process.stdout.write(
258
+ JSON.stringify(
259
+ { dry_run: dryRun, batch_size: batchSize, total_events: lines.length, unfolded_tail: tail, folds: results },
260
+ null,
261
+ 2,
262
+ ) + '\n',
263
+ );
264
+ } else {
265
+ for (const r of results) {
266
+ process.stdout.write(`fold-${r.id} batch=${r.index} events=${r.events} ${r.action}\n`);
267
+ }
268
+ process.stdout.write(
269
+ `${PROG}: ${results.length} fold(s), ${tail} event(s) in the live tail (batch size ${batchSize}${dryRun ? ', dry-run' : ''})\n`,
270
+ );
271
+ }
272
+ return 0;
273
+ } catch (exc) {
274
+ process.stderr.write(`${PROG}: internal error: ${String(exc)}\n`);
275
+ return 3;
276
+ }
277
+ }
278
+
279
+ if (fileURLToPath(import.meta.url) === path.resolve(process.argv[1] ?? '')) {
280
+ process.exit(main(process.argv.slice(2)));
281
+ }
@@ -65,7 +65,7 @@ const HOSTS = [
65
65
  'windsurf', 'cline', 'gemini', 'copilot', 'claude-desktop',
66
66
  ];
67
67
 
68
- const ARTIFACTS = ['rules', 'skills', 'commands', 'personas', 'user-types', 'hooks'];
68
+ const ARTIFACTS = ['rules', 'skills', 'commands', 'subagents', 'personas', 'user-types', 'hooks'];
69
69
 
70
70
  interface FnSpec {
71
71
  artifact: string;
@@ -109,6 +109,14 @@ const _FN_SPEC: Record<string, FnSpec> = {
109
109
  artifact: 'commands',
110
110
  cells: { 'claude-code': 'native', augment: 'native' },
111
111
  },
112
+ generate_claude_subagents: {
113
+ artifact: 'subagents',
114
+ cells: { 'claude-code': 'native' },
115
+ },
116
+ generate_subagent_host_contexts: {
117
+ artifact: 'subagents',
118
+ cells: { cursor: 'adapter', windsurf: 'adapter', cline: 'adapter' },
119
+ },
112
120
  generate_plugin_command_skills: {
113
121
  artifact: 'skills', cells: { 'claude-plugin': 'native' },
114
122
  },