hivecode-mcp 0.12.1 → 0.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +1 -0
  2. package/package.json +3 -2
  3. package/sync.js +7 -1
package/README.md CHANGED
@@ -116,6 +116,7 @@ Every agent is handed these when it joins. They are worth knowing as a person to
116
116
  |---|---|---|
117
117
  | the agent has no `hive_join` tool | Hivecode isn't loaded in that app yet | run `npx -y hivecode-mcp@latest setup` again, check it printed `READY` for your app, then reload the agent |
118
118
  | `setup` printed `FAILED` for an app | that app's config could not be written, or what was written does not start | the reason is on the same line, and the entry to add by hand is printed below it |
119
+ | `npx` stops with `ENOENT` and `AppData\Roaming\npm` (Windows) | that folder is missing, which happens on some fresh Node installs, and npm gives up before Hivecode starts | create it with `mkdir "$env:APPDATA\npm"` in PowerShell (`mkdir "%APPDATA%\npm"` in cmd), then run setup again |
119
120
  | `'room-…' is not recognized` or `command not found: room-…` | a join link was pasted into a terminal without quotes | give the link to your agent instead; if you pass it to `setup`, quote it |
120
121
  | `NOT JOINED` and the address `livecode-xoss.onrender.com` | an old Hivecode version, still cached by `npx` | put `hivecode-mcp@latest` in your agent's config and restart it |
121
122
  | `Q430` | the relay is out of sockets | try again shortly; clients on the older one-socket-per-file transport (the VS Code extension, the browser panel) can lower `HIVE_MAX_OPEN_FILES` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hivecode-mcp",
3
- "version": "0.12.1",
3
+ "version": "0.12.2",
4
4
  "description": "MCP server that lets any AI coding agent join a Hivecode room — humans and multiple AI agents edit one live codebase with folder-scoped permissions and approval gates.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -91,10 +91,11 @@
91
91
  "test:liveness": "node tests/agent-liveness-test.mjs && node tests/unreachable-recipient-test.mjs",
92
92
  "build:ext": "node scripts/build-icr-cjs.cjs && node scripts/build-privacy-cjs.cjs",
93
93
  "test:selfhost": "node tests/relay-pin-test.mjs && node tests/self-host-test.mjs && node tests/extension-privacy-parity-test.mjs",
94
- "test:hardening": "node tests/genesis-claim-test.mjs && node tests/bare-root-write-test.mjs && node tests/version-truth-test.mjs && node tests/room-repo-drift-test.mjs && node tests/first-contact-refusal-test.mjs && node tests/open-file-cap-test.mjs && node tests/learnings-test.mjs && node tests/agent-liveness-test.mjs && node tests/unreachable-recipient-test.mjs && node tests/join-honesty-test.mjs && node tests/relay-diagnosis-test.mjs && node tests/blind-recreate-test.mjs && node tests/genesis-collision-test.mjs && node tests/relay-pin-test.mjs && node tests/self-host-test.mjs && node tests/extension-privacy-parity-test.mjs && node tests/readme-promises-test.mjs && node tests/setup-test.mjs && node tests/mcp-conformance-test.mjs && node tests/update-notice-test.mjs && node tests/mux-test.mjs",
94
+ "test:hardening": "node tests/genesis-claim-test.mjs && node tests/bare-root-write-test.mjs && node tests/version-truth-test.mjs && node tests/room-repo-drift-test.mjs && node tests/first-contact-refusal-test.mjs && node tests/open-file-cap-test.mjs && node tests/learnings-test.mjs && node tests/agent-liveness-test.mjs && node tests/unreachable-recipient-test.mjs && node tests/join-honesty-test.mjs && node tests/relay-diagnosis-test.mjs && node tests/blind-recreate-test.mjs && node tests/genesis-collision-test.mjs && node tests/relay-pin-test.mjs && node tests/self-host-test.mjs && node tests/extension-privacy-parity-test.mjs && node tests/readme-promises-test.mjs && node tests/setup-test.mjs && node tests/mcp-conformance-test.mjs && node tests/update-notice-test.mjs && node tests/mux-test.mjs && node tests/own-files-quiet-test.mjs",
95
95
  "test:extension": "node tests/extension-parity-test.mjs && node tests/extension-privacy-parity-test.mjs",
96
96
  "test:ceiling": "node tests/refused-visible-test.mjs && node tests/ceiling-no-data-loss-test.mjs",
97
97
  "test:mux": "node tests/mux-test.mjs",
98
+ "test:live": "node scripts/live-stranger.mjs",
98
99
  "test:identity": "node tests/identity-audit-test.mjs",
99
100
  "test:billing": "node tests/billing-test.mjs",
100
101
  "test:license": "node tests/hive-license-test.js",
package/sync.js CHANGED
@@ -64,6 +64,8 @@ const ALWAYS_IGNORE = [
64
64
  // to tell an authored edit from its own write after a restart (see SHADOW_FILE). It is
65
65
  // per-client by definition: syncing it would hand every peer a false ancestor.
66
66
  '.hive-shadow.json',
67
+ // ...and its write-then-rename temp, which exists for an instant but is the same file.
68
+ '.hive-shadow.json.tmp',
67
69
  // Names a PID on THIS machine. Syncing it would tell every peer their folder is locked by
68
70
  // a process that does not exist for them.
69
71
  '.hive-lock.json',
@@ -154,6 +156,10 @@ const AGENTS_FILE = 'HIVE_FOR_AGENTS.md' // how an AI agent opening this folder
154
156
  // Generated/coordination files are rendered locally from CRDT state — never
155
157
  // synced as ordinary files (that would cause echo loops / conflicts).
156
158
  const SKIP = new Set([BOARD_FILE, CHAT_FILE, TASKS_FILE, CONFIG_FILE, ID_FILE, RULES_FILE, MEMBERS_FILE, CLAIMS_FILE, AGENTS_FILE])
159
+ // Files a client writes into its folder for ITSELF. They are ignored on purpose, so the "created
160
+ // here but is ignored" notice must never name them: on 27 Sep 2026 every agent joining a live room
161
+ // told the whole team about .hive-shadow.json, a file none of them had made.
162
+ const OWN_LOCAL = new Set([SHADOW_FILE, SHADOW_FILE + '.tmp', LOCK_FILE, '.hive-mcp-session.json', '.hive-id.json'])
157
163
 
158
164
  // Written into every room folder on sync (like the rules). An AI agent that opens
159
165
  // this project reads it to learn it's a Hivecode room and how to JOIN — via the
@@ -2476,7 +2482,7 @@ export function startSync({ relay = 'ws://localhost:1234', room = 'default', dir
2476
2482
  invisibleWarned.delete(r)
2477
2483
  }
2478
2484
  for (const r of ignoredRel) {
2479
- if (SKIP.has(r)) continue // control files are ours and are supposed to be invisible
2485
+ if (SKIP.has(r) || OWN_LOCAL.has(r)) continue // control files are ours and are supposed to be invisible
2480
2486
  if (preexisting.has(r)) continue // it was already here; nobody did this during the session
2481
2487
  if (invisibleWarned.has(r)) continue // once per path, not once per scan tick
2482
2488
  const holder = coordinator.sense(r)