kumo-cli 1.0.5 → 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 -103
  124. package/dist/pty/spawn.js.map +0 -1
  125. package/dist/pty/spawn.test.js +0 -16
  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
package/README.md CHANGED
@@ -1,127 +1,131 @@
1
- # Kumo CLI
2
-
3
- A lightweight companion CLI for Kumo that connects your local terminal sessions to the Kumo app.
4
-
5
- ---
6
-
7
- ## ✨ Features
8
-
9
- - Pair once with a short code from the app
10
- - Resume and manage Claude Code sessions remotely
11
- - Stream PTY output over WebSocket
12
- - Auto-sync Claude session state and transcript events
13
- - Optional local hook server integration for Claude session discovery
14
-
15
- ---
16
-
17
- ## 📦 Installation
18
-
19
- ### Global install
20
-
21
- ```bash
22
- npm install -g kumo-cli
23
- ```
24
-
25
- ### One-off via npx
26
-
27
- ```bash
28
- npx kumo-cli@latest
29
- ```
30
-
31
- ---
32
-
33
- ## ✅ Requirements
34
-
35
- - Node.js **18+**
36
- - Internet access to reach your Kumo backend
37
- - Native build prerequisites for `node-pty`:
38
- - **Windows:** Visual Studio Build Tools + Python 3
39
- - **macOS:** Xcode Command Line Tools (`xcode-select --install`)
40
- - **Linux:** `build-essential`, `python3`, `make`, `gcc`
41
- - [Claude Code CLI](https://docs.anthropic.com/claude/docs/claude-code) installed and on `PATH` (only if you plan to use the Claude session features)
42
-
43
- ---
44
-
45
- ## 🛠️ Configuration
46
-
47
- Kumo CLI is configured via environment variables. Export them in your shell or load them explicitly with `--env-file path/to/.env`.
48
-
49
- | Variable | Default | Description |
50
- | --- | --- | --- |
51
- | `KUMO_SERVER_URL` | `https://kumocli.com/` | Base URL of the Kumo backend. Auto-derives HTTP & WS endpoints. |
52
- | `KUMO_SERVER_HTTP_URL` | derived | Override the HTTP endpoint explicitly. |
53
- | `KUMO_SERVER_WS_URL` | derived | Override the WebSocket endpoint explicitly. |
54
- | `KUMO_PORT` | `3579` | Local port hint (used by some discovery flows). |
55
-
56
- Credentials are persisted to `~/.kumo/credentials.json`.
57
-
58
- The CLI also keeps a stable device identity in `~/.kumo/device.json` so pairing the same machine again after `kumo reset` reuses the existing machine entry instead of creating a duplicate.
59
-
60
- ---
61
-
62
- ## 🧭 Usage
63
-
64
- ```bash
65
- kumo claude --env-file .env
66
- kumo claude --env-file .env.local
67
- kumo codex
68
- kumo --help
69
- ```
70
-
71
- Run `kumo` without `claude` or `codex` to choose an agent from the menu. Codex support is currently under development.
72
-
73
- To clear one agent's current token and pair again on the same machine, run:
74
-
75
- ```bash
76
- kumo reset claude
77
- kumo reset codex
78
- ```
79
-
80
- 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
-
82
- ---
83
-
84
- ## 🧱 How it works
85
-
86
- ```
87
- ┌─────────────┐ WebSocket ┌──────────────┐ PTY ┌─────────────┐
88
- │ Kumo app │ ◄────────────► │ Kumo CLI │ ◄───────► │ Claude Code │
89
- └─────────────┘ └──────────────┘ └─────────────┘
90
- ▲ │
91
- │ HTTP (pairing) │
92
- └────────────────────────────────┘
93
- Kumo backend
94
- ```
95
-
96
- 1. The CLI pairs with the backend using the 9-digit code → receives a long-lived `deviceToken`.
97
- 2. It opens a WebSocket to the backend and announces itself.
98
- 3. When the app requests a session, the CLI spawns Claude Code under a real PTY.
99
- 4. STDIN/STDOUT are streamed both ways; periodic snapshots and Claude session hooks keep state coherent.
100
-
101
- ---
102
-
103
- ## 🐞 Troubleshooting
104
-
105
- - **`node-pty` build fails** — make sure your toolchain (above) is installed, then re-run `npm install -g kumo-cli`.
106
- - **Pairing code rejected** — codes are single-use and expire quickly. Generate a fresh one in the app.
107
- - **Cannot connect** — verify `KUMO_SERVER_URL` matches the backend the app is talking to.
108
- - **Hooks not firing** — make sure Claude Code is on `PATH` and you launched a session through the CLI (the hook settings file is auto-generated under the system temp dir).
109
-
110
- ---
111
-
112
- ## 🤝 Contributing
113
-
114
- Issues and PRs are welcome at [github.com/kumo-app/kumo](https://github.com/kumo-app/kumo).
115
-
116
- ```bash
117
- git clone https://github.com/kumo-app/kumo.git
118
- cd kumo/cli
119
- npm install
120
- npm run dev
121
- ```
122
-
123
- ---
124
-
125
- ## 📄 License
126
-
127
- [MIT](./LICENSE) © Kumo
1
+ # Kumo CLI
2
+
3
+ A lightweight companion CLI for Kumo that connects your local terminal sessions to the Kumo app.
4
+
5
+ ---
6
+
7
+ ## ✨ Features
8
+
9
+ - Pair once with a short code from the app
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
+
15
+ ---
16
+
17
+ ## 📦 Installation
18
+
19
+ ### Global install
20
+
21
+ ```bash
22
+ npm install -g kumo-cli
23
+ ```
24
+
25
+ ### One-off via npx
26
+
27
+ ```bash
28
+ npx kumo-cli@latest
29
+ ```
30
+
31
+ ---
32
+
33
+ ## ✅ Requirements
34
+
35
+ - Node.js **18+**
36
+ - Internet access to reach your Kumo backend
37
+ - Native build prerequisites for `node-pty` (used by the in-app terminal):
38
+ - **Windows:** Visual Studio Build Tools + Python 3
39
+ - **macOS:** Xcode Command Line Tools (`xcode-select --install`)
40
+ - **Linux:** `build-essential`, `python3`, `make`, `gcc`
41
+ - [Claude Code CLI](https://docs.anthropic.com/claude/docs/claude-code) installed and on `PATH` (only if you plan to use the Claude session features)
42
+
43
+ ---
44
+
45
+ ## 🛠️ Configuration
46
+
47
+ Kumo CLI is configured via environment variables. Export them in your shell or load them explicitly with `--env-file path/to/.env`.
48
+
49
+ | Variable | Default | Description |
50
+ | --- | --- | --- |
51
+ | `KUMO_SERVER_URL` | `https://kumocli.com/` | Base URL of the Kumo backend. Auto-derives HTTP & WS endpoints. |
52
+ | `KUMO_SERVER_HTTP_URL` | derived | Override the HTTP endpoint explicitly. |
53
+ | `KUMO_SERVER_WS_URL` | derived | Override the WebSocket endpoint explicitly. |
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
+
58
+ Credentials are persisted to `~/.kumo/credentials.json`.
59
+
60
+ The CLI also keeps a stable device identity in `~/.kumo/device.json` so pairing the same machine again after `kumo reset` reuses the existing machine entry instead of creating a duplicate.
61
+
62
+ ---
63
+
64
+ ## 🧭 Usage
65
+
66
+ ```bash
67
+ kumo claude --env-file .env
68
+ kumo claude --env-file .env.local
69
+ kumo codex
70
+ kumo --help
71
+ ```
72
+
73
+ Run `kumo` without `claude` or `codex` to choose an agent from the menu. Codex support is currently under development.
74
+
75
+ To clear one agent's current token and pair again on the same machine, run:
76
+
77
+ ```bash
78
+ kumo reset claude
79
+ kumo reset codex
80
+ ```
81
+
82
+ 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.
83
+
84
+ ---
85
+
86
+ ## 🧱 How it works
87
+
88
+ ```
89
+ ┌─────────────┐ WebSocket ┌──────────────┐ stream-json ┌─────────────┐
90
+ │ Kumo app │ ◄────────────► │ Kumo CLI │ ◄─────────► │ Claude Code │
91
+ └─────────────┘ └──────────────┘ (1 per └─────────────┘
92
+ session)
93
+ ▲ │
94
+ │ HTTP (pairing) │
95
+ └────────────────────────────────┘
96
+ Kumo backend
97
+ ```
98
+
99
+ 1. The CLI pairs with the backend using the 9-digit code → receives a long-lived `deviceToken`.
100
+ 2. It opens a WebSocket to the backend and announces itself.
101
+ 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.
102
+ 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.
103
+
104
+ ---
105
+
106
+ ## 🐞 Troubleshooting
107
+
108
+ - **`node-pty` build fails** — make sure your toolchain (above) is installed, then re-run `npm install -g kumo-cli`.
109
+ - **Pairing code rejected** — codes are single-use and expire quickly. Generate a fresh one in the app.
110
+ - **Cannot connect** — verify `KUMO_SERVER_URL` matches the backend the app is talking to.
111
+ - **"Claude is not logged in"** — run `claude` once on the machine and sign in, then send the prompt again.
112
+ - **Wrong Claude binary** — set `KUMO_CLAUDE_BIN` to the `claude` executable you want the CLI to use.
113
+
114
+ ---
115
+
116
+ ## 🤝 Contributing
117
+
118
+ Issues and PRs are welcome at [github.com/kumo-app/kumo](https://github.com/kumo-app/kumo).
119
+
120
+ ```bash
121
+ git clone https://github.com/kumo-app/kumo.git
122
+ cd kumo/cli
123
+ npm install
124
+ npm run dev
125
+ ```
126
+
127
+ ---
128
+
129
+ ## 📄 License
130
+
131
+ [MIT](./LICENSE) © Kumo
@@ -9,7 +9,7 @@ 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
15
  // ensure the local kumo directory exists before writing state files
@@ -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,SAAS,OAAO;IACd,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AACvE,CAAC;AAED,oEAAoE;AACpE,SAAS,aAAa;IACpB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,eAAe,CAAC,QAAmB,QAAQ;IACzD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAoB,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAC3D,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,eAAe,CAAC,KAAsB,EAAE,QAAmB,QAAQ;IACjF,aAAa,EAAE,CAAC;IAChB,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/G,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAuB,CAAC;QAChF,IAAI,CAAC,MAAM,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,aAAa,EAAE,CAAC;IAChB,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,gBAAgB,CAAC,cAAuB;IACtD,MAAM,QAAQ,GAAG,kBAAkB,EAAE,EAAE,UAAU,CAAC;IAClD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,kBAAkB,CAAC,cAAc,IAAI,UAAU,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,gBAAgB,CAAC,QAAmB,QAAQ;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACvC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAmB,QAAQ;IACzD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAChD,CAAC"}
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,MAAM,UAAU,OAAO;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AACvE,CAAC;AAED,oEAAoE;AACpE,SAAS,aAAa;IACpB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,eAAe,CAAC,QAAmB,QAAQ;IACzD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAoB,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAC3D,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,eAAe,CAAC,KAAsB,EAAE,QAAmB,QAAQ;IACjF,aAAa,EAAE,CAAC;IAChB,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/G,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAuB,CAAC;QAChF,IAAI,CAAC,MAAM,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,aAAa,EAAE,CAAC;IAChB,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,gBAAgB,CAAC,cAAuB;IACtD,MAAM,QAAQ,GAAG,kBAAkB,EAAE,EAAE,UAAU,CAAC;IAClD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,kBAAkB,CAAC,cAAc,IAAI,UAAU,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,gBAAgB,CAAC,QAAmB,QAAQ;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACvC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAmB,QAAQ;IACzD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAChD,CAAC"}
@@ -1,4 +1,22 @@
1
- import { readFileHistoryPrev } from './fileHistory.js';
1
+ // record tool results carried by a user message; returns ids of failed or rejected tool uses
2
+ export function rememberToolResults(msg, results) {
3
+ const content = msg.message?.content;
4
+ if (!Array.isArray(content))
5
+ return [];
6
+ const failed = [];
7
+ for (const block of content) {
8
+ if (block.type !== 'tool_result' || typeof block.tool_use_id !== 'string')
9
+ continue;
10
+ const info = typeof msg.toolUseResult === 'object' ? { ...msg.toolUseResult } : {};
11
+ if (block.is_error) {
12
+ info.isError = true;
13
+ failed.push(block.tool_use_id);
14
+ }
15
+ if (msg.toolUseResult || block.is_error)
16
+ results.set(block.tool_use_id, info);
17
+ }
18
+ return failed;
19
+ }
2
20
  const NOISE_TAGS_RE = /<local-command-|<\/local-command-|<command-name>|<command-message>|<command-args>/i;
3
21
  const NOISE_INTERRUPT_RE = /request interrupted by user|interrupted by user|interrupted the running process/i;
4
22
  const UUID_LINE_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\s*$/i;
@@ -18,7 +36,7 @@ export function parseTranscriptMessage(message, options) {
18
36
  return null;
19
37
  if (message.uuid)
20
38
  options.seenUuids?.add(message.uuid);
21
- const { content, toolUses } = parseMessageContent(message.message.content ?? '', options.sessionId);
39
+ const { content, toolUses } = parseMessageContent(message.message.content ?? '', options);
22
40
  if (!content && toolUses.length === 0)
23
41
  return null;
24
42
  if (!options.includeNoise && content && isNoiseTranscript(content))
@@ -47,7 +65,7 @@ export function isNoiseTranscript(content) {
47
65
  return false;
48
66
  }
49
67
  // flatten mixed text/tool blocks into user-visible content and tool metadata
50
- function parseMessageContent(content, sessionId) {
68
+ function parseMessageContent(content, options) {
51
69
  if (typeof content === 'string') {
52
70
  return { content, toolUses: [] };
53
71
  }
@@ -62,22 +80,103 @@ function parseMessageContent(content, sessionId) {
62
80
  for (const block of content) {
63
81
  if (block.type !== 'tool_use' || !block.name)
64
82
  continue;
65
- const toolUse = { toolName: block.name, input: block.input ?? {} };
66
- enrichWriteWithOldContent(toolUse, sessionId);
83
+ const toolUse = { toolName: block.name, input: { ...(block.input ?? {}) } };
84
+ const result = typeof block.id === 'string' ? options.toolResults?.get(block.id) : undefined;
85
+ if (typeof block.id === 'string')
86
+ toolUse.input['tool_use_id'] = block.id;
87
+ if (result?.isError)
88
+ toolUse.input['tool_error'] = true;
89
+ if (result?.structuredPatch)
90
+ toolUse.input['structuredPatch'] = result.structuredPatch;
91
+ if (result?.type)
92
+ toolUse.input['file_change_type'] = result.type;
93
+ if (result && 'originalFile' in result)
94
+ toolUse.input['original_file'] = result.originalFile;
95
+ enrichFileChangeTool(toolUse, options);
67
96
  toolUses.push(toolUse);
68
97
  }
69
98
  return { content: textContent, toolUses };
70
99
  }
71
- // inject old_content into write tool use by reading previous version from file-history
72
- function enrichWriteWithOldContent(toolUse, sessionId) {
73
- if (toolUse.toolName !== 'Write')
100
+ function getToolFilePath(toolUse) {
101
+ return toolUse.input['file_path'] ?? toolUse.input['path'] ?? '';
102
+ }
103
+ function getToolString(toolUse, snakeKey, legacyKey) {
104
+ return toolUse.input[snakeKey] ?? toolUse.input[legacyKey] ?? '';
105
+ }
106
+ function parseStructuredPatch(input) {
107
+ const raw = input['structured_patch'] ?? input['structuredPatch'];
108
+ if (!Array.isArray(raw))
109
+ return [];
110
+ const patches = [];
111
+ for (const item of raw) {
112
+ if (!item || typeof item !== 'object')
113
+ continue;
114
+ const patch = item;
115
+ const oldStart = patch['oldStart'];
116
+ const newStart = patch['newStart'];
117
+ if (typeof oldStart !== 'number' || typeof newStart !== 'number')
118
+ continue;
119
+ patches.push({
120
+ oldStart,
121
+ newStart,
122
+ oldLines: typeof patch['oldLines'] === 'number' ? patch['oldLines'] : undefined,
123
+ newLines: typeof patch['newLines'] === 'number' ? patch['newLines'] : undefined,
124
+ lines: Array.isArray(patch['lines']) ? patch['lines'].filter((line) => typeof line === 'string') : undefined,
125
+ });
126
+ }
127
+ return patches;
128
+ }
129
+ export function findStartLine(content, needle) {
130
+ if (!needle)
131
+ return null;
132
+ const index = content.indexOf(needle);
133
+ if (index < 0)
134
+ return null;
135
+ return content.slice(0, index).split('\n').length;
136
+ }
137
+ function setStartLines(toolUse, oldStart, newStart) {
138
+ if (oldStart !== null)
139
+ toolUse.input['old_start_line'] = oldStart;
140
+ if (newStart !== null)
141
+ toolUse.input['new_start_line'] = newStart;
142
+ }
143
+ function enrichFileChangeTool(toolUse, options) {
144
+ if (toolUse.toolName !== 'Write' && toolUse.toolName !== 'Edit' && toolUse.toolName !== 'SearchReplace')
74
145
  return;
75
- const filePath = toolUse.input['file_path'] ?? toolUse.input['path'] ?? '';
76
- if (!filePath)
146
+ const filePath = getToolFilePath(toolUse);
147
+ if (filePath)
148
+ addDiffHints(toolUse, filePath, options);
149
+ // the app needs start lines and the old content, whole files and patches stay on the machine
150
+ delete toolUse.input['original_file'];
151
+ delete toolUse.input['structuredPatch'];
152
+ delete toolUse.input['structured_patch'];
153
+ }
154
+ function addDiffHints(toolUse, filePath, options) {
155
+ const patches = parseStructuredPatch(toolUse.input);
156
+ if (patches.length > 0)
157
+ setStartLines(toolUse, patches[0].oldStart, patches[0].newStart);
158
+ // the tool result carries the file as it was
159
+ const original = toolUse.input['original_file'];
160
+ const oldContent = typeof original === 'string'
161
+ ? original
162
+ : original === null ? null : options.fileContentReader?.(options.sessionId, filePath) ?? null;
163
+ if (toolUse.toolName !== 'Write') {
164
+ if (toolUse.input['old_start_line'] !== undefined)
165
+ return;
166
+ const oldStr = getToolString(toolUse, 'old_string', 'old_str');
167
+ const startLine = oldContent === null ? null : findStartLine(oldContent, oldStr);
168
+ setStartLines(toolUse, startLine, startLine);
169
+ return;
170
+ }
171
+ if (toolUse.input['file_change_type'] === 'create' || original === null) {
172
+ if (toolUse.input['old_start_line'] === undefined)
173
+ setStartLines(toolUse, 1, 1);
77
174
  return;
78
- const oldContent = readFileHistoryPrev(sessionId, filePath);
175
+ }
79
176
  if (oldContent !== null) {
80
177
  toolUse.input['old_content'] = oldContent;
81
178
  }
179
+ if (toolUse.input['old_start_line'] === undefined)
180
+ setStartLines(toolUse, 1, 1);
82
181
  }
83
182
  //# sourceMappingURL=transcriptParser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transcriptParser.js","sourceRoot":"","sources":["../../src/claude/transcriptParser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transcriptParser.js","sourceRoot":"","sources":["../../src/claude/transcriptParser.ts"],"names":[],"mappings":"AAyDA,6FAA6F;AAC7F,MAAM,UAAU,mBAAmB,CAAC,GAAiB,EAAE,OAAuC;IAC5F,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;IACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;YAAE,SAAS;QACpF,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,aAAa,EAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,GAAG,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,aAAa,GAAG,oFAAoF,CAAC;AAC3G,MAAM,kBAAkB,GAAG,kFAAkF,CAAC;AAC9G,MAAM,YAAY,GAAG,oEAAoE,CAAC;AAC1F,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAElD,sEAAsE;AACtE,MAAM,UAAU,sBAAsB,CACpC,OAAqB,EACrB,OAA+B;IAE/B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACzE,IAAI,CAAC,OAAO,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAE3D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE5C,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtE,IAAI,OAAO,CAAC,IAAI;QAAE,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IAC1F,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhF,OAAO;QACL,IAAI;QACJ,OAAO;QACP,EAAE,EAAE,OAAO,CAAC,IAAI;QAChB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;QACjD,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACpD,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW;QACvC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6EAA6E;AAC7E,SAAS,mBAAmB,CAAC,OAAuB,EAAE,OAA+B;IACnF,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACvC,CAAC;IAED,MAAM,WAAW,GAAG,OAAO;SACxB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,gBAAgB,CAAC;SAChG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;SAChC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,SAAS;QACvD,MAAM,OAAO,GAAgB,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QACzF,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7F,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;YAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;QAC1E,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;QACxD,IAAI,MAAM,EAAE,eAAe;YAAE,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC;QACvF,IAAI,MAAM,EAAE,IAAI;YAAE,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;QAClE,IAAI,MAAM,IAAI,cAAc,IAAI,MAAM;YAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;QAC7F,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,eAAe,CAAC,OAAoB;IAC3C,OAAQ,OAAO,CAAC,KAAK,CAAC,WAAW,CAAY,IAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAY,IAAI,EAAE,CAAC;AAC3F,CAAC;AAED,SAAS,aAAa,CAAC,OAAoB,EAAE,QAAgB,EAAE,SAAiB;IAC9E,OAAQ,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAY,IAAK,OAAO,CAAC,KAAK,CAAC,SAAS,CAAY,IAAI,EAAE,CAAC;AAC3F,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA8B;IAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,SAAS;QAChD,MAAM,KAAK,GAAG,IAA+B,CAAC;QAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;QACnC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,SAAS;QAC3E,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ;YACR,QAAQ;YACR,QAAQ,EAAE,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;YAC/E,QAAQ,EAAE,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;YAC/E,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;SAC7H,CAAC,CAAC;IACP,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,MAAc;IAC3D,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AACpD,CAAC;AAED,SAAS,aAAa,CAAC,OAAoB,EAAE,QAAuB,EAAE,QAAuB;IAC3F,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC;IAClE,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC;AACpE,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAoB,EAAE,OAA+B;IACjF,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,eAAe;QAAE,OAAO;IAChH,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,QAAQ;QAAE,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,6FAA6F;IAC7F,OAAO,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACxC,OAAO,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY,CAAC,OAAoB,EAAE,QAAgB,EAAE,OAA+B;IAC3F,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAEzF,6CAA6C;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,OAAO,QAAQ,KAAK,QAAQ;QAC7C,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC;IAChG,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,SAAS;YAAE,OAAO;QAC1D,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACjF,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACxE,IAAI,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,SAAS;YAAE,aAAa,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChF,OAAO;IACT,CAAC;IAED,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,SAAS;QAAE,aAAa,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClF,CAAC"}
@@ -39,10 +39,7 @@ export function SERVER_WS() {
39
39
  }
40
40
  // resolve project-relative directories from this module's compiled location (dist/core/config.js)
41
41
  const moduleDir = path.resolve(fileURLToPath(import.meta.url), '..');
42
- export const PROJECT_TMP_DIR = path.resolve(moduleDir, '..', '..', 'tmp');
43
42
  export const LOGS_DIR = path.resolve(moduleDir, '..', '..', 'logs');
44
- // constants for pty buffering and file watcher debounce
45
- export const PTY_FLUSH_MS = 120;
46
- export const PTY_MAX_CHUNK = 8000;
43
+ // file watcher debounce
47
44
  export const FILE_WATCH_DEBOUNCE_MS = 300;
48
45
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,8EAA8E;AAC9E,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK;QAAE,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC/C,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM;QAAE,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACjD,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK;QAAE,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC;IAC3C,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IAC5E,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO;QAAE,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC/C,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ;QAAE,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC;IACjD,IAAI,CAAC,CAAC,QAAQ,KAAK,GAAG,IAAI,CAAC,CAAC,QAAQ,KAAK,EAAE;QAAE,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;IAChE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,mEAAmE;AACnE,IAAI,WAAW,GAAkB,IAAI,CAAC;AACtC,IAAI,SAAS,GAAkB,IAAI,CAAC;AAEpC,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,WAAW;QAAE,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,qBAAqB,CAAC,CAAC;IACjJ,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,sBAAsB,CAAC,CAAC;IAC1I,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,kGAAkG;AAClG,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAEpE,wDAAwD;AACxD,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAChC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,8EAA8E;AAC9E,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK;QAAE,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC/C,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM;QAAE,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACjD,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK;QAAE,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC;IAC3C,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IAC5E,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO;QAAE,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC/C,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ;QAAE,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC;IACjD,IAAI,CAAC,CAAC,QAAQ,KAAK,GAAG,IAAI,CAAC,CAAC,QAAQ,KAAK,EAAE;QAAE,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;IAChE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,mEAAmE;AACnE,IAAI,WAAW,GAAkB,IAAI,CAAC;AACtC,IAAI,SAAS,GAAkB,IAAI,CAAC;AAEpC,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,WAAW;QAAE,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,qBAAqB,CAAC,CAAC;IACjJ,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,sBAAsB,CAAC,CAAC;IAC1I,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,kGAAkG;AAClG,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAEpE,wBAAwB;AACxB,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC"}
@@ -1,34 +1,22 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
- import { LOGS_DIR, PROJECT_TMP_DIR } from './config.js';
3
+ import { LOGS_DIR } from './config.js';
4
4
  let eventStream = null;
5
- let debugStream = null;
6
- // lazily create directories and writable streams on first use to avoid import side effects
7
- function ensureStreams() {
8
- if (!eventStream || !debugStream) {
9
- if (!fs.existsSync(PROJECT_TMP_DIR))
10
- fs.mkdirSync(PROJECT_TMP_DIR, { recursive: true });
5
+ // lazily create the log directory and stream on first use to avoid import side effects
6
+ function ensureStream() {
7
+ if (!eventStream) {
11
8
  if (!fs.existsSync(LOGS_DIR))
12
9
  fs.mkdirSync(LOGS_DIR, { recursive: true });
13
10
  const sessionStart = new Date().toISOString().replace(/[:.]/g, '-');
14
- debugStream = fs.createWriteStream(path.join(PROJECT_TMP_DIR, 'kumo-pty-debug.log'), { flags: 'w' });
15
11
  eventStream = fs.createWriteStream(path.join(LOGS_DIR, `cli-${sessionStart}.log`), { flags: 'w' });
16
12
  }
17
- return { event: eventStream, debug: debugStream };
13
+ return eventStream;
18
14
  }
19
15
  function redact(data) {
20
16
  return data.replace(/(token|apikey|api_key|authorization|password|secret)(["'\s:=]+)([^"'\s,}]+)/gi, '$1$2[redacted]').slice(0, 4000);
21
17
  }
22
18
  // log a structured event line with iso timestamp
23
19
  export function log(msg) {
24
- const { event } = ensureStreams();
25
- event.write(`[${new Date().toISOString()}] ${redact(msg)}\n`);
26
- }
27
- // write raw pty data into the debug stream
28
- export function debugWrite(data) {
29
- if (process.env.KUMO_DEBUG_PTY !== 'true')
30
- return;
31
- const { debug } = ensureStreams();
32
- debug.write(redact(data));
20
+ ensureStream().write(`[${new Date().toISOString()}] ${redact(msg)}\n`);
33
21
  }
34
22
  //# sourceMappingURL=logger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAExD,IAAI,WAAW,GAA0B,IAAI,CAAC;AAC9C,IAAI,WAAW,GAA0B,IAAI,CAAC;AAE9C,2FAA2F;AAC3F,SAAS,aAAa;IACpB,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACpE,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACrG,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,YAAY,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,+EAA+E,EAAE,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACxI,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,GAAG,CAAC,GAAW;IAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;IAClC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM;QAAE,OAAO;IAClD,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;IAClC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,IAAI,WAAW,GAA0B,IAAI,CAAC;AAE9C,uFAAuF;AACvF,SAAS,YAAY;IACnB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACpE,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,YAAY,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,+EAA+E,EAAE,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACxI,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,GAAG,CAAC,GAAW;IAC7B,YAAY,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,102 @@
1
+ import { isPermissionMode } from './permissions.js';
2
+ // flags owned by the engine; the value is consumed when the flag takes one
3
+ const OWNED_FLAGS = {
4
+ '-p': false,
5
+ '--print': false,
6
+ '-c': false,
7
+ '--continue': false,
8
+ '--replay-user-messages': false,
9
+ '--output-format': true,
10
+ '--input-format': true,
11
+ '--permission-prompt-tool': true,
12
+ '--permission-mode': true,
13
+ '--session-id': true,
14
+ '--resume': true,
15
+ '-r': true,
16
+ };
17
+ // strip user passthrough flags that conflict with the stream-json engine, keeping the user's intent
18
+ export function filterPassthroughArgs(args) {
19
+ const passthrough = [];
20
+ let permissionMode;
21
+ let allowBypass = false;
22
+ for (let i = 0; i < args.length; i++) {
23
+ const arg = args[i];
24
+ if (arg === '--dangerously-skip-permissions') {
25
+ allowBypass = true;
26
+ permissionMode ??= 'bypassPermissions';
27
+ continue;
28
+ }
29
+ if (arg === '--allow-dangerously-skip-permissions') {
30
+ allowBypass = true;
31
+ continue;
32
+ }
33
+ const [flag, inlineValue] = arg.includes('=') ? [arg.slice(0, arg.indexOf('=')), arg.slice(arg.indexOf('=') + 1)] : [arg, undefined];
34
+ if (!(flag in OWNED_FLAGS)) {
35
+ passthrough.push(arg);
36
+ continue;
37
+ }
38
+ let value = inlineValue;
39
+ if (OWNED_FLAGS[flag] && value === undefined && args[i + 1] !== undefined && !args[i + 1].startsWith('-'))
40
+ value = args[++i];
41
+ if (flag === '--permission-mode' && isPermissionMode(value))
42
+ permissionMode = value;
43
+ }
44
+ return { passthrough, permissionMode, allowBypass };
45
+ }
46
+ // drop `flag value`, `flag=value` (and aliases) so the engine's own value wins
47
+ function withoutFlag(args, ...flags) {
48
+ const result = [];
49
+ for (let i = 0; i < args.length; i++) {
50
+ const arg = args[i];
51
+ if (flags.includes(arg)) {
52
+ i++;
53
+ continue;
54
+ }
55
+ if (flags.some((flag) => arg.startsWith(`${flag}=`)))
56
+ continue;
57
+ result.push(arg);
58
+ }
59
+ return result;
60
+ }
61
+ // build the claude argv for one stream-json session
62
+ export function buildClaudeArgs(options) {
63
+ const args = [
64
+ '--output-format', 'stream-json',
65
+ '--verbose',
66
+ '--input-format', 'stream-json',
67
+ '--permission-prompt-tool', 'stdio',
68
+ '--permission-mode', options.permissionMode,
69
+ '--replay-user-messages',
70
+ '--setting-sources=user,project,local',
71
+ options.resume ? `--resume=${options.sessionId}` : `--session-id=${options.sessionId}`,
72
+ ];
73
+ if (options.allowBypass)
74
+ args.push('--allow-dangerously-skip-permissions');
75
+ let extra = options.passthrough ?? [];
76
+ if (options.model) {
77
+ extra = withoutFlag(extra, '--model', '-m');
78
+ args.push('--model', options.model);
79
+ }
80
+ if (options.effort) {
81
+ extra = withoutFlag(extra, '--effort');
82
+ args.push('--effort', options.effort);
83
+ }
84
+ return [...args, ...extra];
85
+ }
86
+ // build the child env: model overrides plus sdk entrypoint, minus vars leaking from a parent claude/node
87
+ export function buildClaudeEnv(base, overrides = {}) {
88
+ const env = { ...base };
89
+ for (const [key, value] of Object.entries(overrides)) {
90
+ if (value === undefined)
91
+ delete env[key];
92
+ else
93
+ env[key] = value;
94
+ }
95
+ env['CLAUDE_CODE_ENTRYPOINT'] = 'sdk-ts';
96
+ env['CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING'] = 'true';
97
+ delete env['CLAUDECODE'];
98
+ delete env['CLAUDE_CODE_CHILD_SESSION'];
99
+ delete env['NODE_OPTIONS'];
100
+ return env;
101
+ }
102
+ //# sourceMappingURL=claudeArgs.js.map