changelog-20260407.md: full implementation details for 21 features vision-20260407.md: slimmed to shipped summary + remaining items Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
165 lines
9.1 KiB
Markdown
165 lines
9.1 KiB
Markdown
# claudemesh — Implementation Changelog
|
||
|
||
**Sprint:** 2026-04-07 evening session
|
||
**Author:** Alejandro Gutiérrez + Claude (Opus 4.6)
|
||
**CLI versions:** 0.6.8 → 0.6.9 → 0.7.0
|
||
**Broker:** deployed to `ic.claudemesh.com` (Coolify, OVHcloud VPS)
|
||
|
||
---
|
||
|
||
## Features shipped
|
||
|
||
### 1. Session path (cwd) sharing
|
||
`810f372` · CLI 0.6.9 + broker
|
||
|
||
Added `cwd` to the WS hello handshake. Broker stores it in the peer record, `list_peers` returns it. Peers on the same machine see each other's working directories for direct file referencing.
|
||
|
||
### 2. Peer metadata (type, channel, model)
|
||
`810f372` · Same commit as cwd
|
||
|
||
Extended hello with `peerType: "ai" | "human" | "connector"`, `channel` (e.g. "claude-code", "telegram"), `model` (e.g. "opus-4"). Foundation for connectors, humans, and smart routing.
|
||
|
||
### 3. System notifications (peer join/leave)
|
||
`453705a` · broker + CLI
|
||
|
||
Broker broadcasts `{ subtype: "system", event: "peer_joined" | "peer_left" }` pushes to all mesh peers on connect/disconnect. MCP server formats them as `[system] Peer "Alice" joined the mesh`. System events bypass inbox/off message modes.
|
||
|
||
### 4. Cron-based persistent reminders
|
||
`e873807` · broker + CLI + `72be651` (--cron flag)
|
||
|
||
Replaced in-memory `setTimeout` with DB-persisted scheduler. Zero-dependency 5-field cron parser. Schedules survive broker restarts via `recoverScheduledMessages()` on boot. CLI: `claudemesh remind "check deploys" --cron "0 */2 * * *"`. MCP: `schedule_reminder` with `cron` field.
|
||
|
||
### 5. Simulation clock with time multiplier
|
||
`05d9b56` · broker + CLI
|
||
|
||
Per-mesh clock state (`MeshClock` interface + `meshClocks` Map). Configurable speed x1–x100. Broadcasts heartbeat ticks as system pushes: `{ event: "tick", eventData: { tick, simTime, speed } }`. Auto-pauses when last peer disconnects. MCP tools: `mesh_set_clock`, `mesh_pause_clock`, `mesh_resume_clock`, `mesh_clock`.
|
||
|
||
### 6. Inbound webhooks
|
||
`b55cf26` · broker (new `webhooks.ts`) + CLI
|
||
|
||
`POST /hook/:meshId/:secret` → broker injects as push to all mesh peers. Webhooks stored in `meshWebhook` Drizzle table. MCP tools: `create_webhook` (returns URL+secret), `list_webhooks`, `delete_webhook`. Push format: `{ subtype: "webhook", event: "webhook_name", eventData: {...body} }`.
|
||
|
||
### 7. Slack connector
|
||
`5563f90` · `packages/connector-slack/`
|
||
|
||
Bridge process using `@slack/socket-mode` + `@slack/web-api`. Joins mesh as `peerType: "connector"`, `channel: "slack"`. Bidirectional relay with echo prevention, user ID-to-name resolution with caching, auto-reconnect with exponential backoff.
|
||
|
||
### 8. Telegram connector
|
||
`fe92853` · `packages/connector-telegram/`
|
||
|
||
Zero-dependency Telegram Bot API client using native `fetch` + long polling. Same bridge pattern as Slack. HTML formatting for Telegram output. Auto-reconnect with exponential backoff (1s–30s).
|
||
|
||
### 9. Non-Claude-Code SDK
|
||
`7e102a2` · `packages/sdk/`
|
||
|
||
Standalone TypeScript SDK (`@claudemesh/sdk`). `MeshClient extends EventEmitter` with `connect()`, `send()`, `broadcast()`, `listPeers()`, `getState()`, `setState()`. Uses `libsodium-wrappers` for ed25519-to-curve25519 crypto_box encryption (same as CLI). Auto-reconnect with exponential backoff.
|
||
|
||
### 10. Mesh skills catalog
|
||
`c8cb1e3` · broker (Drizzle schema + handlers) + CLI
|
||
|
||
Peers publish reusable skills (name, description, instructions, tags). Full CRUD: `share_skill` (upsert by name), `get_skill`, `list_skills` (ILIKE search), `remove_skill`. Stored in `meshSkill` table with unique (meshId, name). `get_skill` returns instructions prominently formatted for immediate AI use.
|
||
|
||
### 11. Shared project files
|
||
`504111c` · broker relay + CLI file serving
|
||
|
||
Peer-to-peer file relay: `read_peer_file(peer, path)` and `list_peer_files(peer, path?, pattern?)`. Broker relays without reading content. Security: 1MB max, path traversal rejection, hidden files excluded, 2-level dir listing cap (500 entries). Plus hostname-based local/remote detection (`2c9c8c7`) and filesystem shortcut hint for local peers (`a92cf6b`).
|
||
|
||
### 12. Peer stats reporting
|
||
`b3b9972` · broker + CLI
|
||
|
||
Peers auto-report stats every 60s: messagesIn/Out, toolCalls, uptime, errors. `set_stats` WS message + `mesh_stats` MCP tool. Stats visible in `list_peers` response. Tool call counter incremented on every MCP invocation.
|
||
|
||
### 13. Signed audit log (hash chain)
|
||
`86a2583` · broker (new `audit.ts` + Drizzle schema)
|
||
|
||
SHA-256 hash-chained append-only log. Each entry hashes: `prevHash|meshId|eventType|actorMemberId|payload|createdAt`. Events logged: peer_joined, peer_left, state_set, message_sent (NO ciphertext). WS endpoints: `audit_query` (paginated), `audit_verify` (chain integrity check). On startup: `ensureAuditLogTable()` + `loadLastHashes()`.
|
||
|
||
### 14. Mesh templates
|
||
`69e93d4` · CLI (`apps/cli/src/templates/`)
|
||
|
||
5 JSON templates: dev-team, research, ops-incident, simulation, personal. Each defines groups, roles, state keys, and a system prompt hint. `claudemesh create --template dev-team` loads and displays template. `claudemesh create --list-templates` shows all.
|
||
|
||
### 15. Default personal mesh guidance
|
||
`b0dc538` · CLI (`install.ts`)
|
||
|
||
`claudemesh install` detects empty meshes and shows join guidance. Local-only mesh deferred (requires broker enrollment for real connectivity).
|
||
|
||
### 16. Mesh MCP proxy
|
||
`08e289a` · broker + CLI
|
||
|
||
Dynamic tool sharing: `mesh_mcp_register` → `mesh_mcp_list` → `mesh_tool_call` → broker forwards to hosting peer → execute → result back. In-memory registry with 30s call timeout. Auto-cleanup on disconnect. MCP register/unregister broadcasts system notifications (`e09671c`).
|
||
|
||
### 17. Dashboard: peer graph + state timeline + resource panel
|
||
`59332dc` (peer graph) + `7d432b3` (timeline + resources)
|
||
|
||
**Peer graph:** Radial SVG layout, animated bezier edges with priority colors, group rings, status indicators (green/amber/red), node sizing by activity. No external deps (pure SVG + CSS animations). `ResizeObserver` for responsive sizing.
|
||
|
||
**State timeline:** Vertical timeline of audit events with timestamps, icons, type badges. Newest-first with auto-scroll. Shares same TanStack Query cache (zero extra API calls).
|
||
|
||
**Resource panel:** 2x2 card grid — live peers, envelope breakdown, audit event frequency, session online/offline split.
|
||
|
||
### 18. Peer visibility + public profiles
|
||
Broker types.ts + index.ts + CLI
|
||
|
||
`set_visible(false)` makes peer invisible in `list_peers` and skips broadcast/group routing. Direct messages by pubkey still reach hidden peers. System events: `peer_visible`, `peer_hidden`. Public profiles: `set_profile({ avatar, title, bio, capabilities })` — visible to other peers in `list_peers` and peer graph.
|
||
|
||
### 19. Hostname + local/remote detection
|
||
`2c9c8c7` · broker + CLI
|
||
|
||
`os.hostname()` added to hello handshake. `list_peers` shows `[local]` or `[remote]` tag per peer. MCP instructions include file access decision guide: local → filesystem, remote <1MB → `read_peer_file`, large/persistent → `share_file`.
|
||
|
||
### 20. File access decision guide in MCP instructions
|
||
`3641618` · CLI MCP server
|
||
|
||
Clear decision guide in system instructions: three methods (filesystem for local, relay for remote, MinIO for persistent), with size limits and when to use each.
|
||
|
||
### 21. MCP server register/unregister broadcasts
|
||
`e09671c` · broker + CLI
|
||
|
||
When a peer registers or removes an MCP server, all mesh peers receive a system notification: `[system] New MCP server available: "github" (hosted by Alice). Tools: list_repos, create_issue. Use mesh_tool_call to invoke.`
|
||
|
||
---
|
||
|
||
## Also shipped (infrastructure / docs)
|
||
|
||
| Commit | What |
|
||
|--------|------|
|
||
| `0bb9d71` | Merged `schedule_reminder` + `send_later` into single tool with optional `to` param; added `subtype: "reminder"` to push |
|
||
| `79525af` | Fixed TSC error from cron example in JSDoc comment |
|
||
| `69e93d4` | Mesh templates: 5 JSON templates + `claudemesh create` command |
|
||
| `f34b8fb` | CLI `--help` text review: 44 descriptions improved for clarity, concision, consistency |
|
||
| `58ba01f` | `CLAUDEMESH_TOOLS` in install.ts synced (41→45 tools, sorted alphabetically) |
|
||
| `db2bf3e` | `protocol.md` expanded from 6 to 73 message types |
|
||
| `72be651` | `--cron` flag wired into citty remind command |
|
||
|
||
---
|
||
|
||
## CLI versions published
|
||
|
||
| Version | Key changes |
|
||
|---------|------------|
|
||
| 0.6.8 | schedule_reminder merge, reminder subtype |
|
||
| 0.6.9 | cwd + peer metadata + system notifications + cron + templates + --help review |
|
||
| 0.7.0 | Skills catalog, MCP proxy, shared files, visibility, sim clock, webhooks, peer stats, connectors, SDK |
|
||
|
||
---
|
||
|
||
## Pending (building)
|
||
|
||
- **Peer session persistence** — agent running, DB-backed state restore on reconnect
|
||
- **Persistent MCP registrations** — agent running, survive peer disconnect with online/offline status
|
||
|
||
---
|
||
|
||
## Remaining from vision (not yet built)
|
||
|
||
| # | Feature | Notes |
|
||
|---|---------|-------|
|
||
| 6 | REST API + external WS | Webhooks done, REST and WS auth remain |
|
||
| 8 | Humans in the mesh | Web chat panel needed |
|
||
| 14 | Bridge / federation | Bridge peer feasible now, federation needs design |
|
||
| 18 | Sandboxes (E2B) | Third-party integration preferred |
|
||
| 20 | Spatial topology (x,y proximity) | Visibility done, proximity model remains |
|
||
| 21 | Semantic peer search | Multi-field matching, half day |
|
||
| 22 | Mesh telemetry + debugging | Structured logging + reporting |
|