{"_id":"@baizor/pipeline-runner","_rev":"25-4a8b80552d85b01f49c3e785489ce4f7","name":"@baizor/pipeline-runner","dist-tags":{"latest":"0.17.1"},"versions":{"0.1.0":{"name":"@baizor/pipeline-runner","version":"0.1.0","_id":"@baizor/pipeline-runner@0.1.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://github.com/IvanMurzak/pipeline-runner#readme","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"8003b65e5353a2d4f1006d1ccca17ed87abf30fc","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.1.0.tgz","fileCount":79,"integrity":"sha512-CHx+iGQJM62KXYag9ZOF/JhqU9Xd/7CKXb3eDUooQKw6dPxmgfH14lZ+PP9wgpIHDSw5p1IA87scNAyLTNLjrw==","signatures":[{"sig":"MEQCIDeZVm6xp8UIBzJxkkOpds5Paz1JBDRG/9UrYWtLwp48AiBQWgawT15ihB1Vv4+D/WpWr7MmnaLj4jY/NnCwqvN7+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":464464},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"333db7d7553d5e0b71f0fa755819e0eb6cca6f5d","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.18.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.18.0","dependencies":{"@baizor/pipeline-protocol":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.1.0_1784200839741_0.5130293468260574","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@baizor/pipeline-runner","version":"0.1.1","_id":"@baizor/pipeline-runner@0.1.1","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://github.com/IvanMurzak/pipeline-runner#readme","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"fff3329ad39dc2290cdd89a43bb0b35c5b328123","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.1.1.tgz","fileCount":79,"integrity":"sha512-xGHGMo9zFKci/CvF/WcJn9GPCQbuVltbRrWqcgD8osJ4MswsZm+xU4uVniGGNCmqC34aLK5tcrb7QchhzYSafA==","signatures":[{"sig":"MEQCICACOz8SozZv+RyS867CZqcVhtYzxeKLIrmPStdOGgKaAiA5HXuOvTv6mp2MGnUViiBIYJymCc+NQq7jK70asFfh6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":464464},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"4604cb67cdb660dcf1d4e7a8ba5e773bd4bd031b","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.18.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.1.1_1784201450808_0.4974694971954716","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@baizor/pipeline-runner","version":"0.1.2","_id":"@baizor/pipeline-runner@0.1.2","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"08918aad8249e449d95856191d0fe7264f310cdf","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.1.2.tgz","fileCount":79,"integrity":"sha512-uz7I2yyv7tVJg93uY8rS3FPJL3UwybgdzmzJ5DwfDyzi1dwvz9ZkBTCaSOy8SeUzqCcCgJ2J8YgJOorH4m7s+w==","signatures":[{"sig":"MEUCIQDoWkbAypttxuJpWxdX6xqzhUJFVMnBvxVlX4fLJ4gXogIgXVRbmgCmRc4ZVEXKYLKuAHH/XriePXMXPK0SVODihkw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":464505},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"5369ca96effd83ccd2a7286d08631ba1de28595d","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.18.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.1.2_1784201906824_0.5899298336203271","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@baizor/pipeline-runner","version":"0.2.0","_id":"@baizor/pipeline-runner@0.2.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"cedb36713840b0b00471388066cdb4ebaaad2ba6","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.2.0.tgz","fileCount":79,"integrity":"sha512-sZCUtcaVxWU2Ufvo51Uq2NH7Ers7eTgf9CCj6IvJY0cF+uUXDw7v1kEDP6yK6x4o7sLHB3q3A0OmNnGQvXnAlA==","signatures":[{"sig":"MEUCICB+MA9h66Xqou3CJBafL/l5bHghv7xCnbdVmLvi25ZrAiEAjQWLtsa0XHAZ1+qdNABS1YsDrGbZ0/yJt2SPD+zfg3g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":478370},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"f7362408d2d6f041c99f50a0569dd584e90ff92e","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.18.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.2.0_1784266781139_0.582531734601325","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@baizor/pipeline-runner","version":"0.3.0","_id":"@baizor/pipeline-runner@0.3.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"12d574f611a518682c00f67808c8d8419482a599","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.3.0.tgz","fileCount":92,"integrity":"sha512-/QG8YE2Kdluq1YvYjnAHR7/H/Q17IQFwJ1vmtbrzCx7nm1+9SnBI5Lri7Aqw62o84Zb8bHz7FRQMlYOBjM8Wsg==","signatures":[{"sig":"MEUCIQCyuuRdKewrFdVyPBT1goIFWT9/eqQIb3OI5Un5lFAzdgIgRe395NqWkc7Pm7F6rjSXCqM04WzSLE+w3uIRKzh01rw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":702937},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"680e97fa6223835c529056b37da34f84a27eea35","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.18.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.3.0_1784416659979_0.4391565916844913","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@baizor/pipeline-runner","version":"0.4.0","_id":"@baizor/pipeline-runner@0.4.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"ee10a2df8993bf09ff1c902ce013e600bbde6399","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.4.0.tgz","fileCount":93,"integrity":"sha512-Vo1EKkqL28W3qolpm42uFTjgP0HQDPfzYDefVARreTtGZ7LXWM4ro5Lo8a20f7K430CrE/Xq84P5hx1ne6RFfw==","signatures":[{"sig":"MEUCICrxxFX2vVzK8hBa1MrsDwZAJEY+TmcnsezsE6jDuh3tAiEAqJtBkjgvFrnQ9tTX9D9m1tsT+yDt1wNc/sEh/EjmHGQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":741542},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"61c18eaaec7c5e48ab83d7d9614775997048e4ce","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.18.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.4.0_1784774379140_0.6196436942207892","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@baizor/pipeline-runner","version":"0.5.0","_id":"@baizor/pipeline-runner@0.5.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"ddbcd6ccfb4eb6c27e430c8dfcfed77514557627","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.5.0.tgz","fileCount":137,"integrity":"sha512-K9IFB9t60SIm0TX5y1iw9M9D092fDl57XbhRho4MZ/io9wrLqZw+qwpsGQkQ6fzIdU4174hbo2vG35Of7+3K3A==","signatures":[{"sig":"MEUCIGU2OZ6IhPgR4utvXNAllA5FxzkXQq3wmPk3WX6w+v7xAiEAz54GAYv9hGGufWhbPnSAg3FdCmdwP9a1PbGt6rgrMyI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1430847},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"b0e440b915e80583ea9209e38ea143f2aa9df00b","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.18.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.5.0_1785005222244_0.5438980993771689","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@baizor/pipeline-runner","version":"0.6.0","_id":"@baizor/pipeline-runner@0.6.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"bd17ae5138b6bf8f27a18eb407598ff07962f6d0","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.6.0.tgz","fileCount":140,"integrity":"sha512-26vOQBJqqnzeQYFs2LoJHAm33nEsj3K1XxwN80dEw6u3KM9ypjiSGG6irIvONNvdkBfhhRm19+h/p2Y6RcCxFQ==","signatures":[{"sig":"MEUCIQCcKksF/8CY7d9nEFEisuR5Mc391WGFCerdhisdfuggrwIgX6932QOYguYzoieBKBLtFFa4maylgJKP0sxiQ1bzCRU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1507790},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"c1e9d8c12a6954fe8dfd2681615458bde99474fb","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.18.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.6.0_1785211434949_0.8146437806527473","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@baizor/pipeline-runner","version":"0.7.0","_id":"@baizor/pipeline-runner@0.7.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"4c7ccc97142e1f3c54f3907686a1ad2b3d1a7126","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.7.0.tgz","fileCount":157,"integrity":"sha512-AQuHzX2pSIT+tVywxR54FMBBOfcetyjpMnxvhlECV3V9GahlbEl+cU/RwIWPCKd9gMpganXDf4n6BbqLJU7p3Q==","signatures":[{"sig":"MEUCIQCCDgOOaNOMiarT2kIyz2w2jiA7U+JFAtdrZqdrPO4AzAIgXwZUcrGUTqtkTlKb+3/18wyz9PeQ/g95Cg1Q3FE8j3E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2085973},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"9303ba24cbb0982544076a9c4c27384c50eb8def","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.7.0_1785400901558_0.5506391926333316","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@baizor/pipeline-runner","version":"0.7.1","_id":"@baizor/pipeline-runner@0.7.1","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"d1aa21274d8bc7df71b9e42b65254594ac5a59df","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.7.1.tgz","fileCount":157,"integrity":"sha512-fCQbjQ6bLZjk98WJ8w4Spu9vRLT3YLtYtPzvmmiS40cR2e1e3yKgUTOVWIejOnF/d8OdtfuQ4nSsblb8gdclNA==","signatures":[{"sig":"MEUCIE2NaJBOSk6BK9Vub+1uQ25dTa7Od/Uimoyun8JReKWdAiEAgS3H4FW6sMo5mNs1//Cr/4b5SMqas5vOcFL/xZEkcoM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2096629},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"5d29a25a470219a708d8254af9116a3c84142930","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.7.1_1785613219084_0.6599636594402072","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@baizor/pipeline-runner","version":"0.7.2","_id":"@baizor/pipeline-runner@0.7.2","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"0aa872396a31309099ea10c5d83285378dfcb349","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.7.2.tgz","fileCount":161,"integrity":"sha512-4hWkvJvg022BUKAI/m00+DYuuYHetkCKkU45AtxEbItjLPZYxR0rJAOMdoYnteZwjKoImyOtG75UjGgV8OBkPw==","signatures":[{"sig":"MEUCIBJ5TyWPm/9Nupy5XR8K/mzAmEmFxX5AK42Gkv5YWMikAiEA/D/ZqckEJPMlsjjts9LsQZSDSkhsAl49/seXP82NyZ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2138085},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"08ec87a73eed80fe4f1c879d270e961bc3842866","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.7.2_1785616376791_0.6981994340462783","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@baizor/pipeline-runner","version":"0.7.3","_id":"@baizor/pipeline-runner@0.7.3","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"e418894f77a5eba74a0c14a98e480c99b67805ae","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.7.3.tgz","fileCount":161,"integrity":"sha512-ZjtTelDGG+uDa5FE03UKcaN2fSmhK7gK/eQijDlUlm2037M2QgtbxuFLOSvCCcEDNVaN/tJHbtthmJFPaFIgOw==","signatures":[{"sig":"MEQCIEfMqPp///tgU3/e43BYeRYAtLCIIzPEj1bkZi/Mq2LuAiAA1+uMMNiloEUHNSq093H2U/0O0qJKQ0dsQkf3UxmQhA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.7.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2142780},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"2c3c9bbdee8690eeafd1c785bb7bf7dfa03c7037","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.7.3_1785617989905_0.6517928391138954","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"@baizor/pipeline-runner","version":"0.7.4","_id":"@baizor/pipeline-runner@0.7.4","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"06781c52977696a69aa447e78e1e437fccd25c31","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.7.4.tgz","fileCount":161,"integrity":"sha512-7G1+UkKdNZuEOW6cxQk0YzU8NXXsP2cF08x8/aTTm+TBX3QM5GDnniZBl1Q37uOyuRck0R0rpE+H2mJEXb6jTA==","signatures":[{"sig":"MEYCIQCiR3rQzjh/T8YQMPd8JtwGePEWu4GUoJV55R/BMc7kcwIhALQiLuFuLnMD/wNiYmBr9hVpJtKdWOuT89kBa3ydE0Ja","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.7.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2143805},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"4b8cbb0384f4d25f5a59cd3d0101c44a278d3b2f","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.7.4_1785618416782_0.5358045930402682","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@baizor/pipeline-runner","version":"0.8.0","_id":"@baizor/pipeline-runner@0.8.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"003eb4821b60f402f06a19f36daba920042b565a","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.8.0.tgz","fileCount":162,"integrity":"sha512-xOwHcF8J+VB0SBzZp++yPVt0uhLqEPzYCU9RQDKMHPdAyJor1ezkO7Dw1NsQJ7qP+61NoRSoNPO630XZfOU4FA==","signatures":[{"sig":"MEUCIEOqdjw6RLi+EkWvIrPbMVg6hm9QFjQZ/Asjxm5rN5FEAiEAu9WwKr38P0V5cd4VzB5e4MRpq9cvkhX+o9KOUr3U7s8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2198479},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"7ed7ef92aa3141f9a51536991a064a6152a7183a","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.8.0_1786146919165_0.21763546194648908","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@baizor/pipeline-runner","version":"0.9.0","_id":"@baizor/pipeline-runner@0.9.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"1fe96cdd25f3442a0600c081e50d13e42b98ed14","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.9.0.tgz","fileCount":162,"integrity":"sha512-pcOeq+95uF3cP0V/pgFGzkj5Mn9KONcENRctRQxxZbfaWKBV2Lte61L0CVcQS32pWVxOcMSVFCyF0S/GkJ3+Cw==","signatures":[{"sig":"MEUCIQDQRkA5CSsRiyWX/aA6jyfMyVQZtbTJ52Yzx/v6uYdGpgIgXYCBJRHtcHPrzYo7RUMopgj7pD5skWyBLfosxnrTyhA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2216372},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"238fac8c23aed06f10895ef96d4f3e0b8a11af6b","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.9.0_1786155535900_0.30731647808286544","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@baizor/pipeline-runner","version":"0.10.0","_id":"@baizor/pipeline-runner@0.10.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"d540794036b48b4d3126ba336d604c38eb3ddf8f","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.10.0.tgz","fileCount":175,"integrity":"sha512-TLl6iVxbW/Pb66eO4tnOD7j+6L4hTSF6f2QCunKcct1D3fY6M3zvA1sv9I8uabWUO5GHuTIBJ2ayOEp4+7Xt/w==","signatures":[{"sig":"MEYCIQCTnytsWWLQ3/AyBlzwwpEzsclwIk3yzze0IvFSeTB/8AIhAPo049O6t77qUT1cTC/Ak7tkizRfXSoHm/uVcl6YCWFq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2417917},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"4513945780b8feee4964fec04694ff609f4d5e42","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.10.0_1786533933275_0.8415547983303364","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@baizor/pipeline-runner","version":"0.11.0","_id":"@baizor/pipeline-runner@0.11.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"8f9db148569232d8a2bf2360f977c360b78c4981","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.11.0.tgz","fileCount":176,"integrity":"sha512-Wc1sbLQn0txovtc3EmYoxp5HaVcCYhk1gcuacA7P0b+rXRZVwX/Zuil80nZz7Xd7+yHlwhe4S4sqDMGLcq/ZJw==","signatures":[{"sig":"MEUCIQC2wW+BEtnDUtELBgb/Er7NYMbYmxEmRqJS0dxZGy4dqgIgdFoZmwIAIBrc9hVh6DW18a8SIeWaRozh487QShMwtQY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2446453},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"dabf078fd6ddaaccd6ab5e7f898f008f4aac9355","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.11.0_1786839242788_0.8452505427888621","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@baizor/pipeline-runner","version":"0.12.0","_id":"@baizor/pipeline-runner@0.12.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"e5916a714a3f0ec6333bce9b897bd52bb0475fcb","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.12.0.tgz","fileCount":181,"integrity":"sha512-2CEBOyscFqpTd99LhoDsVpbbIYrNzP+N/r/05n3/VmaFpFlfqza7QrHNWCeBOAtviCh0WqRxYEGlSB6ciiigpw==","signatures":[{"sig":"MEUCIQD7VR9R8EJREMrH9KNnbF19ZUgm65bZmA38IFcRZg9TUwIgK4iYTElPxFTfuVnPC1jeMlntXPQi7qifixeRsCXcs2Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2555442},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"120c34c42c86914736b7087c465be86a8b6165f1","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.12.0_1786862181594_0.3099503632489937","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@baizor/pipeline-runner","version":"0.13.0","_id":"@baizor/pipeline-runner@0.13.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"52c327278b74f2b400b171c6ab388a9340103837","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.13.0.tgz","fileCount":182,"integrity":"sha512-JZ3cj8lWQN2wr1/0cmOCv9/I1tfMZqi7GV9v7ngsCrgoy8/38BzLdxYauvtTxl+Bt0FkKt83pHHcrkk9Wz1jhw==","signatures":[{"sig":"MEYCIQDmbSm2pNEEJpQzkjVhTjOs8wURK4Pmt8Qe3TPx2bvDEQIhAJDA7VMRy0lDl0A11CuhVG8r9k0rKcYkT23hN9g6/LlN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2605782},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"981f28cbe2d447da76898647b042b69963896ad0","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.13.0_1786946505378_0.07835698806020819","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@baizor/pipeline-runner","version":"0.14.0","_id":"@baizor/pipeline-runner@0.14.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"2c39926192a2bf4c2da74f581b2b53abbecb9c88","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.14.0.tgz","fileCount":182,"integrity":"sha512-kuWLCRKBnVJHyJ50aLvCmdfofBIuP0qScFiIHiNGiRsIvxBYm/Zh44CMmtwfUUxWOxANzZ8Sv7O29p2uuK/efg==","signatures":[{"sig":"MEYCIQDehyVyBGx86ZtGHpQ3SJWUcUj1QON0QHAQPctWAlg6xwIhAPOGf4XbamAT02ks9nT1ETtSo9TF5sPD15J2VkFJzHwq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2610166},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"5b6c6b5b5b4d8d24022e7cb6ca1360907d9ce7d4","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.14.0_1787108916643_0.6069836952866741","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@baizor/pipeline-runner","version":"0.15.0","_id":"@baizor/pipeline-runner@0.15.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"f5fc4f7672df3f89d8007c714160810070390a94","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.15.0.tgz","fileCount":182,"integrity":"sha512-7J1BI+pZAR6imZl8HB4L3AwEVyUWg9d5HwHX5FJLt+0rDyJkIDjghjj7F0Q93ENPvGsLyWyrFVJnQYNkmDuXSg==","signatures":[{"sig":"MEUCIQDUPpiZwYuMgJ1uGplZxoRS+Y51zUXXp9csJxPfi8iQ+wIgd7ddkI+hjTLlJ1hSAPRhFZSvdrimTEiClOkSOKR3PIM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2624269},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"613d15de6b2a6bb667aca22430e7de1e8e9c5bf5","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.0","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.15.0_1787121577476_0.7105310049026192","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@baizor/pipeline-runner","version":"0.16.0","_id":"@baizor/pipeline-runner@0.16.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"8a711e1e4cdd380ca5a817f95efe195f23c24609","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.16.0.tgz","fileCount":182,"integrity":"sha512-U94h8aAlfMwirep4Z6+MoDRMYgjPMBiZ7ltvpCTnJVEipBMJfZRoJO3Ip6lMzUHMlzUA565Chm85ORv9Y8ajUw==","signatures":[{"sig":"MEUCIQC/6mBJd+4bAK5Ec/lyiYdMn1+nmolzOfMgShagEDMPIAIgVRj+uzbcUWlRSKm1Laphrq+GRSgHauLG1TJNKB+MS5w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2644760},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"36da0abdf499258a3df3e0956dbc8c428eae0839","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.1","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.16.0_1788086240999_0.709651113941018","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"name":"@baizor/pipeline-runner","version":"0.16.1","_id":"@baizor/pipeline-runner@0.16.1","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"89d97f2f4bbc578147f8fb3ac3fd6d7577d470b4","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.16.1.tgz","fileCount":182,"integrity":"sha512-PRr9cbAp9zgZ+oABQ6jWQ17oe8tRcQUsFgJUmWKy1il8ssOaAwuo+mHGArPnLnPLEjS2tGoBs4B7T95bcr+lkg==","signatures":[{"sig":"MEUCIGBZc8r1NIG4ON84tDYq2zqKtxG6CmVnzNxvz5mcuIKvAiEA/eqt167VbE6z6qRG+nq9ATMihSLDZn042POVad0QK0Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.16.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2646490},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"d5687481453704c7218a0854f720e6dd007434e1","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.1","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.16.1_1788142386970_0.2722562249741167","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@baizor/pipeline-runner","version":"0.17.0","_id":"@baizor/pipeline-runner@0.17.0","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"homepage":"https://ai-pipeline.dev","bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"bin":{"pipeline-runner":"src/cli.ts"},"dist":{"shasum":"c679b568d2b2f5f1db5b520e0ec9259f329d7a9c","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.17.0.tgz","fileCount":185,"integrity":"sha512-xP/4pNY+hsfuWI9hA5cmRCZPm6uqF8+Wl57TsbEUPyNasRUZIWyhrB2DNGbCucJF7SD8JBhp+KIV3JRDqqgjJw==","signatures":[{"sig":"MEQCIFVHjqkSnLKpy8cRxCbQ421/sZ6vWRo44WAg9xiWX2xLAiAkjTDVixunwq8YiTaaYo9giUk331hbUrMiktAyftDJiw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCOaQvIBgKZFVOLv6V7Kug9W/AWCXsH7Jp9FJrnJbfFxwIgN4HRnuxAV9gnvHmraAInrq3YXBmsqaFCaXXWIppU6Zs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2690939},"type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"1ac38eff5290b24e8f4782751404fa160cdc97a0","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.1","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"tmp":"tmp/pipeline-runner_0.17.0_1789347319761_0.848907696374607","host":"s3://npm-registry-packages-npm-production"}},"0.17.1":{"_id":"@baizor/pipeline-runner@0.17.1","bin":{"pipeline-runner":"src/cli.ts"},"bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"dist":{"shasum":"9d9569b8414acd0eee6a112db349b702ae62e708","tarball":"https://registry.npmjs.org/@baizor/pipeline-runner/-/pipeline-runner-0.17.1.tgz","fileCount":186,"integrity":"sha512-e+TyqojlcQXCeEtKEAkn+An48LdBIITstVEpxoGl9sR8qzoOAGC7DPWEga5D5z/RJLrc1aLX0XwW+/j/G/p50A==","signatures":[{"sig":"MEQCIHK8BCgfpa9ZkjT3LHe/2FaOy9uMvtgi5GnUyBpwt0PHAiBNKYCpEah3yRApfa4Xl/dHhIulkHLoIq4dmqJX/qgBpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGWLsHwLzSn6qt8T78piEfh8opZv87DjJkdvxyOs/UTtAiBn7rOcL/bD7YOSnJRKWWfj6saeufUCdX+LwmyGEkjRSg=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@baizor%2fpipeline-runner@0.17.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2701187},"name":"@baizor/pipeline-runner","type":"module","engines":{"bun":">=1.0.0"},"exports":{".":"./src/index.ts"},"gitHead":"349c39b94f6a9d1a5f6fd1e6380b323d1abdb866","scripts":{"test":"bun test tests/","runner":"bun src/cli.ts","typecheck":"bunx tsc --noEmit"},"version":"0.17.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:956e60f6-3563-4791-8b39-cd4f6989716f"}},"homepage":"https://ai-pipeline.dev","repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"_npmVersion":"11.19.1","description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","directories":{},"maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"_nodeVersion":"22.14.0","dependencies":{"@baizor/pipeline-protocol":"0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.0","typescript":"^5.9.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pipeline-runner_0.17.1_1789536788758_0.4105288500354649"}}},"time":{"created":"2026-07-16T11:20:39.609Z","modified":"2026-09-16T05:33:09.195Z","0.1.0":"2026-07-16T11:20:39.879Z","0.1.1":"2026-07-16T11:30:50.970Z","0.1.2":"2026-07-16T11:38:26.961Z","0.2.0":"2026-07-17T05:39:41.308Z","0.3.0":"2026-07-18T23:17:40.161Z","0.4.0":"2026-07-23T02:39:39.324Z","0.5.0":"2026-07-25T18:47:02.416Z","0.6.0":"2026-07-28T04:03:55.125Z","0.7.0":"2026-07-30T08:41:41.728Z","0.7.1":"2026-08-01T19:40:19.249Z","0.7.2":"2026-08-01T20:32:56.949Z","0.7.3":"2026-08-01T20:59:50.098Z","0.7.4":"2026-08-01T21:06:56.998Z","0.8.0":"2026-08-07T23:55:19.376Z","0.9.0":"2026-08-08T02:18:56.149Z","0.10.0":"2026-08-12T11:25:33.440Z","0.11.0":"2026-08-16T00:14:02.981Z","0.12.0":"2026-08-16T06:36:21.772Z","0.13.0":"2026-08-17T06:01:45.562Z","0.14.0":"2026-08-19T03:08:36.950Z","0.15.0":"2026-08-19T06:39:37.693Z","0.16.0":"2026-08-30T10:37:21.242Z","0.16.1":"2026-08-31T02:13:07.152Z","0.17.0":"2026-09-14T00:55:19.899Z","0.17.1":"2026-09-16T05:33:08.875Z"},"bugs":{"url":"https://github.com/IvanMurzak/pipeline-runner/issues"},"homepage":"https://ai-pipeline.dev","repository":{"url":"git+https://github.com/IvanMurzak/pipeline-runner.git","type":"git"},"description":"Standalone long-running runner daemon for cloud-dispatched pipeline runs: registers with a runner token over the control plane's /agent/v1 WSS channel (long-poll fallback seam), heartbeats, accepts job leases, ships events, and relays needs-input. Also in","maintainers":[{"name":"baizor","email":"Ivan.D.Murzak@gmail.com"}],"readme":"# pipeline-runner\n\nStandalone, long-running runner daemon for [ai-pipeline.dev](https://ai-pipeline.dev):\ninstall it on a machine to execute cloud-dispatched pipeline runs. It dials\nOUT to the control plane's `/agent/v1` WSS channel (no inbound ports),\nregisters with a scoped runner token, heartbeats, accepts job leases, checks\nout an isolated workspace, drives the run through the `pipeline` CLI, ships\nevents back, and relays `needs_input` prompts. It can also install itself as\na native OS service (systemd on Linux, launchd on macOS, or a hidden per-user\nTask Scheduler job on Windows).\n\n## Prerequisite: the `pipeline` CLI must be on PATH\n\nThe runner does not execute pipelines itself — it shells out to the\n[`pipeline`](https://github.com/IvanMurzak/pipeline-claude) CLI (from the\n`ai-pipeline` Claude Code plugin) to match and drive runs\n(`pipeline match`, `pipeline drive`). Install the plugin on any machine you\nintend to register as a runner so `pipeline` resolves on PATH before running\n`register`/`start`.\n\n## Usage\n\n```sh\n# one-time: store identity + validate the credential against the control plane\nbun src/cli.ts register --url <base-url> --token <runner-token> \\\n    [--label repo:acme/api]... [--capacity 2] [--store-only]\n\n# ...or register with OAuth client credentials instead of a plaintext token\nbun src/cli.ts register --url <base-url> \\\n    --client-id <runner-id> --client-secret <secret>\n\n# migrate an already-registered runner onto OAuth client credentials\nbun src/cli.ts set-credentials --client-id <runner-id> --client-secret <secret>\n\n# run the runner loop (connect, register, heartbeat, reconnect, accept jobs)\nbun src/cli.ts start\n\n# inspect the stored identity (credentials redacted)\nbun src/cli.ts status\n\n# inspect durable logs, or stream them live without opening a service console\nbun src/cli.ts logs --since 1h\nbun src/cli.ts logs --follow\n\n# install/uninstall/status as a native OS service\nbun src/cli.ts service <install|uninstall|status> [--dry-run]\n\n# start / stop / restart an ALREADY-INSTALLED service, without re-registering it\nbun src/cli.ts service <start|stop|restart> [--name <n>] [--home <path>]\n\n# department runtime bindings — what this machine will actually execute\nbun src/cli.ts bind --department <id> --command <cmd> [--arg=<a>]... \\\n    [--adapter <id>] [--cwd <path>] [--lifecycle <l>] [--spec <json>]\nbun src/cli.ts unbind --department <id>\nbun src/cli.ts bindings [--json]\n\n# what this machine has recorded for one department (local read, never ships)\nbun src/cli.ts journal --department <id> [--json] [--limit <n>]\n```\n\n`register` flags:\n\n| Flag | Required | Meaning |\n|---|---|---|\n| `--url <base-url>` | yes | Control-plane base URL, e.g. `https://api.ai-pipeline.dev`. |\n| `--token <runner-token>` | one of | Scoped runner token issued by the control plane. |\n| `--client-id <id>` + `--client-secret <s>` | one of | OAuth client credentials for this runner (see below). `--client-id` is the runner id. |\n| `--label <k:v>` | no, repeatable | Matchable label, e.g. `--label repo:acme/api`. `os:<detected>` is always added. |\n| `--capacity <n>` | no | Max parallel runs this runner accepts (positive integer). |\n| `--cli-version <v>` | no | Detected `pipeline` CLI version, for server-side compatibility checks. |\n| `--plugin-version <v>` | no | Detected `ai-pipeline` plugin version, or omit if not installed. |\n| `--store-only` | no | Store the identity but skip the one-time connect-and-validate step. |\n\n### Registering with OAuth client credentials\n\nA runner can register with a short-lived OAuth `runner:register` token instead\nof a plaintext long-lived runner token. The control plane issues the credential\npair (`clientId` = the runner id, `clientSecret` shown once) when the runner is\nminted, or on demand from `POST /api/v1/runners/:id/oauth-credentials`. The\nrunner then exchanges them at `POST /oauth/token`\n(`grant_type=client_credentials`, `scope=runner:register`) on every connect and\nputs the resulting token on the register frame.\n\n| Env var | Meaning |\n|---|---|\n| `PIPELINE_RUNNER_OAUTH_CLIENT_ID` | Alternative to `--client-id`. |\n| `PIPELINE_RUNNER_OAUTH_CLIENT_SECRET` | Alternative to `--client-secret` — keeps the secret out of argv and shell history. |\n\n**Nothing breaks if you do not do this.** A runner with no client secret keeps\nusing its runner token, and the control plane keeps accepting it. Even a runner\nthat *has* client credentials falls back to its runner token whenever the token\nexchange cannot complete — endpoint unreachable, credential refused, malformed\nresponse, slow — so migrating can never leave a runner unable to register.\n\nThe runner token is **kept, not replaced**: `register` carries an existing one\nforward when you do not pass `--token`, and says so. It is removed only by the\nexplicit `set-credentials --drop-token`, which you should run once the control\nplane's `GET /api/v1/runners/credential-window` reports this runner clear.\n\nThe `PIPELINE_RUNNER_OAUTH_*` variables are read by `register` only when you\nalso pass `--client-id` or `--client-secret` on the command line, so exporting\nthem cannot attach credentials to an unrelated `register --token`.\n`set-credentials`, whose whole purpose is installing them, always reads them.\n\n`set-credentials` flags:\n\n| Flag | Required | Meaning |\n|---|---|---|\n| `--client-id <id>` | yes | The runner id (the OAuth `client_id`). Env: `PIPELINE_RUNNER_OAUTH_CLIENT_ID`. |\n| `--client-secret <s>` | yes | The OAuth client secret. Env: `PIPELINE_RUNNER_OAUTH_CLIENT_SECRET`. |\n| `--drop-token` | no | Also remove the legacy runner token from the config. Removes the fallback — only do this once the credential-window report is clear. |\n| `--home <path>` | no | Which isolated runner home to migrate, when several runners share this host. |\n\n`service install` supports `--dry-run` to print the generated systemd unit,\nlaunchd plist, Windows Task Scheduler command + hidden wrapper, or the opt-in\nSCM commands without touching the system.\n\n### Durable logs\n\nEvery `start` process writes one JSON object per line under the runner data\ndirectory: `%LOCALAPPDATA%\\pipeline-runner\\logs` on Windows,\n`$XDG_STATE_HOME/pipeline-runner/logs` (falling back to\n`~/.local/state/pipeline-runner/logs`) on Linux/macOS, or `<home>/data/logs`\nfor an instance pinned with `--home`. Files roll at UTC midnight and are kept\nfor 30 days. A hard kill can damage at most the final incomplete line, which\nthe reader ignores.\n\n`pipeline-runner logs` renders the last 200 records by default. Useful forms:\n\n```sh\npipeline-runner logs --follow\npipeline-runner logs --since 30m --level warn\npipeline-runner logs --limit 1000 --json\npipeline-runner logs --home <path> --follow\n```\n\n`--level` is a minimum severity (`debug`, `info`, `warn`, `error`). `--since`\naccepts durations such as `30s`, `15m`, `12h`, `7d`, or an ISO-8601 timestamp.\nInteractive output colors the severity column; `NO_COLOR` disables it. The\ndefault limit is 200 matching records, and `--limit 0` reads all of them.\n\n### `service start` / `stop` / `restart`\n\n`install` **registers** the service (and on a re-run stop+deletes+recreates it,\nwhich needs an elevated shell on Windows). Use these when the service is\nalready installed and you just want it up, down, or bounced:\n\n| Verb | Not installed | Already in that state | Otherwise |\n|---|---|---|---|\n| `start` | **fails**, naming `service install` | success, \"already running\" | starts it, then **re-queries** and refuses to report success it did not observe |\n| `stop` | success, \"nothing to stop\" | success, \"already stopped\" | stops it, keeping it installed |\n| `restart` | **fails**, naming `service install` | — | stop then start, verified the same way |\n\nNotes worth knowing before you rely on the exit code:\n\n- A failure that is genuinely a **privilege** problem says so (Windows exit 5,\n  launchd's \"Operation not permitted\"); one that is not, does not.\n- Windows `START_PENDING` / `STOP_PENDING` and a launchd agent that is loaded\n  but has not been given a pid yet are reported as **inconclusive**, not as\n  success. Re-check with `service status`.\n- On macOS, `stop` **unloads** the agent (`launchctl unload -w`): `install`\n  writes `KeepAlive`, so a plain `launchctl stop` would be relaunched\n  instantly. The plist is kept, and the agent stays down until `service start`.\n- `stop` does not disable a systemd unit or a Windows service — both come back\n  at the next boot. `service uninstall` is what removes them.\n\n### Reboot/logout recovery of the installed service\n\nCrash-resume (below) only helps if the daemon actually comes back after it\ndies — `service install` now also configures the OS side of that, per\nplatform:\n\n- **Linux (systemd, user unit):** install additionally runs\n  `loginctl enable-linger` so the user's systemd instance — and this unit —\n  keeps running after logout and starts again at boot, without an active\n  login session. This is best-effort: if lingering can't be enabled (e.g. no\n  polkit/D-Bus permission in a locked-down or containerized session), install\n  still succeeds — a warning names the exact command to run yourself:\n  `loginctl enable-linger \"$USER\"`.\n  **System-unit alternative:** for boot-level start that does not depend on\n  lingering at all, run the daemon as a root SYSTEM unit instead: copy the\n  `[Unit]`/`[Service]` block from `service install --dry-run` into\n  `/etc/systemd/system/pipeline-runner.service` (drop the user-only\n  `WantedBy=default.target` line in favor of `multi-user.target` if you want\n  it before any login), then `sudo systemctl enable --now\n  pipeline-runner.service`. This is a manual step — `service install` never\n  requests elevation and does not manage system units itself.\n- **Windows (default Task Scheduler backend):** a per-user ONLOGON task runs as\n  the registered user. Its action is the GUI-subsystem `wscript.exe`, whose\n  generated wrapper starts Bun hidden, waits for it, and propagates its exit\n  code. No console or Windows Terminal window is created; use\n  `pipeline-runner logs --follow` instead. Re-run `service install` (or\n  `service restart` after upgrading to a build with this behavior) to migrate\n  an older direct-`bun.exe` task. The opt-in `--service-host scm` backend is\n  retained for wrapped/headless installations that must run while logged out.\n- **macOS (launchd, LaunchAgent):** `RunAtLoad` + `KeepAlive` restart the\n  daemon on crash and at LOGIN, but explicitly **not at boot** before anyone\n  logs in — there is no root LaunchDaemon (`/Library/LaunchDaemons`) support\n  yet; that option is deferred. `service install` prints this caveat. A\n  headless Mac with auto-login is unaffected; one that waits at the login\n  window after a reboot will not run the runner until someone logs in.\n\n### Transcript retention (crash-resume requirement)\n\nCrash-resume below re-enters a pinned Claude Code step session mid-thought by\nreading its transcript. Claude Code prunes transcripts older than\n`cleanupPeriodDays` (default 30) at the startup of ANY `claude` process on the\nhost — independent of this runner. On any machine that runs\n`pipeline-runner` as a service, set `cleanupPeriodDays >= 14` in Claude\nCode's settings: the control plane parks an unanswered `awaiting_input` run\nfor up to 14 days before ending it `abandoned-needs-input`, so the transcript\nmust outlive that whole window or a resumable crash silently becomes an\nUNRECOVERABLE one (record dropped, `run_status halted`) the next time the\nrunner reconciles.\n\n### Crash resume + workspace retention\n\nA daemon death never loses a run: every accepted job persists a durable\nrecord under the runner DATA dir (`%LOCALAPPDATA%\\pipeline-runner\\jobs\\` on\nWindows, `$XDG_STATE_HOME/pipeline-runner/jobs/` elsewhere — no secrets, the\njob JWT is never written to disk). On `start` the runner reconciles those\nrecords BEFORE connecting: a record younger than its lease TTL resumes\nin-place (`pipeline drive --resume` in the recorded checkout — pause windows\nrestored, parked questions re-surfaced); an older one is QUARANTINED and only\nresumed when the control plane re-offers the run (`resume_hint` lease →\nadoption in the recorded checkout) or discarded on `cancel`; a record whose\nresume substrate is gone (checkout / `next.json` / claude session transcript\ndeleted) is dropped with a `run_status halted`. `SIGTERM`/`SIGINT` drain\ngracefully: stop accepting leases, persist records, terminate drive children\n(their per-step state is durable), flush the event spool, exit 0. (Windows:\nan SCM `stop` is a hard terminate — that is fine; hard death is the design's\nbaseline assumption.)\n\nTerminal workspaces (completed / cleanly halted / cancelled runs) are deleted\nby default. Environment knobs:\n\n| Variable | Meaning |\n|---|---|\n| `PIPELINE_RUNNER_WORKSPACE_RETENTION=<dur>` | Keep terminal workspaces for a window (`30s`, `15m`, `12h`, `7d`, or plain seconds); a boot-time + hourly GC reaps expired ones. |\n| `PIPELINE_RUNNER_KEEP_WORKSPACES=1` | Never delete workspaces or job records (infinite retention, GC off). |\n\nQuarantined crash leftovers that no re-offer ever claims are reaped after\n14 days (or the configured retention window, whichever is longer).\n\nIdentity is stored at `%APPDATA%\\pipeline-runner\\config.json` (Windows) or\n`$XDG_CONFIG_HOME/pipeline-runner/config.json` (elsewhere; `~/.config`\nfallback) with restrictive file permissions where the OS supports them. The\nrunner token is a secret: it is persisted (it is the runner's credential) but\nnever logged.\n\n## Department runtime bindings\n\nA **binding** says which `department_id` this machine will execute and how. It\nis the local half of a department: the control plane holds the advertised\nmanifest and structurally refuses to store `command` / `args` /\n`workingDirectory` / `environment`, so nothing remote can change what runs\nhere.\n\n```sh\nbun src/cli.ts bind --department 018f…-uuid --command unity-department --arg=--stdio\nbun src/cli.ts bindings\nbun src/cli.ts unbind --department 018f…-uuid\n```\n\nBindings live in `departments.json` next to `config.json` (so\n`PIPELINE_RUNNER_HOME` isolates them per instance), written mode `0600` inside\na `0700` directory. **A running runner re-reads the file** — on a filesystem\nwatch, on `SIGHUP` (POSIX), and on a slow safety-net poll — so binding or\nunbinding a department takes effect without a restart. Unbinding stops new\noffers being accepted; executions already running are left to finish.\n\nEverything about the file **fails closed**: missing, unreadable, not JSON, the\nwrong shape, an `apiVersion` this runner does not know, or a file that is\ngroup-/world-writable or owned by another account all resolve to *no\ndepartments configured*, with the reason stated in the log. A broken or\nhalf-written file can therefore only ever narrow what this machine runs, never\nwiden it. (On Windows POSIX modes are meaningless, so the per-user profile ACL\nis the control there — the same posture `config.json` has always had.)\n\n`bindings` exits non-zero when the store is refused, so a script can tell.\n\n`--adapter` is checked against this build's own engine registry\n(`src/department/engine.ts`), and an adapter this runner has no module for is\n**refused**, naming the ones it has — `claude-code`, `container`,\n`jsonl-process` (`engine: process`), `pipeline-drive` (`engine: pipeline`).\nBefore this, `bind` stored whatever string it was given, so a wrong id produced\na stored binding, a success line, and a `capability` reject on the first task\nthat ever arrived. Callers can therefore stop mirroring this table and just ask.\n\n### What the runner puts in a department session's environment\n\nWhen the runner can mint an execution token for a task, it injects the\ndepartment MCP connection into the spawned process's environment — that is the\nwhole of \"point a model-driven runtime at `/mcp`\". A JSONL runtime is free to\nignore these; an MCP-speaking one becomes its own client with nothing else.\n\n| Variable | Meaning |\n|---|---|\n| `PIPELINE_DEPARTMENT_MCP_URL` | The department MCP endpoint for this execution. |\n| `PIPELINE_DEPARTMENT_EXECUTION_TOKEN` | A short-lived, audience-restricted bearer for it. Never logged, never on a command line. |\n| `PIPELINE_DEPARTMENT_HELPER_URL` | Loopback endpoint that hands back a FRESH token, so a session outliving its token keeps its tools. |\n| `PIPELINE_DEPARTMENT_HELPER_SECRET` | Per-execution secret authorizing exactly that one call. Never logged, never on a command line. |\n\nAll four are injected only when the runner actually has something to inject:\nno registration, no execution token, or a refused loopback grant each mean the\ncorresponding variables are simply absent, and every shipped engine tolerates\nthat.\n\n**These were named `PIPELINE_MESH_*` before.** For the duration of the rename\nwindow the runner sets **both** spellings on every spawn, pointing at the same\nvalues, and reads the new name first and the old one as a fallback. A runtime\nwritten against either generation keeps working, with no flag and no\nconfiguration. The old names will be dropped in a later release that says so.\n\n### `PIPELINE_RUNNER_DEPARTMENTS` is deprecated\n\nThe old environment variable still works, unchanged, **when no binding file\nexists** — and it now prints a deprecation warning. It is boot-time immutable\nby construction: a runner configured that way cannot learn about a new\ndepartment without a restart, which is the whole reason the file exists.\n\nIf a binding file exists, the file is the **sole authority** and the variable\nis ignored with a warning naming both. There is no merge: a security-critical\nanswer gets one author.\n\n## `journal` — what this machine ran for a department\n\n```sh\nbun src/cli.ts journal --department 018f…-uuid --json\n```\n\nReads the per-department **admission index** the runner writes under its data\ndir and prints, per execution, who addressed the task (`sender`), which engine\nran it, when, and where that execution's own journal is. `--json` is a stable\ncontract: every documented key is always present, `null` where a value is\ngenuinely absent.\n\nIt exists because a reader in another package has to resolve the runner's data\ndir **as the invoking user**, which finds nothing when the runner runs as a\nservice under a different OS account — the shape `service install` produces on\nWindows, where the SCM defaults to `LocalSystem`. This command additionally\nreads the *installed service definition*: it follows a `--home` the definition\npins, and when it still finds nothing it names the account that owns the\njournal instead of reporting an unexplained blank.\n\n`--json` keys (all always present):\n\n| Key | Meaning |\n|---|---|\n| `schema` | Version of this output shape. Adding a key is additive and does not move it. |\n| `department_id` | The id that was asked about. |\n| `status` | `ok` \\| `absent` \\| `unreadable` \\| `unlocatable`. |\n| `message` | Why, for a non-`ok` status; `null` when there is nothing to explain. |\n| `path` | The index file read (or that would have been); `null` only when nothing could be located. |\n| `home_source` | Which home answered: `flag` \\| `env` \\| `service` \\| `default` \\| `none`. |\n| `executions[]` | `run_id`, `task_id`, `context_id`, `sender`, `engine`, `ts`, `journal_path` — append-ordered, oldest first. |\n| `tasks{}` | `task_id` → `{ sender, engine, run_id, ts }` for its **most recent** execution. |\n| `counts` | `{ executions, skipped, limit, truncated }`. `skipped` counts unparseable lines (a truncated last line after a hard kill). |\n| `supervisor` | The installed definition's `{ backend, installed, home, account, systemAccount, note }`, or `null` when no probe was needed. |\n\nExit codes: **0** for a journal that was read *and* for one that is simply not\nthere (never having served a department here is a normal state); **1** when the\nfile exists but cannot be read, or the data dir cannot be resolved at all. The\nJSON is printed in every case, so the reason is always machine-readable.\n\n**Privacy.** This is a local read of a file already on this machine, printed to\nthe stdout of a process you started. It reads only the admission index — not\nthe per-execution journals — so no message body, question, artifact, or failure\nreason is reachable through it. `sender` appears in the clear here because that\nis what is on disk; the *shipping* path fingerprints it (`src/shipper/privacy.ts`\nmaps `sender: 'fingerprint'`), so what leaves the machine at the metadata tier\nis `fp:<sha256-16>` and never the identity. This command writes nothing, ships\nnothing, and stores no field that was not already being stored.\n\n## Run-stats sync and the `sync_local_stats` flag\n\nA registered runner syncs per-run **statistics records** to the control plane\nthrough its event shipper: durations, step statuses/outcomes, token and cost\ncounts, tool-call/failure counts, model/effort ids — **metrics only, never\ntranscripts, prompts, code, file contents, or error text**. Tool-failure\nentries are stripped down to the tool name, step id and count before anything\nleaves the machine; the failure's error excerpt text never ships, on any\nprivacy tier. Every record is validated against the published\n`@baizor/pipeline-protocol` `RunRecordStatsSchema` before it is buffered or\nuploaded.\n\n**Disclosure (shown at runner registration):** on a machine registered as a\nrunner, this covers *cloud-dispatched* runs **and** pipeline runs you start\n*locally* on that machine — local-run metric sync is **on by default** so\nyour dashboards see every runner you have in one place. Records are tagged\n`origin: \"dispatched\" | \"local\"` so analytics can tell them apart. Late token\nenrichment is picked up by a periodic rescan (14-day window per record) and\nre-synced as a superseding revision of the same record.\n\nRetention note: the runner remembers which run records it has already sent for\nas long as those records stay inside the 14-day rescan window, and forgets them\nafterwards. That bookkeeping is deliberately independent of its other state\nbounds — forgetting a record the watcher can still see would make an\nalready-synced run look brand new and send it a second time.\n\nOpt out of local-run sync at any time with `sync_local_stats=0` — set the\nenvironment variable `PIPELINE_SYNC_LOCAL_STATS=0` for the runner process\n(cloud-dispatched runs keep syncing; they are the product's job telemetry).\nUnrecognized values fail toward privacy (treated as opt-out). The broader\nprivacy tier of the event stream is governed separately by\n`PIPELINE_PRIVACY_TIER` (default `metadata` — content never leaves the\nmachine).\n\n## Layout\n\n```\nsrc/core/wire.ts        # vendored wire-protocol subset (see header) — envelope,\n                         # register/register_ack/register_reject, heartbeat/heartbeat_ack\nsrc/core/config.ts       # identity/config store (injectable fs + path)\nsrc/core/register.ts     # register frame build + ack/reject interpretation\nsrc/core/backoff.ts      # exponential backoff + bounded jitter, capped\nsrc/core/dispatcher.ts   # inbound frame router (log-and-ignore for future types)\nsrc/core/heartbeat.ts    # heartbeat loop (injectable clock; ack pairing; directives)\nsrc/core/transport.ts    # transport seam: WSS primary + provisional long-poll fallback\nsrc/core/connection.ts   # the connection state machine tying it all together\nsrc/dispatch/            # task-dispatch pipeline resolution (`pipeline match`)\nsrc/jobs/                # lease -> accept -> workspace -> `pipeline drive`\nsrc/shipper/             # event shipper: tails run artifacts, batches, uploads\nsrc/relay/               # needs-input relay + the run-bound chat channel, one WSS channel\nsrc/service/             # OS service install/uninstall/status/start/stop/restart\n                         #   (systemd/launchd/Windows) + inspect.ts: read the INSTALLED\n                         #   definition (pinned home, service account)\nsrc/department/bindings.ts # file-backed, reloadable department runtime bindings\nsrc/department/engine.ts   # the engine registry — what `bind --adapter` is checked against\nsrc/department/journal-read.ts # `journal`: the local department journal, read back\nsrc/cli.ts               # thin CLI: register / start / status / service / bind / journal\n```\n\n## Wire protocol\n\nThe wire protocol comes from the published\n[`@baizor/pipeline-protocol`](https://www.npmjs.com/package/@baizor/pipeline-protocol)\nnpm package (repo [`IvanMurzak/pipeline-protocol`](https://github.com/IvanMurzak/pipeline-protocol))\n— zod schemas + inferred TS types, additive-only within a protocol major.\n`src/core/wire.ts`, `src/jobs/wire.ts`, `src/relay/wire-relay.ts`,\n`src/relay/chat-wire.ts`, and `src/shipper/wire-ingest.ts` are thin re-export\nseams over it: they keep the runner's internal import paths stable and hold\nthe few runner-local helpers (frame builders, deliberately tolerant inbound\nguards) the package does not provide.\n\n### The run-bound chat channel (`chat_send` / `chat_reply`)\n\nA registered runner declares `chat_capable: true` only when it has actually\nwired the chat relay, and the control plane gates sends on that flag. An\ninbound `chat_send` is accepted **only** for a run this runner is currently\nexecuting: the ownership check is the job manager's active-executor map, and\na frame naming anything else gets a `chat_reply` carrying\n`error.code = \"not_owned\"` — never silence, and never a delivery.\n\nThe message is fed into the run's executor session through the **same relay\nbridge an answer travels**, so there is no second transport and no\nchat-specific process. Two consequences are worth knowing before you rely on\nit:\n\n- **Only a session parked awaiting input can take a chat turn.** There is no\n  way to inject text into a `pipeline drive` invocation that is mid-turn, so a\n  running session answers `error.code = \"session_busy\"`.\n- **A park behind an approval gate refuses chat** (`session_gated`). Because\n  delivery *is* the answer path, letting a chat turn through would clear an\n  approval whose whole point is that a specific role must give it.\n\nA delivered turn completes with an **empty** final chunk: the runner has no way\nto stream the session's own prose back over `chat_reply`, so that output\ncontinues to arrive on the existing event channel rather than being invented\nhere. A clamped chunk is flagged `truncated: true` rather than silently cut.\n\nError codes emitted: `not_owned`, `session_busy`, `session_gated`,\n`session_gone`, `message_too_large`, `invalid_message`, `too_many_turns`,\n`internal_error`. The three `session_*` codes replace the protocol's coarser\n`session_unavailable`, which this runner never emits — they are three\ndifferent situations with three different fixes, and a UI that cannot tell\nthem apart cannot offer the right one.\n\n`(run_id, message_id)` is the idempotency key: a redelivered send is never\ninjected twice, and a turn that already terminated simply replays its stored\nfinal frame. That memory is split three ways — in-flight turns are never\nevicted, delivered turns are bucketed per run, and cheap rejections get their\nown small budget — so no amount of traffic for runs this runner does not own\ncan flush the history of turns it actually delivered.\n\n## Develop\n\n```sh\nbun install\nbun test            # unit tests (no network, no real home dir)\nbun run typecheck   # bunx tsc --noEmit\n```\n\n---\n\nFormerly `apps/pipeline-agent` in [`IvanMurzak/Claude-Pipeline`](https://github.com/IvanMurzak/Claude-Pipeline); extracted to this standalone repo and renamed to `pipeline-runner`.\n","readmeFilename":"README.md"}