kumo-cli 1.0.6 → 1.1.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 (197) hide show
  1. package/README.md +131 -127
  2. package/dist/auth/credentialsStore.js +1 -1
  3. package/dist/auth/credentialsStore.js.map +1 -1
  4. package/dist/claude/transcriptParser.js +110 -11
  5. package/dist/claude/transcriptParser.js.map +1 -1
  6. package/dist/core/config.js +1 -4
  7. package/dist/core/config.js.map +1 -1
  8. package/dist/core/logger.js +6 -18
  9. package/dist/core/logger.js.map +1 -1
  10. package/dist/engine/claudeArgs.js +102 -0
  11. package/dist/engine/claudeArgs.js.map +1 -0
  12. package/dist/engine/claudeBinary.js +85 -0
  13. package/dist/engine/claudeBinary.js.map +1 -0
  14. package/dist/engine/claudeConfig.js +113 -0
  15. package/dist/engine/claudeConfig.js.map +1 -0
  16. package/dist/engine/controlChannel.js +63 -0
  17. package/dist/engine/controlChannel.js.map +1 -0
  18. package/dist/engine/liveTranscript.js +101 -0
  19. package/dist/engine/liveTranscript.js.map +1 -0
  20. package/dist/engine/ndjson.js +43 -0
  21. package/dist/engine/ndjson.js.map +1 -0
  22. package/dist/engine/permissions.js +98 -0
  23. package/dist/engine/permissions.js.map +1 -0
  24. package/dist/engine/sessionManager.js +429 -0
  25. package/dist/engine/sessionManager.js.map +1 -0
  26. package/dist/engine/settingsCommands.js +204 -0
  27. package/dist/engine/settingsCommands.js.map +1 -0
  28. package/dist/engine/streamSession.js +509 -0
  29. package/dist/engine/streamSession.js.map +1 -0
  30. package/dist/engine/taskTracker.js +110 -0
  31. package/dist/engine/taskTracker.js.map +1 -0
  32. package/dist/handlers/promptImages.js +8 -39
  33. package/dist/handlers/promptImages.js.map +1 -1
  34. package/dist/handlers/runtimeHandlers.js +195 -27
  35. package/dist/handlers/runtimeHandlers.js.map +1 -1
  36. package/dist/handlers/sessionHandlers.js +41 -70
  37. package/dist/handlers/sessionHandlers.js.map +1 -1
  38. package/dist/index.js +35 -40
  39. package/dist/index.js.map +1 -1
  40. package/dist/services/cliRuntime.js +37 -30
  41. package/dist/services/cliRuntime.js.map +1 -1
  42. package/dist/services/effortService.js +13 -60
  43. package/dist/services/effortService.js.map +1 -1
  44. package/dist/services/forkService.js +120 -0
  45. package/dist/services/forkService.js.map +1 -0
  46. package/dist/services/modelService.js +37 -84
  47. package/dist/services/modelService.js.map +1 -1
  48. package/dist/services/sessionListService.js +7 -9
  49. package/dist/services/sessionListService.js.map +1 -1
  50. package/dist/services/sessionService.js +77 -57
  51. package/dist/services/sessionService.js.map +1 -1
  52. package/dist/services/tunnelService.js +4 -5
  53. package/dist/services/tunnelService.js.map +1 -1
  54. package/dist/transport/wsClient.js +0 -4
  55. package/dist/transport/wsClient.js.map +1 -1
  56. package/dist/utils/ignorePaths.js +3 -3
  57. package/dist/utils/ignorePaths.js.map +1 -1
  58. package/package.json +62 -69
  59. package/dist/ansiCodes.js +0 -107
  60. package/dist/ansiCodes.js.map +0 -1
  61. package/dist/auth/credentialsStore.test.js +0 -60
  62. package/dist/auth/credentialsStore.test.js.map +0 -1
  63. package/dist/claude/fileHistory.js +0 -79
  64. package/dist/claude/fileHistory.js.map +0 -1
  65. package/dist/claude/generateHookSettings.js +0 -23
  66. package/dist/claude/generateHookSettings.js.map +0 -1
  67. package/dist/claude/hookServer.js +0 -33
  68. package/dist/claude/hookServer.js.map +0 -1
  69. package/dist/claude/sessionScanner.js +0 -162
  70. package/dist/claude/sessionScanner.js.map +0 -1
  71. package/dist/claude/sessionScanner.test.js +0 -24
  72. package/dist/claude/sessionScanner.test.js.map +0 -1
  73. package/dist/claude/transcriptParser.test.js +0 -78
  74. package/dist/claude/transcriptParser.test.js.map +0 -1
  75. package/dist/commands/cliArgs.test.js +0 -25
  76. package/dist/commands/cliArgs.test.js.map +0 -1
  77. package/dist/config.js +0 -40
  78. package/dist/config.js.map +0 -1
  79. package/dist/credentialsStore.js +0 -57
  80. package/dist/credentialsStore.js.map +0 -1
  81. package/dist/generateHookSettings.js +0 -30
  82. package/dist/generateHookSettings.js.map +0 -1
  83. package/dist/handlers/fileHandlerPayloads.test.js +0 -55
  84. package/dist/handlers/fileHandlerPayloads.test.js.map +0 -1
  85. package/dist/handlers/promptImages.test.js +0 -52
  86. package/dist/handlers/promptImages.test.js.map +0 -1
  87. package/dist/hookServer.js +0 -32
  88. package/dist/hookServer.js.map +0 -1
  89. package/dist/ignorePaths.js +0 -68
  90. package/dist/ignorePaths.js.map +0 -1
  91. package/dist/loadDotEnv.js +0 -79
  92. package/dist/loadDotEnv.js.map +0 -1
  93. package/dist/logger.js +0 -29
  94. package/dist/logger.js.map +0 -1
  95. package/dist/portForwardManager.js +0 -97
  96. package/dist/portForwardManager.js.map +0 -1
  97. package/dist/projectHistoryReader.js +0 -85
  98. package/dist/projectHistoryReader.js.map +0 -1
  99. package/dist/pty/ansiCodes.js +0 -14
  100. package/dist/pty/ansiCodes.js.map +0 -1
  101. package/dist/pty/notificationDetector.js +0 -29
  102. package/dist/pty/notificationDetector.js.map +0 -1
  103. package/dist/pty/notificationDetector.test.js +0 -24
  104. package/dist/pty/notificationDetector.test.js.map +0 -1
  105. package/dist/pty/ptyMenuParser.js +0 -91
  106. package/dist/pty/ptyMenuParser.js.map +0 -1
  107. package/dist/pty/ptyMenuParser.test.js +0 -26
  108. package/dist/pty/ptyMenuParser.test.js.map +0 -1
  109. package/dist/pty/ptySnapshotRenderer.js +0 -71
  110. package/dist/pty/ptySnapshotRenderer.js.map +0 -1
  111. package/dist/pty/selectionMenuDetector.js +0 -49
  112. package/dist/pty/selectionMenuDetector.js.map +0 -1
  113. package/dist/pty/selectionMenuDetector.test.js +0 -62
  114. package/dist/pty/selectionMenuDetector.test.js.map +0 -1
  115. package/dist/pty/selectionMenuMeta.js +0 -54
  116. package/dist/pty/selectionMenuMeta.js.map +0 -1
  117. package/dist/pty/selectionMenuMeta.test.js +0 -26
  118. package/dist/pty/selectionMenuMeta.test.js.map +0 -1
  119. package/dist/pty/selectionMenuParser.js +0 -83
  120. package/dist/pty/selectionMenuParser.js.map +0 -1
  121. package/dist/pty/selectionMenuParser.test.js +0 -30
  122. package/dist/pty/selectionMenuParser.test.js.map +0 -1
  123. package/dist/pty/spawn.js +0 -104
  124. package/dist/pty/spawn.js.map +0 -1
  125. package/dist/pty/spawn.test.js +0 -17
  126. package/dist/pty/spawn.test.js.map +0 -1
  127. package/dist/pty/statusSessionDetector.js +0 -28
  128. package/dist/pty/statusSessionDetector.js.map +0 -1
  129. package/dist/pty/statusSessionDetector.test.js +0 -23
  130. package/dist/pty/statusSessionDetector.test.js.map +0 -1
  131. package/dist/pty/textInputDetector.js +0 -60
  132. package/dist/pty/textInputDetector.js.map +0 -1
  133. package/dist/pty/textInputDetector.test.js +0 -32
  134. package/dist/pty/textInputDetector.test.js.map +0 -1
  135. package/dist/ptyMenuParser.js +0 -470
  136. package/dist/ptyMenuParser.js.map +0 -1
  137. package/dist/ptySnapshotRenderer.js +0 -78
  138. package/dist/ptySnapshotRenderer.js.map +0 -1
  139. package/dist/services/checkpointService.js +0 -113
  140. package/dist/services/checkpointService.js.map +0 -1
  141. package/dist/services/checkpointService.test.js +0 -61
  142. package/dist/services/checkpointService.test.js.map +0 -1
  143. package/dist/services/claudeMenuBridge.js +0 -116
  144. package/dist/services/claudeMenuBridge.js.map +0 -1
  145. package/dist/services/claudeMenuBridge.test.js +0 -90
  146. package/dist/services/claudeMenuBridge.test.js.map +0 -1
  147. package/dist/services/claudeService.js +0 -146
  148. package/dist/services/claudeService.js.map +0 -1
  149. package/dist/services/claudeService.test.js +0 -39
  150. package/dist/services/claudeService.test.js.map +0 -1
  151. package/dist/services/cliRuntime.test.js +0 -55
  152. package/dist/services/cliRuntime.test.js.map +0 -1
  153. package/dist/services/modelAdapter.test.js +0 -47
  154. package/dist/services/modelAdapter.test.js.map +0 -1
  155. package/dist/services/modelArgs.test.js +0 -64
  156. package/dist/services/modelArgs.test.js.map +0 -1
  157. package/dist/services/modelBaseUrl.test.js +0 -32
  158. package/dist/services/modelBaseUrl.test.js.map +0 -1
  159. package/dist/services/modelService.test.js +0 -136
  160. package/dist/services/modelService.test.js.map +0 -1
  161. package/dist/services/notificationDedupe.js +0 -23
  162. package/dist/services/notificationDedupe.js.map +0 -1
  163. package/dist/services/notificationDedupe.test.js +0 -20
  164. package/dist/services/notificationDedupe.test.js.map +0 -1
  165. package/dist/services/sessionListService.test.js +0 -22
  166. package/dist/services/sessionListService.test.js.map +0 -1
  167. package/dist/services/sessionRollbackService.js +0 -195
  168. package/dist/services/sessionRollbackService.js.map +0 -1
  169. package/dist/services/sessionRollbackService.test.js +0 -142
  170. package/dist/services/sessionRollbackService.test.js.map +0 -1
  171. package/dist/services/tunnelHelpers.test.js +0 -42
  172. package/dist/services/tunnelHelpers.test.js.map +0 -1
  173. package/dist/services/tunnelService.test.js +0 -91
  174. package/dist/services/tunnelService.test.js.map +0 -1
  175. package/dist/sessionScanner.js +0 -271
  176. package/dist/sessionScanner.js.map +0 -1
  177. package/dist/snapshotScanner.js +0 -154
  178. package/dist/snapshotScanner.js.map +0 -1
  179. package/dist/spawn.js +0 -79
  180. package/dist/spawn.js.map +0 -1
  181. package/dist/terminalManager.js +0 -73
  182. package/dist/terminalManager.js.map +0 -1
  183. package/dist/transport/directWsServer.js +0 -135
  184. package/dist/transport/directWsServer.js.map +0 -1
  185. package/dist/transport/webrtcTransport.js +0 -145
  186. package/dist/transport/webrtcTransport.js.map +0 -1
  187. package/dist/transport/webrtcTransport.test.js +0 -104
  188. package/dist/transport/webrtcTransport.test.js.map +0 -1
  189. package/dist/transport/webrtcTypes.js +0 -29
  190. package/dist/transport/webrtcTypes.js.map +0 -1
  191. package/dist/transport/webrtcTypes.test.js +0 -20
  192. package/dist/transport/webrtcTypes.test.js.map +0 -1
  193. package/dist/utils/ptyBuffer.js +0 -46
  194. package/dist/utils/ptyBuffer.js.map +0 -1
  195. package/scripts/claude_launcher.cjs +0 -71
  196. package/scripts/run-tests.mjs +0 -46
  197. package/scripts/session_hook_forwarder.cjs +0 -44
