@hivemindai/mcp-server 0.2.7 → 0.2.8
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.
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +73 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/tools/publish.js +1 -1
- package/dist/tools/publish.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AA+CA,wBAAsB,IAAI,kBA6BzB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
const HIVEMIND_SECTION_START = "<!-- hivemind:start -->";
|
|
4
|
+
const HIVEMIND_SECTION_END = "<!-- hivemind:end -->";
|
|
5
|
+
const HIVEMIND_CLAUDE_MD = `${HIVEMIND_SECTION_START}
|
|
6
|
+
## Hivemind — Agent Coordination
|
|
7
|
+
|
|
8
|
+
This project uses [Hivemind](https://github.com/gbram1/hivemind) for multi-agent coordination. Hivemind is an MCP server that provides a shared event log so agents can discover what other agents have done.
|
|
9
|
+
|
|
10
|
+
### When to publish events
|
|
11
|
+
|
|
12
|
+
Publish to Hivemind automatically at these moments — do NOT wait for the user to ask:
|
|
13
|
+
|
|
14
|
+
- **Task completed**: After finishing a meaningful unit of work (feature, bug fix, refactor), publish a \`task.completed\` event with what was done, which files changed, and the approach taken.
|
|
15
|
+
- **Decision made**: When you choose between approaches (e.g., "chose JWT over sessions"), publish a \`decision.made\` event with the decision, rationale, and alternatives considered.
|
|
16
|
+
- **Blocker encountered**: When you're stuck or waiting on something, publish a \`task.blocked\` event describing the blocker.
|
|
17
|
+
- **Bug found**: When you discover a bug, publish a \`bug.found\` event with description, severity, and location.
|
|
18
|
+
- **Task started**: When beginning significant work, publish a \`task.created\` event so other agents know what's in progress.
|
|
19
|
+
|
|
20
|
+
### When NOT to publish
|
|
21
|
+
|
|
22
|
+
Do not publish routine activity — file reads, intermediate reasoning, retry attempts, lint fixes, or "still working on it" updates. Publish **outcomes and decisions**, not process.
|
|
23
|
+
|
|
24
|
+
### When to query
|
|
25
|
+
|
|
26
|
+
- **Before starting a new task**: Call \`hivemind_query\` or \`hivemind_status\` to see what other agents have done recently.
|
|
27
|
+
- **Before modifying shared files**: Check \`hivemind_lock\` to see if another agent is working on the same file.
|
|
28
|
+
- **When context seems stale**: Query for recent decisions or completions in the relevant channel.
|
|
29
|
+
|
|
30
|
+
### Channels
|
|
31
|
+
|
|
32
|
+
Use descriptive channel names that match your project areas: \`backend\`, \`frontend\`, \`infra\`, \`qa\`, \`docs\`, etc. Use \`general\` as the default.
|
|
33
|
+
|
|
34
|
+
### Example
|
|
35
|
+
|
|
36
|
+
After implementing a login feature:
|
|
37
|
+
\`\`\`
|
|
38
|
+
hivemind_publish(
|
|
39
|
+
channel: "backend",
|
|
40
|
+
event_type: "task.completed",
|
|
41
|
+
data: {"description": "Implemented JWT authentication", "files_changed": ["src/auth.ts", "src/middleware.ts"], "approach": "RS256 signing with refresh tokens", "tests_passing": true}
|
|
42
|
+
)
|
|
43
|
+
\`\`\`
|
|
44
|
+
${HIVEMIND_SECTION_END}`;
|
|
45
|
+
export async function init() {
|
|
46
|
+
const cwd = process.cwd();
|
|
47
|
+
const claudeMdPath = join(cwd, "CLAUDE.md");
|
|
48
|
+
console.log("Hivemind Init — Add agent coordination instructions to CLAUDE.md\n");
|
|
49
|
+
if (existsSync(claudeMdPath)) {
|
|
50
|
+
const existing = readFileSync(claudeMdPath, "utf-8");
|
|
51
|
+
// Check if Hivemind section already exists
|
|
52
|
+
if (existing.includes(HIVEMIND_SECTION_START)) {
|
|
53
|
+
// Replace existing section
|
|
54
|
+
const before = existing.slice(0, existing.indexOf(HIVEMIND_SECTION_START));
|
|
55
|
+
const after = existing.slice(existing.indexOf(HIVEMIND_SECTION_END) + HIVEMIND_SECTION_END.length);
|
|
56
|
+
writeFileSync(claudeMdPath, before + HIVEMIND_CLAUDE_MD + after);
|
|
57
|
+
console.log("Updated existing Hivemind section in CLAUDE.md");
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Append to existing file
|
|
61
|
+
writeFileSync(claudeMdPath, existing.trimEnd() + "\n\n" + HIVEMIND_CLAUDE_MD + "\n");
|
|
62
|
+
console.log("Added Hivemind section to existing CLAUDE.md");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Create new CLAUDE.md
|
|
67
|
+
writeFileSync(claudeMdPath, `# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n${HIVEMIND_CLAUDE_MD}\n`);
|
|
68
|
+
console.log("Created CLAUDE.md with Hivemind instructions");
|
|
69
|
+
}
|
|
70
|
+
console.log(`\nDone! Agents will now auto-publish events to Hivemind.`);
|
|
71
|
+
console.log(`Edit ${claudeMdPath} to customize channels and behavior.`);
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;AACzD,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAErD,MAAM,kBAAkB,GAAG,GAAG,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuClD,oBAAoB,EAAE,CAAC;AAEzB,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAElF,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAErD,2CAA2C;QAC3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC9C,2BAA2B;YAC3B,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC3E,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACnG,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB,GAAG,KAAK,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,0BAA0B;YAC1B,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAAC,CAAC;YACrF,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,uBAAuB;QACvB,aAAa,CAAC,YAAY,EAAE,4HAA4H,kBAAkB,IAAI,CAAC,CAAC;QAChL,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,QAAQ,YAAY,sCAAsC,CAAC,CAAC;AAC1E,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import { whoami } from "./commands/whoami.js";
|
|
|
3
3
|
import { logout } from "./commands/logout.js";
|
|
4
4
|
import { status } from "./commands/status.js";
|
|
5
5
|
import { switchOrg } from "./commands/switch.js";
|
|
6
|
+
import { init } from "./commands/init.js";
|
|
6
7
|
const command = process.argv[2];
|
|
7
8
|
const commands = {
|
|
8
9
|
login,
|
|
@@ -10,6 +11,7 @@ const commands = {
|
|
|
10
11
|
logout,
|
|
11
12
|
status,
|
|
12
13
|
switch: switchOrg,
|
|
14
|
+
init,
|
|
13
15
|
};
|
|
14
16
|
async function main() {
|
|
15
17
|
if (!command || command === "--help" || command === "-h") {
|
|
@@ -22,6 +24,7 @@ Commands:
|
|
|
22
24
|
logout Remove stored credentials and editor configs
|
|
23
25
|
status Show project status (active tasks, blockers)
|
|
24
26
|
switch Switch to a different organization
|
|
27
|
+
init Add Hivemind instructions to CLAUDE.md for auto-publishing
|
|
25
28
|
|
|
26
29
|
Options:
|
|
27
30
|
--help Show this help message
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,MAAM,QAAQ,GAAwC;IACpD,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM,EAAE,SAAS;IACjB,IAAI;CACL,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;CAaf,CAAC,IAAI,EAAE,CAAC,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,EAAE,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/tools/publish.js
CHANGED
|
@@ -25,7 +25,7 @@ export async function handlePublish(db, config, params, embeddingProvider, creat
|
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
export function registerPublishTool(server, db, config, embeddingProvider, createScopedDb) {
|
|
28
|
-
server.tool("hivemind_publish", "Publish an event to a
|
|
28
|
+
server.tool("hivemind_publish", "Publish an event to the Hivemind event log. Call this automatically when you: complete a task, make an architectural decision, encounter a blocker, discover a bug, or start significant work. Publish outcomes and decisions, not routine progress like file reads or intermediate reasoning.", {
|
|
29
29
|
channel: z.string().min(1).max(100).describe("Channel name (e.g. 'backend', 'qa', 'deploy')"),
|
|
30
30
|
event_type: z.string().min(1).max(100).describe("Event type (e.g. 'task.completed', 'decision.made')"),
|
|
31
31
|
data: z.string().describe("JSON string of event data payload"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/tools/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,eAAe,GAGhB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAc,EACd,MAAoB,EACpB,MAOC,EACD,iBAAoC,EACpC,cAAsE;IAEtE,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7H,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAA4B,CAAC;IAChE,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAClF,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;IAE7B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC;QACvC,EAAE;QACF,UAAU,EAAE,MAAM,CAAC,SAAS;QAC5B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI;QACJ,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;QACrC,SAAS;KACV,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,oBAAoB,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,UAAU,EAAE;aAC5E;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAiB,EACjB,EAAc,EACd,MAAoB,EACpB,iBAAoC,EACpC,cAAsE;IAEtE,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/tools/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,eAAe,GAGhB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAc,EACd,MAAoB,EACpB,MAOC,EACD,iBAAoC,EACpC,cAAsE;IAEtE,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7H,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAA4B,CAAC;IAChE,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAClF,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;IAE7B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC;QACvC,EAAE;QACF,UAAU,EAAE,MAAM,CAAC,SAAS;QAC5B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI;QACJ,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;QACrC,SAAS;KACV,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,oBAAoB,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,UAAU,EAAE;aAC5E;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAiB,EACjB,EAAc,EACd,MAAoB,EACpB,iBAAoC,EACpC,cAAsE;IAEtE,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,gSAAgS,EAChS;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QAC7F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,qDAAqD,CAAC;QACtG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC9D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAChF,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;QACpH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6FAA6F,CAAC;KACpI,EACD,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,cAAc,CAAC,CACvF,CAAC;AACJ,CAAC"}
|