{"_id":"@c0sc0s/orbit","_rev":"3-afcbf74aab7f71cb3df43a2e768a4caf","name":"@c0sc0s/orbit","dist-tags":{"latest":"0.5.2"},"versions":{"0.5.0":{"name":"@c0sc0s/orbit","version":"0.5.0","license":"UNLICENSED","_id":"@c0sc0s/orbit@0.5.0","maintainers":[{"name":"c0sc0s","email":"yuwenjieshuai@gmail.com"}],"bin":{"orbit":"dist/cli.js","codex-plugin-loader":"dist/cli.js"},"dist":{"shasum":"0ad217599d3aa2e739928a5a0f0966a9a27835a6","tarball":"https://registry.npmjs.org/@c0sc0s/orbit/-/orbit-0.5.0.tgz","fileCount":131,"integrity":"sha512-R1ThYUSc9tXdnXjc/P2G20wUK+HXELZFdzVcDocgChre20Y49hEswVwXenXEzS1jfURIv3SJ2BmPnac+7PlLcg==","signatures":[{"sig":"MEYCIQDJQtqPXdWbljJy8fYdV3pa1WVnN1EwdwcpcOWLHKUSTAIhAPoBBlPvJ/qPA3C495/2biqWtHWZ572j7jBr03hAClXj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4183840},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":"./dist/cli.js","./sdk":{"types":"./dist/sdk/contracts.d.ts","import":"./dist/sdk/contracts.js"},"./daemon":{"types":"./dist/host/daemon.d.ts","import":"./dist/host/daemon.js"},"./manifest":{"types":"./dist/config/manifest.d.ts","import":"./dist/config/manifest.js"},"./installation":{"types":"./dist/installation/manager.d.ts","import":"./dist/installation/manager.js"},"./package.json":"./package.json"},"gitHead":"041b1c884783f7762d0fb3390dd728eda0455caa","scripts":{"test":"node --test test/**/*.test.mjs","build":"node ../../scripts/clean-build.mjs && tsc -p tsconfig.json","prepack":"npm run build","typecheck":"tsc --noEmit -p tsconfig.json && tsc -p tsconfig.renderer.json && tsc -p tsconfig.test.json","build:icon":"node scripts/build-icon.mjs","prepublishOnly":"npm run build && npm run typecheck && npm test && node ../../scripts/test-orbit-package.mjs"},"_npmUser":{"name":"c0sc0s","email":"yuwenjieshuai@gmail.com"},"_npmVersion":"10.9.7","description":"Local renderer plugin lifecycle and explicit CDP entry for Codex desktop.","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"7.0.2","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/orbit_0.5.0_1789021712019_0.6572313832664678","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@c0sc0s/orbit","version":"0.5.1","license":"UNLICENSED","_id":"@c0sc0s/orbit@0.5.1","maintainers":[{"name":"c0sc0s","email":"yuwenjieshuai@gmail.com"}],"bin":{"orbit":"dist/cli.js","codex-plugin-loader":"dist/cli.js"},"dist":{"shasum":"0ef6d1c85ef3bc6a0e6344f686a4fa99b7494f00","tarball":"https://registry.npmjs.org/@c0sc0s/orbit/-/orbit-0.5.1.tgz","fileCount":143,"integrity":"sha512-8M6XyLZok2+KcpnBo3CDOF+gTpa/iyvEuS3IqfKO9DiB0WkgbUMOb2egxUFVYMjU0QSj+i0suqTOxKmExQmlMw==","signatures":[{"sig":"MEUCIHGd0F87YsAJKD+VDLE9wAeCerAFR6u6p+6vPULj7FdgAiEAi4/b2vOGkjDwRkAubtXOqikRH+QXVRjiQx8GVAtUmeU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4223764},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":"./dist/cli.js","./sdk":{"types":"./dist/sdk/contracts.d.ts","import":"./dist/sdk/contracts.js"},"./daemon":{"types":"./dist/host/daemon.d.ts","import":"./dist/host/daemon.js"},"./manifest":{"types":"./dist/config/manifest.d.ts","import":"./dist/config/manifest.js"},"./installation":{"types":"./dist/installation/manager.d.ts","import":"./dist/installation/manager.js"},"./package.json":"./package.json"},"gitHead":"1ed302b28dea47e02fca06107ec2fe54ee057c28","scripts":{"test":"node --test test/**/*.test.mjs","build":"node ../../scripts/clean-build.mjs && tsc -p tsconfig.json","prepack":"npm run build","typecheck":"tsc --noEmit -p tsconfig.json && tsc -p tsconfig.renderer.json && tsc -p tsconfig.test.json","build:icon":"node scripts/build-icon.mjs","prepublishOnly":"npm run build && npm run typecheck && npm test && node ../../scripts/test-orbit-package.mjs"},"_npmUser":{"name":"c0sc0s","email":"yuwenjieshuai@gmail.com"},"_npmVersion":"10.9.7","description":"Local renderer plugin lifecycle and explicit CDP entry for Codex desktop.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"ora":"9.4.1","figlet":"1.11.4","picocolors":"1.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"7.0.2","@types/node":"22.19.19"},"_npmOperationalInternal":{"tmp":"tmp/orbit_0.5.1_1789032064282_0.8738346654361961","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@c0sc0s/orbit","version":"0.5.2","description":"Local renderer plugin lifecycle and explicit CDP entry for Codex desktop.","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":"./dist/cli.js","./installation":{"types":"./dist/installation/manager.d.ts","import":"./dist/installation/manager.js"},"./sdk":{"types":"./dist/sdk/contracts.d.ts","import":"./dist/sdk/contracts.js"},"./manifest":{"types":"./dist/config/manifest.d.ts","import":"./dist/config/manifest.js"},"./daemon":{"types":"./dist/host/daemon.d.ts","import":"./dist/host/daemon.js"},"./package.json":"./package.json"},"bin":{"orbit":"dist/cli.js","codex-plugin-loader":"dist/cli.js"},"engines":{"node":">=22"},"license":"UNLICENSED","types":"./dist/index.d.ts","scripts":{"build:icon":"node scripts/build-icon.mjs","build":"node ../../scripts/clean-build.mjs && tsc -p tsconfig.json","prepack":"npm run build","prepublishOnly":"npm run build && npm run typecheck && npm test && node ../../scripts/test-orbit-package.mjs","test":"node --test test/**/*.test.mjs","typecheck":"tsc --noEmit -p tsconfig.json && tsc -p tsconfig.renderer.json && tsc -p tsconfig.test.json"},"dependencies":{"figlet":"1.11.4","ora":"9.4.1","picocolors":"1.1.1"},"devDependencies":{"typescript":"7.0.2","@types/node":"22.19.19"},"publishConfig":{"access":"public"},"_id":"@c0sc0s/orbit@0.5.2","gitHead":"0f92aedee85d199f1ac7b08becb7ce401197eab6","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-7slgphXpR15NkIx7/lfr++ewCCunUiCnKrimtU2hBMRKzrFn8xaj7555Pa0Xu65AB7VaDt5IFWJybZMev8RBFw==","shasum":"78cd7ceba6b5ac031a065496c75bb4d6ef6a20df","tarball":"https://registry.npmjs.org/@c0sc0s/orbit/-/orbit-0.5.2.tgz","fileCount":143,"unpackedSize":4229402,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD/me2FT5GY33k2qAWl/UrPX+WdH0oMA6HaaO8Oz93oTgIgWulCqg3Jy9aCsNCsnXZ5oGWVEsIU6qwdMRkrQx49dVE="}]},"_npmUser":{"name":"c0sc0s","email":"yuwenjieshuai@gmail.com"},"directories":{},"maintainers":[{"name":"c0sc0s","email":"yuwenjieshuai@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/orbit_0.5.2_1789048567863_0.45915699729737947"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-10T06:28:31.817Z","modified":"2026-09-10T13:56:08.432Z","0.5.0":"2026-09-10T06:28:32.288Z","0.5.1":"2026-09-10T09:21:04.528Z","0.5.2":"2026-09-10T13:56:08.151Z"},"license":"UNLICENSED","description":"Local renderer plugin lifecycle and explicit CDP entry for Codex desktop.","maintainers":[{"name":"c0sc0s","email":"yuwenjieshuai@gmail.com"}],"readme":"# Orbit\n\nAn independently installed extension platform for Codex desktop on macOS, built on Node.js 22+. Orbit owns the launcher, versioned runtime, plugin installation, compatibility checks, configuration locking and activation recovery. It has no Tags or SQLite dependency.\n\nInstall from npm or a local tarball following [installation](../../docs/distribution.md). From a built checkout:\n\n```sh\norbit install\norbit plugin add ./packages/orbit-tags\norbit start\norbit plugin list\norbit plugin disable orbit-tags\norbit plugin enable orbit-tags\norbit plugin uninstall orbit-tags\n```\n\nUse `~/Applications/Orbit.app` for subsequent launches. A zero-plugin platform is valid. `orbit plugin add /path/to/package` snapshots a built local package. The package must provide an explicit `files` allowlist and `orbit-plugin.json` with `schemaVersion`, `id`, `version`, `runtimeVersion`, `orbit: {min, maxExclusive}`, `renderer` and optional `service`/`codex` declarations. Runtime dependencies are copied into its private snapshot. Registry installs disable npm lifecycle scripts.\n\nBusiness modules import types from `@c0sc0s/orbit/sdk`; installation clients use `@c0sc0s/orbit/installation`. Platform data defaults to `~/Library/Application Support/Orbit`, configurable with `ORBIT_HOME`. Disable preserves files/data; uninstall removes only that plugin and preserves data by default. `--purge` never recursively removes external data. Registry `orbit update`, `orbit plugin update orbit-tags` and `orbit plugin install @c0sc0s/orbit-tags` require published compatible packages; `orbit rollback` selects a retained compatible runtime.\n\n## Platform uninstall\n\nUse `orbit uninstall --dry-run` to preview removal and `orbit uninstall --yes` to remove Orbit, its launcher and registered plugins while keeping data. Add `--purge` to delete Orbit-owned data. External data is reported for explicit cleanup. Remove the separate global CLI with `npm uninstall -g @c0sc0s/orbit`. See [uninstall boundaries](../../docs/distribution.md#uninstall-everything).\n\n## Advanced runtime entry\n\nOrbit also owns loopback CDP, isolated renderer globals, per-plugin service processes, RPC/events and cleanup. These explicit-config commands are available for unmanaged development manifests:\n\n```bash\norbit start --config ./loader.json\norbit status --config ./loader.json\norbit remove --config ./loader.json --plugin hello\norbit stop --config ./loader.json\n```\n\nA manifest has `apiVersion: 1` and `plugins: [{id, version, entry, service?, config?, enabled?}]`. `entry` is a local IIFE defining `CodexPlugin.activate(context)`; optional `service` is a Node ESM file exporting `activate(context)`. Paths must stay inside the manifest directory. `examples/loader.json` provides a renderer-only module; `examples/service-loader.json` adds RPC.\n\nBoth contexts provide `id`, `config`, `signal` and `onDispose`. Renderer code uses `rpc.call(method, payload, options?)` and `events.subscribe(topic, handler)`. Services use `rpc.handle(method, handler)`, `events.publish(topic, payload, clientId?)`, `clients.onConnect/onDisconnect`, and a persistent `stateDirectory`. The implementation is strict TypeScript. Generated contracts ship in `dist/index.d.ts` alongside compiled ESM JavaScript; consumers do not need a TypeScript runtime. Low-level exports and `createLauncher` support custom infrastructure entry points.\n\nUse `--attach` to require an already debug-enabled app. `watch` runs in the foreground; `apply` injects renderer-only bundles once. Increment the module version after code changes. Cleanup runs in reverse registration order. RPC has timeouts, cancellation, payload and concurrency limits. Service crashes do not stop peer services. Fix and disable/re-enable a failed module; no automatic crash restart is performed.\n\nPlugins are trusted local code. Services run with Node privileges; renderers share the DOM/thread despite isolated globals. Renderer blocking code can block Codex. Do not put conversation bodies or secrets in diagnostics. Bundle all renderer assets locally. The official Codex bundle is never modified.\n","readmeFilename":"README.md"}