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.
Files changed (119) hide show
  1. package/README.md +16 -0
  2. package/dist/__tests__/delegation-enforcement-levels.test.d.ts +9 -0
  3. package/dist/__tests__/delegation-enforcement-levels.test.d.ts.map +1 -0
  4. package/dist/__tests__/delegation-enforcement-levels.test.js +550 -0
  5. package/dist/__tests__/delegation-enforcement-levels.test.js.map +1 -0
  6. package/dist/__tests__/installer.test.js +1 -1
  7. package/dist/__tests__/rate-limit-wait/daemon.test.d.ts +5 -0
  8. package/dist/__tests__/rate-limit-wait/daemon.test.d.ts.map +1 -0
  9. package/dist/__tests__/rate-limit-wait/daemon.test.js +313 -0
  10. package/dist/__tests__/rate-limit-wait/daemon.test.js.map +1 -0
  11. package/dist/__tests__/rate-limit-wait/integration.test.d.ts +8 -0
  12. package/dist/__tests__/rate-limit-wait/integration.test.d.ts.map +1 -0
  13. package/dist/__tests__/rate-limit-wait/integration.test.js +329 -0
  14. package/dist/__tests__/rate-limit-wait/integration.test.js.map +1 -0
  15. package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.d.ts +5 -0
  16. package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.d.ts.map +1 -0
  17. package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js +167 -0
  18. package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js.map +1 -0
  19. package/dist/__tests__/rate-limit-wait/tmux-detector.test.d.ts +5 -0
  20. package/dist/__tests__/rate-limit-wait/tmux-detector.test.d.ts.map +1 -0
  21. package/dist/__tests__/rate-limit-wait/tmux-detector.test.js +295 -0
  22. package/dist/__tests__/rate-limit-wait/tmux-detector.test.js.map +1 -0
  23. package/dist/cli/commands/wait.d.ts +52 -0
  24. package/dist/cli/commands/wait.d.ts.map +1 -0
  25. package/dist/cli/commands/wait.js +229 -0
  26. package/dist/cli/commands/wait.js.map +1 -0
  27. package/dist/cli/index.js +54 -0
  28. package/dist/cli/index.js.map +1 -1
  29. package/dist/features/rate-limit-wait/daemon.d.ts +52 -0
  30. package/dist/features/rate-limit-wait/daemon.d.ts.map +1 -0
  31. package/dist/features/rate-limit-wait/daemon.js +545 -0
  32. package/dist/features/rate-limit-wait/daemon.js.map +1 -0
  33. package/dist/features/rate-limit-wait/index.d.ts +16 -0
  34. package/dist/features/rate-limit-wait/index.d.ts.map +1 -0
  35. package/dist/features/rate-limit-wait/index.js +18 -0
  36. package/dist/features/rate-limit-wait/index.js.map +1 -0
  37. package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts +22 -0
  38. package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts.map +1 -0
  39. package/dist/features/rate-limit-wait/rate-limit-monitor.js +99 -0
  40. package/dist/features/rate-limit-wait/rate-limit-monitor.js.map +1 -0
  41. package/dist/features/rate-limit-wait/tmux-detector.d.ts +59 -0
  42. package/dist/features/rate-limit-wait/tmux-detector.d.ts.map +1 -0
  43. package/dist/features/rate-limit-wait/tmux-detector.js +304 -0
  44. package/dist/features/rate-limit-wait/tmux-detector.js.map +1 -0
  45. package/dist/features/rate-limit-wait/types.d.ts +121 -0
  46. package/dist/features/rate-limit-wait/types.d.ts.map +1 -0
  47. package/dist/features/rate-limit-wait/types.js +8 -0
  48. package/dist/features/rate-limit-wait/types.js.map +1 -0
  49. package/dist/hooks/bridge.d.ts +1 -1
  50. package/dist/hooks/bridge.d.ts.map +1 -1
  51. package/dist/hooks/bridge.js +50 -4
  52. package/dist/hooks/bridge.js.map +1 -1
  53. package/dist/hooks/index.d.ts +5 -0
  54. package/dist/hooks/index.d.ts.map +1 -1
  55. package/dist/hooks/index.js +15 -0
  56. package/dist/hooks/index.js.map +1 -1
  57. package/dist/hooks/omc-orchestrator/audit.d.ts +2 -1
  58. package/dist/hooks/omc-orchestrator/audit.d.ts.map +1 -1
  59. package/dist/hooks/omc-orchestrator/audit.js.map +1 -1
  60. package/dist/hooks/omc-orchestrator/index.d.ts +7 -0
  61. package/dist/hooks/omc-orchestrator/index.d.ts.map +1 -1
  62. package/dist/hooks/omc-orchestrator/index.js +95 -8
  63. package/dist/hooks/omc-orchestrator/index.js.map +1 -1
  64. package/dist/hooks/permission-handler/__tests__/index.test.d.ts +2 -0
  65. package/dist/hooks/permission-handler/__tests__/index.test.d.ts.map +1 -0
  66. package/dist/hooks/permission-handler/__tests__/index.test.js +244 -0
  67. package/dist/hooks/permission-handler/__tests__/index.test.js.map +1 -0
  68. package/dist/hooks/permission-handler/index.d.ts +42 -0
  69. package/dist/hooks/permission-handler/index.d.ts.map +1 -0
  70. package/dist/hooks/permission-handler/index.js +111 -0
  71. package/dist/hooks/permission-handler/index.js.map +1 -0
  72. package/dist/hooks/pre-compact/index.d.ts +82 -0
  73. package/dist/hooks/pre-compact/index.d.ts.map +1 -0
  74. package/dist/hooks/pre-compact/index.js +265 -0
  75. package/dist/hooks/pre-compact/index.js.map +1 -0
  76. package/dist/hooks/session-end/index.d.ts +50 -0
  77. package/dist/hooks/session-end/index.d.ts.map +1 -0
  78. package/dist/hooks/session-end/index.js +207 -0
  79. package/dist/hooks/session-end/index.js.map +1 -0
  80. package/dist/hooks/setup/index.d.ts +66 -0
  81. package/dist/hooks/setup/index.d.ts.map +1 -0
  82. package/dist/hooks/setup/index.js +299 -0
  83. package/dist/hooks/setup/index.js.map +1 -0
  84. package/dist/hooks/setup/types.d.ts +25 -0
  85. package/dist/hooks/setup/types.d.ts.map +1 -0
  86. package/dist/hooks/setup/types.js +5 -0
  87. package/dist/hooks/setup/types.js.map +1 -0
  88. package/dist/hooks/subagent-tracker/index.d.ts +68 -29
  89. package/dist/hooks/subagent-tracker/index.d.ts.map +1 -1
  90. package/dist/hooks/subagent-tracker/index.js +301 -131
  91. package/dist/hooks/subagent-tracker/index.js.map +1 -1
  92. package/dist/installer/index.d.ts +1 -1
  93. package/dist/installer/index.js +1 -1
  94. package/hooks/hooks.json +83 -1
  95. package/package.json +3 -1
  96. package/scripts/permission-handler.mjs +23 -0
  97. package/scripts/pre-compact.mjs +23 -0
  98. package/scripts/session-end.mjs +23 -0
  99. package/scripts/setup-init.mjs +23 -0
  100. package/scripts/setup-maintenance.mjs +23 -0
  101. package/scripts/subagent-tracker.mjs +35 -0
  102. package/templates/hooks/keyword-detector.mjs +198 -0
  103. package/templates/hooks/keyword-detector.sh +102 -0
  104. package/templates/hooks/persistent-mode.mjs +249 -0
  105. package/templates/hooks/persistent-mode.sh +187 -0
  106. package/templates/hooks/post-tool-use.mjs +133 -0
  107. package/templates/hooks/post-tool-use.sh +90 -0
  108. package/templates/hooks/pre-tool-use.mjs +145 -0
  109. package/templates/hooks/pre-tool-use.sh +113 -0
  110. package/templates/hooks/session-start.mjs +100 -0
  111. package/templates/hooks/session-start.sh +62 -0
  112. package/templates/hooks/stop-continuation.mjs +80 -0
  113. package/templates/hooks/stop-continuation.sh +40 -0
  114. package/templates/rules/README.md +40 -0
  115. package/templates/rules/coding-style.md +74 -0
  116. package/templates/rules/git-workflow.md +41 -0
  117. package/templates/rules/performance.md +40 -0
  118. package/templates/rules/security.md +41 -0
  119. package/templates/rules/testing.md +42 -0
