oh-my-claude-sisyphus 3.6.3 → 3.7.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.
- package/README.md +40 -1
- package/commands/hud.md +37 -5
- package/commands/omc-setup.md +105 -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__/hud/analytics-display.test.js +137 -1
- package/dist/__tests__/hud/analytics-display.test.js.map +1 -1
- package/dist/__tests__/hud-windows.test.d.ts +2 -0
- package/dist/__tests__/hud-windows.test.d.ts.map +1 -0
- package/dist/__tests__/hud-windows.test.js +91 -0
- package/dist/__tests__/hud-windows.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 +585 -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/features/state-manager/index.d.ts.map +1 -1
- package/dist/features/state-manager/index.js +4 -1
- package/dist/features/state-manager/index.js.map +1 -1
- 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 +291 -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 +107 -0
- package/dist/hooks/permission-handler/index.js.map +1 -0
- package/dist/hooks/plugin-patterns/index.d.ts +5 -0
- package/dist/hooks/plugin-patterns/index.d.ts.map +1 -1
- package/dist/hooks/plugin-patterns/index.js +26 -1
- package/dist/hooks/plugin-patterns/index.js.map +1 -1
- 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 +42 -0
- package/dist/hooks/session-end/index.d.ts.map +1 -0
- package/dist/hooks/session-end/index.js +200 -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 +316 -131
- package/dist/hooks/subagent-tracker/index.js.map +1 -1
- package/dist/hud/analytics-display.d.ts +16 -0
- package/dist/hud/analytics-display.d.ts.map +1 -1
- package/dist/hud/analytics-display.js +35 -9
- package/dist/hud/analytics-display.js.map +1 -1
- package/dist/hud/render.d.ts.map +1 -1
- package/dist/hud/render.js +49 -18
- package/dist/hud/render.js.map +1 -1
- package/dist/hud/types.d.ts +2 -0
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/hud/types.js +14 -0
- package/dist/hud/types.js.map +1 -1
- package/dist/installer/index.d.ts +1 -1
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +4 -3
- package/dist/installer/index.js.map +1 -1
- package/hooks/hooks.json +83 -1
- package/hooks/keyword-detector.sh +4 -4
- package/hooks/persistent-mode.sh +10 -10
- package/hooks/session-start.sh +4 -4
- package/package.json +3 -1
- package/scripts/keyword-detector.mjs +4 -4
- package/scripts/permission-handler.mjs +23 -0
- package/scripts/persistent-mode.mjs +6 -6
- package/scripts/persistent-mode.sh +10 -10
- package/scripts/pre-compact.mjs +23 -0
- package/scripts/session-end.mjs +23 -0
- package/scripts/session-start.mjs +4 -4
- package/scripts/setup-init.mjs +23 -0
- package/scripts/setup-maintenance.mjs +23 -0
- package/scripts/subagent-tracker.mjs +35 -0
- package/skills/hud/SKILL.md +37 -5
- package/skills/omc-setup/SKILL.md +162 -4
- package/skills/writer-memory/SKILL.md +443 -0
- package/skills/writer-memory/lib/character-tracker.ts +338 -0
- package/skills/writer-memory/lib/memory-manager.ts +804 -0
- package/skills/writer-memory/lib/relationship-graph.ts +400 -0
- package/skills/writer-memory/lib/scene-organizer.ts +544 -0
- package/skills/writer-memory/lib/synopsis-builder.ts +339 -0
- package/skills/writer-memory/templates/synopsis-template.md +46 -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,392 @@
|
|
|
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
|
|
11
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
|
|
12
21
|
/**
|
|
13
|
-
*
|
|
22
|
+
* Synchronous sleep using Atomics.wait
|
|
23
|
+
* Avoids CPU-spinning busy-wait loops
|
|
24
|
+
*/
|
|
25
|
+
function syncSleep(ms) {
|
|
26
|
+
const buffer = new SharedArrayBuffer(4);
|
|
27
|
+
const view = new Int32Array(buffer);
|
|
28
|
+
Atomics.wait(view, 0, 0, ms);
|
|
29
|
+
}
|
|
30
|
+
// ============================================================================
|
|
31
|
+
// State Management
|
|
32
|
+
// ============================================================================
|
|
33
|
+
/**
|
|
34
|
+
* Acquire file lock with timeout and stale lock detection
|
|
35
|
+
*/
|
|
36
|
+
function acquireLock(directory) {
|
|
37
|
+
const lockPath = join(directory, '.omc', 'state', 'subagent-tracker.lock');
|
|
38
|
+
const lockDir = join(directory, '.omc', 'state');
|
|
39
|
+
if (!existsSync(lockDir)) {
|
|
40
|
+
mkdirSync(lockDir, { recursive: true });
|
|
41
|
+
}
|
|
42
|
+
const startTime = Date.now();
|
|
43
|
+
while (Date.now() - startTime < LOCK_TIMEOUT_MS) {
|
|
44
|
+
try {
|
|
45
|
+
// Check for stale lock (older than timeout)
|
|
46
|
+
if (existsSync(lockPath)) {
|
|
47
|
+
const lockContent = readFileSync(lockPath, 'utf-8');
|
|
48
|
+
const lockTime = parseInt(lockContent, 10);
|
|
49
|
+
if (Date.now() - lockTime > LOCK_TIMEOUT_MS) {
|
|
50
|
+
// Stale lock, remove it
|
|
51
|
+
try {
|
|
52
|
+
unlinkSync(lockPath);
|
|
53
|
+
}
|
|
54
|
+
catch { }
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Lock is held, wait and retry
|
|
58
|
+
syncSleep(LOCK_RETRY_MS);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Try to create lock atomically
|
|
63
|
+
writeFileSync(lockPath, String(Date.now()), { flag: 'wx' });
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
if (e.code === 'EEXIST') {
|
|
68
|
+
// Lock exists, retry
|
|
69
|
+
syncSleep(LOCK_RETRY_MS);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return false; // Timeout
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Release file lock
|
|
79
|
+
*/
|
|
80
|
+
function releaseLock(directory) {
|
|
81
|
+
const lockPath = join(directory, '.omc', 'state', 'subagent-tracker.lock');
|
|
82
|
+
try {
|
|
83
|
+
unlinkSync(lockPath);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Ignore errors
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get the state file path
|
|
14
91
|
*/
|
|
15
92
|
export function getStateFilePath(directory) {
|
|
16
|
-
|
|
93
|
+
const stateDir = join(directory, '.omc', 'state');
|
|
94
|
+
if (!existsSync(stateDir)) {
|
|
95
|
+
mkdirSync(stateDir, { recursive: true });
|
|
96
|
+
}
|
|
97
|
+
return join(stateDir, STATE_FILE);
|
|
17
98
|
}
|
|
18
99
|
/**
|
|
19
|
-
* Read
|
|
100
|
+
* Read tracking state from file
|
|
20
101
|
*/
|
|
21
102
|
export function readTrackingState(directory) {
|
|
22
|
-
const
|
|
23
|
-
if (!existsSync(
|
|
24
|
-
return
|
|
103
|
+
const statePath = getStateFilePath(directory);
|
|
104
|
+
if (!existsSync(statePath)) {
|
|
105
|
+
return {
|
|
106
|
+
agents: [],
|
|
107
|
+
total_spawned: 0,
|
|
108
|
+
total_completed: 0,
|
|
109
|
+
total_failed: 0,
|
|
110
|
+
last_updated: new Date().toISOString(),
|
|
111
|
+
};
|
|
25
112
|
}
|
|
26
113
|
try {
|
|
27
|
-
const content = readFileSync(
|
|
114
|
+
const content = readFileSync(statePath, 'utf-8');
|
|
28
115
|
return JSON.parse(content);
|
|
29
116
|
}
|
|
30
117
|
catch (error) {
|
|
31
|
-
console.error('[
|
|
32
|
-
return
|
|
118
|
+
console.error('[SubagentTracker] Error reading state:', error);
|
|
119
|
+
return {
|
|
120
|
+
agents: [],
|
|
121
|
+
total_spawned: 0,
|
|
122
|
+
total_completed: 0,
|
|
123
|
+
total_failed: 0,
|
|
124
|
+
last_updated: new Date().toISOString(),
|
|
125
|
+
};
|
|
33
126
|
}
|
|
34
127
|
}
|
|
35
128
|
/**
|
|
36
|
-
* Write
|
|
129
|
+
* Write tracking state to file
|
|
37
130
|
*/
|
|
38
131
|
export function writeTrackingState(directory, state) {
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
if (!existsSync(stateDir)) {
|
|
42
|
-
mkdirSync(stateDir, { recursive: true });
|
|
43
|
-
}
|
|
132
|
+
const statePath = getStateFilePath(directory);
|
|
133
|
+
state.last_updated = new Date().toISOString();
|
|
44
134
|
try {
|
|
45
|
-
writeFileSync(
|
|
135
|
+
writeFileSync(statePath, JSON.stringify(state, null, 2), 'utf-8');
|
|
46
136
|
}
|
|
47
137
|
catch (error) {
|
|
48
|
-
console.error('[
|
|
138
|
+
console.error('[SubagentTracker] Error writing state:', error);
|
|
49
139
|
}
|
|
50
140
|
}
|
|
141
|
+
// ============================================================================
|
|
142
|
+
// Helper Functions
|
|
143
|
+
// ============================================================================
|
|
51
144
|
/**
|
|
52
|
-
*
|
|
145
|
+
* Detect the current parent mode from state files
|
|
53
146
|
*/
|
|
54
|
-
function
|
|
55
|
-
const
|
|
56
|
-
if (
|
|
57
|
-
return
|
|
147
|
+
function detectParentMode(directory) {
|
|
148
|
+
const stateDir = join(directory, '.omc', 'state');
|
|
149
|
+
if (!existsSync(stateDir)) {
|
|
150
|
+
return 'none';
|
|
58
151
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
152
|
+
// Check in order of specificity
|
|
153
|
+
const modeFiles = [
|
|
154
|
+
{ file: 'ultrapilot-state.json', mode: 'ultrapilot' },
|
|
155
|
+
{ file: 'autopilot-state.json', mode: 'autopilot' },
|
|
156
|
+
{ file: 'swarm-state.json', mode: 'swarm' },
|
|
157
|
+
{ file: 'ultrawork-state.json', mode: 'ultrawork' },
|
|
158
|
+
{ file: 'ralph-state.json', mode: 'ralph' },
|
|
159
|
+
];
|
|
160
|
+
for (const { file, mode } of modeFiles) {
|
|
161
|
+
const filePath = join(stateDir, file);
|
|
162
|
+
if (existsSync(filePath)) {
|
|
163
|
+
try {
|
|
164
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
165
|
+
const state = JSON.parse(content);
|
|
166
|
+
if (state.active === true || state.status === 'running' || state.status === 'active') {
|
|
167
|
+
return mode;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return 'none';
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Get list of stale agents (running for too long)
|
|
179
|
+
*/
|
|
180
|
+
export function getStaleAgents(state) {
|
|
181
|
+
const now = Date.now();
|
|
182
|
+
return state.agents.filter((agent) => {
|
|
183
|
+
if (agent.status !== 'running') {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
const startTime = new Date(agent.started_at).getTime();
|
|
187
|
+
const elapsed = now - startTime;
|
|
188
|
+
return elapsed > STALE_THRESHOLD_MS;
|
|
189
|
+
});
|
|
65
190
|
}
|
|
66
191
|
// ============================================================================
|
|
67
|
-
// Hook
|
|
192
|
+
// Hook Processors
|
|
68
193
|
// ============================================================================
|
|
69
194
|
/**
|
|
70
|
-
* Process SubagentStart event
|
|
195
|
+
* Process SubagentStart event
|
|
71
196
|
*/
|
|
72
197
|
export function processSubagentStart(input) {
|
|
73
|
-
|
|
198
|
+
if (!acquireLock(input.cwd)) {
|
|
199
|
+
return { continue: true }; // Fail gracefully
|
|
200
|
+
}
|
|
74
201
|
try {
|
|
75
|
-
const state =
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
202
|
+
const state = readTrackingState(input.cwd);
|
|
203
|
+
const parentMode = detectParentMode(input.cwd);
|
|
204
|
+
// Create new agent entry
|
|
205
|
+
const agentInfo = {
|
|
206
|
+
agent_id: input.agent_id,
|
|
207
|
+
agent_type: input.agent_type,
|
|
80
208
|
started_at: new Date().toISOString(),
|
|
209
|
+
parent_mode: parentMode,
|
|
210
|
+
task_description: input.prompt?.substring(0, 200), // Truncate for storage
|
|
211
|
+
status: 'running',
|
|
81
212
|
};
|
|
213
|
+
// Add to state
|
|
214
|
+
state.agents.push(agentInfo);
|
|
82
215
|
state.total_spawned++;
|
|
83
|
-
|
|
216
|
+
// Write updated state
|
|
217
|
+
writeTrackingState(input.cwd, state);
|
|
218
|
+
// Check for stale agents
|
|
219
|
+
const staleAgents = getStaleAgents(state);
|
|
84
220
|
return {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
221
|
+
continue: true,
|
|
222
|
+
hookSpecificOutput: {
|
|
223
|
+
hookEventName: 'SubagentStart',
|
|
224
|
+
additionalContext: `Agent ${input.agent_type} started (${input.agent_id})`,
|
|
225
|
+
agent_count: state.agents.filter((a) => a.status === 'running').length,
|
|
226
|
+
stale_agents: staleAgents.map((a) => a.agent_id),
|
|
227
|
+
},
|
|
88
228
|
};
|
|
89
229
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
status: 'error',
|
|
93
|
-
message: `Failed to process SubagentStart: ${error}`,
|
|
94
|
-
};
|
|
230
|
+
finally {
|
|
231
|
+
releaseLock(input.cwd);
|
|
95
232
|
}
|
|
96
233
|
}
|
|
97
234
|
/**
|
|
98
|
-
* Process SubagentStop event
|
|
235
|
+
* Process SubagentStop event
|
|
99
236
|
*/
|
|
100
237
|
export function processSubagentStop(input) {
|
|
101
|
-
|
|
238
|
+
if (!acquireLock(input.cwd)) {
|
|
239
|
+
return { continue: true }; // Fail gracefully
|
|
240
|
+
}
|
|
102
241
|
try {
|
|
103
|
-
const state =
|
|
104
|
-
// Find the
|
|
105
|
-
const
|
|
106
|
-
if (
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
242
|
+
const state = readTrackingState(input.cwd);
|
|
243
|
+
// Find the agent
|
|
244
|
+
const agentIndex = state.agents.findIndex((a) => a.agent_id === input.agent_id);
|
|
245
|
+
if (agentIndex !== -1) {
|
|
246
|
+
const agent = state.agents[agentIndex];
|
|
247
|
+
// Update agent status
|
|
248
|
+
agent.status = input.success ? 'completed' : 'failed';
|
|
249
|
+
agent.completed_at = new Date().toISOString();
|
|
250
|
+
// Calculate duration
|
|
251
|
+
const startTime = new Date(agent.started_at).getTime();
|
|
252
|
+
const endTime = new Date(agent.completed_at).getTime();
|
|
253
|
+
agent.duration_ms = endTime - startTime;
|
|
254
|
+
// Store output summary (truncated)
|
|
255
|
+
if (input.output) {
|
|
256
|
+
agent.output_summary = input.output.substring(0, 500);
|
|
257
|
+
}
|
|
258
|
+
// Update counters
|
|
259
|
+
if (input.success) {
|
|
260
|
+
state.total_completed++;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
state.total_failed++;
|
|
264
|
+
}
|
|
111
265
|
}
|
|
112
|
-
//
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
//
|
|
125
|
-
|
|
126
|
-
state.
|
|
127
|
-
writeTrackingState(cwd, state);
|
|
266
|
+
// Evict oldest completed agents if over limit
|
|
267
|
+
const completedAgents = state.agents.filter(a => a.status === 'completed' || a.status === 'failed');
|
|
268
|
+
if (completedAgents.length > MAX_COMPLETED_AGENTS) {
|
|
269
|
+
// Sort by completed_at and keep only the most recent
|
|
270
|
+
completedAgents.sort((a, b) => {
|
|
271
|
+
const timeA = a.completed_at ? new Date(a.completed_at).getTime() : 0;
|
|
272
|
+
const timeB = b.completed_at ? new Date(b.completed_at).getTime() : 0;
|
|
273
|
+
return timeB - timeA; // Newest first
|
|
274
|
+
});
|
|
275
|
+
const toRemove = new Set(completedAgents.slice(MAX_COMPLETED_AGENTS).map(a => a.agent_id));
|
|
276
|
+
state.agents = state.agents.filter(a => !toRemove.has(a.agent_id));
|
|
277
|
+
}
|
|
278
|
+
// Write updated state
|
|
279
|
+
writeTrackingState(input.cwd, state);
|
|
280
|
+
const runningCount = state.agents.filter((a) => a.status === 'running').length;
|
|
128
281
|
return {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
282
|
+
continue: true,
|
|
283
|
+
hookSpecificOutput: {
|
|
284
|
+
hookEventName: 'SubagentStop',
|
|
285
|
+
additionalContext: `Agent ${input.agent_type} ${input.success ? 'completed' : 'failed'} (${input.agent_id})`,
|
|
286
|
+
agent_count: runningCount,
|
|
287
|
+
},
|
|
132
288
|
};
|
|
133
289
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
status: 'error',
|
|
137
|
-
message: `Failed to process SubagentStop: ${error}`,
|
|
138
|
-
};
|
|
290
|
+
finally {
|
|
291
|
+
releaseLock(input.cwd);
|
|
139
292
|
}
|
|
140
293
|
}
|
|
141
294
|
// ============================================================================
|
|
142
|
-
//
|
|
295
|
+
// Cleanup Functions
|
|
143
296
|
// ============================================================================
|
|
144
297
|
/**
|
|
145
|
-
*
|
|
146
|
-
* Useful for cleaning up stale agents that may have crashed.
|
|
298
|
+
* Cleanup stale agents (mark as failed)
|
|
147
299
|
*/
|
|
148
|
-
export function cleanupStaleAgents(directory
|
|
149
|
-
) {
|
|
150
|
-
|
|
151
|
-
if (!state) {
|
|
152
|
-
return;
|
|
300
|
+
export function cleanupStaleAgents(directory) {
|
|
301
|
+
if (!acquireLock(directory)) {
|
|
302
|
+
return 0; // Could not acquire lock
|
|
153
303
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
state.
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
delete state.active_agents[agent_id];
|
|
169
|
-
state.total_completed++;
|
|
170
|
-
cleaned++;
|
|
304
|
+
try {
|
|
305
|
+
const state = readTrackingState(directory);
|
|
306
|
+
const staleAgents = getStaleAgents(state);
|
|
307
|
+
if (staleAgents.length === 0) {
|
|
308
|
+
return 0;
|
|
309
|
+
}
|
|
310
|
+
for (const stale of staleAgents) {
|
|
311
|
+
const agentIndex = state.agents.findIndex((a) => a.agent_id === stale.agent_id);
|
|
312
|
+
if (agentIndex !== -1) {
|
|
313
|
+
state.agents[agentIndex].status = 'failed';
|
|
314
|
+
state.agents[agentIndex].completed_at = new Date().toISOString();
|
|
315
|
+
state.agents[agentIndex].output_summary = 'Marked as stale - exceeded timeout';
|
|
316
|
+
state.total_failed++;
|
|
317
|
+
}
|
|
171
318
|
}
|
|
172
|
-
}
|
|
173
|
-
if (cleaned > 0) {
|
|
174
319
|
writeTrackingState(directory, state);
|
|
175
|
-
|
|
320
|
+
return staleAgents.length;
|
|
321
|
+
}
|
|
322
|
+
finally {
|
|
323
|
+
releaseLock(directory);
|
|
176
324
|
}
|
|
177
325
|
}
|
|
326
|
+
// ============================================================================
|
|
327
|
+
// Query Functions
|
|
328
|
+
// ============================================================================
|
|
178
329
|
/**
|
|
179
|
-
* Get
|
|
330
|
+
* Get count of active (running) agents
|
|
180
331
|
*/
|
|
181
332
|
export function getActiveAgentCount(directory) {
|
|
182
333
|
const state = readTrackingState(directory);
|
|
183
|
-
|
|
184
|
-
return 0;
|
|
185
|
-
}
|
|
186
|
-
return Object.keys(state.active_agents).length;
|
|
334
|
+
return state.agents.filter((a) => a.status === 'running').length;
|
|
187
335
|
}
|
|
188
336
|
/**
|
|
189
|
-
* Get
|
|
337
|
+
* Get agents by type
|
|
190
338
|
*/
|
|
191
|
-
export function getAgentsByType(directory) {
|
|
339
|
+
export function getAgentsByType(directory, agentType) {
|
|
192
340
|
const state = readTrackingState(directory);
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
341
|
+
return state.agents.filter((a) => a.agent_type === agentType);
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Get all running agents
|
|
345
|
+
*/
|
|
346
|
+
export function getRunningAgents(directory) {
|
|
347
|
+
const state = readTrackingState(directory);
|
|
348
|
+
return state.agents.filter((a) => a.status === 'running');
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Get tracking stats
|
|
352
|
+
*/
|
|
353
|
+
export function getTrackingStats(directory) {
|
|
354
|
+
const state = readTrackingState(directory);
|
|
355
|
+
return {
|
|
356
|
+
running: state.agents.filter((a) => a.status === 'running').length,
|
|
357
|
+
completed: state.total_completed,
|
|
358
|
+
failed: state.total_failed,
|
|
359
|
+
total: state.total_spawned,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
// ============================================================================
|
|
363
|
+
// Main Entry Points
|
|
364
|
+
// ============================================================================
|
|
365
|
+
/**
|
|
366
|
+
* Handle SubagentStart hook
|
|
367
|
+
*/
|
|
368
|
+
export async function handleSubagentStart(input) {
|
|
369
|
+
return processSubagentStart(input);
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Handle SubagentStop hook
|
|
373
|
+
*/
|
|
374
|
+
export async function handleSubagentStop(input) {
|
|
375
|
+
return processSubagentStop(input);
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Clear all tracking state (for testing or cleanup)
|
|
379
|
+
*/
|
|
380
|
+
export function clearTrackingState(directory) {
|
|
381
|
+
const statePath = getStateFilePath(directory);
|
|
382
|
+
if (existsSync(statePath)) {
|
|
383
|
+
try {
|
|
384
|
+
const { unlinkSync } = require('fs');
|
|
385
|
+
unlinkSync(statePath);
|
|
386
|
+
}
|
|
387
|
+
catch (error) {
|
|
388
|
+
console.error('[SubagentTracker] Error clearing state:', error);
|
|
389
|
+
}
|
|
204
390
|
}
|
|
205
|
-
return counts;
|
|
206
391
|
}
|
|
207
392
|
//# 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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"}
|
|
@@ -12,6 +12,13 @@ export interface AnalyticsDisplay {
|
|
|
12
12
|
cacheEfficiency: string;
|
|
13
13
|
costColor: 'green' | 'yellow' | 'red';
|
|
14
14
|
}
|
|
15
|
+
export interface SessionHealthAnalyticsData {
|
|
16
|
+
costIndicator: string;
|
|
17
|
+
cost: string;
|
|
18
|
+
tokens: string;
|
|
19
|
+
cache: string;
|
|
20
|
+
costHour: string;
|
|
21
|
+
}
|
|
15
22
|
/**
|
|
16
23
|
* Get analytics display data for the current session.
|
|
17
24
|
* Safe to call even if analytics modules are not initialized.
|
|
@@ -25,12 +32,21 @@ export declare function getAnalyticsDisplay(): Promise<AnalyticsDisplay>;
|
|
|
25
32
|
* @deprecated Use renderSessionHealthAnalytics instead
|
|
26
33
|
*/
|
|
27
34
|
export declare function renderAnalyticsLine(analytics: AnalyticsDisplay): string;
|
|
35
|
+
/**
|
|
36
|
+
* Render analytics respecting showCost/showCache config flags.
|
|
37
|
+
*/
|
|
38
|
+
export declare function renderAnalyticsLineWithConfig(analytics: AnalyticsDisplay, showCost: boolean, showCache: boolean): string;
|
|
28
39
|
/**
|
|
29
40
|
* Get current session info for HUD display.
|
|
30
41
|
*/
|
|
31
42
|
export declare function getSessionInfo(): Promise<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Extract structured analytics data from SessionHealth
|
|
45
|
+
*/
|
|
46
|
+
export declare function getSessionHealthAnalyticsData(sessionHealth: SessionHealth): SessionHealthAnalyticsData;
|
|
32
47
|
/**
|
|
33
48
|
* Render analytics from SessionHealth (no longer calls TokenTracker directly)
|
|
49
|
+
* @deprecated Use getSessionHealthAnalyticsData() and compose in render.ts for config-aware rendering
|
|
34
50
|
*/
|
|
35
51
|
export declare function renderSessionHealthAnalytics(sessionHealth: SessionHealth): string;
|
|
36
52
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics-display.d.ts","sourceRoot":"","sources":["../../src/hud/analytics-display.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA2DrE;AAWD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAKvE;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAkBtD;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"analytics-display.d.ts","sourceRoot":"","sources":["../../src/hud/analytics-display.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA2DrE;AAWD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAKvE;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,gBAAgB,EAC3B,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,OAAO,GACjB,MAAM,CAkBR;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAkBtD;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,aAAa,GAAG,0BAA0B,CAWtG;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,CAKjF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,CAUxE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,CAQ1E"}
|