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,11 @@
1
+ /**
2
+ * Coordination module entry point.
3
+ * OFF by default, ON via AWM_COORDINATION=true.
4
+ */
5
+ import type { FastifyInstance } from 'fastify';
6
+ import type Database from 'better-sqlite3';
7
+ /** Check if coordination is enabled via environment variable. */
8
+ export declare function isCoordinationEnabled(): boolean;
9
+ /** Initialize the coordination module: create tables, clean slate, mount routes, error handler. */
10
+ export declare function initCoordination(app: FastifyInstance, db: Database.Database): void;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/coordination/index.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAM3C,iEAAiE;AACjE,wBAAgB,qBAAqB,IAAI,OAAO,CAG/C;AAED,mGAAmG;AACnG,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAyBlF"}
@@ -0,0 +1,39 @@
1
+ // Copyright 2026 Robert Winter / Complete Ideas
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * Coordination module entry point.
5
+ * OFF by default, ON via AWM_COORDINATION=true.
6
+ */
7
+ import { ZodError } from 'zod';
8
+ import { initCoordinationTables } from './schema.js';
9
+ import { registerCoordinationRoutes } from './routes.js';
10
+ import { cleanSlate } from './stale.js';
11
+ /** Check if coordination is enabled via environment variable. */
12
+ export function isCoordinationEnabled() {
13
+ const val = process.env.AWM_COORDINATION;
14
+ return val === 'true' || val === '1';
15
+ }
16
+ /** Initialize the coordination module: create tables, clean slate, mount routes, error handler. */
17
+ export function initCoordination(app, db) {
18
+ // Create coordination tables (idempotent)
19
+ initCoordinationTables(db);
20
+ // Clean slate: mark stale agents as dead from previous sessions
21
+ cleanSlate(db);
22
+ // Mount all coordination HTTP routes
23
+ registerCoordinationRoutes(app, db);
24
+ // ZodError handler — coordination routes use .parse() which throws on invalid params
25
+ app.setErrorHandler((error, _request, reply) => {
26
+ if (error instanceof ZodError) {
27
+ return reply.status(422).send({
28
+ data: null,
29
+ error: { code: 'VALIDATION_ERROR', message: error.issues[0].message, issues: error.issues },
30
+ });
31
+ }
32
+ reply.status(error.statusCode ?? 500).send({
33
+ data: null,
34
+ error: { code: 'INTERNAL_ERROR', message: error.message },
35
+ });
36
+ });
37
+ console.log(' Coordination module enabled');
38
+ }
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coordination/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,sCAAsC;AACtC;;;GAGG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,iEAAiE;AACjE,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACzC,OAAO,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC;AACvC,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,gBAAgB,CAAC,GAAoB,EAAE,EAAqB;IAC1E,0CAA0C;IAC1C,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAE3B,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,CAAC;IAEf,qCAAqC;IACrC,0BAA0B,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAEpC,qFAAqF;IACrF,GAAG,CAAC,eAAe,CAAC,CAAC,KAAsC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;QAC9E,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC5B,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;aAC5F,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;YACzC,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;SAC1D,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP tool definitions for the coordination module.
3
+ * 13 coord_* tools — only registered when AWM_COORDINATION=true.
4
+ */
5
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
+ import type Database from 'better-sqlite3';
7
+ export declare function registerCoordinationTools(server: McpServer, db: Database.Database): void;
8
+ //# sourceMappingURL=mcp-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tools.d.ts","sourceRoot":"","sources":["../../src/coordination/mcp-tools.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAgTxF"}
@@ -0,0 +1,221 @@
1
+ // Copyright 2026 Robert Winter / Complete Ideas
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * MCP tool definitions for the coordination module.
5
+ * 13 coord_* tools — only registered when AWM_COORDINATION=true.
6
+ */
7
+ import { z } from 'zod';
8
+ import { randomUUID } from 'node:crypto';
9
+ export function registerCoordinationTools(server, db) {
10
+ // ─── coord_checkin ──────────────────────────────────────────────
11
+ server.tool('coord_checkin', 'Register or heartbeat an agent in the hive. Call at session start and periodically.', {
12
+ agent_name: z.string().min(1).max(50).describe('Your agent name (e.g. "Worker-A", "Dev-Lead")'),
13
+ role: z.enum(['worker', 'orchestrator', 'dev-lead']).default('worker').describe('Agent role'),
14
+ pid: z.number().int().positive().optional().describe('Process ID'),
15
+ capabilities: z.array(z.string()).optional().describe('What this agent can do'),
16
+ workspace: z.string().max(50).optional().describe('Project workspace scope'),
17
+ }, async ({ agent_name, role, pid, capabilities, workspace }) => {
18
+ const capsJson = capabilities ? JSON.stringify(capabilities) : null;
19
+ // Look up ANY existing agent with same name+workspace — including dead ones (upsert, reuse UUID)
20
+ const existing = workspace
21
+ ? db.prepare(`SELECT id, status FROM coord_agents WHERE name = ? AND workspace = ? ORDER BY last_seen DESC LIMIT 1`).get(agent_name, workspace)
22
+ : db.prepare(`SELECT id, status FROM coord_agents WHERE name = ? AND workspace IS NULL ORDER BY last_seen DESC LIMIT 1`).get(agent_name);
23
+ if (existing) {
24
+ const wasDead = existing.status === 'dead';
25
+ db.prepare(`UPDATE coord_agents SET last_seen = datetime('now'), status = CASE WHEN status = 'dead' THEN 'idle' ELSE status END, pid = COALESCE(?, pid), capabilities = COALESCE(?, capabilities) WHERE id = ?`).run(pid ?? null, capsJson, existing.id);
26
+ const action = wasDead ? 'reconnected' : 'heartbeat';
27
+ const eventType = wasDead ? 'reconnected' : 'heartbeat';
28
+ const detail = wasDead ? `${agent_name} reconnected via MCP (was dead)` : `heartbeat from ${agent_name}`;
29
+ db.prepare(`INSERT INTO coord_events (agent_id, event_type, detail) VALUES (?, ?, ?)`).run(existing.id, eventType, detail);
30
+ return { content: [{ type: 'text', text: JSON.stringify({ agentId: existing.id, action, status: wasDead ? 'idle' : existing.status }) }] };
31
+ }
32
+ const id = randomUUID();
33
+ db.prepare(`INSERT INTO coord_agents (id, name, role, pid, status, metadata, capabilities, workspace) VALUES (?, ?, ?, ?, 'idle', NULL, ?, ?)`).run(id, agent_name, role, pid ?? null, capsJson, workspace ?? null);
34
+ db.prepare(`INSERT INTO coord_events (agent_id, event_type, detail) VALUES (?, 'registered', ?)`).run(id, `${agent_name} joined as ${role}`);
35
+ return { content: [{ type: 'text', text: JSON.stringify({ agentId: id, action: 'registered', status: 'idle' }) }] };
36
+ });
37
+ // ─── coord_checkout ─────────────────────────────────────────────
38
+ server.tool('coord_checkout', 'Sign off from the hive. Releases all locks and marks agent as dead. Call at session end.', {
39
+ agent_id: z.string().uuid().describe('Your agent ID from coord_checkin'),
40
+ }, async ({ agent_id }) => {
41
+ db.prepare(`DELETE FROM coord_locks WHERE agent_id = ?`).run(agent_id);
42
+ db.prepare(`UPDATE coord_agents SET status = 'dead', last_seen = datetime('now') WHERE id = ?`).run(agent_id);
43
+ db.prepare(`INSERT INTO coord_events (agent_id, event_type, detail) VALUES (?, 'checkout', 'agent signed off')`).run(agent_id);
44
+ return { content: [{ type: 'text', text: JSON.stringify({ ok: true }) }] };
45
+ });
46
+ // ─── coord_assign ───────────────────────────────────────────────
47
+ server.tool('coord_assign', 'Create a task assignment. Orchestrator uses this to dispatch work to agents.', {
48
+ task: z.string().min(1).max(1000).describe('Task title/summary'),
49
+ description: z.string().max(5000).optional().describe('Detailed task description'),
50
+ agent_id: z.string().uuid().optional().describe('Assign directly to this agent (optional)'),
51
+ workspace: z.string().max(50).optional().describe('Workspace scope'),
52
+ }, async ({ task, description, agent_id, workspace }) => {
53
+ const id = randomUUID();
54
+ db.prepare(`INSERT INTO coord_assignments (id, agent_id, task, description, status, workspace) VALUES (?, ?, ?, ?, ?, ?)`).run(id, agent_id ?? null, task, description ?? null, agent_id ? 'assigned' : 'pending', workspace ?? null);
55
+ if (agent_id) {
56
+ db.prepare(`UPDATE coord_agents SET status = 'working', current_task = ? WHERE id = ?`).run(id, agent_id);
57
+ }
58
+ db.prepare(`INSERT INTO coord_events (agent_id, event_type, detail) VALUES (?, 'assignment_created', ?)`).run(agent_id ?? null, `task: ${task}`);
59
+ return { content: [{ type: 'text', text: JSON.stringify({ assignmentId: id, status: agent_id ? 'assigned' : 'pending' }) }] };
60
+ });
61
+ // ─── coord_assignment ───────────────────────────────────────────
62
+ server.tool('coord_assignment', 'Get your current assignment, or auto-claim the next pending task. Call this to find out what to work on.', {
63
+ agent_id: z.string().uuid().describe('Your agent ID'),
64
+ }, async ({ agent_id }) => {
65
+ const active = db.prepare(`SELECT * FROM coord_assignments WHERE agent_id = ? AND status IN ('assigned', 'in_progress') ORDER BY created_at DESC LIMIT 1`).get(agent_id);
66
+ if (active)
67
+ return { content: [{ type: 'text', text: JSON.stringify({ assignment: active }) }] };
68
+ const agentRow = db.prepare(`SELECT workspace FROM coord_agents WHERE id = ?`).get(agent_id);
69
+ const ws = agentRow?.workspace;
70
+ const pending = ws
71
+ ? db.prepare(`SELECT * FROM coord_assignments WHERE status = 'pending' AND (workspace = ? OR workspace IS NULL) ORDER BY created_at ASC LIMIT 1`).get(ws)
72
+ : db.prepare(`SELECT * FROM coord_assignments WHERE status = 'pending' ORDER BY created_at ASC LIMIT 1`).get();
73
+ if (pending) {
74
+ const claimed = db.prepare(`UPDATE coord_assignments SET agent_id = ?, status = 'assigned', started_at = datetime('now') WHERE id = ? AND status = 'pending'`).run(agent_id, pending.id);
75
+ if (claimed.changes > 0) {
76
+ db.prepare(`UPDATE coord_agents SET status = 'working', current_task = ? WHERE id = ?`).run(pending.id, agent_id);
77
+ db.prepare(`INSERT INTO coord_events (agent_id, event_type, detail) VALUES (?, 'assignment_claimed', ?)`).run(agent_id, `auto-claimed ${pending.id}`);
78
+ const assignment = db.prepare(`SELECT * FROM coord_assignments WHERE id = ?`).get(pending.id);
79
+ return { content: [{ type: 'text', text: JSON.stringify({ assignment }) }] };
80
+ }
81
+ }
82
+ return { content: [{ type: 'text', text: JSON.stringify({ assignment: null, retry_after_seconds: 30 }) }] };
83
+ });
84
+ // ─── coord_assignment_update ────────────────────────────────────
85
+ server.tool('coord_assignment_update', 'Report progress or completion of an assignment. Set status to in_progress, completed, failed, or blocked.', {
86
+ assignment_id: z.string().uuid().describe('The assignment ID'),
87
+ status: z.enum(['in_progress', 'completed', 'failed', 'blocked']).describe('New status'),
88
+ result: z.string().max(10000).optional().describe('Result summary or error message'),
89
+ }, async ({ assignment_id, status, result }) => {
90
+ if (['completed', 'failed'].includes(status)) {
91
+ db.prepare(`UPDATE coord_assignments SET status = ?, result = ?, completed_at = datetime('now') WHERE id = ?`).run(status, result ?? null, assignment_id);
92
+ const assignment = db.prepare(`SELECT agent_id FROM coord_assignments WHERE id = ?`).get(assignment_id);
93
+ if (assignment?.agent_id) {
94
+ db.prepare(`UPDATE coord_agents SET status = 'idle', current_task = NULL WHERE id = ?`).run(assignment.agent_id);
95
+ }
96
+ }
97
+ else {
98
+ db.prepare(`UPDATE coord_assignments SET status = ?, result = ? WHERE id = ?`).run(status, result ?? null, assignment_id);
99
+ }
100
+ db.prepare(`INSERT INTO coord_events (agent_id, event_type, detail) VALUES ((SELECT agent_id FROM coord_assignments WHERE id = ?), 'assignment_update', ?)`).run(assignment_id, `${assignment_id} → ${status}`);
101
+ return { content: [{ type: 'text', text: JSON.stringify({ ok: true }) }] };
102
+ });
103
+ // ─── coord_lock ─────────────────────────────────────────────────
104
+ server.tool('coord_lock', 'Acquire a file lock to prevent concurrent edits by other agents.', {
105
+ agent_id: z.string().uuid().describe('Your agent ID'),
106
+ file_path: z.string().min(1).max(500).describe('Path to lock'),
107
+ reason: z.string().max(500).optional().describe('Why you need this lock'),
108
+ }, async ({ agent_id, file_path, reason }) => {
109
+ const inserted = db.prepare(`INSERT OR IGNORE INTO coord_locks (file_path, agent_id, reason) VALUES (?, ?, ?)`).run(file_path, agent_id, reason ?? null);
110
+ if (inserted.changes > 0) {
111
+ db.prepare(`INSERT INTO coord_events (agent_id, event_type, detail) VALUES (?, 'lock_acquired', ?)`).run(agent_id, file_path);
112
+ return { content: [{ type: 'text', text: JSON.stringify({ ok: true, action: 'acquired' }) }] };
113
+ }
114
+ const existing = db.prepare(`SELECT agent_id FROM coord_locks WHERE file_path = ?`).get(file_path);
115
+ if (existing?.agent_id === agent_id) {
116
+ db.prepare(`UPDATE coord_locks SET locked_at = datetime('now') WHERE file_path = ?`).run(file_path);
117
+ return { content: [{ type: 'text', text: JSON.stringify({ ok: true, action: 'refreshed' }) }] };
118
+ }
119
+ return { content: [{ type: 'text', text: JSON.stringify({ ok: false, error: 'file locked by another agent', lockedBy: existing?.agent_id }) }] };
120
+ });
121
+ // ─── coord_unlock ───────────────────────────────────────────────
122
+ server.tool('coord_unlock', 'Release a file lock you hold.', {
123
+ agent_id: z.string().uuid().describe('Your agent ID'),
124
+ file_path: z.string().min(1).max(500).describe('Path to unlock'),
125
+ }, async ({ agent_id, file_path }) => {
126
+ const result = db.prepare(`DELETE FROM coord_locks WHERE file_path = ? AND agent_id = ?`).run(file_path, agent_id);
127
+ if (result.changes === 0) {
128
+ return { content: [{ type: 'text', text: JSON.stringify({ ok: false, error: 'lock not found or not owned' }) }] };
129
+ }
130
+ db.prepare(`INSERT INTO coord_events (agent_id, event_type, detail) VALUES (?, 'lock_released', ?)`).run(agent_id, file_path);
131
+ return { content: [{ type: 'text', text: JSON.stringify({ ok: true }) }] };
132
+ });
133
+ // ─── coord_locks ────────────────────────────────────────────────
134
+ server.tool('coord_locks', 'List all currently held file locks across all agents.', {}, async () => {
135
+ const locks = db.prepare(`SELECT l.file_path, l.agent_id, a.name AS agent_name, l.locked_at, l.reason
136
+ FROM coord_locks l JOIN coord_agents a ON l.agent_id = a.id
137
+ ORDER BY l.locked_at DESC`).all();
138
+ return { content: [{ type: 'text', text: JSON.stringify({ locks }) }] };
139
+ });
140
+ // ─── coord_command ──────────────────────────────────────────────
141
+ server.tool('coord_command', 'Issue a broadcast command to all agents. Orchestrator only. Commands: BUILD_FREEZE, PAUSE, RESUME, SHUTDOWN.', {
142
+ command: z.enum(['BUILD_FREEZE', 'PAUSE', 'RESUME', 'SHUTDOWN']).describe('Command to broadcast'),
143
+ reason: z.string().max(1000).optional().describe('Why this command is being issued'),
144
+ workspace: z.string().max(50).optional().describe('Scope to workspace (optional)'),
145
+ }, async ({ command, reason, workspace }) => {
146
+ if (command === 'RESUME') {
147
+ if (workspace) {
148
+ db.prepare(`UPDATE coord_commands SET cleared_at = datetime('now') WHERE cleared_at IS NULL AND workspace = ?`).run(workspace);
149
+ }
150
+ else {
151
+ db.prepare(`UPDATE coord_commands SET cleared_at = datetime('now') WHERE cleared_at IS NULL`).run();
152
+ }
153
+ db.prepare(`INSERT INTO coord_events (agent_id, event_type, detail) VALUES (NULL, 'command', ?)`).run(`RESUME — commands cleared`);
154
+ return { content: [{ type: 'text', text: JSON.stringify({ ok: true, command: 'RESUME' }) }] };
155
+ }
156
+ db.prepare(`INSERT INTO coord_commands (command, reason, issued_by, workspace) VALUES (?, ?, NULL, ?)`).run(command, reason ?? null, workspace ?? null);
157
+ db.prepare(`INSERT INTO coord_events (agent_id, event_type, detail) VALUES (NULL, 'command', ?)`).run(`${command}: ${reason ?? 'no reason'}`);
158
+ return { content: [{ type: 'text', text: JSON.stringify({ ok: true, command, reason }) }] };
159
+ });
160
+ // ─── coord_command_poll ─────────────────────────────────────────
161
+ server.tool('coord_command_poll', 'Check for active commands from the orchestrator. Call periodically to stay responsive to BUILD_FREEZE, PAUSE, etc.', {
162
+ workspace: z.string().max(50).optional().describe('Filter by workspace'),
163
+ }, async ({ workspace }) => {
164
+ const active = workspace
165
+ ? db.prepare(`SELECT id, command, reason, issued_at FROM coord_commands WHERE cleared_at IS NULL AND (workspace = ? OR workspace IS NULL) ORDER BY issued_at DESC`).all(workspace)
166
+ : db.prepare(`SELECT id, command, reason, issued_at FROM coord_commands WHERE cleared_at IS NULL ORDER BY issued_at DESC`).all();
167
+ if (active.length === 0) {
168
+ return { content: [{ type: 'text', text: JSON.stringify({ active: false, commands: [] }) }] };
169
+ }
170
+ const priority = { SHUTDOWN: 3, BUILD_FREEZE: 2, PAUSE: 1 };
171
+ active.sort((a, b) => (priority[b.command] ?? 0) - (priority[a.command] ?? 0));
172
+ return { content: [{ type: 'text', text: JSON.stringify({ active: true, command: active[0].command, commands: active }) }] };
173
+ });
174
+ // ─── coord_workers ──────────────────────────────────────────────
175
+ server.tool('coord_workers', 'List available workers in the hive. Filterable by capability, status, and workspace.', {
176
+ capability: z.string().max(50).optional().describe('Filter by capability'),
177
+ status: z.enum(['idle', 'working', 'dead']).optional().describe('Filter by status'),
178
+ workspace: z.string().max(50).optional().describe('Filter by workspace'),
179
+ }, async ({ capability, status: filterStatus, workspace }) => {
180
+ let workers = (workspace
181
+ ? db.prepare(`SELECT id, name, role, status, current_task, capabilities, workspace, last_seen, ROUND((julianday('now') - julianday(last_seen)) * 86400) AS seconds_since_seen FROM coord_agents WHERE status != 'dead' AND role != 'orchestrator' AND workspace = ? ORDER BY name`).all(workspace)
182
+ : db.prepare(`SELECT id, name, role, status, current_task, capabilities, workspace, last_seen, ROUND((julianday('now') - julianday(last_seen)) * 86400) AS seconds_since_seen FROM coord_agents WHERE status != 'dead' AND role != 'orchestrator' ORDER BY name`).all());
183
+ if (capability) {
184
+ workers = workers.filter(w => {
185
+ try {
186
+ return w.capabilities ? JSON.parse(w.capabilities).includes(capability) : false;
187
+ }
188
+ catch {
189
+ return false;
190
+ }
191
+ });
192
+ }
193
+ if (filterStatus)
194
+ workers = workers.filter(w => w.status === filterStatus);
195
+ const result = workers.map(w => ({ ...w, capabilities: w.capabilities ? JSON.parse(w.capabilities) : [], alive: w.seconds_since_seen < 120 }));
196
+ return { content: [{ type: 'text', text: JSON.stringify({ count: result.length, idle: result.filter(w => w.status === 'idle').length, working: result.filter(w => w.status === 'working').length, workers: result }) }] };
197
+ });
198
+ // ─── coord_finding ──────────────────────────────────────────────
199
+ server.tool('coord_finding', 'Report a finding (bug, issue, suggestion) discovered during work.', {
200
+ agent_id: z.string().uuid().describe('Your agent ID'),
201
+ category: z.enum(['typecheck', 'lint', 'test-failure', 'security', 'performance', 'dead-code', 'todo', 'bug', 'ux', 'a11y', 'sql', 'convention', 'freshdesk', 'data-quality', 'other']).describe('Finding category'),
202
+ severity: z.enum(['critical', 'error', 'warn', 'info']).default('info').describe('Severity level'),
203
+ description: z.string().min(1).max(5000).describe('What you found'),
204
+ file_path: z.string().max(500).optional().describe('File where the finding is'),
205
+ suggestion: z.string().max(5000).optional().describe('Suggested fix'),
206
+ }, async ({ agent_id, category, severity, description, file_path, suggestion }) => {
207
+ db.prepare(`INSERT INTO coord_findings (agent_id, category, severity, file_path, description, suggestion) VALUES (?, ?, ?, ?, ?, ?)`).run(agent_id, category, severity, file_path ?? null, description, suggestion ?? null);
208
+ db.prepare(`INSERT INTO coord_events (agent_id, event_type, detail) VALUES (?, 'finding', ?)`).run(agent_id, `[${severity}] ${category}: ${description.slice(0, 100)}`);
209
+ return { content: [{ type: 'text', text: JSON.stringify({ ok: true }) }] };
210
+ });
211
+ // ─── coord_status ───────────────────────────────────────────────
212
+ server.tool('coord_status', 'Get a full dashboard view of the hive: agents, assignments, locks, findings, and stats.', {}, async () => {
213
+ const agents = db.prepare(`SELECT id, name, role, status, current_task, last_seen, ROUND((julianday('now') - julianday(last_seen)) * 86400) AS seconds_since_seen FROM coord_agents WHERE status != 'dead' ORDER BY role, name`).all();
214
+ const assignments = db.prepare(`SELECT a.id, a.task, a.status, a.agent_id, ag.name AS agent_name, a.created_at FROM coord_assignments a LEFT JOIN coord_agents ag ON a.agent_id = ag.id WHERE a.status NOT IN ('completed', 'failed') ORDER BY a.created_at`).all();
215
+ const locks = db.prepare(`SELECT l.file_path, l.agent_id, a.name AS agent_name, l.locked_at FROM coord_locks l JOIN coord_agents a ON l.agent_id = a.id`).all();
216
+ const stats = db.prepare(`SELECT (SELECT COUNT(*) FROM coord_agents WHERE status != 'dead') AS alive_agents, (SELECT COUNT(*) FROM coord_agents WHERE status = 'working') AS busy_agents, (SELECT COUNT(*) FROM coord_assignments WHERE status = 'pending') AS pending_tasks, (SELECT COUNT(*) FROM coord_locks) AS active_locks, (SELECT COUNT(*) FROM coord_findings WHERE status = 'open') AS open_findings`).get();
217
+ return { content: [{ type: 'text', text: JSON.stringify({ agents, assignments, locks, stats }) }] };
218
+ });
219
+ console.error('AWM: coordination MCP tools registered (13 coord_* tools)');
220
+ }
221
+ //# sourceMappingURL=mcp-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../../src/coordination/mcp-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * HTTP routes for the coordination module.
3
+ * Ported from AgentSynapse packages/coordinator/src/routes/*.ts into a single file.
4
+ * All tables use coord_ prefix to avoid collision with AWM core tables.
5
+ */
6
+ import type { FastifyInstance } from 'fastify';
7
+ import type Database from 'better-sqlite3';
8
+ export declare function registerCoordinationRoutes(app: FastifyInstance, db: Database.Database): void;
9
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/coordination/routes.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAuB3C,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CA6yB5F"}