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
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PreCompact Hook - State Preservation Before Context Compaction
|
|
3
|
+
*
|
|
4
|
+
* Creates checkpoints before compaction to preserve critical state including:
|
|
5
|
+
* - Active mode states (autopilot, ralph, ultrawork, swarm)
|
|
6
|
+
* - TODO summary
|
|
7
|
+
* - Wisdom from notepads
|
|
8
|
+
*
|
|
9
|
+
* This ensures no critical information is lost during context window compaction.
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, statSync } from 'fs';
|
|
12
|
+
import { join } from 'path';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Constants
|
|
15
|
+
// ============================================================================
|
|
16
|
+
const CHECKPOINT_DIR = 'checkpoints';
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Helper Functions
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Get the checkpoint directory path
|
|
22
|
+
*/
|
|
23
|
+
export function getCheckpointPath(directory) {
|
|
24
|
+
const checkpointDir = join(directory, '.omc', 'state', CHECKPOINT_DIR);
|
|
25
|
+
if (!existsSync(checkpointDir)) {
|
|
26
|
+
mkdirSync(checkpointDir, { recursive: true });
|
|
27
|
+
}
|
|
28
|
+
return checkpointDir;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Export wisdom from notepads to checkpoint
|
|
32
|
+
*/
|
|
33
|
+
export async function exportWisdomToNotepad(directory) {
|
|
34
|
+
const notepadsDir = join(directory, '.omc', 'notepads');
|
|
35
|
+
if (!existsSync(notepadsDir)) {
|
|
36
|
+
return { wisdom: '', exported: false };
|
|
37
|
+
}
|
|
38
|
+
const wisdomParts = [];
|
|
39
|
+
let hasWisdom = false;
|
|
40
|
+
try {
|
|
41
|
+
// Read all plan directories
|
|
42
|
+
const planDirs = readdirSync(notepadsDir).filter(name => {
|
|
43
|
+
const path = join(notepadsDir, name);
|
|
44
|
+
return statSync(path).isDirectory();
|
|
45
|
+
});
|
|
46
|
+
for (const planDir of planDirs) {
|
|
47
|
+
const planPath = join(notepadsDir, planDir);
|
|
48
|
+
const wisdomFiles = ['learnings.md', 'decisions.md', 'issues.md', 'problems.md'];
|
|
49
|
+
for (const wisdomFile of wisdomFiles) {
|
|
50
|
+
const wisdomPath = join(planPath, wisdomFile);
|
|
51
|
+
if (existsSync(wisdomPath)) {
|
|
52
|
+
const content = readFileSync(wisdomPath, 'utf-8').trim();
|
|
53
|
+
if (content) {
|
|
54
|
+
wisdomParts.push(`### ${planDir}/${wisdomFile}\n${content}`);
|
|
55
|
+
hasWisdom = true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.error('[PreCompact] Error reading wisdom files:', error);
|
|
63
|
+
}
|
|
64
|
+
const wisdom = wisdomParts.length > 0
|
|
65
|
+
? `## Plan Wisdom\n\n${wisdomParts.join('\n\n')}`
|
|
66
|
+
: '';
|
|
67
|
+
return { wisdom, exported: hasWisdom };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Save summary of active modes
|
|
71
|
+
*/
|
|
72
|
+
export function saveModeSummary(directory) {
|
|
73
|
+
const stateDir = join(directory, '.omc', 'state');
|
|
74
|
+
const modes = {};
|
|
75
|
+
// Check autopilot
|
|
76
|
+
const autopilotPath = join(stateDir, 'autopilot-state.json');
|
|
77
|
+
if (existsSync(autopilotPath)) {
|
|
78
|
+
try {
|
|
79
|
+
const autopilotState = JSON.parse(readFileSync(autopilotPath, 'utf-8'));
|
|
80
|
+
if (autopilotState.active) {
|
|
81
|
+
modes.autopilot = {
|
|
82
|
+
phase: autopilotState.phase || 'unknown',
|
|
83
|
+
originalIdea: autopilotState.originalIdea || ''
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
console.error('[PreCompact] Error reading autopilot state:', error);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Check ralph
|
|
92
|
+
const ralphPath = join(stateDir, 'ralph-state.json');
|
|
93
|
+
if (existsSync(ralphPath)) {
|
|
94
|
+
try {
|
|
95
|
+
const ralphState = JSON.parse(readFileSync(ralphPath, 'utf-8'));
|
|
96
|
+
if (ralphState.active) {
|
|
97
|
+
modes.ralph = {
|
|
98
|
+
iteration: ralphState.iteration || 0,
|
|
99
|
+
prompt: ralphState.originalPrompt || ralphState.prompt || ''
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.error('[PreCompact] Error reading ralph state:', error);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Check ultrawork
|
|
108
|
+
const ultraworkPath = join(stateDir, 'ultrawork-state.json');
|
|
109
|
+
if (existsSync(ultraworkPath)) {
|
|
110
|
+
try {
|
|
111
|
+
const ultraworkState = JSON.parse(readFileSync(ultraworkPath, 'utf-8'));
|
|
112
|
+
if (ultraworkState.active) {
|
|
113
|
+
modes.ultrawork = {
|
|
114
|
+
original_prompt: ultraworkState.original_prompt || ultraworkState.prompt || ''
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
console.error('[PreCompact] Error reading ultrawork state:', error);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Check swarm (SQLite database)
|
|
123
|
+
const swarmPath = join(stateDir, 'swarm.db');
|
|
124
|
+
if (existsSync(swarmPath)) {
|
|
125
|
+
try {
|
|
126
|
+
const stats = statSync(swarmPath);
|
|
127
|
+
if (stats.size > 0) {
|
|
128
|
+
modes.swarm = {
|
|
129
|
+
session_id: 'active',
|
|
130
|
+
task_count: 0 // Can't read SQLite without a library
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
console.error('[PreCompact] Error checking swarm state:', error);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return modes;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Create a compact checkpoint
|
|
142
|
+
*/
|
|
143
|
+
export function createCompactCheckpoint(directory, trigger) {
|
|
144
|
+
const activeModes = saveModeSummary(directory);
|
|
145
|
+
// TODO summary - basic implementation
|
|
146
|
+
// In a real implementation, this would read from TodoWrite state
|
|
147
|
+
const todoSummary = {
|
|
148
|
+
pending: 0,
|
|
149
|
+
in_progress: 0,
|
|
150
|
+
completed: 0
|
|
151
|
+
};
|
|
152
|
+
return {
|
|
153
|
+
created_at: new Date().toISOString(),
|
|
154
|
+
trigger,
|
|
155
|
+
active_modes: activeModes,
|
|
156
|
+
todo_summary: todoSummary,
|
|
157
|
+
wisdom_exported: false
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Format checkpoint summary for context injection
|
|
162
|
+
*/
|
|
163
|
+
export function formatCompactSummary(checkpoint) {
|
|
164
|
+
const lines = [
|
|
165
|
+
'# PreCompact Checkpoint',
|
|
166
|
+
'',
|
|
167
|
+
`Created: ${checkpoint.created_at}`,
|
|
168
|
+
`Trigger: ${checkpoint.trigger}`,
|
|
169
|
+
''
|
|
170
|
+
];
|
|
171
|
+
// Active modes
|
|
172
|
+
const modeCount = Object.keys(checkpoint.active_modes).length;
|
|
173
|
+
if (modeCount > 0) {
|
|
174
|
+
lines.push('## Active Modes');
|
|
175
|
+
lines.push('');
|
|
176
|
+
if (checkpoint.active_modes.autopilot) {
|
|
177
|
+
const ap = checkpoint.active_modes.autopilot;
|
|
178
|
+
lines.push(`- **Autopilot** (Phase: ${ap.phase})`);
|
|
179
|
+
lines.push(` Original Idea: ${ap.originalIdea}`);
|
|
180
|
+
}
|
|
181
|
+
if (checkpoint.active_modes.ralph) {
|
|
182
|
+
const ralph = checkpoint.active_modes.ralph;
|
|
183
|
+
lines.push(`- **Ralph** (Iteration: ${ralph.iteration})`);
|
|
184
|
+
lines.push(` Prompt: ${ralph.prompt}`);
|
|
185
|
+
}
|
|
186
|
+
if (checkpoint.active_modes.ultrawork) {
|
|
187
|
+
const uw = checkpoint.active_modes.ultrawork;
|
|
188
|
+
lines.push(`- **Ultrawork**`);
|
|
189
|
+
lines.push(` Prompt: ${uw.original_prompt}`);
|
|
190
|
+
}
|
|
191
|
+
if (checkpoint.active_modes.swarm) {
|
|
192
|
+
const swarm = checkpoint.active_modes.swarm;
|
|
193
|
+
lines.push(`- **Swarm** (Session: ${swarm.session_id}, Tasks: ${swarm.task_count})`);
|
|
194
|
+
}
|
|
195
|
+
lines.push('');
|
|
196
|
+
}
|
|
197
|
+
// TODO summary
|
|
198
|
+
const total = checkpoint.todo_summary.pending +
|
|
199
|
+
checkpoint.todo_summary.in_progress +
|
|
200
|
+
checkpoint.todo_summary.completed;
|
|
201
|
+
if (total > 0) {
|
|
202
|
+
lines.push('## TODO Summary');
|
|
203
|
+
lines.push('');
|
|
204
|
+
lines.push(`- Pending: ${checkpoint.todo_summary.pending}`);
|
|
205
|
+
lines.push(`- In Progress: ${checkpoint.todo_summary.in_progress}`);
|
|
206
|
+
lines.push(`- Completed: ${checkpoint.todo_summary.completed}`);
|
|
207
|
+
lines.push('');
|
|
208
|
+
}
|
|
209
|
+
// Wisdom status
|
|
210
|
+
if (checkpoint.wisdom_exported) {
|
|
211
|
+
lines.push('## Wisdom');
|
|
212
|
+
lines.push('');
|
|
213
|
+
lines.push('Plan wisdom has been preserved in checkpoint.');
|
|
214
|
+
lines.push('');
|
|
215
|
+
}
|
|
216
|
+
lines.push('---');
|
|
217
|
+
lines.push('**Note:** This checkpoint preserves critical state before compaction.');
|
|
218
|
+
lines.push('Review active modes to ensure continuity after compaction.');
|
|
219
|
+
return lines.join('\n');
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Main handler for PreCompact hook
|
|
223
|
+
*/
|
|
224
|
+
export async function processPreCompact(input) {
|
|
225
|
+
const directory = input.cwd;
|
|
226
|
+
// Create checkpoint
|
|
227
|
+
const checkpoint = createCompactCheckpoint(directory, input.trigger);
|
|
228
|
+
// Export wisdom
|
|
229
|
+
const { wisdom, exported } = await exportWisdomToNotepad(directory);
|
|
230
|
+
checkpoint.wisdom_exported = exported;
|
|
231
|
+
// Save checkpoint
|
|
232
|
+
const checkpointPath = getCheckpointPath(directory);
|
|
233
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
234
|
+
const checkpointFile = join(checkpointPath, `checkpoint-${timestamp}.json`);
|
|
235
|
+
try {
|
|
236
|
+
writeFileSync(checkpointFile, JSON.stringify(checkpoint, null, 2), 'utf-8');
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
console.error('[PreCompact] Error saving checkpoint:', error);
|
|
240
|
+
}
|
|
241
|
+
// Save wisdom separately if exported
|
|
242
|
+
if (exported && wisdom) {
|
|
243
|
+
const wisdomFile = join(checkpointPath, `wisdom-${timestamp}.md`);
|
|
244
|
+
try {
|
|
245
|
+
writeFileSync(wisdomFile, wisdom, 'utf-8');
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
console.error('[PreCompact] Error saving wisdom:', error);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// Format summary for context injection
|
|
252
|
+
const summary = formatCompactSummary(checkpoint);
|
|
253
|
+
return {
|
|
254
|
+
continue: true,
|
|
255
|
+
hookSpecificOutput: {
|
|
256
|
+
hookEventName: 'PreCompact',
|
|
257
|
+
additionalContext: summary
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
// ============================================================================
|
|
262
|
+
// Exports
|
|
263
|
+
// ============================================================================
|
|
264
|
+
export default processPreCompact;
|
|
265
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/pre-compact/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export interface SessionEndInput {
|
|
2
|
+
session_id: string;
|
|
3
|
+
transcript_path: string;
|
|
4
|
+
cwd: string;
|
|
5
|
+
permission_mode: string;
|
|
6
|
+
hook_event_name: 'SessionEnd';
|
|
7
|
+
reason: 'clear' | 'logout' | 'prompt_input_exit' | 'other';
|
|
8
|
+
}
|
|
9
|
+
export interface SessionMetrics {
|
|
10
|
+
session_id: string;
|
|
11
|
+
started_at?: string;
|
|
12
|
+
ended_at: string;
|
|
13
|
+
reason: string;
|
|
14
|
+
duration_ms?: number;
|
|
15
|
+
agents_spawned: number;
|
|
16
|
+
agents_completed: number;
|
|
17
|
+
modes_used: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface HookOutput {
|
|
20
|
+
continue: boolean;
|
|
21
|
+
hookSpecificOutput?: {
|
|
22
|
+
hookEventName: string;
|
|
23
|
+
metrics?: SessionMetrics;
|
|
24
|
+
cleanup_summary?: {
|
|
25
|
+
files_removed: number;
|
|
26
|
+
state_cleared: boolean;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Record session metrics
|
|
32
|
+
*/
|
|
33
|
+
export declare function recordSessionMetrics(directory: string, input: SessionEndInput): SessionMetrics;
|
|
34
|
+
/**
|
|
35
|
+
* Clean up transient state files
|
|
36
|
+
*/
|
|
37
|
+
export declare function cleanupTransientState(directory: string): number;
|
|
38
|
+
/**
|
|
39
|
+
* Export session summary to .omc/sessions/
|
|
40
|
+
*/
|
|
41
|
+
export declare function exportSessionSummary(directory: string, metrics: SessionMetrics): void;
|
|
42
|
+
/**
|
|
43
|
+
* Process session end
|
|
44
|
+
*/
|
|
45
|
+
export declare function processSessionEnd(input: SessionEndInput): HookOutput;
|
|
46
|
+
/**
|
|
47
|
+
* Main hook entry point
|
|
48
|
+
*/
|
|
49
|
+
export declare function handleSessionEnd(input: SessionEndInput): Promise<HookOutput>;
|
|
50
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/session-end/index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,YAAY,CAAC;IAC9B,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,mBAAmB,GAAG,OAAO,CAAC;CAC5D;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,cAAc,CAAC;QACzB,eAAe,CAAC,EAAE;YAChB,aAAa,EAAE,MAAM,CAAC;YACtB,aAAa,EAAE,OAAO,CAAC;SACxB,CAAC;KACH,CAAC;CACH;AAqFD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,cAAc,CA4B9F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAgE/D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAgBrF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAiBpE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAElF"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* Read agent tracking to get spawn/completion counts
|
|
5
|
+
*/
|
|
6
|
+
function getAgentCounts(directory) {
|
|
7
|
+
const trackingPath = path.join(directory, '.omc', 'state', 'subagent-tracking.json');
|
|
8
|
+
if (!fs.existsSync(trackingPath)) {
|
|
9
|
+
return { spawned: 0, completed: 0 };
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
const content = fs.readFileSync(trackingPath, 'utf-8');
|
|
13
|
+
const tracking = JSON.parse(content);
|
|
14
|
+
const spawned = tracking.agents?.length || 0;
|
|
15
|
+
const completed = tracking.agents?.filter((a) => a.status === 'completed').length || 0;
|
|
16
|
+
return { spawned, completed };
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
return { spawned: 0, completed: 0 };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Detect which modes were used during the session
|
|
24
|
+
*/
|
|
25
|
+
function getModesUsed(directory) {
|
|
26
|
+
const stateDir = path.join(directory, '.omc', 'state');
|
|
27
|
+
const modes = [];
|
|
28
|
+
if (!fs.existsSync(stateDir)) {
|
|
29
|
+
return modes;
|
|
30
|
+
}
|
|
31
|
+
const modeStateFiles = [
|
|
32
|
+
{ file: 'autopilot-state.json', mode: 'autopilot' },
|
|
33
|
+
{ file: 'ultrapilot-state.json', mode: 'ultrapilot' },
|
|
34
|
+
{ file: 'ralph-state.json', mode: 'ralph' },
|
|
35
|
+
{ file: 'ultrawork-state.json', mode: 'ultrawork' },
|
|
36
|
+
{ file: 'ecomode-state.json', mode: 'ecomode' },
|
|
37
|
+
{ file: 'swarm-state.json', mode: 'swarm' },
|
|
38
|
+
{ file: 'pipeline-state.json', mode: 'pipeline' },
|
|
39
|
+
];
|
|
40
|
+
for (const { file, mode } of modeStateFiles) {
|
|
41
|
+
const statePath = path.join(stateDir, file);
|
|
42
|
+
if (fs.existsSync(statePath)) {
|
|
43
|
+
modes.push(mode);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return modes;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get session start time from state files
|
|
50
|
+
*/
|
|
51
|
+
function getSessionStartTime(directory) {
|
|
52
|
+
const stateDir = path.join(directory, '.omc', 'state');
|
|
53
|
+
if (!fs.existsSync(stateDir)) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
const stateFiles = fs.readdirSync(stateDir).filter(f => f.endsWith('.json'));
|
|
57
|
+
for (const file of stateFiles) {
|
|
58
|
+
try {
|
|
59
|
+
const statePath = path.join(stateDir, file);
|
|
60
|
+
const content = fs.readFileSync(statePath, 'utf-8');
|
|
61
|
+
const state = JSON.parse(content);
|
|
62
|
+
if (state.started_at) {
|
|
63
|
+
return state.started_at;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Record session metrics
|
|
74
|
+
*/
|
|
75
|
+
export function recordSessionMetrics(directory, input) {
|
|
76
|
+
const endedAt = new Date().toISOString();
|
|
77
|
+
const startedAt = getSessionStartTime(directory);
|
|
78
|
+
const { spawned, completed } = getAgentCounts(directory);
|
|
79
|
+
const modesUsed = getModesUsed(directory);
|
|
80
|
+
const metrics = {
|
|
81
|
+
session_id: input.session_id,
|
|
82
|
+
started_at: startedAt,
|
|
83
|
+
ended_at: endedAt,
|
|
84
|
+
reason: input.reason,
|
|
85
|
+
agents_spawned: spawned,
|
|
86
|
+
agents_completed: completed,
|
|
87
|
+
modes_used: modesUsed,
|
|
88
|
+
};
|
|
89
|
+
// Calculate duration if start time is available
|
|
90
|
+
if (startedAt) {
|
|
91
|
+
try {
|
|
92
|
+
const startTime = new Date(startedAt).getTime();
|
|
93
|
+
const endTime = new Date(endedAt).getTime();
|
|
94
|
+
metrics.duration_ms = endTime - startTime;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
// Invalid date, skip duration
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return metrics;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Clean up transient state files
|
|
104
|
+
*/
|
|
105
|
+
export function cleanupTransientState(directory) {
|
|
106
|
+
let filesRemoved = 0;
|
|
107
|
+
const omcDir = path.join(directory, '.omc');
|
|
108
|
+
if (!fs.existsSync(omcDir)) {
|
|
109
|
+
return filesRemoved;
|
|
110
|
+
}
|
|
111
|
+
// Remove transient agent tracking
|
|
112
|
+
const trackingPath = path.join(omcDir, 'state', 'subagent-tracking.json');
|
|
113
|
+
if (fs.existsSync(trackingPath)) {
|
|
114
|
+
try {
|
|
115
|
+
fs.unlinkSync(trackingPath);
|
|
116
|
+
filesRemoved++;
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
// Ignore removal errors
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Clean stale checkpoints (older than 24 hours)
|
|
123
|
+
const checkpointsDir = path.join(omcDir, 'checkpoints');
|
|
124
|
+
if (fs.existsSync(checkpointsDir)) {
|
|
125
|
+
const now = Date.now();
|
|
126
|
+
const oneDayAgo = now - 24 * 60 * 60 * 1000;
|
|
127
|
+
try {
|
|
128
|
+
const files = fs.readdirSync(checkpointsDir);
|
|
129
|
+
for (const file of files) {
|
|
130
|
+
const filePath = path.join(checkpointsDir, file);
|
|
131
|
+
const stats = fs.statSync(filePath);
|
|
132
|
+
if (stats.mtimeMs < oneDayAgo) {
|
|
133
|
+
fs.unlinkSync(filePath);
|
|
134
|
+
filesRemoved++;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
// Ignore cleanup errors
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Remove .tmp files in .omc/
|
|
143
|
+
const removeTmpFiles = (dir) => {
|
|
144
|
+
try {
|
|
145
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
146
|
+
for (const entry of entries) {
|
|
147
|
+
const fullPath = path.join(dir, entry.name);
|
|
148
|
+
if (entry.isDirectory()) {
|
|
149
|
+
removeTmpFiles(fullPath);
|
|
150
|
+
}
|
|
151
|
+
else if (entry.name.endsWith('.tmp')) {
|
|
152
|
+
fs.unlinkSync(fullPath);
|
|
153
|
+
filesRemoved++;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
// Ignore errors
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
removeTmpFiles(omcDir);
|
|
162
|
+
return filesRemoved;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Export session summary to .omc/sessions/
|
|
166
|
+
*/
|
|
167
|
+
export function exportSessionSummary(directory, metrics) {
|
|
168
|
+
const sessionsDir = path.join(directory, '.omc', 'sessions');
|
|
169
|
+
// Create sessions directory if it doesn't exist
|
|
170
|
+
if (!fs.existsSync(sessionsDir)) {
|
|
171
|
+
fs.mkdirSync(sessionsDir, { recursive: true });
|
|
172
|
+
}
|
|
173
|
+
// Write session summary
|
|
174
|
+
const sessionFile = path.join(sessionsDir, `${metrics.session_id}.json`);
|
|
175
|
+
try {
|
|
176
|
+
fs.writeFileSync(sessionFile, JSON.stringify(metrics, null, 2), 'utf-8');
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
// Ignore write errors
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Process session end
|
|
184
|
+
*/
|
|
185
|
+
export function processSessionEnd(input) {
|
|
186
|
+
const metrics = recordSessionMetrics(input.cwd, input);
|
|
187
|
+
const filesRemoved = cleanupTransientState(input.cwd);
|
|
188
|
+
exportSessionSummary(input.cwd, metrics);
|
|
189
|
+
return {
|
|
190
|
+
continue: true,
|
|
191
|
+
hookSpecificOutput: {
|
|
192
|
+
hookEventName: 'SessionEnd',
|
|
193
|
+
metrics,
|
|
194
|
+
cleanup_summary: {
|
|
195
|
+
files_removed: filesRemoved,
|
|
196
|
+
state_cleared: true,
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Main hook entry point
|
|
203
|
+
*/
|
|
204
|
+
export async function handleSessionEnd(input) {
|
|
205
|
+
return processSessionEnd(input);
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/session-end/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Setup Hook Module
|
|
3
|
+
*
|
|
4
|
+
* Handles OMC initialization and maintenance tasks.
|
|
5
|
+
* Triggers:
|
|
6
|
+
* - init: Create directory structure, validate configs, set environment
|
|
7
|
+
* - maintenance: Prune old state files, cleanup orphaned state, vacuum SQLite
|
|
8
|
+
*/
|
|
9
|
+
export interface SetupInput {
|
|
10
|
+
session_id: string;
|
|
11
|
+
transcript_path: string;
|
|
12
|
+
cwd: string;
|
|
13
|
+
permission_mode: string;
|
|
14
|
+
hook_event_name: 'Setup';
|
|
15
|
+
trigger: 'init' | 'maintenance';
|
|
16
|
+
}
|
|
17
|
+
export interface SetupResult {
|
|
18
|
+
directories_created: string[];
|
|
19
|
+
configs_validated: string[];
|
|
20
|
+
errors: string[];
|
|
21
|
+
env_vars_set: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface HookOutput {
|
|
24
|
+
continue: boolean;
|
|
25
|
+
hookSpecificOutput: {
|
|
26
|
+
hookEventName: 'Setup';
|
|
27
|
+
additionalContext: string;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Ensure all required directories exist
|
|
32
|
+
*/
|
|
33
|
+
export declare function ensureDirectoryStructure(directory: string): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Validate that config files exist and are readable
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateConfigFiles(directory: string): string[];
|
|
38
|
+
/**
|
|
39
|
+
* Set environment variables for OMC initialization
|
|
40
|
+
*/
|
|
41
|
+
export declare function setEnvironmentVariables(): string[];
|
|
42
|
+
/**
|
|
43
|
+
* Process setup init trigger
|
|
44
|
+
*/
|
|
45
|
+
export declare function processSetupInit(input: SetupInput): Promise<HookOutput>;
|
|
46
|
+
/**
|
|
47
|
+
* Prune old state files from .omc/state directory
|
|
48
|
+
*/
|
|
49
|
+
export declare function pruneOldStateFiles(directory: string, maxAgeDays?: number): number;
|
|
50
|
+
/**
|
|
51
|
+
* Clean up orphaned state files (state files without corresponding active sessions)
|
|
52
|
+
*/
|
|
53
|
+
export declare function cleanupOrphanedState(directory: string): number;
|
|
54
|
+
/**
|
|
55
|
+
* Run VACUUM on swarm SQLite database if it exists
|
|
56
|
+
*/
|
|
57
|
+
export declare function vacuumSwarmDb(directory: string): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Process setup maintenance trigger
|
|
60
|
+
*/
|
|
61
|
+
export declare function processSetupMaintenance(input: SetupInput): Promise<HookOutput>;
|
|
62
|
+
/**
|
|
63
|
+
* Process setup hook based on trigger type
|
|
64
|
+
*/
|
|
65
|
+
export declare function processSetup(input: SetupInput): Promise<HookOutput>;
|
|
66
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/setup/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EAAE;QAClB,aAAa,EAAE,OAAO,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAwBD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAiB/D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAgBlD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAsC7E;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,MAAmC,GAAG,MAAM,CAgD7G;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAsC9D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAsBxD;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CA6CpF;AAMD;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAczE"}
|