kumo-cli 1.0.6 → 1.2.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 +26 -13
- package/dist/auth/credentialsStore.js +20 -7
- package/dist/auth/credentialsStore.js.map +1 -1
- package/dist/claude/conversation.js +272 -0
- package/dist/claude/conversation.js.map +1 -0
- package/dist/claude/transcriptParser.js +140 -36
- package/dist/claude/transcriptParser.js.map +1 -1
- package/dist/commands/cliArgs.js +1 -0
- package/dist/commands/cliArgs.js.map +1 -1
- package/dist/core/config.js +1 -9
- package/dist/core/config.js.map +1 -1
- package/dist/core/logger.js +50 -21
- package/dist/core/logger.js.map +1 -1
- package/dist/core/projectFileWatcher.js +100 -36
- package/dist/core/projectFileWatcher.js.map +1 -1
- package/dist/engine/claudeArgs.js +106 -0
- package/dist/engine/claudeArgs.js.map +1 -0
- package/dist/engine/claudeBinary.js +94 -0
- package/dist/engine/claudeBinary.js.map +1 -0
- package/dist/engine/claudeConfig.js +127 -0
- package/dist/engine/claudeConfig.js.map +1 -0
- package/dist/engine/claudeLogin.js +76 -0
- package/dist/engine/claudeLogin.js.map +1 -0
- package/dist/engine/controlChannel.js +75 -0
- package/dist/engine/controlChannel.js.map +1 -0
- package/dist/engine/liveTranscript.js +150 -0
- package/dist/engine/liveTranscript.js.map +1 -0
- package/dist/engine/ndjson.js +48 -0
- package/dist/engine/ndjson.js.map +1 -0
- package/dist/engine/permissions.js +101 -0
- package/dist/engine/permissions.js.map +1 -0
- package/dist/engine/probePool.js +51 -0
- package/dist/engine/probePool.js.map +1 -0
- package/dist/engine/processTree.js +45 -0
- package/dist/engine/processTree.js.map +1 -0
- package/dist/engine/remoteConfig.js +17 -0
- package/dist/engine/remoteConfig.js.map +1 -0
- package/dist/engine/sessionManager.js +444 -0
- package/dist/engine/sessionManager.js.map +1 -0
- package/dist/engine/settingsCommands.js +260 -0
- package/dist/engine/settingsCommands.js.map +1 -0
- package/dist/engine/streamSession.js +502 -0
- package/dist/engine/streamSession.js.map +1 -0
- package/dist/engine/taskTracker.js +110 -0
- package/dist/engine/taskTracker.js.map +1 -0
- package/dist/engine/toolLabels.js +32 -0
- package/dist/engine/toolLabels.js.map +1 -0
- package/dist/handlers/controlRequest.js +17 -0
- package/dist/handlers/controlRequest.js.map +1 -0
- package/dist/handlers/fileHandlers.js +12 -0
- package/dist/handlers/fileHandlers.js.map +1 -1
- package/dist/handlers/messageRouter.js +8 -1
- package/dist/handlers/messageRouter.js.map +1 -1
- package/dist/handlers/promptImages.js +5 -91
- package/dist/handlers/promptImages.js.map +1 -1
- package/dist/handlers/runtimeHandlers.js +100 -32
- package/dist/handlers/runtimeHandlers.js.map +1 -1
- package/dist/handlers/sessionHandlers.js +85 -80
- package/dist/handlers/sessionHandlers.js.map +1 -1
- package/dist/handlers/terminalHandlers.js +9 -2
- package/dist/handlers/terminalHandlers.js.map +1 -1
- package/dist/http/httpClient.js +6 -0
- package/dist/http/httpClient.js.map +1 -1
- package/dist/index.js +87 -50
- package/dist/index.js.map +1 -1
- package/dist/pty/terminalManager.js +58 -11
- package/dist/pty/terminalManager.js.map +1 -1
- package/dist/services/bootstrapService.js +17 -1
- package/dist/services/bootstrapService.js.map +1 -1
- package/dist/services/claudeAdapterProxy.js +68 -21
- package/dist/services/claudeAdapterProxy.js.map +1 -1
- package/dist/services/cliRuntime.js +39 -32
- package/dist/services/cliRuntime.js.map +1 -1
- package/dist/services/effortService.js +13 -60
- package/dist/services/effortService.js.map +1 -1
- package/dist/services/fileService.js +50 -24
- package/dist/services/fileService.js.map +1 -1
- package/dist/services/forkService.js +120 -0
- package/dist/services/forkService.js.map +1 -0
- package/dist/services/modelService.js +86 -89
- package/dist/services/modelService.js.map +1 -1
- package/dist/services/pairingService.js +21 -15
- package/dist/services/pairingService.js.map +1 -1
- package/dist/services/sessionListService.js +7 -9
- package/dist/services/sessionListService.js.map +1 -1
- package/dist/services/sessionService.js +245 -106
- package/dist/services/sessionService.js.map +1 -1
- package/dist/services/tunnelHelpers.js +9 -5
- package/dist/services/tunnelHelpers.js.map +1 -1
- package/dist/services/tunnelService.js +21 -5
- package/dist/services/tunnelService.js.map +1 -1
- package/dist/transport/wsClient.js +60 -42
- package/dist/transport/wsClient.js.map +1 -1
- package/dist/utils/ignorePaths.js +3 -3
- package/dist/utils/ignorePaths.js.map +1 -1
- package/dist/utils/json.js +7 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/localHost.js +17 -0
- package/dist/utils/localHost.js.map +1 -0
- package/dist/utils/safePath.js +51 -20
- package/dist/utils/safePath.js.map +1 -1
- package/package.json +5 -12
- package/dist/ansiCodes.js +0 -107
- package/dist/ansiCodes.js.map +0 -1
- package/dist/auth/credentialsStore.test.js +0 -60
- package/dist/auth/credentialsStore.test.js.map +0 -1
- package/dist/claude/fileHistory.js +0 -79
- package/dist/claude/fileHistory.js.map +0 -1
- package/dist/claude/generateHookSettings.js +0 -23
- package/dist/claude/generateHookSettings.js.map +0 -1
- package/dist/claude/hookServer.js +0 -33
- package/dist/claude/hookServer.js.map +0 -1
- package/dist/claude/sessionScanner.js +0 -162
- package/dist/claude/sessionScanner.js.map +0 -1
- package/dist/claude/sessionScanner.test.js +0 -24
- package/dist/claude/sessionScanner.test.js.map +0 -1
- package/dist/claude/transcriptParser.test.js +0 -78
- package/dist/claude/transcriptParser.test.js.map +0 -1
- package/dist/commands/cliArgs.test.js +0 -25
- package/dist/commands/cliArgs.test.js.map +0 -1
- package/dist/config.js +0 -40
- package/dist/config.js.map +0 -1
- package/dist/credentialsStore.js +0 -57
- package/dist/credentialsStore.js.map +0 -1
- package/dist/generateHookSettings.js +0 -30
- package/dist/generateHookSettings.js.map +0 -1
- package/dist/handlers/fileHandlerPayloads.test.js +0 -55
- package/dist/handlers/fileHandlerPayloads.test.js.map +0 -1
- package/dist/handlers/promptImages.test.js +0 -52
- package/dist/handlers/promptImages.test.js.map +0 -1
- package/dist/hookServer.js +0 -32
- package/dist/hookServer.js.map +0 -1
- package/dist/ignorePaths.js +0 -68
- package/dist/ignorePaths.js.map +0 -1
- package/dist/loadDotEnv.js +0 -79
- package/dist/loadDotEnv.js.map +0 -1
- package/dist/logger.js +0 -29
- package/dist/logger.js.map +0 -1
- package/dist/portForwardManager.js +0 -97
- package/dist/portForwardManager.js.map +0 -1
- package/dist/projectHistoryReader.js +0 -85
- package/dist/projectHistoryReader.js.map +0 -1
- package/dist/pty/ansiCodes.js +0 -14
- package/dist/pty/ansiCodes.js.map +0 -1
- package/dist/pty/notificationDetector.js +0 -29
- package/dist/pty/notificationDetector.js.map +0 -1
- package/dist/pty/notificationDetector.test.js +0 -24
- package/dist/pty/notificationDetector.test.js.map +0 -1
- package/dist/pty/ptyMenuParser.js +0 -91
- package/dist/pty/ptyMenuParser.js.map +0 -1
- package/dist/pty/ptyMenuParser.test.js +0 -26
- package/dist/pty/ptyMenuParser.test.js.map +0 -1
- package/dist/pty/ptySnapshotRenderer.js +0 -71
- package/dist/pty/ptySnapshotRenderer.js.map +0 -1
- package/dist/pty/selectionMenuDetector.js +0 -49
- package/dist/pty/selectionMenuDetector.js.map +0 -1
- package/dist/pty/selectionMenuDetector.test.js +0 -62
- package/dist/pty/selectionMenuDetector.test.js.map +0 -1
- package/dist/pty/selectionMenuMeta.js +0 -54
- package/dist/pty/selectionMenuMeta.js.map +0 -1
- package/dist/pty/selectionMenuMeta.test.js +0 -26
- package/dist/pty/selectionMenuMeta.test.js.map +0 -1
- package/dist/pty/selectionMenuParser.js +0 -83
- package/dist/pty/selectionMenuParser.js.map +0 -1
- package/dist/pty/selectionMenuParser.test.js +0 -30
- package/dist/pty/selectionMenuParser.test.js.map +0 -1
- package/dist/pty/spawn.js +0 -104
- package/dist/pty/spawn.js.map +0 -1
- package/dist/pty/spawn.test.js +0 -17
- package/dist/pty/spawn.test.js.map +0 -1
- package/dist/pty/statusSessionDetector.js +0 -28
- package/dist/pty/statusSessionDetector.js.map +0 -1
- package/dist/pty/statusSessionDetector.test.js +0 -23
- package/dist/pty/statusSessionDetector.test.js.map +0 -1
- package/dist/pty/textInputDetector.js +0 -60
- package/dist/pty/textInputDetector.js.map +0 -1
- package/dist/pty/textInputDetector.test.js +0 -32
- package/dist/pty/textInputDetector.test.js.map +0 -1
- package/dist/ptyMenuParser.js +0 -470
- package/dist/ptyMenuParser.js.map +0 -1
- package/dist/ptySnapshotRenderer.js +0 -78
- package/dist/ptySnapshotRenderer.js.map +0 -1
- package/dist/services/checkpointService.js +0 -113
- package/dist/services/checkpointService.js.map +0 -1
- package/dist/services/checkpointService.test.js +0 -61
- package/dist/services/checkpointService.test.js.map +0 -1
- package/dist/services/claudeMenuBridge.js +0 -116
- package/dist/services/claudeMenuBridge.js.map +0 -1
- package/dist/services/claudeMenuBridge.test.js +0 -90
- package/dist/services/claudeMenuBridge.test.js.map +0 -1
- package/dist/services/claudeService.js +0 -146
- package/dist/services/claudeService.js.map +0 -1
- package/dist/services/claudeService.test.js +0 -39
- package/dist/services/claudeService.test.js.map +0 -1
- package/dist/services/cliRuntime.test.js +0 -55
- package/dist/services/cliRuntime.test.js.map +0 -1
- package/dist/services/modelAdapter.test.js +0 -47
- package/dist/services/modelAdapter.test.js.map +0 -1
- package/dist/services/modelArgs.test.js +0 -64
- package/dist/services/modelArgs.test.js.map +0 -1
- package/dist/services/modelBaseUrl.test.js +0 -32
- package/dist/services/modelBaseUrl.test.js.map +0 -1
- package/dist/services/modelService.test.js +0 -136
- package/dist/services/modelService.test.js.map +0 -1
- package/dist/services/notificationDedupe.js +0 -23
- package/dist/services/notificationDedupe.js.map +0 -1
- package/dist/services/notificationDedupe.test.js +0 -20
- package/dist/services/notificationDedupe.test.js.map +0 -1
- package/dist/services/sessionListService.test.js +0 -22
- package/dist/services/sessionListService.test.js.map +0 -1
- package/dist/services/sessionRollbackService.js +0 -195
- package/dist/services/sessionRollbackService.js.map +0 -1
- package/dist/services/sessionRollbackService.test.js +0 -142
- package/dist/services/sessionRollbackService.test.js.map +0 -1
- package/dist/services/tunnelHelpers.test.js +0 -42
- package/dist/services/tunnelHelpers.test.js.map +0 -1
- package/dist/services/tunnelService.test.js +0 -91
- package/dist/services/tunnelService.test.js.map +0 -1
- package/dist/sessionScanner.js +0 -271
- package/dist/sessionScanner.js.map +0 -1
- package/dist/snapshotScanner.js +0 -154
- package/dist/snapshotScanner.js.map +0 -1
- package/dist/spawn.js +0 -79
- package/dist/spawn.js.map +0 -1
- package/dist/terminalManager.js +0 -73
- package/dist/terminalManager.js.map +0 -1
- package/dist/transport/directWsServer.js +0 -135
- package/dist/transport/directWsServer.js.map +0 -1
- package/dist/transport/webrtcTransport.js +0 -145
- package/dist/transport/webrtcTransport.js.map +0 -1
- package/dist/transport/webrtcTransport.test.js +0 -104
- package/dist/transport/webrtcTransport.test.js.map +0 -1
- package/dist/transport/webrtcTypes.js +0 -29
- package/dist/transport/webrtcTypes.js.map +0 -1
- package/dist/transport/webrtcTypes.test.js +0 -20
- package/dist/transport/webrtcTypes.test.js.map +0 -1
- package/dist/utils/ptyBuffer.js +0 -46
- package/dist/utils/ptyBuffer.js.map +0 -1
- package/scripts/claude_launcher.cjs +0 -71
- package/scripts/run-tests.mjs +0 -46
- package/scripts/session_hook_forwarder.cjs +0 -44
package/README.md
CHANGED
|
@@ -7,10 +7,10 @@ A lightweight companion CLI for Kumo that connects your local terminal sessions
|
|
|
7
7
|
## ✨ Features
|
|
8
8
|
|
|
9
9
|
- Pair once with a short code from the app
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
10
|
+
- Run several Claude Code sessions at once and drive them from your phone
|
|
11
|
+
- Approve tool use, answer Claude's questions and review plans from the app
|
|
12
|
+
- Switch model, effort, thinking and permission mode without restarting
|
|
13
|
+
- Browse files, open terminals and tunnel local ports to the app
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
@@ -32,9 +32,9 @@ npx kumo-cli@latest
|
|
|
32
32
|
|
|
33
33
|
## ✅ Requirements
|
|
34
34
|
|
|
35
|
-
- Node.js **
|
|
35
|
+
- Node.js **20+**
|
|
36
36
|
- Internet access to reach your Kumo backend
|
|
37
|
-
- Native build prerequisites for `node-pty
|
|
37
|
+
- Native build prerequisites for `node-pty` (used by the in-app terminal):
|
|
38
38
|
- **Windows:** Visual Studio Build Tools + Python 3
|
|
39
39
|
- **macOS:** Xcode Command Line Tools (`xcode-select --install`)
|
|
40
40
|
- **Linux:** `build-essential`, `python3`, `make`, `gcc`
|
|
@@ -51,7 +51,10 @@ Kumo CLI is configured via environment variables. Export them in your shell or l
|
|
|
51
51
|
| `KUMO_SERVER_URL` | `https://kumocli.com/` | Base URL of the Kumo backend. Auto-derives HTTP & WS endpoints. |
|
|
52
52
|
| `KUMO_SERVER_HTTP_URL` | derived | Override the HTTP endpoint explicitly. |
|
|
53
53
|
| `KUMO_SERVER_WS_URL` | derived | Override the WebSocket endpoint explicitly. |
|
|
54
|
-
| `
|
|
54
|
+
| `KUMO_PERMISSION_MODE` | `default` | Permission mode for new sessions: `default`, `acceptEdits`, `plan` or `bypassPermissions` (needs `--dangerously-skip-permissions`). |
|
|
55
|
+
| `KUMO_CLAUDE_BIN` | auto | Path to the `claude` executable when auto-discovery picks the wrong one. |
|
|
56
|
+
| `KUMO_HOME_DIR` | `~/.kumo` | Where credentials and the device identity are stored. |
|
|
57
|
+
| `KUMO_ALLOWED_TUNNEL_PORTS` | all | Comma-separated local ports the app may tunnel to, e.g. `3000,5173`. Tunnels always target `127.0.0.1`. |
|
|
55
58
|
|
|
56
59
|
Credentials are persisted to `~/.kumo/credentials.json`.
|
|
57
60
|
|
|
@@ -79,14 +82,23 @@ kumo reset codex
|
|
|
79
82
|
|
|
80
83
|
Run `kumo reset` without an agent to choose which credentials to reset. Reset removes the selected credentials file only. It intentionally keeps `~/.kumo/device.json` so the backend can still recognize the same machine on the next pairing.
|
|
81
84
|
|
|
85
|
+
Hooks, permission rules and MCP servers the app adds go to this project's settings. Settings in `~/.claude/settings.json` and user-scope MCP servers apply to every Claude Code session on the machine and outlive Kumo, so the app may only change them when you start Kumo with:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
kumo claude --allow-remote-config
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Likewise, bypass permissions mode is only available from the app when Kumo was started with `--dangerously-skip-permissions`.
|
|
92
|
+
|
|
82
93
|
---
|
|
83
94
|
|
|
84
95
|
## 🧱 How it works
|
|
85
96
|
|
|
86
97
|
```
|
|
87
|
-
┌─────────────┐ WebSocket ┌──────────────┐
|
|
88
|
-
│ Kumo app │ ◄────────────► │ Kumo CLI │
|
|
89
|
-
└─────────────┘ └──────────────┘
|
|
98
|
+
┌─────────────┐ WebSocket ┌──────────────┐ stream-json ┌─────────────┐
|
|
99
|
+
│ Kumo app │ ◄────────────► │ Kumo CLI │ ◄─────────► │ Claude Code │
|
|
100
|
+
└─────────────┘ └──────────────┘ (1 per └─────────────┘
|
|
101
|
+
session)
|
|
90
102
|
▲ │
|
|
91
103
|
│ HTTP (pairing) │
|
|
92
104
|
└────────────────────────────────┘
|
|
@@ -95,8 +107,8 @@ Run `kumo reset` without an agent to choose which credentials to reset. Reset re
|
|
|
95
107
|
|
|
96
108
|
1. The CLI pairs with the backend using the 9-digit code → receives a long-lived `deviceToken`.
|
|
97
109
|
2. It opens a WebSocket to the backend and announces itself.
|
|
98
|
-
3.
|
|
99
|
-
4.
|
|
110
|
+
3. The first prompt of a session spawns `claude` with `--input-format/--output-format stream-json` and the control protocol (`--permission-prompt-tool stdio`), the same way the VS Code extension talks to it. Up to 6 sessions stay live; the idlest one is closed beyond that.
|
|
111
|
+
4. Chat content is read from Claude's session transcript; turn state, permission requests, results and settings come from the control channel and are relayed to the app.
|
|
100
112
|
|
|
101
113
|
---
|
|
102
114
|
|
|
@@ -105,7 +117,8 @@ Run `kumo reset` without an agent to choose which credentials to reset. Reset re
|
|
|
105
117
|
- **`node-pty` build fails** — make sure your toolchain (above) is installed, then re-run `npm install -g kumo-cli`.
|
|
106
118
|
- **Pairing code rejected** — codes are single-use and expire quickly. Generate a fresh one in the app.
|
|
107
119
|
- **Cannot connect** — verify `KUMO_SERVER_URL` matches the backend the app is talking to.
|
|
108
|
-
- **
|
|
120
|
+
- **"Claude is not logged in"** — run `claude` once on the machine and sign in, then send the prompt again.
|
|
121
|
+
- **Wrong Claude binary** — set `KUMO_CLAUDE_BIN` to the `claude` executable you want the CLI to use.
|
|
109
122
|
|
|
110
123
|
---
|
|
111
124
|
|
|
@@ -9,14 +9,29 @@ function credentialsFileName(agent = 'claude') {
|
|
|
9
9
|
return agent === 'claude' ? CRED_FILE_NAME : `${agent}-credentials.json`;
|
|
10
10
|
}
|
|
11
11
|
// resolve the local kumo state directory and allow tests to override it
|
|
12
|
-
function kumoDir() {
|
|
12
|
+
export function kumoDir() {
|
|
13
13
|
return process.env[KUMO_DIR_ENV] || path.join(os.homedir(), '.kumo');
|
|
14
14
|
}
|
|
15
|
-
// ensure the local kumo directory exists before writing state files
|
|
15
|
+
// ensure the local kumo directory exists before writing state files, readable by this user only
|
|
16
16
|
function ensureKumoDir() {
|
|
17
17
|
const dir = kumoDir();
|
|
18
18
|
if (!fs.existsSync(dir))
|
|
19
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
19
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
20
|
+
restrict(dir, 0o700);
|
|
21
|
+
}
|
|
22
|
+
// posix permissions; writeFileSync's mode only applies when it creates the file
|
|
23
|
+
function restrict(target, mode) {
|
|
24
|
+
if (process.platform === 'win32')
|
|
25
|
+
return;
|
|
26
|
+
try {
|
|
27
|
+
fs.chmodSync(target, mode);
|
|
28
|
+
}
|
|
29
|
+
catch { }
|
|
30
|
+
}
|
|
31
|
+
function writePrivate(file, data) {
|
|
32
|
+
ensureKumoDir();
|
|
33
|
+
fs.writeFileSync(file, JSON.stringify(data, null, 2), { encoding: 'utf-8', mode: 0o600 });
|
|
34
|
+
restrict(file, 0o600);
|
|
20
35
|
}
|
|
21
36
|
// load credentials from ~/.kumo/credentials.json if present
|
|
22
37
|
export function loadCredentials(agent = 'claude') {
|
|
@@ -35,8 +50,7 @@ export function loadCredentials(agent = 'claude') {
|
|
|
35
50
|
}
|
|
36
51
|
// persist credentials with restrictive 0600 mode on posix
|
|
37
52
|
export function saveCredentials(creds, agent = 'claude') {
|
|
38
|
-
|
|
39
|
-
fs.writeFileSync(credentialsPath(agent), JSON.stringify(creds, null, 2), { encoding: 'utf-8', mode: 0o600 });
|
|
53
|
+
writePrivate(credentialsPath(agent), creds);
|
|
40
54
|
}
|
|
41
55
|
// load the persisted device identity if present and valid
|
|
42
56
|
export function loadDeviceIdentity() {
|
|
@@ -55,8 +69,7 @@ export function loadDeviceIdentity() {
|
|
|
55
69
|
}
|
|
56
70
|
// persist the stable device identity used across credential resets
|
|
57
71
|
export function saveDeviceIdentity(deviceUuid) {
|
|
58
|
-
|
|
59
|
-
fs.writeFileSync(deviceIdentityPath(), JSON.stringify({ deviceUuid }, null, 2), { encoding: 'utf-8', mode: 0o600 });
|
|
72
|
+
writePrivate(deviceIdentityPath(), { deviceUuid });
|
|
60
73
|
return deviceUuid;
|
|
61
74
|
}
|
|
62
75
|
// return the stable device uuid, seeding from a known uuid or generating one once
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentialsStore.js","sourceRoot":"","sources":["../../src/auth/credentialsStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAezC,MAAM,YAAY,GAAG,eAAe,CAAC;AACrC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAC1C,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAEvC,SAAS,mBAAmB,CAAC,QAAmB,QAAQ;IACtD,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,mBAAmB,CAAC;AAC3E,CAAC;AAED,wEAAwE;AACxE,
|
|
1
|
+
{"version":3,"file":"credentialsStore.js","sourceRoot":"","sources":["../../src/auth/credentialsStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
// rebuilds the conversation of a session jsonl the way the vs code extension does (agent sdk
|
|
2
|
+
// getSessionMessages): walk the parentUuid chain back from the newest leaf, so rewound branches
|
|
3
|
+
// drop out, then put back the sibling entries of assistant messages split over several lines
|
|
4
|
+
// (parallel tool calls) and turn answered queued prompts into user messages. unlike the
|
|
5
|
+
// extension the conversations before each compaction stay, above its boundary
|
|
6
|
+
const CHAIN_TYPES = new Set(['user', 'assistant', 'progress', 'system', 'attachment']);
|
|
7
|
+
// the jsonl lines that take part in the chain
|
|
8
|
+
export function parseEntries(lines) {
|
|
9
|
+
const entries = [];
|
|
10
|
+
for (const line of lines) {
|
|
11
|
+
try {
|
|
12
|
+
const entry = JSON.parse(line);
|
|
13
|
+
if (CHAIN_TYPES.has(entry.type) && typeof entry.uuid === 'string')
|
|
14
|
+
entries.push(entry);
|
|
15
|
+
}
|
|
16
|
+
catch { }
|
|
17
|
+
}
|
|
18
|
+
return entries;
|
|
19
|
+
}
|
|
20
|
+
const isTurn = (entry) => entry.type === 'user' || entry.type === 'assistant';
|
|
21
|
+
export const isCompactBoundary = (entry) => entry.type === 'system' && entry.subtype === 'compact_boundary';
|
|
22
|
+
const messageIdOf = (entry) => entry.type === 'assistant' && typeof entry.message?.id === 'string' ? entry.message.id : undefined;
|
|
23
|
+
function blockIds(entry, type, key) {
|
|
24
|
+
const content = entry.message?.content;
|
|
25
|
+
if (!Array.isArray(content))
|
|
26
|
+
return [];
|
|
27
|
+
return content.filter((b) => !!b && typeof b === 'object' && b['type'] === type)
|
|
28
|
+
.map((b) => b[key])
|
|
29
|
+
.filter((id) => typeof id === 'string');
|
|
30
|
+
}
|
|
31
|
+
const hasToolResult = (entry) => entry.type === 'user' && !!entry.parentUuid && blockIds(entry, 'tool_result', 'tool_use_id').length > 0;
|
|
32
|
+
// relink messages a compaction preserved behind its boundary
|
|
33
|
+
function applyCompactLinks(byUuid) {
|
|
34
|
+
for (const entry of [...byUuid.values()]) {
|
|
35
|
+
if (entry.type !== 'system' || entry.subtype !== 'compact_boundary')
|
|
36
|
+
continue;
|
|
37
|
+
const preserved = entry.compactMetadata?.preservedMessages;
|
|
38
|
+
const segment = entry.compactMetadata?.preservedSegment;
|
|
39
|
+
if (preserved) {
|
|
40
|
+
if (preserved.uuids.length === 0 || preserved.uuids.some((uuid) => !byUuid.has(uuid)))
|
|
41
|
+
continue;
|
|
42
|
+
let parent = preserved.anchorUuid;
|
|
43
|
+
for (const uuid of preserved.uuids) {
|
|
44
|
+
byUuid.set(uuid, { ...byUuid.get(uuid), parentUuid: parent });
|
|
45
|
+
parent = uuid;
|
|
46
|
+
}
|
|
47
|
+
const [head, tail] = [preserved.uuids[0], preserved.uuids.at(-1)];
|
|
48
|
+
for (const [uuid, other] of byUuid) {
|
|
49
|
+
if (other.parentUuid === preserved.anchorUuid && uuid !== head)
|
|
50
|
+
byUuid.set(uuid, { ...other, parentUuid: tail });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else if (segment) {
|
|
54
|
+
const head = byUuid.get(segment.headUuid);
|
|
55
|
+
if (head)
|
|
56
|
+
byUuid.set(segment.headUuid, { ...head, parentUuid: segment.anchorUuid });
|
|
57
|
+
for (const [uuid, other] of byUuid) {
|
|
58
|
+
if (other.parentUuid === segment.anchorUuid && uuid !== segment.headUuid)
|
|
59
|
+
byUuid.set(uuid, { ...other, parentUuid: segment.tailUuid });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// the newest user/assistant entry the main conversation ends on
|
|
65
|
+
function findLeaf(entries, byUuid, order) {
|
|
66
|
+
const main = (e) => !e.isSidechain && !e.teamName && e.type !== 'progress' && !(e.type === 'attachment' && e.attachment?.type === 'fork_briefing');
|
|
67
|
+
const mainParents = new Set();
|
|
68
|
+
for (const e of byUuid.values())
|
|
69
|
+
if (e.parentUuid && main(e))
|
|
70
|
+
mainParents.add(e.parentUuid);
|
|
71
|
+
const leaves = [...byUuid.values()].filter((e) => main(e) && !mainParents.has(e.uuid))
|
|
72
|
+
.sort((a, b) => (order.get(b.uuid) ?? -1) - (order.get(a.uuid) ?? -1));
|
|
73
|
+
const visited = new Set();
|
|
74
|
+
for (const leaf of leaves) {
|
|
75
|
+
const walked = new Set();
|
|
76
|
+
for (let e = leaf; e && !visited.has(e.uuid) && !walked.has(e.uuid); e = e.parentUuid ? byUuid.get(e.parentUuid) : undefined) {
|
|
77
|
+
if (isTurn(e))
|
|
78
|
+
return e;
|
|
79
|
+
walked.add(e.uuid);
|
|
80
|
+
}
|
|
81
|
+
for (const uuid of walked)
|
|
82
|
+
visited.add(uuid);
|
|
83
|
+
}
|
|
84
|
+
// no main leaf reaches a turn: take the newest turn above any leaf
|
|
85
|
+
const parents = new Set();
|
|
86
|
+
for (const e of byUuid.values())
|
|
87
|
+
if (e.parentUuid)
|
|
88
|
+
parents.add(e.parentUuid);
|
|
89
|
+
const candidates = [];
|
|
90
|
+
for (const leaf of entries.filter((e) => !parents.has(e.uuid))) {
|
|
91
|
+
const seen = new Set();
|
|
92
|
+
for (let e = leaf; e && !seen.has(e.uuid); e = e.parentUuid ? byUuid.get(e.parentUuid) : undefined) {
|
|
93
|
+
seen.add(e.uuid);
|
|
94
|
+
if (isTurn(e)) {
|
|
95
|
+
candidates.push(e);
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (candidates.length === 0)
|
|
101
|
+
return undefined;
|
|
102
|
+
const newest = (list) => list.reduce((a, b) => ((order.get(b.uuid) ?? -1) > (order.get(a.uuid) ?? -1) ? b : a));
|
|
103
|
+
const plain = candidates.filter((e) => !e.isSidechain && !e.teamName && !e.isMeta);
|
|
104
|
+
return newest(plain.length > 0 ? plain : candidates);
|
|
105
|
+
}
|
|
106
|
+
const push = (map, key, value) => {
|
|
107
|
+
const list = map.get(key);
|
|
108
|
+
if (list)
|
|
109
|
+
list.push(value);
|
|
110
|
+
else
|
|
111
|
+
map.set(key, [value]);
|
|
112
|
+
};
|
|
113
|
+
const resultIds = (entry) => blockIds(entry, 'tool_result', 'tool_use_id');
|
|
114
|
+
const sameThread = (a, b) => (a.isSidechain ?? false) === (b.isSidechain ?? false) && a.agentId === b.agentId;
|
|
115
|
+
const byTime = (a, b) => (a.timestamp ?? '').localeCompare(b.timestamp ?? '');
|
|
116
|
+
function indexLines(byUuid) {
|
|
117
|
+
const linesOf = new Map();
|
|
118
|
+
const toolOwner = new Map();
|
|
119
|
+
const results = [];
|
|
120
|
+
for (const e of byUuid.values()) {
|
|
121
|
+
const id = messageIdOf(e);
|
|
122
|
+
if (!id) {
|
|
123
|
+
if (hasToolResult(e))
|
|
124
|
+
results.push(e);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
push(linesOf, id, e);
|
|
128
|
+
for (const toolId of blockIds(e, 'tool_use', 'id')) {
|
|
129
|
+
const owner = toolOwner.get(toolId);
|
|
130
|
+
toolOwner.set(toolId, owner === undefined || (owner !== null && messageIdOf(owner) === id) ? e : null);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const children = new Map();
|
|
134
|
+
const linked = new Set();
|
|
135
|
+
const link = (parent, child) => {
|
|
136
|
+
const key = `${parent}\n${child.uuid}`;
|
|
137
|
+
if (linked.has(key))
|
|
138
|
+
return;
|
|
139
|
+
linked.add(key);
|
|
140
|
+
push(children, parent, child);
|
|
141
|
+
};
|
|
142
|
+
for (const result of results) {
|
|
143
|
+
link(result.parentUuid, result);
|
|
144
|
+
const source = result.sourceToolAssistantUUID && result.sourceToolAssistantUUID !== result.parentUuid ? byUuid.get(result.sourceToolAssistantUUID) : undefined;
|
|
145
|
+
if (source && sameThread(result, source))
|
|
146
|
+
link(source.uuid, result);
|
|
147
|
+
for (const toolId of resultIds(result)) {
|
|
148
|
+
const owner = toolOwner.get(toolId);
|
|
149
|
+
if (owner && sameThread(result, owner))
|
|
150
|
+
link(owner.uuid, result);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return { linesOf, toolOwner, children };
|
|
154
|
+
}
|
|
155
|
+
// the off-chain lines of one assistant message and the results answering them, oldest first
|
|
156
|
+
function siblingsOf(lines, index, onChain, answered, fileOrder) {
|
|
157
|
+
const lineIds = new Set(lines.map((e) => e.uuid));
|
|
158
|
+
const direct = [];
|
|
159
|
+
const indirect = [];
|
|
160
|
+
const seen = new Set();
|
|
161
|
+
for (const line of lines) {
|
|
162
|
+
for (const child of index.children.get(line.uuid) ?? []) {
|
|
163
|
+
if (onChain.has(child.uuid) || seen.has(child.uuid))
|
|
164
|
+
continue;
|
|
165
|
+
seen.add(child.uuid);
|
|
166
|
+
(lineIds.has(child.parentUuid ?? '') ? direct : indirect).push(child);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// a result hanging off another line counts when it answers a tool use of this message nobody
|
|
170
|
+
// answered yet. the chain's answers are looked up in place, not copied for every message
|
|
171
|
+
if (indirect.length > 0) {
|
|
172
|
+
const local = new Set(direct.flatMap(resultIds));
|
|
173
|
+
const covered = (toolId) => answered.has(toolId) || local.has(toolId);
|
|
174
|
+
indirect.sort((a, b) => (fileOrder.get(a.uuid) ?? Infinity) - (fileOrder.get(b.uuid) ?? Infinity));
|
|
175
|
+
for (const e of indirect) {
|
|
176
|
+
const toolIds = resultIds(e);
|
|
177
|
+
if (!toolIds.some((toolId) => !covered(toolId) && lineIds.has(index.toolOwner.get(toolId)?.uuid ?? '')))
|
|
178
|
+
continue;
|
|
179
|
+
for (const toolId of toolIds)
|
|
180
|
+
local.add(toolId);
|
|
181
|
+
direct.push(e);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return [...lines.filter((e) => !onChain.has(e.uuid)).sort(byTime), ...direct.sort(byTime)];
|
|
185
|
+
}
|
|
186
|
+
// assistant lines of one message that are off the chain, and the tool results answering them
|
|
187
|
+
function withSiblings(byUuid, chain, onChain) {
|
|
188
|
+
const index = indexLines(byUuid);
|
|
189
|
+
const answered = new Set(chain.flatMap(resultIds));
|
|
190
|
+
const fileOrder = new Map([...byUuid.keys()].map((uuid, i) => [uuid, i]));
|
|
191
|
+
// the last chain line of each message carries the siblings after it
|
|
192
|
+
const anchorOf = new Map();
|
|
193
|
+
for (const e of chain) {
|
|
194
|
+
const id = messageIdOf(e);
|
|
195
|
+
if (id)
|
|
196
|
+
anchorOf.set(id, e);
|
|
197
|
+
}
|
|
198
|
+
const extras = new Map();
|
|
199
|
+
for (const [id, anchor] of anchorOf) {
|
|
200
|
+
const added = siblingsOf(index.linesOf.get(id) ?? [anchor], index, onChain, answered, fileOrder);
|
|
201
|
+
if (added.length === 0)
|
|
202
|
+
continue;
|
|
203
|
+
for (const e of added)
|
|
204
|
+
onChain.add(e.uuid);
|
|
205
|
+
extras.set(anchor.uuid, added);
|
|
206
|
+
}
|
|
207
|
+
if (extras.size === 0)
|
|
208
|
+
return chain;
|
|
209
|
+
return chain.flatMap((e) => [e, ...(extras.get(e.uuid) ?? [])]);
|
|
210
|
+
}
|
|
211
|
+
// a queued prompt claude went on to answer becomes the user message it was; background task
|
|
212
|
+
// notifications are no prompts (the extension draws them apart, the app does not show them)
|
|
213
|
+
function queuedPrompts(chain) {
|
|
214
|
+
let answered = false;
|
|
215
|
+
const out = new Array(chain.length);
|
|
216
|
+
for (let i = chain.length - 1; i >= 0; i--) {
|
|
217
|
+
const e = chain[i];
|
|
218
|
+
const prompt = e.attachment?.prompt;
|
|
219
|
+
if (answered && e.type === 'attachment' && e.attachment?.type === 'queued_command' && !e.attachment.isMeta
|
|
220
|
+
&& e.attachment.commandMode !== 'task-notification' && (typeof prompt === 'string' || Array.isArray(prompt))) {
|
|
221
|
+
out[i] = { ...e, type: 'user', uuid: e.attachment.source_uuid ?? e.uuid, message: { role: 'user', content: prompt } };
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
out[i] = e;
|
|
225
|
+
}
|
|
226
|
+
if (e.type === 'assistant' || hasToolResult(e))
|
|
227
|
+
answered = true;
|
|
228
|
+
else if (e.type === 'user' && !e.isMeta && !e.isCompactSummary)
|
|
229
|
+
answered = false;
|
|
230
|
+
}
|
|
231
|
+
return out;
|
|
232
|
+
}
|
|
233
|
+
// the conversations before each compaction, on the lines as claude wrote them: there the
|
|
234
|
+
// messages a compaction preserved still sit before its boundary, so they show once, above it
|
|
235
|
+
function withEarlierSegments(chain, written) {
|
|
236
|
+
let earlier = [];
|
|
237
|
+
const visited = new Set();
|
|
238
|
+
for (let first = chain[0]; first && isCompactBoundary(first) && first.logicalParentUuid;) {
|
|
239
|
+
const segment = [];
|
|
240
|
+
for (let e = written.get(first.logicalParentUuid); e && !visited.has(e.uuid); e = e.parentUuid ? written.get(e.parentUuid) : undefined) {
|
|
241
|
+
visited.add(e.uuid);
|
|
242
|
+
segment.push(e);
|
|
243
|
+
}
|
|
244
|
+
earlier = [...segment.reverse(), ...earlier];
|
|
245
|
+
first = segment[0];
|
|
246
|
+
}
|
|
247
|
+
return earlier.length === 0 ? chain : [...earlier, ...chain.filter((e) => !visited.has(e.uuid))];
|
|
248
|
+
}
|
|
249
|
+
// the user and assistant entries of the active conversation and the compactions in it, oldest first
|
|
250
|
+
export function buildConversation(entries) {
|
|
251
|
+
const written = new Map();
|
|
252
|
+
for (const e of entries)
|
|
253
|
+
written.set(e.uuid, e);
|
|
254
|
+
const byUuid = new Map(written);
|
|
255
|
+
applyCompactLinks(byUuid);
|
|
256
|
+
const order = new Map(entries.map((e, i) => [e.uuid, i]));
|
|
257
|
+
const leaf = findLeaf(entries, byUuid, order);
|
|
258
|
+
if (!leaf)
|
|
259
|
+
return [];
|
|
260
|
+
const chain = [];
|
|
261
|
+
const onChain = new Set();
|
|
262
|
+
for (let e = byUuid.get(leaf.uuid); e && !onChain.has(e.uuid); e = e.parentUuid ? byUuid.get(e.parentUuid) : undefined) {
|
|
263
|
+
onChain.add(e.uuid);
|
|
264
|
+
chain.push(e);
|
|
265
|
+
}
|
|
266
|
+
const conversation = withEarlierSegments(chain.reverse(), written);
|
|
267
|
+
for (const e of conversation)
|
|
268
|
+
onChain.add(e.uuid);
|
|
269
|
+
return queuedPrompts(withSiblings(byUuid, conversation, onChain))
|
|
270
|
+
.filter((e) => (isTurn(e) || isCompactBoundary(e)) && !e.isMeta && !e.isSidechain && !e.teamName && !e.isCompactSummary);
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=conversation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/claude/conversation.ts"],"names":[],"mappings":"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"}
|