agent-working-memory 0.5.5 → 0.6.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 (82) hide show
  1. package/README.md +428 -399
  2. package/dist/api/routes.d.ts.map +1 -1
  3. package/dist/api/routes.js +60 -5
  4. package/dist/api/routes.js.map +1 -1
  5. package/dist/cli.js +468 -68
  6. package/dist/cli.js.map +1 -1
  7. package/dist/coordination/index.d.ts +11 -0
  8. package/dist/coordination/index.d.ts.map +1 -0
  9. package/dist/coordination/index.js +39 -0
  10. package/dist/coordination/index.js.map +1 -0
  11. package/dist/coordination/mcp-tools.d.ts +8 -0
  12. package/dist/coordination/mcp-tools.d.ts.map +1 -0
  13. package/dist/coordination/mcp-tools.js +221 -0
  14. package/dist/coordination/mcp-tools.js.map +1 -0
  15. package/dist/coordination/routes.d.ts +9 -0
  16. package/dist/coordination/routes.d.ts.map +1 -0
  17. package/dist/coordination/routes.js +573 -0
  18. package/dist/coordination/routes.js.map +1 -0
  19. package/dist/coordination/schema.d.ts +12 -0
  20. package/dist/coordination/schema.d.ts.map +1 -0
  21. package/dist/coordination/schema.js +125 -0
  22. package/dist/coordination/schema.js.map +1 -0
  23. package/dist/coordination/schemas.d.ts +227 -0
  24. package/dist/coordination/schemas.d.ts.map +1 -0
  25. package/dist/coordination/schemas.js +125 -0
  26. package/dist/coordination/schemas.js.map +1 -0
  27. package/dist/coordination/stale.d.ts +27 -0
  28. package/dist/coordination/stale.d.ts.map +1 -0
  29. package/dist/coordination/stale.js +58 -0
  30. package/dist/coordination/stale.js.map +1 -0
  31. package/dist/engine/activation.d.ts.map +1 -1
  32. package/dist/engine/activation.js +119 -23
  33. package/dist/engine/activation.js.map +1 -1
  34. package/dist/engine/consolidation.d.ts.map +1 -1
  35. package/dist/engine/consolidation.js +27 -6
  36. package/dist/engine/consolidation.js.map +1 -1
  37. package/dist/index.js +100 -4
  38. package/dist/index.js.map +1 -1
  39. package/dist/mcp.js +149 -80
  40. package/dist/mcp.js.map +1 -1
  41. package/dist/storage/sqlite.d.ts +21 -0
  42. package/dist/storage/sqlite.d.ts.map +1 -1
  43. package/dist/storage/sqlite.js +331 -282
  44. package/dist/storage/sqlite.js.map +1 -1
  45. package/dist/types/engram.d.ts +24 -0
  46. package/dist/types/engram.d.ts.map +1 -1
  47. package/dist/types/engram.js.map +1 -1
  48. package/package.json +57 -55
  49. package/src/api/index.ts +3 -3
  50. package/src/api/routes.ts +600 -536
  51. package/src/cli.ts +850 -397
  52. package/src/coordination/index.ts +47 -0
  53. package/src/coordination/mcp-tools.ts +318 -0
  54. package/src/coordination/routes.ts +846 -0
  55. package/src/coordination/schema.ts +120 -0
  56. package/src/coordination/schemas.ts +155 -0
  57. package/src/coordination/stale.ts +97 -0
  58. package/src/core/decay.ts +63 -63
  59. package/src/core/embeddings.ts +88 -88
  60. package/src/core/hebbian.ts +93 -93
  61. package/src/core/index.ts +5 -5
  62. package/src/core/logger.ts +36 -36
  63. package/src/core/query-expander.ts +66 -66
  64. package/src/core/reranker.ts +101 -101
  65. package/src/engine/activation.ts +758 -656
  66. package/src/engine/connections.ts +103 -103
  67. package/src/engine/consolidation-scheduler.ts +125 -125
  68. package/src/engine/consolidation.ts +29 -6
  69. package/src/engine/eval.ts +102 -102
  70. package/src/engine/eviction.ts +101 -101
  71. package/src/engine/index.ts +8 -8
  72. package/src/engine/retraction.ts +100 -100
  73. package/src/engine/staging.ts +74 -74
  74. package/src/index.ts +208 -121
  75. package/src/mcp.ts +1093 -1013
  76. package/src/storage/index.ts +3 -3
  77. package/src/storage/sqlite.ts +1017 -963
  78. package/src/types/agent.ts +67 -67
  79. package/src/types/checkpoint.ts +46 -46
  80. package/src/types/engram.ts +245 -217
  81. package/src/types/eval.ts +100 -100
  82. package/src/types/index.ts +6 -6
