oh-my-claude-sisyphus 3.6.0 → 3.6.2

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 (49) hide show
  1. package/commands/omc-setup.md +3 -3
  2. package/commands/psm.md +180 -0
  3. package/commands/release.md +1 -1
  4. package/dist/__tests__/analytics/transcript-scanner.test.js +69 -27
  5. package/dist/__tests__/analytics/transcript-scanner.test.js.map +1 -1
  6. package/dist/__tests__/installer.test.js +2 -1
  7. package/dist/__tests__/installer.test.js.map +1 -1
  8. package/dist/analytics/session-manager.d.ts +24 -0
  9. package/dist/analytics/session-manager.d.ts.map +1 -1
  10. package/dist/analytics/session-manager.js +98 -9
  11. package/dist/analytics/session-manager.js.map +1 -1
  12. package/dist/analytics/transcript-scanner.d.ts +9 -8
  13. package/dist/analytics/transcript-scanner.d.ts.map +1 -1
  14. package/dist/analytics/transcript-scanner.js +146 -16
  15. package/dist/analytics/transcript-scanner.js.map +1 -1
  16. package/dist/hooks/empty-message-sanitizer/__tests__/index.test.d.ts +2 -0
  17. package/dist/hooks/empty-message-sanitizer/__tests__/index.test.d.ts.map +1 -0
  18. package/dist/hooks/empty-message-sanitizer/__tests__/index.test.js +416 -0
  19. package/dist/hooks/empty-message-sanitizer/__tests__/index.test.js.map +1 -0
  20. package/dist/hooks/keyword-detector/__tests__/index.test.d.ts +2 -0
  21. package/dist/hooks/keyword-detector/__tests__/index.test.d.ts.map +1 -0
  22. package/dist/hooks/keyword-detector/__tests__/index.test.js +427 -0
  23. package/dist/hooks/keyword-detector/__tests__/index.test.js.map +1 -0
  24. package/dist/hooks/subagent-tracker/index.d.ts +83 -0
  25. package/dist/hooks/subagent-tracker/index.d.ts.map +1 -0
  26. package/dist/hooks/subagent-tracker/index.js +207 -0
  27. package/dist/hooks/subagent-tracker/index.js.map +1 -0
  28. package/dist/hooks/think-mode/__tests__/index.test.d.ts +2 -0
  29. package/dist/hooks/think-mode/__tests__/index.test.d.ts.map +1 -0
  30. package/dist/hooks/think-mode/__tests__/index.test.js +556 -0
  31. package/dist/hooks/think-mode/__tests__/index.test.js.map +1 -0
  32. package/dist/installer/index.d.ts.map +1 -1
  33. package/dist/installer/index.js +8 -0
  34. package/dist/installer/index.js.map +1 -1
  35. package/docs/design/project-session-manager.md +1033 -0
  36. package/package.json +1 -1
  37. package/skills/omc-setup/SKILL.md +27 -3
  38. package/skills/project-session-manager/SKILL.md +410 -0
  39. package/skills/project-session-manager/lib/config.sh +86 -0
  40. package/skills/project-session-manager/lib/parse.sh +121 -0
  41. package/skills/project-session-manager/lib/session.sh +132 -0
  42. package/skills/project-session-manager/lib/tmux.sh +103 -0
  43. package/skills/project-session-manager/lib/worktree.sh +171 -0
  44. package/skills/project-session-manager/psm.sh +629 -0
  45. package/skills/project-session-manager/templates/feature.md +56 -0
  46. package/skills/project-session-manager/templates/issue-fix.md +57 -0
  47. package/skills/project-session-manager/templates/pr-review.md +65 -0
  48. package/skills/project-session-manager/templates/projects.json +19 -0
  49. package/skills/release/SKILL.md +1 -1
