ECC/scripts/lib
Gaurav Dubey 0a926b45ba
fix(install): rewrite relative skill links for injected ecc namespace (#2399)
* fix(install): rewrite relative skill links for injected ecc namespace

Skill and rule markdown is byte-copied during a claude install, but the
home/project adapters inject an `ecc/` namespace segment
(skills/<id> -> skills/ecc/<id>, rules/<x> -> rules/ecc/<x>). Source-relative
links such as `../../rules/react/hooks.md` therefore broke after install: the
extra level changed what `../..` resolved to, and the link target itself moved
under rules/ecc/.

Rewrite relative links in namespaced markdown so they resolve to the file's
actual installed location, derived from the plan's own file placements (no
hardcoded namespace literal, so the links cannot drift from where files land).
Non-namespacing adapters and links to non-installed targets are left untouched;
URLs, anchors, absolute paths, and fenced code blocks are never rewritten.

Fixes #2340

* fix(install): keep non-namespaced markdown on the byte-for-byte copy path

Address review feedback: the markdown branch in applyInstallPlan diverted every
copy-file markdown operation through read+rewrite+write, so identity-mapped
markdown (source path == install path, no namespace injected) lost byte-for-byte
content and source mode bits even though no link rewrite was needed.

Gate the rewrite on isNamespacedSource() so only files whose install path
actually changed (e.g. skills/x -> skills/ecc/x) leave the copyFileSync path;
everything else is copied verbatim as before.

* test(install): emit failure stack in the link-rewrite test runner

