codekin 0.3.7 → 0.4.1

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 (50) hide show
  1. package/README.md +2 -1
  2. package/dist/assets/index-BAdQqYEY.js +182 -0
  3. package/dist/assets/index-CeZYNLWt.css +1 -0
  4. package/dist/index.html +2 -2
  5. package/package.json +8 -2
  6. package/server/dist/approval-manager.d.ts +44 -8
  7. package/server/dist/approval-manager.js +262 -23
  8. package/server/dist/approval-manager.js.map +1 -1
  9. package/server/dist/claude-process.d.ts +16 -0
  10. package/server/dist/claude-process.js +42 -10
  11. package/server/dist/claude-process.js.map +1 -1
  12. package/server/dist/commit-event-handler.d.ts +41 -0
  13. package/server/dist/commit-event-handler.js +99 -0
  14. package/server/dist/commit-event-handler.js.map +1 -0
  15. package/server/dist/commit-event-hooks.d.ts +35 -0
  16. package/server/dist/commit-event-hooks.js +177 -0
  17. package/server/dist/commit-event-hooks.js.map +1 -0
  18. package/server/dist/crypto-utils.js +10 -5
  19. package/server/dist/crypto-utils.js.map +1 -1
  20. package/server/dist/diff-parser.d.ts +23 -0
  21. package/server/dist/diff-parser.js +242 -0
  22. package/server/dist/diff-parser.js.map +1 -0
  23. package/server/dist/session-manager.d.ts +27 -8
  24. package/server/dist/session-manager.js +375 -35
  25. package/server/dist/session-manager.js.map +1 -1
  26. package/server/dist/session-routes.js +109 -4
  27. package/server/dist/session-routes.js.map +1 -1
  28. package/server/dist/stepflow-handler.js +17 -3
  29. package/server/dist/stepflow-handler.js.map +1 -1
  30. package/server/dist/tsconfig.tsbuildinfo +1 -1
  31. package/server/dist/types.d.ts +62 -1
  32. package/server/dist/upload-routes.d.ts +1 -1
  33. package/server/dist/upload-routes.js +46 -16
  34. package/server/dist/upload-routes.js.map +1 -1
  35. package/server/dist/webhook-workspace.js +5 -2
  36. package/server/dist/webhook-workspace.js.map +1 -1
  37. package/server/dist/workflow-loader.d.ts +6 -0
  38. package/server/dist/workflow-loader.js +11 -0
  39. package/server/dist/workflow-loader.js.map +1 -1
  40. package/server/dist/workflow-routes.d.ts +5 -1
  41. package/server/dist/workflow-routes.js +48 -7
  42. package/server/dist/workflow-routes.js.map +1 -1
  43. package/server/dist/ws-message-handler.js +20 -0
  44. package/server/dist/ws-message-handler.js.map +1 -1
  45. package/server/dist/ws-server.js +19 -3
  46. package/server/dist/ws-server.js.map +1 -1
  47. package/server/workflows/commit-review.md +22 -0
  48. package/server/workflows/docs-audit.weekly.md +97 -0
  49. package/dist/assets/index-Dc76fIdG.js +0 -174
  50. package/dist/assets/index-DoL2Uppj.css +0 -1
@@ -11,13 +11,27 @@ import { join } from 'path';
11
11
  import { DATA_DIR } from './config.js';
12
12
  const REPO_APPROVALS_FILE = join(DATA_DIR, 'repo-approvals.json');
13
13
  const PERSIST_DEBOUNCE_MS = 2000;
