@event4u/agent-config 3.3.0 → 4.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 (585) hide show
  1. package/.agent-src/README.md +2 -2
  2. package/.agent-src/commands/agent-handoff.md +31 -2
  3. package/.agent-src/commands/agent-status.md +5 -5
  4. package/.agent-src/commands/agents/audit.md +8 -8
  5. package/.agent-src/commands/agents/init.md +25 -1
  6. package/.agent-src/commands/agents/optimize.md +3 -3
  7. package/.agent-src/commands/agents/user.md +1 -1
  8. package/.agent-src/commands/agents.md +1 -1
  9. package/.agent-src/commands/analyze-reference-repo.md +1 -1
  10. package/.agent-src/commands/check-current-md.md +8 -8
  11. package/.agent-src/commands/{compress.md → condense.md} +55 -55
  12. package/.agent-src/commands/context/create.md +7 -4
  13. package/.agent-src/commands/context/refactor.md +3 -1
  14. package/.agent-src/commands/feature/dev.md +1 -1
  15. package/.agent-src/commands/feature/explore.md +1 -1
  16. package/.agent-src/commands/feature/plan.md +10 -8
  17. package/.agent-src/commands/feature/refactor.md +3 -1
  18. package/.agent-src/commands/feature/roadmap.md +7 -4
  19. package/.agent-src/commands/fix/portability.md +3 -3
  20. package/.agent-src/commands/fix/refs.md +4 -4
  21. package/.agent-src/commands/ghostwriter.md +2 -2
  22. package/.agent-src/commands/memory/learn-low-impact.md +3 -3
  23. package/.agent-src/commands/module/explore.md +34 -8
  24. package/.agent-src/commands/optimize/agents-dir.md +9 -7
  25. package/.agent-src/commands/optimize/augmentignore.md +2 -2
  26. package/.agent-src/commands/optimize/skills.md +9 -9
  27. package/.agent-src/commands/post-as.md +1 -1
  28. package/.agent-src/commands/project-analyze.md +2 -2
  29. package/.agent-src/commands/project-health.md +3 -2
  30. package/.agent-src/commands/research/deep.md +1 -1
  31. package/.agent-src/commands/research/report.md +1 -1
  32. package/.agent-src/commands/research.md +1 -1
  33. package/.agent-src/commands/roadmap/ai-council.md +1 -1
  34. package/.agent-src/commands/roadmap/create.md +9 -4
  35. package/.agent-src/commands/rule-compliance-audit.md +1 -1
  36. package/.agent-src/commands/upstream-contribute.md +14 -14
  37. package/.agent-src/commands/video/from-script.md +1 -1
  38. package/.agent-src/commands/video/scene.md +1 -1
  39. package/.agent-src/commands/video/stitch.md +1 -1
  40. package/.agent-src/commands/video/storyboard.md +1 -1
  41. package/.agent-src/commands/video.md +1 -1
  42. package/.agent-src/contexts/augment-infrastructure.md +1 -1
  43. package/.agent-src/contexts/authority/commit-mechanics.md +15 -0
  44. package/.agent-src/contexts/authority/kernel-rule-edits.md +3 -3
  45. package/.agent-src/contexts/authority/scope-mechanics.md +1 -1
  46. package/.agent-src/contexts/communication/rules-auto/augment-source-of-truth-mechanics.md +28 -28
  47. package/.agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +4 -4
  48. package/.agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
  49. package/.agent-src/contexts/contracts/artifact-engagement-flow.md +6 -6
  50. package/.agent-src/contexts/contracts/command-suggestion-flow.md +3 -3
  51. package/.agent-src/contexts/contracts/emergency-triage-block.md +4 -4
  52. package/.agent-src/contexts/contracts/frugality-charter.md +3 -3
  53. package/.agent-src/contexts/documentation-hierarchy.md +14 -7
  54. package/.agent-src/contexts/execution/autonomy-examples.md +1 -1
  55. package/.agent-src/contexts/execution/cheap-question-mechanics.md +39 -2
  56. package/.agent-src/contexts/execution/roadmap-process-loop.md +28 -5
  57. package/.agent-src/contexts/override-system.md +5 -5
  58. package/.agent-src/ghostwriter/fictional-fixture-v1.md +1 -1
  59. package/.agent-src/personas/advisors/first-principles.md +1 -1
  60. package/.agent-src/personas/hollywood-director.md +1 -1
  61. package/.agent-src/rules/architecture.md +5 -1
  62. package/.agent-src/rules/augment-edit-discipline.md +5 -5
  63. package/.agent-src/rules/augment-source-of-truth.md +15 -15
  64. package/.agent-src/rules/commit-conventions.md +1 -1
  65. package/.agent-src/rules/commit-policy.md +10 -0
  66. package/.agent-src/rules/domain-adoption-policy.md +3 -3
  67. package/.agent-src/rules/fast-path-marker-visibility.md +3 -3
  68. package/.agent-src/rules/finance-safety-floor.md +1 -1
  69. package/.agent-src/rules/framework-neutrality-in-generic-skills.md +8 -8
  70. package/.agent-src/rules/git-history-discipline.md +1 -1
  71. package/.agent-src/rules/improve-before-implement.md +2 -2
  72. package/.agent-src/rules/language-and-tone.md +2 -2
  73. package/.agent-src/rules/media-governance-routing.md +5 -5
  74. package/.agent-src/rules/no-attribution-footers.md +1 -0
  75. package/.agent-src/rules/no-cheap-questions.md +3 -0
  76. package/.agent-src/rules/no-decorative-emojis-in-git-surfaces.md +111 -0
  77. package/.agent-src/rules/no-pr-progress-comments.md +118 -0
  78. package/.agent-src/rules/no-roadmap-references.md +3 -3
  79. package/.agent-src/rules/non-destructive-by-default.md +1 -1
  80. package/.agent-src/rules/persona-governance.md +3 -3
  81. package/.agent-src/rules/preservation-guard.md +15 -15
  82. package/.agent-src/rules/roadmap-ci-steps-policy.md +7 -3
  83. package/.agent-src/rules/rule-type-governance.md +1 -1
  84. package/.agent-src/rules/skill-quality.md +1 -1
  85. package/.agent-src/rules/{caveman-speak.md → telegraph-speak.md} +15 -15
  86. package/.agent-src/rules/token-optimizer-maintenance.md +6 -6
  87. package/.agent-src/skills/agent-docs-writing/SKILL.md +17 -11
  88. package/.agent-src/skills/agents-md-thin-root/SKILL.md +9 -9
  89. package/.agent-src/skills/check-refs/SKILL.md +2 -2
  90. package/.agent-src/skills/code-refactoring/SKILL.md +2 -2
  91. package/.agent-src/skills/command-writing/SKILL.md +19 -19
  92. package/.agent-src/skills/comp-banding/SKILL.md +1 -1
  93. package/.agent-src/skills/condense-memory/SKILL.md +131 -0
  94. package/.agent-src/skills/context-authoring/SKILL.md +2 -2
  95. package/.agent-src/skills/context-document/SKILL.md +5 -3
  96. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +3 -3
  97. package/.agent-src/skills/description-assist/SKILL.md +2 -2
  98. package/.agent-src/skills/git-workflow/SKILL.md +1 -1
  99. package/.agent-src/skills/guideline-writing/SKILL.md +5 -5
  100. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +4 -4
  101. package/.agent-src/skills/lint-skills/SKILL.md +3 -3
  102. package/.agent-src/skills/md-language-check/SKILL.md +2 -2
  103. package/.agent-src/skills/module-detect-on-the-fly/SKILL.md +138 -0
  104. package/.agent-src/skills/module-management/SKILL.md +166 -94
  105. package/.agent-src/skills/override-management/SKILL.md +1 -1
  106. package/.agent-src/skills/persona-writing/SKILL.md +5 -5
  107. package/.agent-src/skills/positioning-strategy/SKILL.md +1 -1
  108. package/.agent-src/skills/project-docs/SKILL.md +6 -4
  109. package/.agent-src/skills/readme-reviewer/SKILL.md +2 -2
  110. package/.agent-src/skills/roadmap-management/SKILL.md +13 -1
  111. package/.agent-src/skills/roadmap-writing/SKILL.md +4 -2
  112. package/.agent-src/skills/rule-refactor/SKILL.md +5 -5
  113. package/.agent-src/skills/rule-writing/SKILL.md +18 -18
  114. package/.agent-src/skills/script-writing/SKILL.md +1 -1
  115. package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +6 -6
  116. package/.agent-src/skills/skill-management/SKILL.md +21 -21
  117. package/.agent-src/skills/skill-reviewer/SKILL.md +2 -2
  118. package/.agent-src/skills/skill-writing/SKILL.md +8 -8
  119. package/.agent-src/skills/skill-writing/evals/triggers.json +1 -1
  120. package/.agent-src/skills/token-optimizer/SKILL.md +4 -4
  121. package/.agent-src/skills/unit-economics-modeling/SKILL.md +1 -1
  122. package/.agent-src/skills/upstream-contribute/SKILL.md +17 -17
  123. package/.agent-src/templates/AGENTS.md +1 -0
  124. package/.agent-src/templates/agent-settings.md +24 -13
  125. package/.agent-src/templates/agents/agent-project-settings.example.yml +61 -2
  126. package/.agent-src/templates/command.md +5 -5
  127. package/.agent-src/templates/contexts.md +1 -1
  128. package/.agent-src/templates/copilot-instructions.md +8 -8
  129. package/.agent-src/templates/features.md +1 -1
  130. package/.agent-src/templates/hooks/pre-commit-frontmatter +2 -2
  131. package/.agent-src/templates/hooks/pre-commit-roadmap-progress +3 -3
  132. package/.agent-src/templates/persona.md +2 -2
  133. package/.agent-src/templates/roadmaps.md +1 -1
  134. package/.agent-src/templates/rule.md +13 -13
  135. package/.agent-src/templates/scripts/memory_lookup.py +1 -1
  136. package/.agent-src/templates/scripts/memory_status.py +2 -2
  137. package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +195 -1
  138. package/.agent-src/templates/scripts/work_engine/orchestration.py +1 -1
  139. package/.agent-src/templates/skill-archive-note.md +5 -5
  140. package/.agent-src/templates/skill.md +1 -1
  141. package/.claude-plugin/marketplace.json +4 -4
  142. package/AGENTS.md +16 -17
  143. package/CHANGELOG.md +181 -3
  144. package/CONTRIBUTING.md +31 -12
  145. package/README.md +18 -10
  146. package/config/agent-settings.template.yml +22 -2
  147. package/config/discovery/unassigned-artefacts.yml +24 -24
  148. package/config/profiles/full.ini +1 -1
  149. package/dist/cli/agent-config.js +52 -3
  150. package/dist/cli/agent-config.js.map +1 -1
  151. package/dist/cli/commands/uiServe.js +9 -0
  152. package/dist/cli/commands/uiServe.js.map +1 -1
  153. package/dist/cli/registry.js +2 -1
  154. package/dist/cli/registry.js.map +1 -1
  155. package/dist/discovery/deprecation-report.md +1 -1
  156. package/dist/discovery/discovery-manifest.json +649 -606
  157. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  158. package/dist/discovery/discovery-manifest.summary.md +4 -4
  159. package/dist/discovery/orphan-report.md +1 -1
  160. package/dist/discovery/packs.json +439 -437
  161. package/dist/discovery/trust-report.md +5 -5
  162. package/dist/discovery/workspaces.json +450 -448
  163. package/dist/install/apply.js +238 -0
  164. package/dist/install/apply.js.map +1 -0
  165. package/dist/install/atomic.js +92 -0
  166. package/dist/install/atomic.js.map +1 -0
  167. package/dist/install/bridges/augment.js +20 -0
  168. package/dist/install/bridges/augment.js.map +1 -0
  169. package/dist/install/bridges/claude.js +44 -0
  170. package/dist/install/bridges/claude.js.map +1 -0
  171. package/dist/install/bridges/cline.js +69 -0
  172. package/dist/install/bridges/cline.js.map +1 -0
  173. package/dist/install/bridges/copilot.js +28 -0
  174. package/dist/install/bridges/copilot.js.map +1 -0
  175. package/dist/install/bridges/cursor.js +34 -0
  176. package/dist/install/bridges/cursor.js.map +1 -0
  177. package/dist/install/bridges/gemini.js +39 -0
  178. package/dist/install/bridges/gemini.js.map +1 -0
  179. package/dist/install/bridges/index.js +88 -0
  180. package/dist/install/bridges/index.js.map +1 -0
  181. package/dist/install/bridges/marker-content.js +153 -0
  182. package/dist/install/bridges/marker-content.js.map +1 -0
  183. package/dist/install/bridges/markers.js +42 -0
  184. package/dist/install/bridges/markers.js.map +1 -0
  185. package/dist/install/bridges/types.js +31 -0
  186. package/dist/install/bridges/types.js.map +1 -0
  187. package/dist/install/bridges/vscode.js +26 -0
  188. package/dist/install/bridges/vscode.js.map +1 -0
  189. package/dist/install/bridges/windsurf.js +35 -0
  190. package/dist/install/bridges/windsurf.js.map +1 -0
  191. package/dist/install/conflict.js +196 -0
  192. package/dist/install/conflict.js.map +1 -0
  193. package/dist/install/detect.js +218 -0
  194. package/dist/install/detect.js.map +1 -0
  195. package/dist/install/paths.js +82 -0
  196. package/dist/install/paths.js.map +1 -0
  197. package/dist/install/plan.js +157 -0
  198. package/dist/install/plan.js.map +1 -0
  199. package/dist/install/txlog.js +140 -0
  200. package/dist/install/txlog.js.map +1 -0
  201. package/dist/install/types.js +19 -0
  202. package/dist/install/types.js.map +1 -0
  203. package/dist/install/wizard-plan.js +184 -0
  204. package/dist/install/wizard-plan.js.map +1 -0
  205. package/dist/mcp/registry-manifest.json +4 -4
  206. package/dist/router.json +67 -19
  207. package/dist/server/app.js +6 -0
  208. package/dist/server/app.js.map +1 -1
  209. package/dist/server/routes/install.js +547 -0
  210. package/dist/server/routes/install.js.map +1 -0
  211. package/dist/server/routes/wizard.js +301 -6
  212. package/dist/server/routes/wizard.js.map +1 -1
  213. package/dist/server/routes/workspace.js +396 -0
  214. package/dist/server/routes/workspace.js.map +1 -0
  215. package/dist/server/schemas/settings.js +4 -3
  216. package/dist/server/schemas/settings.js.map +1 -1
  217. package/dist/ui/assets/index-BXZILUxe.css +1 -0
  218. package/dist/ui/assets/index-DLEuEW1V.js +35 -0
  219. package/dist/ui/assets/index-DLEuEW1V.js.map +1 -0
  220. package/dist/ui/index.html +2 -2
  221. package/docs/MIGRATION.md +1 -1
  222. package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
  223. package/docs/adrs/router/0001-three-tier-routing.md +4 -4
  224. package/docs/adrs/schema/0001-json-schema-frontmatter.md +1 -1
  225. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +4 -4
  226. package/docs/adrs/{caveman → telegraph}/0001-default-off-until-bench.md +9 -9
  227. package/docs/adrs/telegraph/README.md +9 -0
  228. package/docs/architecture/augment-projection.md +4 -4
  229. package/docs/architecture/claude-bundle.md +1 -1
  230. package/docs/architecture/current-onboard-baseline.md +3 -3
  231. package/docs/architecture/multi-tool-projection.md +10 -10
  232. package/docs/architecture/source-projection.md +27 -27
  233. package/docs/architecture.md +19 -15
  234. package/docs/archive/CHANGELOG-pre-2.11.0.md +2 -2
  235. package/docs/archive/CHANGELOG-pre-2.15.0.md +3 -3
  236. package/docs/archive/CHANGELOG-pre-2.16.0.md +1 -1
  237. package/docs/archive/CHANGELOG-pre-2.2.0.md +70 -70
  238. package/docs/archive/CHANGELOG-pre-2.20.0.md +2 -2
  239. package/docs/archive/CHANGELOG-pre-2.25.0.md +15 -15
  240. package/docs/archive/CHANGELOG-pre-3.0.0.md +4 -4
  241. package/docs/archive/CHANGELOG-pre-3.1.0.md +2 -2
  242. package/docs/archive/CHANGELOG-pre-3.2.0.md +3 -3
  243. package/docs/benchmark.md +65 -0
  244. package/docs/benchmarks.md +16 -16
  245. package/docs/catalog.md +17 -15
  246. package/docs/contracts/CHANGELOG-conventions.md +1 -1
  247. package/docs/contracts/STABILITY.md +2 -2
  248. package/docs/contracts/adoption-signal-floor.md +110 -0
  249. package/docs/contracts/adr-chat-history-split.md +4 -4
  250. package/docs/contracts/adr-command-suggestion.md +4 -4
  251. package/docs/contracts/adr-gtm-context-spine.md +1 -1
  252. package/docs/contracts/adr-implement-ticket-runtime.md +4 -4
  253. package/docs/contracts/adr-install-user-type-axis.md +1 -1
  254. package/docs/contracts/adr-layout.md +2 -2
  255. package/docs/contracts/adr-product-ui-track.md +10 -10
  256. package/docs/contracts/adr-user-types-axis.md +3 -3
  257. package/docs/contracts/adr-wing4-context-spine.md +1 -1
  258. package/docs/contracts/agent-memory-contract.md +3 -3
  259. package/docs/contracts/agents-md-tech-stack.md +2 -2
  260. package/docs/contracts/ai-council-config.md +2 -2
  261. package/docs/contracts/at-rest-encryption.md +4 -0
  262. package/docs/contracts/audit-log-v1.md +1 -1
  263. package/docs/contracts/benchmark-ab-contract.md +101 -0
  264. package/docs/contracts/benchmark-corpus-spec.md +1 -1
  265. package/docs/contracts/branch-protection-policy.md +98 -0
  266. package/docs/contracts/ci-cost-budget.md +106 -0
  267. package/docs/contracts/ci-green-floor.md +141 -0
  268. package/docs/contracts/command-clusters.md +6 -6
  269. package/docs/contracts/command-surface-tiers.md +2 -2
  270. package/docs/contracts/command-taxonomy.md +2 -2
  271. package/docs/contracts/{compression-default-kill-criterion.md → condensation-default-kill-criterion.md} +29 -29
  272. package/docs/contracts/config-presets.md +1 -1
  273. package/docs/contracts/context-paths.md +3 -3
  274. package/docs/contracts/context-spine.md +1 -1
  275. package/docs/contracts/cost-summary-schema.md +12 -12
  276. package/docs/contracts/cross-wing-handoff.md +4 -4
  277. package/docs/contracts/daily-workspace.md +4 -0
  278. package/docs/contracts/decision-trace-v1.md +2 -2
  279. package/docs/contracts/discovery-manifest.md +4 -4
  280. package/docs/contracts/explain-modes.md +4 -0
  281. package/docs/contracts/file-ownership-matrix.json +3493 -3318
  282. package/docs/contracts/file-ownership-matrix.md +3 -3
  283. package/docs/contracts/frontmatter-contract.md +4 -4
  284. package/docs/contracts/ghostwriter-schema.md +3 -3
  285. package/docs/contracts/gui-wizard.md +1 -1
  286. package/docs/contracts/harness-expectations.md +123 -0
  287. package/docs/contracts/host-agent-protocol.md +4 -0
  288. package/docs/contracts/implement-ticket-flow.md +9 -9
  289. package/docs/contracts/install-scopes.md +77 -0
  290. package/docs/contracts/iron-law-overrides.txt +1 -1
  291. package/docs/contracts/kernel-membership.md +26 -26
  292. package/docs/contracts/linear-ai-rules-inclusion.md +1 -1
  293. package/docs/contracts/linter-structural-model.md +2 -2
  294. package/docs/contracts/load-context-budget-model.md +4 -4
  295. package/docs/contracts/load-context-schema.md +13 -13
  296. package/docs/contracts/local-analytics.md +4 -0
  297. package/docs/contracts/local-knowledge-ingestion.md +1 -1
  298. package/docs/contracts/mcp-cloud-scope.md +2 -2
  299. package/docs/contracts/mcp-phase-1-scope.md +3 -3
  300. package/docs/contracts/measurement-baseline.md +5 -5
  301. package/docs/contracts/mental-models.md +30 -30
  302. package/docs/contracts/multi-tool-projection-fidelity.md +4 -4
  303. package/docs/contracts/namespace.md +4 -4
  304. package/docs/contracts/orchestration-dsl-v1.md +7 -7
  305. package/docs/contracts/package-self-orientation.md +12 -12
  306. package/docs/contracts/persona-schema.md +6 -6
  307. package/docs/contracts/pilot/language-and-tone.md +1 -1
  308. package/docs/contracts/plain-language-surface.md +117 -0
  309. package/docs/contracts/profile-system.md +3 -3
  310. package/docs/contracts/release-pr-gating.md +103 -0
  311. package/docs/contracts/role-experience.md +3 -3
  312. package/docs/contracts/rule-classification.md +13 -13
  313. package/docs/contracts/rule-interactions.md +4 -4
  314. package/docs/contracts/rule-interactions.yml +30 -30
  315. package/docs/contracts/rule-priority-hierarchy.md +13 -13
  316. package/docs/contracts/rule-router.md +2 -2
  317. package/docs/contracts/safety-model.md +1 -1
  318. package/docs/contracts/skill-distribution-channels.md +61 -0
  319. package/docs/contracts/skill-domains.md +2 -2
  320. package/docs/contracts/smoke-contracts.md +5 -5
  321. package/docs/contracts/telegraph-telemetry.md +83 -0
  322. package/docs/contracts/trust-and-safety.md +5 -5
  323. package/docs/contracts/ui-stack-extension.md +7 -7
  324. package/docs/contracts/ui-track-flow.md +9 -9
  325. package/docs/contracts/user-type-schema.md +4 -4
  326. package/docs/contracts/workflow-packs.md +4 -4
  327. package/docs/contracts/workspace-documents.md +4 -0
  328. package/docs/customization.md +28 -8
  329. package/docs/decisions/ADR-001-kernel-swap-deferred.md +6 -6
  330. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +11 -11
  331. package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +2 -2
  332. package/docs/decisions/ADR-004-rule-governance-pruning.md +4 -4
  333. package/docs/decisions/ADR-005-subagent-worktrees.md +7 -7
  334. package/docs/decisions/ADR-011-domain-pack-readiness.md +6 -6
  335. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +3 -3
  336. package/docs/decisions/ADR-015-discovery-manifest-contract.md +3 -3
  337. package/docs/decisions/ADR-017-monorepo-physical-layout.md +10 -10
  338. package/docs/decisions/ADR-018-trust-and-safety-layer.md +6 -6
  339. package/docs/decisions/ADR-019-router-json-dist-location.md +2 -2
  340. package/docs/decisions/ADR-020-global-only-consumer-scope.md +2 -2
  341. package/docs/decisions/ADR-021-deployment-shape.md +1 -1
  342. package/docs/decisions/ADR-022-daily-workspace-decomposition.md +1 -1
  343. package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +2 -2
  344. package/docs/decisions/ADR-028-root-layout.md +7 -7
  345. package/docs/decisions/ADR-029-multi-workspace-deferred.md +2 -2
  346. package/docs/decisions/ADR-rule-kernel-and-router.md +5 -5
  347. package/docs/deploy/team-deployment-posture.md +20 -0
  348. package/docs/development.md +17 -17
  349. package/docs/distribution/registries.md +32 -0
  350. package/docs/distribution/registry-submissions.md +85 -0
  351. package/docs/distribution/telemetry-schema.md +1 -1
  352. package/docs/getting-started-by-role.md +45 -3
  353. package/docs/getting-started.md +2 -2
  354. package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
  355. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
  356. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
  357. package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
  358. package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
  359. package/docs/guidelines/agent-infra/direct-answers-demos.md +1 -1
  360. package/docs/guidelines/agent-infra/first-principles.md +2 -2
  361. package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
  362. package/docs/guidelines/agent-infra/layered-settings.md +56 -2
  363. package/docs/guidelines/agent-infra/mental-models.md +3 -3
  364. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +2 -2
  365. package/docs/guidelines/agent-infra/rule-type-governance.md +1 -1
  366. package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
  367. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +2 -2
  368. package/docs/guidelines/agent-infra/six-hats.md +3 -3
  369. package/docs/guidelines/agent-infra/skill-quality-checklist.md +5 -5
  370. package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
  371. package/docs/guidelines/agent-infra/verify-before-complete-demos.md +1 -1
  372. package/docs/guidelines/augment-portability-patterns.md +4 -4
  373. package/docs/guidelines/cross-role-handoff.md +2 -2
  374. package/docs/guidelines/php/php-coding-patterns.md +1 -1
  375. package/docs/guidelines/prompt-templates.md +6 -6
  376. package/docs/maintainers/dev-mode.md +1 -1
  377. package/docs/mcp.md +1 -1
  378. package/docs/parity/bench.json +3 -3
  379. package/docs/parity/ruflo.md +2 -2
  380. package/docs/profiles.md +11 -11
  381. package/docs/quality.md +11 -11
  382. package/docs/safety.md +3 -3
  383. package/docs/setup/mcp-client-config.md +1 -1
  384. package/docs/setup/mcp-r2-bootstrap.md +1 -1
  385. package/docs/setup/mcp-server-docker.md +3 -3
  386. package/docs/setup/per-ide/windsurf.md +1 -1
  387. package/docs/skills-catalog.md +8 -7
  388. package/docs/troubleshooting.md +1 -1
  389. package/docs/walkthroughs/daily-workspace-a11y.md +87 -0
  390. package/llms.txt +7 -6
  391. package/package.json +1 -1
  392. package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  393. package/scripts/_archive/README.md +2 -2
  394. package/scripts/_archive/_backfill_skill_domains.py +3 -3
  395. package/scripts/_archive/_bootstrap_tier_frontmatter.py +3 -3
  396. package/scripts/_archive/_p43_bodies.py +10 -10
  397. package/scripts/_archive/{_p43_compress.py → _p43_condense.py} +5 -5
  398. package/scripts/_archive/_p4_migrate.py +7 -7
  399. package/scripts/_archive/_phase2_shim_helper.py +1 -1
  400. package/scripts/_archive/_pilot_council_question.py +5 -5
  401. package/scripts/_cli/explain_last/inputs.py +1 -1
  402. package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
  403. package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
  404. package/scripts/_lib/agent_settings.py +195 -1
  405. package/scripts/_lib/agent_src.py +19 -19
  406. package/scripts/_lib/bench_ab_cache.py +162 -0
  407. package/scripts/_lib/bench_ab_scoring.py +209 -0
  408. package/scripts/_lib/{bench_caveman.py → bench_telegraph.py} +21 -21
  409. package/scripts/_lib/{bench_caveman_report.py → bench_telegraph_report.py} +21 -21
  410. package/scripts/_lib/claude_desktop_bundler.py +5 -5
  411. package/scripts/_lib/module_detection.py +223 -0
  412. package/scripts/_lib/scope_guard.sh +162 -0
  413. package/scripts/_phase4_bucket.py +3 -3
  414. package/scripts/_pilot_measure.py +4 -4
  415. package/scripts/_tmp_scan_framework_leakage.py +1 -1
  416. package/scripts/adoption_report.py +195 -0
  417. package/scripts/adoption_snapshot.py +219 -0
  418. package/scripts/adoption_status.py +166 -0
  419. package/scripts/ai-video/lib/parse-blueprint.sh +1 -1
  420. package/scripts/ai_council/advisors.py +5 -5
  421. package/scripts/ai_council/compile_corpus.py +1 -1
  422. package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +3 -3
  423. package/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_review.py +2 -2
  424. package/scripts/ai_council/one_off_archive/2026-05/_one_off_inject_quiet_flag.py +1 -1
  425. package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_v2.sh +1 -1
  426. package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_verbosity.sh +1 -1
  427. package/scripts/ai_council/one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py +3 -3
  428. package/scripts/ai_council/one_off_archive/2026-05/_one_off_per_task.sh +1 -1
  429. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py +1 -1
  430. package/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py +6 -6
  431. package/scripts/ai_council/one_off_archive/2026-05/_one_off_rebalancing_audit.py +1 -1
  432. package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +6 -6
  433. package/scripts/annotate_discovery.py +13 -13
  434. package/scripts/apply_modules_config.py +290 -0
  435. package/scripts/audit_adr_coverage.py +2 -2
  436. package/scripts/audit_auto_rules.py +2 -2
  437. package/scripts/audit_cloud_compatibility.py +3 -3
  438. package/scripts/audit_command_surface.py +9 -9
  439. package/scripts/audit_likelihood.py +2 -2
  440. package/scripts/audit_user_type_axis.py +2 -2
  441. package/scripts/bench_ab_cache_dispatch.py +68 -0
  442. package/scripts/bench_ab_clone.py +170 -0
  443. package/scripts/bench_ab_diff.py +227 -0
  444. package/scripts/bench_ab_integrity.py +143 -0
  445. package/scripts/bench_ab_run.py +235 -0
  446. package/scripts/bench_ab_task_runner.py +369 -0
  447. package/scripts/bench_ab_tracka_run.py +202 -0
  448. package/scripts/{bench_compress_memory.py → bench_condense_memory.py} +16 -16
  449. package/scripts/bench_run.py +33 -33
  450. package/scripts/bench_runner.py +2 -2
  451. package/scripts/bootstrap.sh +99 -0
  452. package/scripts/build_cloud_bundle.py +6 -6
  453. package/scripts/build_discovery_manifest.py +7 -7
  454. package/scripts/build_linear_digest.py +3 -3
  455. package/scripts/build_rule_trigger_matrix.py +8 -8
  456. package/scripts/chat_history.py +5 -5
  457. package/scripts/check_always_budget.py +11 -5
  458. package/scripts/check_augment_description_cap.py +3 -3
  459. package/scripts/check_cluster_patterns.py +2 -2
  460. package/scripts/check_command_count_messaging.py +3 -3
  461. package/scripts/{check_compression.py → check_condensation.py} +34 -34
  462. package/scripts/{check_compressed_paths.py → check_condensed_paths.py} +8 -8
  463. package/scripts/check_context_paths.py +7 -7
  464. package/scripts/check_council_layout.py +2 -2
  465. package/scripts/check_council_references.py +9 -9
  466. package/scripts/check_iron_law_prominence.py +2 -2
  467. package/scripts/check_kernel_rule_bundle.py +2 -2
  468. package/scripts/check_module_management_neutral.py +149 -0
  469. package/scripts/check_no_roadmap_refs.py +9 -9
  470. package/scripts/check_portability.py +3 -3
  471. package/scripts/check_public_catalog_links.py +4 -4
  472. package/scripts/check_references.py +7 -6
  473. package/scripts/check_release_pr_shape.py +112 -0
  474. package/scripts/check_reply_consistency.py +3 -3
  475. package/scripts/check_safety_floor_untouched.py +1 -1
  476. package/scripts/check_template_pin_drift.py +5 -5
  477. package/scripts/check_token_optimizer_freshness.py +3 -3
  478. package/scripts/ci_status.py +301 -0
  479. package/scripts/ci_time_ratio.py +1 -1
  480. package/scripts/cleanup_other_scope.sh +146 -0
  481. package/scripts/compile_router.py +10 -10
  482. package/scripts/{compress.py → condense.py} +64 -64
  483. package/scripts/condense.sh +18 -0
  484. package/scripts/{compress_memory.py → condense_memory.py} +33 -33
  485. package/scripts/config/presets.py +2 -2
  486. package/scripts/config/profiles.py +1 -1
  487. package/scripts/cost_by_conversation.py +3 -3
  488. package/scripts/cost_summary.py +7 -7
  489. package/scripts/count_token_optimizer_usage.sh +1 -1
  490. package/scripts/gen_discovery_baseline.py +5 -5
  491. package/scripts/generate_index.py +6 -6
  492. package/scripts/generate_ownership_matrix.py +10 -10
  493. package/scripts/generate_pack_manifests.py +1 -1
  494. package/scripts/ghostwriter_fixture_allowlist.txt +1 -1
  495. package/scripts/install +3 -3
  496. package/scripts/install-hooks.sh +6 -6
  497. package/scripts/install.py +76 -11
  498. package/scripts/install.sh +187 -1
  499. package/scripts/inventory_frontmatter.py +2 -2
  500. package/scripts/iron_law_sha.py +3 -3
  501. package/scripts/lint_agents_layout.py +14 -7
  502. package/scripts/lint_agents_md.py +4 -4
  503. package/scripts/lint_archived_skills.py +3 -3
  504. package/scripts/lint_artefact_frontmatter.py +2 -2
  505. package/scripts/lint_bench_ab.py +172 -0
  506. package/scripts/lint_bench_corpus.py +1 -1
  507. package/scripts/lint_command_tiers.py +5 -5
  508. package/scripts/lint_context_spine_usage.py +1 -1
  509. package/scripts/lint_framework_leakage.py +7 -7
  510. package/scripts/lint_framework_leakage_allowlist.json +144 -84
  511. package/scripts/lint_ghostwriter_source.py +3 -3
  512. package/scripts/lint_handoffs.py +1 -1
  513. package/scripts/lint_load_context.py +11 -11
  514. package/scripts/lint_media_policy_linkage.py +5 -5
  515. package/scripts/lint_namespace.py +1 -1
  516. package/scripts/lint_no_new_atomic_commands.py +2 -2
  517. package/scripts/lint_orchestration_dsl.py +1 -1
  518. package/scripts/lint_pack_boundaries.py +2 -2
  519. package/scripts/lint_persona_governance.py +4 -4
  520. package/scripts/lint_role_experiences.py +237 -0
  521. package/scripts/lint_rule_interactions.py +2 -2
  522. package/scripts/lint_rule_tiers.py +1 -1
  523. package/scripts/lint_trust_coherence.py +2 -2
  524. package/scripts/mcp_registry_submit.sh +187 -0
  525. package/scripts/mcp_server/tools.py +1 -1
  526. package/scripts/measure_frugality_savings.py +10 -10
  527. package/scripts/measure_patterns.py +1 -1
  528. package/scripts/measure_projection_bytes.py +5 -5
  529. package/scripts/measure_rule_budget.py +3 -3
  530. package/scripts/measure_skill_reduction.py +1 -1
  531. package/scripts/memory_lookup.py +1 -1
  532. package/scripts/memory_status.py +2 -2
  533. package/scripts/migrate_command_suggestions.py +3 -3
  534. package/scripts/mine_session.py +1 -1
  535. package/scripts/move_artefact.py +3 -3
  536. package/scripts/new_skill.py +2 -2
  537. package/scripts/pack_mcp_content.py +9 -9
  538. package/scripts/plan_physical_move.py +6 -6
  539. package/scripts/print_required_checks.py +196 -0
  540. package/scripts/probe_skill_registration.py +413 -0
  541. package/scripts/propose_modules_config.py +145 -0
  542. package/scripts/prototype_lint_contradictions.py +1 -1
  543. package/scripts/recruit_preflight.sh +152 -0
  544. package/scripts/refine_ticket_detect.py +3 -3
  545. package/scripts/release.py +20 -0
  546. package/scripts/render_benchmark_md.py +308 -0
  547. package/scripts/roadmap_progress_hook.py +1 -1
  548. package/scripts/run_skill_evals.py +2 -2
  549. package/scripts/runtime_registry.py +4 -4
  550. package/scripts/schemas/command.schema.json +4 -4
  551. package/scripts/schemas/rule.schema.json +5 -5
  552. package/scripts/schemas/skill.schema.json +3 -3
  553. package/scripts/schemas/user-type.schema.json +1 -1
  554. package/scripts/score_skill_selection.py +1 -1
  555. package/scripts/skill_collision_clusters.py +2 -2
  556. package/scripts/skill_linter.py +81 -81
  557. package/scripts/skill_overlap.py +5 -5
  558. package/scripts/skill_tools/audit_persona_coverage.py +2 -2
  559. package/scripts/skill_tools/audit_user_type_coverage.py +2 -2
  560. package/scripts/skill_tools/run_block_d_eval.py +1 -1
  561. package/scripts/skill_tools/score_skill_relevance.py +1 -1
  562. package/scripts/skill_tools/suggest_skill_for_task.py +1 -1
  563. package/scripts/skill_trigger_eval.py +3 -3
  564. package/scripts/smoke/kernel.sh +7 -1
  565. package/scripts/smoke/router.sh +5 -5
  566. package/scripts/smoke/skills.sh +1 -1
  567. package/scripts/smoke_quickstart.py +1 -1
  568. package/scripts/snapshot_agent_outputs.py +3 -3
  569. package/scripts/spotcheck_thin_root.py +1 -1
  570. package/scripts/{caveman_stats.py → telegraph_stats.py} +18 -18
  571. package/scripts/update_counts.py +1 -1
  572. package/scripts/validate_decision_engine.py +1 -1
  573. package/scripts/validate_frontmatter.py +1 -1
  574. package/scripts/validate_safe_paths.py +3 -3
  575. package/scripts/{validate_caveman_carveouts.py → validate_telegraph_carveouts.py} +7 -7
  576. package/scripts/verify_roadmap_closure.py +6 -6
  577. package/templates/consumer-settings/ONBOARDING.md +41 -0
  578. package/.agent-src/commands/install-via-agent.md +0 -129
  579. package/.agent-src/skills/compress-memory/SKILL.md +0 -131
  580. package/dist/ui/assets/index-D-DY1ywI.js +0 -35
  581. package/dist/ui/assets/index-D-DY1ywI.js.map +0 -1
  582. package/dist/ui/assets/index-Dqfhmg-d.css +0 -1
  583. package/docs/adrs/caveman/README.md +0 -9
  584. package/docs/contracts/caveman-telemetry.md +0 -83
  585. package/scripts/compress.sh +0 -18
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Bridge registry — Phase A6 entrypoint.
3
+ *
4
+ * Maps stable tool IDs to pure builder functions. Callers pass a
5
+ * {@link BridgeContext} plus a list of enabled tool IDs and receive a
6
+ * flat list of {@link BridgeOutput}s ready for the apply layer.
7
+ *
8
+ * Order of `generateProjectBridges` output is **stable** — it follows
9
+ * the registration order below, which mirrors the Python install order
10
+ * (`scripts/install.py:_deploy_tool_content` dispatch table). Snapshot
11
+ * tests rely on this ordering.
12
+ *
13
+ * To add a tool:
14
+ * 1. Implement a `buildXxxBridge: BridgeBuilder` in `bridges/xxx.ts`.
15
+ * 2. Register it under its stable tool ID in {@link BRIDGE_REGISTRY}.
16
+ * 3. Add a snapshot fixture under `tests/install/bridges/__snapshots__/`.
17
+ */
18
+ import { buildAugmentBridge } from './augment.js';
19
+ import { buildClaudeBridge } from './claude.js';
20
+ import { buildClineBridge } from './cline.js';
21
+ import { buildCopilotBridge } from './copilot.js';
22
+ import { buildCursorBridge } from './cursor.js';
23
+ import { buildGeminiBridge } from './gemini.js';
24
+ import { buildAiderBridge, buildClaudeDesktopBridge, buildCodexBridge, buildContinueBridge, buildJetbrainsBridge, buildKilocodeBridge, buildKiroBridge, buildRoocodeBridge, buildZedBridge, } from './markers.js';
25
+ import { buildVscodeBridge } from './vscode.js';
26
+ import { buildWindsurfBridge } from './windsurf.js';
27
+ /**
28
+ * Stable tool ID → builder map. Order matches Python install dispatch.
29
+ *
30
+ * Using a tuple list (not a plain object) keeps iteration order
31
+ * deterministic across runtimes and survives accidental key reordering
32
+ * by tooling.
33
+ */
34
+ export const BRIDGE_REGISTRY = [
35
+ // Substrate / plugin enablement.
36
+ ['vscode', buildVscodeBridge],
37
+ ['augment', buildAugmentBridge],
38
+ // Hook dispatchers (JSON).
39
+ ['claude', buildClaudeBridge],
40
+ ['cursor', buildCursorBridge],
41
+ ['windsurf', buildWindsurfBridge],
42
+ ['gemini', buildGeminiBridge],
43
+ // Multi-script.
44
+ ['cline', buildClineBridge],
45
+ // Plugin registration.
46
+ ['copilot', buildCopilotBridge],
47
+ // Informational markers.
48
+ ['roocode', buildRoocodeBridge],
49
+ ['claude-desktop', buildClaudeDesktopBridge],
50
+ ['aider', buildAiderBridge],
51
+ ['codex', buildCodexBridge],
52
+ ['continue', buildContinueBridge],
53
+ ['kilocode', buildKilocodeBridge],
54
+ ['zed', buildZedBridge],
55
+ ['jetbrains', buildJetbrainsBridge],
56
+ ['kiro', buildKiroBridge],
57
+ ];
58
+ /** Set of every registered tool ID (cached for fast membership tests). */
59
+ export const KNOWN_TOOL_IDS = new Set(BRIDGE_REGISTRY.map(([id]) => id));
60
+ /**
61
+ * Generate the full list of bridge outputs for a project.
62
+ *
63
+ * @param ctx Project root + package type.
64
+ * @param enabledIds Tool IDs to include. Unknown IDs are silently
65
+ * ignored — the detect/plan layer is the gatekeeper
66
+ * for enable/disable decisions, not the registry.
67
+ * @returns Flat list of outputs in registry order. Cline (and
68
+ * any future multi-output builder) contributes
69
+ * multiple entries; all others contribute one.
70
+ */
71
+ export function generateProjectBridges(ctx, enabledIds) {
72
+ const enabled = enabledIds instanceof Set ? enabledIds : new Set(enabledIds);
73
+ const out = [];
74
+ for (const [toolId, builder] of BRIDGE_REGISTRY) {
75
+ if (!enabled.has(toolId))
76
+ continue;
77
+ const result = builder(ctx);
78
+ if (Array.isArray(result)) {
79
+ out.push(...result);
80
+ }
81
+ else {
82
+ out.push(result);
83
+ }
84
+ }
85
+ return out;
86
+ }
87
+ export { dispatchCommand, } from './types.js';
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/install/bridges/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACH,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,cAAc,GACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAoD;IAC5E,iCAAiC;IACjC,CAAC,QAAQ,EAAU,iBAAiB,CAAC;IACrC,CAAC,SAAS,EAAS,kBAAkB,CAAC;IACtC,2BAA2B;IAC3B,CAAC,QAAQ,EAAU,iBAAiB,CAAC;IACrC,CAAC,QAAQ,EAAU,iBAAiB,CAAC;IACrC,CAAC,UAAU,EAAQ,mBAAmB,CAAC;IACvC,CAAC,QAAQ,EAAU,iBAAiB,CAAC;IACrC,gBAAgB;IAChB,CAAC,OAAO,EAAW,gBAAgB,CAAC;IACpC,uBAAuB;IACvB,CAAC,SAAS,EAAS,kBAAkB,CAAC;IACtC,yBAAyB;IACzB,CAAC,SAAS,EAAS,kBAAkB,CAAC;IACtC,CAAC,gBAAgB,EAAE,wBAAwB,CAAC;IAC5C,CAAC,OAAO,EAAW,gBAAgB,CAAC;IACpC,CAAC,OAAO,EAAW,gBAAgB,CAAC;IACpC,CAAC,UAAU,EAAQ,mBAAmB,CAAC;IACvC,CAAC,UAAU,EAAQ,mBAAmB,CAAC;IACvC,CAAC,KAAK,EAAa,cAAc,CAAC;IAClC,CAAC,WAAW,EAAO,oBAAoB,CAAC;IACxC,CAAC,MAAM,EAAY,eAAe,CAAC;CACtC,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAwB,IAAI,GAAG,CACtD,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CACpC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAClC,GAAkB,EAClB,UAAuD;IAEvD,MAAM,OAAO,GAAG,UAAU,YAAY,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,eAAe,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACJ,GAAG,CAAC,IAAI,CAAC,MAAsB,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAGD,OAAO,EAEH,eAAe,GAIlB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Marker content — verbatim payload for every marker-style bridge.
3
+ *
4
+ * Mirror of the `*_MARKER` string constants in
5
+ * `scripts/install.py` (lines 1561–1896). Kept in a separate module so
6
+ * snapshot tests can pin copy without dragging the builder closures in.
7
+ */
8
+ export const ROOCODE_MARKER = `# Agent Config bridge
9
+
10
+ This file marks the project as an \`event4u/agent-config\` consumer.
11
+
12
+ Roo Code reads \`.roo/rules/*.md\` as system-level instructions. The
13
+ canonical rule and skill source lives under \`.augment/\` (Augment
14
+ portability mirror — see \`AGENTS.md\` for orientation).
15
+
16
+ ## How to use
17
+
18
+ - These rules load automatically on every Roo Code session — no
19
+ manual action required.
20
+ - Switch Roo Code modes (Architect / Code / Ask / Debug / Custom)
21
+ via the mode switcher to invoke different cognition profiles;
22
+ every mode still sees these rules.
23
+ - Slash commands and skills live under \`.augment/commands/\` and
24
+ \`.augment/skills/\`. Roo Code does not register them natively —
25
+ invoke them by name in chat (e.g. *"run the create-pr command"*).
26
+
27
+ See \`docs/setup/per-ide/roocode.md\` for the full activation guide.
28
+
29
+ Run \`./agent-config --help\` for available commands.
30
+ `;
31
+ export const CLAUDE_DESKTOP_MARKER = `# Agent Config bridge — Claude Desktop
32
+
33
+ This file marks the project as an \`event4u/agent-config\` consumer.
34
+
35
+ Claude Desktop is a **global-scope** tool — it reads config from
36
+ \`~/Library/Application Support/Claude/\` (macOS) and does not
37
+ auto-discover project files. This marker is informational only.
38
+
39
+ To wire Claude Desktop to this project's rules, run:
40
+ \`npx @event4u/agent-config init --ai claude-desktop --global\`
41
+
42
+ Canonical rule and skill source: \`.augment/\` (see \`AGENTS.md\`).
43
+ `;
44
+ export const AIDER_MARKER = `# Agent Config bridge — Aider
45
+
46
+ This file marks the project as an \`event4u/agent-config\` consumer.
47
+
48
+ Aider does not auto-discover this file. To activate it, add the
49
+ following to \`.aider.conf.yml\` (create if missing):
50
+
51
+ \`\`\`yaml
52
+ read:
53
+ - .aider/agent-config.md
54
+ \`\`\`
55
+
56
+ Or pass \`--read .aider/agent-config.md\` on the command line.
57
+
58
+ Canonical rule and skill source: \`.augment/\` (see \`AGENTS.md\`).
59
+ `;
60
+ export const CODEX_MARKER = `# Agent Config bridge — Codex CLI
61
+
62
+ This file marks the project as an \`event4u/agent-config\` consumer.
63
+
64
+ Codex CLI auto-discovers \`AGENTS.md\` at the project root — that file
65
+ is the canonical entry point. This marker is informational and tells
66
+ developers where the rules and skills live.
67
+
68
+ Canonical rule and skill source: \`.augment/\` (see project \`AGENTS.md\`).
69
+ `;
70
+ export const CONTINUE_MARKER = `# Agent Config bridge — Continue.dev
71
+
72
+ This file marks the project as an \`event4u/agent-config\` consumer.
73
+
74
+ Continue.dev auto-discovers \`.continue/rules/*.md\` as system-level
75
+ rules per session. The canonical rule and skill source lives under
76
+ \`.augment/\` (Augment portability mirror — see \`AGENTS.md\` for
77
+ orientation).
78
+ `;
79
+ export const KILOCODE_MARKER = `# Agent Config bridge — Kilo Code
80
+
81
+ This file marks the project as an \`event4u/agent-config\` consumer.
82
+
83
+ Kilo Code auto-discovers \`.kilocode/rules/*.md\` as system-level rules
84
+ per session. The canonical rule and skill source lives under
85
+ \`.augment/\` (Augment portability mirror — see \`AGENTS.md\` for
86
+ orientation).
87
+
88
+ ## How to use
89
+
90
+ - These rules load automatically on every Kilo Code session — no
91
+ manual action required.
92
+ - Switch Kilo Code modes (Architect / Code / Ask / Debug /
93
+ Orchestrator) via the mode switcher to invoke different
94
+ cognition profiles; every mode still sees these rules.
95
+ - Slash commands and skills live under \`.augment/commands/\` and
96
+ \`.augment/skills/\`. Kilo Code does not register them natively —
97
+ invoke them by name in chat (e.g. *"run the create-pr command"*).
98
+
99
+ See \`docs/setup/per-ide/kilocode.md\` for the full activation guide.
100
+ `;
101
+ export const ZED_MARKER = `# Agent Config bridge — Zed
102
+
103
+ This file marks the project as an \`event4u/agent-config\` consumer.
104
+
105
+ Zed reads \`.rules\` at the project root as system-level instructions —
106
+ that file is the canonical entry point. This marker is informational
107
+ and tells developers where the rules and skills live.
108
+
109
+ To activate agent-config under Zed, point Zed's \`.rules\` at the
110
+ canonical source (or symlink it):
111
+
112
+ \`\`\`
113
+ # Append to .rules at project root
114
+ @.augment/AGENTS.md
115
+ \`\`\`
116
+
117
+ Canonical rule and skill source: \`.augment/\` (see \`AGENTS.md\`).
118
+ `;
119
+ export const JETBRAINS_MARKER = `# Agent Config bridge — JetBrains AI Assistant
120
+
121
+ This file marks the project as an \`event4u/agent-config\` consumer.
122
+
123
+ JetBrains AI Assistant reads custom prompts and guidelines from
124
+ project-level config (\`.idea/\`) and user-scope settings. This marker
125
+ is informational — to wire agent-config into JetBrains AI, point the
126
+ assistant's custom-prompts path at \`.augment/\` or copy the relevant
127
+ rules into your JetBrains profile.
128
+
129
+ Canonical rule and skill source: \`.augment/\` (see \`AGENTS.md\`).
130
+ `;
131
+ export const KIRO_MARKER = `# Agent Config bridge — Kiro
132
+
133
+ This file marks the project as an \`event4u/agent-config\` consumer.
134
+
135
+ Kiro auto-discovers \`.kiro/steering/*.md\` as steering documents per
136
+ session. The canonical rule and skill source lives under \`.augment/\`
137
+ (Augment portability mirror — see \`AGENTS.md\` for orientation).
138
+
139
+ ## How to use
140
+
141
+ - Steering documents load automatically on every Kiro session — no
142
+ manual action required.
143
+ - For structured, plan-first work, use Kiro's **Spec** workflow
144
+ (the agent produces a spec → tasks → implementation under your
145
+ review). For free-form work, use **Vibe**. Both honor these
146
+ steering documents.
147
+ - Slash commands and skills live under \`.augment/commands/\` and
148
+ \`.augment/skills/\`. Kiro does not register them natively —
149
+ invoke them by name in chat (e.g. *"run the create-pr command"*).
150
+
151
+ See \`docs/setup/per-ide/kiro.md\` for the full activation guide.
152
+ `;
153
+ //# sourceMappingURL=marker-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marker-content.js","sourceRoot":"","sources":["../../../src/install/bridges/marker-content.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsB7B,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;CAYpC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;CAe3B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;CAS3B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;CAQ9B,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;CAqB9B,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;CAiBzB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;CAW/B,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;CAqB1B,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Marker bridges — informational `.md` files for AI tools without a
3
+ * programmatic hook surface (or with one we deliberately do not touch).
4
+ *
5
+ * Each builder drops a single UTF-8 marker pointing developers at the
6
+ * canonical rule source under `.augment/`. Markers are static — no
7
+ * dispatcher wiring, no JSON merge. Content lives next to the builder
8
+ * so snapshot tests pin both shape and copy verbatim.
9
+ *
10
+ * Mirrors `scripts/install.py:ensure_{roocode,claude_desktop,aider,
11
+ * codex,continue,kilocode,zed,jetbrains,kiro}_bridge` (lines 1555–1913).
12
+ */
13
+ import { join } from 'node:path';
14
+ import { AIDER_MARKER, CLAUDE_DESKTOP_MARKER, CODEX_MARKER, CONTINUE_MARKER, JETBRAINS_MARKER, KILOCODE_MARKER, KIRO_MARKER, ROOCODE_MARKER, ZED_MARKER, } from './marker-content.js';
15
+ function marker(toolId, relPath, content) {
16
+ return (ctx) => ({
17
+ kind: 'marker',
18
+ toolId,
19
+ target: join(ctx.projectRoot, ...relPath),
20
+ content,
21
+ label: relPath.join('/'),
22
+ });
23
+ }
24
+ /** `.roo/rules/agent-config.md` — Roo Code marker. */
25
+ export const buildRoocodeBridge = marker('roocode', ['.roo', 'rules', 'agent-config.md'], ROOCODE_MARKER);
26
+ /** `.claude-desktop/agent-config.md` — Claude Desktop informational marker. */
27
+ export const buildClaudeDesktopBridge = marker('claude-desktop', ['.claude-desktop', 'agent-config.md'], CLAUDE_DESKTOP_MARKER);
28
+ /** `.aider/agent-config.md` — Aider marker (no `.aider.conf.yml` mutation). */
29
+ export const buildAiderBridge = marker('aider', ['.aider', 'agent-config.md'], AIDER_MARKER);
30
+ /** `.codex/agent-config.md` — OpenAI Codex CLI marker (AGENTS.md is canonical). */
31
+ export const buildCodexBridge = marker('codex', ['.codex', 'agent-config.md'], CODEX_MARKER);
32
+ /** `.continue/rules/agent-config.md` — Continue.dev marker. */
33
+ export const buildContinueBridge = marker('continue', ['.continue', 'rules', 'agent-config.md'], CONTINUE_MARKER);
34
+ /** `.kilocode/rules/agent-config.md` — Kilo Code marker. */
35
+ export const buildKilocodeBridge = marker('kilocode', ['.kilocode', 'rules', 'agent-config.md'], KILOCODE_MARKER);
36
+ /** `.zed/agent-config.md` — Zed informational marker. */
37
+ export const buildZedBridge = marker('zed', ['.zed', 'agent-config.md'], ZED_MARKER);
38
+ /** `.jetbrains/agent-config.md` — JetBrains AI informational marker. */
39
+ export const buildJetbrainsBridge = marker('jetbrains', ['.jetbrains', 'agent-config.md'], JETBRAINS_MARKER);
40
+ /** `.kiro/steering/agent-config.md` — Kiro marker. */
41
+ export const buildKiroBridge = marker('kiro', ['.kiro', 'steering', 'agent-config.md'], KIRO_MARKER);
42
+ //# sourceMappingURL=markers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markers.js","sourceRoot":"","sources":["../../../src/install/bridges/markers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EACH,YAAY,EACZ,qBAAqB,EACrB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,cAAc,EACd,UAAU,GACb,MAAM,qBAAqB,CAAC;AAE7B,SAAS,MAAM,CACX,MAAc,EACd,OAA8B,EAC9B,OAAe;IAEf,OAAO,CAAC,GAAG,EAAsB,EAAE,CAAC,CAAC;QACjC,IAAI,EAAE,QAAQ;QACd,MAAM;QACN,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC;QACzC,OAAO;QACP,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;KAC3B,CAAC,CAAC;AACP,CAAC;AAED,sDAAsD;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CACpC,SAAS,EACT,CAAC,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,EACpC,cAAc,CACjB,CAAC;AAEF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAC1C,gBAAgB,EAChB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,EACtC,qBAAqB,CACxB,CAAC;AAEF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAClC,OAAO,EACP,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAC7B,YAAY,CACf,CAAC;AAEF,mFAAmF;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAClC,OAAO,EACP,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAC7B,YAAY,CACf,CAAC;AAEF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CACrC,UAAU,EACV,CAAC,WAAW,EAAE,OAAO,EAAE,iBAAiB,CAAC,EACzC,eAAe,CAClB,CAAC;AAEF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CACrC,UAAU,EACV,CAAC,WAAW,EAAE,OAAO,EAAE,iBAAiB,CAAC,EACzC,eAAe,CAClB,CAAC;AAEF,yDAAyD;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAChC,KAAK,EACL,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC3B,UAAU,CACb,CAAC;AAEF,wEAAwE;AACxE,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CACtC,WAAW,EACX,CAAC,YAAY,EAAE,iBAAiB,CAAC,EACjC,gBAAgB,CACnB,CAAC;AAEF,sDAAsD;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CACjC,MAAM,EACN,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,EACxC,WAAW,CACd,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Bridge builder contract — Phase A6.
3
+ *
4
+ * Each AI tool (Claude Code, Cursor, Cline, Windsurf, Copilot, …) gets
5
+ * one builder function that takes a {@link BridgeContext} and returns a
6
+ * {@link BridgeOutput}. Output is **declarative** — the apply layer
7
+ * decides between byte-merge (`mergeJsonContent`) and overwrite based
8
+ * on the {@link BridgeOutput.kind} discriminator.
9
+ *
10
+ * Pure functions:
11
+ * - No filesystem reads inside builders.
12
+ * - No string interpolation against env-vars or `Date.now()` — the
13
+ * snapshot tests rely on deterministic output.
14
+ * - Path resolution uses `bridges/paths.ts` helpers, not `path.join`
15
+ * scattered across bridges.
16
+ *
17
+ * Mirrors `scripts/install.py:749-1913` (the `# --- Bridge generators ---`
18
+ * block). Side effects from the Python `merge_json_file` / `write_file`
19
+ * calls move into the apply layer (Phase A4 + A5).
20
+ */
21
+ /**
22
+ * Shape of the `./agent-config dispatch:hook` invocation embedded in
23
+ * every hook-dispatcher bridge.
24
+ *
25
+ * Single source of truth so the snapshot tests can assert the command
26
+ * string contract without re-implementing the formatter per bridge.
27
+ */
28
+ export function dispatchCommand(platform, acEvent, native) {
29
+ return `./agent-config dispatch:hook --platform ${platform} --event ${acEvent} --native-event ${native}`;
30
+ }
31
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/install/bridges/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AA+EH;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,OAAgB,EAAE,MAAc;IAC9E,OAAO,2CAA2C,QAAQ,YAAY,OAAO,mBAAmB,MAAM,EAAE,CAAC;AAC7G,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * VSCode bridge — `.vscode/settings.json` plugin location wiring.
3
+ *
4
+ * Substrate bridge — declares the chat plugin location based on the
5
+ * detected package type. NPM consumers resolve through node_modules;
6
+ * other ecosystems use the bundled `./plugin/agent-config` directory.
7
+ *
8
+ * Mirror of `scripts/install.py:ensure_vscode_bridge` (lines 876–885).
9
+ */
10
+ import { join } from 'node:path';
11
+ const PLUGIN_PATHS = {
12
+ npm: './node_modules/@event4u/agent-config/plugin/agent-config',
13
+ };
14
+ const DEFAULT_PLUGIN_PATH = './plugin/agent-config';
15
+ /** Builder for the VSCode project-scope bridge. */
16
+ export const buildVscodeBridge = (ctx) => {
17
+ const pluginPath = PLUGIN_PATHS[ctx.packageType] ?? DEFAULT_PLUGIN_PATH;
18
+ return {
19
+ kind: 'json',
20
+ toolId: 'vscode',
21
+ target: join(ctx.projectRoot, '.vscode', 'settings.json'),
22
+ payload: { 'chat.pluginLocations': { [pluginPath]: true } },
23
+ label: '.vscode/settings.json',
24
+ };
25
+ };
26
+ //# sourceMappingURL=vscode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../../src/install/bridges/vscode.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,YAAY,GAAqC;IACnD,GAAG,EAAE,0DAA0D;CAClE,CAAC;AAEF,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAEpD,mDAAmD;AACnD,MAAM,CAAC,MAAM,iBAAiB,GAAkB,CAAC,GAAG,EAAoB,EAAE;IACtE,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,mBAAmB,CAAC;IACxE,OAAO;QACH,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,eAAe,CAAC;QACzD,OAAO,EAAE,EAAE,sBAAsB,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE;QAC3D,KAAK,EAAE,uBAAuB;KACjC,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Windsurf bridge — `.windsurf/hooks.json` project-scope hooks.
3
+ *
4
+ * Cascade fires project hooks with the workspace as cwd, so no
5
+ * trampoline is needed. `show_output: false` keeps post hooks silent
6
+ * (per Windsurf docs); concerns stream their own output via
7
+ * `agents/runtime/state/.dispatcher/`.
8
+ *
9
+ * Mirror of `scripts/install.py:ensure_windsurf_bridge` (lines 1331–1356).
10
+ */
11
+ import { join } from 'node:path';
12
+ import { dispatchCommand, } from './types.js';
13
+ export const WINDSURF_BINDINGS = [
14
+ ['session_start', 'post_setup_worktree'],
15
+ ['user_prompt_submit', 'pre_user_prompt'],
16
+ ['stop', 'post_cascade_response'],
17
+ ];
18
+ /** Builder for the Windsurf project-scope bridge. */
19
+ export const buildWindsurfBridge = (ctx) => {
20
+ const hooks = {};
21
+ for (const [acEvent, native] of WINDSURF_BINDINGS) {
22
+ (hooks[native] ??= []).push({
23
+ command: dispatchCommand('windsurf', acEvent, native),
24
+ show_output: false,
25
+ });
26
+ }
27
+ return {
28
+ kind: 'json',
29
+ toolId: 'windsurf',
30
+ target: join(ctx.projectRoot, '.windsurf', 'hooks.json'),
31
+ payload: { hooks },
32
+ label: '.windsurf/hooks.json',
33
+ };
34
+ };
35
+ //# sourceMappingURL=windsurf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../../src/install/bridges/windsurf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAGH,eAAe,GAElB,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,iBAAiB,GAA8C;IACxE,CAAC,eAAe,EAAO,qBAAqB,CAAC;IAC7C,CAAC,oBAAoB,EAAE,iBAAiB,CAAC;IACzC,CAAC,MAAM,EAAgB,uBAAuB,CAAC;CAClD,CAAC;AAEF,qDAAqD;AACrD,MAAM,CAAC,MAAM,mBAAmB,GAAkB,CAAC,GAAG,EAAoB,EAAE;IACxE,MAAM,KAAK,GAAiC,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAChD,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC;YACxB,OAAO,EAAE,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC;YACrD,WAAW,EAAE,KAAK;SACrB,CAAC,CAAC;IACP,CAAC;IACD,OAAO;QACH,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC;QACxD,OAAO,EAAE,EAAE,KAAK,EAAE;QAClB,KAAK,EAAE,sBAAsB;KAChC,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Conflict resolution — Phase A5 (simplified, three modes).
3
+ *
4
+ * Three decisions only, replacing the legacy `prompt → write / skip /
5
+ * abort` triple from `scripts/install.py:_resolve_file_conflict`:
6
+ *
7
+ * - `write` — target either does not exist OR policy authorises overwrite.
8
+ * - `skip` — target exists, known path, not forced: leave it alone.
9
+ * - `surface` — foreign collision: defer to the wizard's conflict screen
10
+ * (Phase B3). Headless callers translate `surface` to `skip`
11
+ * unless `policy.force` is true.
12
+ *
13
+ * JSON-aware deep-merge stays: callers that detect a `.json` target with
14
+ * matching `knownPointers` route through {@link mergeJsonContent} instead
15
+ * of byte-equality.
16
+ */
17
+ import { existsSync } from 'node:fs';
18
+ import { sha256File } from './plan.js';
19
+ /**
20
+ * Decide what to do with a single planned target.
21
+ *
22
+ * Decision matrix (mirrors the Python legacy with the 3-option prompt
23
+ * collapsed into `surface`):
24
+ *
25
+ * | Exists? | Idempotent? | Known? | Force? | → Outcome |
26
+ * |---------|-------------|--------|--------|------------|
27
+ * | no | — | — | — | `write` |
28
+ * | yes | yes | — | — | `skip` |
29
+ * | yes | no | yes | no | `skip` |
30
+ * | yes | no | yes | yes | `write` |
31
+ * | yes | no | no | yes | `write` |
32
+ * | yes | no | no | no | `surface` |
33
+ *
34
+ * Headless callers (B1 CLI) collapse `surface` to `skip` automatically
35
+ * because there is no UI to defer to; the apply layer records the entry
36
+ * under {@link ApplyResult.conflicts} so the wizard can pick it up next.
37
+ */
38
+ export function resolveFileConflict(inputs) {
39
+ const { targetPath, idempotent, exists, policy } = inputs;
40
+ if (!exists)
41
+ return 'write';
42
+ if (idempotent)
43
+ return 'skip';
44
+ const isKnown = policy.knownPaths.has(targetPath);
45
+ if (isKnown) {
46
+ return policy.force ? 'write' : 'skip';
47
+ }
48
+ if (policy.force)
49
+ return 'write';
50
+ return 'surface';
51
+ }
52
+ /**
53
+ * Recursive object merge — overlay wins, nested dicts merged, arrays replaced.
54
+ *
55
+ * Mirrors `scripts/install.py:deep_merge`. Arrays do **not** concatenate;
56
+ * Claude / Cursor / Cline hook configs rely on whole-array replacement to
57
+ * stay idempotent across re-runs.
58
+ *
59
+ * Returns a fresh object — both inputs remain untouched.
60
+ */
61
+ export function deepMerge(base, overlay) {
62
+ const out = { ...base };
63
+ for (const [key, value] of Object.entries(overlay)) {
64
+ const prev = out[key];
65
+ if (isPlainObject(prev) && isPlainObject(value)) {
66
+ out[key] = deepMerge(prev, value);
67
+ }
68
+ else {
69
+ out[key] = cloneValue(value);
70
+ }
71
+ }
72
+ return out;
73
+ }
74
+ /**
75
+ * Merge `overlay` into `existing` and return the canonical 4-space JSON.
76
+ *
77
+ * Format matches `write_json_file` in the Python installer (4-space indent,
78
+ * trailing newline, no ASCII-escape) so the apply layer can compare bytes
79
+ * to detect idempotent merges and skip the write.
80
+ */
81
+ export function mergeJsonContent(existing, overlay) {
82
+ const merged = deepMerge(existing, overlay);
83
+ return `${JSON.stringify(merged, null, 4)}\n`;
84
+ }
85
+ /**
86
+ * Parse JSON bytes leniently — invalid / non-object payloads collapse to `{}`.
87
+ *
88
+ * Matches `read_json_file` in the legacy script: corrupt JSON is treated
89
+ * as an empty doc rather than a hard failure, so the merge step always
90
+ * produces a well-formed output even when an upstream tool wrote a
91
+ * truncated config.
92
+ */
93
+ export function parseJsonLenient(content) {
94
+ try {
95
+ const parsed = JSON.parse(content);
96
+ if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)) {
97
+ return parsed;
98
+ }
99
+ }
100
+ catch {
101
+ /* fall through — treat as empty */
102
+ }
103
+ return {};
104
+ }
105
+ /** Heuristic for routing a {@link FileEntry} through JSON merge. */
106
+ export function isJsonTarget(entry) {
107
+ return entry.kind === 'deployed' && entry.path.endsWith('.json');
108
+ }
109
+ /**
110
+ * Threshold at which the wizard switches the conflict screen from
111
+ * single-pick to batch-resolution mode (council Finding #19).
112
+ *
113
+ * Below the threshold the user picks a resolution per row; at or above
114
+ * it the screen renders a summary table + global CTAs to dodge the
115
+ * 50-click stale-tree problem.
116
+ */
117
+ export const CONFLICT_BATCH_THRESHOLD = 5;
118
+ /**
119
+ * Walk an {@link InstallPlan} and return one {@link ConflictEntry} per
120
+ * planned target the policy would `surface` to the UI.
121
+ *
122
+ * Pure-ish — reads from the filesystem only to compute idempotency
123
+ * (`existsSync` + `sha256File`). Skips bridges (`sha256 === null`) since
124
+ * bridge writers own a separate idempotency model. Skips entries whose
125
+ * `path` is in `policy.knownPaths`, and skips entries that are
126
+ * byte-equal to the planned content. Returns an empty array when
127
+ * `policy.force` is true — overwrite mode silences the screen.
128
+ */
129
+ export function computeConflicts(plan) {
130
+ if (plan.policy.force)
131
+ return [];
132
+ const out = [];
133
+ for (const entries of Object.values(plan.filesByTool)) {
134
+ for (const entry of entries) {
135
+ if (entry.kind === 'bridge')
136
+ continue;
137
+ if (entry.sha256 === null)
138
+ continue;
139
+ if (!existsSync(entry.path))
140
+ continue;
141
+ if (plan.policy.knownPaths.has(entry.path))
142
+ continue;
143
+ const onDisk = sha256File(entry.path);
144
+ if (onDisk === entry.sha256)
145
+ continue;
146
+ out.push({
147
+ path: entry.path,
148
+ kind: entry.kind,
149
+ plannedSha256: entry.sha256,
150
+ existingSha256: onDisk,
151
+ mergeable: isJsonTarget(entry),
152
+ });
153
+ }
154
+ }
155
+ return out;
156
+ }
157
+ /**
158
+ * Expand a batch choice into a per-path {@link ConflictResolution} map.
159
+ *
160
+ * The wizard sends either `resolutions` directly (single-pick mode) or
161
+ * a `batchChoice` (≥ 5 conflicts) that the server fans out across every
162
+ * surfaced entry. `merge-json` maps non-JSON entries to `skip` since
163
+ * deep-merge is JSON-only — the council picked skip over overwrite so a
164
+ * single non-JSON file in a batch never silently overwrites.
165
+ */
166
+ export function expandBatchChoice(conflicts, choice) {
167
+ const out = {};
168
+ for (const c of conflicts) {
169
+ if (choice === 'skip-all') {
170
+ out[c.path] = 'skip';
171
+ }
172
+ else if (choice === 'overwrite-all') {
173
+ out[c.path] = 'overwrite';
174
+ }
175
+ else {
176
+ out[c.path] = c.mergeable ? 'merge' : 'skip';
177
+ }
178
+ }
179
+ return out;
180
+ }
181
+ function isPlainObject(v) {
182
+ return v !== null && typeof v === 'object' && !Array.isArray(v);
183
+ }
184
+ function cloneValue(v) {
185
+ if (Array.isArray(v)) {
186
+ return v.map(cloneValue);
187
+ }
188
+ if (isPlainObject(v)) {
189
+ const out = {};
190
+ for (const [k, val] of Object.entries(v))
191
+ out[k] = cloneValue(val);
192
+ return out;
193
+ }
194
+ return v;
195
+ }
196
+ //# sourceMappingURL=conflict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict.js","sourceRoot":"","sources":["../../src/install/conflict.ts"],"names":[],"mappings":"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"}