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.
Files changed (163) hide show
  1. package/README.md +40 -1
  2. package/commands/hud.md +37 -5
  3. package/commands/omc-setup.md +105 -0
  4. package/dist/__tests__/delegation-enforcement-levels.test.d.ts +9 -0
  5. package/dist/__tests__/delegation-enforcement-levels.test.d.ts.map +1 -0
  6. package/dist/__tests__/delegation-enforcement-levels.test.js +550 -0
  7. package/dist/__tests__/delegation-enforcement-levels.test.js.map +1 -0
  8. package/dist/__tests__/hud/analytics-display.test.js +137 -1
  9. package/dist/__tests__/hud/analytics-display.test.js.map +1 -1
  10. package/dist/__tests__/hud-windows.test.d.ts +2 -0
  11. package/dist/__tests__/hud-windows.test.d.ts.map +1 -0
  12. package/dist/__tests__/hud-windows.test.js +91 -0
  13. package/dist/__tests__/hud-windows.test.js.map +1 -0
  14. package/dist/__tests__/installer.test.js +1 -1
  15. package/dist/__tests__/rate-limit-wait/daemon.test.d.ts +5 -0
  16. package/dist/__tests__/rate-limit-wait/daemon.test.d.ts.map +1 -0
  17. package/dist/__tests__/rate-limit-wait/daemon.test.js +313 -0
  18. package/dist/__tests__/rate-limit-wait/daemon.test.js.map +1 -0
  19. package/dist/__tests__/rate-limit-wait/integration.test.d.ts +8 -0
  20. package/dist/__tests__/rate-limit-wait/integration.test.d.ts.map +1 -0
  21. package/dist/__tests__/rate-limit-wait/integration.test.js +329 -0
  22. package/dist/__tests__/rate-limit-wait/integration.test.js.map +1 -0
  23. package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.d.ts +5 -0
  24. package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.d.ts.map +1 -0
  25. package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js +167 -0
  26. package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js.map +1 -0
  27. package/dist/__tests__/rate-limit-wait/tmux-detector.test.d.ts +5 -0
  28. package/dist/__tests__/rate-limit-wait/tmux-detector.test.d.ts.map +1 -0
  29. package/dist/__tests__/rate-limit-wait/tmux-detector.test.js +295 -0
  30. package/dist/__tests__/rate-limit-wait/tmux-detector.test.js.map +1 -0
  31. package/dist/cli/commands/wait.d.ts +52 -0
  32. package/dist/cli/commands/wait.d.ts.map +1 -0
  33. package/dist/cli/commands/wait.js +229 -0
  34. package/dist/cli/commands/wait.js.map +1 -0
  35. package/dist/cli/index.js +54 -0
  36. package/dist/cli/index.js.map +1 -1
  37. package/dist/features/rate-limit-wait/daemon.d.ts +52 -0
  38. package/dist/features/rate-limit-wait/daemon.d.ts.map +1 -0
  39. package/dist/features/rate-limit-wait/daemon.js +585 -0
  40. package/dist/features/rate-limit-wait/daemon.js.map +1 -0
  41. package/dist/features/rate-limit-wait/index.d.ts +16 -0
  42. package/dist/features/rate-limit-wait/index.d.ts.map +1 -0
  43. package/dist/features/rate-limit-wait/index.js +18 -0
  44. package/dist/features/rate-limit-wait/index.js.map +1 -0
  45. package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts +22 -0
  46. package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts.map +1 -0
  47. package/dist/features/rate-limit-wait/rate-limit-monitor.js +99 -0
  48. package/dist/features/rate-limit-wait/rate-limit-monitor.js.map +1 -0
  49. package/dist/features/rate-limit-wait/tmux-detector.d.ts +59 -0
  50. package/dist/features/rate-limit-wait/tmux-detector.d.ts.map +1 -0
  51. package/dist/features/rate-limit-wait/tmux-detector.js +304 -0
  52. package/dist/features/rate-limit-wait/tmux-detector.js.map +1 -0
  53. package/dist/features/rate-limit-wait/types.d.ts +121 -0
  54. package/dist/features/rate-limit-wait/types.d.ts.map +1 -0
  55. package/dist/features/rate-limit-wait/types.js +8 -0
  56. package/dist/features/rate-limit-wait/types.js.map +1 -0
  57. package/dist/features/state-manager/index.d.ts.map +1 -1
  58. package/dist/features/state-manager/index.js +4 -1
  59. package/dist/features/state-manager/index.js.map +1 -1
  60. package/dist/hooks/bridge.d.ts +1 -1
  61. package/dist/hooks/bridge.d.ts.map +1 -1
  62. package/dist/hooks/bridge.js +50 -4
  63. package/dist/hooks/bridge.js.map +1 -1
  64. package/dist/hooks/index.d.ts +5 -0
  65. package/dist/hooks/index.d.ts.map +1 -1
  66. package/dist/hooks/index.js +15 -0
  67. package/dist/hooks/index.js.map +1 -1
  68. package/dist/hooks/omc-orchestrator/audit.d.ts +2 -1
  69. package/dist/hooks/omc-orchestrator/audit.d.ts.map +1 -1
  70. package/dist/hooks/omc-orchestrator/audit.js.map +1 -1
  71. package/dist/hooks/omc-orchestrator/index.d.ts +7 -0
  72. package/dist/hooks/omc-orchestrator/index.d.ts.map +1 -1
  73. package/dist/hooks/omc-orchestrator/index.js +95 -8
  74. package/dist/hooks/omc-orchestrator/index.js.map +1 -1
  75. package/dist/hooks/permission-handler/__tests__/index.test.d.ts +2 -0
  76. package/dist/hooks/permission-handler/__tests__/index.test.d.ts.map +1 -0
  77. package/dist/hooks/permission-handler/__tests__/index.test.js +291 -0
  78. package/dist/hooks/permission-handler/__tests__/index.test.js.map +1 -0
  79. package/dist/hooks/permission-handler/index.d.ts +42 -0
  80. package/dist/hooks/permission-handler/index.d.ts.map +1 -0
  81. package/dist/hooks/permission-handler/index.js +107 -0
  82. package/dist/hooks/permission-handler/index.js.map +1 -0
  83. package/dist/hooks/plugin-patterns/index.d.ts +5 -0
  84. package/dist/hooks/plugin-patterns/index.d.ts.map +1 -1
  85. package/dist/hooks/plugin-patterns/index.js +26 -1
  86. package/dist/hooks/plugin-patterns/index.js.map +1 -1
  87. package/dist/hooks/pre-compact/index.d.ts +82 -0
  88. package/dist/hooks/pre-compact/index.d.ts.map +1 -0
  89. package/dist/hooks/pre-compact/index.js +265 -0
  90. package/dist/hooks/pre-compact/index.js.map +1 -0
  91. package/dist/hooks/session-end/index.d.ts +42 -0
  92. package/dist/hooks/session-end/index.d.ts.map +1 -0
  93. package/dist/hooks/session-end/index.js +200 -0
  94. package/dist/hooks/session-end/index.js.map +1 -0
  95. package/dist/hooks/setup/index.d.ts +66 -0
  96. package/dist/hooks/setup/index.d.ts.map +1 -0
  97. package/dist/hooks/setup/index.js +299 -0
  98. package/dist/hooks/setup/index.js.map +1 -0
  99. package/dist/hooks/setup/types.d.ts +25 -0
  100. package/dist/hooks/setup/types.d.ts.map +1 -0
  101. package/dist/hooks/setup/types.js +5 -0
  102. package/dist/hooks/setup/types.js.map +1 -0
  103. package/dist/hooks/subagent-tracker/index.d.ts +68 -29
  104. package/dist/hooks/subagent-tracker/index.d.ts.map +1 -1
  105. package/dist/hooks/subagent-tracker/index.js +316 -131
  106. package/dist/hooks/subagent-tracker/index.js.map +1 -1
  107. package/dist/hud/analytics-display.d.ts +16 -0
  108. package/dist/hud/analytics-display.d.ts.map +1 -1
  109. package/dist/hud/analytics-display.js +35 -9
  110. package/dist/hud/analytics-display.js.map +1 -1
  111. package/dist/hud/render.d.ts.map +1 -1
  112. package/dist/hud/render.js +49 -18
  113. package/dist/hud/render.js.map +1 -1
  114. package/dist/hud/types.d.ts +2 -0
  115. package/dist/hud/types.d.ts.map +1 -1
  116. package/dist/hud/types.js +14 -0
  117. package/dist/hud/types.js.map +1 -1
  118. package/dist/installer/index.d.ts +1 -1
  119. package/dist/installer/index.d.ts.map +1 -1
  120. package/dist/installer/index.js +4 -3
  121. package/dist/installer/index.js.map +1 -1
  122. package/hooks/hooks.json +83 -1
  123. package/hooks/keyword-detector.sh +4 -4
  124. package/hooks/persistent-mode.sh +10 -10
  125. package/hooks/session-start.sh +4 -4
  126. package/package.json +3 -1
  127. package/scripts/keyword-detector.mjs +4 -4
  128. package/scripts/permission-handler.mjs +23 -0
  129. package/scripts/persistent-mode.mjs +6 -6
  130. package/scripts/persistent-mode.sh +10 -10
  131. package/scripts/pre-compact.mjs +23 -0
  132. package/scripts/session-end.mjs +23 -0
  133. package/scripts/session-start.mjs +4 -4
  134. package/scripts/setup-init.mjs +23 -0
  135. package/scripts/setup-maintenance.mjs +23 -0
  136. package/scripts/subagent-tracker.mjs +35 -0
  137. package/skills/hud/SKILL.md +37 -5
  138. package/skills/omc-setup/SKILL.md +162 -4
  139. package/skills/writer-memory/SKILL.md +443 -0
  140. package/skills/writer-memory/lib/character-tracker.ts +338 -0
  141. package/skills/writer-memory/lib/memory-manager.ts +804 -0
  142. package/skills/writer-memory/lib/relationship-graph.ts +400 -0
  143. package/skills/writer-memory/lib/scene-organizer.ts +544 -0
  144. package/skills/writer-memory/lib/synopsis-builder.ts +339 -0
  145. package/skills/writer-memory/templates/synopsis-template.md +46 -0
  146. package/templates/hooks/keyword-detector.mjs +198 -0
  147. package/templates/hooks/keyword-detector.sh +102 -0
  148. package/templates/hooks/persistent-mode.mjs +249 -0
  149. package/templates/hooks/persistent-mode.sh +187 -0
  150. package/templates/hooks/post-tool-use.mjs +133 -0
  151. package/templates/hooks/post-tool-use.sh +90 -0
  152. package/templates/hooks/pre-tool-use.mjs +145 -0
  153. package/templates/hooks/pre-tool-use.sh +113 -0
  154. package/templates/hooks/session-start.mjs +100 -0
  155. package/templates/hooks/session-start.sh +62 -0
  156. package/templates/hooks/stop-continuation.mjs +80 -0
  157. package/templates/hooks/stop-continuation.sh +40 -0
  158. package/templates/rules/README.md +40 -0
  159. package/templates/rules/coding-style.md +74 -0
  160. package/templates/rules/git-workflow.md +41 -0
  161. package/templates/rules/performance.md +40 -0
  162. package/templates/rules/security.md +41 -0
  163. 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,5 @@