@@ -0,0 +1,427 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { removeCodeBlocks, extractPromptText, detectKeywordsWithType, hasKeyword, getPrimaryKeyword, } from '../index.js';
3
+ describe('keyword-detector', () => {
4
+ describe('removeCodeBlocks', () => {
5
+ it('should remove fenced code blocks with triple backticks', () => {
6
+ const text = 'Before ```code here``` after';
7
+ expect(removeCodeBlocks(text)).toBe('Before after');
8
+ });
9
+ it('should remove fenced code blocks with tildes', () => {
10
+ const text = 'Before ~~~code here~~~ after';
11
+ expect(removeCodeBlocks(text)).toBe('Before after');
12
+ });
13
+ it('should remove multiline fenced code blocks', () => {
14
+ const text = `Hello
15
+ \`\`\`javascript
16
+ const x = 1;
17
+ const y = 2;
18
+ \`\`\`
19
+ World`;
20
+ expect(removeCodeBlocks(text)).toBe(`Hello
21
+
22
+ World`);
23
+ });
24
+ it('should remove inline code with single backticks', () => {
25
+ const text = 'Use `autopilot` command here';
26
+ expect(removeCodeBlocks(text)).toBe('Use command here');
27
+ });
28
+ it('should handle nested backticks in fenced blocks', () => {
29
+ // The regex matches ```...``` greedily, so ```const x = `test````
30
+ // matches from first ``` to the triple backtick at the end
31
+ const text = 'Before ```const x = `test` ``` after';
32
+ expect(removeCodeBlocks(text)).toBe('Before after');
33
+ });
34
+ it('should handle multiple code blocks', () => {
35
+ const text = '`a` middle `b` end';
36
+ expect(removeCodeBlocks(text)).toBe(' middle end');
37
+ });
38
+ it('should handle empty input', () => {
39
+ expect(removeCodeBlocks('')).toBe('');
40
+ });
41
+ it('should return text unchanged when no code blocks', () => {
42
+ const text = 'Regular text without code';
43
+ expect(removeCodeBlocks(text)).toBe('Regular text without code');
44
+ });
45
+ it('should handle code blocks with language specifier', () => {
46
+ const text = '```typescript\nconst x = 1;\n``` done';
47
+ expect(removeCodeBlocks(text)).toBe(' done');
48
+ });
49
+ });
50
+ describe('extractPromptText', () => {
51
+ it('should extract text from text parts', () => {
52
+ const parts = [
53
+ { type: 'text', text: 'Hello' },
54
+ { type: 'text', text: 'World' },
55
+ ];
56
+ expect(extractPromptText(parts)).toBe('Hello World');
57
+ });
58
+ it('should ignore non-text parts', () => {
59
+ const parts = [
60
+ { type: 'text', text: 'Hello' },
61
+ { type: 'image', url: 'http://example.com' },
62
+ { type: 'text', text: 'World' },
63
+ ];
64
+ expect(extractPromptText(parts)).toBe('Hello World');
65
+ });
66
+ it('should handle empty parts array', () => {
67
+ expect(extractPromptText([])).toBe('');
68
+ });
69
+ it('should handle parts with no text', () => {
70
+ const parts = [
71
+ { type: 'text' },
72
+ { type: 'text', text: 'Valid' },
73
+ ];
74
+ expect(extractPromptText(parts)).toBe('Valid');
75
+ });
76
+ it('should handle undefined text gracefully', () => {
77
+ const parts = [
78
+ { type: 'text', text: undefined },
79
+ { type: 'text', text: 'Hello' },
80
+ ];
81
+ expect(extractPromptText(parts)).toBe('Hello');
82
+ });
83
+ it('should handle all non-text parts', () => {
84
+ const parts = [
85
+ { type: 'image' },
86
+ { type: 'tool_use' },
87
+ ];
88
+ expect(extractPromptText(parts)).toBe('');
89
+ });
90
+ });
91
+ describe('detectKeywordsWithType', () => {
92
+ describe('ralph keyword', () => {
93
+ it('should detect ralph keyword', () => {
94
+ const result = detectKeywordsWithType('Please ralph this task');
95
+ const ralphMatch = result.find((r) => r.type === 'ralph');
96
+ expect(ralphMatch).toBeDefined();
97
+ expect(ralphMatch?.keyword).toBe('ralph');
98
+ });
99
+ it('should detect "don\'t stop" keyword', () => {
100
+ const result = detectKeywordsWithType("Don't stop until done");
101
+ const ralphMatch = result.find((r) => r.type === 'ralph');
102
+ expect(ralphMatch).toBeDefined();
103
+ });
104
+ it('should detect "must complete" keyword', () => {
105
+ const result = detectKeywordsWithType('You must complete this task');
106
+ const ralphMatch = result.find((r) => r.type === 'ralph');
107
+ expect(ralphMatch).toBeDefined();
108
+ });
109
+ it('should detect "until done" keyword', () => {
110
+ const result = detectKeywordsWithType('Keep going until done');
111
+ const ralphMatch = result.find((r) => r.type === 'ralph');
112
+ expect(ralphMatch).toBeDefined();
113
+ });
114
+ });
115
+ describe('autopilot keyword', () => {
116
+ it('should detect autopilot keyword', () => {
117
+ const result = detectKeywordsWithType('Run in autopilot mode');
118
+ const autopilotMatch = result.find((r) => r.type === 'autopilot');
119
+ expect(autopilotMatch).toBeDefined();
120
+ });
121
+ it('should detect "auto pilot" with space', () => {
122
+ const result = detectKeywordsWithType('Enable auto pilot');
123
+ const autopilotMatch = result.find((r) => r.type === 'autopilot');
124
+ expect(autopilotMatch).toBeDefined();
125
+ });
126
+ it('should detect "auto-pilot" with hyphen', () => {
127
+ const result = detectKeywordsWithType('Enable auto-pilot mode');
128
+ const autopilotMatch = result.find((r) => r.type === 'autopilot');
129
+ expect(autopilotMatch).toBeDefined();
130
+ });
131
+ it('should detect "autonomous" keyword', () => {
132
+ const result = detectKeywordsWithType('Run in autonomous mode');
133
+ const autopilotMatch = result.find((r) => r.type === 'autopilot');
134
+ expect(autopilotMatch).toBeDefined();
135
+ });
136
+ it('should detect "full auto" keyword', () => {
137
+ const result = detectKeywordsWithType('Go full auto on this');
138
+ const autopilotMatch = result.find((r) => r.type === 'autopilot');
139
+ expect(autopilotMatch).toBeDefined();
140
+ });
141
+ it('should detect "fullsend" keyword', () => {
142
+ const result = detectKeywordsWithType('fullsend this implementation');
143
+ const autopilotMatch = result.find((r) => r.type === 'autopilot');
144
+ expect(autopilotMatch).toBeDefined();
145
+ });
146
+ it('should detect autopilot phrase "build me"', () => {
147
+ const result = detectKeywordsWithType('build me a web app');
148
+ const autopilotMatch = result.find((r) => r.type === 'autopilot');
149
+ expect(autopilotMatch).toBeDefined();
150
+ });
151
+ it('should detect autopilot phrase "create me"', () => {
152
+ const result = detectKeywordsWithType('create me a new feature');
153
+ const autopilotMatch = result.find((r) => r.type === 'autopilot');
154
+ expect(autopilotMatch).toBeDefined();
155
+ });
156
+ it('should detect autopilot phrase "make me"', () => {
157
+ const result = detectKeywordsWithType('make me a dashboard');
158
+ const autopilotMatch = result.find((r) => r.type === 'autopilot');
159
+ expect(autopilotMatch).toBeDefined();
160
+ });
161
+ it('should detect autopilot phrase "i want a"', () => {
162
+ const result = detectKeywordsWithType('i want a new login page');
163
+ const autopilotMatch = result.find((r) => r.type === 'autopilot');
164
+ expect(autopilotMatch).toBeDefined();
165
+ });
166
+ it('should detect autopilot phrase "handle it all"', () => {
167
+ const result = detectKeywordsWithType('Just handle it all');
168
+ const autopilotMatch = result.find((r) => r.type === 'autopilot');
169
+ expect(autopilotMatch).toBeDefined();
170
+ });
171
+ it('should detect autopilot phrase "end to end"', () => {
172
+ const result = detectKeywordsWithType('Build this end to end');
173
+ const autopilotMatch = result.find((r) => r.type === 'autopilot');
174
+ expect(autopilotMatch).toBeDefined();
175
+ });
176
+ it('should detect autopilot phrase "e2e this"', () => {
177
+ const result = detectKeywordsWithType('e2e this feature');
178
+ const autopilotMatch = result.find((r) => r.type === 'autopilot');
179
+ expect(autopilotMatch).toBeDefined();
180
+ });
181
+ });
182
+ describe('ultrawork keyword', () => {
183
+ it('should detect ultrawork keyword', () => {
184
+ const result = detectKeywordsWithType('Do ultrawork on this');
185
+ const ultraworkMatch = result.find((r) => r.type === 'ultrawork');
186
+ expect(ultraworkMatch).toBeDefined();
187
+ });
188
+ it('should detect ulw abbreviation', () => {
189
+ const result = detectKeywordsWithType('ulw this code');
190
+ const ultraworkMatch = result.find((r) => r.type === 'ultrawork');
191
+ expect(ultraworkMatch).toBeDefined();
192
+ });
193
+ });
194
+ describe('ultrathink keyword', () => {
195
+ it('should detect ultrathink keyword', () => {
196
+ const result = detectKeywordsWithType('ultrathink about this problem');
197
+ const ultrathinkMatch = result.find((r) => r.type === 'ultrathink');
198
+ expect(ultrathinkMatch).toBeDefined();
199
+ });
200
+ it('should detect think keyword', () => {
201
+ const result = detectKeywordsWithType('think about this problem');
202
+ const ultrathinkMatch = result.find((r) => r.type === 'ultrathink');
203
+ expect(ultrathinkMatch).toBeDefined();
204
+ });
205
+ });
206
+ describe('search keyword', () => {
207
+ it('should detect search keyword', () => {
208
+ const result = detectKeywordsWithType('search for files');
209
+ const searchMatch = result.find((r) => r.type === 'search');
210
+ expect(searchMatch).toBeDefined();
211
+ });
212
+ it('should detect find keyword', () => {
213
+ const result = detectKeywordsWithType('find the bug');
214
+ const searchMatch = result.find((r) => r.type === 'search');
215
+ expect(searchMatch).toBeDefined();
216
+ });
217
+ it('should detect locate keyword', () => {
218
+ const result = detectKeywordsWithType('locate the function');
219
+ const searchMatch = result.find((r) => r.type === 'search');
220
+ expect(searchMatch).toBeDefined();
221
+ });
222
+ it('should detect "where is" phrase', () => {
223
+ const result = detectKeywordsWithType('where is the config');
224
+ const searchMatch = result.find((r) => r.type === 'search');
225
+ expect(searchMatch).toBeDefined();
226
+ });
227
+ it('should detect "show me" phrase', () => {
228
+ const result = detectKeywordsWithType('show me the files');
229
+ const searchMatch = result.find((r) => r.type === 'search');
230
+ expect(searchMatch).toBeDefined();
231
+ });
232
+ it('should detect "list all" phrase', () => {
233
+ const result = detectKeywordsWithType('list all components');
234
+ const searchMatch = result.find((r) => r.type === 'search');
235
+ expect(searchMatch).toBeDefined();
236
+ });
237
+ it('should detect grep keyword', () => {
238
+ const result = detectKeywordsWithType('grep for errors');
239
+ const searchMatch = result.find((r) => r.type === 'search');
240
+ expect(searchMatch).toBeDefined();
241
+ });
242
+ });
243
+ describe('analyze keyword', () => {
244
+ it('should detect analyze keyword', () => {
245
+ const result = detectKeywordsWithType('analyze this code');
246
+ const analyzeMatch = result.find((r) => r.type === 'analyze');
247
+ expect(analyzeMatch).toBeDefined();
248
+ });
249
+ it('should detect analyse (British spelling) keyword', () => {
250
+ const result = detectKeywordsWithType('analyse this code');
251
+ const analyzeMatch = result.find((r) => r.type === 'analyze');
252
+ expect(analyzeMatch).toBeDefined();
253
+ });
254
+ it('should detect investigate keyword', () => {
255
+ const result = detectKeywordsWithType('investigate the issue');
256
+ const analyzeMatch = result.find((r) => r.type === 'analyze');
257
+ expect(analyzeMatch).toBeDefined();
258
+ });
259
+ it('should detect debug keyword', () => {
260
+ const result = detectKeywordsWithType('debug this function');
261
+ const analyzeMatch = result.find((r) => r.type === 'analyze');
262
+ expect(analyzeMatch).toBeDefined();
263
+ });
264
+ it('should detect "why is" phrase', () => {
265
+ const result = detectKeywordsWithType('why is this failing');
266
+ const analyzeMatch = result.find((r) => r.type === 'analyze');
267
+ expect(analyzeMatch).toBeDefined();
268
+ });
269
+ it('should detect "how does" phrase', () => {
270
+ const result = detectKeywordsWithType('how does this work');
271
+ const analyzeMatch = result.find((r) => r.type === 'analyze');
272
+ expect(analyzeMatch).toBeDefined();
273
+ });
274
+ it('should detect "how to" phrase', () => {
275
+ const result = detectKeywordsWithType('how to fix this bug');
276
+ const analyzeMatch = result.find((r) => r.type === 'analyze');
277
+ expect(analyzeMatch).toBeDefined();
278
+ });
279
+ it('should detect deep-dive keyword', () => {
280
+ const result = detectKeywordsWithType('deep-dive into the module');
281
+ const analyzeMatch = result.find((r) => r.type === 'analyze');
282
+ expect(analyzeMatch).toBeDefined();
283
+ });
284
+ it('should detect deepdive keyword', () => {
285
+ const result = detectKeywordsWithType('deepdive the architecture');
286
+ const analyzeMatch = result.find((r) => r.type === 'analyze');
287
+ expect(analyzeMatch).toBeDefined();
288
+ });
289
+ });
290
+ describe('case insensitivity', () => {
291
+ it('should detect RALPH in uppercase', () => {
292
+ const result = detectKeywordsWithType('RALPH this task');
293
+ const ralphMatch = result.find((r) => r.type === 'ralph');
294
+ expect(ralphMatch).toBeDefined();
295
+ });
296
+ it('should detect AUTOPILOT in uppercase', () => {
297
+ const result = detectKeywordsWithType('AUTOPILOT mode');
298
+ const autopilotMatch = result.find((r) => r.type === 'autopilot');
299
+ expect(autopilotMatch).toBeDefined();
300
+ });
301
+ it('should detect mixed case keywords', () => {
302
+ const result = detectKeywordsWithType('UltraThink about this');
303
+ const ultrathinkMatch = result.find((r) => r.type === 'ultrathink');
304
+ expect(ultrathinkMatch).toBeDefined();
305
+ });
306
+ });
307
+ describe('code block exclusion', () => {
308
+ it('should not detect keyword inside fenced code block', () => {
309
+ const text = '```\nautopilot\n```';
310
+ const result = detectKeywordsWithType(text);
311
+ expect(result.length).toBe(0);
312
+ });
313
+ it('should not detect keyword inside inline code', () => {
314
+ const text = 'Use `autopilot` command';
315
+ const result = detectKeywordsWithType(text);
316
+ expect(result.length).toBe(0);
317
+ });
318
+ it('should detect keyword outside code block but not inside', () => {
319
+ const text = 'autopilot ```autopilot``` end';
320
+ const result = detectKeywordsWithType(text);
321
+ const autopilotMatches = result.filter((r) => r.type === 'autopilot');
322
+ expect(autopilotMatches.length).toBeGreaterThan(0);
323
+ });
324
+ });
325
+ describe('edge cases', () => {
326
+ it('should handle empty input', () => {
327
+ const result = detectKeywordsWithType('');
328
+ expect(result.length).toBe(0);
329
+ });
330
+ it('should handle whitespace only input', () => {
331
+ const result = detectKeywordsWithType(' \n\t ');
332
+ expect(result.length).toBe(0);
333
+ });
334
+ it('should handle special characters', () => {
335
+ const result = detectKeywordsWithType('!@#$%^&*()');
336
+ expect(result.length).toBe(0);
337
+ });
338
+ it('should return position of detected keywords', () => {
339
+ const text = 'Please autopilot this';
340
+ const result = detectKeywordsWithType(text);
341
+ const autopilotMatch = result.find((r) => r.type === 'autopilot');
342
+ expect(autopilotMatch?.position).toBeGreaterThanOrEqual(0);
343
+ });
344
+ it('should detect multiple different keyword types', () => {
345
+ const text = 'autopilot and analyze this';
346
+ const result = detectKeywordsWithType(text);
347
+ const types = result.map((r) => r.type);
348
+ expect(types).toContain('autopilot');
349
+ expect(types).toContain('analyze');
350
+ });
351
+ });
352
+ });
353
+ describe('hasKeyword', () => {
354
+ it('should return true when keyword exists', () => {
355
+ expect(hasKeyword('autopilot this')).toBe(true);
356
+ });
357
+ it('should return true for ralph keyword', () => {
358
+ expect(hasKeyword('ralph the task')).toBe(true);
359
+ });
360
+ it('should return false when no keyword exists', () => {
361
+ expect(hasKeyword('regular text here')).toBe(false);
362
+ });
363
+ it('should return false for empty input', () => {
364
+ expect(hasKeyword('')).toBe(false);
365
+ });
366
+ it('should return false when keyword is inside code block', () => {
367
+ expect(hasKeyword('```autopilot```')).toBe(false);
368
+ });
369
+ it('should return true when keyword is outside code block', () => {
370
+ expect(hasKeyword('autopilot ```other code```')).toBe(true);
371
+ });
372
+ });
373
+ describe('getPrimaryKeyword', () => {
374
+ describe('priority order', () => {
375
+ it('should return ralph over autopilot', () => {
376
+ const result = getPrimaryKeyword('ralph and autopilot');
377
+ expect(result?.type).toBe('ralph');
378
+ });
379
+ it('should return autopilot over ultrawork', () => {
380
+ const result = getPrimaryKeyword('autopilot and ultrawork');
381
+ expect(result?.type).toBe('autopilot');
382
+ });
383
+ it('should return ultrawork over ultrathink', () => {
384
+ const result = getPrimaryKeyword('ultrawork and ultrathink');
385
+ expect(result?.type).toBe('ultrawork');
386
+ });
387
+ it('should return ultrathink over search', () => {
388
+ const result = getPrimaryKeyword('think and search');
389
+ expect(result?.type).toBe('ultrathink');
390
+ });
391
+ it('should return search over analyze', () => {
392
+ const result = getPrimaryKeyword('find and debug');
393
+ expect(result?.type).toBe('search');
394
+ });
395
+ it('should return analyze when it is the only keyword', () => {
396
+ const result = getPrimaryKeyword('analyze this code');
397
+ expect(result?.type).toBe('analyze');
398
+ });
399
+ });
400
+ it('should return null when no keyword found', () => {
401
+ const result = getPrimaryKeyword('regular text');
402
+ expect(result).toBeNull();
403
+ });
404
+ it('should return null for empty input', () => {
405
+ const result = getPrimaryKeyword('');
406
+ expect(result).toBeNull();
407
+ });
408
+ it('should return null when keyword is in code block', () => {
409
+ const result = getPrimaryKeyword('```autopilot```');
410
+ expect(result).toBeNull();
411
+ });
412
+ it('should return keyword with correct type and position', () => {
413
+ const result = getPrimaryKeyword('autopilot this task');
414
+ expect(result).not.toBeNull();
415
+ expect(result?.type).toBe('autopilot');
416
+ expect(result?.keyword).toBeDefined();
417
+ expect(result?.position).toBeGreaterThanOrEqual(0);
418
+ });
419
+ it('should handle complex text with multiple keywords', () => {
420
+ const text = 'Please ralph this and then autopilot the rest, think about it and analyze';
421
+ const result = getPrimaryKeyword(text);
422
+ // ralph has highest priority
423
+ expect(result?.type).toBe('ralph');
424
+ });
425
+ });
426
+ });
427
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/hooks/keyword-detector/__tests__/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Subagent Tracker Hook
3
+ *
4
+ * Tracks SubagentStart and SubagentStop events to maintain state of active agents.
5
+ * Useful for monitoring parallel execution in ultrapilot, swarm, and other multi-agent modes.
6
+ */
7
+ export interface SubagentInfo {
8
+ agent_id: string;
9
+ agent_type: string;
10
+ started_at: string;
11
+ parent_mode?: string;
12
+ task_description?: string;
13
+ file_ownership?: string[];
14
+ }
15
+ export interface CompletedSubagentInfo {
16
+ agent_id: string;
17
+ agent_type: string;
18
+ duration_ms: number;
19
+ success: boolean;
20
+ output_summary?: string;
21
+ }
22
+ export interface SubagentTrackingState {
23
+ active_agents: Record<string, SubagentInfo>;
24
+ completed_agents: Record<string, CompletedSubagentInfo>;
25
+ total_spawned: number;
26
+ total_completed: number;
27
+ }
28
+ export interface SubagentStartInput {
29
+ session_id: string;
30
+ transcript_path: string;
31
+ cwd: string;
32
+ hook_event_name: 'SubagentStart';
33
+ agent_id: string;
34
+ agent_type: string;
35
+ }
36
+ export interface SubagentStopInput {
37
+ session_id: string;
38
+ transcript_path: string;
39
+ cwd: string;
40
+ hook_event_name: 'SubagentStop';
41
+ stop_hook_active: boolean;
42
+ agent_id: string;
43
+ agent_transcript_path: string;
44
+ }
45
+ export interface HookOutput {
46
+ status: 'success' | 'error';
47
+ message?: string;
48
+ data?: unknown;
49
+ }
50
+ /**
51
+ * Get the path to the subagent tracking state file.
52
+ */
53
+ export declare function getStateFilePath(directory: string): string;
54
+ /**
55
+ * Read the current subagent tracking state.
56
+ */
57
+ export declare function readTrackingState(directory: string): SubagentTrackingState | null;
58
+ /**
59
+ * Write subagent tracking state to disk.
60
+ */
61
+ export declare function writeTrackingState(directory: string, state: SubagentTrackingState): void;
62
+ /**
63
+ * Process SubagentStart event - track new agent spawn.
64
+ */
65
+ export declare function processSubagentStart(input: SubagentStartInput): HookOutput;
66
+ /**
67
+ * Process SubagentStop event - mark agent as completed.
68
+ */
69
+ export declare function processSubagentStop(input: SubagentStopInput): HookOutput;
70
+ /**
71
+ * Remove agents that have been active for longer than maxAgeMs.
72
+ * Useful for cleaning up stale agents that may have crashed.
73
+ */
74
+ export declare function cleanupStaleAgents(directory: string, maxAgeMs?: number): void;
75
+ /**
76
+ * Get the count of currently active agents.
77
+ */
78
+ export declare function getActiveAgentCount(directory: string): number;
79
+ /**
80
+ * Get a count of agents by type (both active and completed).
81
+ */
82
+ export declare function getAgentsByType(directory: string): Record<string, number>;
83
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/subagent-tracker/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACxD,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,cAAc,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAcjF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,qBAAqB,GAC3B,IAAI,CAaN;AAwBD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,UAAU,CA4B1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,UAAU,CAgDxE;AAMD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAe,GACxB,IAAI,CAkCN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAQ7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBzE"}