@sesamespace/hivemind 0.1.0 → 0.2.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 (122) hide show
  1. package/README.md +53 -23
  2. package/dist/chunk-2I2O6X5D.js +1408 -0
  3. package/dist/chunk-2I2O6X5D.js.map +1 -0
  4. package/dist/chunk-DVR2KBL7.js +186 -0
  5. package/dist/chunk-DVR2KBL7.js.map +1 -0
  6. package/dist/chunk-MBS5A6BZ.js +132 -0
  7. package/dist/chunk-MBS5A6BZ.js.map +1 -0
  8. package/dist/chunk-NVJ424TB.js +731 -0
  9. package/dist/chunk-NVJ424TB.js.map +1 -0
  10. package/dist/chunk-RNK5Q5GR.js +44 -0
  11. package/dist/chunk-RNK5Q5GR.js.map +1 -0
  12. package/dist/chunk-XNOWVLXD.js +160 -0
  13. package/dist/chunk-XNOWVLXD.js.map +1 -0
  14. package/dist/commands/fleet.js +8 -192
  15. package/dist/commands/fleet.js.map +1 -1
  16. package/dist/commands/init.js +6 -169
  17. package/dist/commands/init.js.map +1 -1
  18. package/dist/commands/service.js +7 -0
  19. package/dist/commands/service.js.map +1 -0
  20. package/dist/commands/start.js +8 -38
  21. package/dist/commands/start.js.map +1 -1
  22. package/dist/index.js +40 -15
  23. package/dist/index.js.map +1 -1
  24. package/dist/main.js +49 -29
  25. package/dist/main.js.map +1 -1
  26. package/dist/start.js +18 -16
  27. package/dist/start.js.map +1 -1
  28. package/package.json +8 -16
  29. package/dist/__tests__/fleet-integration.test.d.ts +0 -9
  30. package/dist/__tests__/fleet-integration.test.d.ts.map +0 -1
  31. package/dist/__tests__/fleet-integration.test.js +0 -201
  32. package/dist/__tests__/fleet-integration.test.js.map +0 -1
  33. package/dist/__tests__/fleet.test.d.ts +0 -7
  34. package/dist/__tests__/fleet.test.d.ts.map +0 -1
  35. package/dist/__tests__/fleet.test.js +0 -171
  36. package/dist/__tests__/fleet.test.js.map +0 -1
  37. package/dist/__tests__/integration.test.d.ts +0 -2
  38. package/dist/__tests__/integration.test.d.ts.map +0 -1
  39. package/dist/__tests__/integration.test.js +0 -348
  40. package/dist/__tests__/integration.test.js.map +0 -1
  41. package/dist/agent.d.ts +0 -27
  42. package/dist/agent.d.ts.map +0 -1
  43. package/dist/agent.js +0 -217
  44. package/dist/agent.js.map +0 -1
  45. package/dist/commands/fleet.d.ts +0 -13
  46. package/dist/commands/fleet.d.ts.map +0 -1
  47. package/dist/commands/init.d.ts +0 -2
  48. package/dist/commands/init.d.ts.map +0 -1
  49. package/dist/commands/start.d.ts +0 -2
  50. package/dist/commands/start.d.ts.map +0 -1
  51. package/dist/config.d.ts +0 -44
  52. package/dist/config.d.ts.map +0 -1
  53. package/dist/config.js +0 -73
  54. package/dist/config.js.map +0 -1
  55. package/dist/context.d.ts +0 -50
  56. package/dist/context.d.ts.map +0 -1
  57. package/dist/context.js +0 -153
  58. package/dist/context.js.map +0 -1
  59. package/dist/fleet/fleet-manager.d.ts +0 -86
  60. package/dist/fleet/fleet-manager.d.ts.map +0 -1
  61. package/dist/fleet/fleet-manager.js +0 -298
  62. package/dist/fleet/fleet-manager.js.map +0 -1
  63. package/dist/fleet/memory-sync.d.ts +0 -91
  64. package/dist/fleet/memory-sync.d.ts.map +0 -1
  65. package/dist/fleet/memory-sync.js +0 -292
  66. package/dist/fleet/memory-sync.js.map +0 -1
  67. package/dist/fleet/primary-client.d.ts +0 -49
  68. package/dist/fleet/primary-client.d.ts.map +0 -1
  69. package/dist/fleet/primary-client.js +0 -222
  70. package/dist/fleet/primary-client.js.map +0 -1
  71. package/dist/fleet/worker-protocol.d.ts +0 -125
  72. package/dist/fleet/worker-protocol.d.ts.map +0 -1
  73. package/dist/fleet/worker-protocol.js +0 -27
  74. package/dist/fleet/worker-protocol.js.map +0 -1
  75. package/dist/fleet/worker-server.d.ts +0 -53
  76. package/dist/fleet/worker-server.d.ts.map +0 -1
  77. package/dist/fleet/worker-server.js +0 -191
  78. package/dist/fleet/worker-server.js.map +0 -1
  79. package/dist/index.d.ts +0 -26
  80. package/dist/index.d.ts.map +0 -1
  81. package/dist/llm-client.d.ts +0 -24
  82. package/dist/llm-client.d.ts.map +0 -1
  83. package/dist/llm-client.js +0 -40
  84. package/dist/llm-client.js.map +0 -1
  85. package/dist/main.d.ts +0 -3
  86. package/dist/main.d.ts.map +0 -1
  87. package/dist/memory-client.d.ts +0 -88
  88. package/dist/memory-client.d.ts.map +0 -1
  89. package/dist/memory-client.js +0 -185
  90. package/dist/memory-client.js.map +0 -1
  91. package/dist/pipeline.d.ts +0 -2
  92. package/dist/pipeline.d.ts.map +0 -1
  93. package/dist/pipeline.js +0 -125
  94. package/dist/pipeline.js.map +0 -1
  95. package/dist/prompt.d.ts +0 -6
  96. package/dist/prompt.d.ts.map +0 -1
  97. package/dist/prompt.js +0 -75
  98. package/dist/prompt.js.map +0 -1
  99. package/dist/sesame.d.ts +0 -33
  100. package/dist/sesame.d.ts.map +0 -1
  101. package/dist/sesame.js +0 -67
  102. package/dist/sesame.js.map +0 -1
  103. package/dist/start.d.ts +0 -3
  104. package/dist/start.d.ts.map +0 -1
  105. package/dist/task-engine.d.ts +0 -32
  106. package/dist/task-engine.d.ts.map +0 -1
  107. package/dist/task-engine.js +0 -80
  108. package/dist/task-engine.js.map +0 -1
  109. package/dist/worker.d.ts +0 -73
  110. package/dist/worker.d.ts.map +0 -1
  111. package/dist/worker.js +0 -279
  112. package/dist/worker.js.map +0 -1
  113. package/install.sh +0 -186
  114. package/packages/memory/Cargo.lock +0 -6480
  115. package/packages/memory/Cargo.toml +0 -21
  116. package/packages/memory/src/src/context.rs +0 -179
  117. package/packages/memory/src/src/embeddings.rs +0 -51
  118. package/packages/memory/src/src/main.rs +0 -626
  119. package/packages/memory/src/src/promotion.rs +0 -637
  120. package/packages/memory/src/src/scoring.rs +0 -131
  121. package/packages/memory/src/src/store.rs +0 -460
  122. package/packages/memory/src/src/tasks.rs +0 -321
