The architectural convergence v0.9.0 was building toward. CLI keeps working without a daemon (claudemesh send/peer/inbox/...), but the MCP push-pipe — which Claude Code uses for mid-turn channel emits, slash commands, and resources — now requires the daemon. There is no fallback. Daemon (additive): - /v1/skills (list) and /v1/skills/:name (get) IPC endpoints, so the MCP shim can surface mesh skills without holding its own broker WS. - listSkills() / getSkill() on DaemonBrokerClient. - SSE 'message' event now carries plaintext body, sender_member_pubkey, priority, and subtype — full payload the MCP shim needs to render a channel notification. MCP server: 979 → 469 LoC (470 of the remaining 469 is the unrelated mesh-service proxy mode; the push-pipe path is ~200 LoC including boilerplate). - Probes ~/.claudemesh/daemon/daemon.sock at boot. Bails loudly with actionable instructions if missing. - Subscribes to /v1/events SSE and translates each event into a notifications/claude/channel emit. - Fetches mesh skills from the daemon for ListPrompts/GetPrompt and ListResources/ReadResource. ListTools returns []; the CLI is the API. - No broker WS, no decryption, no reconnect logic. Daemon owns all of it. claudemesh install: auto-installs and starts the daemon service for the user's primary mesh (launchd / systemd-user). Pass --no-service to skip. claudemesh launch: probes the daemon socket; if absent, spawns 'claudemesh daemon up --mesh <slug>' detached and waits up to 10s for the socket. Surfaces a clear warning on timeout but doesn't block — Claude Code's MCP shim will print the same error if the daemon really isn't there. Bundle: dist/entrypoints/mcp.js drops from 154KB → 104KB (gzipped 34KB → 19KB). Test: MCP boots cleanly via stdio, declares correct capabilities, talks JSON-RPC; daemon /v1/skills returns the empty list as expected on a mesh with no skills. Released as 1.24.0 on npm. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
72 lines
1.8 KiB
JSON
72 lines
1.8 KiB
JSON
{
|
|
"name": "claudemesh-cli",
|
|
"version": "1.24.0",
|
|
"description": "Peer mesh for Claude Code sessions — CLI + MCP server.",
|
|
"keywords": [
|
|
"claude-code",
|
|
"mcp",
|
|
"model-context-protocol",
|
|
"claudemesh",
|
|
"peer-messaging",
|
|
"multi-agent"
|
|
],
|
|
"author": "Alejandro Gutiérrez",
|
|
"license": "MIT",
|
|
"homepage": "https://claudemesh.com",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://github.com/alezmad/claudemesh.git",
|
|
"directory": "apps/cli"
|
|
},
|
|
"type": "module",
|
|
"bin": {
|
|
"claudemesh": "./dist/entrypoints/cli.js"
|
|
},
|
|
"files": [
|
|
"dist",
|
|
"skills",
|
|
"README.md",
|
|
"LICENSE"
|
|
],
|
|
"publishConfig": {
|
|
"access": "public"
|
|
},
|
|
"scripts": {
|
|
"build": "bun build.ts",
|
|
"clean": "git clean -xdf .cache .turbo dist node_modules",
|
|
"dev": "bun --hot src/entrypoints/cli.ts",
|
|
"start": "bun src/entrypoints/cli.ts",
|
|
"format": "prettier --check . --ignore-path ../../.gitignore",
|
|
"lint": "eslint",
|
|
"prepublishOnly": "bun run build",
|
|
"test": "vitest run",
|
|
"typecheck": "tsc --noEmit"
|
|
},
|
|
"prettier": "@turbostarter/prettier-config",
|
|
"engines": {
|
|
"node": ">=20"
|
|
},
|
|
"dependencies": {
|
|
"@modelcontextprotocol/sdk": "1.27.1",
|
|
"citty": "0.2.2",
|
|
"libsodium-wrappers": "0.7.15",
|
|
"qrcode-terminal": "0.12.0",
|
|
"ws": "8.20.0",
|
|
"zod": "4.1.13"
|
|
},
|
|
"devDependencies": {
|
|
"@claudemesh/sdk": "workspace:*",
|
|
"@turbostarter/eslint-config": "workspace:*",
|
|
"@turbostarter/prettier-config": "workspace:*",
|
|
"@turbostarter/tsconfig": "workspace:*",
|
|
"@turbostarter/vitest-config": "workspace:*",
|
|
"@types/libsodium-wrappers": "0.7.14",
|
|
"@types/qrcode-terminal": "0.12.2",
|
|
"@types/ws": "8.5.13",
|
|
"eslint": "catalog:",
|
|
"prettier": "catalog:",
|
|
"typescript": "catalog:",
|
|
"vitest": "catalog:"
|
|
}
|
|
}
|