tomo-ai 0.8.4 → 0.8.6
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/CHANGELOG.md +38 -0
- package/README.md +14 -2
- package/defaults/AGENT.md +1 -0
- package/defaults/skills/system/SKILL.md +3 -0
- package/dist/agent/claude-login.d.ts +32 -0
- package/dist/agent/claude-login.d.ts.map +1 -0
- package/dist/agent/claude-login.js +176 -0
- package/dist/agent/claude-login.js.map +1 -0
- package/dist/agent/commands.d.ts +6 -1
- package/dist/agent/commands.d.ts.map +1 -1
- package/dist/agent/commands.js +97 -19
- package/dist/agent/commands.js.map +1 -1
- package/dist/agent/live-session.d.ts +16 -5
- package/dist/agent/live-session.d.ts.map +1 -1
- package/dist/agent/live-session.js +87 -29
- package/dist/agent/live-session.js.map +1 -1
- package/dist/agent/sdk-options.js +11 -1
- package/dist/agent/sdk-options.js.map +1 -1
- package/dist/agent.d.ts +12 -8
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +223 -89
- package/dist/agent.js.map +1 -1
- package/dist/auth.d.ts +19 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +56 -0
- package/dist/auth.js.map +1 -0
- package/dist/channels/delivery.d.ts +5 -0
- package/dist/channels/delivery.d.ts.map +1 -0
- package/dist/channels/delivery.js +12 -0
- package/dist/channels/delivery.js.map +1 -0
- package/dist/channels/imessage-dedupe.d.ts +25 -0
- package/dist/channels/imessage-dedupe.d.ts.map +1 -0
- package/dist/channels/imessage-dedupe.js +85 -0
- package/dist/channels/imessage-dedupe.js.map +1 -0
- package/dist/channels/imessage.d.ts +3 -0
- package/dist/channels/imessage.d.ts.map +1 -1
- package/dist/channels/imessage.js +25 -2
- package/dist/channels/imessage.js.map +1 -1
- package/dist/channels/telegram.d.ts.map +1 -1
- package/dist/channels/telegram.js +46 -14
- package/dist/channels/telegram.js.map +1 -1
- package/dist/channels/text-utils.d.ts +7 -0
- package/dist/channels/text-utils.d.ts.map +1 -1
- package/dist/channels/text-utils.js +21 -0
- package/dist/channels/text-utils.js.map +1 -1
- package/dist/channels/types.d.ts +7 -0
- package/dist/channels/types.d.ts.map +1 -1
- package/dist/cli/backup-workspace.d.ts +9 -0
- package/dist/cli/backup-workspace.d.ts.map +1 -0
- package/dist/cli/backup-workspace.js +76 -0
- package/dist/cli/backup-workspace.js.map +1 -0
- package/dist/cli/backup.d.ts.map +1 -1
- package/dist/cli/backup.js +11 -39
- package/dist/cli/backup.js.map +1 -1
- package/dist/cli/config/auth.d.ts +2 -0
- package/dist/cli/config/auth.d.ts.map +1 -0
- package/dist/cli/config/auth.js +60 -0
- package/dist/cli/config/auth.js.map +1 -0
- package/dist/cli/config/identities.js +3 -3
- package/dist/cli/config/identities.js.map +1 -1
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/config/index.js +4 -0
- package/dist/cli/config/index.js.map +1 -1
- package/dist/cli/config/sessions.js +2 -2
- package/dist/cli/config/sessions.js.map +1 -1
- package/dist/cli/config/shared.d.ts +1 -0
- package/dist/cli/config/shared.d.ts.map +1 -1
- package/dist/cli/config/shared.js +10 -8
- package/dist/cli/config/shared.js.map +1 -1
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +10 -5
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +19 -19
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/lcm.d.ts.map +1 -1
- package/dist/cli/lcm.js +28 -27
- package/dist/cli/lcm.js.map +1 -1
- package/dist/cli/service.d.ts.map +1 -1
- package/dist/cli/service.js +2 -2
- package/dist/cli/service.js.map +1 -1
- package/dist/cli/sessions.d.ts.map +1 -1
- package/dist/cli/sessions.js +3 -6
- package/dist/cli/sessions.js.map +1 -1
- package/dist/cli/start.js +13 -10
- package/dist/cli/start.js.map +1 -1
- package/dist/cli/uninstall.d.ts.map +1 -1
- package/dist/cli/uninstall.js +2 -4
- package/dist/cli/uninstall.js.map +1 -1
- package/dist/config.d.ts +8 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +19 -10
- package/dist/config.js.map +1 -1
- package/dist/fs-utils.d.ts +6 -2
- package/dist/fs-utils.d.ts.map +1 -1
- package/dist/fs-utils.js +5 -3
- package/dist/fs-utils.js.map +1 -1
- package/dist/lcm/blocks.d.ts +3 -3
- package/dist/lcm/blocks.d.ts.map +1 -1
- package/dist/lcm/blocks.js +8 -8
- package/dist/lcm/blocks.js.map +1 -1
- package/dist/lcm/compact.d.ts +4 -2
- package/dist/lcm/compact.d.ts.map +1 -1
- package/dist/lcm/compact.js +7 -7
- package/dist/lcm/compact.js.map +1 -1
- package/dist/lcm/prune-tools.d.ts +2 -0
- package/dist/lcm/prune-tools.d.ts.map +1 -1
- package/dist/lcm/prune-tools.js +2 -2
- package/dist/lcm/prune-tools.js.map +1 -1
- package/dist/lcm/runner.d.ts.map +1 -1
- package/dist/lcm/runner.js +6 -2
- package/dist/lcm/runner.js.map +1 -1
- package/dist/lcm/stats.d.ts +2 -2
- package/dist/lcm/stats.d.ts.map +1 -1
- package/dist/lcm/stats.js +4 -4
- package/dist/lcm/stats.js.map +1 -1
- package/dist/mcp/internal-server.d.ts +5 -4
- package/dist/mcp/internal-server.d.ts.map +1 -1
- package/dist/mcp/internal-server.js +6 -5
- package/dist/mcp/internal-server.js.map +1 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +7 -0
- package/dist/router.js.map +1 -1
- package/dist/runtime-paths.d.ts +29 -0
- package/dist/runtime-paths.d.ts.map +1 -0
- package/dist/runtime-paths.js +33 -0
- package/dist/runtime-paths.js.map +1 -0
- package/dist/sessions/index.d.ts +1 -1
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +1 -1
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/repair.d.ts +1 -1
- package/dist/sessions/repair.d.ts.map +1 -1
- package/dist/sessions/repair.js +2 -2
- package/dist/sessions/repair.js.map +1 -1
- package/dist/sessions/store.d.ts +11 -4
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +61 -17
- package/dist/sessions/store.js.map +1 -1
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +2 -3
- package/dist/workspace/index.js.map +1 -1
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.8.6 (2026-06-30)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- **Newline message-splitting** (#179). A line break in the assistant's reply is now delivered as a *separate* chat message, mimicking natural texting rhythm instead of one block with linebreaks. Blank lines act as separators (never producing empty messages) and each piece is trimmed. The literal token `[[NL]]` is an escape hatch — it is restored to a real newline and does **not** split there, so code snippets and lists that must stay together can live in one message. Caption text before a `MEDIA:` tag still rides with the media as one captioned message. Wired through both iMessage (buffer-on-finish) and Telegram (streaming edit-in-place), documented in the default `AGENT.md` and the system skill, and extended to the direct/system delivery paths (#182).
|
|
8
|
+
- **Deliver SDK background task replies** (#178). Unowned SDK turns — output produced by the SDK with no waiting request, such as background task replies — are now routed to a default delivery target instead of being silently dropped.
|
|
9
|
+
|
|
10
|
+
### Bug fixes
|
|
11
|
+
|
|
12
|
+
- **Activity-based live-session timeout** (#181). The session timeout now refreshes on SDK activity rather than firing on a fixed per-turn deadline, so long-but-legitimate turns are no longer killed prematurely.
|
|
13
|
+
- **Literal newline token splitting** (#183). Fixes `[[NL]]` token handling in the outbound message splitter.
|
|
14
|
+
|
|
15
|
+
### Other
|
|
16
|
+
|
|
17
|
+
- **More readable `tomo logs`** (#184). `tomo logs -f` now renders sender, group title, outbound session key, and subagent name inline instead of burying them in raw JSON. Subagent tool calls are attributed to the spawning agent (`agent=<subagent_type>`, including nested spawns), and tool-result errors get an `[ERR]` prefix.
|
|
18
|
+
- Remove dead `AGENT`/`SOUL`/`IDENTITY` templates under `src/workspace` (#180).
|
|
19
|
+
|
|
20
|
+
## 0.8.5 (2026-06-26)
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
|
|
24
|
+
- **API key authentication config** (#158). Adds explicit API-key auth configuration and prevents the Anthropic API key from leaking to custom gateways/base URLs.
|
|
25
|
+
- **Claude login from the owner DM** (#165). The owner can authenticate Claude directly through a DM command instead of the CLI only, with clearer messaging when login verification fails.
|
|
26
|
+
- **Custom workspace for SDK sessions** (#175). SDK sessions now honor a configured custom workspace path. Runtime path resolution was consolidated into a new `runtime-paths` module.
|
|
27
|
+
|
|
28
|
+
### Bug fixes
|
|
29
|
+
|
|
30
|
+
- **iMessage inbound webhook dedupe is now persisted** (#163). Webhook dedupe state survives daemon restarts instead of living only in memory, so restarts no longer risk re-processing recently seen messages.
|
|
31
|
+
- **Direct-send note attribution** (#148). Summoned-group direct sends are attributed to the correct caller, attribution is caller-aware, and pending notes are capped.
|
|
32
|
+
- **Suppress group LCM output** (#164). Lifecycle-management chatter no longer leaks into group chats.
|
|
33
|
+
|
|
34
|
+
### Other
|
|
35
|
+
|
|
36
|
+
- Test against Node 26 in CI and align Node typings (#171).
|
|
37
|
+
- Extract `backup-workspace` out of the backup command.
|
|
38
|
+
- Bump `@anthropic-ai/claude-agent-sdk` `0.3.181` → `0.3.195` (#173, #169, #176).
|
|
39
|
+
- Bump `grammy` `1.44.0` (#168), `@clack/prompts` `1.6.0` (#170), `eslint` `10.6.0`, `actions/checkout` v7 (#166), and the dev-dependencies group (#174).
|
|
40
|
+
|
|
3
41
|
## 0.8.4 (2026-06-19)
|
|
4
42
|
|
|
5
43
|
### Features
|
package/README.md
CHANGED
|
@@ -32,7 +32,7 @@ That's it. Open Telegram and message your bot.
|
|
|
32
32
|
## Requirements
|
|
33
33
|
|
|
34
34
|
- Node.js 22.12+
|
|
35
|
-
- [Claude Code](https://claude.com/claude-code) installed.
|
|
35
|
+
- [Claude Code](https://claude.com/claude-code) installed. Direct Claude models can use a Claude subscription or an Anthropic API key; LiteLLM gateways support other backends.
|
|
36
36
|
- At least one channel:
|
|
37
37
|
- **Telegram** — bot token from [@BotFather](https://t.me/BotFather)
|
|
38
38
|
- **iMessage** — [BlueBubbles](https://bluebubbles.app) server running on a Mac with iMessage signed in
|
|
@@ -41,7 +41,7 @@ That's it. Open Telegram and message your bot.
|
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
43
|
tomo init # First-time setup
|
|
44
|
-
tomo config # Interactive settings (model, LiteLLM, channels, identities, groups)
|
|
44
|
+
tomo config # Interactive settings (authentication, model, LiteLLM, channels, identities, groups)
|
|
45
45
|
tomo start # Start in background (daemon)
|
|
46
46
|
tomo start -f # Start in foreground (for dev)
|
|
47
47
|
tomo stop # Stop the daemon
|
|
@@ -60,6 +60,7 @@ tomo sessions clear # Reset all sessions
|
|
|
60
60
|
| `/new` | Start a new conversation (resets session) |
|
|
61
61
|
| `/model` | Switch model (Claude aliases or LiteLLM `provider/model` names) |
|
|
62
62
|
| `/restore` | Restore `config.json` from `config.json.bak` and restart |
|
|
63
|
+
| `/login` | Refresh Claude login from a configured owner's private DM |
|
|
63
64
|
| `/status` | Show session info (model, channel, message count) |
|
|
64
65
|
| `/pet` | Check Tomo's pet's mood, growth stage, and stats |
|
|
65
66
|
|
|
@@ -203,6 +204,10 @@ Run `tomo config` for interactive setup, or edit `~/.tomo/config.json` directly:
|
|
|
203
204
|
|
|
204
205
|
```json
|
|
205
206
|
{
|
|
207
|
+
"auth": {
|
|
208
|
+
"method": "api-key",
|
|
209
|
+
"apiKey": "sk-ant-..."
|
|
210
|
+
},
|
|
206
211
|
"channels": {
|
|
207
212
|
"telegram": {
|
|
208
213
|
"token": "your-bot-token",
|
|
@@ -246,6 +251,7 @@ Environment variables override config file values:
|
|
|
246
251
|
|
|
247
252
|
| Variable | Description |
|
|
248
253
|
|----------|-------------|
|
|
254
|
+
| `ANTHROPIC_API_KEY` | Use Anthropic API-key authentication; overrides the authentication stored in `config.json` |
|
|
249
255
|
| `TELEGRAM_BOT_TOKEN` | Override Telegram token |
|
|
250
256
|
| `IMESSAGE_URL` | Override BlueBubbles URL |
|
|
251
257
|
| `IMESSAGE_TYPING_START_DELAY_MS` | Delay before showing iMessage typing for ordinary turns (default: `1200`) |
|
|
@@ -263,6 +269,12 @@ Environment variables override config file values:
|
|
|
263
269
|
| `TOMO_CONTINUITY_SCRIPT_MAX_OUTPUT_CHARS` | Override continuity script stdout/stderr cap (default: `8000`) |
|
|
264
270
|
| `LOG_LEVEL` | Log level (default: `debug`) |
|
|
265
271
|
|
|
272
|
+
### Anthropic Authentication
|
|
273
|
+
|
|
274
|
+
Direct Claude models use your existing Claude Code subscription login by default. To use Anthropic API billing instead, run `tomo config`, choose **Anthropic authentication**, and enter an API key. Tomo stores the selected method under `auth` in `~/.tomo/config.json` and passes the key only to direct Claude Agent SDK child processes. `ANTHROPIC_API_KEY` remains supported and takes precedence over the saved setting.
|
|
275
|
+
|
|
276
|
+
Because the config contains channel credentials and may now contain an Anthropic API key, Tomo writes both `config.json` and `config.json.bak` with owner-only (`0600`) permissions.
|
|
277
|
+
|
|
266
278
|
`continuityScript` can also be a simple path string, e.g. `"continuityScript": "~/bin/tomo-continuity.sh"`. Relative paths resolve under `~/.tomo`; the script runs once per scheduled heartbeat and manual `tomo continuity` trigger, and its stdout/stderr or failure status is appended to the normal continuity prompt.
|
|
267
279
|
|
|
268
280
|
### Steering
|
package/defaults/AGENT.md
CHANGED
|
@@ -7,6 +7,7 @@ Don't narrate your process. Don't explain what you're "about to do." Just do it
|
|
|
7
7
|
- **Default to short.** One to three sentences for most replies.
|
|
8
8
|
- **No fluff.** Every sentence should carry information or personality.
|
|
9
9
|
- **Use formatting sparingly.** Bold for emphasis. That's usually enough.
|
|
10
|
+
- **Newlines split into separate messages.** A line break in your reply is delivered as a *separate* chat message — natural texting rhythm (a couple of short bursts beat one dense block). Blank lines are just separators; they never produce empty messages. To keep a line break *inside* one message (a code snippet, a list that must stay together), use the literal token `[[NL]]` — it becomes a real newline and does **not** split there.
|
|
10
11
|
|
|
11
12
|
## Mistakes
|
|
12
13
|
|
|
@@ -72,6 +72,9 @@ Before changing `~/.tomo/config.json` directly, copy the current file to `~/.tom
|
|
|
72
72
|
### Streaming
|
|
73
73
|
Responses stream to Telegram in real-time — messages update every 1.5s as tokens arrive.
|
|
74
74
|
|
|
75
|
+
### Message splitting (newlines)
|
|
76
|
+
A newline in your reply splits the text into **separate chat messages** — natural texting rhythm instead of one block with linebreaks. Blank lines are separators (no empty messages are sent); each piece is trimmed. To keep a line break *inside* a single message (e.g. a code snippet or a list that must stay together), use the literal token `[[NL]]` — the harness restores it to a real newline and does **not** split there. Caption text before a `MEDIA:` tag still rides with the media as one captioned message rather than being split.
|
|
77
|
+
|
|
75
78
|
### Message steering
|
|
76
79
|
By default, user messages that arrive during a long tool-using turn are injected into the in-flight turn at the next tool-call boundary instead of waiting behind it. Use this to treat mid-task corrections like "stop", "wait", or added context as immediately relevant. If there is no remaining tool boundary, the message runs as the next follow-up turn. Cron, continuity, and other system-originated turns still queue normally. Set `steering: false` in `~/.tomo/config.json` to keep mid-turn user messages queued.
|
|
77
80
|
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type ChildProcessWithoutNullStreams } from "node:child_process";
|
|
2
|
+
export interface ClaudeLoginManagerOptions {
|
|
3
|
+
spawnLogin?: () => ChildProcessWithoutNullStreams;
|
|
4
|
+
verifyLogin?: () => Promise<void>;
|
|
5
|
+
timeoutMs?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface ClaudeLoginStart {
|
|
8
|
+
url: string;
|
|
9
|
+
reused: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface ClaudeLoginCompletion {
|
|
12
|
+
verified: boolean;
|
|
13
|
+
verificationError?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Owns the single machine-global Claude OAuth flow. The PKCE verifier lives in
|
|
17
|
+
* the waiting `claude auth login` child, so the process must stay alive between
|
|
18
|
+
* sending the URL and receiving the one-time code from the owner.
|
|
19
|
+
*/
|
|
20
|
+
export declare class ClaudeLoginManager {
|
|
21
|
+
private pending;
|
|
22
|
+
private readonly spawnLogin;
|
|
23
|
+
private readonly verifyLogin;
|
|
24
|
+
private readonly timeoutMs;
|
|
25
|
+
constructor(options?: ClaudeLoginManagerOptions);
|
|
26
|
+
start(owner: string): Promise<ClaudeLoginStart>;
|
|
27
|
+
complete(owner: string, code: string): Promise<ClaudeLoginCompletion>;
|
|
28
|
+
cancel(owner: string): boolean;
|
|
29
|
+
stop(): void;
|
|
30
|
+
private clearPending;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=claude-login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-login.d.ts","sourceRoot":"","sources":["../../src/agent/claude-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAoB1F,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,EAAE,MAAM,8BAA8B,CAAC;IAClD,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuC;IAClE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,OAAO,GAAE,yBAA8B;IAQ7C,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuF/C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAiC3E,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAW9B,IAAI,IAAI,IAAI;IAUZ,OAAO,CAAC,YAAY;CAIrB"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { execFile, spawn } from "node:child_process";
|
|
2
|
+
const LOGIN_TIMEOUT_MS = 10 * 60 * 1000;
|
|
3
|
+
const LOGIN_URL_RE = /https:\/\/claude\.com\/cai\/oauth\/authorize\?[^\s]+/;
|
|
4
|
+
/**
|
|
5
|
+
* Owns the single machine-global Claude OAuth flow. The PKCE verifier lives in
|
|
6
|
+
* the waiting `claude auth login` child, so the process must stay alive between
|
|
7
|
+
* sending the URL and receiving the one-time code from the owner.
|
|
8
|
+
*/
|
|
9
|
+
export class ClaudeLoginManager {
|
|
10
|
+
pending = null;
|
|
11
|
+
spawnLogin;
|
|
12
|
+
verifyLogin;
|
|
13
|
+
timeoutMs;
|
|
14
|
+
constructor(options = {}) {
|
|
15
|
+
this.spawnLogin = options.spawnLogin ?? (() => spawn("claude", ["auth", "login"], {
|
|
16
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
17
|
+
}));
|
|
18
|
+
this.verifyLogin = options.verifyLogin ?? verifyClaudeLogin;
|
|
19
|
+
this.timeoutMs = options.timeoutMs ?? LOGIN_TIMEOUT_MS;
|
|
20
|
+
}
|
|
21
|
+
async start(owner) {
|
|
22
|
+
const normalizedOwner = owner.toLowerCase();
|
|
23
|
+
if (this.pending) {
|
|
24
|
+
if (this.pending.owner !== normalizedOwner) {
|
|
25
|
+
throw new Error("Another owner already has a Claude login in progress");
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
url: this.pending.url ?? await this.pending.urlPromise,
|
|
29
|
+
reused: true,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const child = this.spawnLogin();
|
|
33
|
+
let resolveUrl;
|
|
34
|
+
let rejectUrl;
|
|
35
|
+
const urlPromise = new Promise((resolve, reject) => {
|
|
36
|
+
resolveUrl = resolve;
|
|
37
|
+
rejectUrl = reject;
|
|
38
|
+
});
|
|
39
|
+
let resolveCompletion;
|
|
40
|
+
let rejectCompletion;
|
|
41
|
+
const completionPromise = new Promise((resolve, reject) => {
|
|
42
|
+
resolveCompletion = resolve;
|
|
43
|
+
rejectCompletion = reject;
|
|
44
|
+
});
|
|
45
|
+
// A child can fail before `/login <code>` attaches its await. Keep that
|
|
46
|
+
// rejection observed while preserving it for the eventual caller.
|
|
47
|
+
void completionPromise.catch(() => { });
|
|
48
|
+
const pending = {
|
|
49
|
+
owner: normalizedOwner,
|
|
50
|
+
child,
|
|
51
|
+
output: "",
|
|
52
|
+
codeSubmitted: false,
|
|
53
|
+
timeout: setTimeout(() => {
|
|
54
|
+
const err = new Error("Claude login expired after 10 minutes; run /login again");
|
|
55
|
+
rejectUrl(err);
|
|
56
|
+
rejectCompletion(err);
|
|
57
|
+
child.kill();
|
|
58
|
+
this.clearPending(pending);
|
|
59
|
+
}, this.timeoutMs),
|
|
60
|
+
urlPromise,
|
|
61
|
+
resolveUrl,
|
|
62
|
+
rejectUrl,
|
|
63
|
+
completionPromise,
|
|
64
|
+
resolveCompletion,
|
|
65
|
+
rejectCompletion,
|
|
66
|
+
};
|
|
67
|
+
this.pending = pending;
|
|
68
|
+
const capture = (chunk) => {
|
|
69
|
+
pending.output = (pending.output + chunk.toString()).slice(-16_000);
|
|
70
|
+
if (pending.url)
|
|
71
|
+
return;
|
|
72
|
+
const match = LOGIN_URL_RE.exec(pending.output);
|
|
73
|
+
if (match) {
|
|
74
|
+
pending.url = match[0];
|
|
75
|
+
pending.resolveUrl(match[0]);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
child.stdout.on("data", capture);
|
|
79
|
+
child.stderr.on("data", capture);
|
|
80
|
+
child.stdin.on("error", (err) => {
|
|
81
|
+
pending.rejectCompletion(new Error(`Could not submit Claude login code: ${err.message}`));
|
|
82
|
+
});
|
|
83
|
+
child.once("error", (err) => {
|
|
84
|
+
pending.rejectUrl(new Error(`Could not start Claude login: ${err.message}`));
|
|
85
|
+
pending.rejectCompletion(err);
|
|
86
|
+
this.clearPending(pending);
|
|
87
|
+
});
|
|
88
|
+
child.once("exit", (code, signal) => {
|
|
89
|
+
// Exit 0 after a submitted code means the CLI accepted the exchange. The
|
|
90
|
+
// separate authenticated probe below is the authoritative verification.
|
|
91
|
+
if (code === 0 && pending.codeSubmitted) {
|
|
92
|
+
pending.resolveCompletion();
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
const reason = signal ? `signal ${signal}` : `exit code ${code ?? "unknown"}`;
|
|
96
|
+
const err = new Error(`Claude login did not complete (${reason})`);
|
|
97
|
+
pending.rejectUrl(err);
|
|
98
|
+
pending.rejectCompletion(err);
|
|
99
|
+
}
|
|
100
|
+
this.clearPending(pending);
|
|
101
|
+
});
|
|
102
|
+
return { url: await urlPromise, reused: false };
|
|
103
|
+
}
|
|
104
|
+
async complete(owner, code) {
|
|
105
|
+
const pending = this.pending;
|
|
106
|
+
if (!pending)
|
|
107
|
+
throw new Error("No Claude login is waiting; send /login first");
|
|
108
|
+
if (pending.owner !== owner.toLowerCase()) {
|
|
109
|
+
throw new Error("This Claude login belongs to another owner");
|
|
110
|
+
}
|
|
111
|
+
if (pending.codeSubmitted)
|
|
112
|
+
throw new Error("That Claude login code is already being verified");
|
|
113
|
+
const trimmed = code.trim();
|
|
114
|
+
const hash = trimmed.lastIndexOf("#");
|
|
115
|
+
if (hash <= 0 || hash === trimmed.length - 1 || /\s/.test(trimmed)) {
|
|
116
|
+
throw new Error("Invalid authorization code; paste the complete code returned by Claude");
|
|
117
|
+
}
|
|
118
|
+
const expectedState = pending.url ? new URL(pending.url).searchParams.get("state") : null;
|
|
119
|
+
const receivedState = trimmed.slice(hash + 1);
|
|
120
|
+
if (!expectedState || receivedState !== expectedState) {
|
|
121
|
+
throw new Error("Authorization code does not match the active /login request");
|
|
122
|
+
}
|
|
123
|
+
pending.codeSubmitted = true;
|
|
124
|
+
pending.child.stdin.end(`${trimmed}\n`);
|
|
125
|
+
await pending.completionPromise;
|
|
126
|
+
try {
|
|
127
|
+
await this.verifyLogin();
|
|
128
|
+
return { verified: true };
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
return {
|
|
132
|
+
verified: false,
|
|
133
|
+
verificationError: err instanceof Error ? err.message : String(err),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
cancel(owner) {
|
|
138
|
+
const pending = this.pending;
|
|
139
|
+
if (!pending || pending.owner !== owner.toLowerCase())
|
|
140
|
+
return false;
|
|
141
|
+
const err = new Error("Claude login cancelled");
|
|
142
|
+
pending.rejectUrl(err);
|
|
143
|
+
pending.rejectCompletion(err);
|
|
144
|
+
pending.child.kill();
|
|
145
|
+
this.clearPending(pending);
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
stop() {
|
|
149
|
+
const pending = this.pending;
|
|
150
|
+
if (!pending)
|
|
151
|
+
return;
|
|
152
|
+
const err = new Error("Tomo stopped during Claude login");
|
|
153
|
+
pending.rejectUrl(err);
|
|
154
|
+
pending.rejectCompletion(err);
|
|
155
|
+
pending.child.kill();
|
|
156
|
+
this.clearPending(pending);
|
|
157
|
+
}
|
|
158
|
+
clearPending(pending) {
|
|
159
|
+
clearTimeout(pending.timeout);
|
|
160
|
+
if (this.pending === pending)
|
|
161
|
+
this.pending = null;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function verifyClaudeLogin() {
|
|
165
|
+
return new Promise((resolve, reject) => {
|
|
166
|
+
execFile("claude", ["-p", "Reply with exactly OK.", "--safe-mode", "--no-session-persistence", "--tools", ""], { timeout: 60_000 }, (err, stdout, stderr) => {
|
|
167
|
+
if (!err) {
|
|
168
|
+
resolve();
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const detail = `${stderr || stdout}`.trim().split("\n")[0]?.slice(0, 300);
|
|
172
|
+
reject(new Error(`Claude login verification failed${detail ? `: ${detail}` : ""}`));
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=claude-login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-login.js","sourceRoot":"","sources":["../../src/agent/claude-login.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/commands.d.ts
CHANGED
|
@@ -13,15 +13,18 @@ export interface ChatCommandDeps {
|
|
|
13
13
|
queuePendingNote(sessionKey: string, note: string): void;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
* Handles slash commands typed in chat (/new, /model, /status, /pet,
|
|
16
|
+
* Handles slash commands typed in chat (/new, /model, /status, /pet,
|
|
17
|
+
* /restore, /login).
|
|
17
18
|
* Wired to Channel.onCommand by the Agent.
|
|
18
19
|
*/
|
|
19
20
|
export declare class ChatCommandHandler {
|
|
20
21
|
private readonly deps;
|
|
21
22
|
private restoringConfig;
|
|
23
|
+
private readonly claudeLogin;
|
|
22
24
|
constructor(deps: ChatCommandDeps);
|
|
23
25
|
/** True once /restore has begun — the Agent drops inbound messages until restart. */
|
|
24
26
|
get isRestoring(): boolean;
|
|
27
|
+
stop(): void;
|
|
25
28
|
handle(channel: Channel, command: string, chatId: string, senderName: string, args?: string, senderId?: string): Promise<void>;
|
|
26
29
|
/**
|
|
27
30
|
* /summon pulls the owner's main dm: session into a group: subsequent group
|
|
@@ -31,6 +34,8 @@ export declare class ChatCommandHandler {
|
|
|
31
34
|
*/
|
|
32
35
|
private handleSummonCommand;
|
|
33
36
|
private persistModelOverride;
|
|
37
|
+
private handleClaudeLogin;
|
|
38
|
+
private scheduleRestart;
|
|
34
39
|
private restoreConfigAndRestart;
|
|
35
40
|
}
|
|
36
41
|
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/agent/commands.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/agent/commands.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAazD,iEAAiE;AACjE,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,uFAAuF;IACvF,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1D;AAED;;;;GAIG;AACH,qBAAa,kBAAkB;IAIjB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;gBAE3B,IAAI,EAAE,eAAe;IAElD,qFAAqF;IACrF,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,IAAI,IAAI;IAIN,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+JpI;;;;;OAKG;YACW,mBAAmB;IA8DjC,OAAO,CAAC,oBAAoB;YAed,iBAAiB;IAuE/B,OAAO,CAAC,eAAe;YAgBT,uBAAuB;CAwBtC"}
|
package/dist/agent/commands.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
-
import { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { chmodSync, copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
import { config, CONFIG_BACKUP_PATH, CONFIG_PATH, RESTART_REASON_FILE } from "../config.js";
|
|
5
5
|
import { backupFileIfExistsSync, writeJsonAtomicSync } from "../fs-utils.js";
|
|
@@ -8,18 +8,21 @@ import { MODEL_ALIASES, isLiteLlmProviderModel, modelHelpText, resolveModelName
|
|
|
8
8
|
import { CHATGPT_SUBSCRIPTION_DEFAULT_MODEL, CHATGPT_SUBSCRIPTION_MODE, isChatGptSubscriptionModel, liteLlmModeLabel, } from "../litellm.js";
|
|
9
9
|
import { log } from "../logger.js";
|
|
10
10
|
import { PetStore } from "../mcp/pet-store.js";
|
|
11
|
+
import { ClaudeLoginManager } from "./claude-login.js";
|
|
11
12
|
/** Back up ~/.tomo/config.json before a programmatic rewrite. */
|
|
12
13
|
export function backupConfigFile() {
|
|
13
14
|
mkdirSync(dirname(CONFIG_BACKUP_PATH), { recursive: true });
|
|
14
|
-
backupFileIfExistsSync(CONFIG_PATH, CONFIG_BACKUP_PATH);
|
|
15
|
+
backupFileIfExistsSync(CONFIG_PATH, CONFIG_BACKUP_PATH, { mode: 0o600 });
|
|
15
16
|
}
|
|
16
17
|
/**
|
|
17
|
-
* Handles slash commands typed in chat (/new, /model, /status, /pet,
|
|
18
|
+
* Handles slash commands typed in chat (/new, /model, /status, /pet,
|
|
19
|
+
* /restore, /login).
|
|
18
20
|
* Wired to Channel.onCommand by the Agent.
|
|
19
21
|
*/
|
|
20
22
|
export class ChatCommandHandler {
|
|
21
23
|
deps;
|
|
22
24
|
restoringConfig = false;
|
|
25
|
+
claudeLogin = new ClaudeLoginManager();
|
|
23
26
|
constructor(deps) {
|
|
24
27
|
this.deps = deps;
|
|
25
28
|
}
|
|
@@ -27,12 +30,21 @@ export class ChatCommandHandler {
|
|
|
27
30
|
get isRestoring() {
|
|
28
31
|
return this.restoringConfig;
|
|
29
32
|
}
|
|
33
|
+
stop() {
|
|
34
|
+
this.claudeLogin.stop();
|
|
35
|
+
}
|
|
30
36
|
async handle(channel, command, chatId, senderName, args, senderId) {
|
|
31
|
-
const { sessionKey: key } = this.deps.router.resolve(channel.name, chatId, false);
|
|
32
37
|
if (this.restoringConfig) {
|
|
33
38
|
await channel.send({ chatId, text: "Restore is already in progress. Restarting Tomo..." });
|
|
34
39
|
return;
|
|
35
40
|
}
|
|
41
|
+
// Check /login before resolving a session: a rejected group login must not
|
|
42
|
+
// create or mutate a conversation entry as a side effect.
|
|
43
|
+
if (command === "login") {
|
|
44
|
+
await this.handleClaudeLogin(channel, chatId, senderId, args);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const { sessionKey: key } = this.deps.router.resolve(channel.name, chatId, false);
|
|
36
48
|
if (command === "summon" || command === "dismiss") {
|
|
37
49
|
await this.handleSummonCommand(channel, command, chatId, senderName, senderId);
|
|
38
50
|
return;
|
|
@@ -221,7 +233,85 @@ export class ChatCommandHandler {
|
|
|
221
233
|
cfg.sessionModelOverrides = overrides;
|
|
222
234
|
mkdirSync(dirname(CONFIG_PATH), { recursive: true });
|
|
223
235
|
backupConfigFile();
|
|
224
|
-
writeJsonAtomicSync(CONFIG_PATH, cfg);
|
|
236
|
+
writeJsonAtomicSync(CONFIG_PATH, cfg, { mode: 0o600 });
|
|
237
|
+
}
|
|
238
|
+
async handleClaudeLogin(channel, chatId, senderId, args) {
|
|
239
|
+
const rawKey = `${channel.name}:${chatId}`;
|
|
240
|
+
if (isGroupSessionKey(rawKey)) {
|
|
241
|
+
await channel.send({ chatId, text: "/login is only available in a configured owner's private DM." });
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
const identity = senderId ? this.deps.router.identityForSender(channel.name, senderId) : undefined;
|
|
245
|
+
if (!identity) {
|
|
246
|
+
log.warn({ channel: channel.name, chatId }, "/login refused (sender is not a configured identity)");
|
|
247
|
+
await channel.send({ chatId, text: "Only a configured owner can refresh Claude login." });
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
const arg = args?.trim() ?? "";
|
|
251
|
+
if (arg.toLowerCase() === "cancel") {
|
|
252
|
+
const cancelled = this.claudeLogin.cancel(identity.name);
|
|
253
|
+
await channel.send({
|
|
254
|
+
chatId,
|
|
255
|
+
text: cancelled ? "Claude login cancelled." : "No Claude login is currently waiting.",
|
|
256
|
+
});
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
try {
|
|
260
|
+
if (!arg) {
|
|
261
|
+
const { url, reused } = await this.claudeLogin.start(identity.name);
|
|
262
|
+
await channel.send({
|
|
263
|
+
chatId,
|
|
264
|
+
text: [
|
|
265
|
+
reused ? "Claude login is already waiting." : "Claude login started.",
|
|
266
|
+
"",
|
|
267
|
+
url,
|
|
268
|
+
"",
|
|
269
|
+
"Authorize in your browser, then send the returned code here as:",
|
|
270
|
+
"/login <code>",
|
|
271
|
+
"",
|
|
272
|
+
"The request expires after 10 minutes. Use /login cancel to abort it.",
|
|
273
|
+
].join("\n"),
|
|
274
|
+
});
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
const completion = await this.claudeLogin.complete(identity.name, arg);
|
|
278
|
+
const reason = completion.verified
|
|
279
|
+
? "Claude login refreshed via owner DM"
|
|
280
|
+
: "Claude login refreshed via owner DM; verification probe failed";
|
|
281
|
+
mkdirSync(dirname(RESTART_REASON_FILE), { recursive: true });
|
|
282
|
+
writeFileSync(RESTART_REASON_FILE, reason, "utf-8");
|
|
283
|
+
await channel.send({
|
|
284
|
+
chatId,
|
|
285
|
+
text: completion.verified
|
|
286
|
+
? "Claude login verified. Restarting Tomo..."
|
|
287
|
+
: [
|
|
288
|
+
"[warning] Claude credentials were saved, but the verification probe failed. Restarting Tomo...",
|
|
289
|
+
completion.verificationError ? `\n${completion.verificationError}` : "",
|
|
290
|
+
].join(""),
|
|
291
|
+
});
|
|
292
|
+
this.scheduleRestart();
|
|
293
|
+
}
|
|
294
|
+
catch (err) {
|
|
295
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
296
|
+
log.warn({ err, identity: identity.name }, "Claude login command failed");
|
|
297
|
+
await channel.send({ chatId, text: `[error] Claude login failed: ${detail}` });
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
scheduleRestart() {
|
|
301
|
+
if (process.env.NODE_ENV === "test")
|
|
302
|
+
return;
|
|
303
|
+
setTimeout(() => {
|
|
304
|
+
const cli = process.argv[1];
|
|
305
|
+
if (!cli) {
|
|
306
|
+
process.kill(process.pid, "SIGTERM");
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
const child = spawn(process.execPath, [cli, "restart"], {
|
|
310
|
+
detached: true,
|
|
311
|
+
stdio: "ignore",
|
|
312
|
+
});
|
|
313
|
+
child.unref();
|
|
314
|
+
}, 100);
|
|
225
315
|
}
|
|
226
316
|
async restoreConfigAndRestart(channel, chatId) {
|
|
227
317
|
if (!existsSync(CONFIG_BACKUP_PATH)) {
|
|
@@ -231,25 +321,13 @@ export class ChatCommandHandler {
|
|
|
231
321
|
try {
|
|
232
322
|
mkdirSync(dirname(CONFIG_PATH), { recursive: true });
|
|
233
323
|
copyFileSync(CONFIG_BACKUP_PATH, CONFIG_PATH);
|
|
324
|
+
chmodSync(CONFIG_PATH, 0o600);
|
|
234
325
|
const reason = "Restored ~/.tomo/config.json from ~/.tomo/config.json.bak";
|
|
235
326
|
mkdirSync(dirname(RESTART_REASON_FILE), { recursive: true });
|
|
236
327
|
writeFileSync(RESTART_REASON_FILE, reason, "utf-8");
|
|
237
328
|
this.restoringConfig = true;
|
|
238
329
|
await channel.send({ chatId, text: "Restored config.json from config.json.bak. Restarting Tomo..." });
|
|
239
|
-
|
|
240
|
-
return;
|
|
241
|
-
setTimeout(() => {
|
|
242
|
-
const cli = process.argv[1];
|
|
243
|
-
if (!cli) {
|
|
244
|
-
process.kill(process.pid, "SIGTERM");
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
const child = spawn(process.execPath, [cli, "restart"], {
|
|
248
|
-
detached: true,
|
|
249
|
-
stdio: "ignore",
|
|
250
|
-
});
|
|
251
|
-
child.unref();
|
|
252
|
-
}, 100);
|
|
330
|
+
this.scheduleRestart();
|
|
253
331
|
}
|
|
254
332
|
catch (err) {
|
|
255
333
|
const detail = err instanceof Error ? err.message : String(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/agent/commands.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/agent/commands.ts"],"names":[],"mappings":"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"}
|