@@ -1,16 +1,35 @@
1
+ import { randomUUID } from 'node:crypto';
1
2
  import { log } from '../core/logger.js';
3
+ import { isPermissionMode } from '../engine/permissions.js';
2
4
  import * as sessionService from '../services/sessionService.js';
3
- import * as sessionRollbackService from '../services/sessionRollbackService.js';
4
5
  import { loadSessionList } from '../services/sessionListService.js';
6
+ import { parseModelPayload } from '../services/modelService.js';
7
+ const SESSION_ID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
8
+ // session ids end up in claude argv and file paths, so only uuids are accepted
9
+ export function sessionIdOf(msg) {
10
+ const value = msg['sessionId'];
11
+ return typeof value === 'string' && SESSION_ID_RE.test(value) ? value : null;
12
+ }
13
+ // register a brand new session (no spawn yet) and announce it to the app
14
+ export function openNewSession(ctx, sessionId = randomUUID(), opts = {}) {
15
+ ctx.sessions.open(sessionId, opts);
16
+ ctx.send({ type: 'session_start', sessionId });
17
+ return sessionId;
18
+ }
19
+ function modelOption(msg) {
20
+ return 'model' in msg ? { model: parseModelPayload(msg['model']) } : {};
21
+ }
22
+ const cwdOf = (msg) => (typeof msg['cwd'] === 'string' ? msg['cwd'] : undefined);
23
+ async function sendSessionList(ctx, cwdArg) {
24
+ const sessions = await loadSessionList(cwdArg, ctx.sessions.liveSessionIds());
25
+ ctx.send({ type: 'session_list', sessions });
26
+ }
5
27
  // create handlers for session history, session list, and effort updates
