@kcisoul/remotecode 0.9.2 → 0.9.5

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 (62) hide show
  1. package/README.md +49 -151
  2. package/dist/__tests__/format.test.js +35 -0
  3. package/dist/__tests__/format.test.js.map +1 -1
  4. package/dist/callbacks.d.ts +11 -5
  5. package/dist/callbacks.d.ts.map +1 -1
  6. package/dist/callbacks.js +191 -62
  7. package/dist/callbacks.js.map +1 -1
  8. package/dist/claude.d.ts +22 -7
  9. package/dist/claude.d.ts.map +1 -1
  10. package/dist/claude.js +239 -96
  11. package/dist/claude.js.map +1 -1
  12. package/dist/cli.js +2 -2
  13. package/dist/cli.js.map +1 -1
  14. package/dist/commands.d.ts.map +1 -1
  15. package/dist/commands.js +102 -2
  16. package/dist/commands.js.map +1 -1
  17. package/dist/config.d.ts +7 -0
  18. package/dist/config.d.ts.map +1 -1
  19. package/dist/config.js +12 -0
  20. package/dist/config.js.map +1 -1
  21. package/dist/context.d.ts +1 -2
  22. package/dist/context.d.ts.map +1 -1
  23. package/dist/context.js +3 -11
  24. package/dist/context.js.map +1 -1
  25. package/dist/daemon.d.ts.map +1 -1
  26. package/dist/daemon.js +42 -8
  27. package/dist/daemon.js.map +1 -1
  28. package/dist/format.d.ts.map +1 -1
  29. package/dist/format.js +48 -0
  30. package/dist/format.js.map +1 -1
  31. package/dist/handler.d.ts +7 -0
  32. package/dist/handler.d.ts.map +1 -1
  33. package/dist/handler.js +280 -47
  34. package/dist/handler.js.map +1 -1
  35. package/dist/jsonl.d.ts +9 -0
  36. package/dist/jsonl.d.ts.map +1 -0
  37. package/dist/jsonl.js +57 -0
  38. package/dist/jsonl.js.map +1 -0
  39. package/dist/logger.d.ts +4 -0
  40. package/dist/logger.d.ts.map +1 -1
  41. package/dist/logger.js +16 -0
  42. package/dist/logger.js.map +1 -1
  43. package/dist/sdk-types.d.ts +9 -0
  44. package/dist/sdk-types.d.ts.map +1 -0
  45. package/dist/sdk-types.js +27 -0
  46. package/dist/sdk-types.js.map +1 -0
  47. package/dist/session-ui.d.ts +4 -0
  48. package/dist/session-ui.d.ts.map +1 -1
  49. package/dist/session-ui.js +46 -47
  50. package/dist/session-ui.js.map +1 -1
  51. package/dist/sessions.d.ts +4 -2
  52. package/dist/sessions.d.ts.map +1 -1
  53. package/dist/sessions.js +92 -50
  54. package/dist/sessions.js.map +1 -1
  55. package/dist/telegram.d.ts.map +1 -1
  56. package/dist/telegram.js +10 -0
  57. package/dist/telegram.js.map +1 -1
  58. package/dist/watcher.d.ts +2 -0
  59. package/dist/watcher.d.ts.map +1 -1
  60. package/dist/watcher.js +28 -12
  61. package/dist/watcher.js.map +1 -1
  62. package/package.json +2 -1
package/README.md CHANGED
@@ -18,86 +18,11 @@ You (Anywhere) <--> RemoteCode (Host) <--> Claude Code (Host)
18
18
  - **Background daemon** -- Runs as a detached process with log rotation
19
19
  - **User access control** -- Restrict access by Telegram user ID or username
20
20
 
21
- ## How It Works
21
+ ## Demo
22
22
 
