ccmanager 4.2.2 → 4.2.3

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.
@@ -111,6 +111,14 @@ export class ClaudeStateDetector extends BaseStateDetector {
111
111
  if (fullLowerContent.includes('esc to cancel')) {
112
112
  return 'waiting_input';
113
113
  }
114
+ // Check for permission menus without question phrasing, e.g.
115
+ // "Claude in Chrome wants to navigate on example.com" with:
116
+ // ❯ 1. Allow
117
+ // 2. Deny (esc)
118
+ // The numbered "Deny (esc)" option is the stable marker across variants.
119
+ if (/\d+\.\s*deny\s*\(esc\)/.test(fullLowerContent)) {
120
+ return 'waiting_input';
121
+ }
114
122
  // Content above the prompt box only for busy detection
115
123
  const abovePromptBox = this.getRecentContentAbovePromptBox(terminal, 30);
116
124
  const aboveLowerContent = abovePromptBox.toLowerCase();
@@ -237,6 +237,37 @@ describe('ClaudeStateDetector', () => {
237
237
  // Assert
238
238
  expect(state).toBe('waiting_input');
239
239
  });
240
+ it('should detect waiting_input for Claude in Chrome permission prompt (Allow/Deny)', () => {
241
+ // Arrange - browser permission prompt without "Do you want" phrasing
242
+ terminal = createMockTerminal([
243
+ '──────────────────────────────',
244
+ ' Claude in Chrome wants to create a browser window and read your tabs',
245
+ '',
246
+ ' ❯ 1. Allow',
247
+ ' 2. Deny (esc)',
248
+ ]);
249
+ // Act
250
+ const state = detector.detectState(terminal, 'idle');
251
+ // Assert
252
+ expect(state).toBe('waiting_input');
253
+ });
254
+ it('should detect waiting_input for Claude in Chrome navigation prompt (Allow all / Deny)', () => {
255
+ // Arrange - three-option variant with "Allow all actions" entry
256
+ terminal = createMockTerminal([
257
+ '──────────────────────────────',
258
+ ' Claude in Chrome wants to navigate on example.com',
259
+ '',
260
+ ' https://example.com/app',
261
+ '',
262
+ ' ❯ 1. Allow',
263
+ ' 2. Allow all actions on example.com for this session',
264
+ ' 3. Deny (esc)',
265
+ ]);
266
+ // Act
267
+ const state = detector.detectState(terminal, 'idle');
268
+ // Assert
269
+ expect(state).toBe('waiting_input');
270
+ });
240
271
  it('should prioritize "esc to cancel" over "esc to interrupt" when both above prompt box', () => {
241
272
  // Arrange
242
273
  terminal = createMockTerminal([
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccmanager",
3
- "version": "4.2.2",
3
+ "version": "4.2.3",
4
4
  "description": "TUI application for managing multiple Claude Code sessions across Git worktrees",
5
5
  "license": "MIT",
6
6
  "author": "Kodai Kabasawa",
@@ -41,11 +41,11 @@
41
41
  "bin"
42
42
  ],
43
43
  "optionalDependencies": {
44
- "@kodaikabasawa/ccmanager-darwin-arm64": "4.2.2",
45
- "@kodaikabasawa/ccmanager-darwin-x64": "4.2.2",
46
- "@kodaikabasawa/ccmanager-linux-arm64": "4.2.2",
47
- "@kodaikabasawa/ccmanager-linux-x64": "4.2.2",
48
- "@kodaikabasawa/ccmanager-win32-x64": "4.2.2"
44
+ "@kodaikabasawa/ccmanager-darwin-arm64": "4.2.3",
45
+ "@kodaikabasawa/ccmanager-darwin-x64": "4.2.3",
46
+ "@kodaikabasawa/ccmanager-linux-arm64": "4.2.3",
47
+ "@kodaikabasawa/ccmanager-linux-x64": "4.2.3",
48
+ "@kodaikabasawa/ccmanager-win32-x64": "4.2.3"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@eslint/js": "^9.28.0",