@hivemindai/mcp-server 0.1.0 → 0.1.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 (52) hide show
  1. package/bin/hivemind.js +2 -0
  2. package/dist/__tests__/config.test.js +51 -7
  3. package/dist/__tests__/config.test.js.map +1 -1
  4. package/dist/__tests__/credentials.test.d.ts +2 -0
  5. package/dist/__tests__/credentials.test.d.ts.map +1 -0
  6. package/dist/__tests__/credentials.test.js +117 -0
  7. package/dist/__tests__/credentials.test.js.map +1 -0
  8. package/dist/__tests__/editor-config.test.d.ts +2 -0
  9. package/dist/__tests__/editor-config.test.d.ts.map +1 -0
  10. package/dist/__tests__/editor-config.test.js +109 -0
  11. package/dist/__tests__/editor-config.test.js.map +1 -0
  12. package/dist/__tests__/tools.test.js +2 -1
  13. package/dist/__tests__/tools.test.js.map +1 -1
  14. package/dist/cli/commands/login.d.ts +2 -0
  15. package/dist/cli/commands/login.d.ts.map +1 -0
  16. package/dist/cli/commands/login.js +95 -0
  17. package/dist/cli/commands/login.js.map +1 -0
  18. package/dist/cli/commands/logout.d.ts +2 -0
  19. package/dist/cli/commands/logout.d.ts.map +1 -0
  20. package/dist/cli/commands/logout.js +21 -0
  21. package/dist/cli/commands/logout.js.map +1 -0
  22. package/dist/cli/commands/status.d.ts +2 -0
  23. package/dist/cli/commands/status.d.ts.map +1 -0
  24. package/dist/cli/commands/status.js +45 -0
  25. package/dist/cli/commands/status.js.map +1 -0
  26. package/dist/cli/commands/whoami.d.ts +2 -0
  27. package/dist/cli/commands/whoami.d.ts.map +1 -0
  28. package/dist/cli/commands/whoami.js +14 -0
  29. package/dist/cli/commands/whoami.js.map +1 -0
  30. package/dist/cli/credentials.d.ts +12 -0
  31. package/dist/cli/credentials.d.ts.map +1 -0
  32. package/dist/cli/credentials.js +42 -0
  33. package/dist/cli/credentials.js.map +1 -0
  34. package/dist/cli/editor-config.d.ts +9 -0
  35. package/dist/cli/editor-config.d.ts.map +1 -0
  36. package/dist/cli/editor-config.js +105 -0
  37. package/dist/cli/editor-config.js.map +1 -0
  38. package/dist/cli/index.d.ts +2 -0
  39. package/dist/cli/index.d.ts.map +1 -0
  40. package/dist/cli/index.js +40 -0
  41. package/dist/cli/index.js.map +1 -0
  42. package/dist/config.d.ts +2 -1
  43. package/dist/config.d.ts.map +1 -1
  44. package/dist/config.js +16 -6
  45. package/dist/config.js.map +1 -1
  46. package/dist/http-db.d.ts +8 -0
  47. package/dist/http-db.d.ts.map +1 -0
  48. package/dist/http-db.js +128 -0
  49. package/dist/http-db.js.map +1 -0
  50. package/dist/index.js +18 -5
  51. package/dist/index.js.map +1 -1
  52. package/package.json +7 -4
