oh-my-claude-sisyphus 3.5.8 → 3.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 (94) hide show
  1. package/agents/executor-high.md +2 -0
  2. package/agents/executor-low.md +2 -0
  3. package/agents/executor.md +2 -0
  4. package/agents/templates/base-agent.md +9 -0
  5. package/commands/cancel.md +8 -8
  6. package/commands/swarm.md +350 -148
  7. package/dist/__tests__/hooks.test.js +10 -9
  8. package/dist/__tests__/hooks.test.js.map +1 -1
  9. package/dist/agents/codex-agents.d.ts +20 -0
  10. package/dist/agents/codex-agents.d.ts.map +1 -0
  11. package/dist/agents/codex-agents.js +36 -0
  12. package/dist/agents/codex-agents.js.map +1 -0
  13. package/dist/agents/preamble.d.ts +14 -0
  14. package/dist/agents/preamble.d.ts.map +1 -0
  15. package/dist/agents/preamble.js +26 -0
  16. package/dist/agents/preamble.js.map +1 -0
  17. package/dist/hooks/autopilot/__tests__/cancel.test.js +14 -4
  18. package/dist/hooks/autopilot/__tests__/cancel.test.js.map +1 -1
  19. package/dist/hooks/autopilot/__tests__/state.test.js +1 -0
  20. package/dist/hooks/autopilot/__tests__/state.test.js.map +1 -1
  21. package/dist/hooks/autopilot/__tests__/summary.test.js +38 -3
  22. package/dist/hooks/autopilot/__tests__/summary.test.js.map +1 -1
  23. package/dist/hooks/autopilot/state.d.ts +1 -1
  24. package/dist/hooks/autopilot/state.d.ts.map +1 -1
  25. package/dist/hooks/autopilot/state.js +15 -8
  26. package/dist/hooks/autopilot/state.js.map +1 -1
  27. package/dist/hooks/index.d.ts +2 -0
  28. package/dist/hooks/index.d.ts.map +1 -1
  29. package/dist/hooks/index.js +7 -0
  30. package/dist/hooks/index.js.map +1 -1
  31. package/dist/hooks/mode-registry/index.d.ts +135 -0
  32. package/dist/hooks/mode-registry/index.d.ts.map +1 -0
  33. package/dist/hooks/mode-registry/index.js +445 -0
  34. package/dist/hooks/mode-registry/index.js.map +1 -0
  35. package/dist/hooks/mode-registry/types.d.ts +31 -0
  36. package/dist/hooks/mode-registry/types.d.ts.map +1 -0
  37. package/dist/hooks/mode-registry/types.js +7 -0
  38. package/dist/hooks/mode-registry/types.js.map +1 -0
  39. package/dist/hooks/ralph/loop.js +6 -6
  40. package/dist/hooks/ralph/loop.js.map +1 -1
  41. package/dist/hooks/swarm/__tests__/claiming.test.d.ts +2 -0
  42. package/dist/hooks/swarm/__tests__/claiming.test.d.ts.map +1 -0
  43. package/dist/hooks/swarm/__tests__/claiming.test.js +170 -0
  44. package/dist/hooks/swarm/__tests__/claiming.test.js.map +1 -0
  45. package/dist/hooks/swarm/__tests__/index.test.d.ts +2 -0
  46. package/dist/hooks/swarm/__tests__/index.test.d.ts.map +1 -0
  47. package/dist/hooks/swarm/__tests__/index.test.js +157 -0
  48. package/dist/hooks/swarm/__tests__/index.test.js.map +1 -0
  49. package/dist/hooks/swarm/__tests__/mode-registry.test.d.ts +2 -0
  50. package/dist/hooks/swarm/__tests__/mode-registry.test.d.ts.map +1 -0
  51. package/dist/hooks/swarm/__tests__/mode-registry.test.js +177 -0
  52. package/dist/hooks/swarm/__tests__/mode-registry.test.js.map +1 -0
  53. package/dist/hooks/swarm/claiming.d.ts +101 -0
  54. package/dist/hooks/swarm/claiming.d.ts.map +1 -0
  55. package/dist/hooks/swarm/claiming.js +460 -0
  56. package/dist/hooks/swarm/claiming.js.map +1 -0
  57. package/dist/hooks/swarm/index.d.ts +221 -0
  58. package/dist/hooks/swarm/index.d.ts.map +1 -0
  59. package/dist/hooks/swarm/index.js +413 -0
  60. package/dist/hooks/swarm/index.js.map +1 -0
  61. package/dist/hooks/swarm/state.d.ts +94 -0
  62. package/dist/hooks/swarm/state.d.ts.map +1 -0
  63. package/dist/hooks/swarm/state.js +530 -0
  64. package/dist/hooks/swarm/state.js.map +1 -0
  65. package/dist/hooks/swarm/types.d.ts +116 -0
  66. package/dist/hooks/swarm/types.d.ts.map +1 -0
  67. package/dist/hooks/swarm/types.js +22 -0
  68. package/dist/hooks/swarm/types.js.map +1 -0
  69. package/dist/hooks/ultrapilot/decomposer.d.ts +141 -0
  70. package/dist/hooks/ultrapilot/decomposer.d.ts.map +1 -0
  71. package/dist/hooks/ultrapilot/decomposer.js +377 -0
  72. package/dist/hooks/ultrapilot/decomposer.js.map +1 -0
  73. package/dist/hooks/ultrapilot/index.d.ts +31 -0
  74. package/dist/hooks/ultrapilot/index.d.ts.map +1 -1
  75. package/dist/hooks/ultrapilot/index.js +43 -2
  76. package/dist/hooks/ultrapilot/index.js.map +1 -1
  77. package/dist/hooks/ultrapilot/state.d.ts +1 -1
  78. package/dist/hooks/ultrapilot/state.d.ts.map +1 -1
  79. package/dist/hooks/ultrapilot/state.js +7 -0
  80. package/dist/hooks/ultrapilot/state.js.map +1 -1
  81. package/dist/hooks/ultraqa/index.js +5 -5
  82. package/dist/hooks/ultraqa/index.js.map +1 -1
  83. package/dist/hooks/ultrawork/index.js +3 -3
  84. package/dist/hooks/ultrawork/index.js.map +1 -1
  85. package/package.json +3 -1
  86. package/skills/autopilot/SKILL.md +18 -0
  87. package/skills/cancel/SKILL.md +166 -141
  88. package/skills/ecomode/SKILL.md +14 -0
  89. package/skills/pipeline/SKILL.md +13 -0
  90. package/skills/ralph/SKILL.md +22 -1
  91. package/skills/swarm/SKILL.md +521 -197
  92. package/skills/ultrapilot/SKILL.md +82 -13
  93. package/skills/ultraqa/SKILL.md +13 -0
  94. package/skills/ultrawork/SKILL.md +14 -0
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Swarm State Management
3
+ *
4
+ * SQLite-based persistent state for swarm coordination.
5
+ * Uses better-sqlite3 for synchronous operations with transaction support.
6
+ * All state is stored in .omc/state/swarm.db
7
+ */
8
+ import type BetterSqlite3 from 'better-sqlite3';
9
+ import type { SwarmTask, SwarmState, AgentHeartbeat, SwarmStats } from './types.js';
10
+ /**
11
+ * Initialize the SQLite database
12
+ * Creates tables if they don't exist
13
+ */
14
+ export declare function initDb(cwd: string): Promise<boolean>;
15
+ /**
16
+ * Close the database connection
17
+ */
18
+ export declare function closeDb(): void;
19
+ /**
20
+ * Delete the database file (for cleanup)
21
+ */
22
+ export declare function deleteDb(cwd: string): boolean;
23
+ /**
24
+ * Check if database is initialized and connected
25
+ */
26
+ export declare function isDbInitialized(): boolean;
27
+ /**
28
+ * Initialize a new swarm session
29
+ */
30
+ export declare function initSession(sessionId: string, agentCount: number): boolean;
31
+ /**
32
+ * Load the current swarm state
33
+ */
34
+ export declare function loadState(): SwarmState | null;
35
+ /**
36
+ * Save swarm state (updates session info only, tasks are updated individually)
37
+ */
38
+ export declare function saveState(state: Partial<SwarmState>): boolean;
39
+ /**
40
+ * Add a task to the pool
41
+ */
42
+ export declare function addTask(id: string, description: string): boolean;
43
+ /**
44
+ * Add multiple tasks in a transaction
45
+ */
46
+ export declare function addTasks(tasks: Array<{
47
+ id: string;
48
+ description: string;
49
+ }>): boolean;
50
+ /**
51
+ * Get all tasks
52
+ */
53
+ export declare function getTasks(): SwarmTask[];
54
+ /**
55
+ * Get tasks by status
56
+ */
57
+ export declare function getTasksByStatus(status: SwarmTask['status']): SwarmTask[];
58
+ /**
59
+ * Get a specific task by ID
60
+ */
61
+ export declare function getTask(taskId: string): SwarmTask | null;
62
+ /**
63
+ * Update a task's status and metadata
64
+ */
65
+ export declare function updateTask(taskId: string, updates: Partial<Omit<SwarmTask, 'id' | 'description'>>): boolean;
66
+ /**
67
+ * Get swarm statistics
68
+ */
69
+ export declare function getStats(): SwarmStats | null;
70
+ /**
71
+ * Record an agent heartbeat
72
+ */
73
+ export declare function recordHeartbeat(agentId: string, currentTaskId: string | null): boolean;
74
+ /**
75
+ * Get all agent heartbeats
76
+ */
77
+ export declare function getHeartbeats(): AgentHeartbeat[];
78
+ /**
79
+ * Remove an agent's heartbeat record
80
+ */
81
+ export declare function removeHeartbeat(agentId: string): boolean;
82
+ /**
83
+ * Clear all data (for reset)
84
+ */
85
+ export declare function clearAllData(): boolean;
86
+ /**
87
+ * Run a function within a transaction
88
+ */
89
+ export declare function runTransaction<T>(fn: () => T): T | null;
90
+ /**
91
+ * Get the raw database instance (for advanced use)
92
+ */
93
+ export declare function getDb(): BetterSqlite3.Database | null;
94
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/hooks/swarm/state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,cAAc,EACd,UAAU,EACX,MAAM,YAAY,CAAC;AA2BpB;;;GAGG;AACH,wBAAsB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsE1D;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAK9B;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAiB7C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAc1E;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,UAAU,GAAG,IAAI,CAoD7C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CA2B7D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAchE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,OAAO,CAqBnF;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,SAAS,EAAE,CA8BtC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,SAAS,EAAE,CA8BzE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAgCxD;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,aAAa,CAAC,CAAC,GACtD,OAAO,CA0CT;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,UAAU,GAAG,IAAI,CA+C5C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CActF;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,cAAc,EAAE,CAoBhD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAWxD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CActC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CASvD;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,aAAa,CAAC,QAAQ,GAAG,IAAI,CAErD"}
@@ -0,0 +1,530 @@
1
+ /**
2
+ * Swarm State Management
3
+ *
4
+ * SQLite-based persistent state for swarm coordination.
5
+ * Uses better-sqlite3 for synchronous operations with transaction support.
6
+ * All state is stored in .omc/state/swarm.db
7
+ */
8
+ import { existsSync, mkdirSync, unlinkSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { DB_SCHEMA_VERSION } from './types.js';
11
+ // Dynamic import for better-sqlite3 to handle environments where it's not installed
12
+ let Database = null;
13
+ let db = null;
14
+ /**
15
+ * Get the database file path
16
+ */
17
+ function getDbPath(cwd) {
18
+ return join(cwd, '.omc', 'state', 'swarm.db');
19
+ }
20
+ /**
21
+ * Ensure the state directory exists
22
+ */
23
+ function ensureStateDir(cwd) {
24
+ const stateDir = join(cwd, '.omc', 'state');
25
+ if (!existsSync(stateDir)) {
26
+ mkdirSync(stateDir, { recursive: true });
27
+ }
28
+ }
29
+ /**
30
+ * Initialize the SQLite database
31
+ * Creates tables if they don't exist
32
+ */
33
+ export async function initDb(cwd) {
34
+ try {
35
+ // Dynamic import of better-sqlite3
36
+ if (!Database) {
37
+ const betterSqlite3 = await import('better-sqlite3');
38
+ Database = betterSqlite3.default;
39
+ }
40
+ ensureStateDir(cwd);
41
+ const dbPath = getDbPath(cwd);
42
+ db = new Database(dbPath);
43
+ // Enable WAL mode for better concurrency
44
+ db.pragma('journal_mode = WAL');
45
+ // Create tables
46
+ db.exec(`
47
+ -- Schema version tracking
48
+ CREATE TABLE IF NOT EXISTS schema_info (
49
+ key TEXT PRIMARY KEY,
50
+ value TEXT NOT NULL
51
+ );
52
+
53
+ -- Swarm session state
54
+ CREATE TABLE IF NOT EXISTS swarm_session (
55
+ id INTEGER PRIMARY KEY CHECK (id = 1),
56
+ session_id TEXT NOT NULL,
57
+ active INTEGER NOT NULL DEFAULT 1,
58
+ agent_count INTEGER NOT NULL,
59
+ started_at INTEGER NOT NULL,
60
+ completed_at INTEGER
61
+ );
62
+
63
+ -- Task pool
64
+ CREATE TABLE IF NOT EXISTS tasks (
65
+ id TEXT PRIMARY KEY,
66
+ description TEXT NOT NULL,
67
+ status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'claimed', 'done', 'failed')),
68
+ claimed_by TEXT,
69
+ claimed_at INTEGER,
70
+ completed_at INTEGER,
71
+ error TEXT,
72
+ result TEXT
73
+ );
74
+
75
+ -- Agent heartbeats
76
+ CREATE TABLE IF NOT EXISTS heartbeats (
77
+ agent_id TEXT PRIMARY KEY,
78
+ last_heartbeat INTEGER NOT NULL,
79
+ current_task_id TEXT
80
+ );
81
+
82
+ -- Indexes for performance
83
+ CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
84
+ CREATE INDEX IF NOT EXISTS idx_tasks_claimed_by ON tasks(claimed_by);
85
+ CREATE INDEX IF NOT EXISTS idx_heartbeats_last ON heartbeats(last_heartbeat);
86
+ `);
87
+ // Set schema version
88
+ const setVersion = db.prepare('INSERT OR REPLACE INTO schema_info (key, value) VALUES (?, ?)');
89
+ setVersion.run('version', String(DB_SCHEMA_VERSION));
90
+ return true;
91
+ }
92
+ catch (error) {
93
+ console.error('Failed to initialize swarm database:', error);
94
+ return false;
95
+ }
96
+ }
97
+ /**
98
+ * Close the database connection
99
+ */
100
+ export function closeDb() {
101
+ if (db) {
102
+ db.close();
103
+ db = null;
104
+ }
105
+ }
106
+ /**
107
+ * Delete the database file (for cleanup)
108
+ */
109
+ export function deleteDb(cwd) {
110
+ try {
111
+ closeDb();
112
+ const dbPath = getDbPath(cwd);
113
+ if (existsSync(dbPath)) {
114
+ unlinkSync(dbPath);
115
+ }
116
+ // Also remove WAL and SHM files
117
+ const walPath = dbPath + '-wal';
118
+ const shmPath = dbPath + '-shm';
119
+ if (existsSync(walPath))
120
+ unlinkSync(walPath);
121
+ if (existsSync(shmPath))
122
+ unlinkSync(shmPath);
123
+ return true;
124
+ }
125
+ catch (error) {
126
+ console.error('Failed to delete swarm database:', error);
127
+ return false;
128
+ }
129
+ }
130
+ /**
131
+ * Check if database is initialized and connected
132
+ */
133
+ export function isDbInitialized() {
134
+ return db !== null;
135
+ }
136
+ /**
137
+ * Initialize a new swarm session
138
+ */
139
+ export function initSession(sessionId, agentCount) {
140
+ if (!db)
141
+ return false;
142
+ try {
143
+ const stmt = db.prepare(`
144
+ INSERT OR REPLACE INTO swarm_session (id, session_id, active, agent_count, started_at, completed_at)
145
+ VALUES (1, ?, 1, ?, ?, NULL)
146
+ `);
147
+ stmt.run(sessionId, agentCount, Date.now());
148
+ return true;
149
+ }
150
+ catch (error) {
151
+ console.error('Failed to initialize session:', error);
152
+ return false;
153
+ }
154
+ }
155
+ /**
156
+ * Load the current swarm state
157
+ */
158
+ export function loadState() {
159
+ if (!db)
160
+ return null;
161
+ try {
162
+ // Get session info
163
+ const sessionStmt = db.prepare('SELECT * FROM swarm_session WHERE id = 1');
164
+ const session = sessionStmt.get();
165
+ if (!session)
166
+ return null;
167
+ // Get all tasks
168
+ const tasksStmt = db.prepare('SELECT * FROM tasks ORDER BY id');
169
+ const taskRows = tasksStmt.all();
170
+ const tasks = taskRows.map(row => ({
171
+ id: row.id,
172
+ description: row.description,
173
+ status: row.status,
174
+ claimedBy: row.claimed_by,
175
+ claimedAt: row.claimed_at,
176
+ completedAt: row.completed_at,
177
+ error: row.error ?? undefined,
178
+ result: row.result ?? undefined
179
+ }));
180
+ return {
181
+ active: session.active === 1,
182
+ sessionId: session.session_id,
183
+ agentCount: session.agent_count,
184
+ tasks,
185
+ startedAt: session.started_at,
186
+ completedAt: session.completed_at
187
+ };
188
+ }
189
+ catch (error) {
190
+ console.error('Failed to load swarm state:', error);
191
+ return null;
192
+ }
193
+ }
194
+ /**
195
+ * Save swarm state (updates session info only, tasks are updated individually)
196
+ */
197
+ export function saveState(state) {
198
+ if (!db)
199
+ return false;
200
+ try {
201
+ if (state.active !== undefined || state.completedAt !== undefined) {
202
+ const updates = [];
203
+ const values = [];
204
+ if (state.active !== undefined) {
205
+ updates.push('active = ?');
206
+ values.push(state.active ? 1 : 0);
207
+ }
208
+ if (state.completedAt !== undefined) {
209
+ updates.push('completed_at = ?');
210
+ values.push(state.completedAt);
211
+ }
212
+ if (updates.length > 0) {
213
+ const stmt = db.prepare(`UPDATE swarm_session SET ${updates.join(', ')} WHERE id = 1`);
214
+ stmt.run(...values);
215
+ }
216
+ }
217
+ return true;
218
+ }
219
+ catch (error) {
220
+ console.error('Failed to save swarm state:', error);
221
+ return false;
222
+ }
223
+ }
224
+ /**
225
+ * Add a task to the pool
226
+ */
227
+ export function addTask(id, description) {
228
+ if (!db)
229
+ return false;
230
+ try {
231
+ const stmt = db.prepare(`
232
+ INSERT INTO tasks (id, description, status, claimed_by, claimed_at, completed_at, error, result)
233
+ VALUES (?, ?, 'pending', NULL, NULL, NULL, NULL, NULL)
234
+ `);
235
+ stmt.run(id, description);
236
+ return true;
237
+ }
238
+ catch (error) {
239
+ console.error('Failed to add task:', error);
240
+ return false;
241
+ }
242
+ }
243
+ /**
244
+ * Add multiple tasks in a transaction
245
+ */
246
+ export function addTasks(tasks) {
247
+ if (!db)
248
+ return false;
249
+ try {
250
+ const stmt = db.prepare(`
251
+ INSERT INTO tasks (id, description, status, claimed_by, claimed_at, completed_at, error, result)
252
+ VALUES (?, ?, 'pending', NULL, NULL, NULL, NULL, NULL)
253
+ `);
254
+ const insertMany = db.transaction((taskList) => {
255
+ for (const task of taskList) {
256
+ stmt.run(task.id, task.description);
257
+ }
258
+ });
259
+ insertMany(tasks);
260
+ return true;
261
+ }
262
+ catch (error) {
263
+ console.error('Failed to add tasks:', error);
264
+ return false;
265
+ }
266
+ }
267
+ /**
268
+ * Get all tasks
269
+ */
270
+ export function getTasks() {
271
+ if (!db)
272
+ return [];
273
+ try {
274
+ const stmt = db.prepare('SELECT * FROM tasks ORDER BY id');
275
+ const rows = stmt.all();
276
+ return rows.map(row => ({
277
+ id: row.id,
278
+ description: row.description,
279
+ status: row.status,
280
+ claimedBy: row.claimed_by,
281
+ claimedAt: row.claimed_at,
282
+ completedAt: row.completed_at,
283
+ error: row.error ?? undefined,
284
+ result: row.result ?? undefined
285
+ }));
286
+ }
287
+ catch (error) {
288
+ console.error('Failed to get tasks:', error);
289
+ return [];
290
+ }
291
+ }
292
+ /**
293
+ * Get tasks by status
294
+ */
295
+ export function getTasksByStatus(status) {
296
+ if (!db)
297
+ return [];
298
+ try {
299
+ const stmt = db.prepare('SELECT * FROM tasks WHERE status = ? ORDER BY id');
300
+ const rows = stmt.all(status);
301
+ return rows.map(row => ({
302
+ id: row.id,
303
+ description: row.description,
304
+ status: row.status,
305
+ claimedBy: row.claimed_by,
306
+ claimedAt: row.claimed_at,
307
+ completedAt: row.completed_at,
308
+ error: row.error ?? undefined,
309
+ result: row.result ?? undefined
310
+ }));
311
+ }
312
+ catch (error) {
313
+ console.error('Failed to get tasks by status:', error);
314
+ return [];
315
+ }
316
+ }
317
+ /**
318
+ * Get a specific task by ID
319
+ */
320
+ export function getTask(taskId) {
321
+ if (!db)
322
+ return null;
323
+ try {
324
+ const stmt = db.prepare('SELECT * FROM tasks WHERE id = ?');
325
+ const row = stmt.get(taskId);
326
+ if (!row)
327
+ return null;
328
+ return {
329
+ id: row.id,
330
+ description: row.description,
331
+ status: row.status,
332
+ claimedBy: row.claimed_by,
333
+ claimedAt: row.claimed_at,
334
+ completedAt: row.completed_at,
335
+ error: row.error ?? undefined,
336
+ result: row.result ?? undefined
337
+ };
338
+ }
339
+ catch (error) {
340
+ console.error('Failed to get task:', error);
341
+ return null;
342
+ }
343
+ }
344
+ /**
345
+ * Update a task's status and metadata
346
+ */
347
+ export function updateTask(taskId, updates) {
348
+ if (!db)
349
+ return false;
350
+ try {
351
+ const setClauses = [];
352
+ const values = [];
353
+ if (updates.status !== undefined) {
354
+ setClauses.push('status = ?');
355
+ values.push(updates.status);
356
+ }
357
+ if (updates.claimedBy !== undefined) {
358
+ setClauses.push('claimed_by = ?');
359
+ values.push(updates.claimedBy);
360
+ }
361
+ if (updates.claimedAt !== undefined) {
362
+ setClauses.push('claimed_at = ?');
363
+ values.push(updates.claimedAt);
364
+ }
365
+ if (updates.completedAt !== undefined) {
366
+ setClauses.push('completed_at = ?');
367
+ values.push(updates.completedAt);
368
+ }
369
+ if (updates.error !== undefined) {
370
+ setClauses.push('error = ?');
371
+ values.push(updates.error ?? null);
372
+ }
373
+ if (updates.result !== undefined) {
374
+ setClauses.push('result = ?');
375
+ values.push(updates.result ?? null);
376
+ }
377
+ if (setClauses.length === 0)
378
+ return true;
379
+ values.push(taskId);
380
+ const stmt = db.prepare(`UPDATE tasks SET ${setClauses.join(', ')} WHERE id = ?`);
381
+ stmt.run(...values);
382
+ return true;
383
+ }
384
+ catch (error) {
385
+ console.error('Failed to update task:', error);
386
+ return false;
387
+ }
388
+ }
389
+ /**
390
+ * Get swarm statistics
391
+ */
392
+ export function getStats() {
393
+ if (!db)
394
+ return null;
395
+ try {
396
+ // Get task counts by status
397
+ const countStmt = db.prepare(`
398
+ SELECT status, COUNT(*) as count FROM tasks GROUP BY status
399
+ `);
400
+ const counts = countStmt.all();
401
+ const statusCounts = {
402
+ pending: 0,
403
+ claimed: 0,
404
+ done: 0,
405
+ failed: 0
406
+ };
407
+ for (const row of counts) {
408
+ statusCounts[row.status] = row.count;
409
+ }
410
+ // Get active agents count
411
+ const agentStmt = db.prepare(`
412
+ SELECT COUNT(*) as count FROM heartbeats
413
+ WHERE last_heartbeat > ?
414
+ `);
415
+ const fiveMinutesAgo = Date.now() - 5 * 60 * 1000;
416
+ const agentCount = agentStmt.get(fiveMinutesAgo).count;
417
+ // Get session start time
418
+ const sessionStmt = db.prepare('SELECT started_at FROM swarm_session WHERE id = 1');
419
+ const session = sessionStmt.get();
420
+ const startedAt = session?.started_at ?? Date.now();
421
+ return {
422
+ totalTasks: statusCounts.pending + statusCounts.claimed + statusCounts.done + statusCounts.failed,
423
+ pendingTasks: statusCounts.pending,
424
+ claimedTasks: statusCounts.claimed,
425
+ doneTasks: statusCounts.done,
426
+ failedTasks: statusCounts.failed,
427
+ activeAgents: agentCount,
428
+ elapsedTime: Date.now() - startedAt
429
+ };
430
+ }
431
+ catch (error) {
432
+ console.error('Failed to get stats:', error);
433
+ return null;
434
+ }
435
+ }
436
+ /**
437
+ * Record an agent heartbeat
438
+ */
439
+ export function recordHeartbeat(agentId, currentTaskId) {
440
+ if (!db)
441
+ return false;
442
+ try {
443
+ const stmt = db.prepare(`
444
+ INSERT OR REPLACE INTO heartbeats (agent_id, last_heartbeat, current_task_id)
445
+ VALUES (?, ?, ?)
446
+ `);
447
+ stmt.run(agentId, Date.now(), currentTaskId);
448
+ return true;
449
+ }
450
+ catch (error) {
451
+ console.error('Failed to record heartbeat:', error);
452
+ return false;
453
+ }
454
+ }
455
+ /**
456
+ * Get all agent heartbeats
457
+ */
458
+ export function getHeartbeats() {
459
+ if (!db)
460
+ return [];
461
+ try {
462
+ const stmt = db.prepare('SELECT * FROM heartbeats ORDER BY agent_id');
463
+ const rows = stmt.all();
464
+ return rows.map(row => ({
465
+ agentId: row.agent_id,
466
+ lastHeartbeat: row.last_heartbeat,
467
+ currentTaskId: row.current_task_id
468
+ }));
469
+ }
470
+ catch (error) {
471
+ console.error('Failed to get heartbeats:', error);
472
+ return [];
473
+ }
474
+ }
475
+ /**
476
+ * Remove an agent's heartbeat record
477
+ */
478
+ export function removeHeartbeat(agentId) {
479
+ if (!db)
480
+ return false;
481
+ try {
482
+ const stmt = db.prepare('DELETE FROM heartbeats WHERE agent_id = ?');
483
+ stmt.run(agentId);
484
+ return true;
485
+ }
486
+ catch (error) {
487
+ console.error('Failed to remove heartbeat:', error);
488
+ return false;
489
+ }
490
+ }
491
+ /**
492
+ * Clear all data (for reset)
493
+ */
494
+ export function clearAllData() {
495
+ if (!db)
496
+ return false;
497
+ try {
498
+ db.exec(`
499
+ DELETE FROM tasks;
500
+ DELETE FROM heartbeats;
501
+ DELETE FROM swarm_session;
502
+ `);
503
+ return true;
504
+ }
505
+ catch (error) {
506
+ console.error('Failed to clear data:', error);
507
+ return false;
508
+ }
509
+ }
510
+ /**
511
+ * Run a function within a transaction
512
+ */
513
+ export function runTransaction(fn) {
514
+ if (!db)
515
+ return null;
516
+ try {
517
+ return db.transaction(fn)();
518
+ }
519
+ catch (error) {
520
+ console.error('Transaction failed:', error);
521
+ return null;
522
+ }
523
+ }
524
+ /**
525
+ * Get the raw database instance (for advanced use)
526
+ */
527
+ export function getDb() {
528
+ return db;
529
+ }
530
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/hooks/swarm/state.ts"],"names":[],"mappings":"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"}