6
28
  export function createSessionHandlers() {
7
29
  return {
8
30
  request_session_list: async (msg, ctx) => {
9
- const cwdArg = typeof msg['cwd'] === 'string' ? msg['cwd'] : undefined;
10
31
  try {
11
- const sessions = await loadSessionList(cwdArg, ctx.getCurrentSessionId());
12
- ctx.send({ type: 'session_list', sessions });
13
- log(`[session_list] sent ${sessions.length} sessions`);
32
+ await sendSessionList(ctx, cwdOf(msg));
14
33
  }
15
34
  catch (error) {
16
35
  log(`[session_list] error: ${error}`);
@@ -18,101 +37,53 @@ export function createSessionHandlers() {
18
37
  }
19
38
  },
20
39
  delete_session: async (msg, ctx) => {
21
- const sessionId = typeof msg['sessionId'] === 'string' ? msg['sessionId'] : undefined;
22
- const cwdArg = typeof msg['cwd'] === 'string' ? msg['cwd'] : undefined;
40
+ const sessionId = sessionIdOf(msg);
41
+ const cwdArg = cwdOf(msg);
23
42
  if (!sessionId)
24
43
  return;
25
44
  try {
45
+ await ctx.sessions.close(sessionId, { forget: true });
26
46
  await sessionService.deleteSessionFile(sessionId, cwdArg);
27
- const sessions = await loadSessionList(cwdArg, ctx.getCurrentSessionId());
28
- ctx.send({ type: 'session_list', sessions });
47
+ await sendSessionList(ctx, cwdArg);
29
48
  }
30
49
  catch (error) {
31
50
  log(`[delete_session] error: ${error}`);
32
51
  }
33
52
  },
34
53
  request_session_history: async (msg, ctx) => {
35
- const sessionId = msg['sessionId'];
54
+ const sessionId = sessionIdOf(msg);
36
55
  if (!sessionId)
37
56
  return;
38
57
  log(`[ws recv] request_session_history: ${sessionId}`);
39
- ctx.claude.args = ctx.model.apply(msg['model'], ctx.claude.args);
58
+ const modelChanged = ctx.sessions.open(sessionId, modelOption(msg));
40
59
  try {
41
60
  const messages = sessionService.readSessionHistory(sessionId);
42
61
  ctx.send({ type: 'session_history', sessionId, messages });
43
62
  log(`[session_history] sent ${messages.length} messages for ${sessionId}`);
44
- ctx.scheduleScannerAtEnd();
45
- ctx.claude.args = [...sessionService.removeResumeArgs(ctx.claude.args), '--resume', sessionId];
46
- await ctx.claude.spawn();
47
63
  }
48
64
  catch (error) {
49
65
  log(`[request_session_history] error: ${error}`);
50
66
  ctx.send({ type: 'session_history', sessionId, messages: [] });
51
67
  }
68
+ ctx.send({ type: 'session_start', sessionId });
69
+ ctx.sessions.replay(sessionId);
70
+ if (modelChanged)
71
+ await ctx.sessions.applyModel(sessionId);
52
72
  },
53
- request_new_session: async (msg, ctx) => {
73
+ request_new_session: (msg, ctx) => {
54
74
  log('[ws recv] request_new_session');
55
- ctx.claude.args = ctx.model.apply(msg['model'], ctx.claude.args);
56
- ctx.claude.args = sessionService.removeResumeArgs(ctx.claude.args);
57
- await ctx.claude.spawn();
58
- },
59
- request_rollback_preview: async (msg, ctx) => {
60
- const sessionId = typeof msg['sessionId'] === 'string' ? msg['sessionId'] : undefined;
61
- const turnId = typeof msg['turnId'] === 'string' ? msg['turnId'] : undefined;
62
- const messageIndex = typeof msg['messageIndex'] === 'number' ? msg['messageIndex'] : undefined;
63
- const cwdArg = typeof msg['cwd'] === 'string' ? msg['cwd'] : undefined;
64
- if (!sessionId || !turnId)
65
- return;
66
- try {
67
- const preview = sessionRollbackService.buildRollbackPreview(sessionId, turnId, cwdArg, messageIndex);
68
- if (!preview) {
69
- ctx.send({ type: 'rollback_error', sessionId, turnId, message: 'rollback preview not found' });
70
- return;
71
- }
72
- ctx.send({ type: 'rollback_preview', ...preview });
73
- }
74
- catch (error) {
75
- log(`[rollback_preview] error: ${error}`);
76
- ctx.send({ type: 'rollback_error', sessionId, turnId, message: String(error) });
77
- }
78
- },
79
- confirm_rollback: async (msg, ctx) => {
80
- const sessionId = typeof msg['sessionId'] === 'string' ? msg['sessionId'] : undefined;
81
- const turnId = typeof msg['turnId'] === 'string' ? msg['turnId'] : undefined;
82
- const messageIndex = typeof msg['messageIndex'] === 'number' ? msg['messageIndex'] : undefined;
83
- const cwdArg = typeof msg['cwd'] === 'string' ? msg['cwd'] : undefined;
84
- if (!sessionId || !turnId)
85
- return;
86
- try {
87
- const applied = sessionRollbackService.applyRollback(sessionId, turnId, cwdArg, messageIndex);
88
- if (!applied) {
89
- ctx.send({ type: 'rollback_error', sessionId, turnId, message: 'rollback target not found' });
90
- return;
91
- }
92
- const messages = sessionRollbackService.loadRolledBackHistory(sessionId, cwdArg);
93
- ctx.send({ type: 'session_history', sessionId, messages });
94
- ctx.send({ type: 'rollback_applied', ...applied });
95
- ctx.send({ type: 'composer_prefill', sessionId, turnId, prompt: applied.prompt });
96
- ctx.scheduleScannerAtEnd();
97
- if (applied.startsNewSession)
98
- ctx.setCurrentSessionId(null);
99
- ctx.claude.args = applied.startsNewSession
100
- ? sessionService.removeResumeArgs(ctx.claude.args)
101
- : [...sessionService.removeResumeArgs(ctx.claude.args), '--resume', sessionId];
102
- await ctx.claude.spawn();
103
- }
104
- catch (error) {
105
- log(`[confirm_rollback] error: ${error}`);
106
- ctx.send({ type: 'rollback_error', sessionId, turnId, message: String(error) });
107
- }
75
+ const permissionMode = isPermissionMode(msg['permissionMode']) ? msg['permissionMode'] : undefined;
76
+ openNewSession(ctx, sessionIdOf(msg) ?? randomUUID(), { ...modelOption(msg), permissionMode });
108
77
  },
109
78
  set_effort: async (msg, ctx) => {
110
79
  const effort = msg['effort'];
111
80
  if (typeof effort !== 'string')
112
81
  return;
113
82
  ctx.effort.save(effort);
114
- ctx.claude.args = ctx.effort.apply(ctx.claude.args);
115
- await ctx.claude.spawn();
83
+ if (ctx.effort.getCurrent() !== effort)
84
+ return;
85
+ ctx.send({ type: 'cli_status', effort: ctx.effort.getEffective(), workingDir: process.cwd() });
86
+ await ctx.sessions.applyEffort(effort);
116
87
  },
117
88
  };
118
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sessionHandlers.js","sourceRoot":"","sources":["../../src/handlers/sessionHandlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sessionHandlers.js","sourceRoot":"","sources":["../../src/handlers/sessionHandlers.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,17 +1,15 @@
1
1
  #!/usr/bin/env node
2
- import { startHookServer } from './claude/hookServer.js';
3
- import { generateHookSettingsFile } from './claude/generateHookSettings.js';
4
2
  import { TerminalManager } from './pty/terminalManager.js';
5
3
  import { clearCredentials, ensureDeviceUuid, } from './auth/credentialsStore.js';
6
4
  import { loadDotEnv } from './core/loadDotEnv.js';
7
5
  import { log } from './core/logger.js';
8
6
  import { ProjectFileWatcher } from './core/projectFileWatcher.js';
7
+ import { SessionManager } from './engine/sessionManager.js';
9
8
  import { ModelService } from './services/modelService.js';
10
9
  import { EffortService } from './services/effortService.js';
11
- import { ClaudeService } from './services/claudeService.js';
12
10
  import { printBanner } from './services/pairingService.js';
13
11
  import { resolveActiveCredentials } from './services/bootstrapService.js';
14
- import { createSessionStartHandler, createWsOpenHandler, ensureClaudeArgs } from './services/cliRuntime.js';
12
+ import { createSpawnSpecFactory, createWsOpenHandler, resolveLaunchConfig } from './services/cliRuntime.js';
15
13
  import { WsClient } from './transport/wsClient.js';
16
14
  import { createMessageRouter } from './handlers/messageRouter.js';
17
15
  import { chooseAgent } from './commands/agentPrompt.js';
@@ -21,10 +19,6 @@ if (envFilePath) {
21
19
  loadDotEnv(envFilePath);
22
20
  }
23
21
  let activeCredentials = null;
24
- let currentSessionId = null;
25
- let pendingPrompt = null;
26
- let startScannerAtEnd = false;
27
- let scanner = null;
28
22
  let pairedResolved = false;
29
23
  async function main() {
30
24
  const command = parseCommand(bootArgs);
@@ -45,7 +39,7 @@ async function main() {
45
39
  console.log('[kumo-cli] codex support is under development');
46
40
  return;
47
41
  }
48
- const claudeArgs = ensureClaudeArgs(command.args);
42
+ const launch = resolveLaunchConfig(command.args);
49
43
  printBanner();
50
44
  let ws;
51
45
  const send = (data) => ws.send(data);
@@ -57,43 +51,48 @@ async function main() {
57
51
  log(`[terminal] ${terminalId} exited with code ${exitCode}`);
58
52
  send({ type: 'terminal_closed', terminalId, exitCode });
59
53
  });
60
- const claude = new ClaudeService(send, model, effort, () => activeCredentials?.deviceToken);
61
- claude.args = claudeArgs;
62
- claude.onExit = (code) => { ws.close(); process.exit(code); };
63
- const hookServer = await startHookServer(createSessionStartHandler({
64
- state: {
65
- get currentSessionId() { return currentSessionId; },
66
- set currentSessionId(value) { currentSessionId = value; },
67
- get pendingPrompt() { return pendingPrompt; },
68
- set pendingPrompt(value) { pendingPrompt = value; },
69
- get startScannerAtEnd() { return startScannerAtEnd; },
70
- set startScannerAtEnd(value) { startScannerAtEnd = value; },
71
- get scanner() { return scanner; },
72
- set scanner(value) { scanner = value; },
73
- },
74
- send,
75
- resetSnapshot: () => claude.resetSnapshot(),
76
- dispatchPrompt: (text) => claude.dispatchPrompt(text),
77
- }));
78
- process.stdout.on('resize', () => claude.resizeSnapshot());
79
- claude.settingsPath = generateHookSettingsFile(hookServer.port);
54
+ const sessions = new SessionManager({
55
+ // cli_status from a session carries no effort/cwd; fill them so the backend keeps them
56
+ emit: (msg) => send(msg['type'] === 'cli_status' ? { effort: effort.getEffective(), workingDir: process.cwd(), ...msg } : msg),
57
+ spawnSpec: createSpawnSpecFactory({
58
+ model,
59
+ effort,
60
+ passthrough: launch.passthrough,
61
+ deviceToken: () => activeCredentials?.deviceToken,
62
+ }),
63
+ defaultPermissionMode: launch.permissionMode,
64
+ allowBypass: launch.allowBypass,
65
+ console: (line) => console.log(line),
66
+ });
67
+ let shuttingDown = false;
68
+ const shutdown = (code) => {
69
+ if (shuttingDown)
70
+ return;
71
+ shuttingDown = true;
72
+ console.log('\n[kumo-cli] closing claude sessions...');
73
+ void Promise.allSettled([sessions.closeAll(), model.dispose()]).finally(() => {
74
+ ws?.close();
75
+ process.exit(code);
76
+ });
77
+ };
78
+ process.on('SIGINT', () => shutdown(0));
79
+ process.on('SIGTERM', () => shutdown(0));
80
80
  try {
81
81
  activeCredentials = await resolveActiveCredentials();
82
82
  }
83
83
  catch (error) {
84
84
  console.error(error.message);
85
- hookServer.close();
86
85
  process.exit(1);
87
86
  }
88
87
  if (!activeCredentials) {
89
88
  console.error('[kumo-cli] pairing aborted');
90
- hookServer.close();
91
89
  process.exit(1);
92
90
  }
93
- console.log(`\x1b[32m✓ Connected as ${activeCredentials.user?.email ?? activeCredentials.user?.id ?? 'device'}\x1b[0m\n`);
91
+ console.log(`\x1b[32m✓ Connected as ${activeCredentials.user?.email ?? activeCredentials.user?.id ?? 'device'}\x1b[0m`);
92
+ console.log(`[kumo-cli] claude sessions run on demand (permission mode: ${launch.permissionMode}). press ctrl+c to quit.\n`);
94
93
  const router = createMessageRouter({
95
94
  send,
96
- claude, model, effort, terminals,
95
+ sessions, model, effort, terminals,
97
96
  onPaired: () => {
98
97
  if (pairedResolved)
99
98
  return;
@@ -101,21 +100,17 @@ async function main() {
101
100
  fileWatcher.restart();
102
101
  },
103
102
  onAuthError: () => { ws.close(); },
104
- scheduleScannerAtEnd: () => { startScannerAtEnd = true; },
105
- getCurrentSessionId: () => currentSessionId,
106
- setCurrentSessionId: (sessionId) => { currentSessionId = sessionId; },
107
- setPendingPrompt: (text) => { pendingPrompt = text; },
108
103
  });
109
104
  ws = new WsClient(createWsOpenHandler({
110
105
  send,
111
106
  credentials: () => activeCredentials,
112
- currentSessionId: () => currentSessionId,
113
- resetMenu: () => claude.resetMenu(),
107
+ liveSessionIds: () => sessions.liveSessionIds(),
108
+ effort: () => effort.getEffective(),
114
109
  restartWatcher: () => fileWatcher.restart(),
110
+ refreshAuth: () => sessions.refreshAuth(),
115
111
  }), router, () => {
116
112
  fileWatcher.stop();
117
113
  });
118
- ws.onSent(() => claude.notifySent());
119
114
  ws.connect();
120
115
  }
121
116
  main().catch((err) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,35 +1,41 @@
1
- import { log } from '../core/logger.js';
2
- import { SessionScanner } from '../claude/sessionScanner.js';
1
+ import { buildClaudeArgs, buildClaudeEnv, filterPassthroughArgs } from '../engine/claudeArgs.js';
2
+ import { resolveClaudeCommand } from '../engine/claudeBinary.js';
3
+ import { isPermissionMode } from '../engine/permissions.js';
3
4
  import { loadSessionList } from './sessionListService.js';
4
- // ensure claude always runs with the permissions bypass flag expected by the app flow
5
- export function ensureClaudeArgs(args) {
6
- return args.includes('--dangerously-skip-permissions') ? [...args] : [...args, '--dangerously-skip-permissions'];
5
+ // derive session launch settings from `kumo claude <args>`; KUMO_PERMISSION_MODE overrides the default mode
6
+ export function resolveLaunchConfig(args, env = process.env) {
7
+ const parsed = filterPassthroughArgs(args);
8
+ const fromEnv = env['KUMO_PERMISSION_MODE'];
9
+ const permissionMode = isPermissionMode(fromEnv) ? fromEnv : parsed.permissionMode ?? 'default';
10
+ return {
11
+ passthrough: parsed.passthrough,
12
+ permissionMode,
13
+ allowBypass: parsed.allowBypass || permissionMode === 'bypassPermissions',
14
+ };
7
15
  }
8
- // create the hook-server callback that keeps scanner state, prompt replay, and assistant completion in sync
9
- export function createSessionStartHandler(params) {
10
- return (sessionId) => {
11
- params.state.currentSessionId = sessionId;
12
- params.resetSnapshot();
13
- params.send({ type: 'session_start', sessionId });
14
- params.state.scanner?.stop();
15
- params.state.scanner = (params.scannerFactory?.(sessionId, params.state.startScannerAtEnd) ?? new SessionScanner(sessionId, params.state.startScannerAtEnd));
16
- params.state.startScannerAtEnd = false;
17
- params.state.scanner.on('message', (message) => {
18
- params.send({ type: 'transcript', message });
19
- if (message.role === 'assistant' && message.stopReason === 'end_turn') {
20
- log(`[scanner] assistant_done detected, stopReason=${message.stopReason}`);
21
- params.send({ type: 'assistant_done' });
22
- }
23
- });
24
- params.state.scanner.start();
25
- if (!params.state.pendingPrompt)
26
- return;
27
- const queuedPrompt = params.state.pendingPrompt;
28
- params.state.pendingPrompt = null;
29
- params.dispatchPrompt(queuedPrompt);
16
+ // build the spawn spec of a session: per-session model (or device default), effort, binary and env
17
+ export function createSpawnSpecFactory(params) {
18
+ return async (request) => {
19
+ const model = request.model === undefined ? await params.model.fetchDefault(params.deviceToken()) : request.model;
20
+ const command = (params.resolveCommand ?? resolveClaudeCommand)();
21
+ return {
22
+ cmd: command.cmd,
23
+ shell: command.shell,
24
+ cwd: process.cwd(),
25
+ env: buildClaudeEnv(process.env, await params.model.buildEnv(model)),
26
+ args: buildClaudeArgs({
27
+ sessionId: request.sessionId,
28
+ resume: request.resume,
29
+ permissionMode: request.permissionMode,
30
+ allowBypass: request.allowBypass,
31
+ model: model?.model || undefined,
32
+ effort: params.effort.getCurrent() ?? undefined,
33
+ passthrough: params.passthrough,
34
+ }),
35
+ };
30
36
  };
31
37
  }
32
- // create the ws onOpen hook that registers the cli, refreshes sessions, and restarts file watching
38
+ // create the ws onOpen hook that registers the cli, reports status, refreshes sessions, and restarts file watching
33
39
  export function createWsOpenHandler(params) {
34
40
  return async () => {
35
41
  const credentials = params.credentials();
@@ -40,9 +46,10 @@ export function createWsOpenHandler(params) {
40
46
  deviceUuid: credentials?.deviceUuid,
41
47
  cwd: process.cwd(),
42
48
  });
43
- params.resetMenu();
49
+ params.send({ type: 'cli_status', effort: params.effort(), workingDir: process.cwd() });
50
+ void params.refreshAuth();
44
51
  params.restartWatcher();
45
- const sessions = await loadSessionList(undefined, params.currentSessionId());
52
+ const sessions = await loadSessionList(undefined, params.liveSessionIds());
46
53
  params.send({ type: 'session_list', sessions });
47
54
  };
48
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cliRuntime.js","sourceRoot":"","sources":["../../src/services/cliRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAY1D,sFAAsF;AACtF,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,gCAAgC,CAAC,CAAC;AACnH,CAAC;AAED,4GAA4G;AAC5G,MAAM,UAAU,yBAAyB,CAAC,MAMzC;IACC,OAAO,CAAC,SAAiB,EAAE,EAAE;QAC3B,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAC1C,MAAM,CAAC,aAAa,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,IAAI,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAmB,CAAC;QAC/K,MAAM,CAAC,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;YAC7C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7C,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACtE,GAAG,CAAC,iDAAiD,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC3E,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa;YAAE,OAAO;QACxC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAClC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,mBAAmB,CAAC,MAMnC;IACC,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,WAAW,EAAE,WAAW;YACrC,UAAU,EAAE,WAAW,EAAE,UAAU;YACnC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC7E,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"cliRuntime.js","sourceRoot":"","sources":["../../src/services/cliRuntime.ts"],"names":[],"mappings":"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"}
@@ -1,89 +1,42 @@
1
1
  import fs from 'node:fs';
2
2
  import os from 'node:os';
3
3
  import path from 'node:path';
4
+ import { kumoDir } from '../auth/credentialsStore.js';
4
5
  import { log } from '../core/logger.js';
5
6
  const VALID_EFFORTS = ['low', 'medium', 'high', 'xhigh', 'max'];
6
- // resolve ~/settings.json path
7
- function settingsPath() {
8
- return path.join(os.homedir(), 'settings.json');
9
- }
10
- // read the whole settings.json as an object, returns empty object on failure
11
- function readSettings() {
7
+ const settingsPath = () => path.join(kumoDir(), 'settings.json');
8
+ // older versions kept the effort in ~/settings.json
9
+ const legacySettingsPath = () => path.join(os.homedir(), 'settings.json');
10
+ function readSettings(file) {
12
11
  try {
13
- const raw = fs.readFileSync(settingsPath(), 'utf-8');
14
- return JSON.parse(raw);
12
+ return JSON.parse(fs.readFileSync(file, 'utf-8'));
15
13
  }
16
14
  catch {
17
15
  return {};
18
16
  }
19
17
  }
20
- function readEffortLevel() {
21
- const settings = readSettings();
22
- const raw = settings['effortLevel'];
23
- if (typeof raw === 'string' && VALID_EFFORTS.includes(raw)) {
24
- return raw;
25
- }
26
- return null;
27
- }
28
- // write settings back preserving existing keys
29
- function writeSettings(data) {
30
- const dir = path.dirname(settingsPath());
31
- fs.mkdirSync(dir, { recursive: true });
32
- fs.writeFileSync(settingsPath(), JSON.stringify(data, null, 2), 'utf-8');
33
- }
34
- // strip any existing --effort / --effort=... flag pairs from args
35
- export function removeEffortArgs(args) {
36
- const result = [];
37
- for (let i = 0; i < args.length; i++) {
38
- const a = args[i];
39
- if (a === '--effort') {
40
- i++;
41
- continue;
42
- }
43
- if (a.startsWith('--effort='))
44
- continue;
45
- result.push(a);
46
- }
47
- return result;
48
- }
49
- // manages effort level stored in ~/settings.json and applied to claude args
18
+ const asEffort = (raw) => typeof raw === 'string' && VALID_EFFORTS.includes(raw) ? raw : null;
19
+ // device-wide effort level, persisted in the kumo state directory and passed to new claude processes
50
20
  export class EffortService {
51
21
  current = null;
52
22
  getCurrent() { return this.current; }
53
23
  getEffective() {
54
24
  return this.current ?? 'medium';
55
25
  }
56
- // load effort from ~/settings.json
57
26
  load() {
58
- const fromSettings = readEffortLevel();
59
- if (fromSettings) {
60
- this.current = fromSettings;
61
- }
27
+ this.current = asEffort(readSettings(settingsPath())['effortLevel']) ?? asEffort(readSettings(legacySettingsPath())['effortLevel']);
62
28
  log(`[effort] loaded: ${this.current}`);
63
- return this.current;
64
29
  }
65
- // persist effort to ~/settings.json and update current
66
30
  save(level) {
67
31
  if (!VALID_EFFORTS.includes(level))
68
32
  return;
69
33
  this.current = level;
70
- const settings = readSettings();
34
+ const file = settingsPath();
35
+ const settings = readSettings(file);
71
36
  settings['effortLevel'] = level;
72
- writeSettings(settings);
37
+ fs.mkdirSync(path.dirname(file), { recursive: true });
38
+ fs.writeFileSync(file, JSON.stringify(settings, null, 2), 'utf-8');
73
39
  log(`[effort] saved: ${level}`);
74
40
  }
75
- // apply effort flag to claude args, returns new args array
76
- apply(args) {
77
- const cleaned = removeEffortArgs(args);
78
- if (this.current)
79
- cleaned.push('--effort', this.current);
80
- return cleaned;
81
- }
82
- // ensure effort is loaded before spawn, returns args with --effort flag
83
- ensureBeforeSpawn(args) {
84
- if (!this.current)
85
- this.load();
86
- return this.apply(args);
87
- }
88
41
  }
89
42
  //# sourceMappingURL=effortService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"effortService.js","sourceRoot":"","sources":["../../src/services/effortService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"effortService.js","sourceRoot":"","sources":["../../src/services/effortService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAIxC,MAAM,aAAa,GAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAE/E,MAAM,YAAY,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;AACzE,oDAAoD;AACpD,MAAM,kBAAkB,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;AAElF,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAA4B,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,GAAY,EAAsB,EAAE,CACpD,OAAO,GAAG,KAAK,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAkB,CAAC,CAAC,CAAC,CAAE,GAAmB,CAAC,CAAC,CAAC,IAAI,CAAC;AAEtG,qGAAqG;AACrG,MAAM,OAAO,aAAa;IAChB,OAAO,GAAuB,IAAI,CAAC;IAE3C,UAAU,KAAyB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEzD,YAAY;QACV,OAAO,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC;IAClC,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QACpI,GAAG,CAAC,oBAAoB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,KAAkB;QACrB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;QAC3C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,QAAQ,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;QAChC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACnE,GAAG,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;IAClC,CAAC;CACF"}