@sesamespace/hivemind 0.1.0

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 (110) hide show
  1. package/README.md +86 -0
  2. package/config/TEAM-CHARTER.md +87 -0
  3. package/config/default.toml +39 -0
  4. package/dist/__tests__/fleet-integration.test.d.ts +9 -0
  5. package/dist/__tests__/fleet-integration.test.d.ts.map +1 -0
  6. package/dist/__tests__/fleet-integration.test.js +201 -0
  7. package/dist/__tests__/fleet-integration.test.js.map +1 -0
  8. package/dist/__tests__/fleet.test.d.ts +7 -0
  9. package/dist/__tests__/fleet.test.d.ts.map +1 -0
  10. package/dist/__tests__/fleet.test.js +171 -0
  11. package/dist/__tests__/fleet.test.js.map +1 -0
  12. package/dist/__tests__/integration.test.d.ts +2 -0
  13. package/dist/__tests__/integration.test.d.ts.map +1 -0
  14. package/dist/__tests__/integration.test.js +348 -0
  15. package/dist/__tests__/integration.test.js.map +1 -0
  16. package/dist/agent.d.ts +27 -0
  17. package/dist/agent.d.ts.map +1 -0
  18. package/dist/agent.js +217 -0
  19. package/dist/agent.js.map +1 -0
  20. package/dist/commands/fleet.d.ts +13 -0
  21. package/dist/commands/fleet.d.ts.map +1 -0
  22. package/dist/commands/fleet.js +193 -0
  23. package/dist/commands/fleet.js.map +1 -0
  24. package/dist/commands/init.d.ts +2 -0
  25. package/dist/commands/init.d.ts.map +1 -0
  26. package/dist/commands/init.js +170 -0
  27. package/dist/commands/init.js.map +1 -0
  28. package/dist/commands/start.d.ts +2 -0
  29. package/dist/commands/start.d.ts.map +1 -0
  30. package/dist/commands/start.js +39 -0
  31. package/dist/commands/start.js.map +1 -0
  32. package/dist/config.d.ts +44 -0
  33. package/dist/config.d.ts.map +1 -0
  34. package/dist/config.js +73 -0
  35. package/dist/config.js.map +1 -0
  36. package/dist/context.d.ts +50 -0
  37. package/dist/context.d.ts.map +1 -0
  38. package/dist/context.js +153 -0
  39. package/dist/context.js.map +1 -0
  40. package/dist/fleet/fleet-manager.d.ts +86 -0
  41. package/dist/fleet/fleet-manager.d.ts.map +1 -0
  42. package/dist/fleet/fleet-manager.js +298 -0
  43. package/dist/fleet/fleet-manager.js.map +1 -0
  44. package/dist/fleet/memory-sync.d.ts +91 -0
  45. package/dist/fleet/memory-sync.d.ts.map +1 -0
  46. package/dist/fleet/memory-sync.js +292 -0
  47. package/dist/fleet/memory-sync.js.map +1 -0
  48. package/dist/fleet/primary-client.d.ts +49 -0
  49. package/dist/fleet/primary-client.d.ts.map +1 -0
  50. package/dist/fleet/primary-client.js +222 -0
  51. package/dist/fleet/primary-client.js.map +1 -0
  52. package/dist/fleet/worker-protocol.d.ts +125 -0
  53. package/dist/fleet/worker-protocol.d.ts.map +1 -0
  54. package/dist/fleet/worker-protocol.js +27 -0
  55. package/dist/fleet/worker-protocol.js.map +1 -0
  56. package/dist/fleet/worker-server.d.ts +53 -0
  57. package/dist/fleet/worker-server.d.ts.map +1 -0
  58. package/dist/fleet/worker-server.js +191 -0
  59. package/dist/fleet/worker-server.js.map +1 -0
  60. package/dist/index.d.ts +26 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +16 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/llm-client.d.ts +24 -0
  65. package/dist/llm-client.d.ts.map +1 -0
  66. package/dist/llm-client.js +40 -0
  67. package/dist/llm-client.js.map +1 -0
  68. package/dist/main.d.ts +3 -0
  69. package/dist/main.d.ts.map +1 -0
  70. package/dist/main.js +41 -0
  71. package/dist/main.js.map +1 -0
  72. package/dist/memory-client.d.ts +88 -0
  73. package/dist/memory-client.d.ts.map +1 -0
  74. package/dist/memory-client.js +185 -0
  75. package/dist/memory-client.js.map +1 -0
  76. package/dist/pipeline.d.ts +2 -0
  77. package/dist/pipeline.d.ts.map +1 -0
  78. package/dist/pipeline.js +125 -0
  79. package/dist/pipeline.js.map +1 -0
  80. package/dist/prompt.d.ts +6 -0
  81. package/dist/prompt.d.ts.map +1 -0
  82. package/dist/prompt.js +75 -0
  83. package/dist/prompt.js.map +1 -0
  84. package/dist/sesame.d.ts +33 -0
  85. package/dist/sesame.d.ts.map +1 -0
  86. package/dist/sesame.js +67 -0
  87. package/dist/sesame.js.map +1 -0
  88. package/dist/start.d.ts +3 -0
  89. package/dist/start.d.ts.map +1 -0
  90. package/dist/start.js +20 -0
  91. package/dist/start.js.map +1 -0
  92. package/dist/task-engine.d.ts +32 -0
  93. package/dist/task-engine.d.ts.map +1 -0
  94. package/dist/task-engine.js +80 -0
  95. package/dist/task-engine.js.map +1 -0
  96. package/dist/worker.d.ts +73 -0
  97. package/dist/worker.d.ts.map +1 -0
  98. package/dist/worker.js +279 -0
  99. package/dist/worker.js.map +1 -0
  100. package/install.sh +186 -0
  101. package/package.json +36 -0
  102. package/packages/memory/Cargo.lock +6480 -0
  103. package/packages/memory/Cargo.toml +21 -0
  104. package/packages/memory/src/src/context.rs +179 -0
  105. package/packages/memory/src/src/embeddings.rs +51 -0
  106. package/packages/memory/src/src/main.rs +626 -0
  107. package/packages/memory/src/src/promotion.rs +637 -0
  108. package/packages/memory/src/src/scoring.rs +131 -0
  109. package/packages/memory/src/src/store.rs +460 -0
  110. package/packages/memory/src/src/tasks.rs +321 -0
