{"_id":"@dylanrussell/chezmoi-guard","_rev":"8-4243bb3066e624a1e8f419902882c269","name":"@dylanrussell/chezmoi-guard","dist-tags":{"latest":"2.1.0"},"versions":{"1.0.0":{"name":"@dylanrussell/chezmoi-guard","version":"1.0.0","keywords":["opencode","opencode-plugin","chezmoi","dotfiles","file-manager","guard"],"author":{"name":"Dylan Russell"},"license":"MIT","_id":"@dylanrussell/chezmoi-guard@1.0.0","maintainers":[{"name":"dylanrussell","email":"dyl.russell@gmail.com"}],"homepage":"https://github.com/dylanrussellmd/chezmoi-guard#readme","bugs":{"url":"https://github.com/dylanrussellmd/chezmoi-guard/issues"},"dist":{"shasum":"fc2358fd4f8bb44ff16f16ec08b22f686f8658b8","tarball":"https://registry.npmjs.org/@dylanrussell/chezmoi-guard/-/chezmoi-guard-1.0.0.tgz","fileCount":6,"integrity":"sha512-TIvlH9xdADJIVmUS8VSBgzh5KNlS1lNQxBnTzeeNWSwfrKfOu5kuqNhqmbYnWb/BFCOhnb9AbwwbWpNf9ujLOw==","signatures":[{"sig":"MEQCICf0SbSD+TWQ9GAt9n4GIu4yXSYdUZfTY0PJCPQrGwBYAiBEg1Xf0YkJpUo0auksFgu+DdN+zCJEMo2EvbwwSRx7qQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58411},"main":"./dist/plugin.js","pnpm":{"overrides":{"uuid":">=14.0.0","vite":">=6.4.2","esbuild":">=0.25.0"}},"type":"module","types":"./dist/plugin.d.ts","module":"./dist/plugin.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/plugin.d.ts","import":"./dist/plugin.js"}},"scripts":{"lint":"biome check src tests","test":"vitest run --coverage","build":"tsup","format":"biome format --write src tests","lint:fix":"biome check --write src tests","test:unit":"vitest run tests/unit","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run lint && npm run typecheck && npm run build && npm run test"},"_npmUser":{"name":"dylanrussell","email":"dyl.russell@gmail.com"},"repository":{"url":"git+https://github.com/dylanrussellmd/chezmoi-guard.git","type":"git"},"_npmVersion":"11.12.1","description":"Redirect opencode agent edits to chezmoi source files, then sync. Intercepts edit/write/apply_patch so agents never edit chezmoi-managed targets out-of-band.","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","vitest":"^4.1.5","typescript":"^5.6.0","@types/node":"^20.14.0","@biomejs/biome":"^1.9.4","@opencode-ai/plugin":"^1.17.15","@vitest/coverage-v8":"^4.1.5"},"peerDependencies":{"@opencode-ai/plugin":"^1.14.0"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/chezmoi-guard_1.0.0_1783573397780_0.9579940389706434","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@dylanrussell/chezmoi-guard","version":"1.0.1","keywords":["opencode","opencode-plugin","chezmoi","dotfiles","file-manager","guard"],"author":{"name":"Dylan Russell"},"license":"MIT","_id":"@dylanrussell/chezmoi-guard@1.0.1","maintainers":[{"name":"dylanrussell","email":"dyl.russell@gmail.com"}],"homepage":"https://github.com/dylanrussellmd/opencode-chezmoi-guard#readme","bugs":{"url":"https://github.com/dylanrussellmd/opencode-chezmoi-guard/issues"},"dist":{"shasum":"f018bd19353d079c84cca6259fbc34f591a02f84","tarball":"https://registry.npmjs.org/@dylanrussell/chezmoi-guard/-/chezmoi-guard-1.0.1.tgz","fileCount":6,"integrity":"sha512-PlAf4q5Cru/bPkexwI/ekuoXlfm3BgAoQPOQwL+VJ6vo5DaoIk0LAJ+2QUgaZhBJQhZb9Vxn0N2NKK58B3Qwrw==","signatures":[{"sig":"MEQCIGN+dJWbrJHW5lNIllfq5f6WLugtRkqJml/xHZ66+2M9AiAdUoGmg4XOO5H09ZST+Wp6TF5dlR26MYO47kliwG5nGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dylanrussell%2fchezmoi-guard@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":59330},"main":"./dist/plugin.js","pnpm":{"overrides":{"uuid":">=14.0.0","vite":">=6.4.2","esbuild":">=0.25.0"}},"type":"module","types":"./dist/plugin.d.ts","module":"./dist/plugin.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/plugin.d.ts","import":"./dist/plugin.js"}},"gitHead":"94a2b7ade409805c090c3ecac63387ad13f64158","scripts":{"lint":"biome check src tests","test":"vitest run --coverage","build":"tsup","format":"biome format --write src tests","version":"node scripts/sync-version.mjs && git add src/version.ts","lint:fix":"biome check --write src tests","test:unit":"vitest run tests/unit","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run lint && npm run typecheck && npm run build && npm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:279a6f0c-04f8-4ad7-8ced-c7d6066e7cb1"}},"repository":{"url":"git+https://github.com/dylanrussellmd/opencode-chezmoi-guard.git","type":"git"},"_npmVersion":"11.18.0","description":"Redirect opencode agent edits to chezmoi source files, then sync. Intercepts edit/write/apply_patch so agents never edit chezmoi-managed targets out-of-band.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","vitest":"^4.1.5","typescript":"^5.6.0","@types/node":"^20.14.0","@biomejs/biome":"^1.9.4","@opencode-ai/plugin":"^1.17.15","@vitest/coverage-v8":"^4.1.5"},"peerDependencies":{"@opencode-ai/plugin":"^1.14.0"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/chezmoi-guard_1.0.1_1783573800104_0.028991711162072553","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@dylanrussell/chezmoi-guard","version":"1.1.0","keywords":["opencode","opencode-plugin","chezmoi","dotfiles","file-manager","guard"],"author":{"name":"Dylan Russell"},"license":"MIT","_id":"@dylanrussell/chezmoi-guard@1.1.0","maintainers":[{"name":"dylanrussell","email":"dyl.russell@gmail.com"}],"homepage":"https://github.com/dylanrussellmd/opencode-chezmoi-guard#readme","bugs":{"url":"https://github.com/dylanrussellmd/opencode-chezmoi-guard/issues"},"dist":{"shasum":"9a0b595ace6defc159992bd0f6fba229e2161b97","tarball":"https://registry.npmjs.org/@dylanrussell/chezmoi-guard/-/chezmoi-guard-1.1.0.tgz","fileCount":6,"integrity":"sha512-lQ6m6vsSuRNIC26ynLDrvck6mVrvXqZJrobCvUZa5v3XjWLtOpfFuqiw65EhX1NYd4iFIBhFRHYiMN6GLBdbNg==","signatures":[{"sig":"MEUCIQCMoRl/RMbUbse6h5rnKKJV6gtgSgpdKZ4h7BcoYQp4wAIgLGyA1wUV+cXEP1ix1JnXvb1ue0Sr5vHwGfutFIqNMT4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dylanrussell%2fchezmoi-guard@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":72473},"main":"./dist/plugin.js","pnpm":{"overrides":{"uuid":">=14.0.0","vite":">=6.4.2","esbuild":">=0.25.0"}},"type":"module","types":"./dist/plugin.d.ts","module":"./dist/plugin.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/plugin.d.ts","import":"./dist/plugin.js"}},"gitHead":"9f8d60034178eff4698c10982ca4f8ace91eaca8","scripts":{"lint":"biome check src tests","test":"vitest run --coverage","build":"tsup","format":"biome format --write src tests","version":"node scripts/sync-version.mjs && git add src/version.ts","lint:fix":"biome check --write src tests","test:unit":"vitest run tests/unit","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run lint && npm run typecheck && npm run build && npm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:279a6f0c-04f8-4ad7-8ced-c7d6066e7cb1"}},"repository":{"url":"git+https://github.com/dylanrussellmd/opencode-chezmoi-guard.git","type":"git"},"_npmVersion":"11.18.0","description":"Redirect opencode agent edits to chezmoi source files, then sync. Intercepts edit/write/apply_patch so agents never edit chezmoi-managed targets out-of-band.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","vitest":"^4.1.5","typescript":"^5.6.0","@types/node":"^20.14.0","@biomejs/biome":"^1.9.4","@opencode-ai/plugin":"^1.17.15","@vitest/coverage-v8":"^4.1.5"},"peerDependencies":{"@opencode-ai/plugin":"^1.14.0"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/chezmoi-guard_1.1.0_1783577709784_0.8121342125253825","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@dylanrussell/chezmoi-guard","version":"1.1.1","keywords":["opencode","opencode-plugin","chezmoi","dotfiles","file-manager","guard"],"author":{"name":"Dylan Russell"},"license":"MIT","_id":"@dylanrussell/chezmoi-guard@1.1.1","maintainers":[{"name":"dylanrussell","email":"dyl.russell@gmail.com"}],"homepage":"https://github.com/dylanrussellmd/opencode-chezmoi-guard#readme","bugs":{"url":"https://github.com/dylanrussellmd/opencode-chezmoi-guard/issues"},"dist":{"shasum":"cef992feb8c91b0bee05cca045f525d31a1e94ac","tarball":"https://registry.npmjs.org/@dylanrussell/chezmoi-guard/-/chezmoi-guard-1.1.1.tgz","fileCount":6,"integrity":"sha512-gtgYxU0akaPYP9SQPEuWwEcIbPNkfkn3FD+4nWxSbu9rHOVDgk2eMKNeF4R7BWsoJtFbPgeYCYZhbKKDgaDj2w==","signatures":[{"sig":"MEYCIQDkNKQpcXvxt1RRprhYemVT3Yt8Z6Gzcz9u9tiB+IrnMAIhAOUvkCqYwsR6omm3O6C1PhCPTVARv9lnyYL60lqFFxhG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dylanrussell%2fchezmoi-guard@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":81908},"main":"./dist/plugin.js","pnpm":{"overrides":{"uuid":">=14.0.0","vite":">=6.4.2","esbuild":">=0.25.0"}},"type":"module","types":"./dist/plugin.d.ts","module":"./dist/plugin.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/plugin.d.ts","import":"./dist/plugin.js"}},"gitHead":"fda59d68784d8439212194c52b4b91c8916c8ff8","scripts":{"lint":"biome check src tests","test":"vitest run --coverage","build":"tsup","format":"biome format --write src tests","version":"node scripts/sync-version.mjs && git add src/version.ts","lint:fix":"biome check --write src tests","test:unit":"vitest run tests/unit","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run lint && npm run typecheck && npm run build && npm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:279a6f0c-04f8-4ad7-8ced-c7d6066e7cb1"}},"repository":{"url":"git+https://github.com/dylanrussellmd/opencode-chezmoi-guard.git","type":"git"},"_npmVersion":"11.18.0","description":"Redirect opencode agent edits to chezmoi source files, then sync. Intercepts edit/write/apply_patch so agents never edit chezmoi-managed targets out-of-band.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","vitest":"^4.1.5","typescript":"^5.6.0","@types/node":"^20.14.0","@biomejs/biome":"^1.9.4","@opencode-ai/plugin":"^1.17.15","@vitest/coverage-v8":"^4.1.5"},"peerDependencies":{"@opencode-ai/plugin":"^1.14.0"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/chezmoi-guard_1.1.1_1784238627150_0.47482402317789885","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@dylanrussell/chezmoi-guard","version":"1.1.2","keywords":["opencode","opencode-plugin","chezmoi","dotfiles","file-manager","guard"],"author":{"name":"Dylan Russell"},"license":"MIT","_id":"@dylanrussell/chezmoi-guard@1.1.2","maintainers":[{"name":"dylanrussell","email":"dyl.russell@gmail.com"}],"homepage":"https://github.com/dylanrussellmd/opencode-chezmoi-guard#readme","bugs":{"url":"https://github.com/dylanrussellmd/opencode-chezmoi-guard/issues"},"dist":{"shasum":"eecf8b359b31227296455a3439565d9d7e170ba4","tarball":"https://registry.npmjs.org/@dylanrussell/chezmoi-guard/-/chezmoi-guard-1.1.2.tgz","fileCount":6,"integrity":"sha512-aqB3A/6Pd0BP+3C3I+lVCiSH1OXu47wdrGLeghJdwT5/tFm/0+z2eBqIxWkga2HGDSy043qKE/9ml3Q6Lgl38g==","signatures":[{"sig":"MEUCIQDLVlLxs5ZoP/nrKmoIL3GZUX5S+6j3/psEOyTEx8iO0wIgcSzxiEwPZ9IntveqCKq8jbhmWbIIuytLMP2S25MGU1c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dylanrussell%2fchezmoi-guard@1.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":82742},"main":"./dist/plugin.js","pnpm":{"overrides":{"uuid":">=14.0.0","vite":">=6.4.2","esbuild":">=0.25.0"}},"type":"module","types":"./dist/plugin.d.ts","module":"./dist/plugin.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/plugin.d.ts","import":"./dist/plugin.js"}},"gitHead":"0f7e32f9f113c6edc9ca25644892eda9f0f3575f","scripts":{"lint":"biome check src tests","test":"vitest run --coverage","build":"tsup","format":"biome format --write src tests","version":"node scripts/sync-version.mjs && git add src/version.ts","lint:fix":"biome check --write src tests","test:unit":"vitest run tests/unit","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run lint && npm run typecheck && npm run build && npm run test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:279a6f0c-04f8-4ad7-8ced-c7d6066e7cb1"}},"repository":{"url":"git+https://github.com/dylanrussellmd/opencode-chezmoi-guard.git","type":"git"},"_npmVersion":"11.18.0","description":"Redirect opencode agent edits to chezmoi source files, then sync. Intercepts edit/write/apply_patch so agents never edit chezmoi-managed targets out-of-band.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","vitest":"^4.1.5","typescript":"^5.6.0","@types/node":"^20.14.0","@biomejs/biome":"^1.9.4","@opencode-ai/plugin":"^1.17.15","@vitest/coverage-v8":"^4.1.5"},"peerDependencies":{"@opencode-ai/plugin":"^1.14.0"},"peerDependenciesMeta":{"@opencode-ai/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/chezmoi-guard_1.1.2_1784322180026_0.009306084553210914","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@dylanrussell/chezmoi-guard","version":"2.0.0","keywords":["opencode","opencode-plugin","chezmoi","dotfiles","file-manager","guard"],"author":{"name":"Dylan Russell"},"license":"MIT","_id":"@dylanrussell/chezmoi-guard@2.0.0","maintainers":[{"name":"dylanrussell","email":"dyl.russell@gmail.com"}],"homepage":"https://github.com/dylanrussellmd/opencode-chezmoi-guard#readme","bugs":{"url":"https://github.com/dylanrussellmd/opencode-chezmoi-guard/issues"},"dist":{"shasum":"465f4af87cfc7693c40385023893f25e2a53abbd","tarball":"https://registry.npmjs.org/@dylanrussell/chezmoi-guard/-/chezmoi-guard-2.0.0.tgz","fileCount":8,"integrity":"sha512-76TaMfR4yLZ0SQY9F9AhYIhKQ8mOncN4mlmqyYxNswqyKFd2yRpvHQjgSiSeZOo3AGbf35g1M+FWp+NEWLK5uw==","signatures":[{"sig":"MEYCIQC7eWJVq0zj6OuzC748CbHudGuDDCAc3p2tYqugx1WiWwIhAJqBxoy5Hyxui6h38LR9+iToIF/Fl1DIzHQStuY8wj+G","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC2EZmntIbHaPSxpvXfFAbJ/eHbl4NgZgtMV4ebIuL17QIgB/sYB2ilQ7Pvn2pMSoz8TbaQ6+rYNG6oYZmARWhbVrY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dylanrussell%2fchezmoi-guard@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":55306},"main":"./dist/plugin.js","pnpm":{"overrides":{"uuid":">=14.0.0","vite":">=6.4.2","esbuild":">=0.25.0"}},"type":"module","types":"./dist/plugin.d.ts","module":"./dist/plugin.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/plugin.d.ts","import":"./dist/plugin.js"}},"gitHead":"3e6fd5d46591ecfa7e9bfffba94563537b78ddbb","scripts":{"lint":"biome check src tests","test":"vitest run --coverage","build":"tsup","format":"biome format --write src tests","version":"node scripts/sync-version.mjs && git add src/version.ts","lint:fix":"biome check --write src tests","test:unit":"vitest run tests/unit","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run lint && npm run typecheck && npm run build && npm run test","test:integration":"npm run build && node scripts/integration-smoke.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:279a6f0c-04f8-4ad7-8ced-c7d6066e7cb1"}},"repository":{"url":"git+https://github.com/dylanrussellmd/opencode-chezmoi-guard.git","type":"git"},"_npmVersion":"11.19.1","description":"Native OpenCode V2 guard: block managed target mutations, guide explicit source edits, and preserve host permission checks.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","vitest":"^4.1.5","typescript":"^5.6.0","@types/node":"^20.14.0","@biomejs/biome":"^1.9.4","@opencode/plugin":"2.0.8","@vitest/coverage-v8":"^4.1.5"},"peerDependencies":{"@opencode/plugin":"2.0.8"},"peerDependenciesMeta":{"@opencode/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/chezmoi-guard_2.0.0_1789947544830_0.2577129609714739","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@dylanrussell/chezmoi-guard","version":"2.0.1","keywords":["opencode","opencode-plugin","chezmoi","dotfiles","file-manager","guard"],"author":{"name":"Dylan Russell"},"license":"MIT","_id":"@dylanrussell/chezmoi-guard@2.0.1","maintainers":[{"name":"dylanrussell","email":"dyl.russell@gmail.com"}],"homepage":"https://github.com/dylanrussellmd/opencode-chezmoi-guard#readme","bugs":{"url":"https://github.com/dylanrussellmd/opencode-chezmoi-guard/issues"},"dist":{"shasum":"43914e44522d9f71f9318befb5582dcab6c1937e","tarball":"https://registry.npmjs.org/@dylanrussell/chezmoi-guard/-/chezmoi-guard-2.0.1.tgz","fileCount":12,"integrity":"sha512-bXzfSYYqWgW/P+djowrY1OouwZpsMptBuUQrJNdfbNDuiLDaLBrJhZ+2caKXk8wecYmVCrsZGTPxVfCzxFv6Ww==","signatures":[{"sig":"MEUCIQD9/p0fAv+uACoRifA2S/2E/6vuPK8R39glzUwkF8unPgIgTgWlp47uwf35IRYrEq9FFeV7wqbIltKQfPr/uKBQuSo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCohd/+7I7D7QKP8uh+T6JkPTwKlBY2nQ0AiwaFEE9jngIgc+d2wE3KjOwH8j16wB4zQx2ljNgTY6oj8y/ZTOv/RWc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dylanrussell%2fchezmoi-guard@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":69942},"main":"./dist/plugin.js","pnpm":{"overrides":{"uuid":">=14.0.0","vite":">=6.4.2","esbuild":">=0.25.0"}},"type":"module","types":"./dist/plugin.d.ts","module":"./dist/plugin.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/plugin.d.ts","import":"./dist/plugin.js"},"./tui":{"types":"./dist/tui.d.ts","import":"./dist/tui.js"}},"gitHead":"e2459d38cd96870bd5bc1aebced4f9840d846fb6","scripts":{"lint":"biome check src tests","test":"vitest run --coverage","build":"tsup","format":"biome format --write src tests","version":"node scripts/sync-version.mjs && git add src/version.ts","lint:fix":"biome check --write src tests","test:unit":"vitest run tests/unit","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run lint && npm run typecheck && npm run build && npm run test","test:integration":"npm run build && node scripts/integration-smoke.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:279a6f0c-04f8-4ad7-8ced-c7d6066e7cb1"}},"overrides":{"esbuild":"^0.28.1","postcss":"^8.5.23","nanoid@3":"^3.3.18","@opentelemetry/core":"^2.8.0"},"repository":{"url":"git+https://github.com/dylanrussellmd/opencode-chezmoi-guard.git","type":"git"},"_npmVersion":"11.19.1","description":"Native OpenCode V2 guard: block managed target mutations, guide explicit source edits, and preserve host permission checks.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","vitest":"^4.1.11","typescript":"^5.6.0","@types/node":"^20.14.0","@biomejs/biome":"^1.9.4","@opencode/plugin":"2.0.8","@vitest/coverage-v8":"^4.1.11"},"peerDependencies":{"@opencode/plugin":"2.0.8"},"peerDependenciesMeta":{"@opencode/plugin":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/chezmoi-guard_2.0.1_1789950119003_0.4455562176571408","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"_id":"@dylanrussell/chezmoi-guard@2.1.0","bugs":{"url":"https://github.com/dylanrussellmd/opencode-chezmoi-guard/issues"},"dist":{"shasum":"0fdac842aaa480dd3eefc99121cd4f4bf68eeb78","tarball":"https://registry.npmjs.org/@dylanrussell/chezmoi-guard/-/chezmoi-guard-2.1.0.tgz","fileCount":12,"integrity":"sha512-yV6i9nOwCdMH6whQuFpVRJTZ9u4XrndHldBSsyVzsVZCWk1gt8pG24TkrvrPnPnvx1UP1YK5HiSyQsPOcS4XRw==","signatures":[{"sig":"MEUCIQDfEdF2JOQ6Hrx1uIShmva5gXEHJllzYfQCJANxMAGiQQIgHeRJnk+/gy8OrKgxUkj4TmoeHzGI+djL5G09U5ls4H0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDipYwzQZd1gsNPhCj36uuWuNJruGWY9jFH2ugAlo0I4QIgcu1D21aS9WDwURDUUaaesCwGJGEihGUQKiMyLN7uA8I="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dylanrussell%2fchezmoi-guard@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":77880},"main":"./dist/plugin.js","name":"@dylanrussell/chezmoi-guard","pnpm":{"overrides":{"uuid":">=14.0.0","vite":">=6.4.2","esbuild":">=0.25.0"}},"type":"module","types":"./dist/plugin.d.ts","author":{"name":"Dylan Russell"},"module":"./dist/plugin.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/plugin.d.ts","import":"./dist/plugin.js"},"./tui":{"types":"./dist/tui.d.ts","import":"./dist/tui.js"}},"gitHead":"0d6974bd7d330b40f324312ede3ee412175f9db4","license":"MIT","scripts":{"lint":"biome check src tests","test":"vitest run --coverage","build":"tsup","format":"biome format --write src tests","version":"node scripts/sync-version.mjs && git add src/version.ts","lint:fix":"biome check --write src tests","test:unit":"vitest run tests/unit","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run lint && npm run typecheck && npm run build && npm run test","test:integration":"npm run build && node scripts/integration-smoke.mjs"},"version":"2.1.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"279a6f0c-04f8-4ad7-8ced-c7d6066e7cb1"}},"homepage":"https://github.com/dylanrussellmd/opencode-chezmoi-guard#readme","keywords":["opencode","opencode-plugin","chezmoi","dotfiles","file-manager","guard"],"overrides":{"esbuild":"^0.28.1","postcss":"^8.5.23","nanoid@3":"^3.3.18","@opentelemetry/core":"^2.8.0"},"repository":{"url":"git+https://github.com/dylanrussellmd/opencode-chezmoi-guard.git","type":"git"},"_npmVersion":"11.20.0","description":"Native OpenCode V2 guard: block managed target mutations, guide explicit source edits, and preserve host permission checks.","directories":{},"maintainers":[{"name":"dylanrussell","email":"dyl.russell@gmail.com"}],"_nodeVersion":"24.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","vitest":"^4.1.11","typescript":"^5.6.0","@types/node":"^20.14.0","@biomejs/biome":"^1.9.4","@opencode/plugin":"2.0.19","@vitest/coverage-v8":"^4.1.11"},"peerDependencies":{"@opencode/plugin":"2.0.8 || 2.0.19"},"peerDependenciesMeta":{"@opencode/plugin":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/chezmoi-guard_2.1.0_1790743825712_0.5131817970954151"}}},"time":{"created":"2026-07-09T05:03:17.631Z","modified":"2026-09-30T04:50:26.268Z","1.0.0":"2026-07-09T05:03:17.919Z","1.0.1":"2026-07-09T05:10:00.254Z","1.1.0":"2026-07-09T06:15:09.929Z","1.1.1":"2026-07-16T21:50:27.296Z","1.1.2":"2026-07-17T21:03:00.177Z","2.0.0":"2026-09-20T23:39:04.928Z","2.0.1":"2026-09-21T00:21:59.096Z","2.1.0":"2026-09-30T04:50:25.806Z"},"bugs":{"url":"https://github.com/dylanrussellmd/opencode-chezmoi-guard/issues"},"author":{"name":"Dylan Russell"},"license":"MIT","homepage":"https://github.com/dylanrussellmd/opencode-chezmoi-guard#readme","keywords":["opencode","opencode-plugin","chezmoi","dotfiles","file-manager","guard"],"repository":{"url":"git+https://github.com/dylanrussellmd/opencode-chezmoi-guard.git","type":"git"},"description":"Native OpenCode V2 guard: block managed target mutations, guide explicit source edits, and preserve host permission checks.","maintainers":[{"name":"dylanrussell","email":"dyl.russell@gmail.com"}],"readme":"# chezmoi-guard\n\nNative OpenCode V2 guard for chezmoi-managed files. **Managed target mutations are blocked; automatic redirection and apply are disabled.**\n\n## Compatibility and installation\n\nAudited against OpenCode **2.0.8** and **2.0.19**: each release's published plugin types and tool-execution source, plus a live-host smoke run. Other releases are unverified; the guard relies on host behaviour (hook order, error propagation, tool input schemas) that can change between releases. V1 users should stay on 1.1.2.\n\n```jsonc\n{\n  \"plugins\": [\"@dylanrussell/chezmoi-guard@2.1.0\"]\n}\n```\n\nFor local integration, use a default-exporting entry in a discovered `.opencode/plugins/` definition directory that re-exports `dist/plugin.js`. Do not rely on `file:` plugin URLs for the installed loader.\n\nRequires a working `chezmoi` CLI and configuration. Missing CLI, configuration errors, malformed inventories and lookup failures **block mutations**, and the refusal names the cause. Each lookup runs `chezmoi --no-tty` with stdin closed and a 15-second timeout, so a template that prompts for a password blocks the edit instead of hanging OpenCode. A successful inventory with no matching path leaves ordinary unmanaged files and explicit source edits unchanged for normal host permission checks.\n\n## Authorization boundary\n\nOpenCode executes tool before-hooks **before** its built-in tools check permissions. Rewriting a denied target to an allowed source loses the original target's authorization check. Running `chezmoi apply` in an after-hook would also write the target outside the tool permission system.\n\nThe published plugin permission domain exposes pending-request `list/get/reply` and an evaluation hook, but no authorization-request/assert API. The guard therefore uses the conservative fallback:\n\n- Never rewrites tool input or invokes `chezmoi apply`.\n- Blocks `edit`, `write`, `patch` and compatible `apply_patch` calls addressing managed targets, including templates, modify scripts and managed symlinks.\n- Refuses any of those calls whose target path it cannot determine (an unrecognised input shape or a patch with no recognised header), rather than letting it through unchecked.\n- Inspects every Add/Update/Delete/Move patch header before execution; a managed path blocks the whole patch.\n- Checks existing filesystem aliases and symlinked ancestors against the managed inventory, including a symlinked destination directory such as `/home` → `/var/home`. On macOS and Windows, paths compare case-insensitively.\n- Preserves original input for unmanaged operations and explicit source edits so native host permissions remain authoritative.\n- Makes no permission decisions that grant access, auto-approves nothing, and provides no option to re-enable unverified redirection/apply.\n\nWhen blocked, read the indicated source, then explicitly edit it through normal permission-checked tools. Symlink sources contain link definitions: inspect the definition and explicitly address the referent. Have the user review and synchronize the target separately. This release deliberately does **not** preserve V1 automatic redirect/apply parity.\n\nSee [SECURITY.md](SECURITY.md) for the exact audit evidence and verification limits.\n\n## Read advisories\n\nReads remain unchanged. Template, modify-script and encrypted-source advisories are prepended to successful read results while preserving structured content, output and metadata. Advisory lookup is best-effort and may reuse an inventory up to 30 seconds old; mutation lookup always uses a fresh, validated inventory and fails closed.\n\n## Scope and TUI support\n\nShell commands and arbitrary custom mutation tools are outside this plugin's interception scope. This is a guard for the named file tools, not a filesystem sandbox.\n\nThe package includes a native OpenCode CLI companion through `./tui` (and `tui.mjs` for local directory discovery). Its mounted `app` slot observes the current session's cached messages and shows read-only toasts for guard tool failures and successful reads carrying guard advisories. It subscribes to native session events and checks the cache once per second to catch navigation and delayed cache updates. It makes no network polling requests and needs no Solid runtime.\n\nNotifications are deduplicated by session, message and tool-call identity for the lifetime of the companion. Opening a session can show previously recorded guard results once; multiple newly observed results are summarized in one toast. Background sessions are inspected only when opened. Full guidance stays in the tool result; paths and file contents are not copied into toasts. Unloading unsubscribes, stops the timer, unregisters the slot and clears the identity cache.\n\nThere are no apply/approve controls, pending-change state, or filesystem operations in the companion. It consumes projected tool results rather than server-side V1 toast calls. Recognition is limited to the guard's failure prefix and exact boxed advisory headers; ordinary assistant/user text and unrelated tool failures are ignored. This is a notification convenience, not an authenticated provenance signal for tool output.\n\n## Development and verification\n\n```sh\nnpm run lint\nnpm run typecheck\nnpm test\nnpm run build\nnpm run test:integration\npython3 scripts/native-tui-smoke.py\n```\n\nUnit tests use a mocked V2 hook context; path resolution is tested against a real temporary filesystem. `test:integration` (also run in CI and before release) uses real isolated chezmoi files/processes and the built package, but a **mocked OpenCode host**. Its source-allowed/target-denied permission-order test remains a deterministic simulation, not a real-host permission-policy matrix.\n\nTUI regressions cover native message shapes, read advisories, per-session deduplication, delayed results, event batching, navigation, remounting and cleanup with a mocked cache/event host. `scripts/native-tui-smoke.py` additionally runs an isolated real OpenCode server and terminal (it refuses releases not listed as audited) with a scripted loopback model. It verifies a native patch is blocked, the refusal reaches the model, exactly one guard error toast renders, source/target bytes remain unchanged, and the companion and processes shut down cleanly. No real model credentials or user dotfiles are used. Set `TMPDIR` to select the fixture/evidence directory.\n\nMIT © Dylan Russell\n","readmeFilename":"README.md"}