@@ -0,0 +1,45 @@
1
+ import { HivemindClient } from "@hivemindai/sdk-ts";
2
+ import { readCredentials } from "../credentials.js";
3
+ export async function status() {
4
+ const creds = readCredentials();
5
+ if (!creds) {
6
+ console.log("Not logged in. Run `hivemind login` to authenticate.");
7
+ process.exit(1);
8
+ }
9
+ const client = new HivemindClient({
10
+ apiKey: creds.api_key,
11
+ baseUrl: creds.api_url,
12
+ });
13
+ try {
14
+ const res = await client.status();
15
+ console.log(`Project: ${creds.project_name}\n`);
16
+ console.log(`Events (24h): ${res.event_count_24h}`);
17
+ console.log(`Last event: ${res.last_event_at ?? "none"}`);
18
+ if (res.active_tasks.length > 0) {
19
+ console.log(`\nActive tasks (${res.active_tasks.length}):`);
20
+ for (const task of res.active_tasks) {
21
+ const summary = task.data.summary ?? task.channel;
22
+ console.log(` - ${summary}`);
23
+ }
24
+ }
25
+ if (res.blockers.length > 0) {
26
+ console.log(`\nBlockers (${res.blockers.length}):`);
27
+ for (const blocker of res.blockers) {
28
+ const summary = blocker.data.summary ?? blocker.channel;
29
+ console.log(` - ${summary}`);
30
+ }
31
+ }
32
+ if (res.recent_completions.length > 0) {
33
+ console.log(`\nRecent completions (${res.recent_completions.length}):`);
34
+ for (const c of res.recent_completions) {
35
+ const summary = c.data.summary ?? c.channel;
36
+ console.log(` - ${summary}`);
37
+ }
38
+ }
39
+ }
40
+ catch (err) {
41
+ console.error(`Failed to fetch status: ${err instanceof Error ? err.message : String(err)}`);
42
+ process.exit(1);
43
+ }
44
+ }
45
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAEhC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;QAChC,MAAM,EAAE,KAAK,CAAC,OAAO;QACrB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;QAElC,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,aAAa,IAAI,MAAM,EAAE,CAAC,CAAC;QAE7D,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC;YAC5D,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAI,IAAI,CAAC,IAAgC,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;gBAC/E,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;YACpD,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACnC,MAAM,OAAO,GAAI,OAAO,CAAC,IAAgC,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;gBACrF,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,IAAI,GAAG,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,CAAC;YACxE,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC;gBACvC,MAAM,OAAO,GAAI,CAAC,CAAC,IAAgC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;gBACzE,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function whoami(): Promise<void>;
2
+ //# sourceMappingURL=whoami.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/whoami.ts"],"names":[],"mappings":"AAEA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAc5C"}
@@ -0,0 +1,14 @@
1
+ import { readCredentials } from "../credentials.js";
2
+ export async function whoami() {
3
+ const creds = readCredentials();
4
+ if (!creds) {
5
+ console.log("Not logged in. Run `hivemind login` to authenticate.");
6
+ process.exit(1);
7
+ }
8
+ const keyPrefix = creds.api_key.slice(0, 12) + "...";
9
+ console.log(`Email: ${creds.email}`);
10
+ console.log(`Project: ${creds.project_name} (${creds.project_id})`);
11
+ console.log(`API URL: ${creds.api_url}`);
12
+ console.log(`API Key: ${keyPrefix}`);
13
+ }
14
+ //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/cli/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAEhC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;IAErD,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface Credentials {
2
+ api_key: string;
3
+ api_url: string;
4
+ project_id: string;
5
+ project_name: string;
6
+ email: string;
7
+ }
8
+ export declare function getCredentialsPath(): string;
9
+ export declare function readCredentials(): Credentials | null;
10
+ export declare function writeCredentials(creds: Credentials): void;
11
+ export declare function deleteCredentials(): boolean;
12
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CAmBpD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAKzD;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAO3C"}
@@ -0,0 +1,42 @@
1
+ import { readFileSync, writeFileSync, unlinkSync, mkdirSync, chmodSync } from "node:fs";
2
+ import { join, dirname } from "node:path";
3
+ import { homedir } from "node:os";
4
+ const CREDENTIALS_PATH = join(homedir(), ".hivemind", "credentials.json");
5
+ export function getCredentialsPath() {
6
+ return CREDENTIALS_PATH;
7
+ }
8
+ export function readCredentials() {
9
+ try {
10
+ const raw = readFileSync(CREDENTIALS_PATH, "utf-8");
11
+ const parsed = JSON.parse(raw);
12
+ if (!parsed.api_key || typeof parsed.api_key !== "string") {
13
+ return null;
14
+ }
15
+ return {
16
+ api_key: parsed.api_key,
17
+ api_url: parsed.api_url ?? "https://api.hivemind.dev",
18
+ project_id: parsed.project_id ?? "",
19
+ project_name: parsed.project_name ?? "",
20
+ email: parsed.email ?? "",
21
+ };
22
+ }
23
+ catch {
24
+ return null;
25
+ }
26
+ }
27
+ export function writeCredentials(creds) {
28
+ const dir = dirname(CREDENTIALS_PATH);
29
+ mkdirSync(dir, { recursive: true });
30
+ writeFileSync(CREDENTIALS_PATH, JSON.stringify(creds, null, 2) + "\n", "utf-8");
31
+ chmodSync(CREDENTIALS_PATH, 0o600);
32
+ }
33
+ export function deleteCredentials() {
34
+ try {
35
+ unlinkSync(CREDENTIALS_PATH);
36
+ return true;
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ }
42
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAUlC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;AAE1E,MAAM,UAAU,kBAAkB;IAChC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE/B,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,0BAA0B;YACrD,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;YACnC,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE;YACvC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;SAC1B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAkB;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAChF,SAAS,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC;QACH,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare function configureMcpEditors(): {
2
+ claudeCode: boolean;
3
+ cursor: boolean;
4
+ };
5
+ export declare function removeMcpEditorConfigs(): {
6
+ claudeCode: boolean;
7
+ cursor: boolean;
8
+ };
9
+ //# sourceMappingURL=editor-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-config.d.ts","sourceRoot":"","sources":["../../src/cli/editor-config.ts"],"names":[],"mappings":"AAgEA,wBAAgB,mBAAmB,IAAI;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CA6B9E;AAED,wBAAgB,sBAAsB,IAAI;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CA4BjF"}
@@ -0,0 +1,105 @@
1
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs";
2
+ import { join, dirname } from "node:path";
3
+ import { homedir } from "node:os";
4
+ function readJsonFile(path) {
5
+ try {
6
+ return JSON.parse(readFileSync(path, "utf-8"));
7
+ }
8
+ catch {
9
+ return {};
10
+ }
11
+ }
12
+ function writeJsonFile(path, data) {
13
+ mkdirSync(dirname(path), { recursive: true });
14
+ writeFileSync(path, JSON.stringify(data, null, 2) + "\n", "utf-8");
15
+ }
16
+ function getMcpServerEntry() {
17
+ return {
18
+ command: "npx",
19
+ args: ["-y", "@hivemindai/mcp-server"],
20
+ };
21
+ }
22
+ function getClaudeConfigPath() {
23
+ return join(homedir(), ".claude.json");
24
+ }
25
+ function getCursorConfigPath() {
26
+ return join(homedir(), ".cursor", "mcp.json");
27
+ }
28
+ function getCursorDir() {
29
+ return join(homedir(), ".cursor");
30
+ }
31
+ /**
32
+ * Remove hivemind MCP entries with hardcoded HIVEMIND_API_KEY env vars
33
+ * from project-specific configs in ~/.claude.json. These conflict with
34
+ * the credentials file approach used by `hivemind login`.
35
+ */
36
+ function cleanProjectSpecificConfigs(config) {
37
+ for (const [key, value] of Object.entries(config)) {
38
+ if (!value || typeof value !== "object" || key === "mcpServers")
39
+ continue;
40
+ const block = value;
41
+ // Look for project-specific mcpServers blocks (keyed by path)
42
+ const servers = block.mcpServers;
43
+ if (servers && typeof servers === "object" && servers.hivemind) {
44
+ const entry = servers.hivemind;
45
+ const env = entry.env;
46
+ if (env && "HIVEMIND_API_KEY" in env) {
47
+ delete servers.hivemind;
48
+ }
49
+ }
50
+ }
51
+ }
52
+ export function configureMcpEditors() {
53
+ const result = { claudeCode: false, cursor: false };
54
+ const entry = getMcpServerEntry();
55
+ // Claude Code: ~/.claude.json
56
+ const claudePath = getClaudeConfigPath();
57
+ const claudeConfig = readJsonFile(claudePath);
58
+ if (!claudeConfig.mcpServers || typeof claudeConfig.mcpServers !== "object") {
59
+ claudeConfig.mcpServers = {};
60
+ }
61
+ claudeConfig.mcpServers.hivemind = entry;
62
+ // Remove project-specific entries with stale hardcoded API keys
63
+ cleanProjectSpecificConfigs(claudeConfig);
64
+ writeJsonFile(claudePath, claudeConfig);
65
+ result.claudeCode = true;
66
+ // Cursor: ~/.cursor/mcp.json (only if ~/.cursor/ exists)
67
+ if (existsSync(getCursorDir())) {
68
+ const cursorPath = getCursorConfigPath();
69
+ const cursorConfig = readJsonFile(cursorPath);
70
+ if (!cursorConfig.mcpServers || typeof cursorConfig.mcpServers !== "object") {
71
+ cursorConfig.mcpServers = {};
72
+ }
73
+ cursorConfig.mcpServers.hivemind = entry;
74
+ writeJsonFile(cursorPath, cursorConfig);
75
+ result.cursor = true;
76
+ }
77
+ return result;
78
+ }
79
+ export function removeMcpEditorConfigs() {
80
+ const result = { claudeCode: false, cursor: false };
81
+ // Claude Code
82
+ const claudePath = getClaudeConfigPath();
83
+ if (existsSync(claudePath)) {
84
+ const claudeConfig = readJsonFile(claudePath);
85
+ const servers = claudeConfig.mcpServers;
86
+ if (servers && "hivemind" in servers) {
87
+ delete servers.hivemind;
88
+ writeJsonFile(claudePath, claudeConfig);
89
+ result.claudeCode = true;
90
+ }
91
+ }
92
+ // Cursor
93
+ const cursorPath = getCursorConfigPath();
94
+ if (existsSync(cursorPath)) {
95
+ const cursorConfig = readJsonFile(cursorPath);
96
+ const servers = cursorConfig.mcpServers;
97
+ if (servers && "hivemind" in servers) {
98
+ delete servers.hivemind;
99
+ writeJsonFile(cursorPath, cursorConfig);
100
+ result.cursor = true;
101
+ }
102
+ }
103
+ return result;
104
+ }
105
+ //# sourceMappingURL=editor-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-config.js","sourceRoot":"","sources":["../../src/cli/editor-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import { login } from "./commands/login.js";
2
+ import { whoami } from "./commands/whoami.js";
3
+ import { logout } from "./commands/logout.js";
4
+ import { status } from "./commands/status.js";
5
+ const command = process.argv[2];
6
+ const commands = {
7
+ login,
8
+ whoami,
9
+ logout,
10
+ status,
11
+ };
12
+ async function main() {
13
+ if (!command || command === "--help" || command === "-h") {
14
+ console.log(`
15
+ Usage: hivemind <command>
16
+
17
+ Commands:
18
+ login Sign in via browser and configure editors
19
+ whoami Show current authentication info
20
+ logout Remove stored credentials and editor configs
21
+ status Show project status (active tasks, blockers)
22
+
23
+ Options:
24
+ --help Show this help message
25
+ `.trim());
26
+ process.exit(0);
27
+ }
28
+ const handler = commands[command];
29
+ if (!handler) {
30
+ console.error(`Unknown command: ${command}`);
31
+ console.error(`Run "hivemind --help" for usage.`);
32
+ process.exit(1);
33
+ }
34
+ await handler();
35
+ }
36
+ main().catch((err) => {
37
+ console.error(err instanceof Error ? err.message : String(err));
38
+ process.exit(1);
39
+ });
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;AAE9C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,MAAM,QAAQ,GAAwC;IACpD,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;CAWf,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/config.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export interface ServerConfig {
2
2
  mode: "local" | "cloud";
3
- databaseUrl?: string;
3
+ apiKey?: string;
4
+ apiUrl?: string;
4
5
  sqlitePath?: string;
5
6
  projectId: string;
6
7
  source: {
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAcD,wBAAgB,UAAU,IAAI,YAAY,CAkCzC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAcD,wBAAgB,UAAU,IAAI,YAAY,CA4CzC"}
package/dist/config.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { homedir } from "node:os";
2
2
  import { join } from "node:path";
3
+ import { readCredentials } from "./cli/credentials.js";
3
4
  function detectTool() {
4
5
  if (process.env.CURSOR_SESSION)
5
6
  return "cursor";
@@ -23,15 +24,24 @@ export function loadConfig() {
23
24
  },
24
25
  };
25
26
  if (apiKey) {
26
- // Cloud mode
27
- const databaseUrl = process.env.DATABASE_URL;
28
- if (!databaseUrl) {
29
- throw new Error("DATABASE_URL environment variable is required in cloud mode (HIVEMIND_API_KEY is set)");
30
- }
27
+ // Cloud mode — connect via REST API (env var takes priority)
28
+ const apiUrl = process.env.HIVEMIND_API_URL ?? "http://localhost:3001";
31
29
  return {
32
30
  ...base,
33
31
  mode: "cloud",
34
- databaseUrl,
32
+ apiKey,
33
+ apiUrl,
34
+ };
35
+ }
36
+ // Credentials file fallback (from `hivemind login`)
37
+ const creds = readCredentials();
38
+ if (creds?.api_key) {
39
+ return {
40
+ ...base,
41
+ mode: "cloud",
42
+ apiKey: creds.api_key,
43
+ apiUrl: creds.api_url,
44
+ projectId: creds.project_id || base.projectId,
35
45
  };
36
46
  }
37
47
  // Local mode — SQLite
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAcjC,SAAS,UAAU;IACjB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,OAAO,QAAQ,CAAC;IAChD,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;QAAE,OAAO,aAAa,CAAC;IAClD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAE5C,MAAM,IAAI,GAAG;QACX,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,SAAS;QACvD,MAAM,EAAE;YACN,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,cAAc;YACnD,IAAI,EAAE,UAAU,EAAE;YAClB,OAAO,EAAE,iBAAiB,EAAE;SAC7B;KACF,CAAC;IAEF,IAAI,MAAM,EAAE,CAAC;QACX,aAAa;QACb,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;QAC3G,CAAC;QAED,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,OAAO;YACb,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAE7F,OAAO;QACL,GAAG,IAAI;QACP,IAAI,EAAE,OAAO;QACb,UAAU;KACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAevD,SAAS,UAAU;IACjB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,OAAO,QAAQ,CAAC;IAChD,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;QAAE,OAAO,aAAa,CAAC;IAClD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAE5C,MAAM,IAAI,GAAG;QACX,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,SAAS;QACvD,MAAM,EAAE;YACN,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,cAAc;YACnD,IAAI,EAAE,UAAU,EAAE;YAClB,OAAO,EAAE,iBAAiB,EAAE;SAC7B;KACF,CAAC;IAEF,IAAI,MAAM,EAAE,CAAC;QACX,6DAA6D;QAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,uBAAuB,CAAC;QAEvE,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,OAAO;YACb,MAAM;YACN,MAAM;SACP,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC;QACnB,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,KAAK,CAAC,OAAO;YACrB,MAAM,EAAE,KAAK,CAAC,OAAO;YACrB,SAAS,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS;SAC9C,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAE7F,OAAO;QACL,GAAG,IAAI;QACP,IAAI,EAAE,OAAO;QACb,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { HivemindClient } from "@hivemindai/sdk-ts";
2
+ import type { HivemindDB } from "@hivemindai/core";
3
+ /**
4
+ * Implements HivemindDB by delegating to the REST API via the TypeScript SDK.
5
+ * Used in cloud mode so the MCP server doesn't need direct database access.
6
+ */
7
+ export declare function createHttpDb(client: HivemindClient): HivemindDB;
8
+ //# sourceMappingURL=http-db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-db.d.ts","sourceRoot":"","sources":["../src/http-db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EACV,UAAU,EAQX,MAAM,kBAAkB,CAAC;AAE1B;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,UAAU,CAyI/D"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Implements HivemindDB by delegating to the REST API via the TypeScript SDK.
3
+ * Used in cloud mode so the MCP server doesn't need direct database access.
4
+ */
5
+ export function createHttpDb(client) {
6
+ return {
7
+ async insertEvent(params) {
8
+ const result = await client.publish({
9
+ channel: params.channel,
10
+ event_type: params.event_type,
11
+ source: params.source,
12
+ data: params.data,
13
+ confidence: params.confidence,
14
+ });
15
+ // Return a minimal HivemindEvent — the REST API only returns id + created_at
16
+ return {
17
+ id: result.id,
18
+ project_id: params.project_id,
19
+ channel: params.channel,
20
+ event_type: params.event_type,
21
+ source: params.source,
22
+ data: params.data,
23
+ confidence: params.confidence ?? null,
24
+ embedding: null,
25
+ created_at: new Date(result.created_at),
26
+ };
27
+ },
28
+ async getEventById(_projectId, eventId) {
29
+ try {
30
+ const event = await client.getEvent(eventId);
31
+ return {
32
+ ...event,
33
+ confidence: event.confidence ?? null,
34
+ embedding: null,
35
+ created_at: new Date(event.created_at),
36
+ };
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ },
42
+ async queryEvents(params) {
43
+ const result = await client.query({
44
+ q: params.embedding ? undefined : undefined, // semantic search handled server-side
45
+ channel: params.channel,
46
+ event_type: params.event_type,
47
+ since: params.since,
48
+ until: params.until,
49
+ source_tool: params.source_tool,
50
+ limit: params.limit,
51
+ offset: params.offset,
52
+ });
53
+ return {
54
+ events: result.events.map((e) => ({
55
+ ...e,
56
+ confidence: e.confidence ?? null,
57
+ embedding: null,
58
+ created_at: new Date(e.created_at),
59
+ })),
60
+ total: result.total,
61
+ };
62
+ },
63
+ async acquireLock(params) {
64
+ const result = await client.lock(params.resource, {
65
+ agent: params.agent,
66
+ tool: params.tool,
67
+ ttl_seconds: params.ttl_seconds,
68
+ });
69
+ if (result.locked && result.lock) {
70
+ return {
71
+ locked: true,
72
+ lock: {
73
+ ...result.lock,
74
+ tool: result.lock.tool ?? null,
75
+ acquired_at: new Date(result.lock.acquired_at),
76
+ expires_at: new Date(result.lock.expires_at),
77
+ },
78
+ };
79
+ }
80
+ return {
81
+ locked: false,
82
+ held_by: result.held_by,
83
+ };
84
+ },
85
+ async releaseLock(_projectId, resource) {
86
+ const result = await client.unlock(resource);
87
+ return result.released;
88
+ },
89
+ async checkLock(_projectId, _resource) {
90
+ // REST API doesn't have a dedicated check-lock endpoint
91
+ // Return null — lock status is checked via acquire attempts
92
+ return null;
93
+ },
94
+ async getUnresolvedBlockers(_projectId, channel) {
95
+ const status = await client.status(channel);
96
+ return status.blockers.map((b) => ({
97
+ id: b.id,
98
+ channel: b.channel,
99
+ data: b.data,
100
+ source: b.source,
101
+ created_at: new Date(b.created_at),
102
+ }));
103
+ },
104
+ async getActiveStatus(_projectId, channel) {
105
+ const status = await client.status(channel);
106
+ return {
107
+ activeTasks: status.active_tasks.map((t) => ({
108
+ ...t,
109
+ created_at: new Date(t.created_at),
110
+ })),
111
+ recentCompletions: status.recent_completions.map((t) => ({
112
+ ...t,
113
+ created_at: new Date(t.created_at),
114
+ })),
115
+ blockers: status.blockers.map((b) => ({
116
+ ...b,
117
+ created_at: new Date(b.created_at),
118
+ })),
119
+ eventCount24h: status.event_count_24h,
120
+ lastEventAt: status.last_event_at ? new Date(status.last_event_at) : null,
121
+ };
122
+ },
123
+ async close() {
124
+ // No-op for HTTP client
125
+ },
126
+ };
127
+ }
128
+ //# sourceMappingURL=http-db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-db.js","sourceRoot":"","sources":["../src/http-db.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,8 +2,10 @@ import { mkdirSync } from "node:fs";
2
2
  import { dirname } from "node:path";
3
3
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
4
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
- import { createPgHivemindDB, createSqliteHivemindDB, createEmbeddingProvider, } from "@hivemindai/core";
5
+ import { createSqliteHivemindDB, createEmbeddingProvider, } from "@hivemindai/core";
6
+ import { HivemindClient } from "@hivemindai/sdk-ts";
6
7
  import { loadConfig } from "./config.js";
8
+ import { createHttpDb } from "./http-db.js";
7
9
  import { registerPublishTool } from "./tools/publish.js";
8
10
  import { registerQueryTool } from "./tools/query.js";
9
11
  import { registerSubscribeTool } from "./tools/subscribe.js";
@@ -12,14 +14,25 @@ import { registerLockTool } from "./tools/lock.js";
12
14
  import { registerBlockersTool } from "./tools/blockers.js";
13
15
  async function main() {
14
16
  const config = loadConfig();
15
- const embeddingProvider = await createEmbeddingProvider();
16
17
  let db;
18
+ let embeddingProvider;
17
19
  if (config.mode === "cloud") {
18
- const pg = createPgHivemindDB(config.databaseUrl);
19
- db = pg.db;
20
+ // Cloud mode: delegate everything to the REST API via HTTP.
21
+ // Embeddings are generated server-side, so we use a no-op provider.
22
+ const client = new HivemindClient({
23
+ apiKey: config.apiKey,
24
+ baseUrl: config.apiUrl,
25
+ });
26
+ db = createHttpDb(client);
27
+ embeddingProvider = {
28
+ generateEmbedding: async () => null,
29
+ generateEmbeddings: async (texts) => texts.map(() => null),
30
+ dimensions: 0,
31
+ };
20
32
  }
21
33
  else {
22
- // Ensure ~/.hivemind directory exists
34
+ // Local mode: SQLite with local embeddings
35
+ embeddingProvider = await createEmbeddingProvider();
23
36
  mkdirSync(dirname(config.sqlitePath), { recursive: true });
24
37
  db = createSqliteHivemindDB(config.sqlitePath, embeddingProvider.dimensions);
25
38
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,GAExB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,iBAAiB,GAAG,MAAM,uBAAuB,EAAE,CAAC;IAE1D,IAAI,EAAc,CAAC;IAEnB,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAY,CAAC,CAAC;QACnD,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IACb,CAAC;SAAM,CAAC;QACN,sCAAsC;QACtC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,UAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,EAAE,GAAG,sBAAsB,CAAC,MAAM,CAAC,UAAW,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC3D,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACzD,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAC1C,kBAAkB,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IACvC,gBAAgB,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IACrC,oBAAoB,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAEzC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,MAAM,CAAC,IAAI,UAAU,CAAC,CAAC;AACvF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@hivemindai/mcp-server",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "MCP server for Hivemind — persistent event log for AI agent coordination",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "bin": {
9
- "hivemind-mcp": "./bin/hivemind-mcp.js"
9
+ "hivemind-mcp": "./bin/hivemind-mcp.js",
10
+ "hivemind": "./bin/hivemind.js"
10
11
  },
11
12
  "files": [
12
13
  "dist",
@@ -22,9 +23,10 @@
22
23
  "cursor"
23
24
  ],
24
25
  "license": "MIT",
26
+ "mcpName": "io.github.gbram1/hivemind",
25
27
  "repository": {
26
28
  "type": "git",
27
- "url": "https://github.com/hivemind-dev/hivemind",
29
+ "url": "https://github.com/gbram1/hivemind",
28
30
  "directory": "packages/mcp-server"
29
31
  },
30
32
  "publishConfig": {
@@ -33,7 +35,8 @@
33
35
  "dependencies": {
34
36
  "@modelcontextprotocol/sdk": "^1.12.1",
35
37
  "zod": "^3.25.76",
36
- "@hivemindai/core": "0.1.0"
38
+ "@hivemindai/core": "0.1.0",
39
+ "@hivemindai/sdk-ts": "0.1.0"
37
40
  },
38
41
  "scripts": {
39
42
  "build": "tsc",