@@ -0,0 +1,13 @@
1
+ /**
2
+ * CLI commands for fleet management.
3
+ *
4
+ * Usage:
5
+ * hivemind fleet status — Show fleet dashboard
6
+ * hivemind fleet add-worker <url> — Register a worker by URL
7
+ * hivemind fleet remove-worker <worker-id> — Remove a worker from the fleet
8
+ * hivemind fleet assign <worker-id> <context> — Assign a context to a worker
9
+ * hivemind fleet migrate <context> <worker-id> — Migrate a context to another worker
10
+ * hivemind fleet discover <url1> [url2] ... — Probe URLs for workers
11
+ */
12
+ export declare function runFleetCommand(args: string[]): Promise<void>;
13
+ //# sourceMappingURL=fleet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleet.d.ts","sourceRoot":"","sources":["../../src/commands/fleet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqEH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgHnE"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * CLI commands for fleet management.
3
+ *
4
+ * Usage:
5
+ * hivemind fleet status — Show fleet dashboard
6
+ * hivemind fleet add-worker <url> — Register a worker by URL
7
+ * hivemind fleet remove-worker <worker-id> — Remove a worker from the fleet
8
+ * hivemind fleet assign <worker-id> <context> — Assign a context to a worker
9
+ * hivemind fleet migrate <context> <worker-id> — Migrate a context to another worker
10
+ * hivemind fleet discover <url1> [url2] ... — Probe URLs for workers
11
+ */
12
+ import { FleetManager } from "@hivemind/runtime";
13
+ function formatUptime(seconds) {
14
+ if (seconds == null)
15
+ return "—";
16
+ if (seconds < 60)
17
+ return `${seconds}s`;
18
+ if (seconds < 3600)
19
+ return `${Math.floor(seconds / 60)}m`;
20
+ const h = Math.floor(seconds / 3600);
21
+ const m = Math.floor((seconds % 3600) / 60);
22
+ return `${h}h ${m}m`;
23
+ }
24
+ function formatHealth(status) {
25
+ switch (status) {
26
+ case "healthy": return "OK";
27
+ case "degraded": return "DEGRADED";
28
+ case "unreachable": return "DOWN";
29
+ default: return status.toUpperCase();
30
+ }
31
+ }
32
+ function printDashboard(dashboard) {
33
+ console.log("\n=== Hivemind Fleet ===\n");
34
+ console.log(`Workers: ${dashboard.total_workers} (${dashboard.healthy} healthy, ${dashboard.degraded} degraded, ${dashboard.unreachable} unreachable)`);
35
+ console.log(`Contexts assigned: ${dashboard.total_contexts}`);
36
+ if (dashboard.unassigned_contexts.length > 0) {
37
+ console.log(`Unassigned contexts: ${dashboard.unassigned_contexts.join(", ")}`);
38
+ }
39
+ console.log("");
40
+ if (dashboard.workers.length === 0) {
41
+ console.log("No workers registered. Use 'fleet add-worker <url>' to add one.");
42
+ return;
43
+ }
44
+ // Table header
45
+ const cols = { id: 12, url: 30, health: 8, activity: 10, contexts: 25, task: 20, uptime: 8 };
46
+ const header = [
47
+ "ID".padEnd(cols.id),
48
+ "URL".padEnd(cols.url),
49
+ "HEALTH".padEnd(cols.health),
50
+ "ACTIVITY".padEnd(cols.activity),
51
+ "CONTEXTS".padEnd(cols.contexts),
52
+ "TASK".padEnd(cols.task),
53
+ "UPTIME".padEnd(cols.uptime),
54
+ ].join(" ");
55
+ console.log(header);
56
+ console.log("-".repeat(header.length));
57
+ for (const w of dashboard.workers) {
58
+ const row = [
59
+ w.id.padEnd(cols.id),
60
+ w.url.slice(0, cols.url).padEnd(cols.url),
61
+ formatHealth(w.health).padEnd(cols.health),
62
+ w.activity.padEnd(cols.activity),
63
+ (w.contexts.join(", ") || "—").slice(0, cols.contexts).padEnd(cols.contexts),
64
+ (w.current_task ?? "—").slice(0, cols.task).padEnd(cols.task),
65
+ formatUptime(w.uptime_seconds).padEnd(cols.uptime),
66
+ ].join(" ");
67
+ console.log(row);
68
+ }
69
+ console.log(`\nGenerated: ${dashboard.generated_at}`);
70
+ }
71
+ export async function runFleetCommand(args) {
72
+ const subcommand = args[0];
73
+ if (!subcommand) {
74
+ printUsage();
75
+ process.exit(1);
76
+ }
77
+ const fleet = new FleetManager();
78
+ switch (subcommand) {
79
+ case "status": {
80
+ const dashboard = await fleet.getDashboard();
81
+ printDashboard(dashboard);
82
+ break;
83
+ }
84
+ case "add-worker": {
85
+ const url = args[1];
86
+ if (!url) {
87
+ console.error("Usage: hivemind fleet add-worker <url>");
88
+ process.exit(1);
89
+ }
90
+ try {
91
+ const worker = await fleet.addWorker(url);
92
+ console.log(`Worker registered: ${worker.id}`);
93
+ console.log(` URL: ${worker.url}`);
94
+ console.log(` Max contexts: ${worker.capabilities.max_contexts}`);
95
+ console.log(` Ollama: ${worker.capabilities.has_ollama ? "yes" : "no"}`);
96
+ console.log(` Memory daemon: ${worker.capabilities.has_memory_daemon ? "yes" : "no"}`);
97
+ }
98
+ catch (err) {
99
+ const msg = err instanceof Error ? err.message : String(err);
100
+ console.error(`Failed to add worker: ${msg}`);
101
+ process.exit(1);
102
+ }
103
+ break;
104
+ }
105
+ case "remove-worker": {
106
+ const workerId = args[1];
107
+ if (!workerId) {
108
+ console.error("Usage: hivemind fleet remove-worker <worker-id>");
109
+ process.exit(1);
110
+ }
111
+ const removed = await fleet.removeWorker(workerId);
112
+ if (removed) {
113
+ console.log(`Worker ${workerId} removed.`);
114
+ }
115
+ else {
116
+ console.error(`Worker ${workerId} not found.`);
117
+ process.exit(1);
118
+ }
119
+ break;
120
+ }
121
+ case "assign": {
122
+ const workerId = args[1];
123
+ const context = args[2];
124
+ if (!workerId || !context) {
125
+ console.error("Usage: hivemind fleet assign <worker-id> <context>");
126
+ process.exit(1);
127
+ }
128
+ const result = await fleet.assignContext(workerId, context);
129
+ if (result.accepted) {
130
+ console.log(`Context '${context}' assigned to ${workerId}.`);
131
+ }
132
+ else {
133
+ console.error(`Assignment rejected: ${result.reason}`);
134
+ process.exit(1);
135
+ }
136
+ break;
137
+ }
138
+ case "migrate": {
139
+ const context = args[1];
140
+ const toWorker = args[2];
141
+ if (!context || !toWorker) {
142
+ console.error("Usage: hivemind fleet migrate <context> <worker-id>");
143
+ process.exit(1);
144
+ }
145
+ const result = await fleet.migrateContext(context, toWorker);
146
+ if (result.success) {
147
+ console.log(`Context '${context}' migrated: ${result.from_worker} -> ${result.to_worker}`);
148
+ }
149
+ else {
150
+ console.error(`Migration failed: ${result.reason}`);
151
+ process.exit(1);
152
+ }
153
+ break;
154
+ }
155
+ case "discover": {
156
+ const urls = args.slice(1);
157
+ if (urls.length === 0) {
158
+ console.error("Usage: hivemind fleet discover <url1> [url2] ...");
159
+ process.exit(1);
160
+ }
161
+ console.log(`Probing ${urls.length} URL(s)...`);
162
+ const found = await fleet.discoverWorkers(urls);
163
+ if (found.length === 0) {
164
+ console.log("No workers found.");
165
+ }
166
+ else {
167
+ console.log(`Found ${found.length} worker(s):`);
168
+ for (const url of found) {
169
+ console.log(` ${url}`);
170
+ }
171
+ }
172
+ break;
173
+ }
174
+ default:
175
+ console.error(`Unknown fleet subcommand: ${subcommand}`);
176
+ printUsage();
177
+ process.exit(1);
178
+ }
179
+ }
180
+ function printUsage() {
181
+ console.log(`
182
+ Usage: hivemind fleet <command> [args]
183
+
184
+ Commands:
185
+ status Show fleet dashboard
186
+ add-worker <url> Register a worker by URL
187
+ remove-worker <worker-id> Remove a worker from the fleet
188
+ assign <worker-id> <context> Assign a context to a worker
189
+ migrate <context> <worker-id> Migrate a context to another worker
190
+ discover <url1> [url2] ... Probe URLs for workers
191
+ `.trim());
192
+ }
193
+ //# sourceMappingURL=fleet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../src/commands/fleet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runInitCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAkCA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgJlE"}
@@ -0,0 +1,170 @@
1
+ import { resolve } from "path";
2
+ import { writeFileSync, mkdirSync } from "fs";
3
+ import { createInterface } from "readline";
4
+ import { SesameClient } from "@sesamespace/sdk";
5
+ const HIVEMIND_DIR = resolve(process.env.HIVEMIND_HOME || ".");
6
+ const CONFIG_DIR = resolve(HIVEMIND_DIR, "config");
7
+ const ENV_FILE = resolve(HIVEMIND_DIR, ".env");
8
+ const LOCAL_TOML = resolve(CONFIG_DIR, "local.toml");
9
+ const VAULT_CONFIG_NAME = "hivemind-config";
10
+ async function prompt(question) {
11
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
12
+ return new Promise((resolve) => {
13
+ rl.question(question, (answer) => {
14
+ rl.close();
15
+ resolve(answer.trim());
16
+ });
17
+ });
18
+ }
19
+ export async function runInitCommand(args) {
20
+ let sesameApiKey = args[0];
21
+ if (args.includes("--help") || args.includes("-h")) {
22
+ printHelp();
23
+ return;
24
+ }
25
+ console.log(`
26
+ ╦ ╦╦╦ ╦╔═╗╔╦╗╦╔╗╔╔╦╗
27
+ ╠═╣║╚╗╔╝║╣ ║║║║║║║ ║║
28
+ ╩ ╩╩ ╚╝ ╚═╝╩ ╩╩╝╚╝═╩╝
29
+ Agent Initialization
30
+ `);
31
+ // --- Step 1: Get Sesame API key ---
32
+ if (!sesameApiKey) {
33
+ sesameApiKey = await prompt(" Sesame API key: ");
34
+ }
35
+ if (!sesameApiKey) {
36
+ console.error("Error: Sesame API key is required");
37
+ process.exit(1);
38
+ }
39
+ // --- Step 2: Connect to Sesame and fetch manifest ---
40
+ console.log("\n→ Connecting to Sesame...");
41
+ const sdk = new SesameClient({
42
+ apiUrl: "https://api.sesame.space",
43
+ wsUrl: "wss://ws.sesame.space",
44
+ apiKey: sesameApiKey,
45
+ });
46
+ let config;
47
+ try {
48
+ const manifest = await sdk.getManifest();
49
+ console.log(` ✓ Authenticated as ${manifest.agent.handle} (${manifest.agent.id})`);
50
+ console.log(` ✓ Workspace: ${manifest.workspace.name}`);
51
+ console.log(` ✓ Channels: ${manifest.channels.length}`);
52
+ for (const ch of manifest.channels) {
53
+ console.log(` - ${ch.name || ch.id} (${ch.kind})`);
54
+ }
55
+ config = {
56
+ agentName: manifest.agent.handle,
57
+ agentHandle: manifest.agent.handle,
58
+ agentId: manifest.agent.id,
59
+ channels: manifest.channels.map((ch) => ({
60
+ id: ch.id,
61
+ name: ch.name,
62
+ kind: ch.kind,
63
+ })),
64
+ };
65
+ // --- Step 3: Check vault for config ---
66
+ console.log("\n→ Checking vault for provisioning config...");
67
+ try {
68
+ const vaultResp = await sdk.listVaultItems();
69
+ const items = vaultResp.items || vaultResp.data || [];
70
+ const configItem = items.find((i) => i.name === VAULT_CONFIG_NAME);
71
+ if (configItem) {
72
+ console.log(` ✓ Found ${VAULT_CONFIG_NAME} vault item`);
73
+ const revealResp = await sdk.revealItem(configItem.id);
74
+ const fields = revealResp.fields || revealResp.data || {};
75
+ config.llmApiKey = fields.llm_api_key || fields.openrouter_api_key;
76
+ config.llmBaseUrl = fields.llm_base_url;
77
+ config.llmModel = fields.llm_model;
78
+ config.personality = fields.agent_personality || fields.personality;
79
+ config.fleetRole = fields.fleet_role;
80
+ if (config.llmApiKey)
81
+ console.log(" ✓ LLM API key loaded from vault");
82
+ if (config.personality)
83
+ console.log(` ✓ Personality: ${config.personality.slice(0, 60)}...`);
84
+ if (config.fleetRole)
85
+ console.log(` ✓ Fleet role: ${config.fleetRole}`);
86
+ }
87
+ else {
88
+ console.log(" ! No hivemind-config vault item found");
89
+ console.log(" ! Will prompt for LLM API key instead");
90
+ }
91
+ }
92
+ catch (err) {
93
+ console.log(` ! Could not read vault: ${err.message}`);
94
+ }
95
+ }
96
+ catch (err) {
97
+ console.error(`\n ✗ Failed to connect to Sesame: ${err.message}`);
98
+ console.error(" Check your API key and try again.");
99
+ process.exit(1);
100
+ }
101
+ finally {
102
+ sdk.disconnect();
103
+ }
104
+ // --- Step 4: Prompt for anything missing ---
105
+ if (!config.llmApiKey) {
106
+ config.llmApiKey = await prompt("\n OpenRouter API key: ");
107
+ }
108
+ // Agent name override
109
+ const nameOverride = await prompt(` Agent name [${config.agentName}]: `);
110
+ if (nameOverride)
111
+ config.agentName = nameOverride;
112
+ // --- Step 5: Write config files ---
113
+ console.log("\n→ Writing configuration...");
114
+ mkdirSync(CONFIG_DIR, { recursive: true });
115
+ // Write local.toml (overrides)
116
+ const localToml = `# Generated by hivemind init — ${new Date().toISOString()}
117
+ # Overrides config/default.toml with agent-specific settings
118
+
119
+ [agent]
120
+ name = "${config.agentName}"
121
+ ${config.personality ? `personality = "${config.personality.replace(/"/g, '\\"')}"` : "# personality = (using default)"}
122
+ team_charter = "config/TEAM-CHARTER.md"
123
+
124
+ ${config.llmModel ? `[llm]\nmodel = "${config.llmModel}"` : "# [llm] using defaults"}
125
+ ${config.llmBaseUrl ? `# base_url = "${config.llmBaseUrl}"` : ""}
126
+ `;
127
+ writeFileSync(LOCAL_TOML, localToml);
128
+ console.log(` ✓ ${LOCAL_TOML}`);
129
+ // Write .env
130
+ const envContent = `# Hivemind Agent — ${config.agentName}
131
+ # Generated by hivemind init — ${new Date().toISOString()}
132
+ SESAME_API_KEY=${sesameApiKey}
133
+ LLM_API_KEY=${config.llmApiKey || ""}
134
+ AGENT_NAME=${config.agentName}
135
+ `;
136
+ writeFileSync(ENV_FILE, envContent, { mode: 0o600 });
137
+ console.log(` ✓ ${ENV_FILE} (chmod 600)`);
138
+ // --- Done ---
139
+ console.log(`
140
+ ✓ Hivemind initialized for ${config.agentName}!
141
+
142
+ To start the agent:
143
+ ./start.sh
144
+
145
+ To start in background:
146
+ nohup ./start.sh > /tmp/hivemind.log 2>&1 &
147
+
148
+ Agent ID: ${config.agentId}
149
+ Channels: ${config.channels.map((c) => c.name || c.id).join(", ")}
150
+ Fleet role: ${config.fleetRole || "standalone"}
151
+ `);
152
+ }
153
+ function printHelp() {
154
+ console.log(`hivemind init — Initialize a Hivemind agent from Sesame
155
+
156
+ Usage: hivemind init [sesame-api-key]
157
+
158
+ The API key can also be passed as the first argument.
159
+
160
+ What it does:
161
+ 1. Connects to Sesame and fetches agent identity
162
+ 2. Reads provisioning config from Sesame vault (if available)
163
+ 3. Prompts for any missing configuration
164
+ 4. Writes config/local.toml and .env
165
+
166
+ Options:
167
+ -h, --help Show this help
168
+ `);
169
+ }
170
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runStartCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAMA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBnE"}
@@ -0,0 +1,39 @@
1
+ import { resolve } from "path";
2
+ import { existsSync } from "fs";
3
+ import { startPipeline } from "@hivemind/runtime";
4
+ const DEFAULT_CONFIG = "config/default.toml";
5
+ export async function runStartCommand(args) {
6
+ let configPath = DEFAULT_CONFIG;
7
+ // Parse args
8
+ for (let i = 0; i < args.length; i++) {
9
+ if ((args[i] === "--config" || args[i] === "-c") && args[i + 1]) {
10
+ configPath = args[++i];
11
+ }
12
+ else if (args[i] === "--help" || args[i] === "-h") {
13
+ printHelp();
14
+ return;
15
+ }
16
+ else {
17
+ console.error(`Unknown argument: ${args[i]}`);
18
+ printHelp();
19
+ process.exit(1);
20
+ }
21
+ }
22
+ const resolved = resolve(configPath);
23
+ if (!existsSync(resolved)) {
24
+ console.error(`Config not found: ${resolved}`);
25
+ process.exit(1);
26
+ }
27
+ await startPipeline(resolved);
28
+ }
29
+ function printHelp() {
30
+ console.log(`hivemind start — Start the Hivemind agent
31
+
32
+ Usage: hivemind start [options]
33
+
34
+ Options:
35
+ -c, --config <path> Config file (default: config/default.toml)
36
+ -h, --help Show this help
37
+ `);
38
+ }
39
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAc;IAClD,IAAI,UAAU,GAAG,cAAc,CAAC;IAEhC,aAAa;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAChE,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACpD,SAAS,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9C,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;CAOb,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,44 @@
1
+ export interface AgentConfig {
2
+ name: string;
3
+ personality: string;
4
+ team_charter?: string;
5
+ }
6
+ export interface LLMConfig {
7
+ base_url: string;
8
+ model: string;
9
+ max_tokens: number;
10
+ temperature: number;
11
+ api_key?: string;
12
+ }
13
+ export interface MemoryConfig {
14
+ daemon_url: string;
15
+ top_k: number;
16
+ embedding_model: string;
17
+ }
18
+ export interface OllamaConfig {
19
+ base_url: string;
20
+ }
21
+ export interface SesameConfig {
22
+ ws_url: string;
23
+ api_url: string;
24
+ api_key: string;
25
+ }
26
+ export interface WorkerModeConfig {
27
+ enabled: boolean;
28
+ primary_url: string;
29
+ worker_port: number;
30
+ worker_id: string;
31
+ max_contexts: number;
32
+ task_poll_interval_ms: number;
33
+ status_report_interval_ms: number;
34
+ }
35
+ export interface HivemindConfig {
36
+ agent: AgentConfig;
37
+ llm: LLMConfig;
38
+ memory: MemoryConfig;
39
+ ollama: OllamaConfig;
40
+ sesame: SesameConfig;
41
+ worker?: WorkerModeConfig;
42
+ }
43
+ export declare function loadConfig(path: string): HivemindConfig;
44
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AA2BD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CA4CvD"}
package/dist/config.js ADDED
@@ -0,0 +1,73 @@
1
+ import { readFileSync, existsSync } from "fs";
2
+ import { resolve, dirname } from "path";
3
+ import { parse } from "@iarna/toml";
4
+ function defaultWorkerConfig() {
5
+ return {
6
+ enabled: false,
7
+ primary_url: "http://localhost:3000",
8
+ worker_port: 3100,
9
+ worker_id: `worker-${process.pid}`,
10
+ max_contexts: 4,
11
+ task_poll_interval_ms: 5_000,
12
+ status_report_interval_ms: 15_000,
13
+ };
14
+ }
15
+ function deepMerge(target, source) {
16
+ const result = { ...target };
17
+ for (const key of Object.keys(source)) {
18
+ if (source[key] && typeof source[key] === "object" && !Array.isArray(source[key])
19
+ && target[key] && typeof target[key] === "object") {
20
+ result[key] = deepMerge(target[key], source[key]);
21
+ }
22
+ else if (source[key] !== undefined && source[key] !== "") {
23
+ result[key] = source[key];
24
+ }
25
+ }
26
+ return result;
27
+ }
28
+ export function loadConfig(path) {
29
+ const raw = readFileSync(path, "utf-8");
30
+ let parsed = parse(raw);
31
+ // Layer: merge local.toml if it exists alongside the config
32
+ const configDir = dirname(path);
33
+ const localPath = resolve(configDir, "local.toml");
34
+ if (existsSync(localPath)) {
35
+ const localRaw = readFileSync(localPath, "utf-8");
36
+ const localParsed = parse(localRaw);
37
+ parsed = deepMerge(parsed, localParsed);
38
+ console.log(`[config] Merged overrides from ${localPath}`);
39
+ }
40
+ // Allow env overrides
41
+ if (process.env.AGENT_NAME) {
42
+ parsed.agent.name = process.env.AGENT_NAME;
43
+ }
44
+ if (process.env.LLM_API_KEY) {
45
+ parsed.llm.api_key = process.env.LLM_API_KEY;
46
+ }
47
+ if (process.env.LLM_BASE_URL) {
48
+ parsed.llm.base_url = process.env.LLM_BASE_URL;
49
+ }
50
+ if (process.env.SESAME_API_KEY) {
51
+ parsed.sesame.api_key = process.env.SESAME_API_KEY;
52
+ }
53
+ if (process.env.MEMORY_DAEMON_URL) {
54
+ parsed.memory.daemon_url = process.env.MEMORY_DAEMON_URL;
55
+ }
56
+ if (process.env.WORKER_PRIMARY_URL) {
57
+ if (!parsed.worker)
58
+ parsed.worker = defaultWorkerConfig();
59
+ parsed.worker.primary_url = process.env.WORKER_PRIMARY_URL;
60
+ }
61
+ if (process.env.WORKER_PORT) {
62
+ if (!parsed.worker)
63
+ parsed.worker = defaultWorkerConfig();
64
+ parsed.worker.worker_port = parseInt(process.env.WORKER_PORT, 10);
65
+ }
66
+ if (process.env.WORKER_ID) {
67
+ if (!parsed.worker)
68
+ parsed.worker = defaultWorkerConfig();
69
+ parsed.worker.worker_id = process.env.WORKER_ID;
70
+ }
71
+ return parsed;
72
+ }
73
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { MemoryClient } from "./memory-client.js";
2
+ export interface ContextMetadata {
3
+ name: string;
4
+ description: string;
5
+ created_at: string;
6
+ last_active: string;
7
+ }
8
+ export interface ContextSwitchResult {
9
+ previousContext: string | null;
10
+ activeContext: string;
11
+ isNew: boolean;
12
+ }
13
+ export declare class ContextManager {
14
+ private contexts;
15
+ private activeContext;
16
+ private memory;
17
+ constructor(memory: MemoryClient);
18
+ createContext(name: string, description?: string): Promise<ContextMetadata>;
19
+ deleteContext(name: string): Promise<boolean>;
20
+ listContexts(): ContextMetadata[];
21
+ getContext(name: string): ContextMetadata | undefined;
22
+ getActiveContext(): string;
23
+ switchContext(name: string): ContextSwitchResult;
24
+ /**
25
+ * Parse a message and determine if it's a context switch command.
26
+ * Returns the context name if a switch is detected, null otherwise.
27
+ */
28
+ parseContextSwitch(message: string): string | null;
29
+ /**
30
+ * Infer context from message content by checking known context names.
31
+ * Returns the best matching context or current active context.
32
+ */
33
+ inferContext(message: string): string;
34
+ /**
35
+ * Route a message: check for explicit switch, then infer context.
36
+ * Returns the resolved context name and whether a switch happened.
37
+ */
38
+ routeMessage(message: string): {
39
+ context: string;
40
+ switched: boolean;
41
+ switchedTo?: string;
42
+ };
43
+ /**
44
+ * Returns contexts that should be searched: active context + global.
45
+ */
46
+ getSearchContexts(): string[];
47
+ hasContext(name: string): boolean;
48
+ private touchContext;
49
+ }
50
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB;AASD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAA2C;IAC3D,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAW1B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,SAAK,GAAG,OAAO,CAAC,eAAe,CAAC;IAwBvE,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBnD,YAAY,IAAI,eAAe,EAAE;IAIjC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIrD,gBAAgB,IAAI,MAAM;IAI1B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB;IAmBhD;;;OAGG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAUlD;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAWrC;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAmB1F;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAQ7B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,OAAO,CAAC,YAAY;CAMrB"}