{
  "name": "remoteclaw",
  "version": "0.7.0",
  "description": "Multi-channel AI gateway with extensible messaging integrations",
  "keywords": [
    "agent",
    "ai",
    "claude",
    "codex",
    "discord",
    "gateway",
    "gemini",
    "messaging",
    "middleware",
    "remoteclaw",
    "slack",
    "telegram",
    "whatsapp"
  ],
  "homepage": "https://github.com/remoteclaw/remoteclaw#readme",
  "bugs": {
    "url": "https://github.com/remoteclaw/remoteclaw/issues"
  },
  "license": "AGPL-3.0-only",
  "author": "",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/remoteclaw/remoteclaw.git"
  },
  "bin": {
    "remoteclaw": "remoteclaw.mjs"
  },
  "files": [
    "CHANGELOG.md",
    "LICENSE",
    "remoteclaw.mjs",
    "README.md",
    "assets/",
    "dist/",
    "extensions/",
    "!extensions/**/*.test.ts",
    "!extensions/**/fixtures/",
    "!extensions/**/test/"
  ],
  "type": "module",
  "main": "dist/index.js",
  "exports": {
    ".": "./dist/index.js",
    "./plugin-sdk": {
      "types": "./dist/plugin-sdk/index.d.ts",
      "default": "./dist/plugin-sdk/index.js"
    },
    "./plugin-sdk/core": {
      "types": "./dist/plugin-sdk/core.d.ts",
      "default": "./dist/plugin-sdk/core.js"
    },
    "./plugin-sdk/channel-config-helpers": {
      "types": "./dist/plugin-sdk/channel-config-helpers.d.ts",
      "default": "./dist/plugin-sdk/channel-config-helpers.js"
    },
    "./plugin-sdk/group-access": {
      "types": "./dist/plugin-sdk/group-access.d.ts",
      "default": "./dist/plugin-sdk/group-access.js"
    },
    "./plugin-sdk/reply-payload": {
      "types": "./dist/plugin-sdk/reply-payload.d.ts",
      "default": "./dist/plugin-sdk/reply-payload.js"
    },
    "./plugin-sdk/runtime-store": {
      "types": "./dist/plugin-sdk/runtime-store.d.ts",
      "default": "./dist/plugin-sdk/runtime-store.js"
    },
    "./plugin-sdk/compat": {
      "types": "./dist/plugin-sdk/compat.d.ts",
      "default": "./dist/plugin-sdk/compat.js"
    },
    "./plugin-sdk/telegram": {
      "types": "./dist/plugin-sdk/telegram.d.ts",
      "default": "./dist/plugin-sdk/telegram.js"
    },
    "./plugin-sdk/discord": {
      "types": "./dist/plugin-sdk/discord.d.ts",
      "default": "./dist/plugin-sdk/discord.js"
    },
    "./plugin-sdk/slack": {
      "types": "./dist/plugin-sdk/slack.d.ts",
      "default": "./dist/plugin-sdk/slack.js"
    },
    "./plugin-sdk/signal": {
      "types": "./dist/plugin-sdk/signal.d.ts",
      "default": "./dist/plugin-sdk/signal.js"
    },
    "./plugin-sdk/imessage": {
      "types": "./dist/plugin-sdk/imessage.d.ts",
      "default": "./dist/plugin-sdk/imessage.js"
    },
    "./plugin-sdk/whatsapp": {
      "types": "./dist/plugin-sdk/whatsapp.d.ts",
      "default": "./dist/plugin-sdk/whatsapp.js"
    },
    "./plugin-sdk/line": {
      "types": "./dist/plugin-sdk/line.d.ts",
      "default": "./dist/plugin-sdk/line.js"
    },
    "./plugin-sdk/msteams": {
      "types": "./dist/plugin-sdk/msteams.d.ts",
      "default": "./dist/plugin-sdk/msteams.js"
    },
    "./plugin-sdk/acpx": {
      "types": "./dist/plugin-sdk/acpx.d.ts",
      "default": "./dist/plugin-sdk/acpx.js"
    },
    "./plugin-sdk/bluebubbles": {
      "types": "./dist/plugin-sdk/bluebubbles.d.ts",
      "default": "./dist/plugin-sdk/bluebubbles.js"
    },
    "./plugin-sdk/copilot-proxy": {
      "types": "./dist/plugin-sdk/copilot-proxy.d.ts",
      "default": "./dist/plugin-sdk/copilot-proxy.js"
    },
    "./plugin-sdk/device-pair": {
      "types": "./dist/plugin-sdk/device-pair.d.ts",
      "default": "./dist/plugin-sdk/device-pair.js"
    },
    "./plugin-sdk/diagnostics-otel": {
      "types": "./dist/plugin-sdk/diagnostics-otel.d.ts",
      "default": "./dist/plugin-sdk/diagnostics-otel.js"
    },
    "./plugin-sdk/diffs": {
      "types": "./dist/plugin-sdk/diffs.d.ts",
      "default": "./dist/plugin-sdk/diffs.js"
    },
    "./plugin-sdk/feishu": {
      "types": "./dist/plugin-sdk/feishu.d.ts",
      "default": "./dist/plugin-sdk/feishu.js"
    },
    "./plugin-sdk/googlechat": {
      "types": "./dist/plugin-sdk/googlechat.d.ts",
      "default": "./dist/plugin-sdk/googlechat.js"
    },
    "./plugin-sdk/irc": {
      "types": "./dist/plugin-sdk/irc.d.ts",
      "default": "./dist/plugin-sdk/irc.js"
    },
    "./plugin-sdk/llm-task": {
      "types": "./dist/plugin-sdk/llm-task.d.ts",
      "default": "./dist/plugin-sdk/llm-task.js"
    },
    "./plugin-sdk/lobster": {
      "types": "./dist/plugin-sdk/lobster.d.ts",
      "default": "./dist/plugin-sdk/lobster.js"
    },
    "./plugin-sdk/matrix": {
      "types": "./dist/plugin-sdk/matrix.d.ts",
      "default": "./dist/plugin-sdk/matrix.js"
    },
    "./plugin-sdk/mattermost": {
      "types": "./dist/plugin-sdk/mattermost.d.ts",
      "default": "./dist/plugin-sdk/mattermost.js"
    },
    "./plugin-sdk/nextcloud-talk": {
      "types": "./dist/plugin-sdk/nextcloud-talk.d.ts",
      "default": "./dist/plugin-sdk/nextcloud-talk.js"
    },
    "./plugin-sdk/nostr": {
      "types": "./dist/plugin-sdk/nostr.d.ts",
      "default": "./dist/plugin-sdk/nostr.js"
    },
    "./plugin-sdk/open-prose": {
      "types": "./dist/plugin-sdk/open-prose.d.ts",
      "default": "./dist/plugin-sdk/open-prose.js"
    },
    "./plugin-sdk/phone-control": {
      "types": "./dist/plugin-sdk/phone-control.d.ts",
      "default": "./dist/plugin-sdk/phone-control.js"
    },
    "./plugin-sdk/synology-chat": {
      "types": "./dist/plugin-sdk/synology-chat.d.ts",
      "default": "./dist/plugin-sdk/synology-chat.js"
    },
    "./plugin-sdk/talk-voice": {
      "types": "./dist/plugin-sdk/talk-voice.d.ts",
      "default": "./dist/plugin-sdk/talk-voice.js"
    },
    "./plugin-sdk/test-utils": {
      "types": "./dist/plugin-sdk/test-utils.d.ts",
      "default": "./dist/plugin-sdk/test-utils.js"
    },
    "./plugin-sdk/thread-ownership": {
      "types": "./dist/plugin-sdk/thread-ownership.d.ts",
      "default": "./dist/plugin-sdk/thread-ownership.js"
    },
    "./plugin-sdk/tlon": {
      "types": "./dist/plugin-sdk/tlon.d.ts",
      "default": "./dist/plugin-sdk/tlon.js"
    },
    "./plugin-sdk/twitch": {
      "types": "./dist/plugin-sdk/twitch.d.ts",
      "default": "./dist/plugin-sdk/twitch.js"
    },
    "./plugin-sdk/voice-call": {
      "types": "./dist/plugin-sdk/voice-call.d.ts",
      "default": "./dist/plugin-sdk/voice-call.js"
    },
    "./plugin-sdk/zalo": {
      "types": "./dist/plugin-sdk/zalo.d.ts",
      "default": "./dist/plugin-sdk/zalo.js"
    },
    "./plugin-sdk/zalouser": {
      "types": "./dist/plugin-sdk/zalouser.d.ts",
      "default": "./dist/plugin-sdk/zalouser.js"
    },
    "./plugin-sdk/account-id": {
      "types": "./dist/plugin-sdk/account-id.d.ts",
      "default": "./dist/plugin-sdk/account-id.js"
    },
    "./plugin-sdk/keyed-async-queue": {
      "types": "./dist/plugin-sdk/keyed-async-queue.d.ts",
      "default": "./dist/plugin-sdk/keyed-async-queue.js"
    },
    "./cli-entry": "./remoteclaw.mjs"
  },
  "publishConfig": {
    "access": "public"
  },
  "scripts": {
    "android:assemble": "cd apps/android && ./gradlew :app:assembleDebug",
    "android:install": "cd apps/android && ./gradlew :app:installDebug",
    "android:run": "cd apps/android && ./gradlew :app:installDebug && adb shell am start -n org.remoteclaw.android/.MainActivity",
    "android:test": "cd apps/android && ./gradlew :app:testDebugUnitTest",
    "build": "pnpm canvas:a2ui:bundle && node scripts/tsdown-build.mjs && node scripts/copy-plugin-sdk-root-alias.mjs && pnpm build:plugin-sdk:dts && node --import tsx scripts/write-plugin-sdk-entry-dts.ts && node --import tsx scripts/canvas-a2ui-copy.ts && node --import tsx scripts/copy-hook-metadata.ts && node --import tsx scripts/copy-export-html-templates.ts && node --import tsx scripts/write-build-info.ts && node --import tsx scripts/write-cli-compat.ts",
    "build:plugin-sdk:dts": "tsc -p tsconfig.plugin-sdk.dts.json",
    "canvas:a2ui:bundle": "bash scripts/bundle-a2ui.sh",
    "check": "pnpm format:check && pnpm tsgo && pnpm lint && pnpm lint:tmp:no-random-messaging && pnpm lint:no-remoteclaw-ai && pnpm lint:ui:no-css-class-drift",
    "check:docs": "pnpm format:docs:check && pnpm lint:docs && pnpm docs:check-links",
    "check:loc": "node --import tsx scripts/check-ts-max-loc.ts --max 500",
    "deadcode:ci": "pnpm deadcode:report:ci:knip",
    "deadcode:knip": "pnpm dlx knip --production --no-progress --reporter compact --files --dependencies",
    "deadcode:report": "pnpm deadcode:knip; pnpm deadcode:ts-prune; pnpm deadcode:ts-unused",
    "deadcode:report:ci:knip": "mkdir -p .artifacts/deadcode && pnpm deadcode:knip > .artifacts/deadcode/knip.txt 2>&1 || true",
    "deadcode:report:ci:ts-prune": "mkdir -p .artifacts/deadcode && pnpm deadcode:ts-prune > .artifacts/deadcode/ts-prune.txt 2>&1 || true",
    "deadcode:report:ci:ts-unused": "mkdir -p .artifacts/deadcode && pnpm deadcode:ts-unused > .artifacts/deadcode/ts-unused-exports.txt 2>&1 || true",
    "deadcode:ts-prune": "pnpm dlx ts-prune src extensions scripts",
    "deadcode:ts-unused": "pnpm dlx ts-unused-exports tsconfig.json --ignoreTestFiles --exitWithCount",
    "dev": "node scripts/run-node.mjs",
    "docs:bin": "node scripts/build-docs-list.mjs",
    "docs:check-links": "node scripts/docs-link-audit.mjs",
    "docs:dev": "cd docs && mint dev",
    "docs:list": "node scripts/docs-list.js",
    "docs:spellcheck": "bash scripts/docs-spellcheck.sh",
    "docs:spellcheck:fix": "bash scripts/docs-spellcheck.sh --write",
    "dup:check": "jscpd src extensions test scripts --format typescript,javascript --pattern \"**/*.{ts,tsx,js,mjs,cjs}\" --gitignore --noSymlinks --ignore \"**/node_modules/**,**/dist/**,**/.git/**,**/coverage/**,**/build/**,**/.build/**,**/.artifacts/**\" --min-lines 12 --min-tokens 80 --reporters console",
    "dup:check:json": "jscpd src extensions test scripts --format typescript,javascript --pattern \"**/*.{ts,tsx,js,mjs,cjs}\" --gitignore --noSymlinks --ignore \"**/node_modules/**,**/dist/**,**/.git/**,**/coverage/**,**/build/**,**/.build/**,**/.artifacts/**\" --min-lines 12 --min-tokens 80 --reporters json --output .artifacts/jscpd",
    "format": "oxfmt --write",
    "format:all": "pnpm format && pnpm format:swift",
    "format:check": "oxfmt --check",
    "format:diff": "oxfmt --write && git --no-pager diff",
    "format:docs": "git ls-files 'docs/**/*.md' 'docs/**/*.mdx' 'README.md' | xargs oxfmt --write",
    "format:docs:check": "git ls-files 'docs/**/*.md' 'docs/**/*.mdx' 'README.md' | xargs oxfmt --check",
    "format:fix": "oxfmt --write",
    "format:swift": "swiftformat --lint --config .swiftformat apps/macos/Sources apps/ios/Sources apps/shared/RemoteClawKit/Sources",
    "gateway:dev": "REMOTECLAW_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway",
    "gateway:dev:reset": "REMOTECLAW_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway --reset",
    "gateway:watch": "node scripts/watch-node.mjs gateway --force",
    "ios:build": "bash -lc './scripts/ios-configure-signing.sh && cd apps/ios && xcodegen generate && xcodebuild -project RemoteClaw.xcodeproj -scheme RemoteClaw -destination \"${IOS_DEST:-platform=iOS Simulator,name=iPhone 17}\" -configuration Debug build'",
    "ios:gen": "bash -lc './scripts/ios-configure-signing.sh && cd apps/ios && xcodegen generate'",
    "ios:open": "bash -lc './scripts/ios-configure-signing.sh && cd apps/ios && xcodegen generate && open RemoteClaw.xcodeproj'",
    "ios:run": "bash -lc './scripts/ios-configure-signing.sh && cd apps/ios && xcodegen generate && xcodebuild -project RemoteClaw.xcodeproj -scheme RemoteClaw -destination \"${IOS_DEST:-platform=iOS Simulator,name=iPhone 17}\" -configuration Debug build && xcrun simctl boot \"${IOS_SIM:-iPhone 17}\" || true && xcrun simctl launch booted org.remoteclaw.ios'",
    "lint": "oxlint --type-aware",
    "lint:all": "pnpm lint && pnpm lint:swift",
    "lint:docs": "pnpm dlx markdownlint-cli2",
    "lint:docs:fix": "pnpm dlx markdownlint-cli2 --fix",
    "lint:fix": "oxlint --type-aware --fix && pnpm format",
    "lint:no-remoteclaw-ai": "node scripts/check-no-remoteclaw-ai.mjs",
    "lint:plugins:no-monolithic-plugin-sdk-entry-imports": "node --import tsx scripts/check-no-monolithic-plugin-sdk-entry-imports.ts",
    "lint:swift": "swiftlint lint --config .swiftlint.yml && (cd apps/ios && swiftlint lint --config .swiftlint.yml)",
    "lint:tmp:no-random-messaging": "node scripts/check-no-random-messaging-tmp.mjs",
    "lint:ui:no-css-class-drift": "node scripts/audit-css-class-drift.mjs",
    "lint:ui:no-raw-window-open": "node scripts/check-no-raw-window-open.mjs",
    "mac:open": "open dist/RemoteClaw.app",
    "mac:package": "bash scripts/package-mac-app.sh",
    "mac:restart": "bash scripts/restart-mac.sh",
    "plugins:sync-version": "node --import tsx scripts/plugins-sync-version.ts",
    "prepack": "pnpm build && pnpm ui:build",
    "prepare": "command -v git >/dev/null 2>&1 && git rev-parse --is-inside-work-tree >/dev/null 2>&1 && git config core.hooksPath git-hooks || exit 0",
    "protocol:check": "pnpm protocol:gen && pnpm protocol:gen:swift && git diff --exit-code -- dist/protocol.schema.json apps/macos/Sources/RemoteClawProtocol/GatewayModels.swift",
    "protocol:gen": "node --import tsx scripts/protocol-gen.ts",
    "protocol:gen:swift": "node --import tsx scripts/protocol-gen-swift.ts",
    "release:check": "node --import tsx scripts/release-check.ts",
    "remoteclaw": "node scripts/run-node.mjs",
    "remoteclaw:rpc": "node scripts/run-node.mjs agent --mode rpc --json",
    "start": "node scripts/run-node.mjs",
    "test": "node scripts/test-parallel.mjs",
    "test:all": "pnpm lint && pnpm build && pnpm test && pnpm test:e2e && pnpm test:live && pnpm test:docker:all",
    "test:channels": "vitest run --config vitest.channels.config.ts",
    "test:coverage": "vitest run --config vitest.unit.config.ts --coverage",
    "test:docker:all": "pnpm test:docker:onboard && pnpm test:docker:gateway-network && pnpm test:docker:qr && pnpm test:docker:doctor-switch && pnpm test:docker:plugins",
    "test:docker:doctor-switch": "bash scripts/e2e/doctor-install-switch-docker.sh",
    "test:docker:gateway-network": "bash scripts/e2e/gateway-network-docker.sh",
    "test:docker:onboard": "bash scripts/e2e/onboard-docker.sh",
    "test:docker:plugins": "bash scripts/e2e/plugins-docker.sh",
    "test:docker:qr": "bash scripts/e2e/qr-import-docker.sh",
    "test:e2e": "vitest run --config vitest.e2e.config.ts",
    "test:extensions": "vitest run --config vitest.extensions.config.ts",
    "test:fast": "vitest run --config vitest.unit.config.ts",
    "test:force": "node --import tsx scripts/test-force.ts",
    "test:gateway": "vitest run --config vitest.gateway.config.ts --pool=forks",
    "test:install:e2e": "bash scripts/test-install-sh-e2e-docker.sh",
    "test:install:e2e:anthropic": "REMOTECLAW_E2E_MODELS=anthropic bash scripts/test-install-sh-e2e-docker.sh",
    "test:install:e2e:openai": "REMOTECLAW_E2E_MODELS=openai bash scripts/test-install-sh-e2e-docker.sh",
    "test:install:smoke": "bash scripts/test-install-sh-docker.sh",
    "test:live": "REMOTECLAW_LIVE_TEST=1 vitest run --config vitest.live.config.ts",
    "test:macmini": "REMOTECLAW_TEST_VM_FORKS=0 REMOTECLAW_TEST_PROFILE=serial node scripts/test-parallel.mjs",
    "test:ui": "pnpm lint:ui:no-raw-window-open && pnpm --dir ui test",
    "test:ui:smoke": "pnpm --dir ui exec vitest run --config vitest.config.ts src/ui/app.smoke.test.ts src/ui/app.computed-style.test.ts",
    "test:voicecall:closedloop": "vitest run extensions/voice-call/src/manager.test.ts extensions/voice-call/src/media-stream.test.ts src/plugins/voice-call.plugin.test.ts --maxWorkers=1",
    "test:watch": "vitest",
    "tui": "node scripts/run-node.mjs tui",
    "tui:dev": "REMOTECLAW_PROFILE=dev node scripts/run-node.mjs --dev tui",
    "ui:build": "node scripts/ui.js build",
    "ui:dev": "node scripts/ui.js dev",
    "ui:install": "node scripts/ui.js install"
  },
  "dependencies": {
    "@agentclientprotocol/sdk": "0.16.1",
    "@aws-sdk/client-s3": "3.1000.0",
    "@aws-sdk/s3-request-presigner": "3.1000.0",
    "@buape/carbon": "0.0.0-beta-20260216184201",
    "@clack/prompts": "^1.1.0",
    "@discordjs/voice": "^0.19.1",
    "@grammyjs/runner": "^2.0.3",
    "@grammyjs/transformer-throttler": "^1.2.1",
    "@homebridge/ciao": "^1.3.5",
    "@larksuiteoapi/node-sdk": "^1.59.0",
    "@line/bot-sdk": "^10.6.0",
    "@mariozechner/pi-tui": "0.55.0",
    "@matrix-org/matrix-sdk-crypto-nodejs": "^0.4.0",
    "@microsoft/agents-hosting": "^1.3.1",
    "@modelcontextprotocol/sdk": "^1.27.1",
    "@sinclair/typebox": "0.34.48",
    "@slack/bolt": "^4.6.0",
    "@slack/web-api": "^7.14.1",
    "@tloncorp/tlon-skill": "0.2.2",
    "@urbit/aura": "^3.0.0",
    "@vector-im/matrix-bot-sdk": "0.8.0-element.3",
    "@whiskeysockets/baileys": "7.0.0-rc.9",
    "ajv": "^8.18.0",
    "chalk": "^5.6.2",
    "chokidar": "^5.0.0",
    "cli-highlight": "^2.1.11",
    "commander": "^14.0.3",
    "croner": "^10.0.1",
    "discord-api-types": "^0.38.42",
    "dotenv": "^17.3.1",
    "express": "^5.2.1",
    "file-type": "^21.3.1",
    "google-auth-library": "^10.6.1",
    "grammy": "^1.41.1",
    "https-proxy-agent": "^8.0.0",
    "ipaddr.js": "^2.3.0",
    "jiti": "^2.6.1",
    "json5": "^2.2.3",
    "jszip": "^3.10.1",
    "linkedom": "^0.18.12",
    "markdown-it": "^14.1.1",
    "music-metadata": "^11.12.1",
    "node-edge-tts": "^1.2.10",
    "nostr-tools": "^2.23.3",
    "opusscript": "^0.1.1",
    "osc-progress": "^0.3.0",
    "pdfjs-dist": "^5.4.624",
    "qrcode-terminal": "^0.12.0",
    "sharp": "^0.34.5",
    "strip-ansi": "^7.2.0",
    "tar": "7.5.11",
    "tslog": "^4.10.2",
    "undici": "^7.22.0",
    "ws": "^8.19.0",
    "yaml": "^2.8.2",
    "zca-js": "2.1.1",
    "zod": "^4.3.6"
  },
  "devDependencies": {
    "@grammyjs/types": "^3.24.0",
    "@lit-labs/signals": "^0.2.0",
    "@lit/context": "^1.1.6",
    "@types/express": "^5.0.6",
    "@types/markdown-it": "^14.1.2",
    "@types/node": "^25.4.0",
    "@types/qrcode-terminal": "^0.12.2",
    "@types/ws": "^8.18.1",
    "@typescript/native-preview": "7.0.0-dev.20260311.1",
    "@vitest/coverage-v8": "^4.0.18",
    "jscpd": "4.0.8",
    "lit": "^3.3.2",
    "oxfmt": "0.38.0",
    "oxlint": "^1.53.0",
    "oxlint-tsgolint": "^0.16.0",
    "signal-utils": "0.21.1",
    "tsdown": "0.21.2",
    "tsx": "^4.21.0",
    "typescript": "^5.9.3",
    "vitest": "^4.0.18"
  },
  "peerDependencies": {
    "@napi-rs/canvas": "^0.1.89"
  },
  "engines": {
    "node": ">=22.12.0"
  },
  "packageManager": "pnpm@10.23.0",
  "pnpm": {
    "minimumReleaseAge": 2880,
    "overrides": {
      "hono": "4.12.7",
      "@hono/node-server": "1.19.10",
      "fast-xml-parser": "5.3.8",
      "request": "npm:@cypress/request@3.0.10",
      "request-promise": "npm:@cypress/request-promise@5.0.0",
      "file-type": "21.3.1",
      "form-data": "2.5.4",
      "minimatch": "10.2.1",
      "qs": "6.14.2",
      "@grammyjs/types": "3.26.0",
      "@sinclair/typebox": "0.34.48",
      "tar": "7.5.11",
      "tough-cookie": "4.1.3"
    },
    "onlyBuiltDependencies": [
      "@matrix-org/matrix-sdk-crypto-nodejs",
      "@napi-rs/canvas",
      "@whiskeysockets/baileys",
      "authenticate-pam",
      "esbuild",
      "koffi",
      "protobufjs",
      "sharp"
    ]
  },
  "upstreamRepo": "openclaw/openclaw",
  "upstreamVersion": "2026.3.23"
}
