agent-working-memory 0.5.5 → 0.5.6

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 (71) hide show
  1. package/README.md +399 -399
  2. package/dist/api/routes.d.ts.map +1 -1
  3. package/dist/api/routes.js +21 -5
  4. package/dist/api/routes.js.map +1 -1
  5. package/dist/cli.js +67 -67
  6. package/dist/coordination/index.d.ts +11 -0
  7. package/dist/coordination/index.d.ts.map +1 -0
  8. package/dist/coordination/index.js +39 -0
  9. package/dist/coordination/index.js.map +1 -0
  10. package/dist/coordination/mcp-tools.d.ts +8 -0
  11. package/dist/coordination/mcp-tools.d.ts.map +1 -0
  12. package/dist/coordination/mcp-tools.js +216 -0
  13. package/dist/coordination/mcp-tools.js.map +1 -0
  14. package/dist/coordination/routes.d.ts +9 -0
  15. package/dist/coordination/routes.d.ts.map +1 -0
  16. package/dist/coordination/routes.js +434 -0
  17. package/dist/coordination/routes.js.map +1 -0
  18. package/dist/coordination/schema.d.ts +12 -0
  19. package/dist/coordination/schema.d.ts.map +1 -0
  20. package/dist/coordination/schema.js +91 -0
  21. package/dist/coordination/schema.js.map +1 -0
  22. package/dist/coordination/schemas.d.ts +208 -0
  23. package/dist/coordination/schemas.d.ts.map +1 -0
  24. package/dist/coordination/schemas.js +109 -0
  25. package/dist/coordination/schemas.js.map +1 -0
  26. package/dist/coordination/stale.d.ts +25 -0
  27. package/dist/coordination/stale.d.ts.map +1 -0
  28. package/dist/coordination/stale.js +53 -0
  29. package/dist/coordination/stale.js.map +1 -0
  30. package/dist/index.js +21 -3
  31. package/dist/index.js.map +1 -1
  32. package/dist/mcp.js +90 -79
  33. package/dist/mcp.js.map +1 -1
  34. package/dist/storage/sqlite.d.ts +3 -0
  35. package/dist/storage/sqlite.d.ts.map +1 -1
  36. package/dist/storage/sqlite.js +285 -281
  37. package/dist/storage/sqlite.js.map +1 -1
  38. package/package.json +55 -55
  39. package/src/api/index.ts +3 -3
  40. package/src/api/routes.ts +551 -536
  41. package/src/cli.ts +397 -397
  42. package/src/coordination/index.ts +47 -0
  43. package/src/coordination/mcp-tools.ts +313 -0
  44. package/src/coordination/routes.ts +656 -0
  45. package/src/coordination/schema.ts +94 -0
  46. package/src/coordination/schemas.ts +136 -0
  47. package/src/coordination/stale.ts +89 -0
  48. package/src/core/decay.ts +63 -63
  49. package/src/core/embeddings.ts +88 -88
  50. package/src/core/hebbian.ts +93 -93
  51. package/src/core/index.ts +5 -5
  52. package/src/core/logger.ts +36 -36
  53. package/src/core/query-expander.ts +66 -66
  54. package/src/core/reranker.ts +101 -101
  55. package/src/engine/activation.ts +656 -656
  56. package/src/engine/connections.ts +103 -103
  57. package/src/engine/consolidation-scheduler.ts +125 -125
  58. package/src/engine/eval.ts +102 -102
  59. package/src/engine/eviction.ts +101 -101
  60. package/src/engine/index.ts +8 -8
  61. package/src/engine/retraction.ts +100 -100
  62. package/src/engine/staging.ts +74 -74
  63. package/src/index.ts +137 -121
  64. package/src/mcp.ts +1024 -1013
  65. package/src/storage/index.ts +3 -3
  66. package/src/storage/sqlite.ts +968 -963
  67. package/src/types/agent.ts +67 -67
  68. package/src/types/checkpoint.ts +46 -46
  69. package/src/types/engram.ts +217 -217
  70. package/src/types/eval.ts +100 -100
  71. package/src/types/index.ts +6 -6
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Zod validation schemas for the coordination module.
3
+ * Ported from AgentSynapse packages/coordinator/src/schemas.ts.
4
+ */
5
+ import { z } from 'zod';
6
+ export declare const agentRoleEnum: z.ZodEnum<{
7
+ worker: "worker";
8
+ orchestrator: "orchestrator";
9
+ "dev-lead": "dev-lead";
10
+ }>;
11
+ export declare const agentStatusEnum: z.ZodEnum<{
12
+ working: "working";
13
+ idle: "idle";
14
+ dead: "dead";
15
+ }>;
16
+ export declare const assignmentStatusEnum: z.ZodEnum<{
17
+ in_progress: "in_progress";
18
+ blocked: "blocked";
19
+ completed: "completed";
20
+ failed: "failed";
21
+ }>;
22
+ export declare const commandEnum: z.ZodEnum<{
23
+ BUILD_FREEZE: "BUILD_FREEZE";
24
+ PAUSE: "PAUSE";
25
+ RESUME: "RESUME";
26
+ SHUTDOWN: "SHUTDOWN";
27
+ }>;
28
+ export declare const findingSeverityEnum: z.ZodEnum<{
29
+ error: "error";
30
+ critical: "critical";
31
+ warn: "warn";
32
+ info: "info";
33
+ }>;
34
+ export declare const findingCategoryEnum: z.ZodEnum<{
35
+ other: "other";
36
+ typecheck: "typecheck";
37
+ lint: "lint";
38
+ "test-failure": "test-failure";
39
+ security: "security";
40
+ performance: "performance";
41
+ "dead-code": "dead-code";
42
+ todo: "todo";
43
+ bug: "bug";
44
+ ux: "ux";
45
+ a11y: "a11y";
46
+ sql: "sql";
47
+ convention: "convention";
48
+ freshdesk: "freshdesk";
49
+ "data-quality": "data-quality";
50
+ }>;
51
+ export declare const findingStatusEnum: z.ZodEnum<{
52
+ open: "open";
53
+ resolved: "resolved";
54
+ }>;
55
+ export declare const checkinSchema: z.ZodObject<{
56
+ name: z.ZodString;
57
+ role: z.ZodDefault<z.ZodEnum<{
58
+ worker: "worker";
59
+ orchestrator: "orchestrator";
60
+ "dev-lead": "dev-lead";
61
+ }>>;
62
+ pid: z.ZodOptional<z.ZodNumber>;
63
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
64
+ capabilities: z.ZodOptional<z.ZodArray<z.ZodString>>;
65
+ workspace: z.ZodOptional<z.ZodString>;
66
+ }, z.core.$strip>;
67
+ export declare const checkoutSchema: z.ZodObject<{
68
+ agentId: z.ZodString;
69
+ }, z.core.$strip>;
70
+ export declare const assignCreateSchema: z.ZodObject<{
71
+ agentId: z.ZodOptional<z.ZodString>;
72
+ task: z.ZodString;
73
+ description: z.ZodOptional<z.ZodString>;
74
+ workspace: z.ZodOptional<z.ZodString>;
75
+ }, z.core.$strip>;
76
+ export declare const assignmentQuerySchema: z.ZodObject<{
77
+ agentId: z.ZodOptional<z.ZodString>;
78
+ workspace: z.ZodOptional<z.ZodString>;
79
+ }, z.core.$strip>;
80
+ export declare const assignmentClaimSchema: z.ZodObject<{
81
+ agentId: z.ZodString;
82
+ }, z.core.$strip>;
83
+ export declare const assignmentUpdateSchema: z.ZodObject<{
84
+ status: z.ZodEnum<{
85
+ in_progress: "in_progress";
86
+ blocked: "blocked";
87
+ completed: "completed";
88
+ failed: "failed";
89
+ }>;
90
+ result: z.ZodOptional<z.ZodString>;
91
+ }, z.core.$strip>;
92
+ export declare const lockAcquireSchema: z.ZodObject<{
93
+ agentId: z.ZodString;
94
+ filePath: z.ZodString;
95
+ reason: z.ZodOptional<z.ZodString>;
96
+ }, z.core.$strip>;
97
+ export declare const lockReleaseSchema: z.ZodObject<{
98
+ agentId: z.ZodString;
99
+ filePath: z.ZodString;
100
+ }, z.core.$strip>;
101
+ export declare const commandCreateSchema: z.ZodObject<{
102
+ command: z.ZodEnum<{
103
+ BUILD_FREEZE: "BUILD_FREEZE";
104
+ PAUSE: "PAUSE";
105
+ RESUME: "RESUME";
106
+ SHUTDOWN: "SHUTDOWN";
107
+ }>;
108
+ reason: z.ZodOptional<z.ZodString>;
109
+ issuedBy: z.ZodOptional<z.ZodString>;
110
+ workspace: z.ZodOptional<z.ZodString>;
111
+ }, z.core.$strip>;
112
+ export declare const commandWaitQuerySchema: z.ZodObject<{
113
+ status: z.ZodDefault<z.ZodString>;
114
+ timeout: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
115
+ agentId: z.ZodOptional<z.ZodString>;
116
+ workspace: z.ZodOptional<z.ZodString>;
117
+ }, z.core.$strip>;
118
+ export declare const findingCreateSchema: z.ZodObject<{
119
+ agentId: z.ZodString;
120
+ category: z.ZodEnum<{
121
+ other: "other";
122
+ typecheck: "typecheck";
123
+ lint: "lint";
124
+ "test-failure": "test-failure";
125
+ security: "security";
126
+ performance: "performance";
127
+ "dead-code": "dead-code";
128
+ todo: "todo";
129
+ bug: "bug";
130
+ ux: "ux";
131
+ a11y: "a11y";
132
+ sql: "sql";
133
+ convention: "convention";
134
+ freshdesk: "freshdesk";
135
+ "data-quality": "data-quality";
136
+ }>;
137
+ severity: z.ZodDefault<z.ZodEnum<{
138
+ error: "error";
139
+ critical: "critical";
140
+ warn: "warn";
141
+ info: "info";
142
+ }>>;
143
+ filePath: z.ZodOptional<z.ZodString>;
144
+ lineNumber: z.ZodOptional<z.ZodNumber>;
145
+ description: z.ZodString;
146
+ suggestion: z.ZodOptional<z.ZodString>;
147
+ }, z.core.$strip>;
148
+ export declare const findingsQuerySchema: z.ZodObject<{
149
+ category: z.ZodOptional<z.ZodEnum<{
150
+ other: "other";
151
+ typecheck: "typecheck";
152
+ lint: "lint";
153
+ "test-failure": "test-failure";
154
+ security: "security";
155
+ performance: "performance";
156
+ "dead-code": "dead-code";
157
+ todo: "todo";
158
+ bug: "bug";
159
+ ux: "ux";
160
+ a11y: "a11y";
161
+ sql: "sql";
162
+ convention: "convention";
163
+ freshdesk: "freshdesk";
164
+ "data-quality": "data-quality";
165
+ }>>;
166
+ severity: z.ZodOptional<z.ZodEnum<{
167
+ error: "error";
168
+ critical: "critical";
169
+ warn: "warn";
170
+ info: "info";
171
+ }>>;
172
+ status: z.ZodOptional<z.ZodEnum<{
173
+ open: "open";
174
+ resolved: "resolved";
175
+ }>>;
176
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
177
+ }, z.core.$strip>;
178
+ export declare const assignmentIdParamSchema: z.ZodObject<{
179
+ id: z.ZodString;
180
+ }, z.core.$strip>;
181
+ export declare const findingIdParamSchema: z.ZodObject<{
182
+ id: z.ZodCoercedNumber<unknown>;
183
+ }, z.core.$strip>;
184
+ export declare const pulseSchema: z.ZodObject<{
185
+ agentId: z.ZodString;
186
+ }, z.core.$strip>;
187
+ export declare const eventsQuerySchema: z.ZodObject<{
188
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
189
+ }, z.core.$strip>;
190
+ export declare const staleQuerySchema: z.ZodObject<{
191
+ seconds: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
192
+ cleanup: z.ZodOptional<z.ZodEnum<{
193
+ 0: "0";
194
+ 1: "1";
195
+ true: "true";
196
+ false: "false";
197
+ }>>;
198
+ }, z.core.$strip>;
199
+ export declare const workersQuerySchema: z.ZodObject<{
200
+ capability: z.ZodOptional<z.ZodString>;
201
+ status: z.ZodOptional<z.ZodEnum<{
202
+ working: "working";
203
+ idle: "idle";
204
+ dead: "dead";
205
+ }>>;
206
+ workspace: z.ZodOptional<z.ZodString>;
207
+ }, z.core.$strip>;
208
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/coordination/schemas.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,aAAa;;;;EAAiD,CAAC;AAC5E,eAAO,MAAM,eAAe;;;;EAAsC,CAAC;AACnE,eAAO,MAAM,oBAAoB;;;;;EAA4D,CAAC;AAC9F,eAAO,MAAM,WAAW;;;;;EAA0D,CAAC;AACnF,eAAO,MAAM,mBAAmB;;;;;EAAgD,CAAC;AACjF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;EAI9B,CAAC;AACH,eAAO,MAAM,iBAAiB;;;EAA+B,CAAC;AAI9D,eAAO,MAAM,aAAa;;;;;;;;;;;iBAOxB,CAAC;AAEH,eAAO,MAAM,cAAc;;iBAEzB,CAAC;AAIH,eAAO,MAAM,kBAAkB;;;;;iBAK7B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;iBAGhC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;iBAEhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;iBAGjC,CAAC;AAIH,eAAO,MAAM,iBAAiB;;;;iBAI5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;iBAG5B,CAAC;AAIH,eAAO,MAAM,mBAAmB;;;;;;;;;;iBAK9B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;iBAKjC,CAAC;AAIH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQ9B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAK9B,CAAC;AAIH,eAAO,MAAM,uBAAuB;;iBAAsC,CAAC;AAC3E,eAAO,MAAM,oBAAoB;;iBAAuD,CAAC;AAIzF,eAAO,MAAM,WAAW;;iBAEtB,CAAC;AAIH,eAAO,MAAM,iBAAiB;;iBAE5B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;iBAG3B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;iBAI7B,CAAC"}
@@ -0,0 +1,109 @@
1
+ // Copyright 2026 Robert Winter / Complete Ideas
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * Zod validation schemas for the coordination module.
5
+ * Ported from AgentSynapse packages/coordinator/src/schemas.ts.
6
+ */
7
+ import { z } from 'zod';
8
+ // ─── Enums ──────────────────────────────────────────────────────
9
+ export const agentRoleEnum = z.enum(['worker', 'orchestrator', 'dev-lead']);
10
+ export const agentStatusEnum = z.enum(['idle', 'working', 'dead']);
11
+ export const assignmentStatusEnum = z.enum(['in_progress', 'completed', 'failed', 'blocked']);
12
+ export const commandEnum = z.enum(['BUILD_FREEZE', 'PAUSE', 'RESUME', 'SHUTDOWN']);
13
+ export const findingSeverityEnum = z.enum(['critical', 'error', 'warn', 'info']);
14
+ export const findingCategoryEnum = z.enum([
15
+ 'typecheck', 'lint', 'test-failure', 'security', 'performance',
16
+ 'dead-code', 'todo', 'bug', 'ux', 'a11y', 'sql', 'convention',
17
+ 'freshdesk', 'data-quality', 'other',
18
+ ]);
19
+ export const findingStatusEnum = z.enum(['open', 'resolved']);
20
+ // ─── Checkin ────────────────────────────────────────────────────
21
+ export const checkinSchema = z.object({
22
+ name: z.string().min(1).max(50),
23
+ role: agentRoleEnum.default('worker'),
24
+ pid: z.number().int().positive().optional(),
25
+ metadata: z.record(z.string(), z.unknown()).optional(),
26
+ capabilities: z.array(z.string().max(50)).max(20).optional(),
27
+ workspace: z.string().max(50).optional(),
28
+ });
29
+ export const checkoutSchema = z.object({
30
+ agentId: z.string().uuid(),
31
+ });
32
+ // ─── Assignments ────────────────────────────────────────────────
33
+ export const assignCreateSchema = z.object({
34
+ agentId: z.string().uuid().optional(),
35
+ task: z.string().min(1).max(1000),
36
+ description: z.string().max(5000).optional(),
37
+ workspace: z.string().max(50).optional(),
38
+ });
39
+ export const assignmentQuerySchema = z.object({
40
+ agentId: z.string().uuid().optional(),
41
+ workspace: z.string().max(50).optional(),
42
+ });
43
+ export const assignmentClaimSchema = z.object({
44
+ agentId: z.string().uuid(),
45
+ });
46
+ export const assignmentUpdateSchema = z.object({
47
+ status: assignmentStatusEnum,
48
+ result: z.string().max(10000).optional(),
49
+ });
50
+ // ─── Locks ──────────────────────────────────────────────────────
51
+ export const lockAcquireSchema = z.object({
52
+ agentId: z.string().uuid(),
53
+ filePath: z.string().min(1).max(500),
54
+ reason: z.string().max(500).optional(),
55
+ });
56
+ export const lockReleaseSchema = z.object({
57
+ agentId: z.string().uuid(),
58
+ filePath: z.string().min(1).max(500),
59
+ });
60
+ // ─── Commands ───────────────────────────────────────────────────
61
+ export const commandCreateSchema = z.object({
62
+ command: commandEnum,
63
+ reason: z.string().max(1000).optional(),
64
+ issuedBy: z.string().max(50).optional(),
65
+ workspace: z.string().max(50).optional(),
66
+ });
67
+ export const commandWaitQuerySchema = z.object({
68
+ status: z.string().max(20).default('idle'),
69
+ timeout: z.coerce.number().int().min(0).max(30).optional(),
70
+ agentId: z.string().optional(),
71
+ workspace: z.string().max(50).optional(),
72
+ });
73
+ // ─── Findings ───────────────────────────────────────────────────
74
+ export const findingCreateSchema = z.object({
75
+ agentId: z.string().uuid(),
76
+ category: findingCategoryEnum,
77
+ severity: findingSeverityEnum.default('info'),
78
+ filePath: z.string().max(500).optional(),
79
+ lineNumber: z.number().int().positive().optional(),
80
+ description: z.string().min(1).max(5000),
81
+ suggestion: z.string().max(5000).optional(),
82
+ });
83
+ export const findingsQuerySchema = z.object({
84
+ category: findingCategoryEnum.optional(),
85
+ severity: findingSeverityEnum.optional(),
86
+ status: findingStatusEnum.optional(),
87
+ limit: z.coerce.number().int().min(1).max(200).default(50),
88
+ });
89
+ // ─── Param Schemas ─────────────────────────────────────────────
90
+ export const assignmentIdParamSchema = z.object({ id: z.string().uuid() });
91
+ export const findingIdParamSchema = z.object({ id: z.coerce.number().int().positive() });
92
+ // ─── Pulse ─────────────────────────────────────────────────────
93
+ export const pulseSchema = z.object({
94
+ agentId: z.string().uuid(),
95
+ });
96
+ // ─── Status / Events ────────────────────────────────────────────
97
+ export const eventsQuerySchema = z.object({
98
+ limit: z.coerce.number().int().min(1).max(200).default(50),
99
+ });
100
+ export const staleQuerySchema = z.object({
101
+ seconds: z.coerce.number().int().min(1).max(86400).default(120),
102
+ cleanup: z.enum(['0', '1', 'true', 'false']).optional(),
103
+ });
104
+ export const workersQuerySchema = z.object({
105
+ capability: z.string().max(50).optional(),
106
+ status: agentStatusEnum.optional(),
107
+ workspace: z.string().max(50).optional(),
108
+ });
109
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/coordination/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Stale agent detection and cleanup for the coordination module.
3
+ */
4
+ import type Database from 'better-sqlite3';
5
+ interface StaleAgent {
6
+ id: string;
7
+ name: string;
8
+ role: string;
9
+ status: string;
10
+ last_seen: string;
11
+ seconds_since_seen: number;
12
+ }
13
+ /** Detect agents that haven't checked in within the threshold. */
14
+ export declare function detectStale(db: Database.Database, thresholdSeconds: number): StaleAgent[];
15
+ /** Clean up stale agents: fail assignments, release locks, mark dead. */
16
+ export declare function cleanupStale(db: Database.Database, thresholdSeconds: number): {
17
+ stale: StaleAgent[];
18
+ cleaned: number;
19
+ };
20
+ /** Prune heartbeat events older than 1 hour. Keeps assignment, registered, and command events permanently. */
21
+ export declare function pruneOldHeartbeats(db: Database.Database): number;
22
+ /** Clean slate on startup: mark all live agents dead, release locks, clear commands. */
23
+ export declare function cleanSlate(db: Database.Database): void;
24
+ export {};
25
+ //# sourceMappingURL=stale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale.d.ts","sourceRoot":"","sources":["../../src/coordination/stale.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,GAAG,UAAU,EAAE,CAQzF;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAiCtH;AAED,8GAA8G;AAC9G,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAKhE;AAED,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAetD"}
@@ -0,0 +1,53 @@
1
+ // Copyright 2026 Robert Winter / Complete Ideas
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * Stale agent detection and cleanup for the coordination module.
5
+ */
6
+ /** Detect agents that haven't checked in within the threshold. */
7
+ export function detectStale(db, thresholdSeconds) {
8
+ return db.prepare(`SELECT id, name, role, status, last_seen,
9
+ ROUND((julianday('now') - julianday(last_seen)) * 86400) AS seconds_since_seen
10
+ FROM coord_agents
11
+ WHERE status NOT IN ('dead')
12
+ AND (julianday('now') - julianday(last_seen)) * 86400 > ?`).all(thresholdSeconds);
13
+ }
14
+ /** Clean up stale agents: fail assignments, release locks, mark dead. */
15
+ export function cleanupStale(db, thresholdSeconds) {
16
+ const stale = detectStale(db, thresholdSeconds);
17
+ let cleaned = 0;
18
+ for (const agent of stale) {
19
+ // Fail active assignments
20
+ const orphaned = db.prepare(`UPDATE coord_assignments SET status = 'failed', result = 'agent disconnected (stale)', completed_at = datetime('now')
21
+ WHERE agent_id = ? AND status IN ('assigned', 'in_progress')`).run(agent.id);
22
+ if (orphaned.changes > 0) {
23
+ db.prepare(`INSERT INTO coord_events (agent_id, event_type, detail) VALUES (?, 'assignment_failed', ?)`).run(agent.id, `auto-failed ${orphaned.changes} orphaned assignment(s) — agent stale`);
24
+ }
25
+ // Release locks
26
+ const locks = db.prepare(`DELETE FROM coord_locks WHERE agent_id = ?`).run(agent.id);
27
+ // Mark dead
28
+ db.prepare(`UPDATE coord_agents SET status = 'dead', current_task = NULL WHERE id = ?`).run(agent.id);
29
+ cleaned += orphaned.changes + locks.changes;
30
+ if (orphaned.changes > 0 || locks.changes > 0) {
31
+ db.prepare(`INSERT INTO coord_events (agent_id, event_type, detail) VALUES (?, 'stale_cleanup', ?)`).run(agent.id, `failed ${orphaned.changes} assignment(s), released ${locks.changes} lock(s)`);
32
+ }
33
+ }
34
+ return { stale, cleaned };
35
+ }
36
+ /** Prune heartbeat events older than 1 hour. Keeps assignment, registered, and command events permanently. */
37
+ export function pruneOldHeartbeats(db) {
38
+ const result = db.prepare(`DELETE FROM coord_events WHERE event_type = 'heartbeat' AND created_at < datetime('now', '-1 hour')`).run();
39
+ return result.changes;
40
+ }
41
+ /** Clean slate on startup: mark all live agents dead, release locks, clear commands. */
42
+ export function cleanSlate(db) {
43
+ const alive = db.prepare(`SELECT id, name FROM coord_agents WHERE status != 'dead'`).all();
44
+ if (alive.length === 0)
45
+ return;
46
+ for (const agent of alive) {
47
+ db.prepare(`UPDATE coord_agents SET status = 'dead', current_task = NULL WHERE id = ?`).run(agent.id);
48
+ db.prepare(`DELETE FROM coord_locks WHERE agent_id = ?`).run(agent.id);
49
+ }
50
+ db.prepare(`UPDATE coord_commands SET cleared_at = datetime('now') WHERE cleared_at IS NULL`).run();
51
+ console.log(` Coordination clean slate: marked ${alive.length} agent(s) from previous session as dead`);
52
+ }
53
+ //# sourceMappingURL=stale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale.js","sourceRoot":"","sources":["../../src/coordination/stale.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,sCAAsC;AACtC;;GAEG;AAaH,kEAAkE;AAClE,MAAM,UAAU,WAAW,CAAC,EAAqB,EAAE,gBAAwB;IACzE,OAAO,EAAE,CAAC,OAAO,CACf;;;;iEAI6D,CAC9D,CAAC,GAAG,CAAC,gBAAgB,CAAiB,CAAC;AAC1C,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,YAAY,CAAC,EAAqB,EAAE,gBAAwB;IAC1E,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAChD,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CACzB;oEAC8D,CAC/D,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,QAAQ,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACzB,EAAE,CAAC,OAAO,CACR,4FAA4F,CAC7F,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,eAAe,QAAQ,CAAC,OAAO,uCAAuC,CAAC,CAAC;QAC1F,CAAC;QAED,gBAAgB;QAChB,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAErF,YAAY;QACZ,EAAE,CAAC,OAAO,CAAC,2EAA2E,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEtG,OAAO,IAAI,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAE5C,IAAI,QAAQ,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YAC9C,EAAE,CAAC,OAAO,CACR,wFAAwF,CACzF,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,QAAQ,CAAC,OAAO,4BAA4B,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED,8GAA8G;AAC9G,MAAM,UAAU,kBAAkB,CAAC,EAAqB;IACtD,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACvB,qGAAqG,CACtG,CAAC,GAAG,EAAE,CAAC;IACR,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,UAAU,CAAC,EAAqB;IAC9C,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CACtB,0DAA0D,CAC3D,CAAC,GAAG,EAAyC,CAAC;IAE/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE/B,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,EAAE,CAAC,OAAO,CAAC,2EAA2E,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtG,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,EAAE,CAAC,OAAO,CAAC,iFAAiF,CAAC,CAAC,GAAG,EAAE,CAAC;IAEpG,OAAO,CAAC,GAAG,CAAC,sCAAsC,KAAK,CAAC,MAAM,yCAAyC,CAAC,CAAC;AAC3G,CAAC"}
package/dist/index.js CHANGED
@@ -68,8 +68,8 @@ async function main() {
68
68
  const evalEngine = new EvalEngine(store);
69
69
  const consolidationEngine = new ConsolidationEngine(store);
70
70
  const consolidationScheduler = new ConsolidationScheduler(store, consolidationEngine);
71
- // API
72
- const app = Fastify({ logger: true });
71
+ // API — disable Fastify's default request logging (too noisy for hive polling)
72
+ const app = Fastify({ logger: false });
73
73
  // Bearer token auth — only enforced when AWM_API_KEY is explicitly set and non-empty
74
74
  if (API_KEY && API_KEY !== 'NONE' && API_KEY.length > 1) {
75
75
  app.addHook('onRequest', async (req, reply) => {
@@ -88,6 +88,22 @@ async function main() {
88
88
  evictionEngine, retractionEngine, evalEngine,
89
89
  consolidationEngine, consolidationScheduler,
90
90
  });
91
+ // Coordination module (opt-in via AWM_COORDINATION=true)
92
+ let heartbeatPruneTimer = null;
93
+ const { isCoordinationEnabled, initCoordination } = await import('./coordination/index.js');
94
+ if (isCoordinationEnabled()) {
95
+ initCoordination(app, store.getDb());
96
+ // Prune stale heartbeat events every 30s (keeps assignment/command events permanently)
97
+ const { pruneOldHeartbeats } = await import('./coordination/stale.js');
98
+ heartbeatPruneTimer = setInterval(() => {
99
+ const pruned = pruneOldHeartbeats(store.getDb());
100
+ if (pruned > 0)
101
+ console.log(`[coordination] pruned ${pruned} old heartbeat event(s)`);
102
+ }, 30_000);
103
+ }
104
+ else {
105
+ console.log(' Coordination module disabled (set AWM_COORDINATION=true to enable)');
106
+ }
91
107
  // Background tasks
92
108
  stagingBuffer.start(DEFAULT_AGENT_CONFIG.stagingTtlMs);
93
109
  consolidationScheduler.start();
@@ -97,9 +113,11 @@ async function main() {
97
113
  getExpander().catch(err => console.warn('Query expander model unavailable:', err.message));
98
114
  // Start server
99
115
  await app.listen({ port: PORT, host: '0.0.0.0' });
100
- console.log(`AgentWorkingMemory v0.5.4 listening on port ${PORT}`);
116
+ console.log(`AgentWorkingMemory v0.5.5 listening on port ${PORT}`);
101
117
  // Graceful shutdown
102
118
  const shutdown = () => {
119
+ if (heartbeatPruneTimer)
120
+ clearInterval(heartbeatPruneTimer);
103
121
  consolidationScheduler.stop();
104
122
  stagingBuffer.stop();
105
123
  store.close();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,sCAAsC;AACtC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,qDAAqD;AACrD,IAAI,CAAC;IACH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,SAAS;QAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,8BAA8B;IAC/E,CAAC;AACH,CAAC;AAAC,MAAM,CAAC,CAAC,gCAAgC,CAAC,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,WAAW,CAAC;AACvD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC;AAEhD,KAAK,UAAU,IAAI;IACjB,gEAAgE;IAChE,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC5C,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9E,IAAI,CAAC;YACH,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,mBAAoB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,UAAU,CAAC,OAAO,CAAC,CAAC;IAEpB,UAAU;IACV,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAEvC,UAAU;IACV,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACvE,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACjE,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,sBAAsB,GAAG,IAAI,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAEtF,MAAM;IACN,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtC,qFAAqF;IACrF,IAAI,OAAO,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;YAC5C,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS;gBAAE,OAAO,CAAC,gCAAgC;YACnE,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;YACzC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAuB,CAAC;YAC/D,IAAI,MAAM,KAAK,UAAU,OAAO,EAAE,IAAI,OAAO,KAAK,OAAO;gBAAE,OAAO;YAClE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACxD,CAAC;IAED,cAAc,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,gBAAgB,EAAE,gBAAgB;QACzC,cAAc,EAAE,gBAAgB,EAAE,UAAU;QAC5C,mBAAmB,EAAE,sBAAsB;KAC5C,CAAC,CAAC;IAEH,mBAAmB;IACnB,aAAa,CAAC,KAAK,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACvD,sBAAsB,CAAC,KAAK,EAAE,CAAC;IAE/B,gGAAgG;IAChG,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACtF,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,6BAA6B,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACrF,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAE3F,eAAe;IACf,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,+CAA+C,IAAI,EAAE,CAAC,CAAC;IAEnE,oBAAoB;IACpB,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,sBAAsB,CAAC,IAAI,EAAE,CAAC;QAC9B,aAAa,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}