@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,348 +0,0 @@
1
- import { describe, it, before, after } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { createServer } from "node:http";
4
- let episodes = [];
5
- let contexts = new Map();
6
- let tasks = [];
7
- let nextId = 1;
8
- function resetState() {
9
- episodes = [];
10
- contexts = new Map();
11
- tasks = [];
12
- nextId = 1;
13
- }
14
- function parseBody(req) {
15
- return new Promise((resolve) => {
16
- let data = "";
17
- req.on("data", (chunk) => (data += chunk));
18
- req.on("end", () => resolve(data ? JSON.parse(data) : {}));
19
- });
20
- }
21
- function mockHandler(req, res) {
22
- const url = new URL(req.url, `http://localhost`);
23
- const path = url.pathname;
24
- const method = req.method;
25
- res.setHeader("Content-Type", "application/json");
26
- // Health check
27
- if (path === "/health" && method === "GET") {
28
- res.end(JSON.stringify({ status: "ok" }));
29
- return;
30
- }
31
- // POST /episodes
32
- if (path === "/episodes" && method === "POST") {
33
- parseBody(req).then((body) => {
34
- const ep = {
35
- id: `ep-${nextId++}`,
36
- timestamp: new Date().toISOString(),
37
- context_name: body.context_name || "global",
38
- role: body.role,
39
- content: body.content,
40
- access_count: 0,
41
- layer: "L2",
42
- };
43
- episodes.push(ep);
44
- res.end(JSON.stringify(ep));
45
- });
46
- return;
47
- }
48
- // GET /search — scoped to context param
49
- if (path === "/search" && method === "GET") {
50
- const ctx = url.searchParams.get("context");
51
- const q = url.searchParams.get("q") || "";
52
- const limit = parseInt(url.searchParams.get("limit") || "10");
53
- let results = episodes;
54
- if (ctx)
55
- results = results.filter((e) => e.context_name === ctx || e.context_name === "global");
56
- // Simple text matching for mock
57
- if (q)
58
- results = results.filter((e) => e.content.toLowerCase().includes(q.toLowerCase()));
59
- const scored = results.slice(0, limit).map((e, i) => ({
60
- ...e,
61
- score: 1 - i * 0.1,
62
- }));
63
- res.end(JSON.stringify({ episodes: scored }));
64
- return;
65
- }
66
- // GET /search/cross-context
67
- if (path === "/search/cross-context" && method === "GET") {
68
- const q = url.searchParams.get("q") || "";
69
- const limit = parseInt(url.searchParams.get("limit") || "10");
70
- const matched = episodes.filter((e) => e.content.toLowerCase().includes(q.toLowerCase()));
71
- const byContext = new Map();
72
- for (const e of matched.slice(0, limit)) {
73
- const list = byContext.get(e.context_name) || [];
74
- list.push({ ...e, score: 0.9, source_context: e.context_name });
75
- byContext.set(e.context_name, list);
76
- }
77
- const results = Array.from(byContext.entries()).map(([context, eps]) => ({
78
- context,
79
- episodes: eps,
80
- }));
81
- res.end(JSON.stringify({ results }));
82
- return;
83
- }
84
- // POST /contexts
85
- if (path === "/contexts" && method === "POST") {
86
- parseBody(req).then((body) => {
87
- contexts.set(body.name, {
88
- name: body.name,
89
- description: body.description || "",
90
- created_at: new Date().toISOString(),
91
- });
92
- res.end(JSON.stringify({ ok: true }));
93
- });
94
- return;
95
- }
96
- // GET /contexts
97
- if (path === "/contexts" && method === "GET") {
98
- const list = Array.from(contexts.values()).map((c) => ({
99
- ...c,
100
- episode_count: episodes.filter((e) => e.context_name === c.name).length,
101
- }));
102
- res.end(JSON.stringify({ contexts: list }));
103
- return;
104
- }
105
- // GET /contexts/:name
106
- const ctxMatch = path.match(/^\/contexts\/([^/]+)$/);
107
- if (ctxMatch && method === "GET") {
108
- const name = decodeURIComponent(ctxMatch[1]);
109
- const eps = episodes.filter((e) => e.context_name === name);
110
- res.end(JSON.stringify(eps));
111
- return;
112
- }
113
- // POST /tasks
114
- if (path === "/tasks" && method === "POST") {
115
- parseBody(req).then((body) => {
116
- const task = {
117
- id: `task-${nextId++}`,
118
- context_name: body.context_name,
119
- title: body.title,
120
- description: body.description || "",
121
- status: body.status || "planned",
122
- blocked_by: body.blocked_by || [],
123
- created_at: new Date().toISOString(),
124
- updated_at: new Date().toISOString(),
125
- };
126
- tasks.push(task);
127
- res.end(JSON.stringify(task));
128
- });
129
- return;
130
- }
131
- // GET /tasks
132
- if (path === "/tasks" && method === "GET") {
133
- const ctx = url.searchParams.get("context") || "";
134
- const status = url.searchParams.get("status");
135
- let result = tasks.filter((t) => t.context_name === ctx);
136
- if (status)
137
- result = result.filter((t) => t.status === status);
138
- res.end(JSON.stringify({ tasks: result }));
139
- return;
140
- }
141
- // PATCH /tasks/:id
142
- const taskMatch = path.match(/^\/tasks\/([^/]+)$/);
143
- if (taskMatch && method === "PATCH") {
144
- parseBody(req).then((body) => {
145
- const id = decodeURIComponent(taskMatch[1]);
146
- const task = tasks.find((t) => t.id === id);
147
- if (!task) {
148
- res.statusCode = 404;
149
- res.end(JSON.stringify({ error: "not found" }));
150
- return;
151
- }
152
- Object.assign(task, body, { updated_at: new Date().toISOString() });
153
- res.end(JSON.stringify(task));
154
- });
155
- return;
156
- }
157
- // GET /tasks/next
158
- if (path === "/tasks/next" && method === "GET") {
159
- const ctx = url.searchParams.get("context") || "";
160
- const next = tasks.find((t) => t.context_name === ctx &&
161
- t.status === "planned" &&
162
- t.blocked_by.every((dep) => tasks.find((d) => d.id === dep)?.status === "complete"));
163
- if (!next) {
164
- res.statusCode = 404;
165
- res.end(JSON.stringify({ error: "no tasks" }));
166
- return;
167
- }
168
- res.end(JSON.stringify(next));
169
- return;
170
- }
171
- res.statusCode = 404;
172
- res.end(JSON.stringify({ error: "not found" }));
173
- }
174
- let server;
175
- let port;
176
- describe("Hivemind Memory Integration", () => {
177
- before(async () => {
178
- server = createServer(mockHandler);
179
- await new Promise((resolve) => {
180
- server.listen(0, () => {
181
- port = server.address().port;
182
- resolve();
183
- });
184
- });
185
- });
186
- after(() => {
187
- server.close();
188
- });
189
- describe("Context Isolation", () => {
190
- before(() => resetState());
191
- it("should create two independent contexts", async () => {
192
- const base = `http://localhost:${port}`;
193
- // Create contexts
194
- await fetch(`${base}/contexts`, {
195
- method: "POST",
196
- headers: { "Content-Type": "application/json" },
197
- body: JSON.stringify({ name: "project-alpha", description: "Alpha project" }),
198
- });
199
- await fetch(`${base}/contexts`, {
200
- method: "POST",
201
- headers: { "Content-Type": "application/json" },
202
- body: JSON.stringify({ name: "project-beta", description: "Beta project" }),
203
- });
204
- const listResp = await fetch(`${base}/contexts`);
205
- const { contexts: ctxList } = (await listResp.json());
206
- assert.equal(ctxList.length, 2);
207
- });
208
- it("should store episodes in separate contexts", async () => {
209
- const base = `http://localhost:${port}`;
210
- await fetch(`${base}/episodes`, {
211
- method: "POST",
212
- headers: { "Content-Type": "application/json" },
213
- body: JSON.stringify({ context_name: "project-alpha", role: "user", content: "Alpha auth uses JWT tokens" }),
214
- });
215
- await fetch(`${base}/episodes`, {
216
- method: "POST",
217
- headers: { "Content-Type": "application/json" },
218
- body: JSON.stringify({ context_name: "project-beta", role: "user", content: "Beta uses cookie-based sessions" }),
219
- });
220
- const alphaEps = await (await fetch(`${base}/contexts/project-alpha`)).json();
221
- const betaEps = await (await fetch(`${base}/contexts/project-beta`)).json();
222
- assert.equal(alphaEps.length, 1);
223
- assert.equal(betaEps.length, 1);
224
- assert.ok(alphaEps[0].content.includes("JWT"));
225
- assert.ok(betaEps[0].content.includes("cookie"));
226
- });
227
- it("should NOT return project-beta results when searching project-alpha", async () => {
228
- const base = `http://localhost:${port}`;
229
- const resp = await fetch(`${base}/search?q=cookie&context=project-alpha`);
230
- const { episodes: results } = (await resp.json());
231
- assert.equal(results.length, 0, "Alpha search should not find Beta's episodes");
232
- });
233
- it("should return results from both contexts in cross-context search", async () => {
234
- const base = `http://localhost:${port}`;
235
- // Store something searchable in both
236
- await fetch(`${base}/episodes`, {
237
- method: "POST",
238
- headers: { "Content-Type": "application/json" },
239
- body: JSON.stringify({ context_name: "project-alpha", role: "assistant", content: "Authentication architecture decided" }),
240
- });
241
- await fetch(`${base}/episodes`, {
242
- method: "POST",
243
- headers: { "Content-Type": "application/json" },
244
- body: JSON.stringify({ context_name: "project-beta", role: "assistant", content: "Authentication middleware complete" }),
245
- });
246
- const resp = await fetch(`${base}/search/cross-context?q=authentication`);
247
- const { results } = (await resp.json());
248
- const contextNames = results.map((r) => r.context);
249
- assert.ok(contextNames.includes("project-alpha"), "Should include alpha");
250
- assert.ok(contextNames.includes("project-beta"), "Should include beta");
251
- // Verify results are labeled by source
252
- for (const r of results) {
253
- assert.ok(r.context, "Each result group should have a context label");
254
- for (const ep of r.episodes) {
255
- assert.ok(ep.source_context, "Each episode should have source_context");
256
- }
257
- }
258
- });
259
- });
260
- describe("Global Context Accessibility", () => {
261
- before(() => resetState());
262
- it("should make global episodes visible from any context search", async () => {
263
- const base = `http://localhost:${port}`;
264
- // Store a global episode
265
- await fetch(`${base}/episodes`, {
266
- method: "POST",
267
- headers: { "Content-Type": "application/json" },
268
- body: JSON.stringify({ context_name: "global", role: "system", content: "Agent identity: I am Aidan Hivemind" }),
269
- });
270
- // Search from a project context — global should be included
271
- const resp = await fetch(`${base}/search?q=identity&context=project-x`);
272
- const { episodes: results } = (await resp.json());
273
- assert.ok(results.length > 0, "Global episode should be visible from project context");
274
- assert.ok(results[0].content.includes("Aidan"));
275
- });
276
- });
277
- describe("Task Engine", () => {
278
- before(() => resetState());
279
- it("should create and list tasks per context", async () => {
280
- const base = `http://localhost:${port}`;
281
- await fetch(`${base}/tasks`, {
282
- method: "POST",
283
- headers: { "Content-Type": "application/json" },
284
- body: JSON.stringify({ context_name: "project-alpha", title: "Set up CI", description: "Configure GitHub Actions" }),
285
- });
286
- await fetch(`${base}/tasks`, {
287
- method: "POST",
288
- headers: { "Content-Type": "application/json" },
289
- body: JSON.stringify({ context_name: "project-alpha", title: "Write README", description: "" }),
290
- });
291
- await fetch(`${base}/tasks`, {
292
- method: "POST",
293
- headers: { "Content-Type": "application/json" },
294
- body: JSON.stringify({ context_name: "project-beta", title: "Deploy staging", description: "" }),
295
- });
296
- const alphaResp = await fetch(`${base}/tasks?context=project-alpha`);
297
- const { tasks: alphaTasks } = (await alphaResp.json());
298
- assert.equal(alphaTasks.length, 2);
299
- const betaResp = await fetch(`${base}/tasks?context=project-beta`);
300
- const { tasks: betaTasks } = (await betaResp.json());
301
- assert.equal(betaTasks.length, 1);
302
- });
303
- it("should update task status", async () => {
304
- const base = `http://localhost:${port}`;
305
- const listResp = await fetch(`${base}/tasks?context=project-alpha`);
306
- const { tasks: list } = (await listResp.json());
307
- const taskId = list[0].id;
308
- const patchResp = await fetch(`${base}/tasks/${taskId}`, {
309
- method: "PATCH",
310
- headers: { "Content-Type": "application/json" },
311
- body: JSON.stringify({ status: "complete" }),
312
- });
313
- const updated = await patchResp.json();
314
- assert.equal(updated.status, "complete");
315
- });
316
- it("should get next available task respecting dependencies", async () => {
317
- const base = `http://localhost:${port}`;
318
- resetState();
319
- // Create task A (no deps)
320
- const respA = await fetch(`${base}/tasks`, {
321
- method: "POST",
322
- headers: { "Content-Type": "application/json" },
323
- body: JSON.stringify({ context_name: "proj", title: "Task A", description: "" }),
324
- });
325
- const taskA = await respA.json();
326
- // Create task B (blocked by A)
327
- await fetch(`${base}/tasks`, {
328
- method: "POST",
329
- headers: { "Content-Type": "application/json" },
330
- body: JSON.stringify({ context_name: "proj", title: "Task B", description: "", blocked_by: [taskA.id] }),
331
- });
332
- // Next should be A (B is blocked)
333
- const nextResp = await fetch(`${base}/tasks/next?context=proj`);
334
- const next = await nextResp.json();
335
- assert.equal(next.title, "Task A");
336
- // Complete A, now B should be next
337
- await fetch(`${base}/tasks/${taskA.id}`, {
338
- method: "PATCH",
339
- headers: { "Content-Type": "application/json" },
340
- body: JSON.stringify({ status: "complete" }),
341
- });
342
- const nextResp2 = await fetch(`${base}/tasks/next?context=proj`);
343
- const next2 = await nextResp2.json();
344
- assert.equal(next2.title, "Task B");
345
- });
346
- });
347
- });
348
- //# sourceMappingURL=integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../src/__tests__/integration.test.ts"],"names":[],"mappings":"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"}
package/dist/agent.d.ts DELETED
@@ -1,27 +0,0 @@
1
- import type { HivemindConfig } from "./config.js";
2
- import { MemoryClient } from "./memory-client.js";
3
- import { ContextManager } from "./context.js";
4
- export interface AgentResponse {
5
- content: string;
6
- model: string;
7
- context: string;
8
- contextSwitched?: boolean;
9
- }
10
- export declare class Agent {
11
- private config;
12
- private llm;
13
- private memory;
14
- private contextManager;
15
- private conversationHistories;
16
- private messageCount;
17
- private readonly PROMOTION_INTERVAL;
18
- constructor(config: HivemindConfig, contextName?: string);
19
- processMessage(userMessage: string): Promise<AgentResponse>;
20
- private storeEpisodes;
21
- private handleSpecialCommand;
22
- getMemoryClient(): MemoryClient;
23
- getContextManager(): ContextManager;
24
- setContext(name: string): void;
25
- getActiveContext(): string;
26
- }
27
- //# sourceMappingURL=agent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAK9C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,cAAc,CAAiB;IAEvC,OAAO,CAAC,qBAAqB,CAAyC;IACtE,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAM;gBAE7B,MAAM,EAAE,cAAc,EAAE,WAAW,SAAW;IAWpD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;YAqFnD,aAAa;YAuBb,oBAAoB;IA6FlC,eAAe,IAAI,YAAY;IAI/B,iBAAiB,IAAI,cAAc;IAInC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,gBAAgB,IAAI,MAAM;CAG3B"}
package/dist/agent.js DELETED
@@ -1,217 +0,0 @@
1
- import { LLMClient } from "./llm-client.js";
2
- import { MemoryClient } from "./memory-client.js";
3
- import { ContextManager } from "./context.js";
4
- import { TaskEngine } from "./task-engine.js";
5
- import { buildMessages, buildSystemPrompt } from "./prompt.js";
6
- export class Agent {
7
- config;
8
- llm;
9
- memory;
10
- contextManager;
11
- // Per-context conversation histories
12
- conversationHistories = new Map();
13
- messageCount = 0;
14
- PROMOTION_INTERVAL = 10; // Run promotion every N messages
15
- constructor(config, contextName = "global") {
16
- this.config = config;
17
- this.llm = new LLMClient(config.llm);
18
- this.memory = new MemoryClient(config.memory);
19
- this.contextManager = new ContextManager(this.memory);
20
- if (contextName !== "global") {
21
- this.contextManager.switchContext(contextName);
22
- }
23
- }
24
- async processMessage(userMessage) {
25
- // Check for special commands first (cross-context, tasks)
26
- const specialResult = await this.handleSpecialCommand(userMessage);
27
- if (specialResult)
28
- return specialResult;
29
- // Route message to correct context
30
- const routing = this.contextManager.routeMessage(userMessage);
31
- const contextName = routing.context;
32
- // If an explicit context switch was requested, handle it
33
- if (routing.switched) {
34
- // Ensure context exists in daemon
35
- try {
36
- await this.memory.createContext(contextName);
37
- }
38
- catch {
39
- // Context may already exist
40
- }
41
- }
42
- // Get (or create) conversation history for this context
43
- if (!this.conversationHistories.has(contextName)) {
44
- this.conversationHistories.set(contextName, []);
45
- }
46
- const conversationHistory = this.conversationHistories.get(contextName);
47
- // 1. Query memory for relevant episodes from active context + global
48
- const relevantEpisodes = await this.memory
49
- .search(userMessage, contextName, this.config.memory.top_k)
50
- .catch((err) => {
51
- console.error("Memory search failed, continuing without context:", err.message);
52
- return [];
53
- });
54
- // Record access for retrieved episodes (for promotion engine)
55
- if (relevantEpisodes.length > 0) {
56
- const episodeIds = relevantEpisodes.map((e) => e.id);
57
- this.memory.recordCoAccess(episodeIds).catch(() => { });
58
- for (const ep of relevantEpisodes) {
59
- this.memory.recordAccess(ep.id).catch(() => { });
60
- }
61
- }
62
- // Fetch L3 semantic knowledge for this context
63
- const l3Knowledge = await this.memory
64
- .getL3Knowledge(contextName)
65
- .catch(() => []);
66
- // 2. Build prompt with identity + L2 memories + L3 knowledge + context info
67
- const systemPrompt = buildSystemPrompt(this.config.agent, relevantEpisodes, contextName, l3Knowledge);
68
- const messages = buildMessages(systemPrompt, conversationHistory, userMessage);
69
- // 3. Call LLM
70
- const response = await this.llm.chat(messages);
71
- // 4. Update conversation history (L1 working memory, per-context)
72
- conversationHistory.push({ role: "user", content: userMessage }, { role: "assistant", content: response.content });
73
- // Keep working memory bounded (last 20 turns = 40 messages)
74
- if (conversationHistory.length > 40) {
75
- const trimmed = conversationHistory.slice(-40);
76
- this.conversationHistories.set(contextName, trimmed);
77
- }
78
- // 5. Store episodes in memory daemon (write-through to L2)
79
- await this.storeEpisodes(contextName, userMessage, response.content);
80
- // 6. Periodically trigger L2→L3 promotion (fire-and-forget)
81
- this.messageCount++;
82
- if (this.messageCount % this.PROMOTION_INTERVAL === 0) {
83
- this.memory.runPromotion(contextName).catch((err) => {
84
- console.error("Promotion run failed:", err.message);
85
- });
86
- }
87
- return {
88
- content: response.content,
89
- model: response.model,
90
- context: contextName,
91
- contextSwitched: routing.switched,
92
- };
93
- }
94
- async storeEpisodes(contextName, userMessage, assistantResponse) {
95
- try {
96
- await Promise.all([
97
- this.memory.storeEpisode({
98
- context_name: contextName,
99
- role: "user",
100
- content: userMessage,
101
- }),
102
- this.memory.storeEpisode({
103
- context_name: contextName,
104
- role: "assistant",
105
- content: assistantResponse,
106
- }),
107
- ]);
108
- }
109
- catch (err) {
110
- console.error("Failed to store episodes:", err.message);
111
- }
112
- }
113
- async handleSpecialCommand(message) {
114
- const activeCtx = this.contextManager.getActiveContext();
115
- // --- Cross-context commands ---
116
- // "search all: <query>" or "cross-context search: <query>"
117
- const searchAllMatch = message.match(/^(?:search\s+all|cross-context\s+search)[:\s]+(.+)/i);
118
- if (searchAllMatch) {
119
- const query = searchAllMatch[1].trim();
120
- try {
121
- const results = await this.memory.searchCrossContext(query);
122
- let response = "## Cross-Context Search Results\n\n";
123
- if (results.length === 0) {
124
- response += "No results found across any context.";
125
- }
126
- else {
127
- for (const group of results) {
128
- response += `### Context: ${group.context}\n`;
129
- for (const ep of group.episodes) {
130
- response += `- [${ep.role}] ${ep.content.slice(0, 200)}${ep.content.length > 200 ? "..." : ""} (score: ${ep.score.toFixed(3)})\n`;
131
- }
132
- response += "\n";
133
- }
134
- }
135
- return { content: response, model: "system", context: activeCtx };
136
- }
137
- catch (err) {
138
- return { content: `Cross-context search failed: ${err.message}`, model: "system", context: activeCtx };
139
- }
140
- }
141
- // "share <episode_id> with <context>"
142
- const shareMatch = message.match(/^share\s+(\S+)\s+with\s+(\S+)/i);
143
- if (shareMatch) {
144
- const episodeId = shareMatch[1];
145
- const targetContext = shareMatch[2];
146
- try {
147
- await this.memory.shareEpisode(episodeId, targetContext);
148
- return { content: `Shared episode ${episodeId} with context "${targetContext}".`, model: "system", context: activeCtx };
149
- }
150
- catch (err) {
151
- return { content: `Failed to share: ${err.message}`, model: "system", context: activeCtx };
152
- }
153
- }
154
- // --- Task commands ---
155
- const taskCmd = TaskEngine.parseTaskCommand(message);
156
- if (taskCmd) {
157
- const engine = new TaskEngine({ contextName: activeCtx, memory: this.memory });
158
- try {
159
- switch (taskCmd.action) {
160
- case "add": {
161
- const task = await engine.addTask(taskCmd.title || "Untitled", taskCmd.description || "");
162
- return { content: `Task created: [${task.id.slice(0, 8)}] ${task.title} (status: ${task.status})`, model: "system", context: activeCtx };
163
- }
164
- case "list": {
165
- const tasks = await engine.listTasks(taskCmd.statusFilter);
166
- if (tasks.length === 0) {
167
- return { content: `No tasks${taskCmd.statusFilter ? ` with status "${taskCmd.statusFilter}"` : ""} in context "${activeCtx}".`, model: "system", context: activeCtx };
168
- }
169
- let response = `## Tasks in ${activeCtx}\n\n`;
170
- for (const t of tasks) {
171
- const blockedBy = Array.isArray(t.blocked_by) ? t.blocked_by : JSON.parse(String(t.blocked_by) || "[]");
172
- const blockedStr = blockedBy.length > 0 ? ` (blocked by: ${blockedBy.map((b) => b.slice(0, 8)).join(", ")})` : "";
173
- response += `- [${t.status}] ${t.id.slice(0, 8)}: ${t.title}${blockedStr}\n`;
174
- }
175
- return { content: response, model: "system", context: activeCtx };
176
- }
177
- case "start": {
178
- const task = await engine.startTask(taskCmd.taskId);
179
- return { content: task ? `Task ${taskCmd.taskId.slice(0, 8)} started.` : "Task not found.", model: "system", context: activeCtx };
180
- }
181
- case "complete": {
182
- const task = await engine.completeTask(taskCmd.taskId);
183
- return { content: task ? `Task ${taskCmd.taskId.slice(0, 8)} completed.` : "Task not found.", model: "system", context: activeCtx };
184
- }
185
- case "archive": {
186
- const task = await engine.archiveTask(taskCmd.taskId);
187
- return { content: task ? `Task ${taskCmd.taskId.slice(0, 8)} archived.` : "Task not found.", model: "system", context: activeCtx };
188
- }
189
- case "next": {
190
- const task = await engine.pickAndStartNextTask();
191
- if (task) {
192
- return { content: `Picked up next task: [${task.id.slice(0, 8)}] ${task.title}`, model: "system", context: activeCtx };
193
- }
194
- return { content: "No available tasks to pick up.", model: "system", context: activeCtx };
195
- }
196
- }
197
- }
198
- catch (err) {
199
- return { content: `Task command failed: ${err.message}`, model: "system", context: activeCtx };
200
- }
201
- }
202
- return null;
203
- }
204
- getMemoryClient() {
205
- return this.memory;
206
- }
207
- getContextManager() {
208
- return this.contextManager;
209
- }
210
- setContext(name) {
211
- this.contextManager.switchContext(name);
212
- }
213
- getActiveContext() {
214
- return this.contextManager.getActiveContext();
215
- }
216
- }
217
- //# sourceMappingURL=agent.js.map
package/dist/agent.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}