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
|
@@ -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"}
|
|
@@ -0,0 +1,299 @@
|
|
|
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
|
+
import { existsSync, mkdirSync, readdirSync, statSync, unlinkSync, readFileSync } from 'fs';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
import { execSync } from 'child_process';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Constants
|
|
14
|
+
// ============================================================================
|
|
15
|
+
const REQUIRED_DIRECTORIES = [
|
|
16
|
+
'.omc/state',
|
|
17
|
+
'.omc/logs',
|
|
18
|
+
'.omc/notepads',
|
|
19
|
+
'.omc/state/checkpoints',
|
|
20
|
+
'.omc/plans',
|
|
21
|
+
];
|
|
22
|
+
const CONFIG_FILES = [
|
|
23
|
+
'.omc-config.json',
|
|
24
|
+
];
|
|
25
|
+
const DEFAULT_STATE_MAX_AGE_DAYS = 7;
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// Init Functions
|
|
28
|
+
// ============================================================================
|
|
29
|
+
/**
|
|
30
|
+
* Ensure all required directories exist
|
|
31
|
+
*/
|
|
32
|
+
export function ensureDirectoryStructure(directory) {
|
|
33
|
+
const created = [];
|
|
34
|
+
for (const dir of REQUIRED_DIRECTORIES) {
|
|
35
|
+
const fullPath = join(directory, dir);
|
|
36
|
+
if (!existsSync(fullPath)) {
|
|
37
|
+
try {
|
|
38
|
+
mkdirSync(fullPath, { recursive: true });
|
|
39
|
+
created.push(fullPath);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
// Will be reported in errors
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return created;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Validate that config files exist and are readable
|
|
50
|
+
*/
|
|
51
|
+
export function validateConfigFiles(directory) {
|
|
52
|
+
const validated = [];
|
|
53
|
+
for (const configFile of CONFIG_FILES) {
|
|
54
|
+
const fullPath = join(directory, configFile);
|
|
55
|
+
if (existsSync(fullPath)) {
|
|
56
|
+
try {
|
|
57
|
+
// Try to read to ensure it's valid
|
|
58
|
+
readFileSync(fullPath, 'utf-8');
|
|
59
|
+
validated.push(fullPath);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Silently skip if unreadable
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return validated;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Set environment variables for OMC initialization
|
|
70
|
+
*/
|
|
71
|
+
export function setEnvironmentVariables() {
|
|
72
|
+
const envVars = [];
|
|
73
|
+
// Check if CLAUDE_ENV_FILE is available
|
|
74
|
+
if (process.env.CLAUDE_ENV_FILE) {
|
|
75
|
+
try {
|
|
76
|
+
const envContent = `export OMC_INITIALIZED=true\n`;
|
|
77
|
+
const { appendFileSync } = require('fs');
|
|
78
|
+
appendFileSync(process.env.CLAUDE_ENV_FILE, envContent);
|
|
79
|
+
envVars.push('OMC_INITIALIZED');
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// Silently fail if can't write
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return envVars;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Process setup init trigger
|
|
89
|
+
*/
|
|
90
|
+
export async function processSetupInit(input) {
|
|
91
|
+
const result = {
|
|
92
|
+
directories_created: [],
|
|
93
|
+
configs_validated: [],
|
|
94
|
+
errors: [],
|
|
95
|
+
env_vars_set: [],
|
|
96
|
+
};
|
|
97
|
+
try {
|
|
98
|
+
// Create directory structure
|
|
99
|
+
result.directories_created = ensureDirectoryStructure(input.cwd);
|
|
100
|
+
// Validate config files
|
|
101
|
+
result.configs_validated = validateConfigFiles(input.cwd);
|
|
102
|
+
// Set environment variables
|
|
103
|
+
result.env_vars_set = setEnvironmentVariables();
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
result.errors.push(err instanceof Error ? err.message : String(err));
|
|
107
|
+
}
|
|
108
|
+
const context = [
|
|
109
|
+
`OMC initialized:`,
|
|
110
|
+
`- ${result.directories_created.length} directories created`,
|
|
111
|
+
`- ${result.configs_validated.length} configs validated`,
|
|
112
|
+
result.env_vars_set.length > 0 ? `- Environment variables set: ${result.env_vars_set.join(', ')}` : null,
|
|
113
|
+
result.errors.length > 0 ? `- Errors: ${result.errors.length}` : null,
|
|
114
|
+
]
|
|
115
|
+
.filter(Boolean)
|
|
116
|
+
.join('\n');
|
|
117
|
+
return {
|
|
118
|
+
continue: true,
|
|
119
|
+
hookSpecificOutput: {
|
|
120
|
+
hookEventName: 'Setup',
|
|
121
|
+
additionalContext: context,
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
// ============================================================================
|
|
126
|
+
// Maintenance Functions
|
|
127
|
+
// ============================================================================
|
|
128
|
+
/**
|
|
129
|
+
* Prune old state files from .omc/state directory
|
|
130
|
+
*/
|
|
131
|
+
export function pruneOldStateFiles(directory, maxAgeDays = DEFAULT_STATE_MAX_AGE_DAYS) {
|
|
132
|
+
const stateDir = join(directory, '.omc/state');
|
|
133
|
+
if (!existsSync(stateDir)) {
|
|
134
|
+
return 0;
|
|
135
|
+
}
|
|
136
|
+
const cutoffTime = Date.now() - maxAgeDays * 24 * 60 * 60 * 1000;
|
|
137
|
+
let deletedCount = 0;
|
|
138
|
+
try {
|
|
139
|
+
const files = readdirSync(stateDir);
|
|
140
|
+
for (const file of files) {
|
|
141
|
+
const filePath = join(stateDir, file);
|
|
142
|
+
try {
|
|
143
|
+
const stats = statSync(filePath);
|
|
144
|
+
// Skip directories
|
|
145
|
+
if (stats.isDirectory()) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
// Check file age
|
|
149
|
+
if (stats.mtimeMs < cutoffTime) {
|
|
150
|
+
// Skip certain critical state files
|
|
151
|
+
if (file === 'autopilot-state.json' ||
|
|
152
|
+
file === 'ultrapilot-state.json' ||
|
|
153
|
+
file === 'ralph-state.json' ||
|
|
154
|
+
file === 'ultrawork-state.json' ||
|
|
155
|
+
file === 'swarm-state.json') {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
unlinkSync(filePath);
|
|
159
|
+
deletedCount++;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
// Skip files we can't read/delete
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// Directory doesn't exist or can't be read
|
|
169
|
+
}
|
|
170
|
+
return deletedCount;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Clean up orphaned state files (state files without corresponding active sessions)
|
|
174
|
+
*/
|
|
175
|
+
export function cleanupOrphanedState(directory) {
|
|
176
|
+
const stateDir = join(directory, '.omc/state');
|
|
177
|
+
if (!existsSync(stateDir)) {
|
|
178
|
+
return 0;
|
|
179
|
+
}
|
|
180
|
+
let cleanedCount = 0;
|
|
181
|
+
try {
|
|
182
|
+
const files = readdirSync(stateDir);
|
|
183
|
+
// Look for session-specific state files (pattern: *-session-*.json)
|
|
184
|
+
const sessionFilePattern = /-session-[a-f0-9-]+\.json$/;
|
|
185
|
+
for (const file of files) {
|
|
186
|
+
if (sessionFilePattern.test(file)) {
|
|
187
|
+
const filePath = join(stateDir, file);
|
|
188
|
+
try {
|
|
189
|
+
// Check if file is older than 24 hours (likely orphaned)
|
|
190
|
+
const stats = statSync(filePath);
|
|
191
|
+
const fileAge = Date.now() - stats.mtimeMs;
|
|
192
|
+
const oneDayMs = 24 * 60 * 60 * 1000;
|
|
193
|
+
if (fileAge > oneDayMs) {
|
|
194
|
+
unlinkSync(filePath);
|
|
195
|
+
cleanedCount++;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
// Skip files we can't access
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
// Directory doesn't exist or can't be read
|
|
206
|
+
}
|
|
207
|
+
return cleanedCount;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Run VACUUM on swarm SQLite database if it exists
|
|
211
|
+
*/
|
|
212
|
+
export function vacuumSwarmDb(directory) {
|
|
213
|
+
const swarmDbPath = join(directory, '.omc/state/swarm.db');
|
|
214
|
+
if (!existsSync(swarmDbPath)) {
|
|
215
|
+
return false; // Database doesn't exist
|
|
216
|
+
}
|
|
217
|
+
try {
|
|
218
|
+
// Check if sqlite3 is available
|
|
219
|
+
execSync('which sqlite3', { stdio: 'pipe' });
|
|
220
|
+
// Run VACUUM
|
|
221
|
+
execSync(`sqlite3 "${swarmDbPath}" "VACUUM;"`, {
|
|
222
|
+
stdio: 'pipe',
|
|
223
|
+
timeout: 5000, // 5 second timeout
|
|
224
|
+
});
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
// sqlite3 not available or vacuum failed
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Process setup maintenance trigger
|
|
234
|
+
*/
|
|
235
|
+
export async function processSetupMaintenance(input) {
|
|
236
|
+
const result = {
|
|
237
|
+
directories_created: [],
|
|
238
|
+
configs_validated: [],
|
|
239
|
+
errors: [],
|
|
240
|
+
env_vars_set: [],
|
|
241
|
+
};
|
|
242
|
+
let prunedFiles = 0;
|
|
243
|
+
let orphanedCleaned = 0;
|
|
244
|
+
let dbVacuumed = false;
|
|
245
|
+
try {
|
|
246
|
+
// Prune old state files
|
|
247
|
+
prunedFiles = pruneOldStateFiles(input.cwd, DEFAULT_STATE_MAX_AGE_DAYS);
|
|
248
|
+
// Cleanup orphaned state
|
|
249
|
+
orphanedCleaned = cleanupOrphanedState(input.cwd);
|
|
250
|
+
// Vacuum swarm database
|
|
251
|
+
dbVacuumed = vacuumSwarmDb(input.cwd);
|
|
252
|
+
}
|
|
253
|
+
catch (err) {
|
|
254
|
+
result.errors.push(err instanceof Error ? err.message : String(err));
|
|
255
|
+
}
|
|
256
|
+
const context = [
|
|
257
|
+
`OMC maintenance completed:`,
|
|
258
|
+
prunedFiles > 0 ? `- ${prunedFiles} old state files pruned` : null,
|
|
259
|
+
orphanedCleaned > 0 ? `- ${orphanedCleaned} orphaned state files cleaned` : null,
|
|
260
|
+
dbVacuumed ? `- Swarm database vacuumed` : null,
|
|
261
|
+
result.errors.length > 0 ? `- Errors: ${result.errors.length}` : null,
|
|
262
|
+
prunedFiles === 0 && orphanedCleaned === 0 && !dbVacuumed && result.errors.length === 0
|
|
263
|
+
? '- No maintenance needed'
|
|
264
|
+
: null,
|
|
265
|
+
]
|
|
266
|
+
.filter(Boolean)
|
|
267
|
+
.join('\n');
|
|
268
|
+
return {
|
|
269
|
+
continue: true,
|
|
270
|
+
hookSpecificOutput: {
|
|
271
|
+
hookEventName: 'Setup',
|
|
272
|
+
additionalContext: context,
|
|
273
|
+
},
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
// ============================================================================
|
|
277
|
+
// Main Entry Point
|
|
278
|
+
// ============================================================================
|
|
279
|
+
/**
|
|
280
|
+
* Process setup hook based on trigger type
|
|
281
|
+
*/
|
|
282
|
+
export async function processSetup(input) {
|
|
283
|
+
if (input.trigger === 'init') {
|
|
284
|
+
return processSetupInit(input);
|
|
285
|
+
}
|
|
286
|
+
else if (input.trigger === 'maintenance') {
|
|
287
|
+
return processSetupMaintenance(input);
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
return {
|
|
291
|
+
continue: true,
|
|
292
|
+
hookSpecificOutput: {
|
|
293
|
+
hookEventName: 'Setup',
|
|
294
|
+
additionalContext: `Unknown trigger: ${input.trigger}`,
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/setup/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Setup Hook Types
|
|
3
|
+
*/
|
|
4
|
+
export interface SetupInput {
|
|
5
|
+
session_id: string;
|
|
6
|
+
transcript_path: string;
|
|
7
|
+
cwd: string;
|
|
8
|
+
permission_mode: string;
|
|
9
|
+
hook_event_name: 'Setup';
|
|
10
|
+
trigger: 'init' | 'maintenance';
|
|
11
|
+
}
|
|
12
|
+
export interface SetupResult {
|
|
13
|
+
directories_created: string[];
|
|
14
|
+
configs_validated: string[];
|
|
15
|
+
errors: string[];
|
|
16
|
+
env_vars_set: string[];
|
|
17
|
+
}
|
|
18
|
+
export interface HookOutput {
|
|
19
|
+
continue: boolean;
|
|
20
|
+
hookSpecificOutput: {
|
|
21
|
+
hookEventName: 'Setup';
|
|
22
|
+
additionalContext: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/setup/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/setup/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,83 +1,122 @@
|
|
|
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
11
|
export interface SubagentInfo {
|
|
8
12
|
agent_id: string;
|
|
9
13
|
agent_type: string;
|
|
10
14
|
started_at: string;
|
|
11
|
-
parent_mode
|
|
15
|
+
parent_mode: string;
|
|
12
16
|
task_description?: string;
|
|
13
17
|
file_ownership?: string[];
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
agent_type: string;
|
|
18
|
-
duration_ms: number;
|
|
19
|
-
success: boolean;
|
|
18
|
+
status: 'running' | 'completed' | 'failed';
|
|
19
|
+
completed_at?: string;
|
|
20
|
+
duration_ms?: number;
|
|
20
21
|
output_summary?: string;
|
|
21
22
|
}
|
|
22
23
|
export interface SubagentTrackingState {
|
|
23
|
-
|
|
24
|
-
completed_agents: Record<string, CompletedSubagentInfo>;
|
|
24
|
+
agents: SubagentInfo[];
|
|
25
25
|
total_spawned: number;
|
|
26
26
|
total_completed: number;
|
|
27
|
+
total_failed: number;
|
|
28
|
+
last_updated: string;
|
|
27
29
|
}
|
|
28
30
|
export interface SubagentStartInput {
|
|
29
31
|
session_id: string;
|
|
30
32
|
transcript_path: string;
|
|
31
33
|
cwd: string;
|
|
34
|
+
permission_mode: string;
|
|
32
35
|
hook_event_name: 'SubagentStart';
|
|
33
36
|
agent_id: string;
|
|
34
37
|
agent_type: string;
|
|
38
|
+
prompt?: string;
|
|
39
|
+
model?: string;
|
|
35
40
|
}
|
|
36
41
|
export interface SubagentStopInput {
|
|
37
42
|
session_id: string;
|
|
38
43
|
transcript_path: string;
|
|
39
44
|
cwd: string;
|
|
45
|
+
permission_mode: string;
|
|
40
46
|
hook_event_name: 'SubagentStop';
|
|
41
|
-
stop_hook_active: boolean;
|
|
42
47
|
agent_id: string;
|
|
43
|
-
|
|
48
|
+
agent_type: string;
|
|
49
|
+
output?: string;
|
|
50
|
+
success: boolean;
|
|
44
51
|
}
|
|
45
52
|
export interface HookOutput {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
53
|
+
continue: boolean;
|
|
54
|
+
hookSpecificOutput?: {
|
|
55
|
+
hookEventName: string;
|
|
56
|
+
additionalContext?: string;
|
|
57
|
+
agent_count?: number;
|
|
58
|
+
stale_agents?: string[];
|
|
59
|
+
};
|
|
49
60
|
}
|
|
50
61
|
/**
|
|
51
|
-
* Get the
|
|
62
|
+
* Get the state file path
|
|
52
63
|
*/
|
|
53
64
|
export declare function getStateFilePath(directory: string): string;
|
|
54
65
|
/**
|
|
55
|
-
* Read
|
|
66
|
+
* Read tracking state from file
|
|
56
67
|
*/
|
|
57
|
-
export declare function readTrackingState(directory: string): SubagentTrackingState
|
|
68
|
+
export declare function readTrackingState(directory: string): SubagentTrackingState;
|
|
58
69
|
/**
|
|
59
|
-
* Write
|
|
70
|
+
* Write tracking state to file
|
|
60
71
|
*/
|
|
61
72
|
export declare function writeTrackingState(directory: string, state: SubagentTrackingState): void;
|
|
62
73
|
/**
|
|
63
|
-
*
|
|
74
|
+
* Get list of stale agents (running for too long)
|
|
75
|
+
*/
|
|
76
|
+
export declare function getStaleAgents(state: SubagentTrackingState): SubagentInfo[];
|
|
77
|
+
/**
|
|
78
|
+
* Process SubagentStart event
|
|
64
79
|
*/
|
|
65
80
|
export declare function processSubagentStart(input: SubagentStartInput): HookOutput;
|
|
66
81
|
/**
|
|
67
|
-
* Process SubagentStop event
|
|
82
|
+
* Process SubagentStop event
|
|
68
83
|
*/
|
|
69
84
|
export declare function processSubagentStop(input: SubagentStopInput): HookOutput;
|
|
70
85
|
/**
|
|
71
|
-
*
|
|
72
|
-
* Useful for cleaning up stale agents that may have crashed.
|
|
86
|
+
* Cleanup stale agents (mark as failed)
|
|
73
87
|
*/
|
|
74
|
-
export declare function cleanupStaleAgents(directory: string
|
|
88
|
+
export declare function cleanupStaleAgents(directory: string): number;
|
|
75
89
|
/**
|
|
76
|
-
* Get
|
|
90
|
+
* Get count of active (running) agents
|
|
77
91
|
*/
|
|
78
92
|
export declare function getActiveAgentCount(directory: string): number;
|
|
79
93
|
/**
|
|
80
|
-
* Get
|
|
94
|
+
* Get agents by type
|
|
95
|
+
*/
|
|
96
|
+
export declare function getAgentsByType(directory: string, agentType: string): SubagentInfo[];
|
|
97
|
+
/**
|
|
98
|
+
* Get all running agents
|
|
99
|
+
*/
|
|
100
|
+
export declare function getRunningAgents(directory: string): SubagentInfo[];
|
|
101
|
+
/**
|
|
102
|
+
* Get tracking stats
|
|
103
|
+
*/
|
|
104
|
+
export declare function getTrackingStats(directory: string): {
|
|
105
|
+
running: number;
|
|
106
|
+
completed: number;
|
|
107
|
+
failed: number;
|
|
108
|
+
total: number;
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Handle SubagentStart hook
|
|
112
|
+
*/
|
|
113
|
+
export declare function handleSubagentStart(input: SubagentStartInput): Promise<HookOutput>;
|
|
114
|
+
/**
|
|
115
|
+
* Handle SubagentStop hook
|
|
116
|
+
*/
|
|
117
|
+
export declare function handleSubagentStop(input: SubagentStopInput): Promise<HookOutput>;
|
|
118
|
+
/**
|
|
119
|
+
* Clear all tracking state (for testing or cleanup)
|
|
81
120
|
*/
|
|
82
|
-
export declare function
|
|
121
|
+
export declare function clearTrackingState(directory: string): void;
|
|
83
122
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/subagent-tracker/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/subagent-tracker/index.ts"],"names":[],"mappings":"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"}
|