@@ -1,80 +0,0 @@
1
- export class TaskEngine {
2
- contextName;
3
- memory;
4
- constructor(options) {
5
- this.contextName = options.contextName;
6
- this.memory = options.memory;
7
- }
8
- async addTask(title, description, blockedBy = []) {
9
- return this.memory.createTask({
10
- context_name: this.contextName,
11
- title,
12
- description,
13
- status: "planned",
14
- blocked_by: blockedBy,
15
- });
16
- }
17
- async listTasks(status) {
18
- return this.memory.listTasks(this.contextName, status);
19
- }
20
- async startTask(taskId) {
21
- return this.memory.updateTask(taskId, { status: "active" });
22
- }
23
- async completeTask(taskId) {
24
- return this.memory.updateTask(taskId, { status: "complete" });
25
- }
26
- async archiveTask(taskId) {
27
- return this.memory.updateTask(taskId, { status: "archived" });
28
- }
29
- async getNextTask() {
30
- return this.memory.getNextTask(this.contextName);
31
- }
32
- async pickAndStartNextTask() {
33
- const next = await this.getNextTask();
34
- if (next) {
35
- return this.startTask(next.id);
36
- }
37
- return null;
38
- }
39
- setContext(contextName) {
40
- this.contextName = contextName;
41
- }
42
- /**
43
- * Parse a task command from a chat message.
44
- * Returns the action and parsed parameters, or null if not a task command.
45
- */
46
- static parseTaskCommand(message) {
47
- const lower = message.trim().toLowerCase();
48
- // "add task: <title>"
49
- const addMatch = message.match(/^(?:add|create)\s+task[:\s]+(.+)/i);
50
- if (addMatch) {
51
- return { action: "add", title: addMatch[1].trim() };
52
- }
53
- // "list tasks"
54
- if (/^list\s+tasks/i.test(lower)) {
55
- const statusMatch = lower.match(/list\s+tasks\s+(\w+)/);
56
- return { action: "list", statusFilter: statusMatch?.[1] };
57
- }
58
- // "complete task <id>"
59
- const completeMatch = message.match(/^complete\s+task\s+(\S+)/i);
60
- if (completeMatch) {
61
- return { action: "complete", taskId: completeMatch[1] };
62
- }
63
- // "start task <id>"
64
- const startMatch = message.match(/^start\s+task\s+(\S+)/i);
65
- if (startMatch) {
66
- return { action: "start", taskId: startMatch[1] };
67
- }
68
- // "next task"
69
- if (/^next\s+task/i.test(lower)) {
70
- return { action: "next" };
71
- }
72
- // "archive task <id>"
73
- const archiveMatch = message.match(/^archive\s+task\s+(\S+)/i);
74
- if (archiveMatch) {
75
- return { action: "archive", taskId: archiveMatch[1] };
76
- }
77
- return null;
78
- }
79
- }
80
- //# sourceMappingURL=task-engine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-engine.js","sourceRoot":"","sources":["../src/task-engine.ts"],"names":[],"mappings":"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"}
package/dist/worker.d.ts DELETED
@@ -1,73 +0,0 @@
1
- /**
2
- * Worker mode entry point — distributed context execution.
3
- *
4
- * A worker runs autonomously on a separate machine:
5
- * 1. Starts its HTTP server (for Primary to manage it)
6
- * 2. Registers with the Primary node
7
- * 3. Connects to the local memory daemon
8
- * 4. Picks up tasks from assigned context queues
9
- * 5. Executes tasks using the agent loop (query memory, call LLM, store episodes)
10
- * 6. Reports status back to Primary via HTTP
11
- */
12
- import type { HivemindConfig, WorkerModeConfig } from "./config.js";
13
- import type { WorkerRegistrationResponse } from "./fleet/worker-protocol.js";
14
- import { WorkerServer } from "./fleet/worker-server.js";
15
- import { Agent } from "./agent.js";
16
- import { MemoryClient } from "./memory-client.js";
17
- export interface WorkerRuntimeOptions {
18
- config: HivemindConfig;
19
- workerConfig: WorkerModeConfig;
20
- }
21
- export declare class WorkerRuntime {
22
- private config;
23
- private workerConfig;
24
- private server;
25
- private memory;
26
- private agent;
27
- private taskPollTimer;
28
- private statusReportTimer;
29
- private registeredWorkerId;
30
- private running;
31
- private executing;
32
- constructor(opts: WorkerRuntimeOptions);
33
- /**
34
- * Start the worker: HTTP server, register with Primary, begin task loop.
35
- */
36
- start(): Promise<void>;
37
- /**
38
- * Stop the worker gracefully.
39
- */
40
- stop(): Promise<void>;
41
- /**
42
- * Register this worker with the Primary node.
43
- */
44
- registerWithPrimary(): Promise<WorkerRegistrationResponse | null>;
45
- /**
46
- * Start the task execution polling loop.
47
- * Iterates assigned contexts and picks up tasks from each queue.
48
- */
49
- startTaskLoop(): void;
50
- /**
51
- * Find and execute the next available task across all assigned contexts.
52
- */
53
- executeNextTask(): Promise<void>;
54
- /**
55
- * Periodically report status back to Primary.
56
- */
57
- startStatusReporting(): void;
58
- /**
59
- * Send a status report to the Primary.
60
- */
61
- reportStatus(activity: "idle" | "working" | "error", currentContext: string | null, currentTask: string | null, error?: string): Promise<void>;
62
- getServer(): WorkerServer;
63
- getAgent(): Agent;
64
- getMemoryClient(): MemoryClient;
65
- isRunning(): boolean;
66
- isExecuting(): boolean;
67
- getRegisteredWorkerId(): string | null;
68
- }
69
- /**
70
- * Start a worker from a config file path (convenience entry point).
71
- */
72
- export declare function startWorker(config: HivemindConfig): Promise<WorkerRuntime>;
73
- //# sourceMappingURL=worker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAA6B,0BAA0B,EAAsB,MAAM,4BAA4B,CAAC;AAE5H,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,cAAc,CAAC;IACvB,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,iBAAiB,CAA+C;IACxE,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;gBAEd,IAAI,EAAE,oBAAoB;IAgBtC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB3B;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC;IAuCvE;;;OAGG;IACH,aAAa,IAAI,IAAI;IASrB;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAmEtC;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAe5B;;OAEG;IACG,YAAY,CAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,EACtC,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAwBhB,SAAS,IAAI,YAAY;IAIzB,QAAQ,IAAI,KAAK;IAIjB,eAAe,IAAI,YAAY;IAI/B,SAAS,IAAI,OAAO;IAIpB,WAAW,IAAI,OAAO;IAItB,qBAAqB,IAAI,MAAM,GAAG,IAAI;CAGvC;AAcD;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAYhF"}
package/dist/worker.js DELETED
@@ -1,279 +0,0 @@
1
- /**
2
- * Worker mode entry point — distributed context execution.
3
- *
4
- * A worker runs autonomously on a separate machine:
5
- * 1. Starts its HTTP server (for Primary to manage it)
6
- * 2. Registers with the Primary node
7
- * 3. Connects to the local memory daemon
8
- * 4. Picks up tasks from assigned context queues
9
- * 5. Executes tasks using the agent loop (query memory, call LLM, store episodes)
10
- * 6. Reports status back to Primary via HTTP
11
- */
12
- import { PRIMARY_ROUTES } from "./fleet/worker-protocol.js";
13
- import { WorkerServer } from "./fleet/worker-server.js";
14
- import { Agent } from "./agent.js";
15
- import { MemoryClient } from "./memory-client.js";
16
- import { TaskEngine } from "./task-engine.js";
17
- export class WorkerRuntime {
18
- config;
19
- workerConfig;
20
- server;
21
- memory;
22
- agent;
23
- taskPollTimer = null;
24
- statusReportTimer = null;
25
- registeredWorkerId = null;
26
- running = false;
27
- executing = false;
28
- constructor(opts) {
29
- this.config = opts.config;
30
- this.workerConfig = opts.workerConfig;
31
- this.server = new WorkerServer({
32
- workerId: this.workerConfig.worker_id,
33
- port: this.workerConfig.worker_port,
34
- maxContexts: this.workerConfig.max_contexts,
35
- memoryDaemonUrl: this.config.memory.daemon_url,
36
- ollamaUrl: this.config.ollama.base_url,
37
- });
38
- this.memory = new MemoryClient(this.config.memory);
39
- this.agent = new Agent(this.config);
40
- }
41
- /**
42
- * Start the worker: HTTP server, register with Primary, begin task loop.
43
- */
44
- async start() {
45
- this.running = true;
46
- // 1. Start the worker HTTP server
47
- this.server.onContextAssigned((contextName, description) => {
48
- console.log(`[worker] Context assigned: "${contextName}" — ${description || "(no description)"}`);
49
- // Create the context in the local memory daemon
50
- this.memory.createContext(contextName, description).catch((err) => {
51
- console.warn(`[worker] Failed to create context "${contextName}" in daemon:`, err.message);
52
- });
53
- });
54
- await this.server.start();
55
- console.log(`[worker] HTTP server listening on port ${this.workerConfig.worker_port}`);
56
- // 2. Verify local memory daemon is reachable
57
- const memoryOk = await this.memory.healthCheck();
58
- if (memoryOk) {
59
- console.log("[worker] Local memory daemon connected");
60
- }
61
- else {
62
- console.warn("[worker] Memory daemon unreachable at", this.config.memory.daemon_url);
63
- console.warn("[worker] Continuing — episodes will not be stored until daemon is available");
64
- }
65
- // 3. Register with Primary
66
- await this.registerWithPrimary();
67
- // 4. Start the task execution loop
68
- this.startTaskLoop();
69
- // 5. Start periodic status reporting
70
- this.startStatusReporting();
71
- console.log("[worker] Ready — waiting for context assignments");
72
- }
73
- /**
74
- * Stop the worker gracefully.
75
- */
76
- async stop() {
77
- this.running = false;
78
- if (this.taskPollTimer) {
79
- clearInterval(this.taskPollTimer);
80
- this.taskPollTimer = null;
81
- }
82
- if (this.statusReportTimer) {
83
- clearInterval(this.statusReportTimer);
84
- this.statusReportTimer = null;
85
- }
86
- await this.server.stop();
87
- console.log("[worker] Stopped");
88
- }
89
- /**
90
- * Register this worker with the Primary node.
91
- */
92
- async registerWithPrimary() {
93
- const workerUrl = `http://localhost:${this.workerConfig.worker_port}`;
94
- const registration = {
95
- url: workerUrl,
96
- capabilities: {
97
- max_contexts: this.workerConfig.max_contexts,
98
- has_ollama: true,
99
- has_memory_daemon: true,
100
- available_models: [this.config.memory.embedding_model],
101
- },
102
- };
103
- try {
104
- const resp = await fetch(`${this.workerConfig.primary_url}${PRIMARY_ROUTES.register}`, {
105
- method: "POST",
106
- headers: { "Content-Type": "application/json" },
107
- body: JSON.stringify(registration),
108
- });
109
- if (!resp.ok) {
110
- console.error(`[worker] Registration failed: ${resp.status} ${await resp.text()}`);
111
- return null;
112
- }
113
- const result = (await resp.json());
114
- this.registeredWorkerId = result.worker_id;
115
- console.log(`[worker] Registered with Primary as ${result.worker_id}`);
116
- return result;
117
- }
118
- catch (err) {
119
- console.error("[worker] Could not reach Primary at", this.workerConfig.primary_url);
120
- console.error("[worker] Will continue in standalone mode — retry registration manually");
121
- return null;
122
- }
123
- }
124
- /**
125
- * Start the task execution polling loop.
126
- * Iterates assigned contexts and picks up tasks from each queue.
127
- */
128
- startTaskLoop() {
129
- this.taskPollTimer = setInterval(() => {
130
- if (!this.running || this.executing)
131
- return;
132
- this.executeNextTask().catch((err) => {
133
- console.error("[worker] Task execution error:", err.message);
134
- });
135
- }, this.workerConfig.task_poll_interval_ms);
136
- }
137
- /**
138
- * Find and execute the next available task across all assigned contexts.
139
- */
140
- async executeNextTask() {
141
- const contexts = this.server.getAssignedContexts();
142
- if (contexts.length === 0)
143
- return;
144
- for (const contextName of contexts) {
145
- const engine = new TaskEngine({ contextName, memory: this.memory });
146
- const task = await engine.getNextTask();
147
- if (task) {
148
- this.executing = true;
149
- try {
150
- // Update worker status
151
- this.server.setActiveContext(contextName);
152
- this.server.setCurrentTask(task.id);
153
- console.log(`[worker] Executing task [${task.id.slice(0, 8)}] "${task.title}" in context "${contextName}"`);
154
- // Mark task as active
155
- await engine.startTask(task.id);
156
- // Switch agent to the correct context
157
- this.agent.setContext(contextName);
158
- // Ensure context exists in memory daemon
159
- try {
160
- await this.memory.createContext(contextName);
161
- }
162
- catch {
163
- // Context may already exist
164
- }
165
- // Execute the task via the agent loop:
166
- // - Agent queries memory for relevant episodes
167
- // - Builds prompt with context + memories
168
- // - Calls LLM for a response
169
- // - Stores episodes (write-through to L2)
170
- // - Triggers promotion if needed
171
- const taskPrompt = buildTaskPrompt(task.title, task.description);
172
- const response = await this.agent.processMessage(taskPrompt);
173
- console.log(`[worker] Task [${task.id.slice(0, 8)}] completed. Response: ${response.content.slice(0, 100)}...`);
174
- // Mark task as complete
175
- await engine.completeTask(task.id);
176
- // Report status to Primary
177
- await this.reportStatus("working", contextName, task.id);
178
- }
179
- catch (err) {
180
- console.error(`[worker] Task [${task.id.slice(0, 8)}] failed:`, err.message);
181
- await this.reportStatus("error", contextName, task.id, err.message);
182
- }
183
- finally {
184
- this.executing = false;
185
- this.server.setCurrentTask(null);
186
- }
187
- // Execute one task per poll cycle to stay responsive
188
- return;
189
- }
190
- }
191
- // No tasks found in any context — go idle
192
- if (this.server.getAssignedContexts().length > 0) {
193
- this.server.setActiveContext(null);
194
- this.server.setCurrentTask(null);
195
- }
196
- }
197
- /**
198
- * Periodically report status back to Primary.
199
- */
200
- startStatusReporting() {
201
- this.statusReportTimer = setInterval(() => {
202
- if (!this.running || !this.registeredWorkerId)
203
- return;
204
- const contexts = this.server.getAssignedContexts();
205
- if (contexts.length === 0)
206
- return;
207
- this.reportStatus(this.executing ? "working" : "idle", this.executing ? contexts[0] : null, null).catch(() => { });
208
- }, this.workerConfig.status_report_interval_ms);
209
- }
210
- /**
211
- * Send a status report to the Primary.
212
- */
213
- async reportStatus(activity, currentContext, currentTask, error) {
214
- if (!this.registeredWorkerId)
215
- return;
216
- const report = {
217
- activity,
218
- current_context: currentContext,
219
- current_task: currentTask,
220
- error,
221
- };
222
- try {
223
- const statusUrl = `${this.workerConfig.primary_url}${PRIMARY_ROUTES.status(this.registeredWorkerId)}`;
224
- await fetch(statusUrl, {
225
- method: "POST",
226
- headers: { "Content-Type": "application/json" },
227
- body: JSON.stringify(report),
228
- });
229
- }
230
- catch {
231
- // Primary unreachable — non-fatal, will retry next interval
232
- }
233
- }
234
- // --- Accessors for testing ---
235
- getServer() {
236
- return this.server;
237
- }
238
- getAgent() {
239
- return this.agent;
240
- }
241
- getMemoryClient() {
242
- return this.memory;
243
- }
244
- isRunning() {
245
- return this.running;
246
- }
247
- isExecuting() {
248
- return this.executing;
249
- }
250
- getRegisteredWorkerId() {
251
- return this.registeredWorkerId;
252
- }
253
- }
254
- /**
255
- * Build a prompt for executing a task via the agent.
256
- */
257
- function buildTaskPrompt(title, description) {
258
- let prompt = `[TASK] ${title}`;
259
- if (description) {
260
- prompt += `\n\n${description}`;
261
- }
262
- prompt += "\n\nPlease work on this task. Use your memory and knowledge to provide a thorough response.";
263
- return prompt;
264
- }
265
- /**
266
- * Start a worker from a config file path (convenience entry point).
267
- */
268
- export async function startWorker(config) {
269
- if (!config.worker || !config.worker.enabled) {
270
- throw new Error("Worker mode is not enabled in config. Set [worker] enabled = true.");
271
- }
272
- const runtime = new WorkerRuntime({
273
- config,
274
- workerConfig: config.worker,
275
- });
276
- await runtime.start();
277
- return runtime;
278
- }
279
- //# sourceMappingURL=worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO9C,MAAM,OAAO,aAAa;IAChB,MAAM,CAAiB;IACvB,YAAY,CAAmB;IAC/B,MAAM,CAAe;IACrB,MAAM,CAAe;IACrB,KAAK,CAAQ;IACb,aAAa,GAA0C,IAAI,CAAC;IAC5D,iBAAiB,GAA0C,IAAI,CAAC;IAChE,kBAAkB,GAAkB,IAAI,CAAC;IACzC,OAAO,GAAG,KAAK,CAAC;IAChB,SAAS,GAAG,KAAK,CAAC;IAE1B,YAAY,IAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAEtC,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC;YAC7B,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS;YACrC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW;YACnC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY;YAC3C,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU;YAC9C,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ;SACvC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,kCAAkC;QAClC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE;YACzD,OAAO,CAAC,GAAG,CAAC,+BAA+B,WAAW,OAAO,WAAW,IAAI,kBAAkB,EAAE,CAAC,CAAC;YAClG,gDAAgD;YAChD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAChE,OAAO,CAAC,IAAI,CAAC,sCAAsC,WAAW,cAAc,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YACxG,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,0CAA0C,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;QAEvF,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACjD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACrF,OAAO,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;QAC9F,CAAC;QAED,2BAA2B;QAC3B,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEjC,mCAAmC;QACnC,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,qCAAqC;QACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAErB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,CAAC;QAED,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB;QACvB,MAAM,SAAS,GAAG,oBAAoB,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QAEtE,MAAM,YAAY,GAA8B;YAC9C,GAAG,EAAE,SAAS;YACd,YAAY,EAAE;gBACZ,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY;gBAC5C,UAAU,EAAE,IAAI;gBAChB,iBAAiB,EAAE,IAAI;gBACvB,gBAAgB,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;aACvD;SACF,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,KAAK,CACtB,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,cAAc,CAAC,QAAQ,EAAE,EAC5D;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;aACnC,CACF,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,IAAI,CAAC,MAAM,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACnF,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA+B,CAAC;YACjE,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,uCAAuC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YACvE,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACpF,OAAO,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;YACzF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS;gBAAE,OAAO;YAC5C,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACnC,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QACnD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAElC,KAAK,MAAM,WAAW,IAAI,QAAQ,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACpE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;YAExC,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBAEtB,IAAI,CAAC;oBACH,uBAAuB;oBACvB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;oBAC1C,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAEpC,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,iBAAiB,WAAW,GAAG,CAAC,CAAC;oBAE5G,sBAAsB;oBACtB,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAEhC,sCAAsC;oBACtC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;oBAEnC,yCAAyC;oBACzC,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;oBAC/C,CAAC;oBAAC,MAAM,CAAC;wBACP,4BAA4B;oBAC9B,CAAC;oBAED,uCAAuC;oBACvC,iDAAiD;oBACjD,4CAA4C;oBAC5C,+BAA+B;oBAC/B,4CAA4C;oBAC5C,mCAAmC;oBACnC,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;oBACjE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;oBAE7D,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,0BAA0B,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;oBAEhH,wBAAwB;oBACxB,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAEnC,2BAA2B;oBAC3B,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC3D,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;oBACxF,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;gBACjF,CAAC;wBAAS,CAAC;oBACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;oBACvB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACnC,CAAC;gBAED,qDAAqD;gBACrD,OAAO;YACT,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;YACxC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB;gBAAE,OAAO;YAEtD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;YACnD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAElC,IAAI,CAAC,YAAY,CACf,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EACnC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EACnC,IAAI,CACL,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACpB,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,QAAsC,EACtC,cAA6B,EAC7B,WAA0B,EAC1B,KAAc;QAEd,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO;QAErC,MAAM,MAAM,GAAuB;YACjC,QAAQ;YACR,eAAe,EAAE,cAAc;YAC/B,YAAY,EAAE,WAAW;YACzB,KAAK;SACN,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACtG,MAAM,KAAK,CAAC,SAAS,EAAE;gBACrB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;aAC7B,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;QAC9D,CAAC;IACH,CAAC;IAED,gCAAgC;IAEhC,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,qBAAqB;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAa,EAAE,WAAmB;IACzD,IAAI,MAAM,GAAG,UAAU,KAAK,EAAE,CAAC;IAC/B,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,OAAO,WAAW,EAAE,CAAC;IACjC,CAAC;IACD,MAAM,IAAI,6FAA6F,CAAC;IACxG,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAsB;IACtD,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC;QAChC,MAAM;QACN,YAAY,EAAE,MAAM,CAAC,MAAM;KAC5B,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/install.sh DELETED
@@ -1,186 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- # Hivemind — One-shot install for macOS (Apple Silicon)
5
- # Usage: git clone <repo> && cd hivemind && ./install.sh
6
-
7
- BOLD='\033[1m'
8
- GREEN='\033[0;32m'
9
- YELLOW='\033[0;33m'
10
- RED='\033[0;31m'
11
- NC='\033[0m'
12
-
13
- info() { echo -e "${GREEN}[✓]${NC} $1"; }
14
- warn() { echo -e "${YELLOW}[!]${NC} $1"; }
15
- err() { echo -e "${RED}[✗]${NC} $1"; }
16
- step() { echo -e "\n${BOLD}→ $1${NC}"; }
17
-
18
- echo -e "${BOLD}"
19
- echo " ╦ ╦╦╦ ╦╔═╗╔╦╗╦╔╗╔╔╦╗"
20
- echo " ╠═╣║╚╗╔╝║╣ ║║║║║║║ ║║"
21
- echo " ╩ ╩╩ ╚╝ ╚═╝╩ ╩╩╝╚╝═╩╝"
22
- echo -e "${NC}"
23
- echo " Agent Runtime Installer"
24
- echo ""
25
-
26
- # --- 1. System dependencies ---
27
- step "Checking system dependencies"
28
-
29
- # Homebrew
30
- if ! command -v brew &>/dev/null; then
31
- warn "Homebrew not found — installing..."
32
- /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
33
- eval "$(/opt/homebrew/bin/brew shellenv)"
34
- else
35
- info "Homebrew found"
36
- fi
37
-
38
- # Node.js
39
- if ! command -v node &>/dev/null; then
40
- warn "Node.js not found — installing via brew..."
41
- brew install node
42
- else
43
- NODE_VER=$(node -v | sed 's/v//' | cut -d. -f1)
44
- if [ "$NODE_VER" -lt 20 ]; then
45
- warn "Node.js v${NODE_VER} too old (need ≥20) — upgrading..."
46
- brew upgrade node
47
- else
48
- info "Node.js $(node -v)"
49
- fi
50
- fi
51
-
52
- # pnpm
53
- if ! command -v pnpm &>/dev/null; then
54
- warn "pnpm not found — installing..."
55
- npm install -g pnpm
56
- else
57
- info "pnpm $(pnpm -v)"
58
- fi
59
-
60
- # Rust
61
- if ! command -v cargo &>/dev/null; then
62
- warn "Rust not found — installing via rustup..."
63
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
64
- source "$HOME/.cargo/env"
65
- else
66
- info "Rust $(rustc --version | awk '{print $2}')"
67
- fi
68
-
69
- # Ollama
70
- if ! command -v ollama &>/dev/null; then
71
- warn "Ollama not found — installing via brew..."
72
- brew install ollama
73
- else
74
- info "Ollama found"
75
- fi
76
-
77
- # --- 2. Pull embedding model ---
78
- step "Setting up Ollama embedding model"
79
-
80
- # Start Ollama if not running
81
- if ! curl -s http://localhost:11434/api/tags &>/dev/null; then
82
- warn "Ollama not running — starting..."
83
- ollama serve &>/dev/null &
84
- sleep 3
85
- fi
86
-
87
- if ollama list 2>/dev/null | grep -q "nomic-embed-text"; then
88
- info "nomic-embed-text model ready"
89
- else
90
- warn "Pulling nomic-embed-text (274MB)..."
91
- ollama pull nomic-embed-text
92
- info "nomic-embed-text ready"
93
- fi
94
-
95
- # --- 3. Build TypeScript packages ---
96
- step "Installing Node dependencies"
97
- pnpm install
98
- info "Dependencies installed"
99
-
100
- step "Building TypeScript"
101
- pnpm build
102
- info "TypeScript build complete"
103
-
104
- # --- 4. Build Rust memory daemon ---
105
- step "Building memory daemon (Rust — this takes ~60s first time)"
106
- cd packages/memory
107
- cargo build --release 2>&1 | tail -3
108
- cd ../..
109
- info "Memory daemon built"
110
-
111
- # --- 5. Configuration via Sesame ---
112
- step "Configuring agent via Sesame"
113
-
114
- if [ -f ".env" ]; then
115
- info "Existing .env found — keeping it"
116
- else
117
- SESAME_KEY="${1:-${SESAME_API_KEY:-}}"
118
- if [ -z "$SESAME_KEY" ]; then
119
- read -rp " Sesame API key: " SESAME_KEY
120
- fi
121
- node packages/cli/dist/main.js init "$SESAME_KEY"
122
- fi
123
-
124
- # --- 6. Create launch script ---
125
- step "Creating launch script"
126
-
127
- cat > start.sh <<'LAUNCH'
128
- #!/usr/bin/env bash
129
- set -euo pipefail
130
-
131
- SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
132
- cd "$SCRIPT_DIR"
133
-
134
- # Load env
135
- if [ -f .env ]; then
136
- set -a; source .env; set +a
137
- fi
138
-
139
- # Start memory daemon if not running
140
- if ! curl -s http://localhost:3434/health &>/dev/null; then
141
- echo "[hivemind] Starting memory daemon..."
142
- nohup ./packages/memory/target/release/hivemind-memory > /tmp/hivemind-memory.log 2>&1 &
143
- sleep 2
144
- if curl -s http://localhost:3434/health &>/dev/null; then
145
- echo "[hivemind] Memory daemon ready"
146
- else
147
- echo "[hivemind] WARNING: Memory daemon failed to start"
148
- fi
149
- else
150
- echo "[hivemind] Memory daemon already running"
151
- fi
152
-
153
- # Start Ollama if not running
154
- if ! curl -s http://localhost:11434/api/tags &>/dev/null; then
155
- echo "[hivemind] Starting Ollama..."
156
- ollama serve &>/dev/null &
157
- sleep 3
158
- fi
159
-
160
- # Start agent (auto-restart on crash)
161
- echo "[hivemind] Starting agent..."
162
- while true; do
163
- node packages/cli/dist/main.js start --config config/default.toml
164
- EXIT_CODE=$?
165
- echo "[hivemind] Agent exited with code $EXIT_CODE — restarting in 5s..."
166
- sleep 5
167
- done
168
- LAUNCH
169
-
170
- chmod +x start.sh
171
- info "Created start.sh (with auto-restart)"
172
-
173
- # --- Done ---
174
- echo ""
175
- echo -e "${GREEN}${BOLD} ✓ Hivemind installed successfully!${NC}"
176
- echo ""
177
- echo " To start the agent:"
178
- echo " ./start.sh"
179
- echo ""
180
- echo " To start in background:"
181
- echo " nohup ./start.sh > /tmp/hivemind.log 2>&1 &"
182
- echo ""
183
- echo " Logs:"
184
- echo " Agent: stdout (or /tmp/hivemind.log)"
185
- echo " Memory: /tmp/hivemind-memory.log"
186
- echo ""