oh-my-claude-sisyphus 3.6.3 → 3.7.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.
- package/README.md +16 -0
- package/dist/__tests__/delegation-enforcement-levels.test.d.ts +9 -0
- package/dist/__tests__/delegation-enforcement-levels.test.d.ts.map +1 -0
- package/dist/__tests__/delegation-enforcement-levels.test.js +550 -0
- package/dist/__tests__/delegation-enforcement-levels.test.js.map +1 -0
- package/dist/__tests__/installer.test.js +1 -1
- package/dist/__tests__/rate-limit-wait/daemon.test.d.ts +5 -0
- package/dist/__tests__/rate-limit-wait/daemon.test.d.ts.map +1 -0
- package/dist/__tests__/rate-limit-wait/daemon.test.js +313 -0
- package/dist/__tests__/rate-limit-wait/daemon.test.js.map +1 -0
- package/dist/__tests__/rate-limit-wait/integration.test.d.ts +8 -0
- package/dist/__tests__/rate-limit-wait/integration.test.d.ts.map +1 -0
- package/dist/__tests__/rate-limit-wait/integration.test.js +329 -0
- package/dist/__tests__/rate-limit-wait/integration.test.js.map +1 -0
- package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.d.ts +5 -0
- package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.d.ts.map +1 -0
- package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js +167 -0
- package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js.map +1 -0
- package/dist/__tests__/rate-limit-wait/tmux-detector.test.d.ts +5 -0
- package/dist/__tests__/rate-limit-wait/tmux-detector.test.d.ts.map +1 -0
- package/dist/__tests__/rate-limit-wait/tmux-detector.test.js +295 -0
- package/dist/__tests__/rate-limit-wait/tmux-detector.test.js.map +1 -0
- package/dist/cli/commands/wait.d.ts +52 -0
- package/dist/cli/commands/wait.d.ts.map +1 -0
- package/dist/cli/commands/wait.js +229 -0
- package/dist/cli/commands/wait.js.map +1 -0
- package/dist/cli/index.js +54 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/features/rate-limit-wait/daemon.d.ts +52 -0
- package/dist/features/rate-limit-wait/daemon.d.ts.map +1 -0
- package/dist/features/rate-limit-wait/daemon.js +545 -0
- package/dist/features/rate-limit-wait/daemon.js.map +1 -0
- package/dist/features/rate-limit-wait/index.d.ts +16 -0
- package/dist/features/rate-limit-wait/index.d.ts.map +1 -0
- package/dist/features/rate-limit-wait/index.js +18 -0
- package/dist/features/rate-limit-wait/index.js.map +1 -0
- package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts +22 -0
- package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts.map +1 -0
- package/dist/features/rate-limit-wait/rate-limit-monitor.js +99 -0
- package/dist/features/rate-limit-wait/rate-limit-monitor.js.map +1 -0
- package/dist/features/rate-limit-wait/tmux-detector.d.ts +59 -0
- package/dist/features/rate-limit-wait/tmux-detector.d.ts.map +1 -0
- package/dist/features/rate-limit-wait/tmux-detector.js +304 -0
- package/dist/features/rate-limit-wait/tmux-detector.js.map +1 -0
- package/dist/features/rate-limit-wait/types.d.ts +121 -0
- package/dist/features/rate-limit-wait/types.d.ts.map +1 -0
- package/dist/features/rate-limit-wait/types.js +8 -0
- package/dist/features/rate-limit-wait/types.js.map +1 -0
- package/dist/hooks/bridge.d.ts +1 -1
- package/dist/hooks/bridge.d.ts.map +1 -1
- package/dist/hooks/bridge.js +50 -4
- package/dist/hooks/bridge.js.map +1 -1
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +15 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/omc-orchestrator/audit.d.ts +2 -1
- package/dist/hooks/omc-orchestrator/audit.d.ts.map +1 -1
- package/dist/hooks/omc-orchestrator/audit.js.map +1 -1
- package/dist/hooks/omc-orchestrator/index.d.ts +7 -0
- package/dist/hooks/omc-orchestrator/index.d.ts.map +1 -1
- package/dist/hooks/omc-orchestrator/index.js +95 -8
- package/dist/hooks/omc-orchestrator/index.js.map +1 -1
- package/dist/hooks/permission-handler/__tests__/index.test.d.ts +2 -0
- package/dist/hooks/permission-handler/__tests__/index.test.d.ts.map +1 -0
- package/dist/hooks/permission-handler/__tests__/index.test.js +244 -0
- package/dist/hooks/permission-handler/__tests__/index.test.js.map +1 -0
- package/dist/hooks/permission-handler/index.d.ts +42 -0
- package/dist/hooks/permission-handler/index.d.ts.map +1 -0
- package/dist/hooks/permission-handler/index.js +111 -0
- package/dist/hooks/permission-handler/index.js.map +1 -0
- package/dist/hooks/pre-compact/index.d.ts +82 -0
- package/dist/hooks/pre-compact/index.d.ts.map +1 -0
- package/dist/hooks/pre-compact/index.js +265 -0
- package/dist/hooks/pre-compact/index.js.map +1 -0
- package/dist/hooks/session-end/index.d.ts +50 -0
- package/dist/hooks/session-end/index.d.ts.map +1 -0
- package/dist/hooks/session-end/index.js +207 -0
- package/dist/hooks/session-end/index.js.map +1 -0
- package/dist/hooks/setup/index.d.ts +66 -0
- package/dist/hooks/setup/index.d.ts.map +1 -0
- package/dist/hooks/setup/index.js +299 -0
- package/dist/hooks/setup/index.js.map +1 -0
- package/dist/hooks/setup/types.d.ts +25 -0
- package/dist/hooks/setup/types.d.ts.map +1 -0
- package/dist/hooks/setup/types.js +5 -0
- package/dist/hooks/setup/types.js.map +1 -0
- package/dist/hooks/subagent-tracker/index.d.ts +68 -29
- package/dist/hooks/subagent-tracker/index.d.ts.map +1 -1
- package/dist/hooks/subagent-tracker/index.js +301 -131
- package/dist/hooks/subagent-tracker/index.js.map +1 -1
- package/dist/installer/index.d.ts +1 -1
- package/dist/installer/index.js +1 -1
- package/hooks/hooks.json +83 -1
- package/package.json +3 -1
- package/scripts/permission-handler.mjs +23 -0
- package/scripts/pre-compact.mjs +23 -0
- package/scripts/session-end.mjs +23 -0
- package/scripts/setup-init.mjs +23 -0
- package/scripts/setup-maintenance.mjs +23 -0
- package/scripts/subagent-tracker.mjs +35 -0
- package/templates/hooks/keyword-detector.mjs +198 -0
- package/templates/hooks/keyword-detector.sh +102 -0
- package/templates/hooks/persistent-mode.mjs +249 -0
- package/templates/hooks/persistent-mode.sh +187 -0
- package/templates/hooks/post-tool-use.mjs +133 -0
- package/templates/hooks/post-tool-use.sh +90 -0
- package/templates/hooks/pre-tool-use.mjs +145 -0
- package/templates/hooks/pre-tool-use.sh +113 -0
- package/templates/hooks/session-start.mjs +100 -0
- package/templates/hooks/session-start.sh +62 -0
- package/templates/hooks/stop-continuation.mjs +80 -0
- package/templates/hooks/stop-continuation.sh +40 -0
- package/templates/rules/README.md +40 -0
- package/templates/rules/coding-style.md +74 -0
- package/templates/rules/git-workflow.md +41 -0
- package/templates/rules/performance.md +40 -0
- package/templates/rules/security.md +41 -0
- package/templates/rules/testing.md +42 -0
|
@@ -1,207 +1,377 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Subagent Tracker Hook
|
|
2
|
+
* Subagent Tracker Hook Module
|
|
3
3
|
*
|
|
4
|
-
* Tracks SubagentStart and SubagentStop events
|
|
5
|
-
*
|
|
4
|
+
* Tracks SubagentStart and SubagentStop events for comprehensive agent monitoring.
|
|
5
|
+
* Features:
|
|
6
|
+
* - Track all spawned agents with parent mode context
|
|
7
|
+
* - Detect stuck/stale agents (>5 min without progress)
|
|
8
|
+
* - HUD integration for agent status display
|
|
9
|
+
* - Automatic cleanup of orphaned agent state
|
|
6
10
|
*/
|
|
7
|
-
import { existsSync,
|
|
11
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, unlinkSync } from 'fs';
|
|
8
12
|
import { join } from 'path';
|
|
9
13
|
// ============================================================================
|
|
10
|
-
//
|
|
14
|
+
// Constants
|
|
15
|
+
// ============================================================================
|
|
16
|
+
const STATE_FILE = 'subagent-tracking.json';
|
|
17
|
+
const STALE_THRESHOLD_MS = 5 * 60 * 1000; // 5 minutes
|
|
18
|
+
const MAX_COMPLETED_AGENTS = 100;
|
|
19
|
+
const LOCK_TIMEOUT_MS = 5000; // 5 second lock timeout
|
|
20
|
+
const LOCK_RETRY_MS = 50; // Retry every 50ms
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// State Management
|
|
11
23
|
// ============================================================================
|
|
12
24
|
/**
|
|
13
|
-
*
|
|
25
|
+
* Acquire file lock with timeout and stale lock detection
|
|
26
|
+
*/
|
|
27
|
+
function acquireLock(directory) {
|
|
28
|
+
const lockPath = join(directory, '.omc', 'state', 'subagent-tracker.lock');
|
|
29
|
+
const lockDir = join(directory, '.omc', 'state');
|
|
30
|
+
if (!existsSync(lockDir)) {
|
|
31
|
+
mkdirSync(lockDir, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
const startTime = Date.now();
|
|
34
|
+
while (Date.now() - startTime < LOCK_TIMEOUT_MS) {
|
|
35
|
+
try {
|
|
36
|
+
// Check for stale lock (older than timeout)
|
|
37
|
+
if (existsSync(lockPath)) {
|
|
38
|
+
const lockContent = readFileSync(lockPath, 'utf-8');
|
|
39
|
+
const lockTime = parseInt(lockContent, 10);
|
|
40
|
+
if (Date.now() - lockTime > LOCK_TIMEOUT_MS) {
|
|
41
|
+
// Stale lock, remove it
|
|
42
|
+
try {
|
|
43
|
+
unlinkSync(lockPath);
|
|
44
|
+
}
|
|
45
|
+
catch { }
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// Lock is held, wait and retry
|
|
49
|
+
const waitUntil = Date.now() + LOCK_RETRY_MS;
|
|
50
|
+
while (Date.now() < waitUntil) { } // Busy wait (sync context)
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Try to create lock atomically
|
|
55
|
+
writeFileSync(lockPath, String(Date.now()), { flag: 'wx' });
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
if (e.code === 'EEXIST') {
|
|
60
|
+
// Lock exists, retry
|
|
61
|
+
const waitUntil = Date.now() + LOCK_RETRY_MS;
|
|
62
|
+
while (Date.now() < waitUntil) { }
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return false; // Timeout
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Release file lock
|
|
72
|
+
*/
|
|
73
|
+
function releaseLock(directory) {
|
|
74
|
+
const lockPath = join(directory, '.omc', 'state', 'subagent-tracker.lock');
|
|
75
|
+
try {
|
|
76
|
+
unlinkSync(lockPath);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Ignore errors
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get the state file path
|
|
14
84
|
*/
|
|
15
85
|
export function getStateFilePath(directory) {
|
|
16
|
-
|
|
86
|
+
const stateDir = join(directory, '.omc', 'state');
|
|
87
|
+
if (!existsSync(stateDir)) {
|
|
88
|
+
mkdirSync(stateDir, { recursive: true });
|
|
89
|
+
}
|
|
90
|
+
return join(stateDir, STATE_FILE);
|
|
17
91
|
}
|
|
18
92
|
/**
|
|
19
|
-
* Read
|
|
93
|
+
* Read tracking state from file
|
|
20
94
|
*/
|
|
21
95
|
export function readTrackingState(directory) {
|
|
22
|
-
const
|
|
23
|
-
if (!existsSync(
|
|
24
|
-
return
|
|
96
|
+
const statePath = getStateFilePath(directory);
|
|
97
|
+
if (!existsSync(statePath)) {
|
|
98
|
+
return {
|
|
99
|
+
agents: [],
|
|
100
|
+
total_spawned: 0,
|
|
101
|
+
total_completed: 0,
|
|
102
|
+
total_failed: 0,
|
|
103
|
+
last_updated: new Date().toISOString(),
|
|
104
|
+
};
|
|
25
105
|
}
|
|
26
106
|
try {
|
|
27
|
-
const content = readFileSync(
|
|
107
|
+
const content = readFileSync(statePath, 'utf-8');
|
|
28
108
|
return JSON.parse(content);
|
|
29
109
|
}
|
|
30
110
|
catch (error) {
|
|
31
|
-
console.error('[
|
|
32
|
-
return
|
|
111
|
+
console.error('[SubagentTracker] Error reading state:', error);
|
|
112
|
+
return {
|
|
113
|
+
agents: [],
|
|
114
|
+
total_spawned: 0,
|
|
115
|
+
total_completed: 0,
|
|
116
|
+
total_failed: 0,
|
|
117
|
+
last_updated: new Date().toISOString(),
|
|
118
|
+
};
|
|
33
119
|
}
|
|
34
120
|
}
|
|
35
121
|
/**
|
|
36
|
-
* Write
|
|
122
|
+
* Write tracking state to file
|
|
37
123
|
*/
|
|
38
124
|
export function writeTrackingState(directory, state) {
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
if (!existsSync(stateDir)) {
|
|
42
|
-
mkdirSync(stateDir, { recursive: true });
|
|
43
|
-
}
|
|
125
|
+
const statePath = getStateFilePath(directory);
|
|
126
|
+
state.last_updated = new Date().toISOString();
|
|
44
127
|
try {
|
|
45
|
-
writeFileSync(
|
|
128
|
+
writeFileSync(statePath, JSON.stringify(state, null, 2), 'utf-8');
|
|
46
129
|
}
|
|
47
130
|
catch (error) {
|
|
48
|
-
console.error('[
|
|
131
|
+
console.error('[SubagentTracker] Error writing state:', error);
|
|
49
132
|
}
|
|
50
133
|
}
|
|
134
|
+
// ============================================================================
|
|
135
|
+
// Helper Functions
|
|
136
|
+
// ============================================================================
|
|
51
137
|
/**
|
|
52
|
-
*
|
|
138
|
+
* Detect the current parent mode from state files
|
|
53
139
|
*/
|
|
54
|
-
function
|
|
55
|
-
const
|
|
56
|
-
if (
|
|
57
|
-
return
|
|
140
|
+
function detectParentMode(directory) {
|
|
141
|
+
const stateDir = join(directory, '.omc', 'state');
|
|
142
|
+
if (!existsSync(stateDir)) {
|
|
143
|
+
return 'none';
|
|
58
144
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
145
|
+
// Check in order of specificity
|
|
146
|
+
const modeFiles = [
|
|
147
|
+
{ file: 'ultrapilot-state.json', mode: 'ultrapilot' },
|
|
148
|
+
{ file: 'autopilot-state.json', mode: 'autopilot' },
|
|
149
|
+
{ file: 'swarm-state.json', mode: 'swarm' },
|
|
150
|
+
{ file: 'ultrawork-state.json', mode: 'ultrawork' },
|
|
151
|
+
{ file: 'ralph-state.json', mode: 'ralph' },
|
|
152
|
+
];
|
|
153
|
+
for (const { file, mode } of modeFiles) {
|
|
154
|
+
const filePath = join(stateDir, file);
|
|
155
|
+
if (existsSync(filePath)) {
|
|
156
|
+
try {
|
|
157
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
158
|
+
const state = JSON.parse(content);
|
|
159
|
+
if (state.active === true || state.status === 'running' || state.status === 'active') {
|
|
160
|
+
return mode;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return 'none';
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get list of stale agents (running for too long)
|
|
172
|
+
*/
|
|
173
|
+
export function getStaleAgents(state) {
|
|
174
|
+
const now = Date.now();
|
|
175
|
+
return state.agents.filter((agent) => {
|
|
176
|
+
if (agent.status !== 'running') {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
const startTime = new Date(agent.started_at).getTime();
|
|
180
|
+
const elapsed = now - startTime;
|
|
181
|
+
return elapsed > STALE_THRESHOLD_MS;
|
|
182
|
+
});
|
|
65
183
|
}
|
|
66
184
|
// ============================================================================
|
|
67
|
-
// Hook
|
|
185
|
+
// Hook Processors
|
|
68
186
|
// ============================================================================
|
|
69
187
|
/**
|
|
70
|
-
* Process SubagentStart event
|
|
188
|
+
* Process SubagentStart event
|
|
71
189
|
*/
|
|
72
190
|
export function processSubagentStart(input) {
|
|
73
|
-
|
|
191
|
+
if (!acquireLock(input.cwd)) {
|
|
192
|
+
return { continue: true }; // Fail gracefully
|
|
193
|
+
}
|
|
74
194
|
try {
|
|
75
|
-
const state =
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
195
|
+
const state = readTrackingState(input.cwd);
|
|
196
|
+
const parentMode = detectParentMode(input.cwd);
|
|
197
|
+
// Create new agent entry
|
|
198
|
+
const agentInfo = {
|
|
199
|
+
agent_id: input.agent_id,
|
|
200
|
+
agent_type: input.agent_type,
|
|
80
201
|
started_at: new Date().toISOString(),
|
|
202
|
+
parent_mode: parentMode,
|
|
203
|
+
task_description: input.prompt?.substring(0, 200), // Truncate for storage
|
|
204
|
+
status: 'running',
|
|
81
205
|
};
|
|
206
|
+
// Add to state
|
|
207
|
+
state.agents.push(agentInfo);
|
|
82
208
|
state.total_spawned++;
|
|
83
|
-
|
|
209
|
+
// Write updated state
|
|
210
|
+
writeTrackingState(input.cwd, state);
|
|
211
|
+
// Check for stale agents
|
|
212
|
+
const staleAgents = getStaleAgents(state);
|
|
84
213
|
return {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
214
|
+
continue: true,
|
|
215
|
+
hookSpecificOutput: {
|
|
216
|
+
hookEventName: 'SubagentStart',
|
|
217
|
+
additionalContext: `Agent ${input.agent_type} started (${input.agent_id})`,
|
|
218
|
+
agent_count: state.agents.filter((a) => a.status === 'running').length,
|
|
219
|
+
stale_agents: staleAgents.map((a) => a.agent_id),
|
|
220
|
+
},
|
|
88
221
|
};
|
|
89
222
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
status: 'error',
|
|
93
|
-
message: `Failed to process SubagentStart: ${error}`,
|
|
94
|
-
};
|
|
223
|
+
finally {
|
|
224
|
+
releaseLock(input.cwd);
|
|
95
225
|
}
|
|
96
226
|
}
|
|
97
227
|
/**
|
|
98
|
-
* Process SubagentStop event
|
|
228
|
+
* Process SubagentStop event
|
|
99
229
|
*/
|
|
100
230
|
export function processSubagentStop(input) {
|
|
101
|
-
|
|
231
|
+
if (!acquireLock(input.cwd)) {
|
|
232
|
+
return { continue: true }; // Fail gracefully
|
|
233
|
+
}
|
|
102
234
|
try {
|
|
103
|
-
const state =
|
|
104
|
-
// Find the
|
|
105
|
-
const
|
|
106
|
-
if (
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
235
|
+
const state = readTrackingState(input.cwd);
|
|
236
|
+
// Find the agent
|
|
237
|
+
const agentIndex = state.agents.findIndex((a) => a.agent_id === input.agent_id);
|
|
238
|
+
if (agentIndex !== -1) {
|
|
239
|
+
const agent = state.agents[agentIndex];
|
|
240
|
+
// Update agent status
|
|
241
|
+
agent.status = input.success ? 'completed' : 'failed';
|
|
242
|
+
agent.completed_at = new Date().toISOString();
|
|
243
|
+
// Calculate duration
|
|
244
|
+
const startTime = new Date(agent.started_at).getTime();
|
|
245
|
+
const endTime = new Date(agent.completed_at).getTime();
|
|
246
|
+
agent.duration_ms = endTime - startTime;
|
|
247
|
+
// Store output summary (truncated)
|
|
248
|
+
if (input.output) {
|
|
249
|
+
agent.output_summary = input.output.substring(0, 500);
|
|
250
|
+
}
|
|
251
|
+
// Update counters
|
|
252
|
+
if (input.success) {
|
|
253
|
+
state.total_completed++;
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
state.total_failed++;
|
|
257
|
+
}
|
|
111
258
|
}
|
|
112
|
-
//
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
//
|
|
125
|
-
|
|
126
|
-
state.
|
|
127
|
-
writeTrackingState(cwd, state);
|
|
259
|
+
// Evict oldest completed agents if over limit
|
|
260
|
+
const completedAgents = state.agents.filter(a => a.status === 'completed' || a.status === 'failed');
|
|
261
|
+
if (completedAgents.length > MAX_COMPLETED_AGENTS) {
|
|
262
|
+
// Sort by completed_at and keep only the most recent
|
|
263
|
+
completedAgents.sort((a, b) => {
|
|
264
|
+
const timeA = a.completed_at ? new Date(a.completed_at).getTime() : 0;
|
|
265
|
+
const timeB = b.completed_at ? new Date(b.completed_at).getTime() : 0;
|
|
266
|
+
return timeB - timeA; // Newest first
|
|
267
|
+
});
|
|
268
|
+
const toRemove = new Set(completedAgents.slice(MAX_COMPLETED_AGENTS).map(a => a.agent_id));
|
|
269
|
+
state.agents = state.agents.filter(a => !toRemove.has(a.agent_id));
|
|
270
|
+
}
|
|
271
|
+
// Write updated state
|
|
272
|
+
writeTrackingState(input.cwd, state);
|
|
273
|
+
const runningCount = state.agents.filter((a) => a.status === 'running').length;
|
|
128
274
|
return {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
275
|
+
continue: true,
|
|
276
|
+
hookSpecificOutput: {
|
|
277
|
+
hookEventName: 'SubagentStop',
|
|
278
|
+
additionalContext: `Agent ${input.agent_type} ${input.success ? 'completed' : 'failed'} (${input.agent_id})`,
|
|
279
|
+
agent_count: runningCount,
|
|
280
|
+
},
|
|
132
281
|
};
|
|
133
282
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
status: 'error',
|
|
137
|
-
message: `Failed to process SubagentStop: ${error}`,
|
|
138
|
-
};
|
|
283
|
+
finally {
|
|
284
|
+
releaseLock(input.cwd);
|
|
139
285
|
}
|
|
140
286
|
}
|
|
141
287
|
// ============================================================================
|
|
142
|
-
//
|
|
288
|
+
// Cleanup Functions
|
|
143
289
|
// ============================================================================
|
|
144
290
|
/**
|
|
145
|
-
*
|
|
146
|
-
* Useful for cleaning up stale agents that may have crashed.
|
|
291
|
+
* Cleanup stale agents (mark as failed)
|
|
147
292
|
*/
|
|
148
|
-
export function cleanupStaleAgents(directory
|
|
149
|
-
) {
|
|
293
|
+
export function cleanupStaleAgents(directory) {
|
|
150
294
|
const state = readTrackingState(directory);
|
|
151
|
-
|
|
152
|
-
|
|
295
|
+
const staleAgents = getStaleAgents(state);
|
|
296
|
+
if (staleAgents.length === 0) {
|
|
297
|
+
return 0;
|
|
153
298
|
}
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
state.completed_agents[agent_id] = {
|
|
162
|
-
agent_id,
|
|
163
|
-
agent_type: info.agent_type,
|
|
164
|
-
duration_ms: age,
|
|
165
|
-
success: false,
|
|
166
|
-
output_summary: 'Cleaned up as stale',
|
|
167
|
-
};
|
|
168
|
-
delete state.active_agents[agent_id];
|
|
169
|
-
state.total_completed++;
|
|
170
|
-
cleaned++;
|
|
299
|
+
for (const stale of staleAgents) {
|
|
300
|
+
const agentIndex = state.agents.findIndex((a) => a.agent_id === stale.agent_id);
|
|
301
|
+
if (agentIndex !== -1) {
|
|
302
|
+
state.agents[agentIndex].status = 'failed';
|
|
303
|
+
state.agents[agentIndex].completed_at = new Date().toISOString();
|
|
304
|
+
state.agents[agentIndex].output_summary = 'Marked as stale - exceeded timeout';
|
|
305
|
+
state.total_failed++;
|
|
171
306
|
}
|
|
172
307
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
console.log(`[subagent-tracker] Cleaned up ${cleaned} stale agent(s)`);
|
|
176
|
-
}
|
|
308
|
+
writeTrackingState(directory, state);
|
|
309
|
+
return staleAgents.length;
|
|
177
310
|
}
|
|
311
|
+
// ============================================================================
|
|
312
|
+
// Query Functions
|
|
313
|
+
// ============================================================================
|
|
178
314
|
/**
|
|
179
|
-
* Get
|
|
315
|
+
* Get count of active (running) agents
|
|
180
316
|
*/
|
|
181
317
|
export function getActiveAgentCount(directory) {
|
|
182
318
|
const state = readTrackingState(directory);
|
|
183
|
-
|
|
184
|
-
return 0;
|
|
185
|
-
}
|
|
186
|
-
return Object.keys(state.active_agents).length;
|
|
319
|
+
return state.agents.filter((a) => a.status === 'running').length;
|
|
187
320
|
}
|
|
188
321
|
/**
|
|
189
|
-
* Get
|
|
322
|
+
* Get agents by type
|
|
190
323
|
*/
|
|
191
|
-
export function getAgentsByType(directory) {
|
|
324
|
+
export function getAgentsByType(directory, agentType) {
|
|
192
325
|
const state = readTrackingState(directory);
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
326
|
+
return state.agents.filter((a) => a.agent_type === agentType);
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Get all running agents
|
|
330
|
+
*/
|
|
331
|
+
export function getRunningAgents(directory) {
|
|
332
|
+
const state = readTrackingState(directory);
|
|
333
|
+
return state.agents.filter((a) => a.status === 'running');
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Get tracking stats
|
|
337
|
+
*/
|
|
338
|
+
export function getTrackingStats(directory) {
|
|
339
|
+
const state = readTrackingState(directory);
|
|
340
|
+
return {
|
|
341
|
+
running: state.agents.filter((a) => a.status === 'running').length,
|
|
342
|
+
completed: state.total_completed,
|
|
343
|
+
failed: state.total_failed,
|
|
344
|
+
total: state.total_spawned,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
// ============================================================================
|
|
348
|
+
// Main Entry Points
|
|
349
|
+
// ============================================================================
|
|
350
|
+
/**
|
|
351
|
+
* Handle SubagentStart hook
|
|
352
|
+
*/
|
|
353
|
+
export async function handleSubagentStart(input) {
|
|
354
|
+
return processSubagentStart(input);
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Handle SubagentStop hook
|
|
358
|
+
*/
|
|
359
|
+
export async function handleSubagentStop(input) {
|
|
360
|
+
return processSubagentStop(input);
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Clear all tracking state (for testing or cleanup)
|
|
364
|
+
*/
|
|
365
|
+
export function clearTrackingState(directory) {
|
|
366
|
+
const statePath = getStateFilePath(directory);
|
|
367
|
+
if (existsSync(statePath)) {
|
|
368
|
+
try {
|
|
369
|
+
const { unlinkSync } = require('fs');
|
|
370
|
+
unlinkSync(statePath);
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
console.error('[SubagentTracker] Error clearing state:', error);
|
|
374
|
+
}
|
|
204
375
|
}
|
|
205
|
-
return counts;
|
|
206
376
|
}
|
|
207
377
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/subagent-tracker/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/subagent-tracker/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ export declare const VERSION_FILE: string;
|
|
|
31
31
|
*/
|
|
32
32
|
export declare const CORE_COMMANDS: string[];
|
|
33
33
|
/** Current version */
|
|
34
|
-
export declare const VERSION = "3.
|
|
34
|
+
export declare const VERSION = "3.7.0";
|
|
35
35
|
/** Installation result */
|
|
36
36
|
export interface InstallResult {
|
|
37
37
|
success: boolean;
|
package/dist/installer/index.js
CHANGED
|
@@ -37,7 +37,7 @@ export const VERSION_FILE = join(CLAUDE_CONFIG_DIR, '.omc-version.json');
|
|
|
37
37
|
*/
|
|
38
38
|
export const CORE_COMMANDS = [];
|
|
39
39
|
/** Current version */
|
|
40
|
-
export const VERSION = '3.
|
|
40
|
+
export const VERSION = '3.7.0';
|
|
41
41
|
/**
|
|
42
42
|
* Check if the current Node.js version meets the minimum requirement
|
|
43
43
|
*/
|