package/README.md CHANGED
@@ -97,6 +97,22 @@ Optional shortcuts for power users. Natural language works fine without them.
97
97
 
98
98
  ---
99
99
 
100
+ ## Utilities
101
+
102
+ ### Rate Limit Wait
103
+
104
+ Auto-resume Claude Code sessions when rate limits reset.
105
+
106
+ ```bash
107
+ omc wait # Check status, get guidance
108
+ omc wait --start # Enable auto-resume daemon
109
+ omc wait --stop # Disable daemon
110
+ ```
111
+
112
+ **Requires:** tmux (for session detection)
113
+
114
+ ---
115
+
100
116
  ## Documentation
101
117
 
102
118
  - **[Full Reference](docs/REFERENCE.md)** - Complete feature documentation
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Comprehensive tests for delegation enforcement hook implementation
3
+ *
4
+ * Tests: suggestAgentForFile, getEnforcementLevel (via processOrchestratorPreTool),
5
+ * processOrchestratorPreTool enforcement levels, AuditEntry interface, and
6
+ * processPreToolUse integration in bridge.ts
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=delegation-enforcement-levels.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation-enforcement-levels.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/delegation-enforcement-levels.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,550 @@
1
+ /**
2
+ * Comprehensive tests for delegation enforcement hook implementation
3
+ *
4
+ * Tests: suggestAgentForFile, getEnforcementLevel (via processOrchestratorPreTool),
5
+ * processOrchestratorPreTool enforcement levels, AuditEntry interface, and
6
+ * processPreToolUse integration in bridge.ts
7
+ */
8
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
9
+ import { processOrchestratorPreTool, isAllowedPath, isSourceFile, isWriteEditTool, clearEnforcementCache, } from '../hooks/omc-orchestrator/index.js';
10
+ // Mock fs module
11
+ vi.mock('fs', async () => {
12
+ const actual = await vi.importActual('fs');
13
+ return {
14
+ ...actual,
15
+ existsSync: vi.fn(),
16
+ readFileSync: vi.fn(),
17
+ mkdirSync: vi.fn(),
18
+ appendFileSync: vi.fn(),
19
+ };
20
+ });
21
+ // Mock os module
22
+ vi.mock('os', async () => {
23
+ const actual = await vi.importActual('os');
24
+ return {
25
+ ...actual,
26
+ homedir: vi.fn(() => '/mock/home'),
27
+ };
28
+ });
29
+ // Mock boulder-state to avoid side effects
30
+ vi.mock('../features/boulder-state/index.js', () => ({
31
+ readBoulderState: vi.fn(() => null),
32
+ getPlanProgress: vi.fn(() => ({ total: 0, completed: 0, isComplete: true })),
33
+ }));
34
+ // Mock notepad to avoid side effects
35
+ vi.mock('../hooks/notepad/index.js', () => ({
36
+ addWorkingMemoryEntry: vi.fn(),
37
+ setPriorityContext: vi.fn(),
38
+ }));
39
+ import { existsSync, readFileSync } from 'fs';
40
+ const mockExistsSync = vi.mocked(existsSync);
41
+ const mockReadFileSync = vi.mocked(readFileSync);
42
+ describe('delegation-enforcement-levels', () => {
43
+ beforeEach(() => {
44
+ vi.clearAllMocks();
45
+ clearEnforcementCache();
46
+ // Default: no config files exist
47
+ mockExistsSync.mockReturnValue(false);
48
+ });
49
+ // ─── 1. suggestAgentForFile (tested indirectly via warning messages) ───
50
+ describe('suggestAgentForFile via warning messages', () => {
51
+ // Helper: trigger a warn-level enforcement on a file and check agent suggestion in message
52
+ function getWarningForFile(filename) {
53
+ mockExistsSync.mockReturnValue(false); // default warn
54
+ const result = processOrchestratorPreTool({
55
+ toolName: 'Write',
56
+ toolInput: { filePath: `src/${filename}` },
57
+ directory: '/tmp/test-project',
58
+ });
59
+ return result.message;
60
+ }
61
+ const extensionToAgent = [
62
+ ['file.ts', 'executor-low (simple) or executor (complex)'],
63
+ ['file.tsx', 'designer-low (simple) or designer (complex UI)'],
64
+ ['file.js', 'executor-low'],
65
+ ['file.jsx', 'designer-low'],
66
+ ['file.py', 'executor-low (simple) or executor (complex)'],
67
+ ['file.vue', 'designer'],
68
+ ['file.svelte', 'designer'],
69
+ ['file.css', 'designer-low'],
70
+ ['file.scss', 'designer-low'],
71
+ ['file.md', 'writer (documentation)'],
72
+ ['file.json', 'executor-low'],
73
+ ];
74
+ it.each(extensionToAgent)('suggests correct agent for %s', (filename, expectedAgent) => {
75
+ const msg = getWarningForFile(filename);
76
+ expect(msg).toBeDefined();
77
+ expect(msg).toContain(`Suggested agent: ${expectedAgent}`);
78
+ });
79
+ it('falls back to executor for unknown extension', () => {
80
+ const msg = getWarningForFile('file.xyz');
81
+ // .xyz is not in WARNED_EXTENSIONS, so isSourceFile returns false
82
+ // but it's also not an allowed path, so it still gets warned
83
+ // The suggestion should be 'executor' (the fallback)
84
+ expect(msg).toBeDefined();
85
+ expect(msg).toContain('Suggested agent: executor');
86
+ });
87
+ it('handles empty path by allowing it (no warning)', () => {
88
+ const result = processOrchestratorPreTool({
89
+ toolName: 'Write',
90
+ toolInput: { filePath: '' },
91
+ directory: '/tmp/test-project',
92
+ });
93
+ // Empty path -> isAllowedPath returns true -> no warning
94
+ expect(result.continue).toBe(true);
95
+ expect(result.message).toBeUndefined();
96
+ });
97
+ });
98
+ // ─── 2. getEnforcementLevel (via processOrchestratorPreTool behavior) ───
99
+ describe('getEnforcementLevel via processOrchestratorPreTool', () => {
100
+ const sourceFileInput = {
101
+ toolName: 'Write',
102
+ toolInput: { filePath: 'src/app.ts' },
103
+ directory: '/tmp/test-project',
104
+ };
105
+ it('defaults to warn when no config file exists', () => {
106
+ mockExistsSync.mockReturnValue(false);
107
+ const result = processOrchestratorPreTool(sourceFileInput);
108
+ // warn = continue: true with message
109
+ expect(result.continue).toBe(true);
110
+ expect(result.message).toBeDefined();
111
+ expect(result.message).toContain('DELEGATION REQUIRED');
112
+ });
113
+ it('local config overrides global config', () => {
114
+ // Local config exists with 'off', global has 'strict'
115
+ mockExistsSync.mockImplementation((p) => {
116
+ const s = String(p);
117
+ if (s.includes('/tmp/test-project/.omc/config.json'))
118
+ return true;
119
+ if (s.includes('/mock/home/.claude/.omc-config.json'))
120
+ return true;
121
+ return false;
122
+ });
123
+ mockReadFileSync.mockImplementation((p) => {
124
+ const s = String(p);
125
+ if (s.includes('/tmp/test-project/.omc/config.json')) {
126
+ return JSON.stringify({ delegationEnforcementLevel: 'off' });
127
+ }
128
+ if (s.includes('/mock/home/.claude/.omc-config.json')) {
129
+ return JSON.stringify({ delegationEnforcementLevel: 'strict' });
130
+ }
131
+ return '';
132
+ });
133
+ const result = processOrchestratorPreTool(sourceFileInput);
134
+ // 'off' means early exit, continue with no message
135
+ expect(result.continue).toBe(true);
136
+ expect(result.message).toBeUndefined();
137
+ });
138
+ it('falls back to global config when no local config', () => {
139
+ mockExistsSync.mockImplementation((p) => {
140
+ const s = String(p);
141
+ if (s.includes('/mock/home/.claude/.omc-config.json'))
142
+ return true;
143
+ return false;
144
+ });
145
+ mockReadFileSync.mockImplementation((p) => {
146
+ const s = String(p);
147
+ if (s.includes('/mock/home/.claude/.omc-config.json')) {
148
+ return JSON.stringify({ delegationEnforcementLevel: 'strict' });
149
+ }
150
+ return '';
151
+ });
152
+ const result = processOrchestratorPreTool(sourceFileInput);
153
+ // strict = blocked
154
+ expect(result.continue).toBe(false);
155
+ expect(result.reason).toBe('DELEGATION_REQUIRED');
156
+ });
157
+ it('falls back to warn on invalid enforcement level in config', () => {
158
+ mockExistsSync.mockImplementation((p) => {
159
+ const s = String(p);
160
+ if (s.includes('/tmp/test-project/.omc/config.json'))
161
+ return true;
162
+ return false;
163
+ });
164
+ mockReadFileSync.mockImplementation(() => {
165
+ return JSON.stringify({ delegationEnforcementLevel: 'invalid-value' });
166
+ });
167
+ const result = processOrchestratorPreTool(sourceFileInput);
168
+ // Should fall back to 'warn'
169
+ expect(result.continue).toBe(true);
170
+ expect(result.message).toBeDefined();
171
+ });
172
+ it('falls back to warn on malformed JSON config', () => {
173
+ mockExistsSync.mockImplementation((p) => {
174
+ const s = String(p);
175
+ if (s.includes('/tmp/test-project/.omc/config.json'))
176
+ return true;
177
+ return false;
178
+ });
179
+ mockReadFileSync.mockImplementation(() => {
180
+ return 'not valid json {{{';
181
+ });
182
+ const result = processOrchestratorPreTool(sourceFileInput);
183
+ // Malformed JSON -> catch block -> continue to next config -> default warn
184
+ expect(result.continue).toBe(true);
185
+ expect(result.message).toBeDefined();
186
+ });
187
+ it('supports enforcementLevel key as alternative', () => {
188
+ mockExistsSync.mockImplementation((p) => {
189
+ const s = String(p);
190
+ if (s.includes('/tmp/test-project/.omc/config.json'))
191
+ return true;
192
+ return false;
193
+ });
194
+ mockReadFileSync.mockImplementation(() => {
195
+ return JSON.stringify({ enforcementLevel: 'strict' });
196
+ });
197
+ const result = processOrchestratorPreTool(sourceFileInput);
198
+ expect(result.continue).toBe(false);
199
+ expect(result.reason).toBe('DELEGATION_REQUIRED');
200
+ });
201
+ });
202
+ // ─── 3. processOrchestratorPreTool enforcement levels ───
203
+ describe('processOrchestratorPreTool enforcement levels', () => {
204
+ function setEnforcement(level) {
205
+ mockExistsSync.mockImplementation((p) => {
206
+ const s = String(p);
207
+ if (s.includes('.omc/config.json'))
208
+ return true;
209
+ return false;
210
+ });
211
+ mockReadFileSync.mockImplementation(() => {
212
+ return JSON.stringify({ delegationEnforcementLevel: level });
213
+ });
214
+ }
215
+ describe('enforcement=off', () => {
216
+ it('write to source file continues with no message', () => {
217
+ setEnforcement('off');
218
+ const result = processOrchestratorPreTool({
219
+ toolName: 'Write',
220
+ toolInput: { filePath: 'src/app.ts' },
221
+ directory: '/tmp/test-project',
222
+ });
223
+ expect(result.continue).toBe(true);
224
+ expect(result.message).toBeUndefined();
225
+ expect(result.reason).toBeUndefined();
226
+ });
227
+ });
228
+ describe('enforcement=warn', () => {
229
+ it('write to source file continues with warning message and agent suggestion', () => {
230
+ setEnforcement('warn');
231
+ const result = processOrchestratorPreTool({
232
+ toolName: 'Write',
233
+ toolInput: { filePath: 'src/app.ts' },
234
+ directory: '/tmp/test-project',
235
+ });
236
+ expect(result.continue).toBe(true);
237
+ expect(result.message).toBeDefined();
238
+ expect(result.message).toContain('DELEGATION REQUIRED');
239
+ expect(result.message).toContain('src/app.ts');
240
+ expect(result.message).toContain('Suggested agent:');
241
+ });
242
+ });
243
+ describe('enforcement=strict', () => {
244
+ it('write to source file blocks with continue=false, reason, and message', () => {
245
+ setEnforcement('strict');
246
+ const result = processOrchestratorPreTool({
247
+ toolName: 'Write',
248
+ toolInput: { filePath: 'src/app.ts' },
249
+ directory: '/tmp/test-project',
250
+ });
251
+ expect(result.continue).toBe(false);
252
+ expect(result.reason).toBe('DELEGATION_REQUIRED');
253
+ expect(result.message).toBeDefined();
254
+ expect(result.message).toContain('DELEGATION REQUIRED');
255
+ expect(result.message).toContain('Suggested agent:');
256
+ });
257
+ });
258
+ describe('allowed paths always continue', () => {
259
+ const allowedPaths = [
260
+ '.omc/plans/test.md',
261
+ '.claude/settings.json',
262
+ 'docs/CLAUDE.md',
263
+ 'AGENTS.md',
264
+ ];
265
+ it.each(allowedPaths)('allows %s regardless of enforcement level', (filePath) => {
266
+ setEnforcement('strict');
267
+ const result = processOrchestratorPreTool({
268
+ toolName: 'Write',
269
+ toolInput: { filePath },
270
+ directory: '/tmp/test-project',
271
+ });
272
+ expect(result.continue).toBe(true);
273
+ expect(result.reason).toBeUndefined();
274
+ });
275
+ });
276
+ describe('non-write tools always continue', () => {
277
+ it.each(['Read', 'Bash', 'Glob', 'Grep', 'Task'])('%s tool continues regardless of enforcement level', (toolName) => {
278
+ setEnforcement('strict');
279
+ const result = processOrchestratorPreTool({
280
+ toolName,
281
+ toolInput: { filePath: 'src/app.ts' },
282
+ directory: '/tmp/test-project',
283
+ });
284
+ expect(result.continue).toBe(true);
285
+ expect(result.message).toBeUndefined();
286
+ });
287
+ });
288
+ it('warning message includes agent suggestion text', () => {
289
+ setEnforcement('warn');
290
+ const result = processOrchestratorPreTool({
291
+ toolName: 'Edit',
292
+ toolInput: { filePath: 'src/component.tsx' },
293
+ directory: '/tmp/test-project',
294
+ });
295
+ expect(result.message).toContain('Suggested agent: designer-low (simple) or designer (complex UI)');
296
+ });
297
+ it('handles filePath in different input keys', () => {
298
+ setEnforcement('warn');
299
+ // toolInput.path
300
+ const result1 = processOrchestratorPreTool({
301
+ toolName: 'Write',
302
+ toolInput: { path: 'src/app.py' },
303
+ directory: '/tmp/test-project',
304
+ });
305
+ expect(result1.message).toBeDefined();
306
+ expect(result1.message).toContain('src/app.py');
307
+ // toolInput.file
308
+ const result2 = processOrchestratorPreTool({
309
+ toolName: 'Write',
310
+ toolInput: { file: 'src/app.go' },
311
+ directory: '/tmp/test-project',
312
+ });
313
+ expect(result2.message).toBeDefined();
314
+ expect(result2.message).toContain('src/app.go');
315
+ });
316
+ it('handles undefined toolInput gracefully', () => {
317
+ setEnforcement('warn');
318
+ const result = processOrchestratorPreTool({
319
+ toolName: 'Write',
320
+ toolInput: undefined,
321
+ directory: '/tmp/test-project',
322
+ });
323
+ // No filePath extracted -> isAllowedPath(undefined) -> true -> continue
324
+ expect(result.continue).toBe(true);
325
+ });
326
+ });
327
+ // ─── 4. AuditEntry interface ───
328
+ describe('AuditEntry interface', () => {
329
+ it('accepts blocked decision', () => {
330
+ const entry = {
331
+ timestamp: new Date().toISOString(),
332
+ tool: 'Write',
333
+ filePath: 'src/app.ts',
334
+ decision: 'blocked',
335
+ reason: 'source_file',
336
+ enforcementLevel: 'strict',
337
+ sessionId: 'test-session',
338
+ };
339
+ expect(entry.decision).toBe('blocked');
340
+ expect(entry.enforcementLevel).toBe('strict');
341
+ });
342
+ it('accepts warned decision', () => {
343
+ const entry = {
344
+ timestamp: new Date().toISOString(),
345
+ tool: 'Edit',
346
+ filePath: 'src/app.ts',
347
+ decision: 'warned',
348
+ reason: 'source_file',
349
+ enforcementLevel: 'warn',
350
+ };
351
+ expect(entry.decision).toBe('warned');
352
+ expect(entry.enforcementLevel).toBe('warn');
353
+ });
354
+ it('accepts allowed decision without enforcementLevel', () => {
355
+ const entry = {
356
+ timestamp: new Date().toISOString(),
357
+ tool: 'Write',
358
+ filePath: '.omc/plans/test.md',
359
+ decision: 'allowed',
360
+ reason: 'allowed_path',
361
+ };
362
+ expect(entry.decision).toBe('allowed');
363
+ expect(entry.enforcementLevel).toBeUndefined();
364
+ });
365
+ it('enforcementLevel field is present in logged entries for warned/blocked', () => {
366
+ const entry = {
367
+ timestamp: new Date().toISOString(),
368
+ tool: 'Write',
369
+ filePath: 'src/app.ts',
370
+ decision: 'blocked',
371
+ reason: 'source_file',
372
+ enforcementLevel: 'strict',
373
+ };
374
+ expect('enforcementLevel' in entry).toBe(true);
375
+ expect(entry.enforcementLevel).toBeDefined();
376
+ });
377
+ });
378
+ // ─── 5. processPreToolUse integration (bridge.ts) ───
379
+ describe('processPreToolUse integration via processHook', () => {
380
+ // We test the bridge by importing processHook
381
+ // Need to dynamically import to get fresh mocks
382
+ let processHook;
383
+ beforeEach(async () => {
384
+ // Mock additional bridge dependencies
385
+ vi.mock('../hud/background-tasks.js', () => ({
386
+ addBackgroundTask: vi.fn(),
387
+ completeBackgroundTask: vi.fn(),
388
+ }));
389
+ vi.mock('../hooks/ralph/index.js', () => ({
390
+ readRalphState: vi.fn(() => null),
391
+ incrementRalphIteration: vi.fn(),
392
+ clearRalphState: vi.fn(),
393
+ detectCompletionPromise: vi.fn(),
394
+ createRalphLoopHook: vi.fn(() => ({ startLoop: vi.fn() })),
395
+ readVerificationState: vi.fn(() => null),
396
+ startVerification: vi.fn(),
397
+ getArchitectVerificationPrompt: vi.fn(),
398
+ clearVerificationState: vi.fn(),
399
+ }));
400
+ vi.mock('../hooks/keyword-detector/index.js', () => ({
401
+ detectKeywordsWithType: vi.fn(() => []),
402
+ removeCodeBlocks: vi.fn((t) => t),
403
+ }));
404
+ vi.mock('../hooks/todo-continuation/index.js', () => ({
405
+ checkIncompleteTodos: vi.fn(async () => ({ count: 0 })),
406
+ }));
407
+ vi.mock('../hooks/persistent-mode/index.js', () => ({
408
+ checkPersistentModes: vi.fn(async () => ({ shouldContinue: true })),
409
+ createHookOutput: vi.fn(() => ({ continue: true })),
410
+ }));
411
+ vi.mock('../hooks/ultrawork/index.js', () => ({
412
+ activateUltrawork: vi.fn(),
413
+ readUltraworkState: vi.fn(() => null),
414
+ }));
415
+ vi.mock('../hooks/autopilot/index.js', () => ({
416
+ readAutopilotState: vi.fn(() => null),
417
+ isAutopilotActive: vi.fn(() => false),
418
+ getPhasePrompt: vi.fn(),
419
+ transitionPhase: vi.fn(),
420
+ formatCompactSummary: vi.fn(),
421
+ }));
422
+ vi.mock('../installer/hooks.js', () => ({
423
+ ULTRAWORK_MESSAGE: 'ultrawork',
424
+ ULTRATHINK_MESSAGE: 'ultrathink',
425
+ SEARCH_MESSAGE: 'search',
426
+ ANALYZE_MESSAGE: 'analyze',
427
+ TODO_CONTINUATION_PROMPT: 'continue',
428
+ RALPH_MESSAGE: 'ralph',
429
+ }));
430
+ const bridge = await import('../hooks/bridge.js');
431
+ processHook = bridge.processHook;
432
+ });
433
+ it('calls enforcement before HUD tracking', async () => {
434
+ // With strict enforcement, a Write to source should be blocked
435
+ // before any HUD tracking happens
436
+ mockExistsSync.mockImplementation((p) => {
437
+ const s = String(p);
438
+ if (s.includes('.omc/config.json'))
439
+ return true;
440
+ return false;
441
+ });
442
+ mockReadFileSync.mockImplementation(() => {
443
+ return JSON.stringify({ delegationEnforcementLevel: 'strict' });
444
+ });
445
+ const result = await processHook('pre-tool-use', {
446
+ toolName: 'Write',
447
+ toolInput: { filePath: 'src/app.ts' },
448
+ directory: '/tmp/test-project',
449
+ });
450
+ expect(result.continue).toBe(false);
451
+ expect(result.reason).toBe('DELEGATION_REQUIRED');
452
+ });
453
+ it('blocks propagated from enforcement', async () => {
454
+ mockExistsSync.mockImplementation((p) => {
455
+ const s = String(p);
456
+ if (s.includes('.omc/config.json'))
457
+ return true;
458
+ return false;
459
+ });
460
+ mockReadFileSync.mockImplementation(() => {
461
+ return JSON.stringify({ delegationEnforcementLevel: 'strict' });
462
+ });
463
+ const result = await processHook('pre-tool-use', {
464
+ toolName: 'Edit',
465
+ toolInput: { filePath: 'src/component.tsx' },
466
+ directory: '/tmp/test-project',
467
+ });
468
+ expect(result.continue).toBe(false);
469
+ expect(result.message).toContain('DELEGATION REQUIRED');
470
+ });
471
+ it('warnings propagated from enforcement', async () => {
472
+ mockExistsSync.mockReturnValue(false); // default warn
473
+ const result = await processHook('pre-tool-use', {
474
+ toolName: 'Write',
475
+ toolInput: { filePath: 'src/index.ts' },
476
+ directory: '/tmp/test-project',
477
+ });
478
+ expect(result.continue).toBe(true);
479
+ expect(result.message).toBeDefined();
480
+ expect(result.message).toContain('DELEGATION REQUIRED');
481
+ });
482
+ it('Task tool tracking still works when enforcement passes', async () => {
483
+ const { addBackgroundTask } = await import('../hud/background-tasks.js');
484
+ const mockAddTask = vi.mocked(addBackgroundTask);
485
+ mockExistsSync.mockReturnValue(false); // default warn, but Task is not a write tool
486
+ const result = await processHook('pre-tool-use', {
487
+ toolName: 'Task',
488
+ toolInput: {
489
+ description: 'Test task',
490
+ prompt: 'do stuff',
491
+ subagent_type: 'executor',
492
+ },
493
+ directory: '/tmp/test-project',
494
+ });
495
+ expect(result.continue).toBe(true);
496
+ expect(mockAddTask).toHaveBeenCalledWith(expect.stringContaining('task-'), 'Test task', 'executor', '/tmp/test-project');
497
+ });
498
+ });
499
+ // ─── Helper function unit tests ───
500
+ describe('isAllowedPath', () => {
501
+ it('returns true for .omc/ paths', () => {
502
+ expect(isAllowedPath('.omc/plans/test.md')).toBe(true);
503
+ });
504
+ it('returns true for .claude/ paths', () => {
505
+ expect(isAllowedPath('.claude/settings.json')).toBe(true);
506
+ });
507
+ it('returns true for CLAUDE.md', () => {
508
+ expect(isAllowedPath('CLAUDE.md')).toBe(true);
509
+ expect(isAllowedPath('docs/CLAUDE.md')).toBe(true);
510
+ });
511
+ it('returns true for AGENTS.md', () => {
512
+ expect(isAllowedPath('AGENTS.md')).toBe(true);
513
+ });
514
+ it('returns false for source files', () => {
515
+ expect(isAllowedPath('src/app.ts')).toBe(false);
516
+ });
517
+ it('returns true for empty/falsy path', () => {
518
+ expect(isAllowedPath('')).toBe(true);
519
+ });
520
+ });
521
+ describe('isSourceFile', () => {
522
+ it('returns true for source extensions', () => {
523
+ expect(isSourceFile('app.ts')).toBe(true);
524
+ expect(isSourceFile('app.py')).toBe(true);
525
+ expect(isSourceFile('app.go')).toBe(true);
526
+ expect(isSourceFile('app.rs')).toBe(true);
527
+ });
528
+ it('returns false for non-source extensions', () => {
529
+ expect(isSourceFile('readme.txt')).toBe(false);
530
+ expect(isSourceFile('data.yaml')).toBe(false);
531
+ });
532
+ it('returns false for empty path', () => {
533
+ expect(isSourceFile('')).toBe(false);
534
+ });
535
+ });
536
+ describe('isWriteEditTool', () => {
537
+ it('returns true for write/edit tools', () => {
538
+ expect(isWriteEditTool('Write')).toBe(true);
539
+ expect(isWriteEditTool('Edit')).toBe(true);
540
+ expect(isWriteEditTool('write')).toBe(true);
541
+ expect(isWriteEditTool('edit')).toBe(true);
542
+ });
543
+ it('returns false for other tools', () => {
544
+ expect(isWriteEditTool('Read')).toBe(false);
545
+ expect(isWriteEditTool('Bash')).toBe(false);
546
+ expect(isWriteEditTool('Task')).toBe(false);
547
+ });
548
+ });
549
+ });
550
+ //# sourceMappingURL=delegation-enforcement-levels.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation-enforcement-levels.test.js","sourceRoot":"","sources":["../../src/__tests__/delegation-enforcement-levels.test.ts"],"names":[],"mappings":"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"}
@@ -267,7 +267,7 @@ describe('Installer Constants', () => {
267
267
  });
268
268
  it('should match package.json version', () => {
269
269
  // This is a runtime check - VERSION should match the package.json
270
- expect(VERSION).toBe('3.6.3');
270
+ expect(VERSION).toBe('3.7.0');
271
271
  });
272
272
  });
273
273
  describe('File Paths', () => {
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for daemon.ts
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=daemon.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/daemon.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}