@@ -0,0 +1,12 @@
1
+ /**
2
+ * SQL table definitions for the coordination module.
3
+ * Tables are created conditionally when AWM_COORDINATION=true.
4
+ * Uses the same memory.db — coordination events feed the activation engine.
5
+ */
6
+ import type Database from 'better-sqlite3';
7
+ /**
8
+ * Create all coordination tables in the given database.
9
+ * Safe to call multiple times (CREATE IF NOT EXISTS).
10
+ */
11
+ export declare function initCoordinationTables(db: Database.Database): void;
12
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/coordination/schema.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAoG3C;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAOlE"}
@@ -0,0 +1,125 @@
1
+ // Copyright 2026 Robert Winter / Complete Ideas
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * SQL table definitions for the coordination module.
5
+ * Tables are created conditionally when AWM_COORDINATION=true.
6
+ * Uses the same memory.db — coordination events feed the activation engine.
7
+ */
8
+ const COORDINATION_TABLES = `
9
+ -- Coordination: agents in the hive
10
+ CREATE TABLE IF NOT EXISTS coord_agents (
11
+ id TEXT PRIMARY KEY,
12
+ name TEXT NOT NULL,
13
+ role TEXT NOT NULL DEFAULT 'worker',
14
+ status TEXT NOT NULL DEFAULT 'idle',
15
+ pid INTEGER,
16
+ started_at TEXT NOT NULL DEFAULT (datetime('now')),
17
+ last_seen TEXT NOT NULL DEFAULT (datetime('now')),
18
+ current_task TEXT,
19
+ metadata TEXT,
20
+ capabilities TEXT,
21
+ workspace TEXT
22
+ );
23
+
24
+ -- Prevent duplicate agent registrations for the same name+workspace
25
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_coord_agents_name_workspace
26
+ ON coord_agents (name, COALESCE(workspace, ''));
27
+
28
+ -- Coordination: assignments
29
+ CREATE TABLE IF NOT EXISTS coord_assignments (
30
+ id TEXT PRIMARY KEY,
31
+ agent_id TEXT,
32
+ task TEXT NOT NULL,
33
+ description TEXT,
34
+ status TEXT NOT NULL DEFAULT 'pending',
35
+ priority INTEGER NOT NULL DEFAULT 0,
36
+ blocked_by TEXT,
37
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
38
+ started_at TEXT,
39
+ completed_at TEXT,
40
+ result TEXT,
41
+ commit_sha TEXT,
42
+ workspace TEXT,
43
+ FOREIGN KEY (agent_id) REFERENCES coord_agents(id),
44
+ FOREIGN KEY (blocked_by) REFERENCES coord_assignments(id)
45
+ );
46
+
47
+ -- Coordination: file locks
48
+ CREATE TABLE IF NOT EXISTS coord_locks (
49
+ file_path TEXT PRIMARY KEY,
50
+ agent_id TEXT NOT NULL,
51
+ locked_at TEXT NOT NULL DEFAULT (datetime('now')),
52
+ reason TEXT,
53
+ FOREIGN KEY (agent_id) REFERENCES coord_agents(id)
54
+ );
55
+
56
+ -- Coordination: orchestrator broadcast commands
57
+ CREATE TABLE IF NOT EXISTS coord_commands (
58
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
59
+ command TEXT NOT NULL,
60
+ reason TEXT,
61
+ issued_by TEXT,
62
+ issued_at TEXT NOT NULL DEFAULT (datetime('now')),
63
+ cleared_at TEXT,
64
+ workspace TEXT
65
+ );
66
+
67
+ -- Coordination: findings reported by agents
68
+ CREATE TABLE IF NOT EXISTS coord_findings (
69
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
70
+ agent_id TEXT NOT NULL,
71
+ category TEXT NOT NULL,
72
+ severity TEXT NOT NULL DEFAULT 'info',
73
+ file_path TEXT,
74
+ line_number INTEGER,
75
+ description TEXT NOT NULL,
76
+ suggestion TEXT,
77
+ status TEXT NOT NULL DEFAULT 'open',
78
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
79
+ resolved_at TEXT,
80
+ FOREIGN KEY (agent_id) REFERENCES coord_agents(id)
81
+ );
82
+
83
+ -- Coordination: cross-agent decision propagation
84
+ CREATE TABLE IF NOT EXISTS coord_decisions (
85
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
86
+ author_id TEXT NOT NULL,
87
+ assignment_id TEXT,
88
+ tags TEXT,
89
+ summary TEXT NOT NULL,
90
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
91
+ FOREIGN KEY (author_id) REFERENCES coord_agents(id)
92
+ );
93
+ CREATE INDEX IF NOT EXISTS idx_coord_decisions_assignment
94
+ ON coord_decisions (assignment_id, created_at);
95
+
96
+ -- Coordination: event audit trail
97
+ CREATE TABLE IF NOT EXISTS coord_events (
98
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
99
+ agent_id TEXT,
100
+ event_type TEXT NOT NULL,
101
+ detail TEXT,
102
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
103
+ );
104
+ `;
105
+ /**
106
+ * Create all coordination tables in the given database.
107
+ * Safe to call multiple times (CREATE IF NOT EXISTS).
108
+ */
109
+ export function initCoordinationTables(db) {
110
+ db.exec(COORDINATION_TABLES);
111
+ // Migrations: add columns to existing coord_assignments tables
112
+ try {
113
+ db.exec(`ALTER TABLE coord_assignments ADD COLUMN commit_sha TEXT`);
114
+ }
115
+ catch { /* exists */ }
116
+ try {
117
+ db.exec(`ALTER TABLE coord_assignments ADD COLUMN priority INTEGER NOT NULL DEFAULT 0`);
118
+ }
119
+ catch { /* exists */ }
120
+ try {
121
+ db.exec(`ALTER TABLE coord_assignments ADD COLUMN blocked_by TEXT`);
122
+ }
123
+ catch { /* exists */ }
124
+ }
125
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/coordination/schema.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,sCAAsC;AACtC;;;;GAIG;AAIH,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgG3B,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAqB;IAC1D,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAE7B,+DAA+D;IAC/D,IAAI,CAAC;QAAC,EAAE,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACnG,IAAI,CAAC;QAAC,EAAE,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACvH,IAAI,CAAC;QAAC,EAAE,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AACrG,CAAC"}
@@ -0,0 +1,227 @@
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
+ dead: "dead";
14
+ idle: "idle";
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
+ priority: z.ZodDefault<z.ZodNumber>;
76
+ blocked_by: z.ZodOptional<z.ZodString>;
77
+ }, z.core.$strip>;
78
+ export declare const assignmentQuerySchema: z.ZodObject<{
79
+ agentId: z.ZodOptional<z.ZodString>;
80
+ name: z.ZodOptional<z.ZodString>;
81
+ workspace: z.ZodOptional<z.ZodString>;
82
+ }, z.core.$strip>;
83
+ export declare const nextSchema: z.ZodObject<{
84
+ name: z.ZodString;
85
+ workspace: z.ZodOptional<z.ZodString>;
86
+ role: z.ZodDefault<z.ZodEnum<{
87
+ worker: "worker";
88
+ orchestrator: "orchestrator";
89
+ "dev-lead": "dev-lead";
90
+ }>>;
91
+ capabilities: z.ZodOptional<z.ZodArray<z.ZodString>>;
92
+ }, z.core.$strip>;
93
+ export declare const assignmentClaimSchema: z.ZodObject<{
94
+ agentId: z.ZodString;
95
+ }, z.core.$strip>;
96
+ export declare const assignmentUpdateSchema: z.ZodObject<{
97
+ status: z.ZodEnum<{
98
+ in_progress: "in_progress";
99
+ blocked: "blocked";
100
+ completed: "completed";
101
+ failed: "failed";
102
+ }>;
103
+ result: z.ZodOptional<z.ZodString>;
104
+ commit_sha: z.ZodOptional<z.ZodString>;
105
+ }, z.core.$strip>;
106
+ export declare const lockAcquireSchema: z.ZodObject<{
107
+ agentId: z.ZodString;
108
+ filePath: z.ZodString;
109
+ reason: z.ZodOptional<z.ZodString>;
110
+ }, z.core.$strip>;
111
+ export declare const lockReleaseSchema: z.ZodObject<{
112
+ agentId: z.ZodString;
113
+ filePath: z.ZodString;
114
+ }, z.core.$strip>;
115
+ export declare const commandCreateSchema: z.ZodObject<{
116
+ command: z.ZodEnum<{
117
+ BUILD_FREEZE: "BUILD_FREEZE";
118
+ PAUSE: "PAUSE";
119
+ RESUME: "RESUME";
120
+ SHUTDOWN: "SHUTDOWN";
121
+ }>;
122
+ reason: z.ZodOptional<z.ZodString>;
123
+ issuedBy: z.ZodOptional<z.ZodString>;
124
+ workspace: z.ZodOptional<z.ZodString>;
125
+ }, z.core.$strip>;
126
+ export declare const commandWaitQuerySchema: z.ZodObject<{
127
+ status: z.ZodDefault<z.ZodString>;
128
+ timeout: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
129
+ agentId: z.ZodOptional<z.ZodString>;
130
+ workspace: z.ZodOptional<z.ZodString>;
131
+ }, z.core.$strip>;
132
+ export declare const findingCreateSchema: z.ZodObject<{
133
+ agentId: z.ZodString;
134
+ category: z.ZodEnum<{
135
+ other: "other";
136
+ typecheck: "typecheck";
137
+ lint: "lint";
138
+ "test-failure": "test-failure";
139
+ security: "security";
140
+ performance: "performance";
141
+ "dead-code": "dead-code";
142
+ todo: "todo";
143
+ bug: "bug";
144
+ ux: "ux";
145
+ a11y: "a11y";
146
+ sql: "sql";
147
+ convention: "convention";
148
+ freshdesk: "freshdesk";
149
+ "data-quality": "data-quality";
150
+ }>;
151
+ severity: z.ZodDefault<z.ZodEnum<{
152
+ error: "error";
153
+ critical: "critical";
154
+ warn: "warn";
155
+ info: "info";
156
+ }>>;
157
+ filePath: z.ZodOptional<z.ZodString>;
158
+ lineNumber: z.ZodOptional<z.ZodNumber>;
159
+ description: z.ZodString;
160
+ suggestion: z.ZodOptional<z.ZodString>;
161
+ }, z.core.$strip>;
162
+ export declare const findingsQuerySchema: z.ZodObject<{
163
+ category: z.ZodOptional<z.ZodEnum<{
164
+ other: "other";
165
+ typecheck: "typecheck";
166
+ lint: "lint";
167
+ "test-failure": "test-failure";
168
+ security: "security";
169
+ performance: "performance";
170
+ "dead-code": "dead-code";
171
+ todo: "todo";
172
+ bug: "bug";
173
+ ux: "ux";
174
+ a11y: "a11y";
175
+ sql: "sql";
176
+ convention: "convention";
177
+ freshdesk: "freshdesk";
178
+ "data-quality": "data-quality";
179
+ }>>;
180
+ severity: z.ZodOptional<z.ZodEnum<{
181
+ error: "error";
182
+ critical: "critical";
183
+ warn: "warn";
184
+ info: "info";
185
+ }>>;
186
+ status: z.ZodOptional<z.ZodEnum<{
187
+ open: "open";
188
+ resolved: "resolved";
189
+ }>>;
190
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
191
+ }, z.core.$strip>;
192
+ export declare const assignmentIdParamSchema: z.ZodObject<{
193
+ id: z.ZodString;
194
+ }, z.core.$strip>;
195
+ export declare const findingIdParamSchema: z.ZodObject<{
196
+ id: z.ZodCoercedNumber<unknown>;
197
+ }, z.core.$strip>;
198
+ export declare const pulseSchema: z.ZodObject<{
199
+ agentId: z.ZodString;
200
+ }, z.core.$strip>;
201
+ export declare const decisionsQuerySchema: z.ZodObject<{
202
+ since_id: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
203
+ assignment_id: z.ZodOptional<z.ZodString>;
204
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
205
+ }, z.core.$strip>;
206
+ export declare const eventsQuerySchema: z.ZodObject<{
207
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
208
+ }, z.core.$strip>;
209
+ export declare const staleQuerySchema: z.ZodObject<{
210
+ seconds: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
211
+ cleanup: z.ZodOptional<z.ZodEnum<{
212
+ 0: "0";
213
+ 1: "1";
214
+ true: "true";
215
+ false: "false";
216
+ }>>;
217
+ }, z.core.$strip>;
218
+ export declare const workersQuerySchema: z.ZodObject<{
219
+ capability: z.ZodOptional<z.ZodString>;
220
+ status: z.ZodOptional<z.ZodEnum<{
221
+ working: "working";
222
+ dead: "dead";
223
+ idle: "idle";
224
+ }>>;
225
+ workspace: z.ZodOptional<z.ZodString>;
226
+ }, z.core.$strip>;
227
+ //# 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;;;;;;;iBAO7B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;iBAIhC,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;iBAKrB,CAAC;AAEH,eAAO,MAAM,qBAAqB;;iBAEhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;iBAIjC,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,oBAAoB;;;;iBAI/B,CAAC;AAIH,eAAO,MAAM,iBAAiB;;iBAE5B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;iBAG3B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;iBAI7B,CAAC"}
@@ -0,0 +1,125 @@
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
+ priority: z.number().int().min(0).max(10).default(0),
39
+ blocked_by: z.string().uuid().optional(),
40
+ });
41
+ export const assignmentQuerySchema = z.object({
42
+ agentId: z.string().uuid().optional(),
43
+ name: z.string().min(1).max(50).optional(),
44
+ workspace: z.string().max(50).optional(),
45
+ });
46
+ export const nextSchema = z.object({
47
+ name: z.string().min(1).max(50),
48
+ workspace: z.string().max(50).optional(),
49
+ role: agentRoleEnum.default('worker'),
50
+ capabilities: z.array(z.string().max(50)).max(20).optional(),
51
+ });
52
+ export const assignmentClaimSchema = z.object({
53
+ agentId: z.string().uuid(),
54
+ });
55
+ export const assignmentUpdateSchema = z.object({
56
+ status: assignmentStatusEnum,
57
+ result: z.string().max(10000).optional(),
58
+ commit_sha: z.string().max(100).optional(),
59
+ });
60
+ // ─── Locks ──────────────────────────────────────────────────────
61
+ export const lockAcquireSchema = z.object({
62
+ agentId: z.string().uuid(),
63
+ filePath: z.string().min(1).max(500),
64
+ reason: z.string().max(500).optional(),
65
+ });
66
+ export const lockReleaseSchema = z.object({
67
+ agentId: z.string().uuid(),
68
+ filePath: z.string().min(1).max(500),
69
+ });
70
+ // ─── Commands ───────────────────────────────────────────────────
71
+ export const commandCreateSchema = z.object({
72
+ command: commandEnum,
73
+ reason: z.string().max(1000).optional(),
74
+ issuedBy: z.string().max(50).optional(),
75
+ workspace: z.string().max(50).optional(),
76
+ });
77
+ export const commandWaitQuerySchema = z.object({
78
+ status: z.string().max(20).default('idle'),
79
+ timeout: z.coerce.number().int().min(0).max(30).optional(),
80
+ agentId: z.string().optional(),
81
+ workspace: z.string().max(50).optional(),
82
+ });
83
+ // ─── Findings ───────────────────────────────────────────────────
84
+ export const findingCreateSchema = z.object({
85
+ agentId: z.string().uuid(),
86
+ category: findingCategoryEnum,
87
+ severity: findingSeverityEnum.default('info'),
88
+ filePath: z.string().max(500).optional(),
89
+ lineNumber: z.number().int().positive().optional(),
90
+ description: z.string().min(1).max(5000),
91
+ suggestion: z.string().max(5000).optional(),
92
+ });
93
+ export const findingsQuerySchema = z.object({
94
+ category: findingCategoryEnum.optional(),
95
+ severity: findingSeverityEnum.optional(),
96
+ status: findingStatusEnum.optional(),
97
+ limit: z.coerce.number().int().min(1).max(200).default(50),
98
+ });
99
+ // ─── Param Schemas ─────────────────────────────────────────────
100
+ export const assignmentIdParamSchema = z.object({ id: z.string().uuid() });
101
+ export const findingIdParamSchema = z.object({ id: z.coerce.number().int().positive() });
102
+ // ─── Pulse ─────────────────────────────────────────────────────
103
+ export const pulseSchema = z.object({
104
+ agentId: z.string().uuid(),
105
+ });
106
+ // ─── Decisions ─────────────────────────────────────────────────
107
+ export const decisionsQuerySchema = z.object({
108
+ since_id: z.coerce.number().int().min(0).default(0),
109
+ assignment_id: z.string().max(100).optional(),
110
+ limit: z.coerce.number().int().min(1).max(200).default(20),
111
+ });
112
+ // ─── Status / Events ────────────────────────────────────────────
113
+ export const eventsQuerySchema = z.object({
114
+ limit: z.coerce.number().int().min(1).max(200).default(50),
115
+ });
116
+ export const staleQuerySchema = z.object({
117
+ seconds: z.coerce.number().int().min(1).max(86400).default(120),
118
+ cleanup: z.enum(['0', '1', 'true', 'false']).optional(),
119
+ });
120
+ export const workersQuerySchema = z.object({
121
+ capability: z.string().max(50).optional(),
122
+ status: agentStatusEnum.optional(),
123
+ workspace: z.string().max(50).optional(),
124
+ });
125
+ //# 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,27 @@
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
+ /** Purge dead agents older than 24 hours to prevent table bloat. */
23
+ export declare function purgeDeadAgents(db: Database.Database, maxAgeHours?: number): number;
24
+ /** Clean slate on startup: mark all live agents dead, release locks, clear commands. */
25
+ export declare function cleanSlate(db: Database.Database): void;
26
+ export {};
27
+ //# 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,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,SAAK,GAAG,MAAM,CAK/E;AAED,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAetD"}
@@ -0,0 +1,58 @@
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
+ /** Purge dead agents older than 24 hours to prevent table bloat. */
42
+ export function purgeDeadAgents(db, maxAgeHours = 24) {
43
+ const result = db.prepare(`DELETE FROM coord_agents WHERE status = 'dead' AND last_seen < datetime('now', '-' || ? || ' hours')`).run(maxAgeHours);
44
+ return result.changes;
45
+ }
46
+ /** Clean slate on startup: mark all live agents dead, release locks, clear commands. */
47
+ export function cleanSlate(db) {
48
+ const alive = db.prepare(`SELECT id, name FROM coord_agents WHERE status != 'dead'`).all();
49
+ if (alive.length === 0)
50
+ return;
51
+ for (const agent of alive) {
52
+ db.prepare(`UPDATE coord_agents SET status = 'dead', current_task = NULL WHERE id = ?`).run(agent.id);
53
+ db.prepare(`DELETE FROM coord_locks WHERE agent_id = ?`).run(agent.id);
54
+ }
55
+ db.prepare(`UPDATE coord_commands SET cleared_at = datetime('now') WHERE cleared_at IS NULL`).run();
56
+ console.log(` Coordination clean slate: marked ${alive.length} agent(s) from previous session as dead`);
57
+ }
58
+ //# sourceMappingURL=stale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale.js","sourceRoot":"","sources":["../../src/coordination/stale.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../src/engine/activation.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AAQH,OAAO,KAAK,EACF,gBAAgB,EAAE,eAAe,EAC1C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAsCxD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,KAAK,EAAE,WAAW;IAK9B;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAodnE;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAuEjB,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,OAAO;CAchB"}
1
+ {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../src/engine/activation.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AAQH,OAAO,KAAK,EACF,gBAAgB,EAAE,eAAe,EAC1C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAoIxD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,KAAK,EAAE,WAAW;IAK9B;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA2dnE;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAwEjB,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,OAAO;CAchB"}