Address review feedback: the local test() harness logged only error.message,
so a failing assertion lost its source line and diff. Print error.stack on
stderr on failure so broken rewrite cases stay diagnosable.
2026-07-03 20:39:24 -07:00
..
agent-proximity feat(layer4): line-range channel + trigger firing 2026-06-20 17:30:52 -04:00
control-pane feat(control-pane): serve 3D agent-airspace viz + /api/proximity feed (#2320) 2026-06-25 16:45:53 -07:00
github-coordination docs+chore: add README Security section; fix lint regressions on main 2026-06-16 02:08:14 -04:00
install fix(install): rewrite relative skill links for injected ecc namespace (#2399) 2026-07-03 20:39:24 -07:00
install-targets fix(install-targets): validate compiled OpenCode plugin before install (#2041) 2026-05-25 14:07:52 -04:00
mcp-inventory feat: worktree-lifecycle service (deterministic conflict prediction + safe GC) (#2164) 2026-06-07 13:00:08 +08:00
session-adapters feat: worktree-lifecycle service (deterministic conflict prediction + safe GC) (#2164) 2026-06-07 13:00:08 +08:00
skill-evolution feat(design): skill health dashboard mockup (#518) 2026-03-16 14:01:41 -07:00
skill-improvement fix: port safe ci cleanup from backlog 2026-04-01 16:09:54 -07:00
state-store feat: add work items CLI 2026-05-11 12:24:12 -04:00
worktree-lifecycle feat: worktree-lifecycle service (deterministic conflict prediction + safe GC) (#2164) 2026-06-07 13:00:08 +08:00
agent-compress.js feat: agent description compression with lazy loading (#696) 2026-03-20 03:53:22 -07:00
agent-data-home.js feat: Cursor-independent ECC memory via ECC_AGENT_DATA_HOME (#2066) 2026-06-07 13:27:00 +08:00
cost-estimate.js feat: add ECC statusline observability hooks 2026-05-11 23:44:06 -04:00
cursor-agent-names.js fix: namespace cursor agent installs 2026-04-30 02:19:57 -04:00
ecc_dashboard_runtime.py fix: port hook session and dashboard safety fixes 2026-05-11 02:53:28 -04:00
github-coordination.js refactor: apply code-review findings to github-native coordination 2026-06-11 14:05:42 -04:00
github-discussions.js fix: skip disabled discussion queries in platform audit 2026-05-17 20:32:09 -04:00
harness-adapter-compliance.js feat: add zed install target 2026-05-17 07:06:49 -04:00
hook-flags.js feat: add dry-run mode for hook execution (#2116) (#2188) 2026-06-15 14:01:21 -04:00
inspection.js feat: agent compression, inspection logic, governance hooks (#491, #485, #482) (#688) 2026-03-20 01:38:13 -07:00
install-executor.js fix(install): dedupe copy-file operations sharing a destination (#2429) 2026-07-03 20:37:32 -07:00
install-lifecycle.js style: apply repo formatter to the security-fix files (no behavior change) 2026-06-18 20:03:24 -04:00
install-manifests.js fix: shrink default OpenCode install surface and gate hooks-runtime (#2140) 2026-06-07 13:26:14 +08:00
install-state.js feat: strengthen install lifecycle and target adapters (#512) 2026-03-15 21:47:31 -07:00
llm-summary.js feat(session): LLM-powered session summary via claude -p (#2388) 2026-06-29 15:55:01 -07:00
mcp-config.js feat: support disabling bundled mcp servers 2026-04-05 14:37:28 -07:00
observer-sessions.js fix: port continuous-learning observer fixes 2026-05-11 03:35:42 -04:00
orchestration-session.js feat: orchestration harness, selective install, observer improvements 2026-03-14 12:55:25 -07:00
package-manager.d.ts fix: Windows path support, error handling, and dedup in validators 2026-02-12 15:57:20 -08:00
package-manager.js Fix failing workflows: trim action in getCommandPattern and remove broken AgentShield scan 2026-02-18 08:06:25 +00:00
path-safety.js style: apply repo formatter to the security-fix files (no behavior change) 2026-06-18 20:03:24 -04:00
project-detect.js fix(project-detect): match packageKeys on boundaries, not substrings (#2181) 2026-06-07 13:25:34 +08:00
resolve-ecc-root.js refactor: consolidate duplicated hook-root resolver into shared resolveEccRoot() (#2368) (#2410) 2026-07-03 20:01:17 -07:00
resolve-formatter.js fix(tests): resolve 10 failing tests on Windows (#2307) 2026-06-29 15:54:49 -07:00
session-aliases.d.ts feat: Cursor-independent ECC memory via ECC_AGENT_DATA_HOME (#2066) 2026-06-07 13:27:00 +08:00
session-aliases.js feat: Cursor-independent ECC memory via ECC_AGENT_DATA_HOME (#2066) 2026-06-07 13:27:00 +08:00
session-bridge.js fix(lib): retry rename on Windows EPERM/EACCES/EBUSY in writeBridgeAtomic 2026-05-19 04:57:10 -04:00
session-manager.d.ts fix: fold session manager blockers into one candidate 2026-03-24 23:08:27 -04:00
session-manager.js refactor: consolidate duplicated hook-root resolver into shared resolveEccRoot() (#2368) (#2410) 2026-07-03 20:01:17 -07:00
shell-split.js fix(hooks): allow tmux-wrapped dev server commands (#321) 2026-03-07 14:47:49 -08:00
shell-substitution.js fix(hooks): close grouped command bypasses in gateguard (#1912) 2026-05-15 01:39:15 -04:00
tmux-worktree-orchestrator.js fix: resolve 8 test failures on main (install pipeline, orchestrator, repair) (#564) 2026-03-18 03:03:31 -07:00
transcript-context.js fix: resolve four bug reports (#2290, #2282, #2276, #2272) 2026-06-18 16:49:58 -04:00
utils.d.ts feat: Cursor-independent ECC memory via ECC_AGENT_DATA_HOME (#2066) 2026-06-07 13:27:00 +08:00
utils.js feat: Cursor-independent ECC memory via ECC_AGENT_DATA_HOME (#2066) 2026-06-07 13:27:00 +08:00