14
+ /**
15
+ * Minimum number of repos that must have independently approved the same
16
+ * tool/command/pattern before it is auto-approved globally (cross-repo).
17
+ */
18
+ const CROSS_REPO_THRESHOLD = 2;
14
19
  export class ApprovalManager {
15
20
  /** Repo-level auto-approval store, keyed by workingDir (repo path). */
16
21
  repoApprovals = new Map();
17
22
  _approvalPersistTimer = null;
18
23
  constructor() {
24
+ this.validatePrefixSets();
19
25
  this.restoreRepoApprovalsFromDisk();
20
26
  }
27
+ /** Warn at startup if any single-token prefix appears in both allow and deny lists. */
28
+ validatePrefixSets() {
29
+ for (const prefix of ApprovalManager.PATTERNABLE_PREFIXES) {
30
+ if (ApprovalManager.NEVER_PATTERN_PREFIXES.has(prefix)) {
31
+ console.warn(`[approval-manager] WARNING: "${prefix}" is in both PATTERNABLE_PREFIXES and NEVER_PATTERN_PREFIXES — deny takes precedence for single-token; two-token allow overrides first-token deny`);
32
+ }
33
+ }
34
+ }
21
35
  /** Get or create the approval entry for a repo (workingDir). */
22
36
  getRepoApprovalEntry(workingDir) {
23
37
  let entry = this.repoApprovals.get(workingDir);
@@ -39,35 +53,76 @@ export class ApprovalManager {
39
53
  this.persistRepoApprovalsDebounced();
40
54
  }
41
55
  /**
42
- * Command prefixes where prefix-based auto-approval is safe.
43
- * Only commands whose behavior is determined by later arguments (not by target)
44
- * should be listed here. Dangerous commands like rm, sudo, curl, etc. require
45
- * exact match to prevent escalation (e.g. approving `rm -rf /tmp/x` should NOT
46
- * also approve `rm -rf /`).
56
+ * Prefixes where pattern-based grouping is safe. Used by derivePattern()
57
+ * and compactExactCommands() to create "prefix *" patterns.
58
+ *
59
+ * IMPORTANT: Inclusion here does NOT auto-approve anything the user
60
+ * still explicitly approves the pattern. It only means "we can group
61
+ * `git push origin feat/x` and `git push origin feat/y` into one
62
+ * `git push *` pattern" instead of storing each as an exact match.
47
63
  */
48
- static SAFE_PREFIX_COMMANDS = new Set([
64
+ static PATTERNABLE_PREFIXES = new Set([
65
+ // Git operations — safe to group by subcommand
49
66
  'git add', 'git commit', 'git diff', 'git log', 'git show', 'git stash',
50
67
  'git status', 'git branch', 'git checkout', 'git switch', 'git rebase',
51
68
  'git fetch', 'git pull', 'git merge', 'git tag', 'git rev-parse',
69
+ 'git remote', 'git cherry-pick',
70
+ 'git worktree', 'git archive',
71
+ // GitHub CLI
72
+ 'gh pr', 'gh repo', 'gh run', 'gh search',
73
+ 'gh issue', 'gh release',
74
+ // Package managers — Node (two-token subcommands only; bare executors are in NEVER list)
52
75
  'npm run', 'npm test', 'npm install', 'npm ci', 'npm exec',
53
- 'npx', 'node', 'bun', 'deno',
76
+ 'yarn run', 'yarn test', 'yarn install', 'yarn add',
77
+ 'pnpm test', 'pnpm run', 'pnpm install',
78
+ 'pnpm --filter', 'pnpm typecheck',
79
+ 'bun run', 'bun test', 'bun install',
80
+ // Build / compile (two-token subcommands only)
54
81
  'cargo build', 'cargo test', 'cargo run', 'cargo check', 'cargo clippy',
55
82
  'make', 'cmake',
56
- 'python', 'python3', 'pip install',
83
+ 'pip install',
57
84
  'go build', 'go test', 'go run', 'go vet',
58
85
  'tsc', 'eslint', 'prettier',
86
+ // File inspection (read-only)
59
87
  'cat', 'head', 'tail', 'wc', 'sort', 'uniq', 'diff', 'less',
60
88
  'ls', 'pwd', 'echo', 'date', 'which', 'whoami', 'env', 'printenv',
61
89
  'find', 'grep', 'rg', 'ag', 'fd',
62
90
  'mkdir', 'touch',
91
+ 'file', 'du', 'stat', 'tree',
92
+ 'basename', 'dirname', 'realpath',
93
+ ]);
94
+ /**
95
+ * Prefixes that should NEVER be auto-patterned, even if the user
96
+ * clicks "Always Allow". These are stored as exact match only.
97
+ */
98
+ static NEVER_PATTERN_PREFIXES = new Set([
99
+ 'ssh', 'docker', 'docker-compose',
100
+ 'rm', 'sudo', 'curl', 'wget',
101
+ 'git reset', 'git clean',
102
+ 'git push', // cross-remote escalation risk — require exact match
103
+ 'gh api', // can perform DELETE/PUT — too broad to pattern
104
+ // Code executors — "node *" / "python *" would match arbitrary code execution
105
+ 'node', 'npx', 'python', 'python3', 'deno', 'bun', 'pm2',
63
106
  ]);
64
107
  /**
65
108
  * Check if a tool/command is auto-approved for a repo.
66
109
  * For Bash commands, uses prefix matching only for safe commands;
67
110
  * dangerous commands require exact match to prevent escalation.
111
+ *
112
+ * Falls back to cross-repo inference: if the same tool/command/pattern
113
+ * has been approved in CROSS_REPO_THRESHOLD or more other repos,
114
+ * it is auto-approved everywhere.
68
115
  */
69
116
  checkAutoApproval(workingDir, toolName, toolInput) {
70
- const approvals = this.getRepoApprovalEntry(workingDir);
117
+ if (this.checkRepoApproval(workingDir, toolName, toolInput))
118
+ return true;
119
+ return this.checkCrossRepoApproval(workingDir, toolName, toolInput);
120
+ }
121
+ /** Check approvals for a single repo (no cross-repo fallback). */
122
+ checkRepoApproval(workingDir, toolName, toolInput) {
123
+ const approvals = this.repoApprovals.get(workingDir);
124
+ if (!approvals)
125
+ return false;
71
126
  if (approvals.tools.has(toolName))
72
127
  return true;
73
128
  if (toolName === 'Bash') {
@@ -82,7 +137,7 @@ export class ApprovalManager {
82
137
  }
83
138
  // Prefix match only for safe commands
84
139
  const cmdPrefix = this.commandPrefix(cmd);
85
- if (cmdPrefix && ApprovalManager.SAFE_PREFIX_COMMANDS.has(cmdPrefix)) {
140
+ if (cmdPrefix && ApprovalManager.PATTERNABLE_PREFIXES.has(cmdPrefix)) {
86
141
  for (const approved of approvals.commands) {
87
142
  if (this.commandPrefix(approved) === cmdPrefix)
88
143
  return true;
@@ -91,6 +146,60 @@ export class ApprovalManager {
91
146
  }
92
147
  return false;
93
148
  }
149
+ /**
150
+ * Cross-repo inference: if enough other repos have approved the same
151
+ * tool/command/pattern, auto-approve it for this repo too.
152
+ */
153
+ checkCrossRepoApproval(workingDir, toolName, toolInput) {
154
+ let count = 0;
155
+ for (const [dir, entry] of this.repoApprovals) {
156
+ if (dir === workingDir)
157
+ continue;
158
+ // Check tool approval
159
+ if (toolName !== 'Bash') {
160
+ if (entry.tools.has(toolName))
161
+ count++;
162
+ }
163
+ else {
164
+ const cmd = (typeof toolInput.command === 'string' ? toolInput.command : '').trim();
165
+ let matched = false;
166
+ // Exact command match
167
+ if (entry.commands.has(cmd))
168
+ matched = true;
169
+ // Pattern match
170
+ if (!matched) {
171
+ for (const pattern of entry.patterns) {
172
+ if (this.matchesPattern(pattern, cmd)) {
173
+ matched = true;
174
+ break;
175
+ }
176
+ }
177
+ }
178
+ // Prefix match for safe commands
179
+ if (!matched) {
180
+ const cmdPrefix = this.commandPrefix(cmd);
181
+ if (cmdPrefix && ApprovalManager.PATTERNABLE_PREFIXES.has(cmdPrefix)) {
182
+ for (const approved of entry.commands) {
183
+ if (this.commandPrefix(approved) === cmdPrefix) {
184
+ matched = true;
185
+ break;
186
+ }
187
+ }
188
+ }
189
+ }
190
+ if (matched)
191
+ count++;
192
+ }
193
+ if (count >= CROSS_REPO_THRESHOLD) {
194
+ const label = toolName === 'Bash'
195
+ ? `command: ${(typeof toolInput.command === 'string' ? toolInput.command : '').slice(0, 80)}`
196
+ : `tool: ${toolName}`;
197
+ console.log(`[auto-approve] cross-repo inference (${count} repos) for ${workingDir}: ${label}`);
198
+ return true;
199
+ }
200
+ }
201
+ return false;
202
+ }
94
203
  /** Extract the command prefix (first two tokens) for prefix-based matching. */
95
204
  commandPrefix(cmd) {
96
205
  const tokens = cmd.split(/\s+/).filter(Boolean);
@@ -101,7 +210,7 @@ export class ApprovalManager {
101
210
  return `${tokens[0]} ${tokens[1]}`;
102
211
  }
103
212
  /**
104
- * Derive a glob pattern from a tool invocation for "Approve Pattern".
213
+ * Derive a glob pattern from a tool invocation for "Always Allow".
105
214
  * Returns a string like "cat *" or "git diff *", or null if no safe pattern applies.
106
215
  * Patterns use the format "<prefix> *" meaning "this prefix followed by anything".
107
216
  */
@@ -112,18 +221,25 @@ export class ApprovalManager {
112
221
  const tokens = cmd.split(/\s+/).filter(Boolean);
113
222
  if (tokens.length === 0)
114
223
  return null;
115
- // Check single-token safe commands (cat, grep, ls, etc.)
224
+ // Never pattern commands with shell meta-characters — the pattern
225
+ // would be far broader than the specific command the user approved
226
+ if (/[|;&`$(){}*?[\]~]/.test(cmd) || cmd.includes('\n'))
227
+ return null;
116
228
  const first = tokens[0];
117
- if (ApprovalManager.SAFE_PREFIX_COMMANDS.has(first)) {
229
+ const twoToken = tokens.length >= 2 ? `${tokens[0]} ${tokens[1]}` : '';
230
+ // Two-token deny-list always wins (e.g. "git push", "git reset")
231
+ if (twoToken && ApprovalManager.NEVER_PATTERN_PREFIXES.has(twoToken))
232
+ return null;
233
+ // Two-token allow-list takes priority over first-token deny
234
+ // (e.g. "bun run" is safe even though bare "bun" is denied)
235
+ if (twoToken && ApprovalManager.PATTERNABLE_PREFIXES.has(twoToken))
236
+ return `${twoToken} *`;
237
+ // First-token deny-list blocks remaining single-token patterns
238
+ if (ApprovalManager.NEVER_PATTERN_PREFIXES.has(first))
239
+ return null;
240
+ // First-token allow-list
241
+ if (ApprovalManager.PATTERNABLE_PREFIXES.has(first))
118
242
  return `${first} *`;
119
- }
120
- // Check two-token safe commands (git diff, npm run, etc.)
121
- if (tokens.length >= 2) {
122
- const twoToken = `${tokens[0]} ${tokens[1]}`;
123
- if (ApprovalManager.SAFE_PREFIX_COMMANDS.has(twoToken)) {
124
- return `${twoToken} *`;
125
- }
126
- }
127
243
  return null;
128
244
  }
129
245
  /**
@@ -137,12 +253,24 @@ export class ApprovalManager {
137
253
  }
138
254
  return cmd === pattern;
139
255
  }
140
- /** Save an "Always Allow" approval for a tool/command. */
256
+ /**
257
+ * Save an "Always Allow" approval for a tool/command.
258
+ * For Bash commands, stores a pattern when derivable (e.g. "git push *"),
259
+ * falling back to exact match only for commands without a safe pattern.
260
+ */
141
261
  saveAlwaysAllow(workingDir, toolName, toolInput) {
142
262
  if (toolName === 'Bash') {
143
263
  const cmd = (typeof toolInput.command === 'string' ? toolInput.command : '').trim();
264
+ // Try to derive a pattern first (e.g. "git diff *", "npm run *")
265
+ const pattern = this.derivePattern(toolName, toolInput);
266
+ if (pattern) {
267
+ this.addRepoApproval(workingDir, { pattern });
268
+ console.log(`[auto-approve] saved pattern for repo ${workingDir}: ${pattern}`);
269
+ return;
270
+ }
271
+ // For commands with no safe pattern, store exact match
144
272
  this.addRepoApproval(workingDir, { command: cmd });
145
- console.log(`[auto-approve] saved command for repo ${workingDir}: ${cmd.slice(0, 80)}`);
273
+ console.log(`[auto-approve] saved exact command for repo ${workingDir}: ${cmd.slice(0, 80)}`);
146
274
  }
147
275
  else {
148
276
  this.addRepoApproval(workingDir, { tool: toolName });
@@ -172,6 +300,46 @@ export class ApprovalManager {
172
300
  patterns: Array.from(entry.patterns).sort(),
173
301
  };
174
302
  }
303
+ /**
304
+ * Return approvals that are effective globally via cross-repo inference
305
+ * (approved in CROSS_REPO_THRESHOLD+ repos). Each entry includes the
306
+ * repos that contributed to it.
307
+ */
308
+ getGlobalApprovals() {
309
+ const toolCounts = new Map();
310
+ const commandCounts = new Map();
311
+ const patternCounts = new Map();
312
+ for (const [dir, entry] of this.repoApprovals) {
313
+ for (const tool of entry.tools) {
314
+ const dirs = toolCounts.get(tool) || [];
315
+ dirs.push(dir);
316
+ toolCounts.set(tool, dirs);
317
+ }
318
+ for (const cmd of entry.commands) {
319
+ const dirs = commandCounts.get(cmd) || [];
320
+ dirs.push(dir);
321
+ commandCounts.set(cmd, dirs);
322
+ }
323
+ for (const pattern of entry.patterns) {
324
+ const dirs = patternCounts.get(pattern) || [];
325
+ dirs.push(dir);
326
+ patternCounts.set(pattern, dirs);
327
+ }
328
+ }
329
+ const filterAboveThreshold = (counts) => {
330
+ const result = {};
331
+ for (const [key, dirs] of counts) {
332
+ if (dirs.length >= CROSS_REPO_THRESHOLD)
333
+ result[key] = dirs.sort();
334
+ }
335
+ return result;
336
+ };
337
+ return {
338
+ tools: filterAboveThreshold(toolCounts),
339
+ commands: filterAboveThreshold(commandCounts),
340
+ patterns: filterAboveThreshold(patternCounts),
341
+ };
342
+ }
175
343
  /** Remove an auto-approval rule for a repo (workingDir) and persist to disk.
176
344
  * Returns 'invalid' if no tool/command provided, or boolean indicating if something was deleted.
177
345
  * Pass skipPersist=true for bulk operations (caller must call persistRepoApprovals after). */
@@ -244,6 +412,77 @@ export class ApprovalManager {
244
412
  catch (err) {
245
413
  console.error('Failed to restore repo approvals from disk:', err);
246
414
  }
415
+ this.compactExactCommands();
416
+ }
417
+ /** Compact exact commands that could be represented by existing patterns. */
418
+ compactExactCommands() {
419
+ let totalRemoved = 0;
420
+ for (const [, entry] of this.repoApprovals) {
421
+ if (entry.commands.size === 0)
422
+ continue;
423
+ const toRemove = new Set();
424
+ // Phase 1: Remove exact commands already covered by existing patterns
425
+ if (entry.patterns.size > 0) {
426
+ for (const cmd of entry.commands) {
427
+ for (const pattern of entry.patterns) {
428
+ if (this.matchesPattern(pattern, cmd)) {
429
+ toRemove.add(cmd);
430
+ break;
431
+ }
432
+ }
433
+ }
434
+ }
435
+ // Phase 2: If 3+ exact commands share a patternable prefix,
436
+ // create a pattern and mark the exact commands for removal.
437
+ const prefixGroups = new Map();
438
+ for (const cmd of entry.commands) {
439
+ if (toRemove.has(cmd))
440
+ continue;
441
+ const tokens = cmd.split(/\s+/).filter(Boolean);
442
+ if (tokens.length === 0)
443
+ continue;
444
+ const firstToken = tokens[0];
445
+ let prefix = tokens.length >= 2 ? `${tokens[0]} ${tokens[1]}` : firstToken;
446
+ // Two-token deny always wins
447
+ if (ApprovalManager.NEVER_PATTERN_PREFIXES.has(prefix))
448
+ continue;
449
+ // Two-token allow takes priority over first-token deny (e.g. "bun run" safe, bare "bun" denied)
450
+ if (!ApprovalManager.PATTERNABLE_PREFIXES.has(prefix)) {
451
+ // First-token deny blocks remaining single-token patterns
452
+ if (ApprovalManager.NEVER_PATTERN_PREFIXES.has(firstToken))
453
+ continue;
454
+ if (ApprovalManager.PATTERNABLE_PREFIXES.has(firstToken)) {
455
+ prefix = firstToken;
456
+ }
457
+ else {
458
+ continue;
459
+ }
460
+ }
461
+ // Skip commands with shell meta-characters
462
+ if (/[|;&`$(){}*?[\]~]/.test(cmd) || cmd.includes('\n'))
463
+ continue;
464
+ const group = prefixGroups.get(prefix) || [];
465
+ group.push(cmd);
466
+ prefixGroups.set(prefix, group);
467
+ }
468
+ for (const [prefix, cmds] of prefixGroups) {
469
+ if (cmds.length >= 3) {
470
+ const pattern = `${prefix} *`;
471
+ if (!entry.patterns.has(pattern)) {
472
+ entry.patterns.add(pattern);
473
+ }
474
+ for (const cmd of cmds)
475
+ toRemove.add(cmd);
476
+ }
477
+ }
478
+ for (const cmd of toRemove)
479
+ entry.commands.delete(cmd);
480
+ totalRemoved += toRemove.size;
481
+ }
482
+ if (totalRemoved > 0) {
483
+ console.log(`[auto-approve] compacted ${totalRemoved} exact commands into patterns`);
484
+ this.persistRepoApprovals();
485
+ }
247
486
  }
248
487
  }
249
488
  //# sourceMappingURL=approval-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"approval-manager.js","sourceRoot":"","sources":["../approval-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"approval-manager.js","sourceRoot":"","sources":["../approval-manager.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,7 @@ export interface ClaudeProcessEvents {
29
29
  control_request: [requestId: string, toolName: string, toolInput: Record<string, unknown>];
30
30
  planning_mode: [active: boolean];
31
31
  todo_update: [tasks: TaskItem[]];
32
+ image: [base64: string, mediaType: string];
32
33
  result: [text: string, isError: boolean];
33
34
  error: [message: string];
34
35
  exit: [code: number | null, signal: string | null];
@@ -54,6 +55,14 @@ export declare class ClaudeProcess extends EventEmitter<ClaudeProcessEvents> {
54
55
  private taskSeq;
55
56
  /** Additional env vars passed to the child process (session ID, port, token). */
56
57
  private extraEnv;
58
+ /**
59
+ * @param workingDir Absolute path to the git repo where the Claude CLI runs.
60
+ * @param sessionId Claude session UUID for `--session-id`. Defaults to a random UUID
61
+ * (new conversation). Pass an existing ID to resume a session.
62
+ * @param extraEnv Additional environment variables merged into the child process env
63
+ * (e.g. `CC_WS_PORT`, `CC_AUTH_TOKEN` for port-forwarding and auth).
64
+ * @param model Claude model ID override (e.g. 'claude-opus-4-6'). Omit to use the CLI default.
65
+ */
57
66
  constructor(workingDir: string, sessionId?: string, extraEnv?: Record<string, string>, model?: string | undefined);
58
67
  /** Spawn the Claude CLI process with stream-json I/O and acceptEdits mode. */
59
68
  start(): void;
@@ -73,6 +82,13 @@ export declare class ClaudeProcess extends EventEmitter<ClaudeProcessEvents> {
73
82
  private handleAssistantMessage;
74
83
  /** Extract tool_result blocks from 'user' events and emit as tool_output. */
75
84
  private handleUserEvent;
85
+ /**
86
+ * Tools that are safe to auto-approve without user interaction.
87
+ * These are file operations and planning tools that acceptEdits mode already allows,
88
+ * plus harmless internal tools. Everything else is forwarded to the session manager
89
+ * for UI-based approval (or auto-approval registry check).
90
+ */
91
+ private static readonly AUTO_APPROVE_TOOLS;
76
92
  /**
77
93
  * Handle a control_request from the CLI.
78
94
  * With acceptEdits mode + PermissionRequest hook, most permissions go through hooks.
@@ -43,6 +43,14 @@ export class ClaudeProcess extends EventEmitter {
43
43
  taskSeq = 0;
44
44
  /** Additional env vars passed to the child process (session ID, port, token). */
45
45
  extraEnv;
46
+ /**
47
+ * @param workingDir Absolute path to the git repo where the Claude CLI runs.
48
+ * @param sessionId Claude session UUID for `--session-id`. Defaults to a random UUID
49
+ * (new conversation). Pass an existing ID to resume a session.
50
+ * @param extraEnv Additional environment variables merged into the child process env
51
+ * (e.g. `CC_WS_PORT`, `CC_AUTH_TOKEN` for port-forwarding and auth).
52
+ * @param model Claude model ID override (e.g. 'claude-opus-4-6'). Omit to use the CLI default.
53
+ */
46
54
  constructor(workingDir, sessionId, extraEnv, model) {
47
55
  super();
48
56
  this.workingDir = workingDir;
@@ -156,6 +164,13 @@ export class ClaudeProcess extends EventEmitter {
156
164
  break;
157
165
  case 'result': {
158
166
  const resultEvent = event;
167
+ // If ExitPlanMode was pending but no matching tool_result arrived
168
+ // (e.g. ID mismatch or process terminated), clear planning mode now
169
+ // so the flag doesn't get stuck across turns.
170
+ if (this.pendingExitPlanModeId) {
171
+ this.pendingExitPlanModeId = null;
172
+ this.emit('planning_mode', false);
173
+ }
159
174
  this.emit('result', resultEvent.result || '', resultEvent.is_error || false);
160
175
  // The result message signals end of turn, ready for next input
161
176
  break;
@@ -316,6 +331,16 @@ export class ClaudeProcess extends EventEmitter {
316
331
  }
317
332
  }
318
333
  }
334
+ /**
335
+ * Tools that are safe to auto-approve without user interaction.
336
+ * These are file operations and planning tools that acceptEdits mode already allows,
337
+ * plus harmless internal tools. Everything else is forwarded to the session manager
338
+ * for UI-based approval (or auto-approval registry check).
339
+ */
340
+ static AUTO_APPROVE_TOOLS = new Set([
341
+ 'Read', 'Write', 'Edit', 'Glob', 'Grep', 'NotebookEdit',
342
+ 'EnterPlanMode', 'TodoWrite', 'TodoRead', 'Task', 'TaskCreate', 'TaskUpdate',
343
+ ]);
319
344
  /**
320
345
  * Handle a control_request from the CLI.
321
346
  * With acceptEdits mode + PermissionRequest hook, most permissions go through hooks.
@@ -331,15 +356,19 @@ export class ClaudeProcess extends EventEmitter {
331
356
  // Each question has its own options and multiSelect flag; the frontend
332
357
  // walks the user through them one-by-one and returns all answers at once.
333
358
  const questions = toolInput?.questions;
334
- if (!Array.isArray(questions) || questions.length === 0)
359
+ if (!Array.isArray(questions) || questions.length === 0) {
360
+ console.warn(`[control_request] AskUserQuestion with no/empty questions array, forwarding as generic control_request`);
361
+ this.emit('control_request', request_id, toolName, toolInput);
335
362
  return;
363
+ }
364
+ console.log(`[control_request] AskUserQuestion received with ${questions.length} question(s), requestId=${request_id}`);
336
365
  const structuredQuestions = questions.map(q => ({
337
366
  question: q.question,
338
367
  header: q.header,
339
368
  multiSelect: q.multiSelect ?? false,
340
369
  options: (q.options || []).map((opt) => ({
341
370
  label: opt.label,
342
- value: opt.label,
371
+ value: opt.value ?? opt.label,
343
372
  description: opt.description,
344
373
  })),
345
374
  }));
@@ -353,16 +382,19 @@ export class ClaudeProcess extends EventEmitter {
353
382
  console.log(`[control_request] forwarding ExitPlanMode to session manager for user approval`);
354
383
  this.emit('control_request', request_id, toolName, toolInput);
355
384
  }
356
- else if (toolName === 'Bash') {
357
- // Bash runs arbitrary commands — forward to session manager for registry check / UI prompt
358
- console.log(`[control_request] forwarding Bash to session manager: ${redactSecrets(String(toolInput.command || '').slice(0, 80))}`);
359
- this.emit('control_request', request_id, toolName, toolInput);
385
+ else if (ClaudeProcess.AUTO_APPROVE_TOOLS.has(toolName)) {
386
+ // Known-safe tools: auto-approve without prompting
387
+ console.log(`[control_request] auto-approving safe tool: ${toolName}`);
388
+ this.sendControlResponse(request_id, 'allow');
360
389
  }
361
390
  else {
362
- // All other tools (Write, Edit, Read, Glob, Grep, Task, TodoWrite,
363
- // EnterPlanMode, etc.) are safe auto-approve
364
- console.log(`[control_request] auto-approving: ${toolName}`);
365
- this.sendControlResponse(request_id, 'allow');
391
+ // All other tools (Bash, WebSearch, WebFetch, Agent, etc.)
392
+ // Forward to session manager for registry check / UI prompt
393
+ const logDetail = toolName === 'Bash'
394
+ ? `: ${redactSecrets(String(toolInput.command || '').slice(0, 80))}`
395
+ : '';
396
+ console.log(`[control_request] forwarding ${toolName} to session manager for approval${logDetail}`);
397
+ this.emit('control_request', request_id, toolName, toolInput);
366
398
  }
367
399
  }
368
400
  /** Send a control_response back to the CLI to allow or deny a pending request. */