1
+ /**
2
+ * Setup Hook Types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -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 to maintain state of active agents.
5
- * Useful for monitoring parallel execution in ultrapilot, swarm, and other multi-agent modes.
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?: string;
15
+ parent_mode: string;
12
16
  task_description?: string;
13
17
  file_ownership?: string[];
14
- }
15
- export interface CompletedSubagentInfo {
16
- agent_id: string;
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
- active_agents: Record<string, SubagentInfo>;
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
- agent_transcript_path: string;
48
+ agent_type: string;
49
+ output?: string;
50
+ success: boolean;
44
51
  }
45
52
  export interface HookOutput {
46
- status: 'success' | 'error';
47
- message?: string;
48
- data?: unknown;
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 path to the subagent tracking state file.
62
+ * Get the state file path
52
63
  */
53
64
  export declare function getStateFilePath(directory: string): string;
54
65
  /**
55
- * Read the current subagent tracking state.
66
+ * Read tracking state from file
56
67
  */
57
- export declare function readTrackingState(directory: string): SubagentTrackingState | null;
68
+ export declare function readTrackingState(directory: string): SubagentTrackingState;
58
69
  /**
59
- * Write subagent tracking state to disk.
70
+ * Write tracking state to file
60
71
  */
61
72
  export declare function writeTrackingState(directory: string, state: SubagentTrackingState): void;