23
- ```mermaid
24
- sequenceDiagram
25
- participant U as You (Telegram)
26
- participant T as Telegram API
27
- participant D as RemoteCode Daemon
28
- participant C as Claude Code CLI
23
+ [![RemoteCode Demo](https://img.youtube.com/vi/JFlsf4MPQB8/maxresdefault.jpg)](https://www.youtube.com/watch?v=JFlsf4MPQB8)
29
24
 
30
- U->>T: Send message
31
- T->>D: Long polling (getUpdates)
32
- D->>D: Auth check & route
33
-
34
- alt Text message
35
- D->>C: claude --resume <session> --print "prompt"
36
- else Image
37
- D->>T: Download file
38
- D->>C: claude --resume <session> --print "prompt + image path"
39
- else Voice
40
- D->>T: Download audio
41
- D->>D: ffmpeg + whisper-cli transcription
42
- D->>C: claude --resume <session> --print "transcription"
43
- end
44
-
45
- C-->>D: stdout response
46
- D->>D: Markdown → Telegram HTML
47
- D->>T: sendMessage (HTML)
48
- T-->>U: Formatted response
49
- ```
50
-
51
- ## Architecture
52
-
53
- ```mermaid
54
- graph TB
55
- subgraph CLI["CLI (Terminal)"]
56
- IDX[index.ts<br/>arg parser]
57
- CL[cli.ts<br/>subcommands]
58
- end
59
-
60
- subgraph Daemon["Daemon Process"]
61
- DAE[daemon.ts<br/>poll loop + PID]
62
- HND[handler.ts<br/>message router]
63
- CMD[commands.ts<br/>slash commands]
64
- CB[callbacks.ts<br/>inline buttons]
65
- WAT[watcher.ts<br/>auto-sync]
66
- end
67
-
68
- subgraph Core["Core"]
69
- TEL[telegram.ts<br/>API client]
70
- CLA[claude.ts<br/>CLI spawner]
71
- SES[sessions.ts<br/>discovery + state]
72
- SUI[session-ui.ts<br/>UI formatting]
73
- end
74
-
75
- subgraph Shared["Shared"]
76
- CFG[config.ts<br/>paths + KV I/O]
77
- LOG[logger.ts<br/>logging]
78
- BAN[banner.ts<br/>terminal UI]
79
- CTX[context.ts<br/>auth + locks]
80
- FMT[format.ts<br/>MD → HTML]
81
- end
82
-
83
- IDX --> DAE
84
- IDX --> CL
85
- CL --> DAE
86
- DAE --> HND
87
- DAE --> CB
88
- HND --> CMD
89
- HND --> CLA
90
- HND --> CTX
91
- CB --> SES
92
- CB --> SUI
93
- CMD --> SUI
94
- WAT --> SES
95
- WAT --> CTX
96
- CLA --> LOG
97
- TEL --> LOG
98
- SUI --> FMT
99
- CL --> BAN
100
- ```
25
+ [Watch the demo on YouTube](https://www.youtube.com/watch?v=JFlsf4MPQB8)
101
26
 
102
27
  ## Platform Support
103
28
 
@@ -105,7 +30,7 @@ graph TB
105
30
  |---|---|---|
106
31
  | **macOS** | Supported | Homebrew for STT dependencies |
107
32
  | **Linux** | Supported | STT currently not supported |
108
- | **Windows** | Not supported | |
33
+ | **Windows** | Not tested | |
109
34
 
110
35
  ## Quick Start
111
36
 
@@ -141,11 +66,41 @@ The interactive setup wizard will prompt for:
141
66
 
142
67
  1. **TELEGRAM_BOT_TOKEN** -- validated against Telegram API
143
68
  2. **REMOTECODE_ALLOWED_USERS** -- comma-separated user IDs or @usernames
144
- 3. **REMOTECODE_YOLO** -- `Y` enables autonomous mode (Claude Code runs without permission prompts, required for full remote control). Set `N` if you prefer read-only / monitoring use, but note that any action requiring approval will block since there's no terminal to confirm
69
+ 3. **REMOTECODE_YOLO** -- `Y` enables autonomous mode (Claude Code runs without permission prompts). Set `N` to get Allow / Deny / Allow all prompts via Telegram inline buttons for each tool action
145
70
  4. **STT setup** -- optional offline voice transcription. Installs `whisper-cli` and `ffmpeg` via your system's package manager, and downloads a local Whisper model (~466 MB). Runs entirely on your machine -- no API calls, completely free
146
71
 
147
72
  Config is saved to `~/.remotecode/config`.
148
73
 
74
+ ## How It Works
75
+
76
+ ```mermaid
77
+ sequenceDiagram
78
+ participant U as 📱 Telegram
79
+ participant T as ☁️ Telegram API
80
+ participant D as ⚙️ RemoteCode
81
+ participant C as 🤖 Claude Code
82
+
83
+ U->>T: Send message
84
+ T->>D: Long polling (getUpdates)
85
+ D->>D: Auth check & route
86
+
87
+ alt Text message
88
+ D->>C: SDK query (prompt)
89
+ else Image
90
+ D->>T: Download file
91
+ D->>C: SDK query (prompt + image path)
92
+ else Voice
93
+ D->>T: Download audio
94
+ D->>D: ffmpeg → whisper-cli transcription
95
+ D->>C: SDK query (transcription)
96
+ end
97
+
98
+ C-->>D: Streaming response
99
+ D->>D: Markdown → Telegram HTML
100
+ D->>T: sendMessage (HTML)
101
+ T-->>U: Formatted response
102
+ ```
103
+
149
104
  ## CLI Commands
150
105
 
151
106
  | Command | Description |
@@ -179,17 +134,27 @@ Send these as messages in your Telegram chat with the bot:
179
134
  | `/projects` | Browse sessions grouped by project directory |
180
135
  | `/new` | Start a new Claude Code session |
181
136
  | `/history` | Show conversation history of current session |
137
+ | `/cancel` | Cancel the current task |
138
+ | `/model` | Switch Claude model (Sonnet / Opus / Haiku) |
182
139
  | `/sync` | Toggle auto-sync notifications on/off |
183
140
 
184
141
  ### Inline Buttons
185
142
 
186
143
  After `/sessions` or `/projects`, interactive inline keyboards let you:
187
144
 
188
- - **Switch** to any session with one tap
145
+ - **Switch** to any session with one tap (old task continues silently in background)
189
146
  - **Create** new sessions (globally or per-project)
190
147
  - **Delete** sessions
191
148
  - **Navigate** between project views
192
149
 
150
+ ### Permission Prompts (non-YOLO)
151
+
152
+ When YOLO mode is off, Claude Code tool actions trigger an inline keyboard:
153
+
154
+ - **Allow** -- permit this single action
155
+ - **Deny** -- reject and interrupt the task
156
+ - **Allow all** -- auto-allow all actions for the rest of this session (resets on session switch)
157
+
193
158
  ## Message Types
194
159
 
195
160
  ### Text
@@ -214,23 +179,12 @@ Send a voice message or audio file. The bot:
214
179
 
215
180
  ## Session Management
216
181
 
217
- ```mermaid
218
- stateDiagram-v2
219
- [*] --> NoSession: First message
220
- NoSession --> NewSession: auto-create UUID
221
- NewSession --> Active: claude --session-id
222
- Active --> Active: claude --resume
223
- Active --> Switched: /sessions or inline button
224
- Switched --> Active: select different session
225
- Active --> NewSession: /new
226
- ```
227
-
228
182
  RemoteCode discovers sessions from `~/.claude/projects/*/` by scanning `.jsonl` files. Each session maps to a Claude Code conversation.
229
183
 
230
184
  - **Active session** is stored in `~/.remotecode/local`
231
185
  - **Session CWD** determines which directory Claude Code runs in
232
186
  - Sessions are auto-created on first message if none exists
233
- - The `--resume` flag is used to continue existing sessions; falls back to `--session-id` for new ones
187
+ - **Switching sessions** while a task is running keeps the old task working silently in the background -- only the active session's messages are shown. Use `/cancel` to stop a task
234
188
 
235
189
  ### Auto-Sync
236
190
 
@@ -256,65 +210,9 @@ REMOTECODE_YOLO=true
256
210
  |---|---|---|
257
211
  | `TELEGRAM_BOT_TOKEN` | Yes | Bot token from @BotFather |
258
212
  | `REMOTECODE_ALLOWED_USERS` | Yes | Comma/space-separated user IDs or @usernames |
259
- | `REMOTECODE_YOLO` | No | `true` for full remote control (skips Claude Code permission prompts). Set `false` for read-only / monitoring use |
213
+ | `REMOTECODE_YOLO` | No | `true` to auto-approve all tool actions. `false` to get Allow / Deny / Allow all prompts via Telegram |
260
214
  | `REMOTECODE_VERBOSE` | No | `true` to enable DEBUG-level logging |
261
215
 
262
- ## File Structure
263
-
264
- ```
265
- ~/.remotecode/
266
- config # Global configuration (KV file)
267
- local # Active session state (session ID, CWD, chat ID)
268
- remotecode.pid # Daemon process ID
269
- remotecode.log # Log file (5MB rotation, keeps .old)
270
- remotecode.log.old # Previous rotated log
271
- whisper/
272
- ggml-small.bin # Whisper model (if STT enabled)
273
- RemoteCodeSessions/ # Default CWD for new sessions
274
- ```
275
-
276
- ## Message Flow
277
-
278
- ```mermaid
279
- flowchart TD
280
- A[Telegram Update] --> B{Message type?}
281
- B -->|callback_query| C[callbacks.ts]
282
- B -->|message| D{Content type?}
283
-
284
- D -->|text starts with /| E[commands.ts]
285
- D -->|text| F[handlePrompt]
286
- D -->|photo / image doc| G[Download & save image]
287
- D -->|voice / audio| H{STT ready?}
288
-
289
- H -->|No| I[Send setup instructions]
290
- H -->|Yes| J[Download → ffmpeg → whisper-cli]
291
- J --> K{Blank audio?}
292
- K -->|Yes| L[No speech detected]
293
- K -->|No| F
294
-
295
- G --> F
296
-
297
- F --> M[withSessionLock]
298
- M --> N[askClaude via CLI]
299
- N --> O{Session exists?}
300
- O -->|Yes| P[--resume session]
301
- O -->|No| Q[--session-id new]
302
- O -->|Busy| R[Retry up to 5x]
303
-
304
- P --> S[Format response]
305
- Q --> S
306
- R --> S
307
- S --> T[sendMessage HTML]
308
-
309
- C --> U{Action}
310
- U -->|sess:list| V[Show session grid]
311
- U -->|sess:ID| W[Switch session]
312
- U -->|sess:new| X[Create new session]
313
- U -->|proj:list| Y[Show project list]
314
- U -->|proj:DIR| Z[Show project sessions]
315
- U -->|sessdel:ID| AA[Delete session]
316
- ```
317
-
318
216
  ## Speech-to-Text (STT)
319
217
 
320
218
  RemoteCode uses [whisper.cpp](https://github.com/ggerganov/whisper.cpp) for local, offline speech-to-text.
@@ -346,7 +244,7 @@ Supported package managers: Homebrew (macOS/Linux), apt (Ubuntu/Debian), dnf (Fe
346
244
  - **Repeat block** -- Unauthorized users are warned once, then silently blocked
347
245
  - **No webhook** -- Uses long polling, no public endpoints needed
348
246
  - **Local STT** -- Voice transcription runs entirely offline via whisper.cpp
349
- - **YOLO mode** -- Required for full remote control. Without it, any Claude Code action needing approval will hang since there's no terminal to confirm. If security is a concern, set YOLO to `false` and use RemoteCode for text conversations and monitoring only
247
+ - **YOLO mode** -- Enables autonomous mode where all tool actions are auto-approved. When off, each action shows Allow / Deny / Allow all buttons in Telegram. "Allow all" grants session-level auto-approval that resets on session switch
350
248
 
351
249
  ## Development
352
250
 
@@ -40,6 +40,41 @@ const format_1 = require("../format");
40
40
  const result = (0, format_1.mdToTelegramHtml)("```\n<div>hi</div>\n```");
41
41
  (0, vitest_1.expect)(result).toContain("&lt;div&gt;hi&lt;/div&gt;");
42
42
  });
43
+ (0, vitest_1.it)("converts markdown table to box-drawing in <pre>", () => {
44
+ const table = [
45
+ "| Command | Description |",
46
+ "|---|---|",
47
+ "| /cancel | Cancel task |",
48
+ "| /model | Switch model |",
49
+ ].join("\n");
50
+ const result = (0, format_1.mdToTelegramHtml)(table);
51
+ (0, vitest_1.expect)(result).toContain("<pre>");
52
+ (0, vitest_1.expect)(result).toContain("┌");
53
+ (0, vitest_1.expect)(result).toContain("│ Command");
54
+ (0, vitest_1.expect)(result).toContain("│ /cancel");
55
+ (0, vitest_1.expect)(result).toContain("│ /model");
56
+ (0, vitest_1.expect)(result).toContain("└");
57
+ });
58
+ (0, vitest_1.it)("converts table with surrounding text", () => {
59
+ const md = "Here is a table:\n\n| A | B |\n|---|---|\n| 1 | 2 |\n\nDone.";
60
+ const result = (0, format_1.mdToTelegramHtml)(md);
61
+ (0, vitest_1.expect)(result).toContain("Here is a table:");
62
+ (0, vitest_1.expect)(result).toContain("<pre>");
63
+ (0, vitest_1.expect)(result).toContain("│ A │ B │");
64
+ (0, vitest_1.expect)(result).toContain("│ 1 │ 2 │");
65
+ (0, vitest_1.expect)(result).toContain("Done.");
66
+ });
67
+ (0, vitest_1.it)("pads columns to equal width", () => {
68
+ const table = "| A | Long Header |\n|---|---|\n| short | x |";
69
+ const result = (0, format_1.mdToTelegramHtml)(table);
70
+ // "Long Header" is 11 chars, "x" should be padded
71
+ (0, vitest_1.expect)(result).toContain("Long Header");
72
+ (0, vitest_1.expect)(result).toContain("x ");
73
+ });
74
+ (0, vitest_1.it)("leaves non-table pipe text alone", () => {
75
+ const result = (0, format_1.mdToTelegramHtml)("a | b | c");
76
+ (0, vitest_1.expect)(result).toBe("a | b | c");
77
+ });
43
78
  });
