{"_id":"parallel-codex-tui","_rev":"33-65fe0bfce8d62e0c39405fe9669cddf8","name":"parallel-codex-tui","dist-tags":{"latest":"0.5.1"},"versions":{"0.1.0":{"name":"parallel-codex-tui","version":"0.1.0","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.1.0","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"1cc278b486eb1e7cf4471083054d1792df9ab433","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.1.0.tgz","fileCount":40,"integrity":"sha512-O3OXXEZoP++SebDYsMTBozT3Sr2VHbqNW2K9Pmd6cHk4IIgeW3/BuqcrXU4/Qnf9hGNar0TGeKHKlWOqOuSIAA==","signatures":[{"sig":"MEUCIQD8SBo949NX59Q83fqjXucS2TT+X/k+Fpb7kg5etSBYkwIgbwTON683JlxYuiBkS1U3kQc1/aktTZgyFvNJcqbN0ss=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":339189},"type":"module","engines":{"node":">=22.5.0"},"gitHead":"f37cc3d0df7131621b1efb2daeeed3c85e8d1fd3","scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest"},"_npmUser":{"name":"etsiva","email":"next.chaoz@gmail.com"},"_npmVersion":"11.12.1","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"ink":"^5.0.1","zod":"^3.25.0","react":"^18.3.1","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.1.0_1783408075474_0.5428145022760584","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"parallel-codex-tui","version":"0.1.3","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.1.3","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"355031f6b7a9c18de39edee1024842c0ce59b530","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.1.3.tgz","fileCount":44,"integrity":"sha512-6i+sC+YXzxVo34/yfGJx9wKBL33aELESHBCAWtbQ9PPe8gCF8c6TwkoTeJJINtrQOD2oZSEY97w5Cb7ZCEe27Q==","signatures":[{"sig":"MEUCIA6PS7r7HJuB+nRkPdEK7iB0Fej2fMdi78c60xAvLhewAiEAqD1u3VHED9+G4uo5Os8sU4jQav4KH2LhU/Ko9NIMbhs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":367694},"type":"module","engines":{"node":">=26.0.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest"},"_npmUser":{"name":"etsiva","email":"next.chaoz@gmail.com"},"repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.12.1","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"ink":"^5.0.1","zod":"^3.25.0","react":"^18.3.1","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.1.3_1783577983932_0.9750713936602367","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"parallel-codex-tui","version":"0.1.4","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.1.4","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"d159eed3a8c03cc95d3297f3644cef0fa2efeb24","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.1.4.tgz","fileCount":77,"integrity":"sha512-arpDFN4U7PMwDfuAsfvjKwzyW/Zv2VWAJFEOAPhEaNzwuG99un5qhFsLweALyqHeidqJOGi8g9C1FohCr59v6Q==","signatures":[{"sig":"MEQCIE58X9dwbRSQQk9dZD5aaKxS0zm3RVe4NZOld+mVL6rlAiBidanQB5G8Xb6lu+BOz6Hap5xVirDSiYWv/7OsIuEp/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1116239},"type":"module","_from":"file:parallel-codex-tui-0.1.4.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","verify:package":"node scripts/verify-package.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.1.4.tgz","_integrity":"sha512-arpDFN4U7PMwDfuAsfvjKwzyW/Zv2VWAJFEOAPhEaNzwuG99un5qhFsLweALyqHeidqJOGi8g9C1FohCr59v6Q==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"26.5.0","dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.1.4_1784104047440_0.7592632391200664","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"parallel-codex-tui","version":"0.1.5","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.1.5","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"40a598a64d04f4ca0e1067636a531b74006982eb","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.1.5.tgz","fileCount":83,"integrity":"sha512-2sfYfZICC0MjYsZCFFPbxETByAzLo1ZpAF3uKfMwfqkuwUFU6XDWxGD0bRjB/BR5w1aGIpFOzP18cmtouYK+zg==","signatures":[{"sig":"MEUCIBH1wiT86RBRqo6AlJjHLCSj/rwshn2FwP32MD0DgtS6AiEAxDkd7PyNU3liRLTj2Mu5GSjujrHnVHKANeYKQ2npUW8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1215691},"type":"module","_from":"file:parallel-codex-tui-0.1.5.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","verify:package":"node scripts/verify-package.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.1.5.tgz","_integrity":"sha512-2sfYfZICC0MjYsZCFFPbxETByAzLo1ZpAF3uKfMwfqkuwUFU6XDWxGD0bRjB/BR5w1aGIpFOzP18cmtouYK+zg==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.1.5_1784139363681_0.03371352597695121","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"parallel-codex-tui","version":"0.1.6","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.1.6","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"16363d0a385091b3f57d20d8b9cb4411f0ddfacb","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.1.6.tgz","fileCount":84,"integrity":"sha512-cHRsLzWhqm6DfdcKMPiLCNX/Jf3SDigCgvQii06wf2YnthbLYfT669fDGb0FsyyiriDDIb+abzMj6oET84Bp/A==","signatures":[{"sig":"MEQCIBCU3jyaMcS+38moWjL2CpR0DxSuC2bhnM3nkQMI/4waAiA6MDKkimoR7PLqbopL1iN6X+aMHH1tibqEQiYa+l03pw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1228171},"type":"module","_from":"file:parallel-codex-tui-0.1.6.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","verify:package":"node scripts/verify-package.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.1.6.tgz","_integrity":"sha512-cHRsLzWhqm6DfdcKMPiLCNX/Jf3SDigCgvQii06wf2YnthbLYfT669fDGb0FsyyiriDDIb+abzMj6oET84Bp/A==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.1.6_1784192314334_0.62784483668145","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"parallel-codex-tui","version":"0.1.7","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.1.7","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"cddba1a3a84c6c7afb727d0f25bd07dc0829db9c","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.1.7.tgz","fileCount":84,"integrity":"sha512-Q6rJMsPKZfM3BLPxQBBDHqqPD+Z5vAH1PMyfXE6hGEwvuQ5erXSRdHMTsUnnKwV6vwGDvUg8XzBI5qSQroGUXw==","signatures":[{"sig":"MEUCIGO0wOhBob9y37r7f3bHkr6PNkdjNCIfMSp7O/T+NAi0AiEA1VzNWEp55C1UuBnsFO3YxgkgcB4GAAOCEJvO9obV60E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1229428},"type":"module","_from":"file:parallel-codex-tui-0.1.7.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","verify:package":"node scripts/verify-package.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.1.7.tgz","_integrity":"sha512-Q6rJMsPKZfM3BLPxQBBDHqqPD+Z5vAH1PMyfXE6hGEwvuQ5erXSRdHMTsUnnKwV6vwGDvUg8XzBI5qSQroGUXw==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.1.7_1784197064457_0.3692362850499835","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"parallel-codex-tui","version":"0.1.8","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.1.8","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"3648544b6d8c445fbb7054c7e2d715435d4b8882","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.1.8.tgz","fileCount":84,"integrity":"sha512-kLkqujFFfoMcowdiX36ZRbNTq2B3qMDSRYLAFpRAPrdCbJUyRg3VQ8xlvfHCG2KhNZVDsfOvqqOy3hMjsaNEDw==","signatures":[{"sig":"MEUCIQC/8f5dabc38sidnGzlQ6Hwj2A/5vYx0ho38YqKJ+T8YQIgW07gaU7VcRwf5pFhjE6CBJODy22spYzbjfw8SSD6AAw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1230102},"type":"module","_from":"file:parallel-codex-tui-0.1.8.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","verify:package":"node scripts/verify-package.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.1.8.tgz","_integrity":"sha512-kLkqujFFfoMcowdiX36ZRbNTq2B3qMDSRYLAFpRAPrdCbJUyRg3VQ8xlvfHCG2KhNZVDsfOvqqOy3hMjsaNEDw==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.1.8_1784255636344_0.9586574485434134","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"parallel-codex-tui","version":"0.2.0","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.2.0","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"267d6b685d56af82e4c89fc81e1916ca031041e4","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.2.0.tgz","fileCount":85,"integrity":"sha512-lyJfWORyjI1sb8M5tmDtwc8BJCi+UwKKUqoH1U7upaIZ9VQPFmqlvDfmOFWncNS0ipT1CEWSXTZIx5vYDp251A==","signatures":[{"sig":"MEUCIQDIG6/x47+NUmPWZ+c5HpGMk86LgeqGtvjotL5PT2+LXwIgQLMwZE6oFNVzYiLFOADd5ZOBIRnlnW8RxilYoaoTfFs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1266295},"type":"module","_from":"file:parallel-codex-tui-0.2.0.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.2.0.tgz","_integrity":"sha512-lyJfWORyjI1sb8M5tmDtwc8BJCi+UwKKUqoH1U7upaIZ9VQPFmqlvDfmOFWncNS0ipT1CEWSXTZIx5vYDp251A==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.2.0_1784263943204_0.04218246142213666","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"parallel-codex-tui","version":"0.2.1","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.2.1","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"9af1118eb07da8d626eaa566796a60d8109eab92","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.2.1.tgz","fileCount":85,"integrity":"sha512-+pbYc5MzCHEgRSP5VtHo0O9VzzqbJ/P/q3WT0obQOpgfPQzt7143nPYBbMfUA7fzfy/fMNrG7vBVV67ACvXPoQ==","signatures":[{"sig":"MEUCIQD+yiAqPXAdsRT9j0aicNl9Q11vtY6KqcsSV/oJgeKWmQIgBh65OlHDUlAZVyELgeonwDXKCWFKviOGWEVbZ+R/kSY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1266640},"type":"module","_from":"file:parallel-codex-tui-0.2.1.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.2.1.tgz","_integrity":"sha512-+pbYc5MzCHEgRSP5VtHo0O9VzzqbJ/P/q3WT0obQOpgfPQzt7143nPYBbMfUA7fzfy/fMNrG7vBVV67ACvXPoQ==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.2.1_1784265999723_0.8508916510760742","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"parallel-codex-tui","version":"0.2.2","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.2.2","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"83452ec6f8367ab03f83dc25dd0da892514b8f0c","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.2.2.tgz","fileCount":86,"integrity":"sha512-EUIbFvuf4hLq4aCt8JHY//tViX02SXhj3NPmkuqrMIsqmXAadkAHTiOf+XBQRA0pM4AP5pBH6P2bBG4Opw8Twg==","signatures":[{"sig":"MEYCIQD5Na9HPqdBN9T5LIAWi4bA8ZVOovXc7aX/r1DvIw4OIQIhALO9Yx60O4QnDqammXjqYzALJcsQrKuFN41HUBQOjL0E","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1270430},"type":"module","_from":"file:parallel-codex-tui-0.2.2.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.2.2.tgz","_integrity":"sha512-EUIbFvuf4hLq4aCt8JHY//tViX02SXhj3NPmkuqrMIsqmXAadkAHTiOf+XBQRA0pM4AP5pBH6P2bBG4Opw8Twg==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.2.2_1784273020165_0.6347318079638928","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"parallel-codex-tui","version":"0.2.3","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.2.3","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"1b0bcff32a5593b062c395762a53b22c8872c784","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.2.3.tgz","fileCount":86,"integrity":"sha512-Ahd5Q0mEo7oA/rMA2umPjYlNSn4Lg+AH47eCFHkTpuGkvOXk9r6chJU2al3bnuhaVDdMcQFuKHKKX+uCDBSuSA==","signatures":[{"sig":"MEYCIQDZJowvrQwesaYvlqgqbIMoeLxjqNyiI840qM0IylpHkQIhAP+SET5Kg773cs5FGr9LCpJIj9PWwmALmRgeJRINrybn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1271433},"type":"module","_from":"file:parallel-codex-tui-0.2.3.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.2.3.tgz","_integrity":"sha512-Ahd5Q0mEo7oA/rMA2umPjYlNSn4Lg+AH47eCFHkTpuGkvOXk9r6chJU2al3bnuhaVDdMcQFuKHKKX+uCDBSuSA==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.2.3_1784276526184_0.09088963327008925","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"parallel-codex-tui","version":"0.2.4","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.2.4","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"754c9241d92bac946b7703c55a33fcbf2478f96d","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.2.4.tgz","fileCount":86,"integrity":"sha512-1hFX03U94LZDOs17jyNuXrChZSZLWOFDE/rKfdTMw38Xfp5JNT0PqTFM3Jz41vd+gbUf1HmdHvIYo6i/lFrgWg==","signatures":[{"sig":"MEQCIA1in9Mv6UMWsMTgXW79sjby0M7u6gme+y/VB2rw47FNAiBcDtflUjOlf7rGAaeWTdicK+iJQ9owtEt3n9/Z6BVOQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1273052},"type":"module","_from":"file:parallel-codex-tui-0.2.4.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.2.4.tgz","_integrity":"sha512-1hFX03U94LZDOs17jyNuXrChZSZLWOFDE/rKfdTMw38Xfp5JNT0PqTFM3Jz41vd+gbUf1HmdHvIYo6i/lFrgWg==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.2.4_1784279467742_0.04108454028617459","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"parallel-codex-tui","version":"0.2.5","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.2.5","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"2b0b29844af3f913edfe43802ef23600d914555d","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.2.5.tgz","fileCount":89,"integrity":"sha512-CZHVXnslERezl5QCKu4OBdbsQwVWCzmyF/1ugmN7ttuedXAvUFyCJ+TQB9HB+zX3X8M2KtK78pcd0yHBjBbisw==","signatures":[{"sig":"MEUCIQDeZNEOEa0HYtdnnWFjBaJB7a7fNAe/tPwO/9uqkF7yCwIgDF2S7K/MzDG3pjlr1X2TPCRndW+IjjYOjFOwyP8x3zU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1283502},"type":"module","_from":"file:parallel-codex-tui-0.2.5.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.2.5.tgz","_integrity":"sha512-CZHVXnslERezl5QCKu4OBdbsQwVWCzmyF/1ugmN7ttuedXAvUFyCJ+TQB9HB+zX3X8M2KtK78pcd0yHBjBbisw==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.2.5_1784442779751_0.0259048325084692","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"parallel-codex-tui","version":"0.2.6","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.2.6","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"bdd5d49c5a94eef6055ef1f8284d98b3fdfcda47","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.2.6.tgz","fileCount":89,"integrity":"sha512-s/2zxs+MSaxzMYEQxjPzqgE7yotXb1DP7lShQDmNct5TTuz8YtQQkWmDR9gFDHPh1bHM0gJjCEZykzhxg/AGbQ==","signatures":[{"sig":"MEYCIQC56wDIIaSmDO7QqvI8cdptjBm4Yux6MBUMH9tdzYRQagIhAOC2Hqhi5FM4m82QAIfK2B/R7Z5OHLIMlOuqfM3oL4tL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1287874},"type":"module","_from":"file:parallel-codex-tui-0.2.6.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.2.6.tgz","_integrity":"sha512-s/2zxs+MSaxzMYEQxjPzqgE7yotXb1DP7lShQDmNct5TTuz8YtQQkWmDR9gFDHPh1bHM0gJjCEZykzhxg/AGbQ==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.2.6_1784447320931_0.5813424683503672","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"parallel-codex-tui","version":"0.2.7","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.2.7","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"8511c43b23f6b307ec780f659cde23f0e81c30b8","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.2.7.tgz","fileCount":89,"integrity":"sha512-KJfy6L8ByHJzfB7a2heAgXL6u7n1vq2SG45S/0DZdnI6ngnm7732/9xTOpnp4DbSPL5JaBOyZMXNXjFiTnghUA==","signatures":[{"sig":"MEUCIQDTsafjaWo+REeCA38/G+PvV9IT1xPoodIfyRuPW0h+UwIgQGZ0xsFtokpgEo84V1oKSciF69H/hjotUBTFL1ROqfU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1291847},"type":"module","_from":"file:parallel-codex-tui-0.2.7.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.2.7.tgz","_integrity":"sha512-KJfy6L8ByHJzfB7a2heAgXL6u7n1vq2SG45S/0DZdnI6ngnm7732/9xTOpnp4DbSPL5JaBOyZMXNXjFiTnghUA==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.2.7_1784452391112_0.54392820279505","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"parallel-codex-tui","version":"0.2.8","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.2.8","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"2b02a53e783eb06951248328b1ac0d28547d9b26","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.2.8.tgz","fileCount":89,"integrity":"sha512-XcuPjj03mMZy+D1dvQc4FpuQWsU7bASWsnkGcDEX2jJEvRQ8f6OdgMD0LfC/J9vDIWZG5AaZ4CySd+1Hf2Rn+Q==","signatures":[{"sig":"MEYCIQCy3VCM7l1Lhn/sud7zqnestgssM+tLlfdyZsCAek02kAIhAOMDUgdvtDHjs+YlyRSN8jXYaCrHdDgZVWMXfQHt8Zbv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1296086},"type":"module","_from":"file:parallel-codex-tui-0.2.8.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.2.8.tgz","_integrity":"sha512-XcuPjj03mMZy+D1dvQc4FpuQWsU7bASWsnkGcDEX2jJEvRQ8f6OdgMD0LfC/J9vDIWZG5AaZ4CySd+1Hf2Rn+Q==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.2.8_1784456107917_0.16743327051538714","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"parallel-codex-tui","version":"0.2.9","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.2.9","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"477172992c623ce18f0da0cfbe8cfc4850bd7ee6","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.2.9.tgz","fileCount":90,"integrity":"sha512-4b5ZhU08d8hvEvbF/HEOpro77dpKtYNubd/NCs1uQ1VbEEPQNFTAQ4fMKtyokFU1tBgaalEMJlAaArZQZdZL9A==","signatures":[{"sig":"MEUCIQDycWLSo+JWCetwwVt/b/b/c6uWq1c4mifahKGe9m70CQIgPUOXWaEqVNQxSJF/4kmou2y9E33FdkoNTnyVCwMgi/w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.2.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1328642},"type":"module","_from":"file:parallel-codex-tui-0.2.9.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.2.9.tgz","_integrity":"sha512-4b5ZhU08d8hvEvbF/HEOpro77dpKtYNubd/NCs1uQ1VbEEPQNFTAQ4fMKtyokFU1tBgaalEMJlAaArZQZdZL9A==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.2.9_1784459749596_0.42936162981546233","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"parallel-codex-tui","version":"0.2.10","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.2.10","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"765fb58bbc6ff691de1992a5fe6ca8e5e99a9de2","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.2.10.tgz","fileCount":90,"integrity":"sha512-KUb2kAKAWpC1mVR3jtlGBFxmPwQLXyOZ5dbmU9pmlnWxTNfp6zXkXraZMAzu8ixAtmMA7tp85cx3feugsbTdgA==","signatures":[{"sig":"MEUCIAH9rUCj96FbO7SOyik+8W7oTvCoed2MvcD90RFFU3C7AiEAt+/VaYKT9FvAKrg/HzYy8sCDpMk21QG4RI/Dc7RjMnE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.2.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1357151},"type":"module","_from":"file:parallel-codex-tui-0.2.10.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.2.10.tgz","_integrity":"sha512-KUb2kAKAWpC1mVR3jtlGBFxmPwQLXyOZ5dbmU9pmlnWxTNfp6zXkXraZMAzu8ixAtmMA7tp85cx3feugsbTdgA==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.2.10_1784512758499_0.47177631795321906","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"parallel-codex-tui","version":"0.3.0","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.3.0","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"786bbb485d9c225180e2d73b9ba99a4b473f3564","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.3.0.tgz","fileCount":93,"integrity":"sha512-LWoeFWiqPXNbWlBET66WsafakjG/nS0kO/q1tIDPQPGL2ZmdRg6kwoao1Qv0wJtuB5wPnWAQA8Fagve7iQe2oA==","signatures":[{"sig":"MEUCICovDRy173oVvyVVqOtPlTHB5bBIDiLgvQ8I17BaLe9dAiEA3P/9Thr3wD6d+kK1M+yHed5wm0V9sYfFJ/NuWiit6/8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1408730},"type":"module","_from":"file:parallel-codex-tui-0.3.0.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.3.0.tgz","_integrity":"sha512-LWoeFWiqPXNbWlBET66WsafakjG/nS0kO/q1tIDPQPGL2ZmdRg6kwoao1Qv0wJtuB5wPnWAQA8Fagve7iQe2oA==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.3.0_1784517596275_0.061122389326458526","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"parallel-codex-tui","version":"0.3.1","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.3.1","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"142090660050c041f3b1c45ddf9faa3640f81e37","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.3.1.tgz","fileCount":93,"integrity":"sha512-Pf111Uqj7wvkRiQuaRp73zhbJ61Hf1/Gz/fGAFY4hJyry6Ob8GqRC5Wmkon4YPAVEfSS4rHdfRljW23LMGxL6Q==","signatures":[{"sig":"MEYCIQD3zbE73SYXKCA/MZAsc0u0duTbq0aqJEFJXE0XkqMTEgIhAIBcZAfJcOQ68iROCd1bHKZjTkaNTqdIbYxhrDyCrXYG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1423019},"type":"module","_from":"file:parallel-codex-tui-0.3.1.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.3.1.tgz","_integrity":"sha512-Pf111Uqj7wvkRiQuaRp73zhbJ61Hf1/Gz/fGAFY4hJyry6Ob8GqRC5Wmkon4YPAVEfSS4rHdfRljW23LMGxL6Q==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.3.1_1784533277966_0.7490646212701066","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"parallel-codex-tui","version":"0.3.2","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.3.2","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"87d1b6b521ac2f66531cb7b8bca918eea4e1e3f6","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.3.2.tgz","fileCount":95,"integrity":"sha512-giE5BuBsLc77Fua6xRS55RVQw3GeUCz/sR9FfK64xWyvMA3yJdwsTdgLHqO76W5q3HIZlbPO7RAl3BDsB9Uqlw==","signatures":[{"sig":"MEQCIHobuBVJQ3IYWeChKlkih1mqtBRzTyKOv+K+0pFY4P6iAiAMnhXT/y2EEaALPv9cu6lBvUiAXW24N/vusilfeFBzKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1463962},"type":"module","_from":"file:parallel-codex-tui-0.3.2.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.3.2.tgz","_integrity":"sha512-giE5BuBsLc77Fua6xRS55RVQw3GeUCz/sR9FfK64xWyvMA3yJdwsTdgLHqO76W5q3HIZlbPO7RAl3BDsB9Uqlw==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.3.2_1784538881245_0.03499631877020937","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"parallel-codex-tui","version":"0.4.0","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.4.0","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"48a9aadad5a0b18355a636ba6d6b51554948c902","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.4.0.tgz","fileCount":99,"integrity":"sha512-Mx6ZlRsgYKDQi77D1kBTz7+x+Q4KnMZ38EYQTuL4dYmqbUlrbExh5xpHqYjMoY2bNzhUS0cbia32q2v+Q/VMTw==","signatures":[{"sig":"MEUCIQDswSB20/8HZ/LcFUosYSxW+rP3FSpAMavY6DdLDDZh5wIgE3sQYAS+Ck6jdBIpnnK7fkWVCZhUWlG60ohAT3InJEw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1512126},"type":"module","_from":"file:parallel-codex-tui-0.4.0.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.4.0.tgz","_integrity":"sha512-Mx6ZlRsgYKDQi77D1kBTz7+x+Q4KnMZ38EYQTuL4dYmqbUlrbExh5xpHqYjMoY2bNzhUS0cbia32q2v+Q/VMTw==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.4.0_1784608197190_0.9822313804727036","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"parallel-codex-tui","version":"0.4.1","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.4.1","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"041bd61a24a6f2f169c28a142ac0dbf70093ffee","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.4.1.tgz","fileCount":100,"integrity":"sha512-W7YQT+yz6Udp7S/V0jvkBTwNoduEt2Xws44WFaWHQp20AsKVRG9aNy3ytKevv0VbdIYCrHj5WSpKh/q7NJt8EA==","signatures":[{"sig":"MEUCIQCVbX3RxxnuzmRFSU0G6Qlge1WPL3YqxXKUTECDihpYIAIgPbTBNouMwDdrcpzMt9DWg93wkKYK/N/GQfod5mSQu8g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1522203},"type":"module","_from":"file:parallel-codex-tui-0.4.1.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.4.1.tgz","_integrity":"sha512-W7YQT+yz6Udp7S/V0jvkBTwNoduEt2Xws44WFaWHQp20AsKVRG9aNy3ytKevv0VbdIYCrHj5WSpKh/q7NJt8EA==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.4.1_1784610918584_0.2534984350120517","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"parallel-codex-tui","version":"0.4.2","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.4.2","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"05f397e718b812321fff52d773761157bff5641f","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.4.2.tgz","fileCount":100,"integrity":"sha512-sPqWKkbjrNpSFpTC020HhUVc9gdf5MrRLUKeq27b9G0gqlA3H76jTV79maJjZT2/hAgCJLNZlBT2UdnUsZm4yw==","signatures":[{"sig":"MEYCIQDO8RW2O4CPq3IVhGFrTYiDbvF4dLyAH3AKgJPK9SupKwIhAMdVMn92oWGuJKXsRT+bSqtkIYKie/r7ZRKU+xiopWBm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1529568},"type":"module","_from":"file:parallel-codex-tui-0.4.2.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.4.2.tgz","_integrity":"sha512-sPqWKkbjrNpSFpTC020HhUVc9gdf5MrRLUKeq27b9G0gqlA3H76jTV79maJjZT2/hAgCJLNZlBT2UdnUsZm4yw==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.4.2_1784618954772_0.296421415007347","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"parallel-codex-tui","version":"0.4.3","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.4.3","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"12ffe455930bceecd0d2ee65b31146c8a931bf5e","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.4.3.tgz","fileCount":102,"integrity":"sha512-Me2axdyrkccgwCykzjff/8zKphTa14GIzZT4o0Sr4p+ooVDp14JpQawgQQt5VHVXjRf09cPhjwEf4cwnmbGakg==","signatures":[{"sig":"MEUCIGtkLvVax9hS0PDANPKk6lkKkCP31GBHEilqdiVq7p2IAiEAgO5TCeBf1LG4q7BwQN1YaS4k/ed+xHUY15kQEJYKQeE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1547784},"type":"module","_from":"file:parallel-codex-tui-0.4.3.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.4.3.tgz","_integrity":"sha512-Me2axdyrkccgwCykzjff/8zKphTa14GIzZT4o0Sr4p+ooVDp14JpQawgQQt5VHVXjRf09cPhjwEf4cwnmbGakg==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.4.3_1784689082853_0.1650521230791402","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"parallel-codex-tui","version":"0.4.4","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.4.4","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"6b887a1f7aafe8416b052eb658e40c3d63812334","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.4.4.tgz","fileCount":103,"integrity":"sha512-tU/ZaGZDkrESIFVK7uj+BRhKxdiSaa3ZXf88IHHh3XulBgMbRQi/HmpaHS+WBJ+oJhvmKIU2kl9Jd6tqUk47jw==","signatures":[{"sig":"MEYCIQD6OjPV0XWIqeRXUjKiAkcYbw1M6HpPnbvYM0CVztYc6gIhAJ5T2SJrchRU9HtpDdJh188w7SazVNItvRsrvO7G+qH/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.4.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1571485},"type":"module","_from":"file:parallel-codex-tui-0.4.4.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.4.4.tgz","_integrity":"sha512-tU/ZaGZDkrESIFVK7uj+BRhKxdiSaa3ZXf88IHHh3XulBgMbRQi/HmpaHS+WBJ+oJhvmKIU2kl9Jd6tqUk47jw==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.4.4_1784692407716_0.19124170287455833","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"parallel-codex-tui","version":"0.4.5","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.4.5","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"0ee7d3216ff22281bee2b2b6a592af976f70b3d5","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.4.5.tgz","fileCount":103,"integrity":"sha512-fjPV5Hl36UI+xoU/Bi2Cp4+IVok/T5hsJJiVmIZeEi9VzLPvZSZAZIA3CJYlgsvKnQNKslKEBlss/aM04Q7ZfA==","signatures":[{"sig":"MEQCIH8LMWgMl8PdlZUqwQ7v0SuR13QnBv4SgEHMOKWL67WLAiA7CKoqmjPcYrjidHDghWcfS+G+KpFjI+E1QCyhC4pSZg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.4.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1578107},"type":"module","_from":"file:parallel-codex-tui-0.4.5.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.4.5.tgz","_integrity":"sha512-fjPV5Hl36UI+xoU/Bi2Cp4+IVok/T5hsJJiVmIZeEi9VzLPvZSZAZIA3CJYlgsvKnQNKslKEBlss/aM04Q7ZfA==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.4.5_1784694727070_0.8349354694434594","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"parallel-codex-tui","version":"0.4.6","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.4.6","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"a0772a1d4429b35aa1d4fde691968ba1d4cae68f","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.4.6.tgz","fileCount":103,"integrity":"sha512-Hi0VrXbf0+t9zHn/LsFKbBVxbB3Nt9skFSMVT9KkwA+N7aPTWiSiBEWGO4thnwLDHT6QdBVp35jYBGRxIaWPOA==","signatures":[{"sig":"MEUCIQD4vkfZpF/QSScDSP3c5g757+KLvC6KANiBHkHL2GLPbgIgSr1Tcay+Emw3XE7vwTttdpN8WLz/MPF+Cv1FCAtAMgk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.4.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1583407},"type":"module","_from":"file:parallel-codex-tui-0.4.6.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","postbuild":"node -e \"require('node:fs').chmodSync('dist/cli.js', 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","test:stress":"PCT_STRESS_TESTS=1 vitest run tests/cli-multi-workspace-stress.test.ts","pretest:stress":"node scripts/fix-node-pty-permissions.mjs","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.4.6.tgz","_integrity":"sha512-Hi0VrXbf0+t9zHn/LsFKbBVxbB3Nt9skFSMVT9KkwA+N7aPTWiSiBEWGO4thnwLDHT6QdBVp35jYBGRxIaWPOA==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.4.6_1784699294357_0.7221461089215371","host":"s3://npm-registry-packages-npm-production"}},"0.4.7":{"name":"parallel-codex-tui","version":"0.4.7","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.4.7","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codexd":"dist/daemon-cli.js","parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"4d179509d634bf6c5dea9ce1aa260a801e7850d7","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.4.7.tgz","fileCount":109,"integrity":"sha512-RV/RccHK8Qvs7EFBb5/3uDI2GN581Sjr+hLczIbqpqlZ34PJzPgAWZj9xi3w39+1FPKlebMkmuH8tfnJ5zWHag==","signatures":[{"sig":"MEUCIDmFC5YWZ30+c3FQpyJzTqursgIjoNYcgIju6rYJSbGVAiEA1TwEXSxKLxSVpEnWZ9Y+NuTPn7k+FgigJrQ5c3aT2lA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.4.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1697914},"type":"module","_from":"file:parallel-codex-tui-0.4.7.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","gui:dev":"npm run build && npm --prefix apps/desktop run dev","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","gui:build":"npm run build && npm --prefix apps/desktop run build","postbuild":"node -e \"for (const file of ['dist/cli.js', 'dist/daemon-cli.js']) require('node:fs').chmodSync(file, 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","gui:package":"npm run build && npm --prefix apps/desktop run package","test:stress":"PCT_STRESS_TESTS=1 vitest run tests/cli-multi-workspace-stress.test.ts","gui:dist:mac":"npm run build && npm --prefix apps/desktop run dist:mac","gui:typecheck":"npm --prefix apps/desktop run typecheck","gui:dist:linux":"npm run build && npm --prefix apps/desktop run dist:linux","pretest:stress":"node scripts/fix-node-pty-permissions.mjs","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.4.7.tgz","_integrity":"sha512-RV/RccHK8Qvs7EFBb5/3uDI2GN581Sjr+hLczIbqpqlZ34PJzPgAWZj9xi3w39+1FPKlebMkmuH8tfnJ5zWHag==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.4.7_1785137747042_0.2313029551560235","host":"s3://npm-registry-packages-npm-production"}},"0.4.8":{"name":"parallel-codex-tui","version":"0.4.8","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.4.8","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codexd":"dist/daemon-cli.js","parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"de1f8048b67a1e243e7c65cc7ab70fd9daee8c9b","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.4.8.tgz","fileCount":109,"integrity":"sha512-nEMLt1u9mrFHsWp3pGO2b2IMD9y8/AI1lhaQvcMLTkr3/Ixgq8O77yKf9pVOZZGH9X3MBIjK6akorXBa+hxaaQ==","signatures":[{"sig":"MEUCIQCj2dEQZrmHsI2M/AaNeXU5U2gjVsdK9cdINjNI8DXR0wIgNToVSRlwfKQ/HZfDCcVZ2WxDSryemDX4lHl5CP93mHI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.4.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1703243},"type":"module","_from":"file:parallel-codex-tui-0.4.8.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","gui:dev":"npm run build && npm --prefix apps/desktop run dev","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","gui:build":"npm run build && npm --prefix apps/desktop run build","postbuild":"node -e \"for (const file of ['dist/cli.js', 'dist/daemon-cli.js']) require('node:fs').chmodSync(file, 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","gui:package":"npm run build && npm --prefix apps/desktop run package","test:stress":"PCT_STRESS_TESTS=1 vitest run tests/cli-multi-workspace-stress.test.ts","gui:dist:mac":"npm run build && npm --prefix apps/desktop run dist:mac","gui:typecheck":"npm --prefix apps/desktop run typecheck","gui:dist:linux":"npm run build && npm --prefix apps/desktop run dist:linux","pretest:stress":"node scripts/fix-node-pty-permissions.mjs","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.4.8.tgz","_integrity":"sha512-nEMLt1u9mrFHsWp3pGO2b2IMD9y8/AI1lhaQvcMLTkr3/Ixgq8O77yKf9pVOZZGH9X3MBIjK6akorXBa+hxaaQ==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.4.8_1785303127904_0.3440036422786157","host":"s3://npm-registry-packages-npm-production"}},"0.4.9":{"name":"parallel-codex-tui","version":"0.4.9","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.4.9","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codexd":"dist/daemon-cli.js","parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"c647f4bd87951c0b38603c22fd008f55754f2401","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.4.9.tgz","fileCount":110,"integrity":"sha512-e2F//hWH5ROgNXkGQSP/syE2hXDsbndPkw1MGYQFqC8Bs8e/CKKzRWSoAyvtMVgSj7Dzsi2fqHKq2+vJisH7Eg==","signatures":[{"sig":"MEUCIFcsFHanxRix2b6EQ6ToI4i+JNMRTqT6LqmcGbhl1bDpAiEA/dl4/r/hUX9uGCUrDTCc1iWHFyQXnvDIjNkZmPpRgK4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.4.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1704447},"type":"module","_from":"file:parallel-codex-tui-0.4.9.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","gui:dev":"npm run build && npm --prefix apps/desktop run dev","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","gui:build":"npm run build && npm --prefix apps/desktop run build","postbuild":"node -e \"for (const file of ['dist/cli.js', 'dist/daemon-cli.js']) require('node:fs').chmodSync(file, 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","gui:package":"npm run build && npm --prefix apps/desktop run package","test:stress":"PCT_STRESS_TESTS=1 vitest run tests/cli-multi-workspace-stress.test.ts","gui:dist:mac":"npm run build && npm --prefix apps/desktop run dist:mac","gui:typecheck":"npm --prefix apps/desktop run typecheck","gui:dist:linux":"npm run build && npm --prefix apps/desktop run dist:linux","pretest:stress":"node scripts/fix-node-pty-permissions.mjs","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.4.9.tgz","_integrity":"sha512-e2F//hWH5ROgNXkGQSP/syE2hXDsbndPkw1MGYQFqC8Bs8e/CKKzRWSoAyvtMVgSj7Dzsi2fqHKq2+vJisH7Eg==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.18.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.4.9_1785311891593_0.4658094207251713","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"parallel-codex-tui","version":"0.5.0","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"license":"MIT","_id":"parallel-codex-tui@0.5.0","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"homepage":"https://github.com/allendred/parallel-codex-tui#readme","bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"bin":{"parallel-codexd":"dist/daemon-cli.js","parallel-codex-tui":"dist/cli.js"},"dist":{"shasum":"b22b9f462ec959edc145384e75c30c2ba197c481","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.5.0.tgz","fileCount":110,"integrity":"sha512-TP4krvFjs8S7IfCJc85EiQSMZkKT2Rpcfu8Erpjf8PkhHOk1W/qqipvK4/ZpCC28ec/0AgzD+fxbflhPNnYupQ==","signatures":[{"sig":"MEUCIQDyj1oOIEiHEDm4IoMjHhc+K4HM5bTa726gha+ewCDDhgIgSTqivkbL9nmDMDeZmeSakCgiKa3yghwTt7PqYF+KGM8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1706383},"type":"module","_from":"file:parallel-codex-tui-0.5.0.tgz","engines":{"node":">=24.15.0"},"scripts":{"dev":"tsx src/cli.tsx","lint":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","build":"tsc -p tsconfig.json","gui:dev":"npm run build && npm --prefix apps/desktop run dev","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","gui:build":"npm run build && npm --prefix apps/desktop run build","postbuild":"node -e \"for (const file of ['dist/cli.js', 'dist/daemon-cli.js']) require('node:fs').chmodSync(file, 0o755)\"","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","gui:package":"npm run build && npm --prefix apps/desktop run package","test:stress":"PCT_STRESS_TESTS=1 vitest run tests/cli-multi-workspace-stress.test.ts","gui:dist:mac":"npm run build && npm --prefix apps/desktop run dist:mac","gui:typecheck":"npm --prefix apps/desktop run typecheck","gui:dist:linux":"npm run build && npm --prefix apps/desktop run dist:linux","pretest:stress":"node scripts/fix-node-pty-permissions.mjs","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","verify:package":"node scripts/verify-package.mjs","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.5.0.tgz","_integrity":"sha512-TP4krvFjs8S7IfCJc85EiQSMZkKT2Rpcfu8Erpjf8PkhHOk1W/qqipvK4/ZpCC28ec/0AgzD+fxbflhPNnYupQ==","repository":{"url":"git+https://github.com/allendred/parallel-codex-tui.git","type":"git"},"_npmVersion":"11.19.0","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","directories":{},"_nodeVersion":"24.15.0","allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"dependencies":{"ink":"^5.0.1","zod":"^3.25.0","chalk":"^5.3.0","react":"^18.3.1","marked":"^18.0.6","node-pty":"^1.1.0","@iarna/toml":"^2.2.5","ink-text-input":"^6.0.0","@xterm/headless":"^6.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vitest":"^3.2.0","typescript":"^5.8.0","@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/parallel-codex-tui_0.5.0_1785375684763_0.22448999968046524","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"parallel-codex-tui","version":"0.5.1","description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","license":"MIT","type":"module","repository":{"type":"git","url":"git+https://github.com/allendred/parallel-codex-tui.git"},"bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"homepage":"https://github.com/allendred/parallel-codex-tui#readme","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"engines":{"node":">=24.15.0"},"bin":{"parallel-codex-tui":"dist/cli.js","parallel-codexd":"dist/daemon-cli.js"},"scripts":{"dev":"tsx src/cli.tsx","gui:dev":"npm run build && npm --prefix apps/desktop run dev","gui:build":"npm run build && npm --prefix apps/desktop run build","gui:package":"npm run build && npm --prefix apps/desktop run package","gui:dist:mac":"npm run build && npm --prefix apps/desktop run dist:mac","gui:dist:linux":"npm run build && npm --prefix apps/desktop run dist:linux","gui:typecheck":"npm --prefix apps/desktop run typecheck","build":"tsc -p tsconfig.json","postbuild":"node -e \"for (const file of ['dist/cli.js', 'dist/daemon-cli.js']) require('node:fs').chmodSync(file, 0o755)\"","prepack":"npm run build","pretest":"node scripts/fix-node-pty-permissions.mjs","pretest:stability":"node scripts/fix-node-pty-permissions.mjs","pretest:stress":"node scripts/fix-node-pty-permissions.mjs","pretest:terminal-hosts":"node scripts/fix-node-pty-permissions.mjs","pretest:real-agents":"node scripts/fix-node-pty-permissions.mjs","verify:package":"node scripts/verify-package.mjs","test":"vitest run","test:stability":"vitest run tests/cli-worker-history-smoke.test.ts tests/cli-workspace-switch-smoke.test.ts tests/cli-orphan-process-recovery-smoke.test.ts tests/cli-startup-recovery-smoke.test.ts","test:stress":"PCT_STRESS_TESTS=1 vitest run tests/cli-multi-workspace-stress.test.ts","test:terminal-hosts":"vitest run tests/cli-terminal-host-compat-smoke.test.ts","test:real-agents":"PCT_REAL_AGENT_TESTS=1 vitest run tests/cli-real-multi-workspace.test.ts","test:watch":"vitest","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","lint":"tsc --noEmit -p tsconfig.typecheck.json"},"dependencies":{"@iarna/toml":"^2.2.5","@xterm/headless":"^6.0.0","chalk":"^5.3.0","ink":"^5.0.1","ink-text-input":"^6.0.0","marked":"^18.0.6","node-pty":"^1.1.0","react":"^18.3.1","zod":"^3.25.0"},"devDependencies":{"@types/node":"^22.13.0","@types/react":"^18.3.0","ink-testing-library":"^3.0.0","tsx":"^4.19.0","typescript":"^5.8.0","vitest":"^3.2.0"},"allowScripts":{"esbuild@0.28.1":true,"fsevents@2.3.3":true,"node-pty@1.1.0":true},"_id":"parallel-codex-tui@0.5.1","_integrity":"sha512-lX3gHFvdadnqD9oD18zy0uRh063I5XYctlf9+YcPykiFZtLspbws8115R0FFr/82ZUod1ktGuSFfoU+sRVoKxw==","_resolved":"/home/runner/work/parallel-codex-tui/parallel-codex-tui/parallel-codex-tui-0.5.1.tgz","_from":"file:parallel-codex-tui-0.5.1.tgz","_nodeVersion":"24.15.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-lX3gHFvdadnqD9oD18zy0uRh063I5XYctlf9+YcPykiFZtLspbws8115R0FFr/82ZUod1ktGuSFfoU+sRVoKxw==","shasum":"96b023cd062e5c46ff67b3acc649e1a6f2c3b768","tarball":"https://registry.npmjs.org/parallel-codex-tui/-/parallel-codex-tui-0.5.1.tgz","fileCount":110,"unpackedSize":1707755,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/parallel-codex-tui@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDkiHaVtjAq/YkneGXMvDtwBkLSdOmkIUUPUfyvt/1/ZAIgSvCajC+c7dm3+jy+ypvHEKp12RJurOJxrMpLe5h85rk="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7f0a2d7f-8f54-4144-81ae-46d810175172"}},"directories":{},"maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/parallel-codex-tui_0.5.1_1785404889142_0.8574470794113598"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-07T07:07:55.260Z","modified":"2026-07-30T09:48:09.608Z","0.1.0":"2026-07-07T07:07:55.786Z","0.1.3":"2026-07-09T06:19:44.068Z","0.1.4":"2026-07-15T08:27:27.611Z","0.1.5":"2026-07-15T18:16:03.858Z","0.1.6":"2026-07-16T08:58:34.466Z","0.1.7":"2026-07-16T10:17:44.653Z","0.1.8":"2026-07-17T02:33:56.570Z","0.2.0":"2026-07-17T04:52:23.413Z","0.2.1":"2026-07-17T05:26:39.887Z","0.2.2":"2026-07-17T07:23:40.373Z","0.2.3":"2026-07-17T08:22:06.371Z","0.2.4":"2026-07-17T09:11:07.906Z","0.2.5":"2026-07-19T06:32:59.987Z","0.2.6":"2026-07-19T07:48:41.067Z","0.2.7":"2026-07-19T09:13:11.339Z","0.2.8":"2026-07-19T10:15:08.148Z","0.2.9":"2026-07-19T11:15:49.770Z","0.2.10":"2026-07-20T01:59:18.669Z","0.3.0":"2026-07-20T03:19:56.473Z","0.3.1":"2026-07-20T07:41:18.137Z","0.3.2":"2026-07-20T09:14:41.440Z","0.4.0":"2026-07-21T04:29:57.343Z","0.4.1":"2026-07-21T05:15:18.738Z","0.4.2":"2026-07-21T07:29:14.926Z","0.4.3":"2026-07-22T02:58:03.051Z","0.4.4":"2026-07-22T03:53:27.899Z","0.4.5":"2026-07-22T04:32:07.269Z","0.4.6":"2026-07-22T05:48:14.507Z","0.4.7":"2026-07-27T07:35:47.199Z","0.4.8":"2026-07-29T05:32:08.054Z","0.4.9":"2026-07-29T07:58:11.793Z","0.5.0":"2026-07-30T01:41:24.976Z","0.5.1":"2026-07-30T09:48:09.313Z"},"bugs":{"url":"https://github.com/allendred/parallel-codex-tui/issues"},"license":"MIT","homepage":"https://github.com/allendred/parallel-codex-tui#readme","keywords":["codex","claude","tui","parallel-coding","agent-orchestration"],"repository":{"type":"git","url":"git+https://github.com/allendred/parallel-codex-tui.git"},"description":"A TypeScript TUI wrapper for routed parallel coding with Codex and Claude workers.","maintainers":[{"name":"etsiva","email":"next.chaoz@gmail.com"}],"readme":"# parallel-codex-tui\n\nA local terminal and desktop application for everyday AI coding and parallel multi-agent engineering. Ask a normal question in Main chat, or give it a larger implementation task and let Judge, Actor, and Critic work through requirements, code, review, tests, and integration while preserving every session on disk.\n\n## 编程小白：推荐桌面版\n\n不需要先理解 Git、Router、Worker 或模型配置，按下面步骤即可开始：\n\n1. 从 [GitHub Releases](https://github.com/allendred/parallel-codex-tui/releases/latest) 下载名称以 `parallel-codex-desktop-` 开头的桌面版。macOS 选择 `.dmg`，Linux 选择 `.AppImage`；Windows 暂未支持。若当前 Release 没有这种附件，说明该版本只发布了 CLI，请使用下方命令行快速开始或等待下一个桌面版本。\n2. 打开 Parallel Codex，选择已有文件夹，或者创建一个空文件夹。这个文件夹就是应用保存和修改代码、图片等项目文件的位置。\n3. 新版桌面安装包已经内置 Codex，不需要另外安装 Node.js、npm 或 Codex CLI。界面提示“Codex 尚未登录”时，点击“登录 Codex”；应用会打开 OpenAI 官方登录页，并在界面显示一次性登录码。\n4. 没有 Claude 不影响入门，直接点击“仅使用 Codex（推荐）”即可。只有旧版或不完整的桌面包提示“Codex 命令未安装”时，才需要按界面给出的命令修复。\n5. 点击“帮我看懂这个工程”“帮我修复一个问题”“帮我实现一个功能”或“从零创建一个小项目”；示例只会填入输入框，确认内容后再发送。\n6. 同一个工作台里可以随时打开“进度、变更、架构、执行、记录”。日常状态使用容易理解的四个阶段，Actor、Critic、依赖和原生会话等技术细节需要时再展开，不需要选择所谓的新手或专业模式。\n\n第一次建议使用空文件夹，或重要文件夹的副本。例如创建“我的第一个应用”文件夹，然后输入“做一个可以直接打开的俄罗斯方块网页”。Worker 可以修改文件并运行命令，因此不要把唯一一份重要资料直接交给它。\n\n当前 macOS 桌面包未签名。请只从本仓库 Release 页面下载；如果 macOS 阻止首次打开，可以按住 Control 点击应用并选择“打开”，确认来源后继续。\n\n## No Coding Experience? Start With Desktop\n\nYou do not need to understand Git, routing, Workers, or model configuration first:\n\n1. Download an asset whose name starts with `parallel-codex-desktop-` from [GitHub Releases](https://github.com/allendred/parallel-codex-tui/releases/latest). Choose `.dmg` on macOS or `.AppImage` on Linux; Windows is not supported yet. If the current release has no such asset, that version is CLI-only, so use the command-line quick start below or wait for the next desktop release.\n2. Open Parallel Codex and select an existing folder or create an empty one. This project folder is where the app reads and changes code, images, and other project files.\n3. New desktop packages include Codex, so you do not need to install Node.js, npm, or the Codex CLI separately. When the app says **Codex is not signed in**, click **Sign in to Codex**. Parallel Codex opens the official OpenAI page and shows the one-time code in the app.\n4. Claude is optional for getting started; click **Use Codex only (recommended)** when it is unavailable. Use the command-line repair shown by the app only when an older or incomplete desktop package reports that Codex itself is missing.\n5. Pick one of the four common starter requests. It only fills the message box, so you can review it before anything runs.\n6. Progress, Changes, Architecture, Execution, and Activity remain available in the same workbench. Everyday status uses four understandable stages, while Actor, Critic, dependency, and native-session details expand only when needed. There is no beginner-versus-expert mode to choose.\n\nFor a first try, use an empty folder or a copy of important files. Workers can edit files and run commands.\n\n## 中文快速开始\n\n准备好 Node.js 24.15+，然后安装并登录 Codex CLI：\n\n```bash\nnpm install -g @openai/codex\ncodex --login\n```\n\n安装 Parallel Codex 并直接启动：\n\n```bash\nnpm install -g parallel-codex-tui\ncd /你的/工程目录\nparallel-codex-tui\n```\n\n首次启动会自动创建配置，并让你选择或创建工程文件夹，不需要先执行 `--init`。先输入“解释一下这个工程”测试普通对话，再输入“实现一个功能并运行测试”测试并行编排。\n\n默认 Critic 使用 Claude。没有安装 Claude Code 时，可以在界面按 `Ctrl+E` 将 Critic 改为 Codex；也可以安装 Claude Code：\n\n```bash\nnpm install -g @anthropic-ai/claude-code\nclaude\n```\n\n遇到 Agent、权限或代理问题时运行：\n\n```bash\nparallel-codex-tui --doctor\n```\n\nWorker 会编辑所选工程并运行命令，请只打开你信任且已经备份或纳入 Git 的目录。\n\n## Quick Start\n\nInstall Node.js 24.15+, then install and sign in to the Codex CLI:\n\n```bash\nnpm install -g @openai/codex\ncodex --login\n```\n\nInstall Parallel Codex and run it from a project:\n\n```bash\nnpm install -g parallel-codex-tui\ncd /path/to/project\nparallel-codex-tui\n```\n\nFirst launch creates the local config automatically and lets you open or create a project, so `--init` is optional. Try “explain this project” for Main chat, then “implement a feature and run the tests” for the parallel workflow.\n\nThe default Critic uses Claude. If Claude Code is not installed, press `Ctrl+E` and change Critic to Codex, or install and sign in to Claude Code:\n\n```bash\nnpm install -g @anthropic-ai/claude-code\nclaude\n```\n\nRun `parallel-codex-tui --doctor` whenever an Agent, permission, or proxy check needs attention. Workers can edit files and run commands, so open only a trusted project that is backed up or tracked in Git.\n\nBuilt with Codex-assisted development.\n\n## Current Release\n\n`v0.5.1` is available from [npm](https://www.npmjs.com/package/parallel-codex-tui/v/0.5.1) and as a [GitHub Release](https://github.com/allendred/parallel-codex-tui/releases/tag/v0.5.1). This release centralizes project-architecture candidate recovery behind one serialized controller. It is the sole owner of recovery state transitions, continues working while the Architecture view is closed, rejects stale concurrent probes, and exposes the matching Run, wait reason, next check, errors, and retry action in both Chinese and English. Candidate review still requires explicit confirmation before changing project architecture. See [CHANGELOG.md](CHANGELOG.md) for the complete release notes.\n\nInteractive Main and parallel executions run in a detached, per-request Supervisor after the Router resolves in the foreground; headless submissions route inside that Supervisor. `Ctrl+C` closes the outer TUI without stopping an attached run, reopening the same workspace restores its live events or terminal result, and `Esc` remains the explicit cancellation command. One TUI owns the control lease while additional TUIs observe the same run; an observer takes control automatically after the prior controller detaches or exits.\n\nSupervisor requests, state, events, commands, controller ownership, acknowledgements, and diagnostic output are retained under `.parallel-codex/supervisor/runs/<run-id>/`. The Supervisor writes the final chat result itself, so completion survives a closed terminal without duplicate history when the TUI is reopened. Unexpected Supervisor exit is converted into a durable failed state instead of leaving an indefinitely running UI.\n\nIn the Task session center, `Ctrl+F` searches durable evidence across Tasks and Turns, Feature names, roles, Providers, models, Worker states, summaries, and native session ids. Filters such as `turn:\"中文输入\" role:actor provider:codex state:done` can be combined with ordinary Unicode text; live async results reject stale responses, Enter keeps the filter, Esc restores the previously applied query, and `X` clears it.\n\nEvery Task export now includes human-readable `report.md` and structured `report.json` beside the complete raw `session/` snapshot. Reports preserve each Turn request and route, Judge requirements/plans/acceptance criteria, supervisor summaries, Feature assignments and latest review evidence, Wave verification results, Worker Provider/model/state, active native session metadata, completion contracts, and final acceptance evidence. Integrated changed paths are compared with the current workspace as `match`, `drift`, `missing`, `unexpected`, or `unavailable`; the newest integrated wave for each path is authoritative, deleted paths are represented correctly, and unsafe or symlink-traversing paths are never read.\n\n`Ctrl+E` opens runtime role/model control for Main, Judge, Actor, and Critic. The complete matrix can apply once to the next request, persist for retries and follow-ups in the current Task, or become the default for future requests. Saving validates every selected Provider before it writes configuration, and concurrent TUI instances atomically consume a one-shot matrix exactly once.\n\nFeature assignment now controls both Provider and model. From a retryable Feature, press `M`, use `A`/`C` to cycle the Actor/Critic Provider, and use `1`/`2` to edit the Actor/Critic model. A model change starts a distinct Worker identity, keeps all earlier logs and native sessions, and remains an explicit Feature override when Task defaults change. Status details show separate `actual`, `next`, and `future` role matrices alongside the selected historical Worker's persisted model.\n\n`Ctrl+T`, then `C`, opens every persisted Main conversation and provides the same durable management lifecycle as Task sessions: rename, archive, unarchive, scoped export, and confirmed deletion. Restoring one switches the exact `conversation_id`, reloads only that conversation's file-backed history, and restores its archived native Codex or Claude session ids when they are available. `Ctrl+N` creates an explicit, durable Main conversation boundary without deleting chat, Tasks, or Worker logs.\n\nA real Claude acceptance retires the first native session, inserts 16 newer records so the secret is absent from the inline transcript, then proves a fresh Claude session can read the scoped snapshot and recover it. The same live TUI presses `Ctrl+N`, verifies the replacement session is retired, starts another native session whose prompt and archive exclude the secret, and then switches between two isolated workspaces. The bounded rollover fallback remains included: every Main call rebuilds recent context from canonical `chat.jsonl`, so a fresh Agent still receives the latest dialogue inside its current scope.\n\nComplex task memory now retains the root Turn plus the latest 19 previous Turn summaries within a 12,000-character budget. When a longer task omits intermediate summaries inline, the prompt points the Worker to the complete immutable Turn history on disk. Main chat still extracts only the final Codex answer while retaining the complete CLI transcript in `output.log`; legacy transcript-shaped chat records are cleaned when displayed without rewriting their file-backed evidence. Workspace integration ignores known host metadata such as `.DS_Store` and AppleDouble files while continuing to reject real concurrent project edits.\n\nThe default role map is Main/Judge/Actor on Codex and Critic on Claude. Status details show the actual, next, and future role maps separately from each historical Worker's persisted Provider/model. Config monitoring labels Router-only edits as active on the next request and marks role, Worker, model, permission, or UI changes as requiring restart. Claude text/JSON print runs are recognized as buffered work, use the total deadline instead of a false first-output deadline, and run safe isolated tools through non-interactive `auto` permissions. The `v0.2.4` non-interactive Codex permission placement remains included. The release keeps terminal scrolling and copying available at the same time without requiring Shift and preserves the embedded native Agent scrollback across status-detail round trips and real PTY resizes.\n\nHighlights:\n\n- Judge produces validated requirements, acceptance criteria, and a dependency-aware Feature DAG. Actor/Critic pairs exchange checked JSONL findings and replies, followed by Wave Critic and final Judge acceptance.\n- A conflicting parallel wave is archived with its merge evidence and returned to the same Judge native session for a bounded DAG replan. The replacement plan must retain the same Feature IDs and serialize every conflicting pair; a deterministic serialized fallback is used when the Judge response is invalid.\n- Tasks retain every Turn, historical Worker log, native session binding, model snapshot, and collaboration artifact across follow-ups and restarts. A 20-turn soak verifies 80 ordered Workers before and after restart.\n- Main responses, raw process evidence, active role configuration, and historical Worker identity now have separate display and persistence paths.\n- `--diagnostics` and `Ctrl+X` export bounded, redacted support evidence without prompts, role instructions, command arguments, source files, or environment-variable values.\n- `--watch-run` follows durable events and incremental Worker logs in bounded 64 KiB chunks without claiming the TUI controller or acknowledging the result; unsafe log paths emit a structured warning instead of being read.\n- `--pause-feature`, `--cancel-feature`, `--resume-feature`, and `--retry-task` expose the same Supervisor-owned recovery lifecycle to scripts and CI.\n- Runtime preflight checks Codex, Claude, named third-party Providers, proxy reachability, workspace access, CLI capabilities, and native attach policy before work starts.\n- Named Worker Providers support Codex-compatible, Claude-compatible, OpenAI-compatible, Anthropic-compatible, and custom generic commands with independent role, model, environment, permission, resume, and interactive settings.\n- Worker overview, Feature board, collaboration timeline, Task and Main conversation centers, status details, rendered Markdown/Diff/error logs, Unicode search, keyboard navigation, mouse scrolling, and configurable themes share one terminal UI system.\n\nRelease acceptance includes a real three-Feature Tetris task with parallel Actor/Critic waves and final integration review. A clean `v0.2.5` task also ran Codex Judge and Actor, a buffered Claude Critic that independently executed `node --test` and `npm test`, atomic integration, and a resumed Codex Judge that independently passed all seven acceptance criteria. Real Codex and Claude probes both proved fresh and same-session resume calls; Codex fresh and resume runs executed workspace writes with root-level `-a never`, and Claude automated sessions executed safe Bash tools with `auto` permissions. The semantic Router completed a live classification, and one TUI completed Main calls in two workspaces before restoring the first workspace without leaking chat state. PTY coverage runs in Apple Terminal, tmux, and Zellij profiles at narrow and wide sizes, including status/log equivalence, preserving the native output tail across status-detail round trips, and proving both inline and on-demand file memory after native-session rollover. Supervisor PTY coverage proves detached Main and complex execution, restart recovery, controller/observer takeover, explicit cancellation, process-owner crash recovery, out-of-process status/cancellation, detached wait/timeout commands, headless submission, idempotent concurrent retries, missing-Workspace bootstrap, same-Task continuation, read-only event and Worker-output streaming, terminal event draining, and external Feature recovery controls. The deterministic repository suite runs by default, while the dual-workspace restart stress test and quota-consuming real-Agent test are opt-in through `npm run test:stress` and `npm run test:real-agents`.\n\nReal Provider probes depend on valid local CLI credentials. In particular, authenticate the Claude CLI before selecting a Claude-compatible Worker, then run `parallel-codex-tui --doctor --probe-agents` to prove fresh and resumed calls on that machine.\n\n## Requirements\n\n- The packaged desktop app includes its own Node.js runtime and Codex binary. CLI installs and source builds require Node.js 24.15+.\n- macOS or Linux. Windows is not yet covered by CI; use WSL for the supported Linux path.\n- CLI installs require Codex available as `codex`; packaged desktop builds use an existing Codex first and fall back to their bundled copy.\n- Claude CLI available as `claude` only when you configure Claude workers.\n- A project workspace you are comfortable letting configured workers edit.\n\n## Desktop GUI\n\nOn first launch, the desktop app offers an immediate Chinese/English switch, a clear open-or-create project flow, automatic Agent readiness checks with repair actions, and starter requests that fill the composer without submitting or consuming model quota. The workbench has one adaptive interface rather than separate beginner and expert modes: Chat, Progress, Changes, Architecture, Execution, and Activity stay reachable; internal orchestration states become four human stages; and each work item expands its Actor, Critic, dependency, and review evidence only on demand. Recoverable failures expose direct progress, execution-detail, and retry actions. Distributable desktop builds stage the official platform-native Codex binary as a fallback, while preserving any user-installed `codex` earlier on `PATH`. A signed-out user can start the official device-code flow inside the workbench, copy the one-time code, reopen the fixed OpenAI authentication page, cancel safely, and continue as soon as the local CLI reports a successful login.\n\nThe Electron desktop client is a second front end for the same durable runtime as the TUI. It opens or creates project workspaces, keeps Main chat and Tasks separate, and exposes Plan, Workers, Diff, Activity, role configuration, conversation management, and native Codex/Claude terminals in one workbench. Each Workspace restores its selected Task, primary view, navigator state, most recently visited Task, and selected Worker for every Task; Main keeps a direct resume action while Task-only views are unavailable, so switching to a quick conversation never makes historical Workers appear lost. The Worker navigator calls persisted executions `runs`, defaults to the selected Turn instead of flooding the list with every historical run, and keeps an `All turns` option for the complete record. A run that continues an earlier native Codex or Claude session is marked `Resumed session`. Failed, cancelled, and revision-needed Tasks expose Worker, Plan, and Retry actions directly beside the chat composer, while full runtime errors can be expanded from the status bar. A draggable Inspector keeps Chat beside Plan, Workers, Diff, or Activity; its visibility, active view, and split ratio are restored independently for each Workspace. The global Control Center summarizes active requests, Tasks needing attention, recorded Workers, and the effective Main/Judge/Actor/Critic targets across every known Workspace; requests can be stopped and their exact Task opened without changing state elsewhere. Historical Tasks, Turns, Worker logs, native session ids, and collaboration evidence are read from the existing `.parallel-codex/` directory; opening a project in the GUI does not create a separate copy of its history.\n\nThe desktop composer can attach up to 12 explicit File, Turn, Worker, and Diff references. Draft references survive view, Task, Workspace, and application switches. Each submitted round records its reference list in chat history and freezes bounded text evidence into a round-scoped context snapshot; failed Task retries reuse that exact snapshot. File references must resolve to UTF-8 files inside the active Workspace, worker output uses a bounded tail, and the complete snapshot is capped at 64 KiB. Router classification still receives only the original user request. Main, Judge, Actor, Critic, Wave review, and Final Judge prompts receive the snapshot separately and are told to treat it as contextual evidence rather than instructions.\n\n### 工程架构与记忆\n\n桌面版的“架构”视图使用 LikeC4 描述工程本身，而不只是展示 Agent 编排流程。首次点击“分析工程”会通过正常任务让 Agent 检查真实代码并创建 `architecture/**/*.c4`；这些 `.c4` 文件是可审查、可提交到 Git 的长期架构源。\n\n解析后的本地记忆保存在 `.parallel-codex/architecture/`：\n\n- `memory.json` 保存当前可恢复的完整模型和有界工程文件清单。\n- `memory.md` 是供 Main、Judge、Actor 和 Critic 阅读的精简摘要。\n- `history-index.json` 保存轻量版本目录；缺失或损坏时会从历史记录自动重建。\n- `history/revision-*.json` 最多保留最近 20 个架构源版本。\n\n工程文件在记忆生成后发生变化时，界面会标记“工程已变化”；当前记忆会比较有界文件清单，持续保留新增、删除、修改数量及最多 40 条各类路径。工具栏可打开“工程漂移”详情，查看路径并准备一份不会自动发送的架构更新草稿。不可变历史版本不重复保存文件清单，避免长期工程的历史目录膨胀。主动刷新会重新解析并确认当前模型，但不会虚增版本。只有 `.c4` 内容真正变化才会创建新版本。工具栏的版本选择器可以直接在 LikeC4 图中查看最近 20 版，并随时返回当前架构。每个新版本会记录触发它的 Run、Task、Turn 和 Worker；历史索引缺少归因字段时会从不可变 revision 文件重建。即使架构源随后损坏或丢失，应用重启后仍会显示最近一次有效记忆并明确标记其状态。\n\n“分析工程”和“更新架构”使用持久化候选事务。任务启动前会保存当前 `.c4` 基线，并为候选记录专属 Supervisor Round；即使软件在生成途中退出，重启后也能关联到同一次 Run 并继续整理候选，无需先打开架构页。全局 Recovery Controller 是候选状态转换的唯一写入者，架构页只观察结果；候选侧栏会显示对应 Run 或轮次、当前等待原因、下次自动检查时间和手动重试入口。提交没有形成 Run 的孤儿事务会在保护期后自动收尾。Agent 完成后，主进程先验证候选、计算架构源与节点差异，再把正式架构源恢复到基线。用户可以在架构侧栏审阅新增、删除、修改的源文件以及节点和视图变化，只有点击“确认应用”才会写入正式 `architecture/**/*.c4` 并创建新记忆版本。无效候选只显示诊断，不会污染当前模型；放弃候选不会覆盖同时发生的外部修改。成功应用会保留一次跨重启的“撤销更新”记录，回滚同样经过原子写入和 LikeC4 验证。如果正式架构在审阅期间被其他工具修改，应用或回滚会停止并要求重新生成，避免静默覆盖。\n\nLikeC4 节点可通过本地 `link` 关联主要源码文件或归属目录。架构页会把当前 Workspace Diff 与归因 Worker 补丁映射回这些节点：点击变更文件可在图中定位、高亮节点，点击节点可查看并打开相关变更文件；中文、空格和 Git 转义路径会统一解码。节点详情还会按关系方向显示一跳内的直接影响范围，并标记本轮同样发生代码变更的关联组件；点击关联组件即可在图中定位。“准备影响分析”会附加选中节点和最多 4 份相关 Diff，再把一份区分已证实影响、待验证风险、测试建议和未受影响边界的双语请求填入输入框，不会自动发送或修改代码。旧架构记忆没有结构化关系时仍可正常查看。历史架构只读取当时归因 Worker 的补丁，不混入当前 Workspace 变更。代码变更面板显示本次文件映射覆盖度；未映射文件可以生成一份待确认的架构更新草稿并附加相关 Diff，测试或普通工具文件允许保持未建模，但 Agent 必须说明理由。选中架构节点并附加到对话时，组件描述、关系、源码路径、记忆版本和历史状态都会作为有界上下文交给 Agent；附件草稿在软件重启后仍保留这些证据，当前版与历史版的同一节点可以同时附加并明确显示版本。架构记忆始终被视为可能过期的线索，Agent 必须针对当前源码复核；Router 仍然只读取用户原始输入。\n\n### Project Architecture Memory\n\nThe desktop Architecture view uses LikeC4 to describe the project itself, not only Agent execution. **Analyze project** asks an ordinary task to inspect real source code and create source-controlled `architecture/**/*.c4` files. The derived local snapshot lives under `.parallel-codex/architecture/`: `memory.json` stores the recoverable model and a bounded current project-file manifest, `memory.md` provides an Agent-readable summary, `history-index.json` is a repairable lightweight catalog, and `history/` retains the latest 20 source revisions without duplicating the manifest into every immutable copy. The toolbar can render any retained revision and return to the current model. Project changes mark the snapshot stale and preserve added, removed, and changed counts plus up to 40 paths per category. The project-drift panel can inspect those paths and prepare a reviewable architecture-update draft without submitting it. Explicit refresh reparses and confirms the model without creating a false revision, and only changed `.c4` content creates a new revision. Each revision records its originating Run, Task, Turn, and Workers; legacy indexes are rebuilt from immutable revision files when attribution is absent. Missing or invalid sources fall back to the latest valid memory after restart.\n\n**Analyze project** and **Update architecture** use a durable candidate transaction. The main process snapshots the accepted `.c4` baseline before the Agent starts and gives the candidate a dedicated Supervisor round. After a restart, the app can reconnect the candidate to that exact Run and finish staging without requiring the Architecture view to be opened first. One global Recovery Controller exclusively owns candidate state transitions while the Architecture view only observes them. The candidate sidebar shows the matching Run or round, current wait reason, next automatic check, and a manual retry action. An orphaned transaction whose submission never produced a Run is finalized after a safety grace period. When the Agent finishes, the main process validates and stages the proposal, computes source and model differences, and restores the accepted sources before presenting the review. The Architecture sidebar lists changed source files, nodes, views, and validation diagnostics. Only **Apply candidate** writes `architecture/**/*.c4` and creates a memory revision. Invalid or discarded candidates do not pollute the accepted model, and discarding never overwrites unrelated external edits. A successful apply retains one restart-safe **Undo update** record; apply and rollback both use transactional writes and LikeC4 validation. Either action stops instead of silently overwriting architecture sources changed by another tool during review.\n\nLocal LikeC4 links associate nodes with primary source files or ownership directories. The Architecture view maps the current Workspace Diff and attributed Worker patches back to those nodes: a changed file can locate and highlight its node, while a selected node reveals and opens its related changes. Chinese, spaced, and Git-quoted paths are decoded consistently. Node details also show one-hop direct impact grouped by relationship direction and mark connected components that changed in the same task; selecting a connected component locates it in the diagram. **Prepare impact analysis** attaches the selected node and at most four relevant Diffs, then fills the composer with a bilingual request that separates confirmed impact, risks to verify, test recommendations, and unaffected boundaries. It neither submits nor modifies code automatically. Legacy memories without structured connections remain readable. Historical architecture uses only the patches attributed to that revision rather than mixing in today's Workspace changes. The code-change panel reports changed-file mapping coverage. Unmapped files can prepare a reviewable architecture-update draft with the relevant Diff attached; tests and ordinary utilities may remain unmodeled when the Agent explains why. Attached nodes carry relationships, source paths, and exact memory-version state. Composer drafts preserve that evidence across app restarts, and the current and historical versions of one node can remain attached together with explicit version labels. Agents treat this memory as fallible context and verify it against current code; Router classification continues to receive only the original request.\n\nThe desktop process starts a local `parallel-codexd` daemon on a random loopback port. The daemon owns Supervisor and PTY lifecycles while the renderer receives versioned snapshots over an authenticated event stream. If the daemon exits, the app restarts it and reconnects without discarding project state. The renderer uses Electron context isolation and sandboxing, denies permission requests and unexpected navigation, and never receives the daemon bearer token. Native Agent attach resumes or forks the persisted Codex or Claude session in a real terminal surface; wheel scrolling and drag selection remain available together, and selected text copies with the ordinary `Cmd+C` or `Ctrl+C` shortcut without holding Shift.\n\nRun the desktop client from a source checkout:\n\n```bash\nnpm ci\nnpm --prefix apps/desktop ci\nnpm run gui:dev\n```\n\nBuild an unpacked local application:\n\n```bash\nnpm run gui:package\n```\n\nCreate distributable artifacts for the current platform:\n\n```bash\nnpm run gui:dist:mac\nnpm run gui:dist:linux\n```\n\nArtifacts are written to `apps/desktop/release/`. Local macOS builds are unsigned; tagged releases build macOS and Linux downloads in GitHub Actions in addition to publishing the CLI package to npm.\n\n## Install\n\n```bash\nnpm install -g parallel-codex-tui\n```\n\nRun it against the project you want the workers to operate on:\n\n```bash\ncd /path/to/project\nparallel-codex-tui --init\nparallel-codex-tui --doctor\nparallel-codex-tui --doctor --probe-agents\nparallel-codex-tui --doctor --probe-router\nparallel-codex-tui --diagnostics\nparallel-codex-tui --diagnostics ./support-bundle\nparallel-codex-tui --workspace /path/to/project --runs\nparallel-codex-tui --workspace /path/to/project --runs --json\nparallel-codex-tui --workspace /path/to/project --submit \"implement the next feature\"\nparallel-codex-tui --workspace /path/to/project --submit \"implement the next feature\" --wait --json\nprintf 'review the current diff\\n' | parallel-codex-tui --workspace /path/to/project --submit -\nparallel-codex-tui --workspace /path/to/project --cancel-run\nparallel-codex-tui --workspace /path/to/project --wait-run\nparallel-codex-tui --workspace /path/to/project --wait-run --wait-timeout 600 --json\nparallel-codex-tui --workspace /path/to/project\nparallel-codex-tui --theme aurora --workspace /path/to/project\nparallel-codex-tui --theme studio --workspace /path/to/project\n```\n\nStartup resolves the worker project before routing:\n\n- `--workspace <path>` opens that project when it already exists.\n- If `--workspace <path>` does not exist in an interactive terminal, the themed project picker selects that create target by default; press Enter to create it, move to a remembered project, or choose `New project` and enter another path.\n- If `--workspace <path>` points to an existing file, the CLI reports that it is not a directory and will not use that file path as the default folder to create.\n- Without `--workspace`, an interactive terminal shows remembered projects from `.parallel-codex/workspaces.json`; use Up/Down and Enter, a displayed number, or `N` to enter a new folder path. The picker clears before the main chat opens.\n- In non-interactive startup, the CLI reuses the last remembered workspace, falls back to the current directory if none was saved, and creates an explicit `--workspace` path if needed.\n- The selected workspace is prepared before any router or worker process starts.\n- Every interactive open and in-place workspace switch runs a quota-free startup preflight before the TUI accepts work. It checks workspace read/write/search access, every CLI required by the active route and role configuration, referenced model environment variables, each named Worker's Codex, Claude, or declared generic CLI capabilities, configured proxy endpoint reachability, and native workspace trust policy. Healthy checks stay quiet; warnings and failures appear in chat with the `parallel-codex-tui --doctor` action. Live model requests remain opt-in through `--probe-agents` and `--probe-router`.\n- While the TUI is idle, press `Ctrl+P` to open the same project picker without exiting. `Esc` returns with the unsent draft intact; selecting or creating a folder locks duplicate picker input, shows the project being opened, rebuilds the runtime in place, and restores that workspace's latest task, route, workers, and chat. A failed open returns to the original view without replacing its runtime or draft.\n- Workspace chat, task files, and `session-index.sqlite` stay isolated under each project. Router configuration and `router/routes.jsonl` remain shared under the app root, so classifications across projects use one global Router audit.\n\nFrom a source checkout, install dependencies and link the local binary:\n\n```bash\nnpm install\nnpm run build\nnpm link\n```\n\nFor development without linking, run:\n\n```bash\nnpm run dev -- --workspace /path/to/project\n```\n\nCLI options with values can also be passed as `--workspace=/path/to/project`, `--app-root=/path/to/app`, `--task=task-id`, `--theme=paper`, `--submit=request`, `--watch-run=run-id`, `--resume-feature=feature-id`, `--idempotency-key=ci:build-1`, `-w=/path/to/project`, and `-t=task-id`.\n\nCheck available flags or the installed version without starting the TUI:\n\n```bash\nparallel-codex-tui --help\nparallel-codex-tui --doctor\nparallel-codex-tui --doctor --probe-agents\nparallel-codex-tui --doctor --probe-router\nparallel-codex-tui --diagnostics\nparallel-codex-tui --diagnostics ./support-bundle\nparallel-codex-tui --workspace /path/to/project --runs\nparallel-codex-tui --workspace /path/to/project --runs --json\nparallel-codex-tui --workspace /path/to/project --submit \"implement the next feature\"\nparallel-codex-tui --workspace /path/to/project --submit \"implement the next feature\" --idempotency-key ci:feature-1 --wait --json\nparallel-codex-tui --workspace /path/to/project --task task-20260721-example --submit \"continue with the next requirement\" --wait\nparallel-codex-tui --workspace /path/to/project --cancel-run\nparallel-codex-tui --workspace /path/to/project --cancel-run run-20260721T000000Z-deadbeef\nparallel-codex-tui --workspace /path/to/project --wait-run\nparallel-codex-tui --workspace /path/to/project --wait-run run-20260721T000000Z-deadbeef --wait-timeout 600 --json\nparallel-codex-tui --workspace /path/to/project --watch-run\nparallel-codex-tui --workspace /path/to/project --watch-run run-20260721T000000Z-deadbeef --json\nparallel-codex-tui --workspace /path/to/project --task task-20260721-example --pause-feature 0001-ui\nparallel-codex-tui --workspace /path/to/project --task task-20260721-example --cancel-feature 0001-ui\nparallel-codex-tui --workspace /path/to/project --task task-20260721-example --resume-feature 0001-ui --wait\nparallel-codex-tui --workspace /path/to/project --task task-20260721-example --retry-task --wait\nparallel-codex-tui --version\n```\n\n`--doctor` checks configured automated and interactive commands, `{env:NAME}` references, and the CLI help surfaces required for Codex exec/resume sandboxing and Claude print/resume permissions before workers start. Recognized standard CLI help that lacks a required option fails the check; an opaque wrapper keeps the compatible built-in profile's unverified warning, while an explicit `generic` capability contract is validated without guessing vendor-specific help. Doctor performs these checks for every named Worker Provider used by the active route, rejects an explicitly read-only Codex-compatible interactive sandbox when feature attach needs writable roots, and reminds you that native workspace trust remains an interactive decision. It reports proxy host/port reachability as a local-endpoint check, not as proof that the proxy upstream or model API is healthy. Add `--probe-agents` to make one minimal fresh request and, when configured, one same-session resume request through every active process Worker Provider. This explicit probe uses model quota, removes successful probe artifacts, preserves failed artifacts under `.parallel-codex/probes/`, and exits non-zero when a fresh or resumed request cannot be proven. Fresh sessions use the configured `freshSessionArgs`; Claude-compatible profiles default to a generated native `--session-id`, persisted only after the process emits output, so a silent failed launch cannot create a false resumable session. Add `--probe-router` to run one real classification through the configured Codex Router; the command exits non-zero when that live request falls back or fails. Doctor also reports the loaded TUI theme, core palette values, ANSI swatch previews, and color override values, including any temporary `--theme` override.\n\n## Diagnostics\n\nExport a support bundle without starting the TUI:\n\n```bash\nparallel-codex-tui --workspace /path/to/project --diagnostics\nparallel-codex-tui --workspace /path/to/project --diagnostics ./support-bundle\n```\n\nWithout an explicit destination, the bundle is created under `.parallel-codex/diagnostics/<timestamp>/`. An explicit destination must not already exist. While the TUI is open, `Ctrl+X` creates the same bundle without interrupting chat, logs, Task center, or an active Worker; native attach keeps `Ctrl+X` available to the attached Agent.\n\nThe bundle contains `manifest.json`, `report.md`, `report.json`, `doctor.txt`, `tasks.json`, `workers.json`, `router-audit.jsonl`, and bounded Worker log tails. It exports at most the latest 20 tasks, 200 Workers, 100 Router rows, and 200 lines or 64 KiB per Worker log. Workspace, app-root, and home paths are aliased; URL credentials and paths, authorization values, secret assignments, common token formats, and environment-variable values are redacted. Prompts, role instructions, command arguments, source files, and lifetime logs are excluded. Review the bundle before sharing it, because application output can still contain project-specific text that no automatic redactor can fully understand.\n\n## Background Runs\n\nInspect a Workspace without opening the TUI:\n\n```bash\nparallel-codex-tui --workspace /path/to/project --runs\nparallel-codex-tui --workspace /path/to/project --runs --json\n```\n\nRuns are ordered newest first. Text and JSON output include the run and Task ids, operation kind, lifecycle status, control state, timestamps, Supervisor PID, process liveness, controller PID/liveness, and whether the terminal result has been acknowledged by a TUI. Control states distinguish `starting`, `controlled`, `detached`, `settled`, and `stale`. The JSON document is versioned as `1` and intentionally excludes the original request, prompts, Worker logs, command arguments, and environment values.\n\nSubmit a new request without opening the TUI, or continue an existing Task:\n\n```bash\nparallel-codex-tui --workspace /path/to/project --submit \"implement the next feature\"\nprintf 'review the current diff\\n' | parallel-codex-tui --workspace /path/to/project --submit -\nparallel-codex-tui --workspace /path/to/project --submit \"implement the next feature\" --wait --json\nparallel-codex-tui --workspace /path/to/project --submit \"implement the next feature\" --wait-timeout 600 --json\nparallel-codex-tui --workspace /path/to/project --submit \"implement the next feature\" --idempotency-key ci:feature-1 --json\nparallel-codex-tui --workspace /path/to/project --task task-20260721-example --submit \"continue with the next requirement\" --wait\n```\n\n`--submit` prepares and remembers the selected Workspace, creates the default app configuration when it is missing, persists the run, and starts a detached Supervisor before returning. The Router runs inside the Supervisor, so the calling shell does not have to remain open during classification or Worker execution. `--submit -` reads at most 1 MiB of piped UTF-8 input and rejects an interactive terminal or empty request. A submission does not claim `controller.json`, acknowledge the result, or print the request; its text and versioned JSON output contain only bounded run metadata.\n\nUse `--wait` to remain until the submitted run settles. `--wait-timeout <seconds>` implies waiting and exits with code `4` when only the local deadline expires; it never appends a cancellation command, and the detached Supervisor continues running. Combined JSON contains separate versioned `submission` and `wait` objects. Passing an existing `--task` creates a new `handle-task-turn` run against the same durable Task and native Worker history.\n\nFor retried CI jobs, `--idempotency-key <key>` accepts 1-128 letters, numbers, dots, underscores, colons, or hyphens. The raw key is never persisted or emitted: a Workspace-scoped SHA-256 digest selects the run id. Concurrent submissions with the same key and identical request start exactly one Supervisor and reuse its metadata; changing the request for an existing key is rejected. Without an idempotency key, a second submission is rejected while another run remains active in that Workspace.\n\nCancel the latest active run, or address one explicitly:\n\n```bash\nparallel-codex-tui --workspace /path/to/project --cancel-run\nparallel-codex-tui --workspace /path/to/project --cancel-run run-20260721T000000Z-deadbeef\nparallel-codex-tui --workspace /path/to/project --cancel-run run-20260721T000000Z-deadbeef --json\n```\n\nCancellation appends a checked command to the run's existing Supervisor command stream. It does not signal Worker PIDs directly, so the normal orchestrator cancellation, process-tree cleanup, terminal state, chat persistence, and retry evidence remain authoritative. An explicit administrative cancellation can be sent while a TUI is observing or controlling the run. Missing, stale, and already-terminal targets fail without creating a new Workspace or changing historical run evidence.\n\nWait for the latest unfinished run, or address one explicitly:\n\n```bash\nparallel-codex-tui --workspace /path/to/project --wait-run\nparallel-codex-tui --workspace /path/to/project --wait-run run-20260721T000000Z-deadbeef\nparallel-codex-tui --workspace /path/to/project --wait-run run-20260721T000000Z-deadbeef --wait-timeout 600 --json\n```\n\nWhen no unfinished run exists, `--wait-run` returns the newest persisted terminal run immediately. The waiter is read-only: it does not claim `controller.json`, append to `commands.jsonl`, acknowledge the result, read the original request, or inspect Worker output. `--wait-timeout` accepts positive decimal seconds and stops only the waiting CLI; the Supervisor and Workers continue normally. `Ctrl+C` likewise exits the waiter without cancelling the run.\n\nWatch the latest unfinished run, or select one explicitly:\n\n```bash\nparallel-codex-tui --workspace /path/to/project --watch-run\nparallel-codex-tui --workspace /path/to/project --watch-run run-20260721T000000Z-deadbeef\nparallel-codex-tui --workspace /path/to/project --watch-run run-20260721T000000Z-deadbeef --wait-timeout 600 --json\n```\n\n`--watch-run` first replays persisted Supervisor events and complete known Worker logs, then follows only newly appended output until the run settles. Worker logs are streamed in at most 64 KiB chunks without retaining their lifetime contents in watcher memory; a terminal run drains every already-persisted chunk before emitting its finish record. Reads are confined to the selected workspace's `.parallel-codex/sessions/` tree, including canonical-path checks against symlink escape. An invalid persisted log path produces one versioned warning record and its contents are not read. Text mode labels Router, status, Worker, log, and warning records; `--json` emits one compact, versioned JSON Lines record for each snapshot, event, Worker-output chunk, warning, and finish result. The finish record includes the terminal Main/Task summary or failure text. Unlike `--wait-run`, watch output intentionally contains Agent and project content, so review it before forwarding it to another system.\n\nThe watcher remains an observer: it never creates `controller.json`, acknowledges the result, or writes a command. A local `--wait-timeout` exits with code `4` while the Supervisor continues, and starting after completion still replays the persisted evidence before returning. Without an id, watch selects the newest unfinished run and otherwise the newest terminal run.\n\nControl an active Feature, or start a detached recovery run:\n\n```bash\nparallel-codex-tui --workspace /path/to/project --task task-20260721-example --pause-feature 0001-ui\nparallel-codex-tui --workspace /path/to/project --task task-20260721-example --cancel-feature 0001-ui --json\nparallel-codex-tui --workspace /path/to/project --task task-20260721-example --resume-feature 0001-ui --wait\nparallel-codex-tui --workspace /path/to/project --task task-20260721-example --retry-task --idempotency-key ci:retry-1 --wait --json\n```\n\nPause and Feature cancellation append checked commands to the active run that owns the specified Task; they do not signal Worker PIDs directly and their response means “requested,” not “already settled.” Resume requires a paused Feature, while Task retry accepts failed, cancelled, or paused Task state. Both recovery commands create a new detached Supervisor run, preserve prior Worker logs and native session evidence, and support the same `--wait`, `--wait-timeout`, and hashed idempotency behavior as `--submit`. A Workspace still permits only one active Supervisor run at a time.\n\nWait results use exit code `0` for `completed`, `1` for `failed`, `2` for `cancelled`, `3` for `stale`, and `4` for `timeout`. Text and JSON results contain only the same bounded lifecycle metadata as `--runs`; JSON uses schema version `1`. This makes shell automation able to distinguish task outcomes while keeping requests, prompts, logs, command arguments, and environment values out of its output.\n\n## Quick Start\n\nCreate a local config in the app root:\n\n```bash\nparallel-codex-tui --init\nparallel-codex-tui --doctor\n```\n\nFrom a source checkout, you can also copy the public example:\n\n```bash\ncp .parallel-codex/config.example.toml .parallel-codex/config.toml\n```\n\nFor deterministic local testing without real agent CLIs, set all roles to mock workers in `.parallel-codex/config.toml`:\n\n```toml\n[pairing]\njudge = \"mock\"\nactor = \"mock\"\ncritic = \"mock\"\n```\n\nThen start the TUI:\n\n```bash\nparallel-codex-tui --workspace /path/to/project\n```\n\n## Parallel Work\n\nLimit how many feature-level Actor or Critic agents may run at once:\n\n```toml\n[orchestration]\nmaxParallelFeatures = 3 # 1..8\nmaxRevisionRounds = 3   # 1..10\nmaxConflictReplans = 2  # 0..8\n```\n\nJudge may plan up to eight dependency-aware features. The orchestrator keeps dependency order while running at most this many agents concurrently. When one worker fails, already-running peers are allowed to finish cleanly and queued features are not started.\n\nActor and Critic reuse their native sessions across revision rounds. Blocking findings and Actor replies remain in the Feature JSONL mailbox; the task stops with an explicit error when `maxRevisionRounds` is exhausted.\n\nWhen isolated Features conflict during wave staging, `maxConflictReplans` controls how many times the same Judge native session may replace the remaining dependency DAG. Conflict evidence and every Judge response are archived under the turn workspace. Completed earlier waves remain integrated; only the conflicting and later waves are discarded and rerun. Old configs inherit the default value `2`, so no SQLite migration is required, but adding the field makes the policy explicit.\n\nQueued Feature workers remain `queued` until they acquire a concurrency slot. Their persisted state changes to `actor_running` or `critic_running` only after the Worker is registered as cancellable, then to `actor_done` or `critic_done` before that active registration is removed. As a result, only `actor_running` and `critic_running` expose Feature cancellation; queued and role-complete Features cannot present a cancel action that has no live process behind it.\n\n## Theme\n\nSet the TUI palette in `.parallel-codex/config.toml`:\n\n```toml\n[ui]\ntheme = \"codex\" # codex, graphite, paper, aurora, studio\nshowStatusBar = true\nautoOpenFailedWorker = true\n\n[ui.colors]\naccent = \"ansi256(81)\"\nchrome = \"ansi256(233)\"\nrail = \"ansi256(236)\"\nsurface = \"ansi256(234)\"\n```\n\nSet `showStatusBar = false` to hide the bottom runtime status line and give that row back to the main content area.\n\nSet `autoOpenFailedWorker = false` to keep the chat view open when a restored or running task has a failed worker.\n\n`ui.colors` is optional and can override any theme key: `chrome`, `surface`, `rail`, `successSurface`, `dangerSurface`, `text`, `muted`, `accent`, `warning`, `success`, or `danger`. Color values are validated during config load and can use Chalk color names, `#rgb`/`#rrggbb`, `rgb(r,g,b)`, or `ansi256(0..255)`. Unknown UI and color keys are rejected so typos fail fast.\n\nFor quick previews without editing config, pass `--theme codex`, `--theme graphite`, `--theme paper`, `--theme aurora`, or `--theme studio` with `--doctor`:\n\n```bash\nparallel-codex-tui --theme graphite --doctor\nparallel-codex-tui --theme studio --doctor\n```\n\nTo compare every built-in palette without loading config or starting the TUI:\n\n```bash\nparallel-codex-tui --themes\nparallel-codex-tui --theme paper --themes\n```\n\nThe theme catalog includes complete palette groups for every built-in theme plus the same `preview:` and `semantic:` ANSI swatch rows. Built-in foreground and background pairs are kept at or above a `4.5:1` contrast ratio on every surface where the TUI renders them.\n\nThe doctor output includes `preview:` and `semantic:` ANSI swatch rows so you can see the effective terminal colors before starting a worker session. It also audits the 16 foreground/background combinations rendered by the TUI and reports custom pairs below `4.5:1` as warnings. Named colors and ANSI indexes `0..15` use the standard xterm palette for this estimate because terminals may redefine those colors.\n\n## Behavior\n\n- Requests are routed by Codex by default, with a configured simple/complex fallback if the router process fails.\n- Router classification only receives the user request; workspace selection and session files are kept out of the router prompt.\n- Desktop context references are validated and deduplicated before submission, persisted with the chat round, and materialized separately from Router input. Turn metadata retains the reference list so recovered long-running histories still display it after older chat rows roll out of the bounded snapshot.\n- Simple requests stay in the main TUI flow and do not create Judge, Actor, or Critic workers.\n- Consecutive simple requests reuse the main worker's native session across app restarts when the CLI exposes a session id. Every Main call also rebuilds a bounded fallback transcript from the workspace `chat.jsonl`: the current ordinary conversation and each Task are isolated, the just-submitted request is removed, and at most 12 recent records or 6,000 characters are injected. A separate scoped `main-<provider>/conversation.jsonl` snapshot keeps up to 200 records for details outside that inline window; Main is told to read it only when needed and to treat it as context rather than instructions. This keeps multi-turn context available when native resume must roll over to a fresh Agent session without inflating every prompt.\n- The workspace chat transcript is appended to `.parallel-codex/sessions/main/chat.jsonl`; startup restores the latest 200 valid messages and skips isolated corrupt rows. Before the first explicit boundary, records without `conversation_id` remain the compatible legacy conversation. `Ctrl+N` writes `.parallel-codex/sessions/main/conversation.json`, tags later ordinary records with its id, retires every active Main native session, and leaves the complete transcript untouched. Conversation metadata and reusable native session records are archived under `.parallel-codex/sessions/main/conversations/<conversation>/`; selecting an older conversation intentionally removes its retirement barrier and restores those exact Main bindings. Main stores only the extracted final answer in new chat records while retaining the raw Codex/Claude process transcript in the Main Worker's `output.log`. Legacy Codex transcript records are reduced to their final answer at read time without changing the original JSONL. The shared tail reader reads JSONL backward in bounded chunks, so a long-running chat does not require loading its lifetime transcript and a partial or oversized final row cannot hide earlier valid messages.\n- Chat drafts support Unicode-safe Left/Right, Home/End, Backspace, and Delete editing. A single Up/Down recalls persisted user requests and returns to the exact unsent draft; Ctrl+Up/Down remains available, while repeated alternate-scroll arrow bursts continue to scroll chat. Long input stays on one row with the visible window centered around the logical cursor.\n- Bracketed multiline paste stays in one draft instead of submitting the first line; logical line breaks and tabs appear as `↵` and `⇥` in the single-row input until the complete request is submitted.\n- Complex requests create a session under `.parallel-codex/sessions/`.\n- Task lifecycle is a checked state machine. A task enters `routed` only after the turn and route files are durable, and enters `ready_for_pair` only after Judge artifacts validate; invalid phase skips are rejected before metadata or event projections change. Persisted follow-up turns that still carry an older `done` state are recovered as cancelled and retryable on startup instead of being hidden as completed.\n- Turn persistence writes every Turn into a hidden staging directory and atomically renames it to its numbered directory only after `user.md`, `route.json`, and `turn.json` are valid. During startup, complete pending Turns are published and request-only pending Turns are rebuilt from durable latest-route evidence; empty fragments move under `.abandoned` without consuming a Turn number. SQLite startup rebuild indexes only complete numbered Turn directories whose task, turn, request, and route identities agree. The startup notice distinguishes a restored follow-up Turn from missing completion evidence and says `request and route kept` before offering `Ctrl+R resume`.\n- Task creation writes its complete first Turn into a hidden staging directory. Before any Task files appear, an exclusive process-identity claim reserves the Task id, so same-second collisions cannot overwrite another task. After its metadata, route, request, Turn, and creation event are valid, one rename atomically publishes the whole Task. The orchestrator hands the creation claim directly to the task run lease before reading task state or starting Judge. On startup, stale complete Task staging is published and made retryable, incomplete staging is archived under `.abandoned`, and staging owned by another live TUI remains untouched. The startup notice reports archived or externally active creations without duplicating ordinary interrupted-task recovery.\n- Cancellation is rechecked after routing and after acquiring a task lease. An already-cancelled request cannot create a Task, initialize Main, append a Turn, or record a retry. Cancellation that arrives while a lease is being acquired releases that lease before returning, while a completed Router classification may remain in the shared audit without creating workspace-side execution state.\n- Live workspace integration is the cancellation commit point. Cancellation immediately before commit leaves the live project untouched. Once a verified Wave commit succeeds, its integration evidence is durable; the final Wave's summary and Feature decision are completed, and task evidence finishes as `done` even if cancellation arrives after that commit. In a multi-Wave task, cancellation is observed again before the next Wave, so earlier committed checkpoints remain retry-safe without starting more work.\n- Live commit persistence writes `integration.pending.json` as a durable two-phase commit intent before changing project files. On retry, each live path must still match either the Wave baseline or integration snapshot; a partial apply resumes without rerunning completed Workers, and a fully applied Wave with a lost final checkpoint is promoted using its original changed-path set. Any third-state content or extra live path blocks recovery and preserves the intent for inspection instead of rebuilding from an ambiguous workspace.\n- New intents use `atomic-claim-v1`. Before a replacement or deletion, the existing target is atomically moved to a commit-scoped `.backup` and checked again against the Wave baseline. File and symlink publication refuses to replace a path that reappears, so an edit racing after preflight remains live while the pending intent, `.tmp`, and `.backup` preserve recovery evidence. Recovery finishes only owned artifacts that still match the integration and baseline snapshots. Legacy temp-only intents remain recoverable, but their ambiguous missing-target state is never assigned to the new protocol.\n- Each pending `commit_id` scopes deterministic replacement temp files to one live commit. Recovery completes an owned replacement only when its content and mode exactly match the integration snapshot and its target is still baseline, missing, or already integrated. A foreign or mismatched temp file blocks recovery and remains on disk for inspection. After the final integrated checkpoint is durable, intent cleanup is best-effort and cannot downgrade the committed task. Startup removes a leftover intent only when the final integrated checkpoint matches it; mismatched or unreadable evidence remains on disk for retry and inspection.\n- Complex requests run Judge -> Actor -> Critic. Judge also writes a bounded `features.json` dependency plan.\n- Judge runs from its task-owned worker directory, reads the selected project without treating it as a write target, and snapshots `requirements.md`, `plan.md`, `acceptance.md`, role briefs, and `features.json` into each numbered turn.\n- Before Actor starts, the orchestrator parses the Judge Markdown into stable requirement, plan, and acceptance entries and writes `judge-validation.json`. Missing lists, placeholder-only content, duplicate ids, and unknown requirement references fail before implementation; valid legacy list snapshots are normalized during retry without rerunning Judge.\n- Independent features run as parallel Actor batches followed by parallel Critic batches. Dependent features start only after their prerequisite wave is approved and integrated.\n- Parallel Actor, Critic, and revision batches honor `[orchestration].maxParallelFeatures` (default `3`).\n- Each planned feature gets an isolated Actor implementation workspace, a disposable Critic review clone, worker directories, logs, status, native session ids, and a mailbox under `features/<turn>-<feature>`; the shared dialogue remains in `dialogue/actor-critic.jsonl`. Concurrent text and JSONL appends inside one TUI are serialized per resolved file path, preserving call order without blocking independent feature files; one failed append does not poison later writes.\n- Feature revision mailboxes are a checked protocol rather than prompt-only convention. A `REVISION_REQUIRED` Critic must write one `{\"id\":\"C-001\",\"severity\":\"blocker\",\"summary\":\"...\"}` row per blocker to `critic-findings.jsonl`; the revision Actor must write matching `{\"finding_id\":\"C-001\",\"status\":\"fixed\",\"notes\":\"...\"}` rows to `actor-replies.jsonl`. Missing, malformed, unacknowledged, or contradictory findings stop the task before live integration. The Supervisor snapshots pending, inconsistent, and approved fixed/open state in `finding-resolution.json`; the collaboration timeline retains the original findings and replies as history and uses resolution evidence instead of counting every reply as a fix.\n- Parallel workspace isolation works for both Git and non-Git projects. A wave records `baseline`, per-feature `features/` workspaces, refreshable `reviews/` copies, `staging`, and conflict evidence under `sessions/<task>/workspaces/turn-<turn>/wave-<wave>/` while excluding `.git`, the configured runtime data directory, and known host metadata (`.DS_Store`, AppleDouble, Spotlight/Trash indexes, `Thumbs.db`, and `desktop.ini`). Source files outside that narrow list still trigger the live-mutation guard.\n- Feature Critic implementation writes are discarded with the review clone. After an Actor revision, the same Critic native session rechecks a freshly cloned review path; only Actor workspace changes can enter staging.\n- Approved feature changes are three-way merged into a task-owned integration workspace first; independent edits to the same text file are combined automatically. The live workspace remains unchanged during this stage.\n- Every staged wave gets a combined Wave Critic run in a disposable verification copy. It checks the full Judge acceptance criteria, cross-feature behavior, tests, and builds. A missing `APPROVED`/`REVISION_REQUIRED` decision fails safely instead of being treated as approval.\n- When combined verification requests changes, a session-backed Wave Actor fixes the integration workspace and the same Wave Critic native session reviews it again. Only an explicit final `APPROVED` allows the wave to reach the live workspace.\n- Wave Actor/Critic prompts, logs, immutable `verification-review-01.md`/`02.md` rounds, native session ids, minimized additional-directory permissions, and `verification.json` audit evidence are stored with the task and remain available through worker logs and native attach.\n- Overlapping edits never partially change the live workspace. The orchestrator archives the conflicting paths and merge evidence, returns to `judging`, and asks the same Judge native session to serialize the affected Feature DAG. The replanned run keeps integrated earlier waves and every historical Worker log. If the bounded replan budget is exhausted or the replacement plan is invalid, the task fails with the evidence path and remains retryable through `Ctrl+R`.\n- If the live workspace changes after a wave baseline is captured, staging or commit stops with the changed paths instead of silently absorbing an escaped worker edit or overwriting concurrent user work.\n- Feature workspaces persist with the task so native attach can reopen the exact worker cwd. Delete an old task session when its audit trail and attachable workspaces are no longer needed.\n- Complex follow-ups stay in the active task, append a numbered turn, restore the same Judge session to re-clarify the new direction, and save a turn-local Judge snapshot. A new multi-feature plan can start parallel workers immediately.\n- Every numbered turn keeps its own immutable Judge, Actor, and Critic worker directories. Later turns use suffixed ids such as `judge-codex-0002`; the log viewer retains earlier workers, cycles them in turn order, and restores the same order after restart. The new worker record may reuse the prior native session id without overwriting the prior turn's prompt, status, log, or native-session metadata.\n- `Ctrl+N` leaves the active complex Task and all Worker logs intact on disk, clears only the live selection and retry state, starts a new Main `conversation_id`, and retires the old Main native session. It works from ordinary chat too, so the next request cannot inherit an unrelated native or file-backed conversation; the next complex request creates an independent Task from turn `0001`.\n- Single-feature follow-ups reuse the same Actor/Critic native sessions when available while moving them to the new turn's isolated workspace. File-backed prompt memory keeps the root Turn and the latest 19 previous Turn summaries within a 12,000-character ceiling; longer histories retain an inline count and path to every immutable Turn summary on disk. A failed follow-up retry reuses a complete saved Judge plan, or restores Judge first when the earlier Judge run never produced one.\n- Automated Judge, Actor, Critic, Wave Actor, and Wave Critic runs enforce process-level isolation: Codex is clamped to root-level `-a never` plus `workspace-write`, and Claude is clamped to non-interactive `auto`, even when private command arguments request manual approval or contain a broader bypass mode. Native attach remains an explicit interactive path.\n- Routing remains in the foreground so fallback choices stay interactive. After a route resolves, Main or parallel execution moves into a detached per-run Supervisor. Pressing `Esc` as the controller cancels the active run and records an interrupted complex task as `cancelled`; pressing `Ctrl+C` detaches and exits the outer TUI while execution continues. Reopening the workspace follows persisted events and restores the final result. A second TUI observes the run and automatically acquires the control lease after the previous controller detaches or exits.\n- Failed and cancelled tasks expose `Ctrl+R` retry. Retry keeps the same task and turn, reuses recorded native worker sessions, preserves prior output behind a retry separator, does not route the request again, and reuses the persisted feature dependency plan. A complete Judge snapshot and fully integrated waves are skipped; an unchanged in-progress wave reuses successful Actor and Critic checkpoints and runs only unfinished workers. If the live workspace no longer matches the saved baseline, the stale wave checkpoint is rejected and rebuilt from the current project before workers continue.\n- The shared Main chat holds its own `sessions/main/run-owner.json` lease across prompt initialization, native-session reuse, and Worker completion. A second TUI is rejected before it can clear or overwrite the active Main prompt, log, status, or native session, and startup native-session reconciliation skips a Main session owned by another live TUI. After a hard exit, startup atomically claims the stale Main lease, terminates every verifiable orphan process group, marks active Main Workers `cancelled`, preserves native session ids, and records recovery before exposing the runtime. An unverifiable or still-running Main process blocks startup without changing its status or checkpoints.\n- Task and Main runs use the same lease finalizer, so a successful run cannot report success until its lease is released. If both the run and lease release fail, the top-level error preserves both causes in an `AggregateError` instead of replacing the original Worker failure.\n- Every complex run holds a task-owned `run-owner.json` lease, so another live TUI cannot concurrently retry or append a complex turn to the same task. Stale or corrupt lease replacement is serialized through file-backed claim intents, so exactly one recovery owner can proceed and a competing cleaner cannot delete its replacement lease. A retry revalidates the task state and reloads its latest turn, request, and route only after acquiring that lease, so an older caller cannot rerun a task another TUI already completed. Automated Worker processes run in owned process groups and persist `process.json` with their PID and OS process-start fingerprint while active; the role prompt is sent only after that ownership evidence is durable. If ownership recording fails, the process group is terminated before it receives the prompt and the Worker records `process-ownership-error`. Worker cleanup is shown as `running/process-stopping` until the full command tree is confirmed gone. Timeout and cancellation terminate the full group; normal parent exit also terminates any remaining descendants before terminal status and ownership removal. A detached leader PID reused after exit is never treated as its former process group, while a leaderless group that still owns the reserved ID is still terminated. If cleanup cannot be verified, the Worker records `process-cleanup-error` and keeps `process.json` so startup recovery remains fail-closed; only verified cleanup removes a valid record. Final log, status, native-session callback, or ownership-removal failures settle exactly once by rejecting the adapter call, retaining ownership evidence, and attempting a best-effort `process-finalization-error` status instead of leaving orchestration pending. Task failure convergence attempts every Feature status and the task status independently, so one broken Feature status cannot block the task from becoming retryabl","readmeFilename":"README.md"}