62
73
  /**
63
- * Process SubagentStart event - track new agent spawn.
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 - mark agent as completed.
82
+ * Process SubagentStop event
68
83
  */
69
84
  export declare function processSubagentStop(input: SubagentStopInput): HookOutput;
70
85
  /**
71
- * Remove agents that have been active for longer than maxAgeMs.
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, maxAgeMs?: number): void;
88
+ export declare function cleanupStaleAgents(directory: string): number;
75
89
  /**
76
- * Get the count of currently active agents.
90
+ * Get count of active (running) agents
77
91
  */
78
92
  export declare function getActiveAgentCount(directory: string): number;
79
93
  /**
80
- * Get a count of agents by type (both active and completed).
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 getAgentsByType(directory: string): Record<string, number>;
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;;;;;GAKG;AASH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5C,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACxD,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,cAAc,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAcjF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,qBAAqB,GAC3B,IAAI,CAaN;AAwBD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,UAAU,CA4B1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,UAAU,CAgDxE;AAMD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAe,GACxB,IAAI,CAkCN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAQ7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBzE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/subagent-tracker/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,cAAc,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;CACH;AAmFD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,CA0B1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI,CASxF;AA2CD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,qBAAqB,GAAG,YAAY,EAAE,CAa3E;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,UAAU,CAyC1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,UAAU,CAkExE;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA6B5D;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CAGpF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CAGlE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAQA;AAMD;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAExF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAEtF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAU1D"}