{"_id":"@alfe.ai/terminal","_rev":"6-e09591b228233da9497e6c38a28352a4","name":"@alfe.ai/terminal","dist-tags":{"latest":"0.1.4"},"versions":{"0.0.0":{"name":"@alfe.ai/terminal","version":"0.0.0","license":"UNLICENSED","_id":"@alfe.ai/terminal@0.0.0","maintainers":[{"name":"kevupton","email":"kevin@upton.tech"},{"name":"sam-alfe","email":"sam@alfe.ai"}],"dist":{"shasum":"8483fd4b3e677bd71667fd53b9ea0545581dd42c","tarball":"https://registry.npmjs.org/@alfe.ai/terminal/-/terminal-0.0.0.tgz","fileCount":5,"integrity":"sha512-PPx0hcftqMH+Ssg0Mlm1HonFxfEfytBcXVC4229v9bL8kv/swIuKWiuVF8Wgz6p7K3iPUdGRpLeS4hzPDqa+dQ==","signatures":[{"sig":"MEUCIQC/MEB1L9uELB+8hCfLXbJns9aw6hszJEizojQjRBQy7wIgILUvVr+4EyIwc2S9qB3AvNU9kF7IxVNrxdQ3ODdWfSE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15101},"main":"./dist/index.js","type":"module","_from":"file:alfe.ai-terminal-0.0.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsdown --watch","lint":"eslint .","test":"vitest run --passWithNoTests","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kevupton","email":"kevin@upton.tech"},"_resolved":"/tmp/af19c9216795d0303ca2553386a2ccee/alfe.ai-terminal-0.0.0.tgz","_integrity":"sha512-PPx0hcftqMH+Ssg0Mlm1HonFxfEfytBcXVC4229v9bL8kv/swIuKWiuVF8Wgz6p7K3iPUdGRpLeS4hzPDqa+dQ==","_npmVersion":"10.9.8","description":"PTY terminal surface for the Alfe interactive remote-control relay — a web shell over the agent's outbound WS (no inbound port, no SSH daemon)","directories":{},"_nodeVersion":"22.23.0","dependencies":{"node-pty":"^1.0.0","@alfe.ai/remote":"^0.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/terminal_0.0.0_1782982505516_0.8915547066031633","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@alfe.ai/terminal","version":"0.1.0","keywords":["alfe","ai-agents","agent","llm"],"author":{"url":"https://alfe.ai","name":"Alfe"},"license":"UNLICENSED","_id":"@alfe.ai/terminal@0.1.0","maintainers":[{"name":"kevupton","email":"kevin@upton.tech"},{"name":"sam-alfe","email":"sam@alfe.ai"}],"homepage":"https://alfe.ai","dist":{"shasum":"ecd6d2da05bdcbf5703b29255f78d1252bbddb45","tarball":"https://registry.npmjs.org/@alfe.ai/terminal/-/terminal-0.1.0.tgz","fileCount":5,"integrity":"sha512-SCYg49F/mwjtdwUhjUAudo8q8TcLiM5/Gssp+atj7I+kn4zS68VnWQTgd8qFU5AwFel3bK3tjtGn5fAaX9n8MA==","signatures":[{"sig":"MEYCIQDibGKw53joo+7XHJy78x7WoLuuLd1O8FdyZuKlJL0E7gIhAJ+WhJ0yhP6uNf6sWbkQcC3FKP0ttbKbbVK7QLRTxgyq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15245},"main":"./dist/index.js","type":"module","_from":"file:alfe.ai-terminal-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsdown --watch","lint":"eslint .","test":"vitest run --passWithNoTests","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kevupton","email":"kevin@upton.tech"},"_resolved":"/tmp/bcb7fad9a8ca28e748afbc7557ca3585/alfe.ai-terminal-0.1.0.tgz","_integrity":"sha512-SCYg49F/mwjtdwUhjUAudo8q8TcLiM5/Gssp+atj7I+kn4zS68VnWQTgd8qFU5AwFel3bK3tjtGn5fAaX9n8MA==","_npmVersion":"10.9.8","description":"PTY terminal surface for the Alfe interactive remote-control relay — a web shell over the agent's outbound WS (no inbound port, no SSH daemon)","directories":{},"_nodeVersion":"22.23.1","dependencies":{"node-pty":"^1.0.0","@alfe.ai/remote":"^0.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/terminal_0.1.0_1783007088368_0.2953737042903237","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@alfe.ai/terminal","version":"0.1.1","keywords":["alfe","ai-agents","agent","llm"],"author":{"url":"https://alfe.ai","name":"Alfe"},"license":"UNLICENSED","_id":"@alfe.ai/terminal@0.1.1","maintainers":[{"name":"kevupton","email":"kevin@upton.tech"},{"name":"sam-alfe","email":"sam@alfe.ai"}],"homepage":"https://alfe.ai","dist":{"shasum":"2b2146438600d67697db467e91463fe4726ce11b","tarball":"https://registry.npmjs.org/@alfe.ai/terminal/-/terminal-0.1.1.tgz","fileCount":5,"integrity":"sha512-t5G1MTCR0N55KARDdYyR4USTsR89oG/wy3fb28v/kMuNx5F2WonvrmQCMLuHl1+p6e0KeMRr0HZ+7FotwKAKDA==","signatures":[{"sig":"MEUCIQDhcJdYhFzybjldK5yF9n3BidlO5OAyQx4MH+Qv+X6F8gIgFEQ/wg4+ZFF1ljIjFfwib2BWtppXHB9VhUMeVfrWQBs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15401},"main":"./dist/index.js","type":"module","_from":"file:alfe.ai-terminal-0.1.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsdown --watch","lint":"eslint .","test":"vitest run --passWithNoTests","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kevupton","email":"kevin@upton.tech"},"_resolved":"/tmp/14e66b91635d1b8855b6663ca2aa2b9c/alfe.ai-terminal-0.1.1.tgz","_integrity":"sha512-t5G1MTCR0N55KARDdYyR4USTsR89oG/wy3fb28v/kMuNx5F2WonvrmQCMLuHl1+p6e0KeMRr0HZ+7FotwKAKDA==","_npmVersion":"10.9.8","description":"PTY terminal surface for the Alfe interactive remote-control relay — a web shell over the agent's outbound WS (no inbound port, no SSH daemon)","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@alfe.ai/remote":"^0.1.0","@homebridge/node-pty-prebuilt-multiarch":"^0.13.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/terminal_0.1.1_1783058205335_0.3560167502834082","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@alfe.ai/terminal","version":"0.1.2","keywords":["alfe","ai-agents","agent","llm"],"author":{"url":"https://alfe.ai","name":"Alfe"},"license":"UNLICENSED","_id":"@alfe.ai/terminal@0.1.2","maintainers":[{"name":"kevupton","email":"kevin@upton.tech"},{"name":"sam-alfe","email":"sam@alfe.ai"}],"homepage":"https://alfe.ai","dist":{"shasum":"c722149bc5e8cac79572a37081d41cf0dad9aa3f","tarball":"https://registry.npmjs.org/@alfe.ai/terminal/-/terminal-0.1.2.tgz","fileCount":5,"integrity":"sha512-CB1Ent7PQrBse/MB7Dr6p4X6VDHiIx97WoBZiyBFJFBWOEkSkrMUa7yNmQ8492AGmwnMLtENk+/SW1c3eeKXgw==","signatures":[{"sig":"MEUCIQD5X9cHszEkZCOvcD+VE5yqAzCWZ1hhwwlk8OEsBh9YDgIgItDtaUKxEDnN+NF6lo9mOUdcvSb1yTp2swIsPiDQZ14=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15291},"main":"./dist/index.js","type":"module","_from":"file:alfe.ai-terminal-0.1.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsdown --watch","lint":"eslint .","test":"vitest run --passWithNoTests","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kevupton","email":"kevin@upton.tech"},"_resolved":"/tmp/1e4333c7ae07afff533a84f75ec6782e/alfe.ai-terminal-0.1.2.tgz","_integrity":"sha512-CB1Ent7PQrBse/MB7Dr6p4X6VDHiIx97WoBZiyBFJFBWOEkSkrMUa7yNmQ8492AGmwnMLtENk+/SW1c3eeKXgw==","_npmVersion":"10.9.8","description":"PTY terminal surface for the Alfe interactive remote-control relay — a web shell over the agent's outbound WS (no inbound port, no SSH daemon)","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@alfe.ai/remote":"^0.1.0","@lydell/node-pty":"1.2.0-beta.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/terminal_0.1.2_1784839884807_0.86994746564071","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@alfe.ai/terminal","version":"0.1.3","keywords":["alfe","ai-agents","agent","llm"],"author":{"url":"https://alfe.ai","name":"Alfe"},"license":"UNLICENSED","_id":"@alfe.ai/terminal@0.1.3","maintainers":[{"name":"kevupton","email":"kevin@upton.tech"},{"name":"sam-alfe","email":"sam@alfe.ai"}],"homepage":"https://alfe.ai","dist":{"shasum":"1d4fff12b9f8bd40bbba06f8afcc01b5f664a2be","tarball":"https://registry.npmjs.org/@alfe.ai/terminal/-/terminal-0.1.3.tgz","fileCount":6,"integrity":"sha512-tz+ZcEHbxGpMsnMx0LzJQvgNn8dubMhhJOU6+qejm2FqqedlSiuzPvmgttX5DITe4Rh9afra4GJEE5UCROUdhQ==","signatures":[{"sig":"MEUCIDJsJ1sV7AA7ob/JJDgHMRxkz6qpmIjdkxrMY+eiiDnpAiEA4w25IAqTp7ttTOYLeXH0CbrN78kH/tOE24JjWbQEVsk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24281},"main":"./dist/index.js","type":"module","_from":"file:alfe.ai-terminal-0.1.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsdown --watch","lint":"eslint .","test":"vitest run --passWithNoTests","build":"tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kevupton","email":"kevin@upton.tech"},"_resolved":"/tmp/a3f1aaee2a481a9b8d327bfe0c84a56a/alfe.ai-terminal-0.1.3.tgz","_integrity":"sha512-tz+ZcEHbxGpMsnMx0LzJQvgNn8dubMhhJOU6+qejm2FqqedlSiuzPvmgttX5DITe4Rh9afra4GJEE5UCROUdhQ==","_npmVersion":"10.9.8","description":"PTY terminal surface for the Alfe interactive remote-control relay — a web shell over the agent's outbound WS (no inbound port, no SSH daemon)","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@alfe.ai/remote":"^0.1.1","@lydell/node-pty":"1.2.0-beta.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/terminal_0.1.3_1785753598082_0.28047100797737734","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@alfe.ai/terminal","version":"0.1.4","description":"PTY terminal surface for the Alfe interactive remote-control relay — a web shell over the agent's outbound WS (no inbound port, no SSH daemon)","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.cjs","import":"./dist/index.js"}},"dependencies":{"@lydell/node-pty":"1.2.0-beta.3","@alfe.ai/remote":"^0.2.0"},"license":"UNLICENSED","homepage":"https://alfe.ai","author":{"name":"Alfe","url":"https://alfe.ai"},"keywords":["alfe","ai-agents","agent","llm"],"scripts":{"build":"tsdown","dev":"tsdown --watch","test":"vitest run --passWithNoTests","typecheck":"tsc --noEmit","lint":"eslint ."},"_id":"@alfe.ai/terminal@0.1.4","_integrity":"sha512-WY8z4PbTjkptuTboCCPi86khVvsegQSJkRTTE6TVL3yFoENhoaq7PK4a8ZKnJHz3svjMsV5aHvtInvJIOBssUg==","_resolved":"/tmp/fd0b7c2010671b2ed8d69106fd269da6/alfe.ai-terminal-0.1.4.tgz","_from":"file:alfe.ai-terminal-0.1.4.tgz","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-WY8z4PbTjkptuTboCCPi86khVvsegQSJkRTTE6TVL3yFoENhoaq7PK4a8ZKnJHz3svjMsV5aHvtInvJIOBssUg==","shasum":"96235b556cdf18aa27e93d7e0101f5344abe86b0","tarball":"https://registry.npmjs.org/@alfe.ai/terminal/-/terminal-0.1.4.tgz","fileCount":6,"unpackedSize":24281,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCxQq+mkrGfvcmLr8bimine77U686YDHKO/1Y51qW+hWAIgeFveRVQOEK2QljtvgLmQfKt0nXiz0fRTXjySrxjCLGU="}]},"_npmUser":{"name":"kevupton","email":"kevin@upton.tech"},"directories":{},"maintainers":[{"name":"kevupton","email":"kevin@upton.tech"},{"name":"sam-alfe","email":"sam@alfe.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/terminal_0.1.4_1788928296281_0.9708723481211703"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-02T08:55:05.322Z","modified":"2026-09-09T04:31:36.611Z","0.0.0":"2026-07-02T08:55:05.657Z","0.1.0":"2026-07-02T15:44:48.515Z","0.1.1":"2026-07-03T05:56:45.466Z","0.1.2":"2026-07-23T20:51:24.949Z","0.1.3":"2026-08-03T10:39:58.219Z","0.1.4":"2026-09-09T04:31:36.412Z"},"author":{"name":"Alfe","url":"https://alfe.ai"},"license":"UNLICENSED","homepage":"https://alfe.ai","keywords":["alfe","ai-agents","agent","llm"],"description":"PTY terminal surface for the Alfe interactive remote-control relay — a web shell over the agent's outbound WS (no inbound port, no SSH daemon)","maintainers":[{"name":"kevupton","email":"kevin@upton.tech"},{"name":"sam-alfe","email":"sam@alfe.ai"}],"readme":"# `@alfe.ai/terminal`\n\nPTY terminal surface for Alfe's interactive remote-control relay. Each viewer\nsession owns a separate shell process in the agent workspace; terminal frames\ntravel over the agent's existing outbound WebSocket, with no inbound port or\nSSH daemon.\n\nPart of [Alfe](https://alfe.ai), the operating system for AI agents.\n\n## Runtime contract\n\n- One numeric remote session owns one exact PTY instance. Late data/exit events\n  from an older process cannot affect a reopened session with the same ID.\n- Initial and resize dimensions are integers from 1 to 1,000. Terminal input is\n  valid UTF-8 capped at 64 KiB per frame.\n- PTY output is split into UTF-8-safe frames of at most 64 KiB so terminal\n  floods cannot create relay-sized single messages.\n- If the outbound relay already has 4 MiB queued, output delivery fails closed\n  and the owning PTY is terminated instead of growing an unbounded buffer.\n- Session count defaults to 8 and may be configured from 1 to 64.\n- Shutdown retries a PTY once when its native `kill()` call fails instead of\n  immediately forgetting the still-running process.\n\n## Usage\n\n```ts\nimport { TerminalSurface } from \"@alfe.ai/terminal\";\n\nconst surface = new TerminalSurface(\n  { cwd: \"/path/to/agent/workspace\" },\n  (frame) => relay.sendFrame(frame),\n);\n```\n\nThe package uses `@lydell/node-pty`, which publishes matching native binaries\nfor supported macOS, Linux, and Windows architectures.\n","readmeFilename":"README.md"}