{"_id":"@arinova-ai/arinova-bridge","_rev":"6-a23f1962f06a7ffed60cc7529c96b299","name":"@arinova-ai/arinova-bridge","dist-tags":{"latest":"0.0.5"},"versions":{"0.0.1":{"name":"@arinova-ai/arinova-bridge","version":"0.0.1","_id":"@arinova-ai/arinova-bridge@0.0.1","maintainers":[{"name":"ripple0129","email":"ripple0129@gmail.com"}],"bin":{"arinova-bridge":"dist/index.js","arinova-bridge-setup":"dist/setup.js"},"dist":{"shasum":"5686f12c7510b088de1ecf87d7fb4c8284cad3fe","tarball":"https://registry.npmjs.org/@arinova-ai/arinova-bridge/-/arinova-bridge-0.0.1.tgz","fileCount":101,"integrity":"sha512-wuT4Au48ny0WPjFpt75UStCAFw5MfrgpI0FrtkLV6ygb6VxMp0iKWmRppX0RlSTOYgKm/4e0Tug7c5QKgfG+GQ==","signatures":[{"sig":"MEYCIQDE5BM9cKKdAxJ29XpYTNAVVgk6xkFw7XTuMEBYDtr+xgIhALjWNvxii0m/MJFp2b0nOp+9DFY+qlqSMfzP3YWZUg0W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":448379},"main":"dist/index.js","type":"module","_from":"file:arinova-ai-arinova-bridge-0.0.1.tgz","types":"./dist/index.d.ts","scripts":{"dev":"tsx src/index.ts","test":"vitest run","build":"tsc","setup":"tsx src/setup.ts","start":"node dist/index.js","test:watch":"vitest"},"_npmUser":{"name":"ripple0129","email":"ripple0129@gmail.com"},"_resolved":"/private/var/folders/k3/kvmngy1j3nj1jd0lx18td6yw0000gn/T/411e920fa3abe35f64844155d8fe9077/arinova-ai-arinova-bridge-0.0.1.tgz","_integrity":"sha512-wuT4Au48ny0WPjFpt75UStCAFw5MfrgpI0FrtkLV6ygb6VxMp0iKWmRppX0RlSTOYgKm/4e0Tug7c5QKgfG+GQ==","_npmVersion":"10.9.7","description":"Multi-provider bridge between Arinova Chat and AI coding assistants (Claude, Codex)","directories":{},"_nodeVersion":"22.22.2","dependencies":{"node-pty":"^1.2.0-beta.12","better-sqlite3":"^11.0.0","@inquirer/prompts":"^8.2.1","@arinova-ai/agent-sdk":"^0.0.15","@anthropic-ai/claude-code":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^4.0.18","typescript":"^5.0.0","@types/node":"^25.3.0","@types/better-sqlite3":"^7.6.0"},"_npmOperationalInternal":{"tmp":"tmp/arinova-bridge_0.0.1_1774693567495_0.7289922157867588","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@arinova-ai/arinova-bridge","version":"0.0.3","_id":"@arinova-ai/arinova-bridge@0.0.3","maintainers":[{"name":"ripple0129","email":"ripple0129@gmail.com"}],"bin":{"arinova-bridge":"dist/cli.js"},"dist":{"shasum":"8d3c37194b8ce9def5cd44955f61d34f7c7e82f4","tarball":"https://registry.npmjs.org/@arinova-ai/arinova-bridge/-/arinova-bridge-0.0.3.tgz","fileCount":93,"integrity":"sha512-8dAytUemV4R4laC3a1Rl7RjBv5bRA3Dzi9MGBibENYCrPES2gNVCCzyk2yeIsPctxk5r93QlXH/e5ktjJLuUvw==","signatures":[{"sig":"MEUCIGfcabPLXZfXcw0DesOZqrdBh/IOHQ5nE02maRkxqNHiAiEAx2O/dc9+eTW3uizfJzCknnQFFg0SMp3EexTO6NlijyM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":387146},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"cda098cbf652649fa7954eee1413910b95403647","scripts":{"dev":"tsx src/index.ts","test":"vitest run","build":"tsc","setup":"tsx src/setup.ts","start":"node dist/index.js","test:watch":"vitest"},"_npmUser":{"name":"ripple0129","email":"ripple0129@gmail.com"},"_npmVersion":"10.9.7","description":"Multi-provider bridge between Arinova Chat and AI coding assistants (Claude, Codex)","directories":{},"_nodeVersion":"22.22.2","dependencies":{"node-pty":"^1.2.0-beta.12","better-sqlite3":"^11.0.0","@arinova-ai/cli":"0.0.24-staging.0","@inquirer/prompts":"^8.2.1","@arinova-ai/agent-sdk":"^0.0.16-staging.0","@arinova-ai/theme-sdk":"0.0.4-staging.0","@anthropic-ai/claude-code":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^4.0.18","typescript":"^5.0.0","@types/node":"^25.3.0","@types/better-sqlite3":"^7.6.0"},"_npmOperationalInternal":{"tmp":"tmp/arinova-bridge_0.0.3_1775337545073_0.634808184456642","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@arinova-ai/arinova-bridge","version":"0.0.4","_id":"@arinova-ai/arinova-bridge@0.0.4","maintainers":[{"name":"ripple0129","email":"ripple0129@gmail.com"}],"bin":{"arinova-bridge":"bin/arinova-bridge.js"},"dist":{"shasum":"c855a2868ee275eef5a7c0aeb1c686dff82b6278","tarball":"https://registry.npmjs.org/@arinova-ai/arinova-bridge/-/arinova-bridge-0.0.4.tgz","fileCount":214,"integrity":"sha512-f3+DzHXe75CmcqL4eBS/DuyjSBk36XvW6sHFMY6Q2hE2IscooAHfkzRHgi0lO8jwC/yy7N9cQuv9DlD3RX14Hw==","signatures":[{"sig":"MEUCIB45LTn+nzgeojM9n9/0ghylDudyn/5Rt7nzsmd8dviwAiEAwK9BNCJCmeePa8VeNXBQgIG2um0JfBSgtaxGiJYYTTw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1016898},"main":"dist/index.js","pnpm":{"overrides":{"qs":"6.15.2","hono":"4.12.21","vite":"7.3.2","esbuild":"0.28.1","postcss":"8.5.14","fast-uri":"3.1.2","ip-address":"10.2.0","@anthropic-ai/sdk":"0.96.0","@hono/node-server":"1.19.13"}},"type":"module","types":"./dist/index.d.ts","gitHead":"4d318017b2cc560ab0e20a52b092ccf0e67d6aa8","scripts":{"dev":"tsx src/index.ts","lint":"eslint .","test":"vitest run","build":"tsc","setup":"tsx src/setup.ts","start":"node dist/index.js","format":"prettier --write .","coverage":"vitest run --coverage","test:file":"vitest run","test:watch":"vitest","format:check":"prettier --check ."},"_npmUser":{"name":"ripple0129","email":"ripple0129@gmail.com"},"_npmVersion":"11.8.0","description":"Multi-provider bridge between Arinova Chat and AI coding assistants (Claude, Codex)","directories":{},"_nodeVersion":"25.6.0","dependencies":{"node-pty":"^1.2.0-beta.12","js-tiktoken":"^1.0.21","better-sqlite3":"^11.0.0","@arinova-ai/cli":"0.0.24-staging.0","@xterm/headless":"^5.5.0","@inquirer/prompts":"^8.2.1","@arinova-ai/agent-sdk":"0.0.19-staging.7","@arinova-ai/theme-sdk":"0.0.4-staging.0","@arinova-ai/mcp-server":"0.0.19-staging.4","@xterm/addon-unicode11":"^0.9.0","@anthropic-ai/claude-agent-sdk":"^0.2.92"},"arinovaBridge":{"pinnedClaudeVersion":"2.1.143"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.2","devDependencies":{"tsx":"^4.0.0","eslint":"^10.4.0","vitest":"^4.1.2","prettier":"^3.8.3","@eslint/js":"^10.0.1","typescript":"^5.0.0","@types/node":"^25.3.0","typescript-eslint":"^8.60.0","@vitest/coverage-v8":"4.1.2","@types/better-sqlite3":"^7.6.0"},"_npmOperationalInternal":{"tmp":"tmp/arinova-bridge_0.0.4_1781485598357_0.9360739567652505","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@arinova-ai/arinova-bridge","version":"0.0.5","description":"Multi-provider bridge between Arinova Chat and AI coding assistants (Claude, Codex)","type":"module","main":"dist/index.js","bin":{"arinova-bridge":"bin/arinova-bridge.js"},"scripts":{"build":"tsc","start":"node dist/index.js","dev":"tsx src/index.ts","setup":"tsx src/setup.ts","prepublishOnly":"tsc","test":"vitest run","test:watch":"vitest"},"dependencies":{"@anthropic-ai/claude-agent-sdk":"^0.2.92","@arinova-ai/agent-sdk":"0.0.19-staging.8","@arinova-ai/cli":"0.0.27","@arinova-ai/mcp-server":"staging","@arinova-ai/theme-sdk":"0.0.5-staging.0","@inquirer/prompts":"^8.2.1","better-sqlite3":"^11.0.0","js-tiktoken":"^1.0.21","node-pty":"^1.2.0-beta.12"},"pnpm":{"overrides":{"@anthropic-ai/sdk":"0.96.0","esbuild":"0.28.1","@hono/node-server":"1.19.13","fast-uri":"3.1.2","hono":"4.12.21","ip-address":"10.2.0","qs":"6.15.2","postcss":"8.5.14","vite":"7.3.2"}},"devDependencies":{"@types/better-sqlite3":"^7.6.0","@types/node":"^25.3.0","tsx":"^4.0.0","typescript":"^5.0.0","vitest":"^4.1.2"},"gitHead":"8b6407b0538dee2c8654f3fed9229e5c528d1bd6","types":"./dist/index.d.ts","_id":"@arinova-ai/arinova-bridge@0.0.5","_nodeVersion":"25.6.0","_npmVersion":"11.8.0","dist":{"integrity":"sha512-WX6kfa7rCzFaM3i4AqKmvBfpBb5L8EVaYcWpAuNWWPpVx5JENq2pt2IYCSik4/g7COGrkKt908EKo5y/IVbwsw==","shasum":"87db4a3993dbefe599ad88f46554ab2727bbab05","tarball":"https://registry.npmjs.org/@arinova-ai/arinova-bridge/-/arinova-bridge-0.0.5.tgz","fileCount":223,"unpackedSize":1113650,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDkzlToxyAOhipjWEjVv0w3GFlKlv2KPUO7zidtfhQWFQIgeNNuUgcrnOgsB2vPEtL+6pyNKnXkO7/MXY67hU9SJHU="}]},"_npmUser":{"name":"ripple0129","email":"ripple0129@gmail.com"},"directories":{},"maintainers":[{"name":"ripple0129","email":"ripple0129@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/arinova-bridge_0.0.5_1781799736764_0.7509995756408041"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-28T10:26:07.396Z","modified":"2026-06-18T16:22:17.078Z","0.0.1":"2026-03-28T10:26:07.645Z","0.0.2":"2026-04-04T21:11:09.241Z","0.0.3":"2026-04-04T21:19:05.220Z","0.0.4":"2026-06-15T01:06:38.562Z","0.0.5":"2026-06-18T16:22:16.950Z"},"description":"Multi-provider bridge between Arinova Chat and AI coding assistants (Claude, Codex)","maintainers":[{"name":"ripple0129","email":"ripple0129@gmail.com"}],"readme":"# Arinova Bridge\n\nMulti-provider bridge between [Arinova Chat](https://chat.arinova.ai) and AI coding assistants (Claude, Codex).\n\nConnect one or more AI agents to Arinova Chat through a single bridge process. Each agent gets its own provider, session management, and working directory.\n\n## Features\n\n- **Multi-provider** — Claude (CLI + SDK), OpenAI Codex\n- **Multi-agent** — Run multiple agents in one process, each with independent config\n- **MCP support** — Pre-installed Playwright and GitHub MCP servers\n- **HUD monitoring** — Real-time context usage, rate limits, and cost tracking\n- **Session management** — Automatic idle timeout, resume, and reset\n\n## Requirements\n\n- Node.js 20+\n- One or more AI CLI tools installed:\n  - [Claude Code](https://docs.anthropic.com/en/docs/claude-code) (`claude`)\n  - [OpenAI Codex](https://github.com/openai/codex) (`codex`)\n- An Arinova Chat bot token (`ari_...`)\n\n## Install\n\n```bash\nnpm install -g @arinova-ai/arinova-bridge\n```\n\n## Quick Start\n\n```bash\n# 1. Run the interactive setup wizard\narinova-bridge setup\n\n# 2. Start the bridge\narinova-bridge start\n```\n\nThe setup wizard will guide you through:\n- Connecting to Arinova Chat (bot token)\n- Choosing AI providers (Claude, Codex)\n- Configuring OAuth or API keys\n- Enabling rate limit monitoring (optional)\n\n## CLI Commands\n\n| Command | Description |\n|---------|-------------|\n| `arinova-bridge start` | Start the bridge server |\n| `arinova-bridge stop` | Stop the running bridge server |\n| `arinova-bridge config` | Show current configuration (secrets masked) |\n| `arinova-bridge setup` | Interactive setup wizard |\n| `arinova-bridge login [provider-id]` | OAuth login for configured CLI providers |\n| `arinova-bridge help` | Show detailed help with config examples |\n\n## Configuration\n\nConfig file location: `~/.arinova-bridge/config.json`\n\n### Single Agent (default)\n\n```json\n{\n  \"arinova\": {\n    \"serverUrl\": \"wss://api.chat.arinova.ai\",\n    \"botToken\": \"ari_your_token_here\",\n    \"agentName\": \"default\"\n  },\n  \"defaultProvider\": \"anthropic-oauth\",\n  \"providers\": [\n    {\n      \"id\": \"anthropic-oauth\",\n      \"type\": \"anthropic-cli\",\n      \"displayName\": \"Claude (OAuth)\",\n      \"enabled\": true\n    }\n  ],\n  \"defaults\": {\n    \"cwd\": \"~/projects\",\n    \"maxSessions\": 5,\n    \"idleTimeoutMs\": 600000\n  }\n}\n```\n\n### Multi-Agent\n\nAdd an `agents` array to run multiple agents, each with its own bot token, provider, working directory, and model:\n\n```json\n{\n  \"arinova\": {\n    \"serverUrl\": \"wss://api.chat.arinova.ai\"\n  },\n  \"providers\": [\n    { \"id\": \"anthropic-oauth\", \"type\": \"anthropic-cli\", \"displayName\": \"Claude\", \"enabled\": true },\n    { \"id\": \"openai-oauth\", \"type\": \"openai-cli\", \"displayName\": \"Codex\", \"enabled\": true }\n  ],\n  \"agents\": [\n    {\n      \"name\": \"lucy\",\n      \"botToken\": \"ari_lucy_token\",\n      \"provider\": \"anthropic-oauth\",\n      \"cwd\": \"~/projects\",\n      \"model\": \"claude-opus-4-6\"\n    },\n    {\n      \"name\": \"pan\",\n      \"botToken\": \"ari_pan_token\",\n      \"provider\": \"anthropic-oauth\",\n      \"cwd\": \"~/projects\"\n    },\n    {\n      \"name\": \"codex-agent\",\n      \"botToken\": \"ari_codex_token\",\n      \"provider\": \"openai-oauth\",\n      \"cwd\": \"~/workspace\",\n      \"model\": \"o3\"\n    }\n  ],\n  \"defaults\": {\n    \"cwd\": \"~/projects\",\n    \"maxSessions\": 5,\n    \"idleTimeoutMs\": 600000\n  }\n}\n```\n\nWithout the `agents` array, the bridge runs in single-agent mode using `arinova.botToken`.\n\n### Multiple OAuth Accounts\n\nThe setup wizard keeps the default provider list small. To use a second Codex or Claude OAuth account, add another provider manually with `configDir`, then login through the bridge CLI:\n\n```json\n{\n  \"providers\": [\n    {\n      \"id\": \"openai-oauth\",\n      \"type\": \"openai-cli\",\n      \"displayName\": \"Codex Local\",\n      \"enabled\": true\n    },\n    {\n      \"id\": \"openai-oauth2\",\n      \"type\": \"openai-cli\",\n      \"displayName\": \"Codex Second Account\",\n      \"enabled\": true,\n      \"configDir\": \"~/.arinova-bridge/accounts/openai-oauth2\"\n    },\n    {\n      \"id\": \"anthropic-oauth2\",\n      \"type\": \"anthropic-cli\",\n      \"displayName\": \"Claude Second Account\",\n      \"enabled\": true,\n      \"configDir\": \"~/.arinova-bridge/accounts/anthropic-oauth2\"\n    }\n  ]\n}\n```\n\n```bash\narinova-bridge login openai-oauth2\narinova-bridge login anthropic-oauth2\n```\n\nFor `openai-cli`, `configDir` maps to `CODEX_HOME`. For `anthropic-cli`, it maps to `CLAUDE_CONFIG_DIR`. Providers without `configDir` keep using the local default accounts in `~/.codex` and `~/.claude`.\n\n## Providers\n\n| Provider | Type | Auth | CLI Required |\n|----------|------|------|-------------|\n| Claude (OAuth) | `anthropic-cli` | OAuth (automatic) | `claude` |\n| Claude (API Key) | `anthropic-sdk` | API key | — |\n| OpenAI Codex | `openai-cli` | OAuth | `codex` |\n\n## MCP Servers\n\nThe bridge automatically pre-installs commonly used MCP servers:\n\n| MCP Server | Package | Condition |\n|------------|---------|-----------|\n| Playwright | `@playwright/mcp@0.0.68` | Always |\n| GitHub | `@modelcontextprotocol/server-github@2025.4.8` | When `GITHUB_TOKEN` is set |\n\nMCP servers are downloaded on first use via `npx` (no additional install needed).\n\n## Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `ARINOVA_SERVER_URL` | Override WebSocket server URL |\n| `ARINOVA_BOT_TOKEN` | Override bot token (single-agent mode) |\n| `ARINOVA_AGENT_NAME` | Override agent name (single-agent mode) |\n| `DEFAULT_PROVIDER` | Override default provider ID |\n| `DEFAULT_CWD` | Override default working directory |\n| `MAX_SESSIONS` | Override max concurrent sessions per provider |\n| `MCP_CONFIG_PATH` | Override MCP config file path |\n| `DB_PATH` | Override SQLite database path |\n| `GITHUB_TOKEN` | Enable GitHub MCP server |\n\n## Development\n\n```bash\ngit clone <repo-url>\ncd arinova-bridge\nnpm install\nnpm run dev       # Run with tsx (hot reload)\nnpm run build     # Compile TypeScript\nnpm test          # Run tests\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}