oh-my-claude-sisyphus 3.6.3 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/dist/__tests__/delegation-enforcement-levels.test.d.ts +9 -0
- package/dist/__tests__/delegation-enforcement-levels.test.d.ts.map +1 -0
- package/dist/__tests__/delegation-enforcement-levels.test.js +550 -0
- package/dist/__tests__/delegation-enforcement-levels.test.js.map +1 -0
- package/dist/__tests__/installer.test.js +1 -1
- package/dist/__tests__/rate-limit-wait/daemon.test.d.ts +5 -0
- package/dist/__tests__/rate-limit-wait/daemon.test.d.ts.map +1 -0
- package/dist/__tests__/rate-limit-wait/daemon.test.js +313 -0
- package/dist/__tests__/rate-limit-wait/daemon.test.js.map +1 -0
- package/dist/__tests__/rate-limit-wait/integration.test.d.ts +8 -0
- package/dist/__tests__/rate-limit-wait/integration.test.d.ts.map +1 -0
- package/dist/__tests__/rate-limit-wait/integration.test.js +329 -0
- package/dist/__tests__/rate-limit-wait/integration.test.js.map +1 -0
- package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.d.ts +5 -0
- package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.d.ts.map +1 -0
- package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js +167 -0
- package/dist/__tests__/rate-limit-wait/rate-limit-monitor.test.js.map +1 -0
- package/dist/__tests__/rate-limit-wait/tmux-detector.test.d.ts +5 -0
- package/dist/__tests__/rate-limit-wait/tmux-detector.test.d.ts.map +1 -0
- package/dist/__tests__/rate-limit-wait/tmux-detector.test.js +295 -0
- package/dist/__tests__/rate-limit-wait/tmux-detector.test.js.map +1 -0
- package/dist/cli/commands/wait.d.ts +52 -0
- package/dist/cli/commands/wait.d.ts.map +1 -0
- package/dist/cli/commands/wait.js +229 -0
- package/dist/cli/commands/wait.js.map +1 -0
- package/dist/cli/index.js +54 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/features/rate-limit-wait/daemon.d.ts +52 -0
- package/dist/features/rate-limit-wait/daemon.d.ts.map +1 -0
- package/dist/features/rate-limit-wait/daemon.js +545 -0
- package/dist/features/rate-limit-wait/daemon.js.map +1 -0
- package/dist/features/rate-limit-wait/index.d.ts +16 -0
- package/dist/features/rate-limit-wait/index.d.ts.map +1 -0
- package/dist/features/rate-limit-wait/index.js +18 -0
- package/dist/features/rate-limit-wait/index.js.map +1 -0
- package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts +22 -0
- package/dist/features/rate-limit-wait/rate-limit-monitor.d.ts.map +1 -0
- package/dist/features/rate-limit-wait/rate-limit-monitor.js +99 -0
- package/dist/features/rate-limit-wait/rate-limit-monitor.js.map +1 -0
- package/dist/features/rate-limit-wait/tmux-detector.d.ts +59 -0
- package/dist/features/rate-limit-wait/tmux-detector.d.ts.map +1 -0
- package/dist/features/rate-limit-wait/tmux-detector.js +304 -0
- package/dist/features/rate-limit-wait/tmux-detector.js.map +1 -0
- package/dist/features/rate-limit-wait/types.d.ts +121 -0
- package/dist/features/rate-limit-wait/types.d.ts.map +1 -0
- package/dist/features/rate-limit-wait/types.js +8 -0
- package/dist/features/rate-limit-wait/types.js.map +1 -0
- package/dist/hooks/bridge.d.ts +1 -1
- package/dist/hooks/bridge.d.ts.map +1 -1
- package/dist/hooks/bridge.js +50 -4
- package/dist/hooks/bridge.js.map +1 -1
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +15 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/omc-orchestrator/audit.d.ts +2 -1
- package/dist/hooks/omc-orchestrator/audit.d.ts.map +1 -1
- package/dist/hooks/omc-orchestrator/audit.js.map +1 -1
- package/dist/hooks/omc-orchestrator/index.d.ts +7 -0
- package/dist/hooks/omc-orchestrator/index.d.ts.map +1 -1
- package/dist/hooks/omc-orchestrator/index.js +95 -8
- package/dist/hooks/omc-orchestrator/index.js.map +1 -1
- package/dist/hooks/permission-handler/__tests__/index.test.d.ts +2 -0
- package/dist/hooks/permission-handler/__tests__/index.test.d.ts.map +1 -0
- package/dist/hooks/permission-handler/__tests__/index.test.js +244 -0
- package/dist/hooks/permission-handler/__tests__/index.test.js.map +1 -0
- package/dist/hooks/permission-handler/index.d.ts +42 -0
- package/dist/hooks/permission-handler/index.d.ts.map +1 -0
- package/dist/hooks/permission-handler/index.js +111 -0
- package/dist/hooks/permission-handler/index.js.map +1 -0
- package/dist/hooks/pre-compact/index.d.ts +82 -0
- package/dist/hooks/pre-compact/index.d.ts.map +1 -0
- package/dist/hooks/pre-compact/index.js +265 -0
- package/dist/hooks/pre-compact/index.js.map +1 -0
- package/dist/hooks/session-end/index.d.ts +50 -0
- package/dist/hooks/session-end/index.d.ts.map +1 -0
- package/dist/hooks/session-end/index.js +207 -0
- package/dist/hooks/session-end/index.js.map +1 -0
- package/dist/hooks/setup/index.d.ts +66 -0
- package/dist/hooks/setup/index.d.ts.map +1 -0
- package/dist/hooks/setup/index.js +299 -0
- package/dist/hooks/setup/index.js.map +1 -0
- package/dist/hooks/setup/types.d.ts +25 -0
- package/dist/hooks/setup/types.d.ts.map +1 -0
- package/dist/hooks/setup/types.js +5 -0
- package/dist/hooks/setup/types.js.map +1 -0
- package/dist/hooks/subagent-tracker/index.d.ts +68 -29
- package/dist/hooks/subagent-tracker/index.d.ts.map +1 -1
- package/dist/hooks/subagent-tracker/index.js +301 -131
- package/dist/hooks/subagent-tracker/index.js.map +1 -1
- package/dist/installer/index.d.ts +1 -1
- package/dist/installer/index.js +1 -1
- package/hooks/hooks.json +83 -1
- package/package.json +3 -1
- package/scripts/permission-handler.mjs +23 -0
- package/scripts/pre-compact.mjs +23 -0
- package/scripts/session-end.mjs +23 -0
- package/scripts/setup-init.mjs +23 -0
- package/scripts/setup-maintenance.mjs +23 -0
- package/scripts/subagent-tracker.mjs +35 -0
- package/templates/hooks/keyword-detector.mjs +198 -0
- package/templates/hooks/keyword-detector.sh +102 -0
- package/templates/hooks/persistent-mode.mjs +249 -0
- package/templates/hooks/persistent-mode.sh +187 -0
- package/templates/hooks/post-tool-use.mjs +133 -0
- package/templates/hooks/post-tool-use.sh +90 -0
- package/templates/hooks/pre-tool-use.mjs +145 -0
- package/templates/hooks/pre-tool-use.sh +113 -0
- package/templates/hooks/session-start.mjs +100 -0
- package/templates/hooks/session-start.sh +62 -0
- package/templates/hooks/stop-continuation.mjs +80 -0
- package/templates/hooks/stop-continuation.sh +40 -0
- package/templates/rules/README.md +40 -0
- package/templates/rules/coding-style.md +74 -0
- package/templates/rules/git-workflow.md +41 -0
- package/templates/rules/performance.md +40 -0
- package/templates/rules/security.md +41 -0
- package/templates/rules/testing.md +42 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit-monitor.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/rate-limit-monitor.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for rate-limit-monitor.ts
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
5
|
+
import { checkRateLimitStatus, formatTimeUntilReset, formatRateLimitStatus, } from '../../features/rate-limit-wait/rate-limit-monitor.js';
|
|
6
|
+
// Mock the usage-api module
|
|
7
|
+
vi.mock('../../hud/usage-api.js', () => ({
|
|
8
|
+
getUsage: vi.fn(),
|
|
9
|
+
}));
|
|
10
|
+
import { getUsage } from '../../hud/usage-api.js';
|
|
11
|
+
describe('rate-limit-monitor', () => {
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
vi.clearAllMocks();
|
|
14
|
+
});
|
|
15
|
+
describe('checkRateLimitStatus', () => {
|
|
16
|
+
it('should return null when getUsage returns null', async () => {
|
|
17
|
+
vi.mocked(getUsage).mockResolvedValue(null);
|
|
18
|
+
const result = await checkRateLimitStatus();
|
|
19
|
+
expect(result).toBeNull();
|
|
20
|
+
});
|
|
21
|
+
it('should detect 5-hour rate limit', async () => {
|
|
22
|
+
const resetTime = new Date(Date.now() + 3600000); // 1 hour from now
|
|
23
|
+
vi.mocked(getUsage).mockResolvedValue({
|
|
24
|
+
fiveHourPercent: 100,
|
|
25
|
+
weeklyPercent: 50,
|
|
26
|
+
fiveHourResetsAt: resetTime,
|
|
27
|
+
weeklyResetsAt: null,
|
|
28
|
+
});
|
|
29
|
+
const result = await checkRateLimitStatus();
|
|
30
|
+
expect(result).not.toBeNull();
|
|
31
|
+
expect(result.fiveHourLimited).toBe(true);
|
|
32
|
+
expect(result.weeklyLimited).toBe(false);
|
|
33
|
+
expect(result.isLimited).toBe(true);
|
|
34
|
+
expect(result.nextResetAt).toEqual(resetTime);
|
|
35
|
+
});
|
|
36
|
+
it('should detect weekly rate limit', async () => {
|
|
37
|
+
const resetTime = new Date(Date.now() + 86400000); // 1 day from now
|
|
38
|
+
vi.mocked(getUsage).mockResolvedValue({
|
|
39
|
+
fiveHourPercent: 50,
|
|
40
|
+
weeklyPercent: 100,
|
|
41
|
+
fiveHourResetsAt: null,
|
|
42
|
+
weeklyResetsAt: resetTime,
|
|
43
|
+
});
|
|
44
|
+
const result = await checkRateLimitStatus();
|
|
45
|
+
expect(result).not.toBeNull();
|
|
46
|
+
expect(result.fiveHourLimited).toBe(false);
|
|
47
|
+
expect(result.weeklyLimited).toBe(true);
|
|
48
|
+
expect(result.isLimited).toBe(true);
|
|
49
|
+
expect(result.nextResetAt).toEqual(resetTime);
|
|
50
|
+
});
|
|
51
|
+
it('should detect both limits and return earliest reset', async () => {
|
|
52
|
+
const fiveHourReset = new Date(Date.now() + 3600000); // 1 hour
|
|
53
|
+
const weeklyReset = new Date(Date.now() + 86400000); // 1 day
|
|
54
|
+
vi.mocked(getUsage).mockResolvedValue({
|
|
55
|
+
fiveHourPercent: 100,
|
|
56
|
+
weeklyPercent: 100,
|
|
57
|
+
fiveHourResetsAt: fiveHourReset,
|
|
58
|
+
weeklyResetsAt: weeklyReset,
|
|
59
|
+
});
|
|
60
|
+
const result = await checkRateLimitStatus();
|
|
61
|
+
expect(result).not.toBeNull();
|
|
62
|
+
expect(result.fiveHourLimited).toBe(true);
|
|
63
|
+
expect(result.weeklyLimited).toBe(true);
|
|
64
|
+
expect(result.isLimited).toBe(true);
|
|
65
|
+
expect(result.nextResetAt).toEqual(fiveHourReset); // Earlier reset
|
|
66
|
+
});
|
|
67
|
+
it('should return not limited when under thresholds', async () => {
|
|
68
|
+
vi.mocked(getUsage).mockResolvedValue({
|
|
69
|
+
fiveHourPercent: 50,
|
|
70
|
+
weeklyPercent: 75,
|
|
71
|
+
fiveHourResetsAt: null,
|
|
72
|
+
weeklyResetsAt: null,
|
|
73
|
+
});
|
|
74
|
+
const result = await checkRateLimitStatus();
|
|
75
|
+
expect(result).not.toBeNull();
|
|
76
|
+
expect(result.fiveHourLimited).toBe(false);
|
|
77
|
+
expect(result.weeklyLimited).toBe(false);
|
|
78
|
+
expect(result.isLimited).toBe(false);
|
|
79
|
+
expect(result.nextResetAt).toBeNull();
|
|
80
|
+
expect(result.timeUntilResetMs).toBeNull();
|
|
81
|
+
});
|
|
82
|
+
it('should handle API errors gracefully', async () => {
|
|
83
|
+
vi.mocked(getUsage).mockRejectedValue(new Error('API error'));
|
|
84
|
+
const result = await checkRateLimitStatus();
|
|
85
|
+
expect(result).toBeNull();
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe('formatTimeUntilReset', () => {
|
|
89
|
+
it('should format hours and minutes', () => {
|
|
90
|
+
const twoHours = 2 * 60 * 60 * 1000 + 30 * 60 * 1000; // 2h 30m
|
|
91
|
+
expect(formatTimeUntilReset(twoHours)).toBe('2h 30m');
|
|
92
|
+
});
|
|
93
|
+
it('should format minutes and seconds', () => {
|
|
94
|
+
const fiveMinutes = 5 * 60 * 1000 + 45 * 1000; // 5m 45s
|
|
95
|
+
expect(formatTimeUntilReset(fiveMinutes)).toBe('5m 45s');
|
|
96
|
+
});
|
|
97
|
+
it('should format seconds only', () => {
|
|
98
|
+
const thirtySeconds = 30 * 1000;
|
|
99
|
+
expect(formatTimeUntilReset(thirtySeconds)).toBe('30s');
|
|
100
|
+
});
|
|
101
|
+
it('should return "now" for zero or negative', () => {
|
|
102
|
+
expect(formatTimeUntilReset(0)).toBe('now');
|
|
103
|
+
expect(formatTimeUntilReset(-1000)).toBe('now');
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
describe('formatRateLimitStatus', () => {
|
|
107
|
+
it('should format not limited status', () => {
|
|
108
|
+
const status = {
|
|
109
|
+
fiveHourLimited: false,
|
|
110
|
+
weeklyLimited: false,
|
|
111
|
+
isLimited: false,
|
|
112
|
+
fiveHourResetsAt: null,
|
|
113
|
+
weeklyResetsAt: null,
|
|
114
|
+
nextResetAt: null,
|
|
115
|
+
timeUntilResetMs: null,
|
|
116
|
+
lastCheckedAt: new Date(),
|
|
117
|
+
};
|
|
118
|
+
expect(formatRateLimitStatus(status)).toBe('Not rate limited');
|
|
119
|
+
});
|
|
120
|
+
it('should format 5-hour limit', () => {
|
|
121
|
+
const status = {
|
|
122
|
+
fiveHourLimited: true,
|
|
123
|
+
weeklyLimited: false,
|
|
124
|
+
isLimited: true,
|
|
125
|
+
fiveHourResetsAt: new Date(),
|
|
126
|
+
weeklyResetsAt: null,
|
|
127
|
+
nextResetAt: new Date(),
|
|
128
|
+
timeUntilResetMs: 3600000, // 1 hour
|
|
129
|
+
lastCheckedAt: new Date(),
|
|
130
|
+
};
|
|
131
|
+
const result = formatRateLimitStatus(status);
|
|
132
|
+
expect(result).toContain('5-hour limit reached');
|
|
133
|
+
expect(result).toContain('1h 0m');
|
|
134
|
+
});
|
|
135
|
+
it('should format weekly limit', () => {
|
|
136
|
+
const status = {
|
|
137
|
+
fiveHourLimited: false,
|
|
138
|
+
weeklyLimited: true,
|
|
139
|
+
isLimited: true,
|
|
140
|
+
fiveHourResetsAt: null,
|
|
141
|
+
weeklyResetsAt: new Date(),
|
|
142
|
+
nextResetAt: new Date(),
|
|
143
|
+
timeUntilResetMs: 86400000, // 1 day
|
|
144
|
+
lastCheckedAt: new Date(),
|
|
145
|
+
};
|
|
146
|
+
const result = formatRateLimitStatus(status);
|
|
147
|
+
expect(result).toContain('Weekly limit reached');
|
|
148
|
+
expect(result).toContain('24h 0m');
|
|
149
|
+
});
|
|
150
|
+
it('should format both limits', () => {
|
|
151
|
+
const status = {
|
|
152
|
+
fiveHourLimited: true,
|
|
153
|
+
weeklyLimited: true,
|
|
154
|
+
isLimited: true,
|
|
155
|
+
fiveHourResetsAt: new Date(),
|
|
156
|
+
weeklyResetsAt: new Date(),
|
|
157
|
+
nextResetAt: new Date(),
|
|
158
|
+
timeUntilResetMs: 3600000,
|
|
159
|
+
lastCheckedAt: new Date(),
|
|
160
|
+
};
|
|
161
|
+
const result = formatRateLimitStatus(status);
|
|
162
|
+
expect(result).toContain('5-hour limit reached');
|
|
163
|
+
expect(result).toContain('Weekly limit reached');
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=rate-limit-monitor.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit-monitor.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/rate-limit-monitor.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmux-detector.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/tmux-detector.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for tmux-detector.ts
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
5
|
+
import { analyzePaneContent, isTmuxAvailable, listTmuxPanes, capturePaneContent, formatBlockedPanesSummary, } from '../../features/rate-limit-wait/tmux-detector.js';
|
|
6
|
+
// Mock child_process
|
|
7
|
+
vi.mock('child_process', () => ({
|
|
8
|
+
execSync: vi.fn(),
|
|
9
|
+
spawnSync: vi.fn(),
|
|
10
|
+
}));
|
|
11
|
+
import { execSync, spawnSync } from 'child_process';
|
|
12
|
+
describe('tmux-detector', () => {
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
vi.clearAllMocks();
|
|
15
|
+
});
|
|
16
|
+
describe('analyzePaneContent', () => {
|
|
17
|
+
it('should detect rate limit messages with Claude Code context', () => {
|
|
18
|
+
const content = `
|
|
19
|
+
Claude Code v1.2.3
|
|
20
|
+
You've reached your rate limit. Please wait for the limit to reset.
|
|
21
|
+
[1] Continue when ready
|
|
22
|
+
[2] Exit
|
|
23
|
+
`;
|
|
24
|
+
const result = analyzePaneContent(content);
|
|
25
|
+
expect(result.hasClaudeCode).toBe(true);
|
|
26
|
+
expect(result.hasRateLimitMessage).toBe(true);
|
|
27
|
+
expect(result.isBlocked).toBe(true);
|
|
28
|
+
expect(result.confidence).toBeGreaterThan(0.5);
|
|
29
|
+
});
|
|
30
|
+
it('should detect 5-hour rate limit', () => {
|
|
31
|
+
const content = `
|
|
32
|
+
Claude Code assistant
|
|
33
|
+
5-hour usage limit reached
|
|
34
|
+
[1] Wait for reset
|
|
35
|
+
`;
|
|
36
|
+
const result = analyzePaneContent(content);
|
|
37
|
+
expect(result.hasRateLimitMessage).toBe(true);
|
|
38
|
+
expect(result.rateLimitType).toBe('five_hour');
|
|
39
|
+
});
|
|
40
|
+
it('should detect weekly rate limit', () => {
|
|
41
|
+
const content = `
|
|
42
|
+
Claude Code
|
|
43
|
+
Weekly usage quota exceeded
|
|
44
|
+
Please try again later
|
|
45
|
+
`;
|
|
46
|
+
const result = analyzePaneContent(content);
|
|
47
|
+
expect(result.hasRateLimitMessage).toBe(true);
|
|
48
|
+
expect(result.rateLimitType).toBe('weekly');
|
|
49
|
+
});
|
|
50
|
+
it('should not flag content without Claude Code indicators', () => {
|
|
51
|
+
const content = `
|
|
52
|
+
vim test.js
|
|
53
|
+
Hello World
|
|
54
|
+
`;
|
|
55
|
+
const result = analyzePaneContent(content);
|
|
56
|
+
expect(result.hasClaudeCode).toBe(false);
|
|
57
|
+
expect(result.isBlocked).toBe(false);
|
|
58
|
+
});
|
|
59
|
+
it('should not flag rate limit messages in non-Claude contexts', () => {
|
|
60
|
+
const content = `
|
|
61
|
+
curl api.example.com
|
|
62
|
+
Error: rate limit exceeded
|
|
63
|
+
`;
|
|
64
|
+
const result = analyzePaneContent(content);
|
|
65
|
+
expect(result.hasClaudeCode).toBe(false);
|
|
66
|
+
expect(result.hasRateLimitMessage).toBe(true);
|
|
67
|
+
expect(result.isBlocked).toBe(false); // No Claude context
|
|
68
|
+
});
|
|
69
|
+
it('should handle empty content', () => {
|
|
70
|
+
const result = analyzePaneContent('');
|
|
71
|
+
expect(result.hasClaudeCode).toBe(false);
|
|
72
|
+
expect(result.hasRateLimitMessage).toBe(false);
|
|
73
|
+
expect(result.isBlocked).toBe(false);
|
|
74
|
+
expect(result.confidence).toBe(0);
|
|
75
|
+
});
|
|
76
|
+
it('should detect waiting patterns', () => {
|
|
77
|
+
const content = `
|
|
78
|
+
Claude assistant
|
|
79
|
+
Rate limit reached
|
|
80
|
+
[1] Continue
|
|
81
|
+
[2] Cancel
|
|
82
|
+
`;
|
|
83
|
+
const result = analyzePaneContent(content);
|
|
84
|
+
expect(result.confidence).toBeGreaterThan(0.6);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('isTmuxAvailable', () => {
|
|
88
|
+
it('should return true when tmux is installed', () => {
|
|
89
|
+
vi.mocked(spawnSync).mockReturnValue({
|
|
90
|
+
status: 0,
|
|
91
|
+
stdout: '/usr/bin/tmux\n',
|
|
92
|
+
stderr: '',
|
|
93
|
+
signal: null,
|
|
94
|
+
pid: 1234,
|
|
95
|
+
output: [],
|
|
96
|
+
});
|
|
97
|
+
expect(isTmuxAvailable()).toBe(true);
|
|
98
|
+
});
|
|
99
|
+
it('should return false when tmux is not installed', () => {
|
|
100
|
+
vi.mocked(spawnSync).mockReturnValue({
|
|
101
|
+
status: 1,
|
|
102
|
+
stdout: '',
|
|
103
|
+
stderr: '',
|
|
104
|
+
signal: null,
|
|
105
|
+
pid: 1234,
|
|
106
|
+
output: [],
|
|
107
|
+
});
|
|
108
|
+
expect(isTmuxAvailable()).toBe(false);
|
|
109
|
+
});
|
|
110
|
+
it('should return false when spawnSync throws', () => {
|
|
111
|
+
vi.mocked(spawnSync).mockImplementation(() => {
|
|
112
|
+
throw new Error('Command not found');
|
|
113
|
+
});
|
|
114
|
+
expect(isTmuxAvailable()).toBe(false);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
describe('listTmuxPanes', () => {
|
|
118
|
+
it('should parse tmux pane list correctly', () => {
|
|
119
|
+
vi.mocked(spawnSync).mockReturnValue({
|
|
120
|
+
status: 0,
|
|
121
|
+
stdout: '/usr/bin/tmux',
|
|
122
|
+
stderr: '',
|
|
123
|
+
signal: null,
|
|
124
|
+
pid: 1234,
|
|
125
|
+
output: [],
|
|
126
|
+
});
|
|
127
|
+
vi.mocked(execSync).mockReturnValue('main:0.0 %0 1 dev Claude\nmain:0.1 %1 0 dev Other\n');
|
|
128
|
+
const panes = listTmuxPanes();
|
|
129
|
+
expect(panes).toHaveLength(2);
|
|
130
|
+
expect(panes[0]).toEqual({
|
|
131
|
+
id: '%0',
|
|
132
|
+
session: 'main',
|
|
133
|
+
windowIndex: 0,
|
|
134
|
+
windowName: 'dev',
|
|
135
|
+
paneIndex: 0,
|
|
136
|
+
title: 'Claude',
|
|
137
|
+
isActive: true,
|
|
138
|
+
});
|
|
139
|
+
expect(panes[1]).toEqual({
|
|
140
|
+
id: '%1',
|
|
141
|
+
session: 'main',
|
|
142
|
+
windowIndex: 0,
|
|
143
|
+
windowName: 'dev',
|
|
144
|
+
paneIndex: 1,
|
|
145
|
+
title: 'Other',
|
|
146
|
+
isActive: false,
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
it('should return empty array when tmux not available', () => {
|
|
150
|
+
vi.mocked(spawnSync).mockReturnValue({
|
|
151
|
+
status: 1,
|
|
152
|
+
stdout: '',
|
|
153
|
+
stderr: '',
|
|
154
|
+
signal: null,
|
|
155
|
+
pid: 1234,
|
|
156
|
+
output: [],
|
|
157
|
+
});
|
|
158
|
+
const panes = listTmuxPanes();
|
|
159
|
+
expect(panes).toEqual([]);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
describe('capturePaneContent', () => {
|
|
163
|
+
it('should capture pane content', () => {
|
|
164
|
+
vi.mocked(spawnSync).mockReturnValue({
|
|
165
|
+
status: 0,
|
|
166
|
+
stdout: '/usr/bin/tmux',
|
|
167
|
+
stderr: '',
|
|
168
|
+
signal: null,
|
|
169
|
+
pid: 1234,
|
|
170
|
+
output: [],
|
|
171
|
+
});
|
|
172
|
+
vi.mocked(execSync).mockReturnValue('Line 1\nLine 2\nLine 3\n');
|
|
173
|
+
const content = capturePaneContent('%0', 3);
|
|
174
|
+
expect(content).toBe('Line 1\nLine 2\nLine 3\n');
|
|
175
|
+
expect(execSync).toHaveBeenCalledWith("tmux capture-pane -t '%0' -p -S -3", expect.any(Object));
|
|
176
|
+
});
|
|
177
|
+
it('should return empty string when tmux not available', () => {
|
|
178
|
+
vi.mocked(spawnSync).mockReturnValue({
|
|
179
|
+
status: 1,
|
|
180
|
+
stdout: '',
|
|
181
|
+
stderr: '',
|
|
182
|
+
signal: null,
|
|
183
|
+
pid: 1234,
|
|
184
|
+
output: [],
|
|
185
|
+
});
|
|
186
|
+
const content = capturePaneContent('%0');
|
|
187
|
+
expect(content).toBe('');
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
describe('security: input validation', () => {
|
|
191
|
+
it('should reject invalid pane IDs in capturePaneContent', () => {
|
|
192
|
+
vi.mocked(spawnSync).mockReturnValue({
|
|
193
|
+
status: 0,
|
|
194
|
+
stdout: '/usr/bin/tmux',
|
|
195
|
+
stderr: '',
|
|
196
|
+
signal: null,
|
|
197
|
+
pid: 1234,
|
|
198
|
+
output: [],
|
|
199
|
+
});
|
|
200
|
+
// Valid pane ID should work
|
|
201
|
+
vi.mocked(execSync).mockReturnValue('content');
|
|
202
|
+
const validResult = capturePaneContent('%0');
|
|
203
|
+
expect(validResult).toBe('content');
|
|
204
|
+
// Invalid pane IDs should return empty string (not execute command)
|
|
205
|
+
const invalidIds = [
|
|
206
|
+
'; rm -rf /',
|
|
207
|
+
'%0; echo hacked',
|
|
208
|
+
'$(whoami)',
|
|
209
|
+
'%0`id`',
|
|
210
|
+
'../etc/passwd',
|
|
211
|
+
'',
|
|
212
|
+
'abc',
|
|
213
|
+
];
|
|
214
|
+
for (const invalidId of invalidIds) {
|
|
215
|
+
vi.mocked(execSync).mockClear();
|
|
216
|
+
const result = capturePaneContent(invalidId);
|
|
217
|
+
expect(result).toBe('');
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
it('should validate lines parameter bounds', () => {
|
|
221
|
+
vi.mocked(spawnSync).mockReturnValue({
|
|
222
|
+
status: 0,
|
|
223
|
+
stdout: '/usr/bin/tmux',
|
|
224
|
+
stderr: '',
|
|
225
|
+
signal: null,
|
|
226
|
+
pid: 1234,
|
|
227
|
+
output: [],
|
|
228
|
+
});
|
|
229
|
+
vi.mocked(execSync).mockReturnValue('content');
|
|
230
|
+
// Should clamp negative to 1
|
|
231
|
+
capturePaneContent('%0', -5);
|
|
232
|
+
expect(execSync).toHaveBeenCalledWith(expect.stringContaining('-S -1'), expect.any(Object));
|
|
233
|
+
// Should clamp excessive values to 100
|
|
234
|
+
vi.mocked(execSync).mockClear();
|
|
235
|
+
capturePaneContent('%0', 1000);
|
|
236
|
+
expect(execSync).toHaveBeenCalledWith(expect.stringContaining('-S -100'), expect.any(Object));
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
describe('formatBlockedPanesSummary', () => {
|
|
240
|
+
it('should format empty list', () => {
|
|
241
|
+
const result = formatBlockedPanesSummary([]);
|
|
242
|
+
expect(result).toBe('No blocked Claude Code sessions detected.');
|
|
243
|
+
});
|
|
244
|
+
it('should format blocked panes', () => {
|
|
245
|
+
const panes = [
|
|
246
|
+
{
|
|
247
|
+
id: '%0',
|
|
248
|
+
session: 'main',
|
|
249
|
+
windowIndex: 0,
|
|
250
|
+
windowName: 'dev',
|
|
251
|
+
paneIndex: 0,
|
|
252
|
+
isActive: true,
|
|
253
|
+
analysis: {
|
|
254
|
+
hasClaudeCode: true,
|
|
255
|
+
hasRateLimitMessage: true,
|
|
256
|
+
isBlocked: true,
|
|
257
|
+
rateLimitType: 'five_hour',
|
|
258
|
+
confidence: 0.9,
|
|
259
|
+
},
|
|
260
|
+
firstDetectedAt: new Date(),
|
|
261
|
+
resumeAttempted: false,
|
|
262
|
+
},
|
|
263
|
+
];
|
|
264
|
+
const result = formatBlockedPanesSummary(panes);
|
|
265
|
+
expect(result).toContain('Found 1 blocked');
|
|
266
|
+
expect(result).toContain('%0');
|
|
267
|
+
expect(result).toContain('five_hour');
|
|
268
|
+
expect(result).toContain('90%');
|
|
269
|
+
});
|
|
270
|
+
it('should show resume status', () => {
|
|
271
|
+
const panes = [
|
|
272
|
+
{
|
|
273
|
+
id: '%0',
|
|
274
|
+
session: 'main',
|
|
275
|
+
windowIndex: 0,
|
|
276
|
+
windowName: 'dev',
|
|
277
|
+
paneIndex: 0,
|
|
278
|
+
isActive: true,
|
|
279
|
+
analysis: {
|
|
280
|
+
hasClaudeCode: true,
|
|
281
|
+
hasRateLimitMessage: true,
|
|
282
|
+
isBlocked: true,
|
|
283
|
+
confidence: 0.8,
|
|
284
|
+
},
|
|
285
|
+
firstDetectedAt: new Date(),
|
|
286
|
+
resumeAttempted: true,
|
|
287
|
+
resumeSuccessful: true,
|
|
288
|
+
},
|
|
289
|
+
];
|
|
290
|
+
const result = formatBlockedPanesSummary(panes);
|
|
291
|
+
expect(result).toContain('[RESUMED]');
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
//# sourceMappingURL=tmux-detector.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmux-detector.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/tmux-detector.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAa,MAAM,QAAQ,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,kBAAkB,EAElB,yBAAyB,GAC1B,MAAM,iDAAiD,CAAC;AAGzD,qBAAqB;AACrB,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9B,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;IACjB,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;CACnB,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEpD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,OAAO,GAAG;;;;;OAKf,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAE3C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,OAAO,GAAG;;;;OAIf,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAE3C,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,OAAO,GAAG;;;;OAIf,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAE3C,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,OAAO,GAAG;;;OAGf,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAE3C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,OAAO,GAAG;;;OAGf,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAE3C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,oBAAoB;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAEtC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,OAAO,GAAG;;;;;OAKf,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAE3C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC;gBACnC,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,iBAAiB;gBACzB,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,IAAI;gBACZ,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,EAAE;aACX,CAAC,CAAC;YAEH,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC;gBACnC,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,IAAI;gBACZ,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,EAAE;aACX,CAAC,CAAC;YAEH,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE;gBAC3C,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC;gBACnC,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,IAAI;gBACZ,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,EAAE;aACX,CAAC,CAAC;YAEH,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,CACjC,qDAAqD,CACtD,CAAC;YAEF,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAE9B,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBACvB,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,MAAM;gBACf,WAAW,EAAE,CAAC;gBACd,UAAU,EAAE,KAAK;gBACjB,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,QAAQ;gBACf,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBACvB,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,MAAM;gBACf,WAAW,EAAE,CAAC;gBACd,UAAU,EAAE,KAAK;gBACjB,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,OAAO;gBACd,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC;gBACnC,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,IAAI;gBACZ,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,EAAE;aACX,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;YAE9B,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC;gBACnC,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,IAAI;gBACZ,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,EAAE;aACX,CAAC,CAAC;YAEH,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAC;YAEhE,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAE5C,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CACnC,oCAAoC,EACpC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC;gBACnC,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,IAAI;gBACZ,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,EAAE;aACX,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAEzC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC;gBACnC,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,IAAI;gBACZ,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,EAAE;aACX,CAAC,CAAC;YAEH,4BAA4B;YAC5B,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAC/C,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEpC,oEAAoE;YACpE,MAAM,UAAU,GAAG;gBACjB,YAAY;gBACZ,iBAAiB;gBACjB,WAAW;gBACX,QAAQ;gBACR,eAAe;gBACf,EAAE;gBACF,KAAK;aACN,CAAC;YAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC;gBAChC,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC;gBACnC,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,IAAI;gBACZ,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,EAAE;aACX,CAAC,CAAC;YAEH,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAE/C,6BAA6B;YAC7B,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CACnC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAChC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC;YAEF,uCAAuC;YACvC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC;YAChC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CACnC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAClC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,MAAM,GAAG,yBAAyB,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,KAAK,GAAkB;gBAC3B;oBACE,EAAE,EAAE,IAAI;oBACR,OAAO,EAAE,MAAM;oBACf,WAAW,EAAE,CAAC;oBACd,UAAU,EAAE,KAAK;oBACjB,SAAS,EAAE,CAAC;oBACZ,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE;wBACR,aAAa,EAAE,IAAI;wBACnB,mBAAmB,EAAE,IAAI;wBACzB,SAAS,EAAE,IAAI;wBACf,aAAa,EAAE,WAAW;wBAC1B,UAAU,EAAE,GAAG;qBAChB;oBACD,eAAe,EAAE,IAAI,IAAI,EAAE;oBAC3B,eAAe,EAAE,KAAK;iBACvB;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;YAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,KAAK,GAAkB;gBAC3B;oBACE,EAAE,EAAE,IAAI;oBACR,OAAO,EAAE,MAAM;oBACf,WAAW,EAAE,CAAC;oBACd,UAAU,EAAE,KAAK;oBACjB,SAAS,EAAE,CAAC;oBACZ,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE;wBACR,aAAa,EAAE,IAAI;wBACnB,mBAAmB,EAAE,IAAI;wBACzB,SAAS,EAAE,IAAI;wBACf,UAAU,EAAE,GAAG;qBAChB;oBACD,eAAe,EAAE,IAAI,IAAI,EAAE;oBAC3B,eAAe,EAAE,IAAI;oBACrB,gBAAgB,EAAE,IAAI;iBACvB;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;YAEhD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wait Command
|
|
3
|
+
*
|
|
4
|
+
* CLI commands for rate limit wait and auto-resume functionality.
|
|
5
|
+
*
|
|
6
|
+
* Design Philosophy (aligned with oh-my-claudecode values):
|
|
7
|
+
* - Zero learning curve: `omc wait` just works
|
|
8
|
+
* - Smart defaults: Auto-detects tmux and daemon status
|
|
9
|
+
* - Minimal commands: Most users only need `omc wait`
|
|
10
|
+
*
|
|
11
|
+
* Commands:
|
|
12
|
+
* omc wait - Smart command: shows status, offers to start daemon if needed
|
|
13
|
+
* omc wait status - Show current rate limit and daemon status
|
|
14
|
+
* omc wait daemon start - Start the background daemon
|
|
15
|
+
* omc wait daemon stop - Stop the daemon
|
|
16
|
+
* omc wait detect - Scan for blocked Claude Code sessions
|
|
17
|
+
*/
|
|
18
|
+
export interface WaitOptions {
|
|
19
|
+
json?: boolean;
|
|
20
|
+
start?: boolean;
|
|
21
|
+
stop?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface WaitStatusOptions {
|
|
24
|
+
json?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface WaitDaemonOptions {
|
|
27
|
+
verbose?: boolean;
|
|
28
|
+
foreground?: boolean;
|
|
29
|
+
interval?: number;
|
|
30
|
+
}
|
|
31
|
+
export interface WaitDetectOptions {
|
|
32
|
+
json?: boolean;
|
|
33
|
+
lines?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Smart wait command - the main entry point
|
|
37
|
+
* Follows "zero learning curve" philosophy
|
|
38
|
+
*/
|
|
39
|
+
export declare function waitCommand(options: WaitOptions): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Show current rate limit and daemon status
|
|
42
|
+
*/
|
|
43
|
+
export declare function waitStatusCommand(options: WaitStatusOptions): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Start/stop the daemon
|
|
46
|
+
*/
|
|
47
|
+
export declare function waitDaemonCommand(action: 'start' | 'stop', options: WaitDaemonOptions): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Detect blocked Claude Code sessions
|
|
50
|
+
*/
|
|
51
|
+
export declare function waitDetectCommand(options: WaitDetectOptions): Promise<void>;
|
|
52
|
+
//# sourceMappingURL=wait.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAmBH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DrE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuEjF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,OAAO,GAAG,MAAM,EACxB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCjF"}
|