{"_id":"@openclaw/libterminal","_rev":"13-c82026a6cef0fbddef11b32077c4eb3d","name":"@openclaw/libterminal","dist-tags":{"latest":"0.3.7"},"versions":{"0.0.0":{"name":"@openclaw/libterminal","version":"0.0.0","license":"MIT","_id":"@openclaw/libterminal@0.0.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"dist":{"shasum":"0627b6487707d469e88762c36b91cc2d2c2d76ac","tarball":"https://registry.npmjs.org/@openclaw/libterminal/-/libterminal-0.0.0.tgz","fileCount":2,"integrity":"sha512-dWd3jlfIJJZmLE33QkicMiP2OMtq3AGHuh/g9UbJtzpwdqIMNQR0sOtocC1yvTh1LW25hkD4wprZEWGnhwCWfg==","signatures":[{"sig":"MEYCIQCjqD7lwrNpbSez+UPGZEnvTR1IMttR2JDwccLrPfXlzQIhAMzq6IOMB2XoAnCTNx0IHRuA0OHHsI2wcy3znmA4vHgF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":344},"_npmUser":{"name":"vincentkoc","email":"vincentkoc@ieee.org"},"description":"Placeholder package reserving the @openclaw/libterminal name.","directories":{},"_nodeVersion":"26.0.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/libterminal_0.0.0_1781678630785_0.5619231863794083","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@openclaw/libterminal","version":"0.1.0","keywords":["ghostty","openclaw","pty","terminal","typescript","websocket"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/libterminal@0.1.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/libterminal#readme","bugs":{"url":"https://github.com/openclaw/libterminal/issues"},"dist":{"shasum":"214b576475967e1e36a8cfe9723f2b9ab16a41b4","tarball":"https://registry.npmjs.org/@openclaw/libterminal/-/libterminal-0.1.0.tgz","fileCount":19,"integrity":"sha512-mqaiEmr6yyMfZYRHED2TdwEd6+Ubb3eMz9BmON3xVPhZ3jWVzXn3cePqLeKq7mkSaT//QgJAIPrVojfoMTUHGQ==","signatures":[{"sig":"MEQCIBioRNhKoOdgIoUoxtIGRvlMrTRCHUfxeW0Fa/QOSidiAiBZUYlf03deuTwQ8tQeY+fTe21u2E0uVgFSMPc2/FrlHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2flibterminal@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":69179},"type":"module","engines":{"node":"^22.18.0 || >=24.11.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./stream":{"types":"./dist/stream.d.ts","import":"./dist/stream.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"},"./protocol":{"types":"./dist/protocol.d.ts","import":"./dist/protocol.js"},"./package.json":"./package.json","./protocol/terminal-v2.json":"./protocol/terminal-v2.json"},"gitHead":"1c239f1b687031a527917529406a0198b457e818","scripts":{"lint":"oxlint --type-aware --deny-warnings src test","test":"vitest run","build":"tsdown src/index.ts src/protocol.ts src/stream.ts src/browser.ts src/node.ts src/worker.ts src/testing.ts --format esm --dts --clean --target es2023 --no-fixedExtension --deps.never-bundle ghostty-web --deps.never-bundle node-pty","check":"pnpm run format:check && pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run build && pnpm run pack:check","format":"oxfmt --write .","prepack":"pnpm run build","typecheck":"tsgo --noEmit","pack:check":"node scripts/check-pack.mjs","format:check":"oxfmt --check .","test:browser":"pnpm run build && playwright test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9f225da5-5cf3-4388-a896-35628f8f83db"}},"repository":{"url":"git+https://github.com/openclaw/libterminal.git","type":"git"},"_npmVersion":"11.13.0","description":"Shared TypeScript terminal protocol, streaming, browser, Node, and Worker primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"ghostty-web":"0.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"oxfmt":"^0.54.0","oxlint":"^1.69.0","tsdown":"^0.22.2","vitest":"^4.1.0","node-pty":"^1.1.0","typescript":"^6.0.3","@types/node":"^25.9.2","oxlint-tsgolint":"^0.23.0","@playwright/test":"^1.61.0","@typescript/native-preview":"7.0.0-dev.20260613.1"},"peerDependencies":{"node-pty":">=1.0.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/libterminal_0.1.0_1781683175617_0.8382817025586338","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@openclaw/libterminal","version":"0.1.1","keywords":["ghostty","openclaw","pty","terminal","typescript","websocket"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/libterminal@0.1.1","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/libterminal#readme","bugs":{"url":"https://github.com/openclaw/libterminal/issues"},"dist":{"shasum":"aa979895e4d10327b5a38fd7a5f1e9acbafbc5b2","tarball":"https://registry.npmjs.org/@openclaw/libterminal/-/libterminal-0.1.1.tgz","fileCount":19,"integrity":"sha512-uS4ZgrX3LGP2bEXtfbirriKVnC4Sx+I63eClmjP+2jxr0m5Oj8lyPg1nqxSUd3wVXJG7cK6bUrx1qTSKsaYzKg==","signatures":[{"sig":"MEQCICyUuBXwyOi/brbRm5IhYPe/wPJB0uOedeZQYoN33vpSAiAepKaGzQvOdox9xE1wYRDqTbgpPI/VAA+CNh93qsyycQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2flibterminal@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":69357},"type":"module","engines":{"node":"^22.18.0 || >=24.11.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./stream":{"types":"./dist/stream.d.ts","import":"./dist/stream.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"},"./protocol":{"types":"./dist/protocol.d.ts","import":"./dist/protocol.js"},"./package.json":"./package.json","./protocol/terminal-v2.json":"./protocol/terminal-v2.json"},"gitHead":"9547c94443c7e8d440b53ff2ff00a0863b232f0b","scripts":{"lint":"oxlint --type-aware --deny-warnings src test","test":"vitest run","build":"tsdown src/index.ts src/protocol.ts src/stream.ts src/browser.ts src/node.ts src/worker.ts src/testing.ts --format esm --dts --clean --target es2023 --no-fixedExtension --deps.never-bundle ghostty-web --deps.never-bundle node-pty","check":"pnpm run format:check && pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run build && pnpm run pack:check","format":"oxfmt --write .","prepack":"pnpm run build","typecheck":"tsgo --noEmit","pack:check":"node scripts/check-pack.mjs","format:check":"oxfmt --check .","test:browser":"pnpm run build && playwright test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9f225da5-5cf3-4388-a896-35628f8f83db"}},"repository":{"url":"git+https://github.com/openclaw/libterminal.git","type":"git"},"_npmVersion":"11.13.0","description":"Shared TypeScript terminal protocol, streaming, browser, Node, and Worker primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"ghostty-web":"0.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"oxfmt":"^0.54.0","oxlint":"^1.69.0","tsdown":"^0.22.2","vitest":"^4.1.0","node-pty":"^1.1.0","typescript":"^6.0.3","@types/node":"^25.9.2","oxlint-tsgolint":"^0.23.0","@playwright/test":"^1.61.0","@typescript/native-preview":"7.0.0-dev.20260614.1"},"peerDependencies":{"node-pty":">=1.0.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/libterminal_0.1.1_1781692320424_0.45415580239477693","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@openclaw/libterminal","version":"0.1.2","keywords":["ghostty","openclaw","pty","terminal","typescript","websocket"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/libterminal@0.1.2","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/libterminal#readme","bugs":{"url":"https://github.com/openclaw/libterminal/issues"},"dist":{"shasum":"e6b1aa95d3bdf81274baa147136c203a77b9af41","tarball":"https://registry.npmjs.org/@openclaw/libterminal/-/libterminal-0.1.2.tgz","fileCount":19,"integrity":"sha512-a0efrWM8EMEUrPJ9gWgsEeWD/WstJbNjgTTUwq4sxJCyuDDWOjjvz1KjrCGZ83B+0gMstYXcQAFR7f9/URQpQQ==","signatures":[{"sig":"MEYCIQDi8KcmUXAHTg05Dyn9gaQD0/hNDm8y9hWMD3DNvU8txQIhAIvkQZs5YhGBPz+it5QRXdotF3630Kp0j+ODxkWRdYjR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2flibterminal@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":69647},"type":"module","engines":{"node":"^22.18.0 || >=24.11.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./stream":{"types":"./dist/stream.d.ts","import":"./dist/stream.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"},"./protocol":{"types":"./dist/protocol.d.ts","import":"./dist/protocol.js"},"./package.json":"./package.json","./protocol/terminal-v2.json":"./protocol/terminal-v2.json"},"gitHead":"af898fe0cdd34fddba6ca511bbfdc417c3a1a7db","scripts":{"lint":"oxlint --type-aware --deny-warnings src test","test":"vitest run","build":"tsdown src/index.ts src/protocol.ts src/stream.ts src/browser.ts src/node.ts src/worker.ts src/testing.ts --format esm --dts --clean --target es2023 --no-fixedExtension --deps.never-bundle ghostty-web --deps.never-bundle node-pty","check":"pnpm run format:check && pnpm run build && pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run pack:check","format":"oxfmt --write .","prepack":"pnpm run build","typecheck":"tsgo --noEmit","pack:check":"node scripts/check-pack.mjs","format:check":"oxfmt --check .","test:browser":"pnpm run build && playwright test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9f225da5-5cf3-4388-a896-35628f8f83db"}},"repository":{"url":"git+https://github.com/openclaw/libterminal.git","type":"git"},"_npmVersion":"11.13.0","description":"Shared TypeScript terminal protocol, streaming, browser, Node, and Worker primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"ghostty-web":"0.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"oxfmt":"^0.54.0","oxlint":"^1.69.0","tsdown":"^0.22.2","vitest":"^4.1.0","node-pty":"^1.1.0","typescript":"^6.0.3","@types/node":"^25.9.2","oxlint-tsgolint":"^0.23.0","@playwright/test":"^1.61.0","@typescript/native-preview":"7.0.0-dev.20260614.1"},"peerDependencies":{"node-pty":">=1.0.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/libterminal_0.1.2_1781772090957_0.20195983322596978","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@openclaw/libterminal","version":"0.2.0","keywords":["ghostty","openclaw","pty","terminal","typescript","websocket"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/libterminal@0.2.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/libterminal#readme","bugs":{"url":"https://github.com/openclaw/libterminal/issues"},"dist":{"shasum":"ea054d24e3dceb29d309d2a9262b9d6f59717745","tarball":"https://registry.npmjs.org/@openclaw/libterminal/-/libterminal-0.2.0.tgz","fileCount":19,"integrity":"sha512-WCj5eIVoASc+lTe7PFQxQ9aBBt4rYbCT/oKL3TNJvUaMNFoxYDnAGDlniCWOuL6/A8Gd388GL4UukTAYqFSGtA==","signatures":[{"sig":"MEQCIA1q0mhuJuu/j3UHEyRv6p9F3kDAD2I5b83Z3jD/QlBsAiBGFvk85o4EzC/bYZsmotq7aGK4JxhdxecUGyhIMQcCXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2flibterminal@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76620},"type":"module","engines":{"node":"^22.18.0 || >=24.11.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./stream":{"types":"./dist/stream.d.ts","import":"./dist/stream.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"},"./protocol":{"types":"./dist/protocol.d.ts","import":"./dist/protocol.js"},"./package.json":"./package.json","./protocol/terminal-v2.json":"./protocol/terminal-v2.json"},"gitHead":"5ff78f9315633c0362d9e761c9bba16c4f43cec7","scripts":{"lint":"oxlint --type-aware --deny-warnings src test","test":"vitest run","build":"tsdown src/index.ts src/protocol.ts src/stream.ts src/browser.ts src/node.ts src/worker.ts src/testing.ts --format esm --dts --clean --target es2023 --no-fixedExtension --deps.never-bundle ghostty-web --deps.never-bundle node-pty","check":"pnpm run format:check && pnpm run build && pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run pack:check","format":"oxfmt --write .","prepack":"pnpm run build","typecheck":"tsgo --noEmit","pack:check":"node scripts/check-pack.mjs","format:check":"oxfmt --check .","test:browser":"pnpm run build && playwright test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9f225da5-5cf3-4388-a896-35628f8f83db"}},"repository":{"url":"git+https://github.com/openclaw/libterminal.git","type":"git"},"_npmVersion":"11.13.0","description":"Shared TypeScript terminal protocol, streaming, browser, Node, and Worker primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"ghostty-web":"0.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"oxfmt":"^0.54.0","oxlint":"^1.69.0","tsdown":"^0.22.2","vitest":"^4.1.0","node-pty":"^1.1.0","typescript":"^6.0.3","@types/node":"^25.9.2","oxlint-tsgolint":"^0.23.0","@playwright/test":"^1.61.0","@typescript/native-preview":"7.0.0-dev.20260614.1"},"peerDependencies":{"node-pty":">=1.0.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/libterminal_0.2.0_1781831976317_0.453359771271471","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@openclaw/libterminal","version":"0.3.0","keywords":["ghostty","openclaw","pty","terminal","typescript","websocket"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/libterminal@0.3.0","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/libterminal#readme","bugs":{"url":"https://github.com/openclaw/libterminal/issues"},"dist":{"shasum":"33d632f8973ae1620bd24386b5e4047b8bb6ca4c","tarball":"https://registry.npmjs.org/@openclaw/libterminal/-/libterminal-0.3.0.tgz","fileCount":23,"integrity":"sha512-Us3bRnwHI34lgqhhUog8HWA0+l2HY2JwVwISUJM8aaATODVfjsaK/FrjPZPztD1FJx+3TRvqwMBhZJkZpVSrSQ==","signatures":[{"sig":"MEUCIQDagIBawL4gTU2g03EuEoYMfCxnp4/ynUw3ptWX1DIO7QIgO79Xq0MV9QAO0oipY8X3YqdMamkqKEdDdhFLUk8n0a4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2flibterminal@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1553523},"type":"module","engines":{"node":"^22.18.0 || >=24.11.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./stream":{"types":"./dist/stream.d.ts","import":"./dist/stream.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"},"./protocol":{"types":"./dist/protocol.d.ts","import":"./dist/protocol.js"},"./package.json":"./package.json","./worker-assets":{"types":"./dist/worker-assets.d.ts","import":"./dist/worker-assets.js"},"./protocol/terminal-v2.json":"./protocol/terminal-v2.json"},"gitHead":"402f019f2b17902e0ab4acab134c06b59c606c54","scripts":{"lint":"pnpm run generate:worker-assets && oxlint --type-aware --deny-warnings src test","test":"pnpm run generate:worker-assets && vitest run","build":"pnpm run generate:worker-assets && tsdown src/index.ts src/protocol.ts src/stream.ts src/browser.ts src/node.ts src/worker.ts src/worker-assets.ts src/testing.ts --format esm --dts --clean --target es2023 --no-fixedExtension --deps.never-bundle ghostty-web --deps.never-bundle node-pty","check":"pnpm run format:check && pnpm run build && pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run pack:check","format":"oxfmt --write .","prepack":"pnpm run build","typecheck":"pnpm run generate:worker-assets && tsgo --noEmit","pack:check":"node scripts/check-pack.mjs","format:check":"oxfmt --check .","test:browser":"pnpm run build && playwright test","generate:worker-assets":"node scripts/generate-worker-ghostty-assets.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9f225da5-5cf3-4388-a896-35628f8f83db"}},"repository":{"url":"git+https://github.com/openclaw/libterminal.git","type":"git"},"_npmVersion":"11.13.0","description":"Shared TypeScript terminal protocol, streaming, browser, Node, and Worker primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"ghostty-web":"0.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"oxfmt":"^0.54.0","oxlint":"^1.69.0","tsdown":"^0.22.2","vitest":"^4.1.0","node-pty":"^1.1.0","typescript":"^6.0.3","@types/node":"^25.9.2","oxlint-tsgolint":"^0.23.0","@playwright/test":"^1.61.0","@typescript/native-preview":"7.0.0-dev.20260614.1"},"peerDependencies":{"node-pty":">=1.0.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/libterminal_0.3.0_1781840382271_0.7707796888538891","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@openclaw/libterminal","version":"0.3.1","keywords":["ghostty","openclaw","pty","terminal","typescript","websocket"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/libterminal@0.3.1","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/libterminal#readme","bugs":{"url":"https://github.com/openclaw/libterminal/issues"},"dist":{"shasum":"0b2c15e8d47ad972f11f7638ab06c808fcf57f86","tarball":"https://registry.npmjs.org/@openclaw/libterminal/-/libterminal-0.3.1.tgz","fileCount":23,"integrity":"sha512-nKEreLY6sdRvn+9UEcZhFpLYg3mJA4tmqNLZiYSMfislU11skiPWJfT7fn6ERsgAJsVMOSxeiVjBb5AX7dLKdQ==","signatures":[{"sig":"MEYCIQCCBTQB4wkHO7eso44YCcC/DGD8daVkW4etxcTsXqCLKgIhAP/YQ7FCxRlkygGqHLk1nxqgR2s3WitpKcT0YvDJt1oc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2flibterminal@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1554881},"type":"module","engines":{"node":"^22.18.0 || >=24.11.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./stream":{"types":"./dist/stream.d.ts","import":"./dist/stream.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"},"./protocol":{"types":"./dist/protocol.d.ts","import":"./dist/protocol.js"},"./package.json":"./package.json","./worker-assets":{"types":"./dist/worker-assets.d.ts","import":"./dist/worker-assets.js"},"./protocol/terminal-v2.json":"./protocol/terminal-v2.json"},"gitHead":"c0fdb1f0ebc2e2b9d475148df5308f5f710db0a8","scripts":{"lint":"pnpm run generate:worker-assets && oxlint --type-aware --deny-warnings src test","test":"pnpm run generate:worker-assets && vitest run","build":"pnpm run generate:worker-assets && tsdown src/index.ts src/protocol.ts src/stream.ts src/browser.ts src/node.ts src/worker.ts src/worker-assets.ts src/testing.ts --format esm --dts --clean --target es2023 --no-fixedExtension --deps.never-bundle ghostty-web --deps.never-bundle node-pty","check":"pnpm run format:check && pnpm run build && pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run pack:check","format":"oxfmt --write .","prepack":"pnpm run build","typecheck":"pnpm run generate:worker-assets && tsgo --noEmit","pack:check":"node scripts/check-pack.mjs","format:check":"oxfmt --check .","test:browser":"pnpm run build && playwright test","generate:worker-assets":"node scripts/generate-worker-ghostty-assets.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9f225da5-5cf3-4388-a896-35628f8f83db"}},"repository":{"url":"git+https://github.com/openclaw/libterminal.git","type":"git"},"_npmVersion":"11.13.0","description":"Shared TypeScript terminal protocol, streaming, browser, Node, and Worker primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","dependencies":{"ghostty-web":"0.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"oxfmt":"^0.55.0","oxlint":"^1.69.0","tsdown":"^0.22.2","vitest":"^4.1.0","node-pty":"^1.1.0","typescript":"^6.0.3","@types/node":"^25.9.2","oxlint-tsgolint":"^0.23.0","@playwright/test":"^1.61.0","@typescript/native-preview":"7.0.0-dev.20260615.1"},"peerDependencies":{"node-pty":">=1.0.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/libterminal_0.3.1_1781842873204_0.42574607424089983","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@openclaw/libterminal","version":"0.3.2","keywords":["ghostty","openclaw","pty","terminal","typescript","websocket"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/libterminal@0.3.2","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/libterminal#readme","bugs":{"url":"https://github.com/openclaw/libterminal/issues"},"dist":{"shasum":"b61d51dbb17a2d63b728d4d832df1ce21332f12a","tarball":"https://registry.npmjs.org/@openclaw/libterminal/-/libterminal-0.3.2.tgz","fileCount":23,"integrity":"sha512-RbxYPG22kuEgvW2Gx8FK2uApYSgDi+yRahfR0lW7pcdMZvAWL9/iLJRVLEMKc1uAA69mAA/IW5AtwQ9LUdHypA==","signatures":[{"sig":"MEUCICIt21EeqtpA32wNS9SsIa5tUeJE55OeZdADKDh7JYyZAiEAtxCT7EdWQhmvT1Mg+DEhnTNv6x8iWzFf6fVi2nwd9BI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2flibterminal@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1561546},"type":"module","engines":{"node":"^22.18.0 || >=24.11.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./stream":{"types":"./dist/stream.d.ts","import":"./dist/stream.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"},"./protocol":{"types":"./dist/protocol.d.ts","import":"./dist/protocol.js"},"./package.json":"./package.json","./worker-assets":{"types":"./dist/worker-assets.d.ts","import":"./dist/worker-assets.js"},"./protocol/terminal-v2.json":"./protocol/terminal-v2.json"},"gitHead":"ee607e902ab56b548fe89c6762de5e52e1261324","scripts":{"lint":"pnpm run generate:worker-assets && oxlint --type-aware --deny-warnings src test","test":"pnpm run generate:worker-assets && vitest run","build":"pnpm run generate:worker-assets && tsdown src/index.ts src/protocol.ts src/stream.ts src/browser.ts src/node.ts src/worker.ts src/worker-assets.ts src/testing.ts --format esm --dts --clean --target es2023 --no-fixedExtension --deps.never-bundle ghostty-web --deps.never-bundle node-pty","check":"pnpm run format:check && pnpm run build && pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run pack:check","format":"oxfmt --write .","prepack":"pnpm run build","typecheck":"pnpm run generate:worker-assets && tsc --noEmit && tsc -p tsconfig.portable.json --noEmit","pack:check":"node scripts/check-pack.mjs","format:check":"oxfmt --check .","test:browser":"pnpm run build && playwright test","check:release":"pnpm run check && pnpm run test:browser","generate:worker-assets":"node scripts/generate-worker-ghostty-assets.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9f225da5-5cf3-4388-a896-35628f8f83db"}},"repository":{"url":"git+https://github.com/openclaw/libterminal.git","type":"git"},"_npmVersion":"11.16.0","description":"Shared TypeScript terminal protocol, streaming, browser, Node, and Worker primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"ghostty-web":"0.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"oxfmt":"^0.58.0","oxlint":"^1.73.0","tsdown":"^0.22.7","vitest":"^4.1.10","node-pty":"^1.1.0","typescript":"npm:@typescript/typescript6@^6.0.2","@types/node":"^26.1.1","oxlint-tsgolint":"^0.24.0","@playwright/test":"^1.61.1","@typescript/native":"npm:typescript@^7.0.2"},"peerDependencies":{"node-pty":">=1.0.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/libterminal_0.3.2_1784104671899_0.6547573474161841","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@openclaw/libterminal","version":"0.3.3","keywords":["ghostty","openclaw","pty","terminal","typescript","websocket"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/libterminal@0.3.3","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/libterminal#readme","bugs":{"url":"https://github.com/openclaw/libterminal/issues"},"dist":{"shasum":"c27d81507550bef6bd38a02aa2d5356e10d5b2d9","tarball":"https://registry.npmjs.org/@openclaw/libterminal/-/libterminal-0.3.3.tgz","fileCount":23,"integrity":"sha512-LbjmH51H2tYYgaMzRnEeYJyihd/m3vCmIv2vIY6Q6xMgM3L0I7kTMkxWlqwk2afgD6AufDe4SCbCNUSGWlWK5g==","signatures":[{"sig":"MEQCIBZV47a0MvHwsckDIAT0fQJaoPH8nhXS/R+eEHt4To80AiAjEwR/SjHNKTyWVBHk6+E3eyxwT/IPMyJGgU31Dqb3Bg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2flibterminal@0.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1562834},"type":"module","engines":{"node":"^22.18.0 || >=24.11.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./stream":{"types":"./dist/stream.d.ts","import":"./dist/stream.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"},"./protocol":{"types":"./dist/protocol.d.ts","import":"./dist/protocol.js"},"./package.json":"./package.json","./worker-assets":{"types":"./dist/worker-assets.d.ts","import":"./dist/worker-assets.js"},"./protocol/terminal-v2.json":"./protocol/terminal-v2.json"},"gitHead":"5862133de21b8484f660bde8170d86fea940b0ad","scripts":{"lint":"pnpm run generate:worker-assets && oxlint --type-aware --deny-warnings src test","test":"pnpm run generate:worker-assets && vitest run","build":"pnpm run generate:worker-assets && tsdown src/index.ts src/protocol.ts src/stream.ts src/browser.ts src/node.ts src/worker.ts src/worker-assets.ts src/testing.ts --format esm --dts --clean --target es2023 --no-fixedExtension --deps.never-bundle ghostty-web --deps.never-bundle node-pty","check":"pnpm run format:check && pnpm run build && pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run pack:check","format":"oxfmt --write .","prepack":"pnpm run build","typecheck":"pnpm run generate:worker-assets && tsc --noEmit && tsc -p tsconfig.portable.json --noEmit","pack:check":"node scripts/check-pack.mjs","format:check":"oxfmt --check .","test:browser":"pnpm run build && playwright test","check:release":"pnpm run check && pnpm run test:browser","generate:worker-assets":"node scripts/generate-worker-ghostty-assets.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9f225da5-5cf3-4388-a896-35628f8f83db"}},"repository":{"url":"git+https://github.com/openclaw/libterminal.git","type":"git"},"_npmVersion":"11.17.0","description":"Shared TypeScript terminal protocol, streaming, browser, Node, and Worker primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"ghostty-web":"0.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.24.0","devDependencies":{"oxfmt":"^0.65.0","oxlint":"^1.80.0","tsdown":"^0.22.14","vitest":"^4.1.11","node-pty":"^1.1.0","typescript":"npm:@typescript/typescript6@^6.0.2","@types/node":"^26.3.0","oxlint-tsgolint":"^7.0.2001","@playwright/test":"^1.62.1","@typescript/native":"npm:typescript@^7.0.2"},"peerDependencies":{"node-pty":">=1.0.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/libterminal_0.3.3_1788163050537_0.9967024567604619","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@openclaw/libterminal","version":"0.3.4","keywords":["ghostty","openclaw","pty","terminal","typescript","websocket"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/libterminal@0.3.4","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/libterminal#readme","bugs":{"url":"https://github.com/openclaw/libterminal/issues"},"dist":{"shasum":"619a7ade82a74e37ec24f29ee1689e6a747f07a4","tarball":"https://registry.npmjs.org/@openclaw/libterminal/-/libterminal-0.3.4.tgz","fileCount":23,"integrity":"sha512-KFtlEOcoQ+pC6tRD3Va8Vm13LsFQ4mfZHKVOHqECIAo0LAmOE/5zpdq2q3eDdqU6iQNGc9BIsh3mPvYhoygsEQ==","signatures":[{"sig":"MEYCIQDLPp5bSdqm/rhRZjNpxI8OFMhOoCh7eV0ay4mToSVwlwIhAIyFWwsdUAGOvGa9oyst1FUEP9RArztDobD/Nbr/Ig9r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2flibterminal@0.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1561925},"type":"module","engines":{"node":"^22.18.0 || >=24.11.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./stream":{"types":"./dist/stream.d.ts","import":"./dist/stream.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"},"./protocol":{"types":"./dist/protocol.d.ts","import":"./dist/protocol.js"},"./package.json":"./package.json","./worker-assets":{"types":"./dist/worker-assets.d.ts","import":"./dist/worker-assets.js"},"./protocol/terminal-v2.json":"./protocol/terminal-v2.json"},"gitHead":"492e765509f183714ce32e6e4468c1def62c153a","scripts":{"lint":"pnpm run generate:worker-assets && oxlint --type-aware --deny-warnings src test","test":"pnpm run generate:worker-assets && vitest run","build":"pnpm run generate:worker-assets && tsdown src/index.ts src/protocol.ts src/stream.ts src/browser.ts src/node.ts src/worker.ts src/worker-assets.ts src/testing.ts --format esm --dts --clean --target es2023 --no-fixedExtension --deps.never-bundle ghostty-web --deps.never-bundle node-pty","check":"pnpm run format:check && pnpm run build && pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run pack:check","format":"oxfmt --write .","prepack":"pnpm run build","typecheck":"pnpm run generate:worker-assets && tsc --noEmit && tsc -p tsconfig.portable.json --noEmit","pack:check":"node scripts/check-pack.mjs","format:check":"oxfmt --check .","test:browser":"pnpm run build && playwright test","check:release":"pnpm run check && pnpm run test:browser","generate:worker-assets":"node scripts/generate-worker-ghostty-assets.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9f225da5-5cf3-4388-a896-35628f8f83db"}},"repository":{"url":"git+https://github.com/openclaw/libterminal.git","type":"git"},"_npmVersion":"11.19.0","description":"Shared TypeScript terminal protocol, streaming, browser, Node, and Worker primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"ghostty-web":"0.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@12.3.1","devDependencies":{"oxfmt":"^0.66.0","oxlint":"^1.81.0","tsdown":"^0.23.0","vitest":"^5.0.0","node-pty":"^1.1.0","typescript":"npm:@typescript/typescript6@^6.0.2","@types/node":"^26.4.1","oxlint-tsgolint":"^7.0.2001","@playwright/test":"^1.62.1","@typescript/native":"npm:typescript@^7.0.2"},"peerDependencies":{"node-pty":">=1.0.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/libterminal_0.3.4_1788633506201_0.6430921731175996","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@openclaw/libterminal","version":"0.3.5","keywords":["ghostty","openclaw","pty","terminal","typescript","websocket"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/libterminal@0.3.5","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/libterminal#readme","bugs":{"url":"https://github.com/openclaw/libterminal/issues"},"dist":{"shasum":"19a5e44947454632d682f786a54841398c99e956","tarball":"https://registry.npmjs.org/@openclaw/libterminal/-/libterminal-0.3.5.tgz","fileCount":24,"integrity":"sha512-s0A8wbLCj1+zXMU5qk0BK6coy9xWUAxPKP/BQ48Bgs5qzOmEpzGn/Wpm+cArTY9Z5GokwnjjrBdKP2mM2FB+NQ==","signatures":[{"sig":"MEQCIFbd/sTPMv4yoy42aN2D6IJcn8AGKrkVnGMCdi1rV14uAiAIe78abZjHvAsqo4F+fOiHxZKZodHRsANKd1aq4FQ3iQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2flibterminal@0.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1563515},"type":"module","engines":{"node":"^22.18.0 || >=24.11.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./stream":{"types":"./dist/stream.d.ts","import":"./dist/stream.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"},"./protocol":{"types":"./dist/protocol.d.ts","import":"./dist/protocol.js"},"./package.json":"./package.json","./worker-assets":{"types":"./dist/worker-assets.d.ts","import":"./dist/worker-assets.js"},"./protocol/terminal-v2.json":"./protocol/terminal-v2.json"},"gitHead":"944ca423f13d4a64f7319a9f21c86709bb5e2bf0","scripts":{"lint":"pnpm run generate:worker-assets && oxlint --type-aware --deny-warnings src test","test":"pnpm run generate:worker-assets && vitest run","build":"pnpm run generate:worker-assets && tsdown src/index.ts src/protocol.ts src/stream.ts src/browser.ts src/node.ts src/worker.ts src/worker-assets.ts src/testing.ts --format esm --dts --clean --target es2023 --no-fixedExtension --deps.never-bundle ghostty-web --deps.never-bundle node-pty","check":"pnpm run format:check && pnpm run build && pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run pack:check","format":"oxfmt --write .","prepack":"pnpm run build","typecheck":"pnpm run generate:worker-assets && tsc --noEmit && tsc -p tsconfig.portable.json --noEmit","pack:check":"node scripts/check-pack.mjs","format:check":"oxfmt --check .","test:browser":"pnpm run build && playwright test","check:release":"pnpm run check && pnpm run test:browser","generate:worker-assets":"node scripts/generate-worker-ghostty-assets.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9f225da5-5cf3-4388-a896-35628f8f83db"}},"repository":{"url":"git+https://github.com/openclaw/libterminal.git","type":"git"},"_npmVersion":"11.19.0","description":"Shared TypeScript terminal protocol, streaming, browser, Node, and Worker primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"ghostty-web":"0.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@12.3.4","devDependencies":{"ws":"^8.21.3","oxfmt":"^0.66.0","oxlint":"^1.81.0","tsdown":"^0.23.0","vitest":"^5.0.0","node-pty":"^1.1.0","@types/ws":"^8.18.1","typescript":"npm:@typescript/typescript6@^6.0.2","@types/node":"^26.4.1","oxlint-tsgolint":"^7.0.2001","@playwright/test":"^1.63.0","@typescript/native":"npm:typescript@^7.0.2"},"peerDependencies":{"node-pty":">=1.0.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/libterminal_0.3.5_1788836961044_0.45823111932220306","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@openclaw/libterminal","version":"0.3.6","keywords":["ghostty","openclaw","pty","terminal","typescript","websocket"],"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","_id":"@openclaw/libterminal@0.3.6","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"homepage":"https://github.com/openclaw/libterminal#readme","bugs":{"url":"https://github.com/openclaw/libterminal/issues"},"dist":{"shasum":"f8eeba11cd82da90d7ba4521f59c72a052e3005f","tarball":"https://registry.npmjs.org/@openclaw/libterminal/-/libterminal-0.3.6.tgz","fileCount":26,"integrity":"sha512-lTrj+6t6sVte2S7RAgJS+rjtbRzy9+c6ZE13vfT6VYZhAJ1p6OEHBbXNqKdgKPUCSFmpuMtlzrD4x8HtlfJ2IA==","signatures":[{"sig":"MEYCIQDzK4OspzeWIFqfHX8MvEQrrInyqWyXR7nTjgU5SzHnQgIhAJiyNS8+0PVaVOozaw01Ov/NOjKZ6fVoG26Kymox+kiA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2flibterminal@0.3.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1568138},"type":"module","engines":{"node":"^22.18.0 || >=24.11.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./stream":{"types":"./dist/stream.d.ts","import":"./dist/stream.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"},"./protocol":{"types":"./dist/protocol.d.ts","import":"./dist/protocol.js"},"./package.json":"./package.json","./worker-assets":{"types":"./dist/worker-assets.d.ts","import":"./dist/worker-assets.js"},"./protocol/terminal-v2.json":"./protocol/terminal-v2.json"},"gitHead":"16cd0c3bb64ef1e6de2cc6798f660c6dd785fefa","scripts":{"lint":"pnpm run generate:worker-assets && oxlint --type-aware --deny-warnings src test","test":"pnpm run generate:worker-assets && vitest run","build":"pnpm run generate:worker-assets && tsdown src/index.ts src/protocol.ts src/stream.ts src/browser.ts src/node.ts src/worker.ts src/worker-assets.ts src/testing.ts --format esm --dts --clean --target es2023 --no-fixedExtension --deps.never-bundle ghostty-web --deps.never-bundle node-pty","check":"pnpm run format:check && pnpm run build && pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run pack:check","format":"oxfmt --write .","prepack":"pnpm run build","typecheck":"pnpm run generate:worker-assets && tsc --noEmit && tsc -p tsconfig.portable.json --noEmit","pack:check":"node scripts/check-pack.mjs","format:check":"oxfmt --check .","test:browser":"pnpm run build && playwright test","check:release":"pnpm run check && pnpm run test:browser","test:coverage":"pnpm run test --coverage","generate:worker-assets":"node scripts/generate-worker-ghostty-assets.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9f225da5-5cf3-4388-a896-35628f8f83db"}},"repository":{"url":"git+https://github.com/openclaw/libterminal.git","type":"git"},"_npmVersion":"11.19.0","description":"Shared TypeScript terminal protocol, streaming, browser, Node, and Worker primitives","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"ghostty-web":"0.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.26.0","devDependencies":{"ws":"^8.21.3","oxfmt":"^0.67.0","oxlint":"^1.82.0","tsdown":"^0.23.0","vitest":"^5.0.0","node-pty":"^1.1.0","@types/ws":"^8.18.1","typescript":"npm:@typescript/typescript6@^6.0.2","@types/node":"^26.5.1","oxlint-tsgolint":"^7.0.2001","@playwright/test":"^1.63.0","@typescript/native":"npm:typescript@^7.0.2","@vitest/coverage-v8":"^5.0.0"},"peerDependencies":{"node-pty":">=1.0.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/libterminal_0.3.6_1789351866964_0.2799220245063545","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"_id":"@openclaw/libterminal@0.3.7","bugs":{"url":"https://github.com/openclaw/libterminal/issues"},"dist":{"shasum":"f90c8d93c197e02e733f70cbd2063b9fcd358129","tarball":"https://registry.npmjs.org/@openclaw/libterminal/-/libterminal-0.3.7.tgz","fileCount":26,"integrity":"sha512-zK/XiLc3nDFzRNCIAWKuEp1DoeAZr/U3qxV3ID03Wwlv/sq+yHhq4PRMYaaxcW+ZCr4J4jEwbsDuByFOObwBBQ==","signatures":[{"sig":"MEQCIF43UszA9XrQqY4B6szJpHc96lEMcvEV4Bfeel1A8u2rAiBhf+HX+Qvun22/Fq1URxEc3jjo/op0iNqkT8foYp0IBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGm3976U1dcrYO3M5jW2oAnVijGn9TwjEkxC8/geNO1YAiATsPAtPjXIoYJyMzmzcNUEa3OlnDdIUtdDas2HOJc4NQ=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@openclaw%2flibterminal@0.3.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1570162},"name":"@openclaw/libterminal","type":"module","author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"engines":{"node":"^22.18.0 || >=24.11.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./stream":{"types":"./dist/stream.d.ts","import":"./dist/stream.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"},"./protocol":{"types":"./dist/protocol.d.ts","import":"./dist/protocol.js"},"./package.json":"./package.json","./worker-assets":{"types":"./dist/worker-assets.d.ts","import":"./dist/worker-assets.js"},"./protocol/terminal-v2.json":"./protocol/terminal-v2.json"},"gitHead":"08eafcf10e325b1d9cfe7f5bd917c295a68595df","license":"MIT","scripts":{"lint":"pnpm run generate:worker-assets && oxlint --type-aware --deny-warnings src test","test":"pnpm run generate:worker-assets && vitest run","build":"pnpm run generate:worker-assets && tsdown src/index.ts src/protocol.ts src/stream.ts src/browser.ts src/node.ts src/worker.ts src/worker-assets.ts src/testing.ts --format esm --dts --clean --target es2023 --no-fixedExtension --deps.never-bundle ghostty-web --deps.never-bundle node-pty","check":"pnpm run format:check && pnpm run build && pnpm run typecheck && pnpm run lint && pnpm run test && pnpm run pack:check","format":"oxfmt --write .","prepack":"pnpm run build","typecheck":"pnpm run generate:worker-assets && tsc --noEmit && tsc -p tsconfig.portable.json --noEmit","pack:check":"node scripts/check-pack.mjs","format:check":"oxfmt --check .","test:browser":"pnpm run build && playwright test","check:release":"pnpm run check && pnpm run test:browser","test:coverage":"pnpm run test --coverage","generate:worker-assets":"node scripts/generate-worker-ghostty-assets.mjs"},"version":"0.3.7","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9f225da5-5cf3-4388-a896-35628f8f83db"}},"homepage":"https://github.com/openclaw/libterminal#readme","keywords":["ghostty","openclaw","pty","terminal","typescript","websocket"],"repository":{"url":"git+https://github.com/openclaw/libterminal.git","type":"git"},"_npmVersion":"11.19.0","description":"Shared TypeScript terminal protocol, streaming, browser, Node, and Worker primitives","directories":{},"maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"ghostty-web":"0.4.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"pnpm@11.27.0","devDependencies":{"ws":"^8.21.3","oxfmt":"^0.68.0","oxlint":"^1.82.0","tsdown":"^0.23.0","vitest":"^5.0.0","node-pty":"^1.1.0","@types/ws":"^8.18.1","typescript":"npm:@typescript/typescript6@^6.0.2","@types/node":"^26.5.1","oxlint-tsgolint":"^7.0.2001","@playwright/test":"^1.63.0","@typescript/native":"npm:typescript@^7.0.2","@vitest/coverage-v8":"^5.0.0"},"peerDependencies":{"node-pty":">=1.0.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/libterminal_0.3.7_1790071153812_0.9375312400162137"}}},"time":{"created":"2026-06-17T06:43:50.575Z","modified":"2026-09-22T09:59:14.281Z","0.0.0":"2026-06-17T06:43:50.906Z","0.1.0":"2026-06-17T07:59:35.746Z","0.1.1":"2026-06-17T10:32:00.556Z","0.1.2":"2026-06-18T08:41:31.119Z","0.2.0":"2026-06-19T01:19:36.443Z","0.3.0":"2026-06-19T03:39:42.470Z","0.3.1":"2026-06-19T04:21:13.420Z","0.3.2":"2026-07-15T08:37:52.089Z","0.3.3":"2026-08-31T07:57:30.681Z","0.3.4":"2026-09-05T18:38:26.335Z","0.3.5":"2026-09-08T03:09:21.196Z","0.3.6":"2026-09-14T02:11:07.094Z","0.3.7":"2026-09-22T09:59:13.903Z"},"bugs":{"url":"https://github.com/openclaw/libterminal/issues"},"author":{"name":"OpenClaw Team","email":"dev@openclaw.ai"},"license":"MIT","homepage":"https://github.com/openclaw/libterminal#readme","keywords":["ghostty","openclaw","pty","terminal","typescript","websocket"],"repository":{"url":"git+https://github.com/openclaw/libterminal.git","type":"git"},"description":"Shared TypeScript terminal protocol, streaming, browser, Node, and Worker primitives","maintainers":[{"name":"steipete","email":"steipete@gmail.com"},{"name":"vincentkoc","email":"vincentkoc@ieee.org"}],"readme":"# @openclaw/libterminal\n\nShared TypeScript primitives for streaming, rendering, and bridging terminals\nacross browsers, Node.js, and Cloudflare Workers.\n\n```ts\nimport { BoundedReplayBuffer } from \"@openclaw/libterminal/stream\";\nimport { decodeTerminalFrame } from \"@openclaw/libterminal/protocol\";\n```\n\nThe package deliberately does not own authentication, public listeners,\nterminal transcripts, or product-specific room/session state.\n\n## Install\n\n```sh\npnpm add @openclaw/libterminal\n```\n\nInstall `node-pty` in applications that use the Node.js PTY adapter:\n\n```sh\npnpm add node-pty\n```\n\n## Exports\n\n- `@openclaw/libterminal`: universal terminal types and errors\n- `@openclaw/libterminal/protocol`: terminal protocol v2 codecs\n- `@openclaw/libterminal/stream`: bounded replay, fanout, and batching\n- `@openclaw/libterminal/browser`: Ghostty WASM terminal integration and terminal hub client\n- `@openclaw/libterminal/node`: local PTY, raw stdin, and asset helpers\n- `@openclaw/libterminal/worker`: Worker-compatible WebSocket bridging\n- `@openclaw/libterminal/worker-assets`: optional Worker-safe Ghostty asset payloads\n- `@openclaw/libterminal/testing`: deterministic terminal test doubles\n\n## Streaming\n\n`TerminalFanout` provides bounded replay and per-subscriber output queues. Close\neach subscription when its consumer finishes. IDs can be reused after closing;\nan old subscription handle cannot close a later subscription with the same ID.\n\nReplay buffers, fanout subscriptions, and batch publishers copy incoming bytes,\nincluding Node.js `Buffer` inputs. Callers can reuse their input buffers after\nappending, publishing, or writing. Replay snapshots and subscriber output are\nindependent copies, so changing one cannot corrupt other readers or stored replay.\nThe exported testing helpers also copy recorded input and output bytes, including\nsources that reuse a `Buffer` between chunks.\n\n## Browser\n\nGhostty terminals default to read-only. The application owns authorization,\nthe byte source, and the WASM asset route.\n\n```ts\nimport { createGhosttyTerminal } from \"@openclaw/libterminal/browser\";\n\nconst terminal = await createGhosttyTerminal({\n  parent: document.querySelector(\"#terminal\")!,\n  runtimeOptions: { wasmUrl: \"/vendor/ghostty-vt.wasm\" },\n  signal: controller.signal,\n});\n\nawait terminal.attach(output);\n```\n\nAborting an attached stream stops buffered output as well as future reads.\nCancellation also stops waiting for source cleanup. Cleanup failures never replace\nan existing read or terminal-write failure, and abort-only cleanup errors are ignored.\n\n`ghostty-web` 0.4.0 does not emit responses for OSC 10-12 default-color\nqueries. Applications that write PTY output into the browser terminal can use\nthe replay-safe compatibility responder until that support lands upstream:\n\n```ts\nimport { createTerminalDefaultColorQueryResponder } from \"@openclaw/libterminal/browser\";\n\nconst colorQueries = createTerminalDefaultColorQueryResponder({\n  getColors: () => ({\n    foreground: \"#d7dae0\",\n    background: \"#0e1015\",\n    cursor: \"#ff5c5c\",\n  }),\n  reply: (data) => pty.write(data),\n});\n\ncolorQueries.primeFromReplay(replayedPrefix);\ncolorQueries.observe(recoveredSuffix);\ncolorQueries.observe(liveOutput);\n```\n\nWhen a replay contains an already-observed prefix and a newly recovered suffix,\nprime the responder with the prefix before observing the suffix. This prevents\nduplicate historical replies while preserving a query split across the seam.\n\nUse `GHOSTTY_ASSET_PATHS` and `readGhosttyAsset()` from the Node.js export to\nserve the pinned `ghostty-web` module, WASM, and browser-external shim under\ntheir canonical `/vendor` routes.\n\n`TerminalHubClient` owns protocol framing, binary message normalization, and\noptional reconnect scheduling for multiplexed terminal WebSockets. Applications\ncontinue to own URL construction, authorization, session subscriptions, and\nterminal lifecycle.\n\nNormalized hub frames own their byte storage, including messages received as\nNode.js `Buffer` values from injected transports. Mutable message bytes are copied\nwhen received, before queued delivery, so transports can immediately reuse them.\n\n```ts\nimport { TerminalHubClient } from \"@openclaw/libterminal/browser\";\n\nconst hub = new TerminalHubClient({\n  url: () => terminalHubUrl(),\n  shouldReconnect: () => activeTerminalCount() > 0,\n  onFrame: handleTerminalFrame,\n});\nhub.connect();\n```\n\n`hub.close(code, reason)` sanitizes invalid close codes and limits the reason to\n123 UTF-8 bytes without splitting characters. Valid application codes and reason\nwhitespace are preserved. Injected transports may accept protocol codes such as\n1001 that native browsers reject; these retain their existing behavior. If the\nsocket rejects the close arguments, the hub\nretries with code 1000, then without arguments. If every attempt fails, `onError`\nreceives the final error and the socket remains available for another close attempt.\n\n## Node.js\n\nThe built-in adapter dynamically imports the optional `node-pty` peer. Inject a\ncompatible driver in tests or applications that own their PTY runtime.\n\n```ts\nimport { attachLocalStdio, spawnLocalPty } from \"@openclaw/libterminal/node\";\n\nconst terminal = await spawnLocalPty({\n  command: \"codex\",\n  args: [\"--yolo\"],\n  cwd: process.cwd(),\n});\n\nawait attachLocalStdio(terminal);\n```\n\nPTY output queues are bounded by default. Raw stdin mode is restored when the\nsession ends, errors, or aborts.\n\nStdio input bytes are copied when received, before queued terminal writes, so\ninput producers can immediately reuse their buffers.\n\nAborting a stdio attachment restores it without waiting for a pending write or\nresize. Caller-owned streams stay open, and late errors from an outstanding\nstdout write remain handled until that write settles.\n\n## Workers\n\nThe Worker bridge forwards both directions in order and can revalidate control\nbefore every left-to-right message and on a periodic fail-closed timer.\n\n```ts\nimport { bridgeWebSockets } from \"@openclaw/libterminal/worker\";\n\nconst bridge = bridgeWebSockets(viewer, terminal, {\n  canSendLeft: async () => capabilities.canControl(sessionId),\n  sanitizeCloseReason: redactCredentials,\n});\n\nawait bridge.completed;\n```\n\nThe product remains responsible for authenticating both sockets and deciding\nwhich capabilities grant control.\n\nClosing the bridge stops forwarding immediately. `completed` still waits for\nalready-started message conversions to settle, discarding their results after\nteardown.\n\nUse the optional Worker asset export to serve the pinned Ghostty module, WASM,\nand browser-external shim without an application-local asset generator. The\nproduct owns the route, cache policy, and security headers.\n\n```ts\nimport { GHOSTTY_ASSET_PATHS, readGhosttyWorkerAsset } from \"@openclaw/libterminal/worker-assets\";\n\nconst asset = readGhosttyWorkerAsset(new URL(request.url).pathname);\nif (asset) {\n  return new Response(asset.body, {\n    headers: {\n      \"cache-control\": \"no-store\",\n      \"content-type\": asset.contentType,\n    },\n  });\n}\n```\n\n## Protocol\n\n`@openclaw/libterminal/protocol` owns terminal protocol v2 codecs and golden\nvectors. Strict decoders throw `LibterminalError`; `tryDecodeTerminalFrame()`\nis available for nullable migration paths.\n\nSubscribe payloads may use zero columns and rows together to ask the terminal\nservice to select default dimensions. Resize payloads always require real\ndimensions.\n\nWire-protocol versions and npm package versions are independent compatibility\nsurfaces.\n\n## Safety\n\n- Terminal bytes are never logged or persisted by the package.\n- Browser terminals default to read-only.\n- Replay, subscriber, and PTY output buffers are bounded.\n- Protocol frames and terminal dimensions are validated.\n- Authorization, public listeners, storage, and transcripts stay in consumers.\n\n## Development\n\n```sh\npnpm install\npnpm check\npnpm run check:release\n```\n","readmeFilename":"README.md"}