{"_id":"@aefree/pi-plastic","_rev":"17-15fd5db15fd0c46db8b4411cc57f04e6","name":"@aefree/pi-plastic","dist-tags":{"latest":"0.7.5"},"versions":{"0.4.0":{"name":"@aefree/pi-plastic","version":"0.4.0","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.4.0","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/repository-search-provider.ts"]},"dist":{"shasum":"7c511156df2c210a002b48e8cf5f3a3e211c2fd6","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.4.0.tgz","fileCount":61,"integrity":"sha512-hlRUkflngfMNsE+Uo6QCGf7y6GyfREcmrCdlhnIp76S6J+pXcfJhtJQlKuEW5MnmfYoojEswB7ByAhPO9knsbg==","signatures":[{"sig":"MEUCICuS0PVR8S9L9puOLdoUvC0bzXJojw9PFsjwFIU4/h5WAiEAgcxokDPDt419jKPq+gc4KUfnm6GusYqiGsG+fYIqGSk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":436095},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"066addcf56123df752133ec30e2a04e0d6057909","scripts":{"test":"npx --yes tsx tests/plastic-tool-validation.ts && npx --yes tsx tests/plastic-checkin-path-resolution.ts && npx --yes tsx tests/plastic-diff-workflow.test.ts && npx --yes tsx tests/plastic-process-lifecycle.test.ts && npx --yes tsx tests/plastic-patch-command.test.ts && npx --yes tsx tests/plastic-extension-registration.test.ts && npx --yes tsx tests/plastic-dynamic-tool-loading.test.ts && npx --yes tsx tests/plastic-tool-rendering.test.ts && npx --yes tsx tests/plastic-branch-query.test.ts && npx --yes tsx tests/plastic-workspace.test.ts && npx --yes tsx tests/plastic-mutation-execution.test.ts && npx --yes tsx tests/repository-search-provider.test.ts && npx --yes tsx tests/repository-search-provider-registration.test.ts && npx --yes tsx tests/packed-copy-owner-conflict.test.ts && npx --yes tsx tests/plastic-branch-status.test.ts && npx --yes tsx tests/plastic-constrained-sampling.test.ts && npx --yes tsx tests/bash-cm-diff-guard-validation.ts","test:live":"npx --yes tsx tests/plastic-live-smoke.test.ts","eval:tool-loading":"npx --yes tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"npx --yes tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"aefree","email":"aaron@secretcrush.net"},"repository":{"url":"git+ssh://git@github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.6.2","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"typebox":"^1.3.8","@earendil-works/pi-coding-agent":"0.83.0"},"peerDependencies":{"typebox":"*","@aefree/pi-repo-search":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@aefree/pi-repo-search":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.4.0_1785588034622_0.2613532980345319","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@aefree/pi-plastic","version":"0.5.0","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.5.0","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"dist":{"shasum":"02791f06c137c0001479ff725972aab640656ac7","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.5.0.tgz","fileCount":30,"integrity":"sha512-IX6Q9ABnrfq6WNc5dKkgQr2lV0RJ2ezeh4NKupozV0xa+Xo564SoTsKzBx0dgwZR9/ZiO0Ku0Z6DN8xyG09ErQ==","signatures":[{"sig":"MEYCIQDMgcAopC7+VbWBe+xUZ5d9VEHNJnVgjDCS8SaIhQU8QwIhAOC4qPF7Edg4yt4TQUsP76kPxi9YhjJn64hacIOstDFt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":322247},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"28ca39114592124c740c728eb313e25f7c867f19","scripts":{"test":"npx --yes tsx tests/plastic-tool-validation.ts && npx --yes tsx tests/plastic-checkin-path-resolution.ts && npx --yes tsx tests/plastic-diff-workflow.test.ts && npx --yes tsx tests/plastic-workspace-diff.test.ts && npx --yes tsx tests/plastic-process-lifecycle.test.ts && npx --yes tsx tests/plastic-patch-command.test.ts && npx --yes tsx tests/plastic-extension-registration.test.ts && npx --yes tsx tests/plastic-dynamic-tool-loading.test.ts && npx --yes tsx tests/plastic-tool-rendering.test.ts && npx --yes tsx tests/plastic-branch-query.test.ts && npx --yes tsx tests/plastic-workspace.test.ts && npx --yes tsx tests/plastic-mutation-execution.test.ts && npx --yes tsx tests/file-discovery-filter.test.ts && npx --yes tsx tests/file-discovery-filter-registration.test.ts && npx --yes tsx tests/packed-copy-owner-conflict.test.ts && npx --yes tsx tests/plastic-branch-status.test.ts && npx --yes tsx tests/plastic-constrained-sampling.test.ts && npx --yes tsx tests/bash-cm-diff-guard-validation.ts","test:live":"npx --yes tsx tests/plastic-live-smoke.test.ts","eval:tool-loading":"npx --yes tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"npx --yes tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.0","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"typebox":"^1.3.8","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.83.0"},"peerDependencies":{"typebox":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.5.0_1785934954379_0.004228461319892851","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@aefree/pi-plastic","version":"0.5.1","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.5.1","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"dist":{"shasum":"b970fb310b18a26802fcbca20660d7d40f96c1dd","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.5.1.tgz","fileCount":30,"integrity":"sha512-yLGhJC9LCqQmRQcF6SEVG+UscKwYP6W4Smo6gZo7FhTPtp6RoulrYf6CjpC8JRnIe6H+jaA0LuRYOU3VQLcdxw==","signatures":[{"sig":"MEQCIB12qM9xL35oFfokRtpnfIkbZljD9wS7p+EiYTN0ZeZZAiB7QWLpvaj+LVwKOGmk16K2DctIN/kLIOYDIY1nM5ESkg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":331846},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"3336e1f0031750c6f46bf8c3b53c62ff77c5b243","scripts":{"test":"npx --yes tsx tests/plastic-tool-validation.ts && npx --yes tsx tests/plastic-checkin-path-resolution.ts && npx --yes tsx tests/plastic-diff-workflow.test.ts && npx --yes tsx tests/plastic-workspace-diff.test.ts && npx --yes tsx tests/plastic-process-lifecycle.test.ts && npx --yes tsx tests/plastic-patch-command.test.ts && npx --yes tsx tests/plastic-extension-registration.test.ts && npx --yes tsx tests/plastic-dynamic-tool-loading.test.ts && npx --yes tsx tests/plastic-tool-rendering.test.ts && npx --yes tsx tests/plastic-branch-query.test.ts && npx --yes tsx tests/plastic-workspace.test.ts && npx --yes tsx tests/plastic-mutation-execution.test.ts && npx --yes tsx tests/file-discovery-filter.test.ts && npx --yes tsx tests/file-discovery-filter-registration.test.ts && npx --yes tsx tests/packed-copy-owner-conflict.test.ts && npx --yes tsx tests/plastic-branch-status.test.ts && npx --yes tsx tests/plastic-constrained-sampling.test.ts && npx --yes tsx tests/bash-cm-diff-guard-validation.ts","test:live":"npx --yes tsx tests/plastic-live-smoke.test.ts","eval:tool-loading":"npx --yes tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"npx --yes tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.0","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"typebox":"^1.3.8","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.83.0"},"peerDependencies":{"typebox":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.5.1_1785947952462_0.06790022852689725","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@aefree/pi-plastic","version":"0.5.2","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.5.2","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"dist":{"shasum":"e66836b6f08b70bdf9dd3a4347d2512e6021ea46","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.5.2.tgz","fileCount":30,"integrity":"sha512-wzdQhigeM8yAbWH7fEje+bMe1Sa+SOfDOhhkAW/FDC8759uD1DWwpt4Mu3PHyOZeH3qHa5qvkSXGXH0c7n3CPA==","signatures":[{"sig":"MEQCICwk5xYMCtCzHSwHT8VuxoQ9hv2Rj3MLJX0bO+1MQcs6AiAiWFZHdY2r5eaM5Qbl/nJU8dC0Hv+rNA/zFY/gTjahWQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":334852},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"c73d9c5a90b05afa2620c397c3c7d4fa8eaeb4b1","scripts":{"test":"npx --yes tsx tests/plastic-tool-validation.ts && npx --yes tsx tests/plastic-checkin-path-resolution.ts && npx --yes tsx tests/plastic-diff-workflow.test.ts && npx --yes tsx tests/plastic-workspace-diff.test.ts && npx --yes tsx tests/plastic-process-lifecycle.test.ts && npx --yes tsx tests/plastic-patch-command.test.ts && npx --yes tsx tests/plastic-extension-registration.test.ts && npx --yes tsx tests/plastic-dynamic-tool-loading.test.ts && npx --yes tsx tests/plastic-tool-rendering.test.ts && npx --yes tsx tests/plastic-branch-query.test.ts && npx --yes tsx tests/plastic-workspace.test.ts && npx --yes tsx tests/plastic-mutation-execution.test.ts && npx --yes tsx tests/file-discovery-filter.test.ts && npx --yes tsx tests/file-discovery-filter-registration.test.ts && npx --yes tsx tests/packed-copy-owner-conflict.test.ts && npx --yes tsx tests/plastic-branch-status.test.ts && npx --yes tsx tests/plastic-constrained-sampling.test.ts && npx --yes tsx tests/bash-cm-diff-guard-validation.ts","test:live":"npx --yes tsx tests/plastic-live-smoke.test.ts","eval:tool-loading":"npx --yes tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"npx --yes tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.0","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"typebox":"^1.3.8","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.83.0"},"peerDependencies":{"typebox":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.5.2_1785971686892_0.6064213856964151","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@aefree/pi-plastic","version":"0.5.3","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.5.3","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"dist":{"shasum":"59ee1a37ed55ad853eec0bf5bf05d2c545bc8221","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.5.3.tgz","fileCount":29,"integrity":"sha512-iHCnyG5wLw7hTrP6gdeY7ovr2tJeOGlOzjfVqA0/hdj5VuMfDqNXaAVbtNBZu49SyIPAb9kR+sEZW5G4v0M6gg==","signatures":[{"sig":"MEUCIQD0RQ21YS/NQ+7Ft/GA6uehogVgPaw6zKMXHXb3WrgI9gIgJqDHNCQlVL8rx/LnqD/eo7j3d4zm9KJDM73WKDuwnW0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.5.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":355431},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"9bbd01abb98afca55b9652f84494d473a891056d","scripts":{"test":"npx --yes tsx tests/plastic-tool-validation.ts && npx --yes tsx tests/plastic-checkin-path-resolution.ts && npx --yes tsx tests/plastic-diff-workflow.test.ts && npx --yes tsx tests/plastic-workspace-diff.test.ts && npx --yes tsx tests/plastic-process-lifecycle.test.ts && npx --yes tsx tests/plastic-patch-command.test.ts && npx --yes tsx tests/plastic-extension-registration.test.ts && npx --yes tsx tests/plastic-dynamic-tool-loading.test.ts && npx --yes tsx tests/plastic-tool-rendering.test.ts && npx --yes tsx tests/plastic-branch-query.test.ts && npx --yes tsx tests/plastic-workspace.test.ts && npx --yes tsx tests/plastic-mutation-execution.test.ts && npx --yes tsx tests/file-discovery-filter.test.ts && npx --yes tsx tests/file-discovery-filter-registration.test.ts && npx --yes tsx tests/packed-copy-owner-conflict.test.ts && npx --yes tsx tests/plastic-branch-status.test.ts && npx --yes tsx tests/plastic-constrained-sampling.test.ts && npx --yes tsx tests/bash-cm-diff-guard-validation.ts","test:live":"npx --yes tsx tests/plastic-live-smoke.test.ts","eval:tool-loading":"npx --yes tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"npx --yes tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.0","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"typebox":"^1.3.8","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.83.0"},"peerDependencies":{"typebox":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.5.3_1786284758162_0.5305873141711737","host":"s3://npm-registry-packages-npm-production"}},"0.5.4":{"name":"@aefree/pi-plastic","version":"0.5.4","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.5.4","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"dist":{"shasum":"c228f22535aef95ce38407e21112f0913489714b","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.5.4.tgz","fileCount":29,"integrity":"sha512-D476Fb2GjfhKOcr1SI6vs1wvsahKA2qceRQfiI7hZ4ZiC+Vnn5AktmuPYJjVXOxJMSomeH6tdNBWaPi2+3dmaA==","signatures":[{"sig":"MEUCIG9+qntrOJrwv/Z/mO/qXb0+vxQzEtODFpUqkvBu3+SNAiEA6H6SVKMqx6TD56IBA53rRupHy6dSe/jc1kDThVZqmi0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.5.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":356113},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"831c4cfce43ea3a8ac46b3515d911a544a3abe44","scripts":{"test":"npx --yes tsx tests/plastic-tool-validation.ts && npx --yes tsx tests/plastic-checkin-path-resolution.ts && npx --yes tsx tests/plastic-diff-workflow.test.ts && npx --yes tsx tests/plastic-workspace-diff.test.ts && npx --yes tsx tests/plastic-process-lifecycle.test.ts && npx --yes tsx tests/plastic-patch-command.test.ts && npx --yes tsx tests/plastic-extension-registration.test.ts && npx --yes tsx tests/plastic-dynamic-tool-loading.test.ts && npx --yes tsx tests/plastic-tool-rendering.test.ts && npx --yes tsx tests/plastic-branch-query.test.ts && npx --yes tsx tests/plastic-workspace.test.ts && npx --yes tsx tests/plastic-mutation-execution.test.ts && npx --yes tsx tests/file-discovery-filter.test.ts && npx --yes tsx tests/file-discovery-filter-registration.test.ts && npx --yes tsx tests/packed-copy-owner-conflict.test.ts && npx --yes tsx tests/plastic-branch-status.test.ts && npx --yes tsx tests/plastic-constrained-sampling.test.ts && npx --yes tsx tests/bash-cm-diff-guard-validation.ts","test:live":"npx --yes tsx tests/plastic-live-smoke.test.ts","eval:tool-loading":"npx --yes tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"npx --yes tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.0","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"typebox":"^1.3.8","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.83.0"},"peerDependencies":{"typebox":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.5.4_1786626576091_0.28325810834947585","host":"s3://npm-registry-packages-npm-production"}},"0.5.5":{"name":"@aefree/pi-plastic","version":"0.5.5","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.5.5","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"dist":{"shasum":"302bae7dc0e4ab7e1c505569214a1d40a78eda41","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.5.5.tgz","fileCount":29,"integrity":"sha512-mgK60wr1Z0Md39rmz42PKb0GmI4MQDk3AZjCJxqb8pkxNNmRMuiey9sNP3RJgdlzoULovA5DYXIWbKCn3Dy0IA==","signatures":[{"sig":"MEUCIALxe+Dk/6G7JNSmC2+lt4NBNeiww1xtCgIsHJzmVmhdAiEAhN+wZOCujiQzXl5TgXR3gOsBno8N/UzQPAyYCBiTmoc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.5.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":359726},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"20fcf8fff0eda57e2a378663e81794ff29fc97a3","scripts":{"test":"npx --yes tsx tests/plastic-tool-validation.ts && npx --yes tsx tests/plastic-status-machine-readable.test.ts && npx --yes tsx tests/plastic-checkin-path-resolution.ts && npx --yes tsx tests/plastic-diff-workflow.test.ts && npx --yes tsx tests/plastic-workspace-diff.test.ts && npx --yes tsx tests/plastic-process-lifecycle.test.ts && npx --yes tsx tests/plastic-patch-command.test.ts && npx --yes tsx tests/plastic-extension-registration.test.ts && npx --yes tsx tests/plastic-dynamic-tool-loading.test.ts && npx --yes tsx tests/plastic-tool-rendering.test.ts && npx --yes tsx tests/plastic-branch-query.test.ts && npx --yes tsx tests/plastic-workspace.test.ts && npx --yes tsx tests/plastic-mutation-execution.test.ts && npx --yes tsx tests/file-discovery-filter.test.ts && npx --yes tsx tests/file-discovery-filter-registration.test.ts && npx --yes tsx tests/packed-copy-owner-conflict.test.ts && npx --yes tsx tests/plastic-branch-status.test.ts && npx --yes tsx tests/plastic-constrained-sampling.test.ts && npx --yes tsx tests/bash-cm-diff-guard-validation.ts","test:live":"npx --yes tsx tests/plastic-live-smoke.test.ts","eval:tool-loading":"npx --yes tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"npx --yes tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.0","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"typebox":"^1.3.8","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.83.0"},"peerDependencies":{"typebox":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.5.5_1786710168661_0.897658636967186","host":"s3://npm-registry-packages-npm-production"}},"0.5.6":{"name":"@aefree/pi-plastic","version":"0.5.6","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.5.6","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"dist":{"shasum":"c51513c642758dd43005e350827ec82cc2ff5749","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.5.6.tgz","fileCount":28,"integrity":"sha512-ykGOhUHT78qdJ5wUWqj2/IxCygtlLcAIWnMAFcsd225yxEKipdvzoKLJM73DDkuVRjGBADufxFT5eNK3b2zmaA==","signatures":[{"sig":"MEUCIQCCfibBX4mRx1Ay900CStIPGPcnI0tCpzo3Vv1FYcYj4AIgHo1GJJgMoIiExd6tyjfKv/h5YZ+TIaAFbPWTtgn190Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.5.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":361818},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"d4b20ccb5f6921fb97ac505601f5a588a93c5af5","scripts":{"test":"npx --yes tsx tests/plastic-tool-validation.ts && npx --yes tsx tests/plastic-status-machine-readable.test.ts && npx --yes tsx tests/plastic-checkin-path-resolution.ts && npx --yes tsx tests/plastic-diff-workflow.test.ts && npx --yes tsx tests/plastic-workspace-diff.test.ts && npx --yes tsx tests/plastic-process-lifecycle.test.ts && npx --yes tsx tests/plastic-patch-command.test.ts && npx --yes tsx tests/plastic-capability-diagnostics.test.ts && npx --yes tsx tests/plastic-extension-registration.test.ts && npx --yes tsx tests/plastic-dynamic-tool-loading.test.ts && npx --yes tsx tests/plastic-tool-rendering.test.ts && npx --yes tsx tests/plastic-branch-query.test.ts && npx --yes tsx tests/plastic-workspace.test.ts && npx --yes tsx tests/plastic-mutation-execution.test.ts && npx --yes tsx tests/file-discovery-filter.test.ts && npx --yes tsx tests/file-discovery-filter-registration.test.ts && npx --yes tsx tests/packed-copy-owner-conflict.test.ts && npx --yes tsx tests/plastic-branch-status.test.ts && npx --yes tsx tests/plastic-constrained-sampling.test.ts && npx --yes tsx tests/bash-cm-diff-guard-validation.ts","test:live":"npx --yes tsx tests/plastic-live-smoke.test.ts","eval:tool-loading":"npx --yes tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"npx --yes tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.1","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"typebox":"^1.3.8","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.83.0"},"peerDependencies":{"typebox":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.5.6_1787837988952_0.31061706240428655","host":"s3://npm-registry-packages-npm-production"}},"0.5.7":{"name":"@aefree/pi-plastic","version":"0.5.7","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.5.7","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"dist":{"shasum":"c3d417fc935cae0f8639be5e4344c7401fddc0c2","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.5.7.tgz","fileCount":28,"integrity":"sha512-P9Pz4yBXVGIExnLHSlDYFW6NkDE3br++D+v2yYPuBxVgZhDMQAr6mRF4aw+2sRGxzS5WTr/DGLF+dtRGD5TSFA==","signatures":[{"sig":"MEYCIQD27aGIc0qeGOCErkTDrt+0chzYSqvkI6X0KZI/VksZggIhAJLYCdkdsA7swAGAtg9INM16Mcuc2kp8odT3uzw/Kouv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBvIoNjI+KJH9qiKmeiFWaeZVVGPRT+KPymztV1W7nJWAiAuhq7Cym9IV5/XUVHJrja8G0KyWHbhB3ryz9N3d5DohA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.5.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":369169},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"120bfa90f5da8f0ad63874edc752549293805c59","scripts":{"test":"npx --yes tsx tests/plastic-tool-validation.ts && npx --yes tsx tests/plastic-status-machine-readable.test.ts && npx --yes tsx tests/plastic-checkin-path-resolution.ts && npx --yes tsx tests/plastic-diff-workflow.test.ts && npx --yes tsx tests/plastic-workspace-diff.test.ts && npx --yes tsx tests/plastic-process-lifecycle.test.ts && npx --yes tsx tests/plastic-patch-command.test.ts && npx --yes tsx tests/plastic-capability-diagnostics.test.ts && npx --yes tsx tests/plastic-extension-registration.test.ts && npx --yes tsx tests/plastic-dynamic-tool-loading.test.ts && npx --yes tsx tests/plastic-tool-rendering.test.ts && npx --yes tsx tests/plastic-branch-query.test.ts && npx --yes tsx tests/plastic-workspace.test.ts && npx --yes tsx tests/plastic-mutation-execution.test.ts && npx --yes tsx tests/file-discovery-filter.test.ts && npx --yes tsx tests/file-discovery-filter-registration.test.ts && npx --yes tsx tests/packed-copy-owner-conflict.test.ts && npx --yes tsx tests/plastic-branch-status.test.ts && npx --yes tsx tests/plastic-constrained-sampling.test.ts && npx --yes tsx tests/bash-cm-diff-guard-validation.ts","test:live":"npx --yes tsx tests/plastic-live-smoke.test.ts","eval:tool-loading":"npx --yes tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"npx --yes tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.1","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"typebox":"^1.3.8","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.83.0"},"peerDependencies":{"typebox":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.5.7_1789392871172_0.40401994351494674","host":"s3://npm-registry-packages-npm-production"}},"0.5.8":{"name":"@aefree/pi-plastic","version":"0.5.8","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.5.8","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"dist":{"shasum":"cd0986828415e6641aab640d5aeb3b463f28714c","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.5.8.tgz","fileCount":28,"integrity":"sha512-H/pTIa9jYW1+phUPj+xSB96y5qXkqBmvVRjIgUGTg3Jn7QaFNd+T/FEArgsKPqNxDtTZs2mnhYBzmdsrGqrNQA==","signatures":[{"sig":"MEQCIBI3kClNYgfALKQ84begATJobp53YyT9j8YRZmKPk3y3AiA0UYEZv9EigDl4mm1TmIaspKo6YXSA7H5RIjXuXrCXHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHAuJUwTNqbcHJZ1oBzxxzBIUnfO5xBhX6I88Dy1vamRAiEAjXDa2G62hEiV844/2KBnQvyPkGJ347ndnpMpQDRFvxs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.5.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":371494},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"e425abad1cde7b8f7668ec9167a3f6a9f5d4d33b","scripts":{"test":"npx --yes tsx tests/plastic-tool-validation.ts && npx --yes tsx tests/plastic-status-machine-readable.test.ts && npx --yes tsx tests/plastic-checkin-path-resolution.ts && npx --yes tsx tests/plastic-diff-workflow.test.ts && npx --yes tsx tests/plastic-workspace-diff.test.ts && npx --yes tsx tests/plastic-process-lifecycle.test.ts && npx --yes tsx tests/plastic-patch-command.test.ts && npx --yes tsx tests/plastic-capability-diagnostics.test.ts && npx --yes tsx tests/plastic-extension-registration.test.ts && npx --yes tsx tests/plastic-dynamic-tool-loading.test.ts && npx --yes tsx tests/plastic-tool-rendering.test.ts && npx --yes tsx tests/plastic-branch-query.test.ts && npx --yes tsx tests/plastic-workspace.test.ts && npx --yes tsx tests/plastic-mutation-execution.test.ts && npx --yes tsx tests/file-discovery-filter.test.ts && npx --yes tsx tests/file-discovery-filter-registration.test.ts && npx --yes tsx tests/packed-copy-owner-conflict.test.ts && npx --yes tsx tests/plastic-branch-status.test.ts && npx --yes tsx tests/plastic-constrained-sampling.test.ts && npx --yes tsx tests/bash-cm-diff-guard-validation.ts","test:live":"npx --yes tsx tests/plastic-live-smoke.test.ts","eval:tool-loading":"npx --yes tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"npx --yes tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.1","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"typebox":"^1.3.8","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.83.0"},"peerDependencies":{"typebox":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.5.8_1789393673707_0.4622566398026924","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@aefree/pi-plastic","version":"0.6.0","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.6.0","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"dist":{"shasum":"064465dd0d0a9bbbad3b5ba2ceafc4a084f0fb1f","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.6.0.tgz","fileCount":28,"integrity":"sha512-LKD32LS3nWTndmPO4YOtyyAZ+PcaAivGjRhwnJSq7ugKC/o4eSB347+27czHFSI9TxxrJ116Hckl7QpUARkr2A==","signatures":[{"sig":"MEYCIQDlA4ySWu39p3I1JdPLAZ6/972smTTmui5rRnJeq/3iWQIhAIKSV94E1LfLlXrnoU5K4NNb0jVVrlXxE5gp86ukKp7Y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBCRceaF6wDu065jNq9miVFeliJsnW0+JXRGf2wwD7jkAiAVkeRnlJLol8AcAoSTxBQDAhC/7P4iOA4YtRlQ2+0VFg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":398028},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"941cc13246526c0da341cd50f824ac08cda53040","scripts":{"test":"tsx tests/release-registry-preflight.test.ts && tsx tests/plastic-tool-validation.ts && tsx tests/plastic-status-machine-readable.test.ts && tsx tests/plastic-checkin-path-resolution.ts && tsx tests/plastic-diff-workflow.test.ts && tsx tests/plastic-workspace-diff.test.ts && tsx tests/plastic-process-lifecycle.test.ts && tsx tests/plastic-patch-command.test.ts && tsx tests/plastic-capability-diagnostics.test.ts && tsx tests/plastic-extension-registration.test.ts && tsx tests/plastic-dynamic-tool-loading.test.ts && tsx tests/plastic-tool-rendering.test.ts && tsx tests/plastic-branch-query.test.ts && tsx tests/plastic-workspace.test.ts && tsx tests/plastic-mutation-execution.test.ts && tsx tests/plastic-merge-branches.test.ts && tsx tests/file-discovery-filter.test.ts && tsx tests/file-discovery-filter-registration.test.ts && tsx tests/packed-copy-owner-conflict.test.ts && tsx tests/plastic-branch-status.test.ts && tsx tests/plastic-constrained-sampling.test.ts && tsx tests/bash-cm-diff-guard-validation.ts","test:live":"tsx tests/plastic-live-smoke.test.ts","eval:tool-loading":"tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.1","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.5","typebox":"^1.3.8","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.83.0"},"peerDependencies":{"typebox":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.6.0_1789418774351_0.7874906095512932","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@aefree/pi-plastic","version":"0.6.1","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.6.1","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"dist":{"shasum":"316aa32efb3b5fe8f664e4bce0d090ede6c63249","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.6.1.tgz","fileCount":28,"integrity":"sha512-VOIAUXANA0yE6IL7J/tkTR/2gwFMe++1OwQMXR8sActWpvtyhfmPw9dg668zg9nre4aN+y+XvhfdKhZRAeK9HQ==","signatures":[{"sig":"MEUCIQCNk0wjuLXlx+sRxrtHz8RHRV099ZNUZzXugwjeI7w3OAIgL0pxtTTvtyJcHPnrCwZLkBiHcGsWxGkNp+NR27CaCFs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHdFFPiRvSIowlvP/h24NasIBcXF69WBQOp5NYmpu6NKAiAkYthU672Qmb6ISeHJKzqGgk9zgY57WPyXvG5kUYdr/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":401080},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"368cc41e30b52df732986da36b21994aa4259fac","scripts":{"test":"tsx tests/release-registry-preflight.test.ts && tsx tests/plastic-tool-validation.ts && tsx tests/plastic-status-machine-readable.test.ts && tsx tests/plastic-checkin-path-resolution.ts && tsx tests/plastic-diff-workflow.test.ts && tsx tests/plastic-workspace-diff.test.ts && tsx tests/plastic-process-lifecycle.test.ts && tsx tests/plastic-patch-command.test.ts && tsx tests/plastic-capability-diagnostics.test.ts && tsx tests/plastic-extension-registration.test.ts && tsx tests/plastic-dynamic-tool-loading.test.ts && tsx tests/plastic-tool-rendering.test.ts && tsx tests/plastic-branch-query.test.ts && tsx tests/plastic-workspace.test.ts && tsx tests/plastic-mutation-execution.test.ts && tsx tests/plastic-merge-branches.test.ts && tsx tests/file-discovery-filter.test.ts && tsx tests/file-discovery-filter-registration.test.ts && tsx tests/packed-copy-owner-conflict.test.ts && tsx tests/plastic-branch-status.test.ts && tsx tests/plastic-constrained-sampling.test.ts && tsx tests/bash-cm-diff-guard-validation.ts","test:live":"tsx tests/plastic-live-smoke.test.ts","eval:tool-loading":"tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.1","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.5","typebox":"^1.3.8","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.83.0"},"peerDependencies":{"typebox":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.6.1_1789420492517_0.9018583868187335","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@aefree/pi-plastic","version":"0.7.0","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.7.0","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"dist":{"shasum":"bfebdce85b531579f454cfb862b26f87550cb710","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.7.0.tgz","fileCount":29,"integrity":"sha512-NAq4VUp+0dSuwoTQY6QpoJb9FFNDZJ966w36C0USFv61k06Nz9hZpQ4C1apv+Q5KojuMsuYK1uW1mXLHFVudUQ==","signatures":[{"sig":"MEUCIQDt3jvRXeU/CDloqJTUY2JN/+bHj7t+YFnG1T+hAhTStgIgdNHsK9Kf+yNBfjRRIZZfa0JSReqQyrfGSsC1zauFRV8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDzgkbkNEweLrInkh/BkvwAC3rdDYkZB4eXWevVjB7GFwIhALmBi1vEKB9rUqiGy+98YQqMpkOlFC8p+n7B7IjwdMlY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":419868},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"d69b7e75dde215e1e9292ec24ddda5498ea9c4b0","scripts":{"test":"tsx tests/tool-definition.test.ts && tsx tests/release-registry-preflight.test.ts && tsx tests/plastic-tool-validation.ts && tsx tests/plastic-status-machine-readable.test.ts && tsx tests/plastic-checkin-path-resolution.ts && tsx tests/plastic-diff-workflow.test.ts && tsx tests/plastic-workspace-diff.test.ts && tsx tests/plastic-process-lifecycle.test.ts && tsx tests/plastic-patch-command.test.ts && tsx tests/plastic-capability-diagnostics.test.ts && tsx tests/plastic-extension-registration.test.ts && tsx tests/plastic-dynamic-tool-loading.test.ts && tsx tests/plastic-tool-rendering.test.ts && tsx tests/plastic-branch-query.test.ts && tsx tests/plastic-workspace.test.ts && tsx tests/plastic-mutation-execution.test.ts && tsx tests/plastic-merge-branches.test.ts && tsx tests/file-discovery-filter.test.ts && tsx tests/file-discovery-filter-registration.test.ts && tsx tests/packed-copy-owner-conflict.test.ts && tsx tests/plastic-branch-status.test.ts && tsx tests/plastic-constrained-sampling.test.ts && tsx tests/bash-cm-diff-guard-validation.ts","pretest":"npm run typecheck","test:live":"tsx tests/plastic-live-smoke.test.ts","typecheck":"tsc -p tsconfig.json","preview:tools":"tsx tests/plastic-tool-rendering.test.ts --preview","eval:tool-loading":"tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.1","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.5","typebox":"^1.3.8","typescript":"7.0.2","@types/node":"22.20.2","@earendil-works/pi-tui":"0.83.0","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.83.0"},"peerDependencies":{"typebox":"*","@earendil-works/pi-tui":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@earendil-works/pi-tui":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.7.0_1789590597468_0.5473621239818871","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@aefree/pi-plastic","version":"0.7.1","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.7.1","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"dist":{"shasum":"9f7419dc8ed491131ad889c43bd160b504f35315","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.7.1.tgz","fileCount":29,"integrity":"sha512-WhcZOQ9tbWr2wcXCdORwCSp8mD8xcXk4uq2t4SqoNROIjtCwGyt5iAE5110/epEV9N87EGXBpQq9nu70Nt4ssQ==","signatures":[{"sig":"MEUCIQC9F8hnPLjRw+doqx++GPXUSUZbTLf1WBjgpqHR3fNbWwIgWgq3Dk2De+sSh+XkVwMVGXkaF75CUZcB7LnSluugoUE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDQmfHf7CQgcfJ0B3GQ7jPWHa43xHmt192msFDCYHfctQIhAMESymwTtNdvPJXW0+5MO8WNiIANCEC0Thx6iCibJp7Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":419386},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"0fd688a000043c2b639d39b290988f7ae2431025","scripts":{"test":"tsx tests/tool-definition.test.ts && tsx tests/release-registry-preflight.test.ts && tsx tests/plastic-tool-validation.ts && tsx tests/plastic-status-machine-readable.test.ts && tsx tests/plastic-checkin-path-resolution.ts && tsx tests/plastic-diff-workflow.test.ts && tsx tests/plastic-workspace-diff.test.ts && tsx tests/plastic-process-lifecycle.test.ts && tsx tests/plastic-patch-command.test.ts && tsx tests/plastic-capability-diagnostics.test.ts && tsx tests/plastic-extension-registration.test.ts && tsx tests/plastic-dynamic-tool-loading.test.ts && tsx tests/plastic-tool-rendering.test.ts && tsx tests/plastic-branch-query.test.ts && tsx tests/plastic-workspace.test.ts && tsx tests/plastic-mutation-execution.test.ts && tsx tests/plastic-merge-branches.test.ts && tsx tests/file-discovery-filter.test.ts && tsx tests/file-discovery-filter-registration.test.ts && tsx tests/packed-copy-owner-conflict.test.ts && tsx tests/plastic-branch-status.test.ts && tsx tests/plastic-constrained-sampling.test.ts && tsx tests/bash-cm-diff-guard-validation.ts","pretest":"npm run typecheck","test:live":"tsx tests/plastic-live-smoke.test.ts","typecheck":"tsc -p tsconfig.json","preview:tools":"tsx tests/plastic-tool-rendering.test.ts --preview","eval:tool-loading":"tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.1","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.5","typebox":"^1.3.8","typescript":"7.0.2","@types/node":"22.20.2","@earendil-works/pi-tui":"0.83.0","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.83.0"},"peerDependencies":{"typebox":"*","@earendil-works/pi-tui":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@earendil-works/pi-tui":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.7.1_1789659026778_0.09854327880096991","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@aefree/pi-plastic","version":"0.7.2","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.7.2","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"dist":{"shasum":"3eae766ecfc7808139385c1bc5583ddebe6e963d","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.7.2.tgz","fileCount":29,"integrity":"sha512-MU+Ujl5/OJ6hLL6hgVIs8r90sCO+fDQRFzVFHyc6NDBYcB8lsBI1D9JaibkG3xcyljWabFTIVyjWf9/y/y3h5w==","signatures":[{"sig":"MEYCIQDSCwZszMmkqaEOYKyw+qm5z/nK19KQ1G1m19fbsLVsbgIhALNrI49+XYg/hvRnpR9dX1aDFYRfJtsi1pXQP06CookH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDBzBtPL4UdiDR1n4UhnNX1RYc5mSjsViWyIgzwrkylTAIhAOPlANn5bp8A/bMAonfpmsrvAH00rxmaYMbhHqRss8as","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":419914},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"196a949adcb303764db5da18ebe85d673727bbd1","scripts":{"test":"tsx tests/tool-definition.test.ts && tsx tests/release-registry-preflight.test.ts && tsx tests/plastic-tool-validation.ts && tsx tests/plastic-status-machine-readable.test.ts && tsx tests/plastic-checkin-path-resolution.ts && tsx tests/plastic-diff-workflow.test.ts && tsx tests/plastic-workspace-diff.test.ts && tsx tests/plastic-process-lifecycle.test.ts && tsx tests/plastic-patch-command.test.ts && tsx tests/plastic-capability-diagnostics.test.ts && tsx tests/plastic-extension-registration.test.ts && tsx tests/plastic-dynamic-tool-loading.test.ts && tsx tests/plastic-tool-rendering.test.ts && tsx tests/plastic-branch-query.test.ts && tsx tests/plastic-workspace.test.ts && tsx tests/plastic-mutation-execution.test.ts && tsx tests/plastic-merge-branches.test.ts && tsx tests/file-discovery-filter.test.ts && tsx tests/file-discovery-filter-registration.test.ts && tsx tests/packed-copy-owner-conflict.test.ts && tsx tests/plastic-branch-status.test.ts && tsx tests/plastic-constrained-sampling.test.ts && tsx tests/bash-cm-diff-guard-validation.ts","pretest":"npm run typecheck","test:live":"tsx tests/plastic-live-smoke.test.ts","typecheck":"tsc -p tsconfig.json","preview:tools":"tsx tests/plastic-tool-rendering.test.ts --preview","eval:tool-loading":"tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.1","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.5","typebox":"^1.3.8","typescript":"7.0.2","@types/node":"22.20.2","@earendil-works/pi-tui":"0.83.0","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.83.0"},"peerDependencies":{"typebox":"*","@earendil-works/pi-tui":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@earendil-works/pi-tui":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.7.2_1789849297392_0.7507337753096854","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@aefree/pi-plastic","version":"0.7.3","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"license":"MIT","_id":"@aefree/pi-plastic@0.7.3","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"homepage":"https://github.com/aefreedman/pi-plastic#readme","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"dist":{"shasum":"7ee8284ea5efd85d9e6973efff2f547b40842f33","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.7.3.tgz","fileCount":29,"integrity":"sha512-C62Eiqr0LFO6JQF+/m7DQ9GD01RJcuFPIJwldZpDPR3hkpLAlsLi6Re8nDcMOFvPcslK1Q9Q6ZLb3kfhp7LP2A==","signatures":[{"sig":"MEQCIAQZC6iONtwCgVs/PnAyLzeMR8HR6oSTERx0F9MmfHrdAiBNn6hsiLQb2bfemXzfWprsBEk+cVOHebsb2wMYpsdEWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDCG7Gg2IJU+w7lvU+75A81mvzP7/jtJHuGh0epZf0z5AiEAiJWTwVTErk8F7ccwj2bT+EA3rjp3KgqS56n1U5NDx1w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.7.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":420089},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"8e9b1edf51936f5694fe237f6010b2459eb1bcb8","scripts":{"test":"tsx tests/tool-definition.test.ts && tsx tests/release-registry-preflight.test.ts && tsx tests/plastic-tool-validation.ts && tsx tests/plastic-status-machine-readable.test.ts && tsx tests/plastic-checkin-path-resolution.ts && tsx tests/plastic-diff-workflow.test.ts && tsx tests/plastic-workspace-diff.test.ts && tsx tests/plastic-process-lifecycle.test.ts && tsx tests/plastic-patch-command.test.ts && tsx tests/plastic-capability-diagnostics.test.ts && tsx tests/plastic-extension-registration.test.ts && tsx tests/plastic-dynamic-tool-loading.test.ts && tsx tests/plastic-tool-rendering.test.ts && tsx tests/plastic-branch-query.test.ts && tsx tests/plastic-workspace.test.ts && tsx tests/plastic-mutation-execution.test.ts && tsx tests/plastic-merge-branches.test.ts && tsx tests/file-discovery-filter.test.ts && tsx tests/file-discovery-filter-registration.test.ts && tsx tests/packed-copy-owner-conflict.test.ts && tsx tests/plastic-branch-status.test.ts && tsx tests/plastic-constrained-sampling.test.ts && tsx tests/bash-cm-diff-guard-validation.ts","pretest":"npm run typecheck","test:live":"tsx tests/plastic-live-smoke.test.ts","typecheck":"tsc -p tsconfig.json","preview:tools":"tsx tests/plastic-tool-rendering.test.ts --preview","eval:tool-loading":"tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"tsx tests/plastic-branch-create-live.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.1","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.5","typebox":"^1.3.8","typescript":"7.0.2","@types/node":"22.20.2","@earendil-works/pi-tui":"0.86.1","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.86.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-tui":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@earendil-works/pi-tui":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-plastic_0.7.3_1789914894252_0.8872653541246869","host":"s3://npm-registry-packages-npm-production"}},"0.7.5":{"pi":{"skills":["./skills"],"extensions":["./index.ts","./extensions/plastic-branch-status.ts","./extensions/bash-cm-diff-guard.ts","./extensions/bash-cm-merge-guard.ts","./extensions/file-discovery-filter.ts"]},"_id":"@aefree/pi-plastic@0.7.5","bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"dist":{"shasum":"ebb7b80ff51d6a2f3fa1b3e969a58de9ecc7c327","tarball":"https://registry.npmjs.org/@aefree/pi-plastic/-/pi-plastic-0.7.5.tgz","fileCount":29,"integrity":"sha512-7u6TTrmRya6vTbpEIFOm3yybSJJptBgXkkD9+l/HSOkXiU+9B7L/nHSzPqXsmEwXMIAnQafqxtfSpjWBPMgl2w==","signatures":[{"sig":"MEQCIEb26iNjK7seakSzml1D4DfHK2lAIBAHWLHmoXJyhX2BAiBQEStInl2zRQ7JIv66vUFeuZD520nNRHCNDnbyAZCUqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD44CNjvyV2m8tVbfYeS3Yl7gMRhzlUP/K0Ypdc4qATNQIhAIG82w8i7ukIFpabvYdg/58cmExsHAZWmFT15b4wZpCX"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aefree%2fpi-plastic@0.7.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":420344},"name":"@aefree/pi-plastic","type":"module","engines":{"node":">=22.19.0"},"gitHead":"c4ca217eb00dab31aa694ef7976170aa1304f530","license":"MIT","scripts":{"test":"tsx tests/tool-definition.test.ts && tsx tests/release-registry-preflight.test.ts && tsx tests/plastic-tool-validation.ts && tsx tests/plastic-status-machine-readable.test.ts && tsx tests/plastic-checkin-path-resolution.ts && tsx tests/plastic-diff-workflow.test.ts && tsx tests/plastic-workspace-diff.test.ts && tsx tests/plastic-process-lifecycle.test.ts && tsx tests/plastic-patch-command.test.ts && tsx tests/plastic-capability-diagnostics.test.ts && tsx tests/plastic-extension-registration.test.ts && tsx tests/plastic-dynamic-tool-loading.test.ts && tsx tests/plastic-tool-rendering.test.ts && tsx tests/plastic-branch-query.test.ts && tsx tests/plastic-workspace.test.ts && tsx tests/plastic-mutation-execution.test.ts && tsx tests/plastic-merge-branches.test.ts && tsx tests/file-discovery-filter.test.ts && tsx tests/file-discovery-filter-registration.test.ts && tsx tests/packed-copy-owner-conflict.test.ts && tsx tests/plastic-branch-status.test.ts && tsx tests/plastic-constrained-sampling.test.ts && tsx tests/bash-cm-diff-guard-validation.ts","pretest":"npm run typecheck","test:live":"tsx tests/plastic-live-smoke.test.ts","typecheck":"tsc -p tsconfig.json","preview:tools":"tsx tests/plastic-tool-rendering.test.ts --preview","eval:tool-loading":"tsx evals/tool-loading/run-eval.ts","test:live:branch-create":"tsx tests/plastic-branch-create-live.test.ts"},"version":"0.7.5","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f04fa195-8702-408d-856a-91420ba78967"}},"homepage":"https://github.com/aefreedman/pi-plastic#readme","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"_npmVersion":"11.19.1","description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","directories":{},"maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.5","typebox":"^1.3.8","typescript":"7.0.2","@types/node":"22.20.2","@earendil-works/pi-tui":"0.87.0","@aefree/pi-file-discovery":"^0.1.1","@earendil-works/pi-coding-agent":"0.87.0"},"peerDependencies":{"typebox":"*","@earendil-works/pi-tui":"*","@aefree/pi-file-discovery":"^0.1.0","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"typebox":{"optional":true},"@earendil-works/pi-tui":{"optional":true},"@aefree/pi-file-discovery":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-plastic_0.7.5_1790024776253_0.20654330445356117"}}},"time":{"created":"2026-08-01T12:40:34.462Z","modified":"2026-09-21T21:06:16.750Z","0.4.0":"2026-08-01T12:40:34.780Z","0.5.0":"2026-08-05T13:02:34.523Z","0.5.1":"2026-08-05T16:39:12.600Z","0.5.2":"2026-08-05T23:14:47.037Z","0.5.3":"2026-08-09T14:12:38.343Z","0.5.4":"2026-08-13T13:09:36.294Z","0.5.5":"2026-08-14T12:22:48.905Z","0.5.6":"2026-08-27T13:39:49.122Z","0.5.7":"2026-09-14T13:34:31.279Z","0.5.8":"2026-09-14T13:47:53.802Z","0.6.0":"2026-09-14T20:46:14.461Z","0.6.1":"2026-09-14T21:14:52.617Z","0.7.0":"2026-09-16T20:29:57.560Z","0.7.1":"2026-09-17T15:30:26.876Z","0.7.2":"2026-09-19T20:21:37.522Z","0.7.3":"2026-09-20T14:34:54.337Z","0.7.5":"2026-09-21T21:06:16.344Z"},"bugs":{"url":"https://github.com/aefreedman/pi-plastic/issues"},"license":"MIT","homepage":"https://github.com/aefreedman/pi-plastic#readme","keywords":["pi-package","plastic-scm","unity-version-control","developer-tools"],"repository":{"url":"git+https://github.com/aefreedman/pi-plastic.git","type":"git"},"description":"Pi tools and skills for Plastic SCM and Unity Version Control workflows.","maintainers":[{"name":"aefree","email":"aaron@secretcrush.net"}],"readme":"# Pi Plastic\n\nPi tools, footer status, and skill guidance for Plastic SCM / Unity Version Control workflows.\n\n## Tool presentation\n\nPlastic tools use compact action headers inside Pi's standard tool boxes. Headers show the workspace name and the branch, file, revision pair, or query being acted on; command previews are labeled explicitly. Collapsed results summarize structured status counts, diff availability, patch output, and server-merge outcomes. Blocked checkins, unresolved effects, omitted results, and unavailable comparisons remain visible without expansion. Plain CLI output stays neutral rather than implying a verified mutation.\n\nExpand a result using your configured tool-expansion shortcut to see the workspace, request, colored diff hunks, and complete original returned evidence. The display preserves JSON identifiers and numeric text, masks common credential assignments, and removes terminal control sequences. Rendering does not change tool execution or model-facing output; it is not a general source-code secret scanner.\n\nRun `npm run preview:tools` from a repository checkout for offline examples. The preview uses plain colors and a test expansion binding; Pi supplies the live theme, box, and configured shortcut.\n\n## Plastic branch footer status\n\nWhen Pi starts inside a Plastic workspace, this package adds a themed `Plastic <branch>` status to Pi's built-in footer. It discovers the nearest enclosing `.plastic/plastic.workspace` and reads either the selector's `smartbranch` or `br` form as the credential-free branch source. A bounded `cm status` call is used only when the selector has no valid branch. Selector changes and successful same-workspace `plastic_*` tools refresh the status; sibling workspaces are ignored.\n\nThe extension owns only the `plastic-branch` status key. It does not replace Pi's footer or suppress Pi's Git branch display, so Git and Plastic information can appear together in nested workspaces. If the Plastic marker exists but neither the selector nor `cm` yields a branch, the footer shows `Plastic branch unavailable`. Non-Plastic directories show no Plastic status.\n\n## File-discovery filter\n\nWhen `@aefree/pi-file-discovery` is also loaded, Pi session startup registers the independent advisory `plastic.ignore-files` file-discovery filter through the package-qualified capability-registry rendezvous key. The packages may have separate module roots; Plastic does not import file-discovery from its own root. It discovers readable `ignore.conf` and `cloaked.conf` only from the nearest Plastic workspace to each requested root, then supplies them as ripgrep ignore files without replacing native ripgrep/Git-ignore behavior. A root is emitted only when it has at least one readable ignore/cloak file; each emitted root declares `filterDecision: \"applied\"`, decision code `plastic_ignore_files_applied`, and that workspace as its `filterBoundary`. No-op Plastic roots are omitted from mixed requests, and a request with no effective ignore/cloak records is `not_applicable`. The integration is optional: without `pi-file-discovery`, all Plastic tools and skills still load and no filter registry is created. Missing, malformed, or unavailable Plastic filter data degrades to generic discovery; `pi-file-discovery` owns that execution hygiene and disclosure behavior. It does not register workflow guidance or perform Plastic CLI readiness checks; owning `plastic_*` tools validate their own workspace and CLI requirements.\n\n\n## Mutation execution\n\nDirectly invoked mutating `plastic_*` tools do not require approval tokens or package-owned UI confirmation. After the tool's existing argument, command, workspace-readiness, exact-target, and path-containment checks pass, each command attempt proceeds to its intended `cm` spawn. The process layer makes one attempt and does not retry implicitly; inspect Plastic status before manually retrying an ambiguous side-effecting failure.\n\nRemoving the approval layer does not relax Plastic safety guards. Command allowlists, exact mutation targets, workspace/path containment, non-interactive process selection, blocked `cm diff`, safe merge flags, and operation-specific preflight behavior remain authoritative. Compound tools may intentionally execute multiple validated command steps.\n\n## Tools\n\n- `plastic_tool_search` (dynamic capability search and loader)\n- `plastic_status`\n- `plastic_update`\n- `plastic_add`\n- `plastic_checkin`\n- `plastic_undo`\n- `plastic_resolveDeleteChangeConflict`\n- `plastic_diff`\n- `plastic_patch`\n- `plastic_diffRevisions`\n- `plastic_diffFile`\n- `plastic_workspaceDiff`\n- `plastic_branchCreate`\n- `plastic_switchBranch`\n- `plastic_merge`\n- `plastic_mergeBranches`\n- `plastic_mergeToBranch`\n- `plastic_finalizeMerge`\n- `plastic_currentBranch`\n- `plastic_branchList`\n- `plastic_branchExists`\n- `plastic_branchDelete`\n- `plastic_shelvesetCreate`\n- `plastic_shelvesetApply`\n- `plastic_shelvesetDelete`\n- `plastic_shelvesetList`\n- `plastic_codeReviewCreate`\n- `plastic_codeReviewUpdate`\n- `plastic_codeReviewDelete`\n- `plastic_codeReviewFind`\n- `plastic_workspaceList`\n\n## Dynamic tool loading\n\nThe package exposes 30 public `plastic_*` tools. `plastic_workspaceCreate` is intentionally not registered or discoverable until the package provides a paired, safe workspace-cleanup capability. `plastic_tool_search` is a package-owned loader that searches the explicit Plastic capability catalog, reports bounded matches and safety guidance, and additively enables selected tools for the next model request.\n\nThe default **balanced** session set keeps `plastic_tool_search`, `plastic_status`, and `plastic_currentBranch` active. The other Plastic tools remain registered but inactive until selected; built-in and other-extension tools are not removed. Previous loader additions on the active session branch are restored on startup, resume, fork, and reload.\n\nFor controlled comparisons, set `PI_PLASTIC_TOOL_LOADING_MODE` before starting Pi:\n\n```bash\nPI_PLASTIC_TOOL_LOADING_MODE=balanced    # default production candidate\nPI_PLASTIC_TOOL_LOADING_MODE=loader-only # maximum initial schema reduction\nPI_PLASTIC_TOOL_LOADING_MODE=all-active  # all 30 currently exposed tools; loader omitted\n```\n\nPi uses canonical `sourceInfo` provenance to identify this package's effective tools before deferring, restoring, or activating them. If canonical provenance or ownership of the effective loader cannot be proven, `pi-plastic` fails safe: it preserves the complete current active set exactly, does not defer, remove, or activate any `plastic_*` name, and an effective package loader can only report known tools that are already active rather than activating inactive names. On sourceInfo-capable Pi instances, providers without native deferred definitions still receive the complete current active set after a loader call. Reload or restart Pi after source edits; source files are not watched automatically.\n\n## Safety behavior\n\nThe Bash guards run only in Pi processes that actually load this package. A project-local install does not protect a delegated child process whose working directory resolves different project settings. Install `pi-plastic` at user scope (the default `pi install`, without `-l`) when subagents and sessions in arbitrary workspaces must inherit the guards. Restart existing Pi processes after installation or source changes.\n\n- `plastic_branchCreate` supports an explicit parent branch independent of the loaded workspace branch, defaults relative names to the current branch when no parent is supplied, and rejects top-level paths unless `allowRootBranch=true` is explicit.\n- `plastic_diff` remains a disabled alias by design. Use `plastic_status` for changed-path listing; do not diff as routine post-edit validation or checkin preflight. When change-boundary evidence is needed, use `plastic_diffFile` for one exact file, `plastic_workspaceDiff` with selected paths or explicit `allPending=true`, or `plastic_diffRevisions` for an explicit historical pair. Diff responses use small defaults and caller-controlled `maxChars` bounds. Automatic pending-file bases bind each status revision ID to its owning workspace or Xlink repository/server, including mixed-Xlink reviews. If ownership cannot be resolved, that comparison is reported unavailable rather than retrieving a bare revision from the caller repository. Historical and workspace bytes are copied to ASCII-safe package-owned paths before the backend runs, while normalized headers retain the logical Unicode labels.\n- `plastic_status(machineReadable=true, format=\"json\")` returns parsed `items`, aggregate `summary`, and `itemCount` (`total`, `returned`, `omitted`) rather than requiring agents to parse Plastic rows. It returns at most 100 items by default; set `maxItems` (up to 500) when more are intentional. `includeRaw=true` adds the original unbounded Plastic output for diagnostics, so omit it for normal agent use to conserve context tokens.\n- Pending-diff ownership containment uses filesystem identity, so a workspace reached through a symlink, junction, or platform filesystem alias still resolves its workspace and nested Xlink bases safely. Plastic commands and returned labels retain the caller's original lexical path; missing deleted or moved ownership ancestors remain unavailable rather than falling back to a parent repository.\n- Preflight is not routine confirmation. Use it for ambiguous or broad mutation scope, moved/deleted path rewriting, compound operations, or explicit preview requests; otherwise rely on exact targets and the tools' runtime guards.\n- `plastic_patch` generates review patches with `cm patch`, including `clean` and `integration` filters for branch review workflows. It does not expose patch apply. Unqualified `br:/...` selectors are qualified only with the current workspace selector's exact repository; otherwise pass `br:/<branch>@<repository>@<server>`.\n- Bash safety rails block `cm diff` and unsafe interactive `cm merge --merge` usage.\n- Merge tooling surfaces Plastic `FILE_CONFLICT` records and merge-state metadata from `cm status`.\n- `plastic_mergeBranches` is a separate workspace-free server-side route. It requires fully repository/server-qualified source and target branches in the same exact repository/server and a nonempty message. Its optional preflight only renders the command; it does not analyze remote conflicts. A completed result proves one emitted root-mount target changeset for this dispatch, not source merge-link identity, exclusive target-head ownership, server capability beyond the dispatch, rollback, or xlink effects. No-op and conflict records do not independently prove that no server effect occurred. The route has no workspace fallback, retries, target-head unification, xlink policy, shelve mode, or conflict-policy override; undetected server-side xlink effects remain possible.\n- `plastic_mergeToBranch` performs the common safe closeout flow: resolve the source branch's parent as the default target, switch to the target branch, optionally update, merge a source branch non-interactively, verify merge state, and check in the merge result. It verifies the loaded target before merge/checkin and rejects final-branch mismatches; Plastic checkins stay on the branch where they were created, so switching afterward is not a Git-style integration.\n- `plastic_finalizeMerge` supports reviewed/manual-resolution flows where Plastic still needs merge metadata finalized before checkin.\n\n## Patch generation examples\n\n```text\nplastic_patch(source=\"<branch-spec>\", integration=true)\nplastic_patch(source=\"<branch-spec>\", clean=true, integration=true, output=\"<patch-file>\")\nplastic_patch(source=\"<left-spec>\", destination=\"<right-spec>\")\nplastic_patch(source=\"<branch-spec>\", toolPath=\"<path-to-diff-tool>\")\n```\n\nIf `output` is omitted, the package returns patch content. If `output` is provided, it must be a new path: the package generates into a package-owned sibling staging file, validates it, and atomically publishes it without overwriting an existing path. Plastic/server patch output may encode a moved item either as a move or as delete/add records; `pi-plastic` does not claim a representation without a live backend fixture. Inspect patches before sharing them because they can contain source code, binary content, local paths, or secrets that were present in the changed files.\n\n## Included skill\n\n- `using-plastic` - PlasticSCM branch, workspace, merge, shelveset, checkin, and code-review workflow guidance\n\n## Install\n\nInstall the latest stable npm release at user scope so the safety guards also load for delegated child processes in other workspaces:\n\n```bash\npi install npm:@aefree/pi-plastic\n```\n\nInstall a pinned GitHub release over HTTPS:\n\n```bash\npi install git:github.com/aefreedman/pi-plastic@v0.7.2\n```\n\nEquivalent SSH install:\n\n```bash\npi install git:git@github.com/aefreedman/pi-plastic@v0.7.2\n```\n\nTo intentionally track the moving default branch instead of a release tag:\n\n```bash\npi install https://github.com/aefreedman/pi-plastic\n```\n\nLocal development install:\n\n```bash\npi install <path-to-pi-plastic>\n```\n\nProject-local install:\n\n```bash\npi install -l <path-to-pi-plastic>\n```\n\nProject-local installation protects only Pi processes that load those project settings. It is insufficient as a global Bash safety rail when a subagent launches with another working directory.\n\n## Requirements\n\n- Node.js 22.19.0 or newer\n- Pi 0.87.0 or newer; the current development and eval baseline is Pi 0.87.0\n- Plastic SCM / Unity Version Control CLI (`cm`) available on `PATH`, or `PI_PLASTIC_CM_EXECUTABLE` set to its full executable path\n- A GNU/POSIX-compatible text `diff` available on `PATH`, or `PI_PLASTIC_DIFF_EXECUTABLE` set to its full executable path (including paths containing spaces), for text-only diff tools. Pi invokes that resolved executable as-is and does not discover Git Bash paths automatically. On macOS, bare `diff` is PATH-dependent: it may be GNU Diffutils (often installed as `diff` ahead of system paths) or Apple’s BSD `/usr/bin/diff`; the package does not substitute one for the other. Configure the intended text executable explicitly when that distinction matters.\n- Patch generation has a separate executable policy: `toolPath` is the one-call highest-priority override, followed by `PI_PLASTIC_PATCH_EXECUTABLE`. On Windows, set one to a verified patch-capable non-GUI executable such as Git's `diff.exe`; the package deliberately does not reuse `PI_PLASTIC_DIFF_EXECUTABLE`/GnuWin32 as a patch default. macOS validation with Plastic 11 found that Apple BSD `/usr/bin/diff` supports text-only diffs but rejects the `--binary` argument supplied by `cm patch`; configure a verified GNU Diffutils-compatible executable explicitly for `plastic_patch`. The non-Windows fallback to `PI_PLASTIC_DIFF_EXECUTABLE` or bare `diff` remains only for environments whose resolved executable satisfies that patch contract. In an interactive Pi session, an invalid configured patch override or missing Windows patch setting produces one package capability warning per Pi runtime; the warning omits configured paths, and `plastic_patch` retains its tool-time validation.\n- A configured Plastic workspace for workspace-scoped operations. Text diffs require an ASCII-safe temporary directory; if the configured backend cannot accept Unicode paths, set `TEMP` and `TMP` to a writable ASCII-only location.\n- `pi-file-discovery` is an optional independently loaded integration. When its `discover_candidate_files` tool is active, it receives the advisory Plastic ignore/cloak filter through the shared global capability protocol; when absent, `pi-plastic` loads without file-discovery filtering. The tarball does not embed linked sibling workspaces or `node_modules` paths.\n\n## Testing\n\n```bash\nnpm test\n```\n\n`npm test` first runs `npm run typecheck` with pinned TypeScript and Node 22 types. The strict, no-emit check covers `index.ts`, `src/`, every extension, and compile-only schema-inference contracts under `tests/types/`. Runtime tests and eval harnesses execute through `tsx`.\n\nThe default suite is credential-free and covers tool validation, schema conversion, path-resolution regressions, extension registration, rendering, OpenAI strict-schema compatibility classification, and bash guard behavior.\n\nRun the opt-in read-only live smoke test against a dedicated clean sandbox workspace:\n\n```bash\nPI_PLASTIC_TEST_WORKSPACE=/absolute/path/to/sandbox npm run test:live\n```\n\nThe live test requires `/main`, no pending changes, and no merge in progress. It does not mutate the repository. Mutation tools should still be rehearsed manually in a disposable sandbox before relying on them in a new environment.\n\n### Dynamic tool-loading eval\n\nThe package-local behavioral eval uses fresh Pi 0.87.0 JSON subprocesses against an explicitly attested dedicated Plastic sandbox and is not a skill eval. It compares all-active, balanced, and loader-only mode behavior, checks exact smallest-sufficient loader activations, blocks destructive calls unless they are supported `preflight: true` previews, captures tool calls and sanitized provider-schema measurements, and deletes raw provider payload captures by default.\n\n```bash\nnpm run eval:tool-loading -- --dry-run\nPI_PLASTIC_EVAL_SANDBOX=/absolute/path/to/sandbox PI_PLASTIC_EVAL_ALLOW=dedicated-sandbox npm run eval:tool-loading -- --model openai-codex/gpt-5.6-luna --condition balanced\n```\n\nSee [`evals/tool-loading/README.md`](evals/tool-loading/README.md) for approved model restrictions, cases, measurements, and result hygiene.\n\n## Constrained sampling compatibility\n\nPi supports provider-side constrained sampling for tools. `pi-plastic` does not currently opt in: every public Plastic schema includes optional fields (at minimum `workdir`), while OpenAI strict function schemas require closed objects and all declared properties to be required. Pi forwards the registered schema without converting those optional fields.\n\nEnabling `strict: \"prefer\"` now would therefore either produce invalid strict OpenAI requests or require a breaking redesign of the ordinary tool arguments. The test suite audits all registered tools and prevents accidental opt-in until a schema is genuinely strict-compatible. Existing TypeBox validation and Plastic runtime safety checks remain authoritative.\n\nOpenAI Codex models may advertise grammar tools without advertising strict JSON-schema tools. Grammar sampling is not used here because Plastic operations have structured multi-field arguments rather than a single bounded string language.\n\n## Implementation notes\n\n- The core implementation lives in `src/plastic-core.ts`.\n- Shared workspace discovery and branch parsing live in `src/plastic-workspace.ts`.\n- `extensions/plastic-branch-status.ts` owns the additive footer status and its session-scoped refresh lifecycle.\n- `index.ts` is the Pi tool registration layer.\n- `src/plastic-renderers.ts` owns compact calls, result summaries, and expanded evidence.\n- Output shapes are intentionally stable for prompt and workflow compatibility.\n\n## License\n\nMIT. See `LICENSE`.\n","readmeFilename":"README.md"}