44
79
  (0, vitest_1.describe)("tryMdToHtml", () => {
45
80
  (0, vitest_1.it)("returns HTML with parseMode", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"format.test.js","sourceRoot":"","sources":["../../src/__tests__/format.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"format.test.js","sourceRoot":"","sources":["../../src/__tests__/format.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,16 @@
1
1
  import { CallbackQuery } from "./telegram";
2
2
  import { HandlerContext } from "./context";
3
- export declare function buildProjectListMarkup(): {
4
- inline_keyboard: Array<Array<{
5
- text: string;
6
- callback_data: string;
7
- }>>;
3
+ export interface PermMeta {
4
+ sessionId: string;
5
+ toolName: string;
6
+ }
7
+ export declare function registerPendingAsk(id: string): Promise<Record<string, string>>;
8
+ export declare function registerPendingPerm(id: string, meta: PermMeta): Promise<"allow" | "deny" | "allowall">;
9
+ export declare function denyAllPending(): void;
10
+ export declare function allowAllPending(): void;
11
+ export declare function hasPendingPerms(): boolean;
12
+ export declare function buildProjectListDisplay(): {
13
+ text: string;
8
14
  };
9
15
  export declare function handleCallbackQuery(callback: CallbackQuery, ctx: HandlerContext): Promise<void>;
10
16
  //# sourceMappingURL=callbacks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"callbacks.d.ts","sourceRoot":"","sources":["../src/callbacks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAKd,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAiB,MAAM,WAAW,CAAC;AAsB1D,wBAAgB,sBAAsB,IAAI;IAAE,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAA;CAAE,CAoBnH;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BrG"}
1
+ {"version":3,"file":"callbacks.d.ts","sourceRoot":"","sources":["../src/callbacks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAKd,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,cAAc,EAAiB,MAAM,WAAW,CAAC;AA8B1D,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAUD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAQ9E;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC,CAQtG;AAED,wBAAgB,cAAc,IAAI,IAAI,CAWrC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAWtC;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAwBD,wBAAgB,uBAAuB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAqB1D;AAGD,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BrG"}