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.
- package/README.md +399 -399
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +21 -5
- package/dist/api/routes.js.map +1 -1
- package/dist/cli.js +67 -67
- package/dist/coordination/index.d.ts +11 -0
- package/dist/coordination/index.d.ts.map +1 -0
- package/dist/coordination/index.js +39 -0
- package/dist/coordination/index.js.map +1 -0
- package/dist/coordination/mcp-tools.d.ts +8 -0
- package/dist/coordination/mcp-tools.d.ts.map +1 -0
- package/dist/coordination/mcp-tools.js +216 -0
- package/dist/coordination/mcp-tools.js.map +1 -0
- package/dist/coordination/routes.d.ts +9 -0
- package/dist/coordination/routes.d.ts.map +1 -0
- package/dist/coordination/routes.js +434 -0
- package/dist/coordination/routes.js.map +1 -0
- package/dist/coordination/schema.d.ts +12 -0
- package/dist/coordination/schema.d.ts.map +1 -0
- package/dist/coordination/schema.js +91 -0
- package/dist/coordination/schema.js.map +1 -0
- package/dist/coordination/schemas.d.ts +208 -0
- package/dist/coordination/schemas.d.ts.map +1 -0
- package/dist/coordination/schemas.js +109 -0
- package/dist/coordination/schemas.js.map +1 -0
- package/dist/coordination/stale.d.ts +25 -0
- package/dist/coordination/stale.d.ts.map +1 -0
- package/dist/coordination/stale.js +53 -0
- package/dist/coordination/stale.js.map +1 -0
- package/dist/index.js +21 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +90 -79
- package/dist/mcp.js.map +1 -1
- package/dist/storage/sqlite.d.ts +3 -0
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +285 -281
- package/dist/storage/sqlite.js.map +1 -1
- package/package.json +55 -55
- package/src/api/index.ts +3 -3
- package/src/api/routes.ts +551 -536
- package/src/cli.ts +397 -397
- package/src/coordination/index.ts +47 -0
- package/src/coordination/mcp-tools.ts +313 -0
- package/src/coordination/routes.ts +656 -0
- package/src/coordination/schema.ts +94 -0
- package/src/coordination/schemas.ts +136 -0
- package/src/coordination/stale.ts +89 -0
- package/src/core/decay.ts +63 -63
- package/src/core/embeddings.ts +88 -88
- package/src/core/hebbian.ts +93 -93
- package/src/core/index.ts +5 -5
- package/src/core/logger.ts +36 -36
- package/src/core/query-expander.ts +66 -66
- package/src/core/reranker.ts +101 -101
- package/src/engine/activation.ts +656 -656
- package/src/engine/connections.ts +103 -103
- package/src/engine/consolidation-scheduler.ts +125 -125
- package/src/engine/eval.ts +102 -102
- package/src/engine/eviction.ts +101 -101
- package/src/engine/index.ts +8 -8
- package/src/engine/retraction.ts +100 -100
- package/src/engine/staging.ts +74 -74
- package/src/index.ts +137 -121
- package/src/mcp.ts +1024 -1013
- package/src/storage/index.ts +3 -3
- package/src/storage/sqlite.ts +968 -963
- package/src/types/agent.ts +67 -67
- package/src/types/checkpoint.ts +46 -46
- package/src/types/engram.ts +217 -217
- package/src/types/eval.ts +100 -100
- 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":"AAAA,gDAAgD;AAChD,sCAAsC;AACtC;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,mEAAmE;AAEnE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;AAC5E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAC9F,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;AACnF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACjF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC;IACxC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa;IAC9D,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY;IAC7D,WAAW,EAAE,cAAc,EAAE,OAAO;CACrC,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAE9D,mEAAmE;AAEnE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC;IACrC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtD,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;CAC3B,CAAC,CAAC;AAEH,mEAAmE;AAEnE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACrC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAC5C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,oBAAoB;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAEH,mEAAmE;AAEnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC1B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACvC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC1B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACrC,CAAC,CAAC;AAEH,mEAAmE;AAEnE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC1D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAEH,mEAAmE;AAEnE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC1B,QAAQ,EAAE,mBAAmB;IAC7B,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACxC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAClD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACxC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,EAAE;IACxC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,EAAE;IACxC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC3D,CAAC,CAAC;AAEH,kEAAkE;AAElE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAEzF,kEAAkE;AAElE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;CAC3B,CAAC,CAAC;AAEH,mEAAmE;AAEnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC3D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IAC/D,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;CACxD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzC,MAAM,EAAE,eAAe,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC"}
|
|
@@ -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:
|
|
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.
|
|
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":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|