{
  "name": "johns-harness",
  "version": "2026.9.8",
  "description": "John's Harness: a production agent harness that runs autonomous coding agents as one cooperative swarm.",
  "keywords": [
    "ai-agents",
    "agent-harness",
    "swarm",
    "coding-agents",
    "memory",
    "gateway",
    "cli"
  ],
  "homepage": "https://github.com/John-Rood/johns-harness#readme",
  "bugs": {
    "url": "https://github.com/John-Rood/johns-harness/issues"
  },
  "license": "MIT",
  "author": "John Rood <john@johnrood.com>",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/John-Rood/johns-harness.git"
  },
  "bin": {
    "johnness": "johnness.mjs"
  },
  "directories": {
    "doc": "docs",
    "test": "test"
  },
  "files": [
    "CHANGELOG.md",
    "LICENSE",
    "johnness.mjs",
    "README.md",
    "assets/",
    "dist/",
    "docs/",
    "extensions/",
    "skills/",
    "vendor/",
    "scripts/postinstall.mjs",
    "!extensions/**/node_modules/.ignored*/**",
    "!extensions/**/node_modules/.bin/**"
  ],
  "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/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/google-gemini-cli-auth": {
      "types": "./dist/plugin-sdk/google-gemini-cli-auth.d.ts",
      "default": "./dist/plugin-sdk/google-gemini-cli-auth.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/memory-core": {
      "types": "./dist/plugin-sdk/memory-core.d.ts",
      "default": "./dist/plugin-sdk/memory-core.js"
    },
    "./plugin-sdk/memory-lancedb": {
      "types": "./dist/plugin-sdk/memory-lancedb.d.ts",
      "default": "./dist/plugin-sdk/memory-lancedb.js"
    },
    "./plugin-sdk/minimax-portal-auth": {
      "types": "./dist/plugin-sdk/minimax-portal-auth.d.ts",
      "default": "./dist/plugin-sdk/minimax-portal-auth.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/qwen-portal-auth": {
      "types": "./dist/plugin-sdk/qwen-portal-auth.d.ts",
      "default": "./dist/plugin-sdk/qwen-portal-auth.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": "./johnness.mjs"
  },
  "scripts": {
    "start": "node johnness.mjs",
    "test": "node --test tests/*.test.mjs",
    "postinstall": "node scripts/postinstall.mjs"
  },
  "dependencies": {
    "@agentclientprotocol/sdk": "0.15.0",
    "@aws-sdk/client-bedrock": "^3.1004.0",
    "@buape/carbon": "0.0.0-beta-20260216184201",
    "@clack/prompts": "^1.1.0",
    "@discordjs/voice": "^0.19.0",
    "@grammyjs/runner": "^2.0.3",
    "@grammyjs/transformer-throttler": "^1.2.1",
    "@homebridge/ciao": "^1.3.5",
    "@line/bot-sdk": "^10.6.0",
    "@lydell/node-pty": "1.2.0-beta.3",
    "@mariozechner/pi-agent-core": "0.55.3",
    "@mariozechner/pi-ai": "0.55.3",
    "@mariozechner/pi-coding-agent": "0.55.3",
    "@mariozechner/pi-tui": "0.55.3",
    "@mozilla/readability": "^0.6.0",
    "@sinclair/typebox": "0.34.48",
    "@slack/bolt": "^4.6.0",
    "@slack/web-api": "^7.14.1",
    "@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.41",
    "dotenv": "^17.3.1",
    "express": "^5.2.1",
    "file-type": "^21.3.0",
    "grammy": "^1.41.1",
    "https-proxy-agent": "^7.0.6",
    "ipaddr.js": "^2.3.0",
    "jiti": "^2.6.1",
    "json5": "^2.2.3",
    "jszip": "^3.10.1",
    "linkedom": "^0.18.12",
    "long": "^5.3.2",
    "markdown-it": "^14.1.1",
    "node-edge-tts": "^1.2.10",
    "opusscript": "^0.1.1",
    "osc-progress": "^0.3.0",
    "pdfjs-dist": "^5.5.207",
    "playwright-core": "1.58.2",
    "qrcode-terminal": "^0.12.0",
    "sharp": "^0.34.5",
    "sqlite-vec": "0.1.7-alpha.2",
    "strip-ansi": "^7.2.0",
    "tar": "7.5.10",
    "tslog": "^4.10.2",
    "undici": "^7.22.0",
    "ws": "^8.19.0",
    "yaml": "^2.8.2",
    "zod": "^4.3.6",
    "mr-memory": "3.13.2"
  },
  "peerDependencies": {
    "@napi-rs/canvas": "^0.1.89",
    "node-llama-cpp": "3.16.2"
  },
  "engines": {
    "node": ">=22.12.0"
  }
}
