@justfortytwo/telegram 0.1.5 → 1.0.0-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -33
- package/dist/bridge.d.ts +39 -2
- package/dist/bridge.js +78 -89
- package/dist/bridge.js.map +1 -1
- package/dist/chat-sessions.d.ts +36 -0
- package/dist/chat-sessions.js +268 -0
- package/dist/chat-sessions.js.map +1 -0
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/telegram.d.ts +1 -1
- package/dist/telegram.js +4 -3
- package/dist/telegram.js.map +1 -1
- package/package.json +6 -8
package/README.md
CHANGED
|
@@ -1,21 +1,66 @@
|
|
|
1
1
|
# @justfortytwo/telegram
|
|
2
2
|
|
|
3
3
|
The **Telegram channel adapter** for [fortytwo](https://github.com/justfortytwo) — a
|
|
4
|
-
standalone, always-on **bridge**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
3. **
|
|
18
|
-
|
|
4
|
+
standalone, always-on **bridge** connecting a Telegram bot to persistent Claude
|
|
5
|
+
Code sessions through `@justfortytwo/runner`.
|
|
6
|
+
|
|
7
|
+
1. **Transport.** Each active authorized chat normally has one live RunnerSession.
|
|
8
|
+
After authorization, attachment ingestion and optional journaling, input waits
|
|
9
|
+
only for `session.send()` to write it. Polling continues while Claude works;
|
|
10
|
+
another message goes to the same session immediately after preprocessing.
|
|
11
|
+
2. **Output and approvals.** Complete assistant-message events are coalesced into
|
|
12
|
+
an evolving Telegram reply, edited at most once per second during streaming.
|
|
13
|
+
A result finalizes the reply; long replies use additional messages of at most
|
|
14
|
+
4000 UTF-16 units. Typing refreshes while submitted inputs await results.
|
|
15
|
+
Existing gate deferrals produce approval cards. Approving sends the existing
|
|
16
|
+
continuation prompt to the live session, or recreates it using a saved ID.
|
|
17
|
+
3. **Scheduler separation.** Proactive wakes remain the responsibility of the
|
|
18
|
+
external `@justfortytwo/scheduler` daemon.
|
|
19
|
+
|
|
20
|
+
## Session lifecycle and recovery
|
|
21
|
+
|
|
22
|
+
The bridge owns the chat-to-session mapping. Runner owns the Claude process and
|
|
23
|
+
stream-json transport; Claude Code owns the agent. Telegram makes no provider or
|
|
24
|
+
model decisions. The runner inherits process configuration and receives
|
|
25
|
+
`CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` explicitly, without changing `process.env`.
|
|
26
|
+
Persistent sessions have no default wall-clock turn timeout.
|
|
27
|
+
|
|
28
|
+
Claude stays alive between messages. When runner exposes a session ID, the bridge
|
|
29
|
+
writes it to `sessions` in `state/bridge-state.json`. Following a bridge restart,
|
|
30
|
+
the next authorized message lazily creates a session with `resumeSessionId`.
|
|
31
|
+
These IDs are recovery hints: the state file is not a transactional message queue,
|
|
32
|
+
and in-flight inputs, partial replies, or unobserved IDs can be lost on a crash.
|
|
33
|
+
Recovery also requires Claude Code's underlying session data to remain available.
|
|
34
|
+
|
|
35
|
+
An unexpected Claude exit removes the live mapping, retains the last known ID,
|
|
36
|
+
and reports an error if input was awaiting a result. The next message attempts
|
|
37
|
+
resumption; there is no automatic restart supervisor or input replay. Stderr is
|
|
38
|
+
logged locally. Asynchronous Telegram delivery failures are logged; there is no
|
|
39
|
+
new durable output queue. Assistant events are complete messages, not token-level
|
|
40
|
+
streaming, and concurrent inputs share the session's output stream.
|
|
41
|
+
|
|
42
|
+
SIGINT/SIGTERM abort polling, stop new session work and deterministically close
|
|
43
|
+
live RunnerSessions. `/logout` closes the chat's live process and removes its
|
|
44
|
+
binding, while retaining durable conversation IDs and existing pending approval
|
|
45
|
+
recovery data. The existing `ALLOWED_CHAT_IDS` bootstrap authorization still applies
|
|
46
|
+
independently of bindings.
|
|
47
|
+
|
|
48
|
+
The runner dependency is pinned to the published prerelease
|
|
49
|
+
`@justfortytwo/runner@1.0.0-0` (npm dist-tag `next`), the first release with
|
|
50
|
+
persistent sessions. Move to a stable `^1` range once runner publishes one.
|
|
51
|
+
|
|
52
|
+
### Manual check against a real Claude Code
|
|
53
|
+
|
|
54
|
+
The automated suite uses fake runners only. To verify concurrency end to end, run
|
|
55
|
+
the bridge with a test bot (`TELEGRAM_BOT_TOKEN`, `ALLOWED_CHAT_IDS=<your chat>`,
|
|
56
|
+
`claude` on `PATH`), then:
|
|
57
|
+
|
|
58
|
+
1. Send a message that makes Claude work for a while (e.g. "count slowly to 20
|
|
59
|
+
using a Bash `sleep 1` between numbers").
|
|
60
|
+
2. While typing is shown, send a second message. The bridge log should print the
|
|
61
|
+
second `inbound` line immediately, and `ps` should show a single `claude` child.
|
|
62
|
+
3. Stop the bridge with Ctrl-C and confirm no `claude` process remains; restart
|
|
63
|
+
it and send a message: the reply should continue the same conversation.
|
|
19
64
|
|
|
20
65
|
## Pairing / login binding model
|
|
21
66
|
|
|
@@ -33,11 +78,12 @@ channel side: /login <code> -> verify(chatId, code) -> bindin
|
|
|
33
78
|
bind.
|
|
34
79
|
- `/login <code>` verifies the code and, on success, **persists a binding**
|
|
35
80
|
`(channelType, channelUserId) -> owner`.
|
|
36
|
-
- `/logout` removes the binding.
|
|
81
|
+
- `/logout` removes the binding and closes the live session (recovery IDs remain).
|
|
37
82
|
- Every inbound message is authorized against **persisted bindings ∪ the
|
|
38
|
-
optional `ALLOWED_CHAT_IDS` bootstrap set**. The bootstrap set lets
|
|
39
|
-
|
|
40
|
-
bindings
|
|
83
|
+
optional `ALLOWED_CHAT_IDS` bootstrap set**. The bootstrap set lets a chat
|
|
84
|
+
reach the bridge without a binding; it is never required. On a fresh install
|
|
85
|
+
(no `ALLOWED_CHAT_IDS`, no bindings) the bridge still starts, locked down, and
|
|
86
|
+
the first chat pairs with `/login <code>` using a code from `fortytwo pair`.
|
|
41
87
|
|
|
42
88
|
Pending challenges are **persisted in the binding store** (not in process
|
|
43
89
|
memory), so a code minted by one process — e.g. the `fortytwo pair` CLI — is
|
|
@@ -64,20 +110,23 @@ sqlite db exists:
|
|
|
64
110
|
> table, swap the default store for a memory-backed `BindingStore`. The login
|
|
65
111
|
> flow is unaffected.
|
|
66
112
|
|
|
67
|
-
##
|
|
113
|
+
## fortytwo package dependencies
|
|
68
114
|
|
|
69
|
-
|
|
70
|
-
|
|
115
|
+
`@justfortytwo/gate` is a regular dependency: `attachments.ts` imports its
|
|
116
|
+
`createSourceEnvelope` provenance helper at runtime (gate has no dependencies of
|
|
117
|
+
its own). Using gate as a *policy hook* remains optional and is configured
|
|
118
|
+
separately. `@justfortytwo/memory` is an **optional peer**: it is loaded
|
|
119
|
+
dynamically, and it is also a devDependency so types and tests resolve.
|
|
71
120
|
|
|
72
|
-
|
|
|
121
|
+
| Package | Used for | Contract |
|
|
73
122
|
| --- | --- | --- |
|
|
74
123
|
| `@justfortytwo/memory` | Memory store, jobs, pending-decision records, embeddings | `MEMORY_TOOL_CONTRACT_VERSION` (tools `mcp__fortytwo-memory__*`) |
|
|
75
124
|
| `@justfortytwo/gate` | Bash exact-command allowlist behind "Allow _N_h"; provenance envelopes | `POLICY_SCHEMA_VERSION` |
|
|
76
125
|
|
|
77
|
-
Install
|
|
126
|
+
Install memory alongside this package to enable persistence:
|
|
78
127
|
|
|
79
128
|
```sh
|
|
80
|
-
npm install @justfortytwo/telegram @justfortytwo/memory
|
|
129
|
+
npm install @justfortytwo/telegram @justfortytwo/memory
|
|
81
130
|
```
|
|
82
131
|
|
|
83
132
|
The **memory** data path is wired: the bridge opens + migrates the memory DB at
|
|
@@ -85,17 +134,16 @@ startup and **persists each channel event** to `@justfortytwo/memory`; recall
|
|
|
85
134
|
happens inside the headless `claude` turn via the Memory MCP tools. If the memory
|
|
86
135
|
peer is absent, the bridge degrades to **channel-only** (messages relay but are
|
|
87
136
|
not persisted) rather than refusing to start. The **gate** "Allow _N_h" path
|
|
88
|
-
still uses a local
|
|
89
|
-
exact-command allowlist
|
|
137
|
+
still uses a local placeholder; wiring it to `@justfortytwo/gate`'s
|
|
138
|
+
exact-command allowlist remains a stub, as does the cross-process pending-decision write. This migration preserves those existing seams; it does not implement gate permissions.
|
|
90
139
|
|
|
91
140
|
## Environment
|
|
92
141
|
|
|
93
142
|
| Var | Required | Meaning |
|
|
94
143
|
| --- | --- | --- |
|
|
95
144
|
| `TELEGRAM_BOT_TOKEN` | yes | Bot token. The bridge is the **only** long-poller on this bot. |
|
|
96
|
-
| `ALLOWED_CHAT_IDS` |
|
|
145
|
+
| `ALLOWED_CHAT_IDS` | no | Comma-separated chat IDs authorized without a binding. Not needed for first pairing: `/login <code>` works with zero bindings. |
|
|
97
146
|
| `CLAUDE_BIN` | no | Path to the `claude` binary (default `claude`). |
|
|
98
|
-
| `FORTYTWO_TURN_TIMEOUT` | no | Hard cap (seconds) on a single turn so a stalled model can't wedge the bridge (default 300). |
|
|
99
147
|
| `FORTYTWO_BASH_ALLOW_TTL_HOURS` | no | Default TTL (hours) for "Allow _N_h" bash approvals (default 8). |
|
|
100
148
|
| `TELEGRAM_BINDINGS_DB` | no | Path to the self-owned bindings db (default `state/telegram-bindings.db`). |
|
|
101
149
|
| `DB_PATH` | no | Path to the memory DB the bridge opens/migrates at startup (default `db/fortytwo.db`, relative to `FORTYTWO_ROOT`). |
|
|
@@ -104,7 +152,7 @@ exact-command allowlist is the remaining seam.
|
|
|
104
152
|
| `ASSISTANT_NAME` / `ASSISTANT_ACTOR` / `OWNER_ACTOR` | no | Display name + journal actor labels. |
|
|
105
153
|
| `FORTYTWO_ROOT` | no | Working root for the headless `claude` process + state files. |
|
|
106
154
|
|
|
107
|
-
> The historical `FORD_*` names (`FORD_ROOT`,
|
|
155
|
+
> The historical `FORD_*` names (`FORD_ROOT`,
|
|
108
156
|
> `FORD_BASH_ALLOW_TTL_HOURS`) are still honored as deprecated aliases — set the
|
|
109
157
|
> `FORTYTWO_*` equivalents in new deployments.
|
|
110
158
|
|
|
@@ -118,9 +166,11 @@ exact-command allowlist is the remaining seam.
|
|
|
118
166
|
- The bridge **spawns the `claude` binary**, so Claude Code's `claude` must be on
|
|
119
167
|
your `PATH` (or point `CLAUDE_BIN` at it).
|
|
120
168
|
- It loads `config/adapters.toml` from `$FORTYTWO_ROOT/config/`.
|
|
121
|
-
-
|
|
122
|
-
|
|
123
|
-
|
|
169
|
+
- It **requires** `TELEGRAM_BOT_TOKEN`. With no `ALLOWED_CHAT_IDS` and no
|
|
170
|
+
bindings it starts locked down: every unbound sender is silently dropped, and
|
|
171
|
+
only `/login <code>` with a valid pending challenge (mint one with
|
|
172
|
+
`fortytwo pair`) creates the first binding. No pending challenge is needed for
|
|
173
|
+
the bridge to keep running.
|
|
124
174
|
|
|
125
175
|
```sh
|
|
126
176
|
npm run build
|
package/dist/bridge.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
2
|
+
import { ChatSessions } from './chat-sessions.js';
|
|
3
|
+
import { Telegram, type TgMessage, type AttachmentSpec } from './telegram.js';
|
|
3
4
|
import { type Attachment } from './attachments.js';
|
|
5
|
+
import { type AuthContext } from './login.js';
|
|
4
6
|
import type { SourceKind } from '@justfortytwo/gate';
|
|
5
|
-
import type { MemoryInput } from '@justfortytwo/memory';
|
|
7
|
+
import type { DbHandles as MemDbHandles, Embedder as MemEmbedder, MemoryInput } from '@justfortytwo/memory';
|
|
8
|
+
type DbHandles = MemDbHandles | null;
|
|
9
|
+
type Embedder = MemEmbedder | null;
|
|
6
10
|
interface ChannelEvent {
|
|
7
11
|
channel: string;
|
|
8
12
|
direction: string;
|
|
@@ -15,6 +19,16 @@ interface ChannelEvent {
|
|
|
15
19
|
}
|
|
16
20
|
/** Map a channel event onto memory's generic MemoryInput (content + provenance). */
|
|
17
21
|
export declare function mapChannelEventToMemoryInput(entry: ChannelEvent): MemoryInput;
|
|
22
|
+
/**
|
|
23
|
+
* Load the optional memory engine: open + migrate the DB and build an embedder
|
|
24
|
+
* (Ollama when EMBED_MODEL is set, else a deterministic fake). Returns null
|
|
25
|
+
* handles when memory is not installed or fails to open — the bridge then runs
|
|
26
|
+
* channel-only rather than refusing to start.
|
|
27
|
+
*/
|
|
28
|
+
export declare function loadMemoryEngine(dbPath: string): Promise<{
|
|
29
|
+
h: DbHandles;
|
|
30
|
+
embedder: Embedder;
|
|
31
|
+
}>;
|
|
18
32
|
export interface DeferredTool {
|
|
19
33
|
id: string;
|
|
20
34
|
name: string;
|
|
@@ -50,4 +64,27 @@ export declare function ingestMessageAttachments(io: AttachmentIo, message: TgMe
|
|
|
50
64
|
attachments: Attachment[];
|
|
51
65
|
skipped: AttachmentSpec[];
|
|
52
66
|
}>;
|
|
67
|
+
export interface BridgeState {
|
|
68
|
+
lastUpdateId: number;
|
|
69
|
+
sessions: Record<number, string>;
|
|
70
|
+
pending: Record<number, {
|
|
71
|
+
toolUseId: string;
|
|
72
|
+
sessionId?: string;
|
|
73
|
+
toolName?: string;
|
|
74
|
+
input?: Record<string, unknown>;
|
|
75
|
+
}>;
|
|
76
|
+
}
|
|
77
|
+
export declare function createBridgeSessions(tg: Telegram, state: BridgeState, h: DbHandles, embedder: Embedder): ChatSessions;
|
|
78
|
+
export declare function handleInbound(tg: Telegram, auth: AuthContext, state: BridgeState, h: DbHandles, embedder: Embedder, chatId: number, message: TgMessage, sessions: ChatSessions): Promise<void>;
|
|
79
|
+
/** Handle an inline-keyboard tap on an approval card. */
|
|
80
|
+
export declare function handleCallback(tg: Telegram, state: BridgeState, h: DbHandles, embedder: Embedder, chatId: number, cbId: string, data: string, cardMessageId: number, sessions: ChatSessions): Promise<void>;
|
|
81
|
+
export declare function pollLoop(tg: Telegram, auth: AuthContext, state: BridgeState, h: DbHandles, embedder: Embedder, sessions: ChatSessions, signal: AbortSignal): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Startup notice for the fresh-install state (no ALLOWED_CHAT_IDS, no bindings).
|
|
84
|
+
* This is NOT fatal: the bridge runs locked down, every unbound sender is
|
|
85
|
+
* dropped, and the only way in is `/login <code>` with a valid pending
|
|
86
|
+
* challenge (e.g. minted by `fortytwo pair`). Returns null when some chat is
|
|
87
|
+
* already authorized.
|
|
88
|
+
*/
|
|
89
|
+
export declare function pairingOnlyStartupNotice(bootstrapSize: number, bindingCount: number): string | null;
|
|
53
90
|
export {};
|
package/dist/bridge.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Telegram bridge adapter. Always-on process (tmux / wakeup loop). It does:
|
|
3
3
|
// 1. Long-poll Telegram, authorize each inbound against persisted bindings ∪
|
|
4
4
|
// ALLOWED_CHAT_IDS bootstrap (login.ts), journal inbound on receipt, drive a
|
|
5
|
-
//
|
|
5
|
+
// persistent RunnerSession per chat, and transport the assistant's reply back.
|
|
6
6
|
// 2. Approval UX: when the gate defers an [external]/[irreversible] call the
|
|
7
7
|
// headless turn ends with stop_reason tool_deferred; surface a card with an
|
|
8
8
|
// inline keyboard (Approve/Deny). The tap records the decision + resumes so
|
|
@@ -19,6 +19,7 @@ import { readFileSync, writeFileSync, existsSync, mkdirSync, realpathSync } from
|
|
|
19
19
|
import { resolve, dirname } from 'node:path';
|
|
20
20
|
import { fileURLToPath } from 'node:url';
|
|
21
21
|
import { createRunner } from '@justfortytwo/runner';
|
|
22
|
+
import { ChatSessions } from './chat-sessions.js';
|
|
22
23
|
import { enqueueReply } from './notify.js';
|
|
23
24
|
import { Telegram, parseAllowed, approvalKeyboard, messageAttachmentSpecs } from './telegram.js';
|
|
24
25
|
import { buildAttachment, inboxRelPath, withinSizeLimit, extensionFor } from './attachments.js';
|
|
@@ -55,7 +56,7 @@ let memExistsPending = null;
|
|
|
55
56
|
* handles when memory is not installed or fails to open — the bridge then runs
|
|
56
57
|
* channel-only rather than refusing to start.
|
|
57
58
|
*/
|
|
58
|
-
async function loadMemoryEngine(dbPath) {
|
|
59
|
+
export async function loadMemoryEngine(dbPath) {
|
|
59
60
|
let mod;
|
|
60
61
|
try {
|
|
61
62
|
mod = (await import('@justfortytwo/memory'));
|
|
@@ -253,43 +254,14 @@ function saveState(s) {
|
|
|
253
254
|
mkdirSync(dirname(STATE_PATH), { recursive: true });
|
|
254
255
|
writeFileSync(STATE_PATH, JSON.stringify(s, null, 2));
|
|
255
256
|
}
|
|
256
|
-
// ---
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
// the first claude spawn, which getRunner() guarantees.
|
|
265
|
-
let _runner;
|
|
266
|
-
function getRunner() {
|
|
267
|
-
if (!_runner) {
|
|
268
|
-
// Skip Claude Code's built-in file-memory so context isn't double-booked;
|
|
269
|
-
// set on process.env so the runner's spawned child inherits it.
|
|
270
|
-
process.env['CLAUDE_CODE_DISABLE_AUTO_MEMORY'] = '1';
|
|
271
|
-
// Honour the legacy FORD_TURN_TIMEOUT alias before the runner reads
|
|
272
|
-
// FORTYTWO_TURN_TIMEOUT, so old env configs continue to work.
|
|
273
|
-
const legacyTimeout = envCompat(process.env, 'FORTYTWO_TURN_TIMEOUT', 'FORD_TURN_TIMEOUT');
|
|
274
|
-
if (legacyTimeout)
|
|
275
|
-
process.env['FORTYTWO_TURN_TIMEOUT'] = legacyTimeout;
|
|
276
|
-
_runner = createRunner({ bin: CLAUDE_BIN, cwd: ROOT });
|
|
277
|
-
}
|
|
278
|
-
return _runner;
|
|
279
|
-
}
|
|
280
|
-
async function runClaude(prompt, sessionId) {
|
|
281
|
-
const extraArgs = sessionId ? ['--resume', sessionId] : [];
|
|
282
|
-
const { raw } = await getRunner()(prompt, extraArgs);
|
|
283
|
-
// Runner returns raw=null on timeout/parse failure. Synthesise a sentinel
|
|
284
|
-
// result matching the shape interpretResult() and respond() expect.
|
|
285
|
-
if (raw === null) {
|
|
286
|
-
const timeoutSec = Number(process.env['FORTYTWO_TURN_TIMEOUT'] ?? 300);
|
|
287
|
-
return { result: `⏳ ${ASSISTANT_NAME}'s turn exceeded ${timeoutSec}s and was aborted (the proxy/model may have stalled). Try again.` };
|
|
288
|
-
}
|
|
289
|
-
// raw is the full parsed JSON (same object the old inline runClaude produced).
|
|
290
|
-
// interpretResult() reads raw.stop_reason / raw.deferred_tool_use / raw.result
|
|
291
|
-
// / raw.session_id — all preserved.
|
|
292
|
-
return raw;
|
|
257
|
+
// --- persistent Claude sessions ---
|
|
258
|
+
export function createBridgeSessions(tg, state, h, embedder) {
|
|
259
|
+
const runner = createRunner({ bin: CLAUDE_BIN, cwd: ROOT, env: { CLAUDE_CODE_DISABLE_AUTO_MEMORY: '1' } });
|
|
260
|
+
return new ChatSessions(runner, tg, {
|
|
261
|
+
ids: state.sessions,
|
|
262
|
+
persist: () => saveState(state),
|
|
263
|
+
onResult: (chatId, result, text) => respond(tg, h, embedder, state, chatId, result, text),
|
|
264
|
+
});
|
|
293
265
|
}
|
|
294
266
|
// --- I/O glue ---
|
|
295
267
|
async function logBridgeEntry(h, embedder, entry) {
|
|
@@ -307,27 +279,23 @@ async function sendReply(tg, chatId, placeholderId, text) {
|
|
|
307
279
|
}
|
|
308
280
|
await tg.sendMessage(chatId, text || '(no reply)');
|
|
309
281
|
}
|
|
310
|
-
async function respond(tg, h, embedder, state, chatId,
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
if (interp.deferred) {
|
|
282
|
+
async function respond(tg, h, embedder, state, chatId, result, text) {
|
|
283
|
+
// Raw result access is confined to the existing gate compatibility seam.
|
|
284
|
+
const deferred = interpretResult(result.raw).deferred;
|
|
285
|
+
if (deferred) {
|
|
315
286
|
state.pending[chatId] = {
|
|
316
|
-
toolUseId:
|
|
317
|
-
toolName:
|
|
287
|
+
toolUseId: deferred.id, sessionId: state.sessions[chatId],
|
|
288
|
+
toolName: deferred.name, input: deferred.input,
|
|
318
289
|
};
|
|
319
|
-
|
|
320
|
-
const keyboardOpts =
|
|
321
|
-
await tg.sendMessage(chatId, formatApprovalCard(
|
|
322
|
-
|
|
323
|
-
else {
|
|
324
|
-
const text = interp.reply ?? '(no reply)';
|
|
325
|
-
await logBridgeEntry(h, embedder, { channel: 'telegram', direction: 'outbound', actor: ASSISTANT_ACTOR, kind: 'message', content: text });
|
|
326
|
-
console.log(`[bridge] chat ${chatId}: replied (${text.length} chars)`);
|
|
327
|
-
await sendReply(tg, chatId, placeholderId, text);
|
|
290
|
+
saveState(state);
|
|
291
|
+
const keyboardOpts = deferred.name === 'Bash' ? { bashTtlHours: BASH_ALLOW_TTL_HOURS } : {};
|
|
292
|
+
await tg.sendMessage(chatId, formatApprovalCard(deferred), approvalKeyboard(deferred.id, keyboardOpts));
|
|
293
|
+
return true;
|
|
328
294
|
}
|
|
295
|
+
await logBridgeEntry(h, embedder, { channel: 'telegram', direction: 'outbound', actor: ASSISTANT_ACTOR, kind: 'message', content: text });
|
|
296
|
+
return false;
|
|
329
297
|
}
|
|
330
|
-
async function handleInbound(tg, auth, state, h, embedder, chatId, message) {
|
|
298
|
+
export async function handleInbound(tg, auth, state, h, embedder, chatId, message, sessions) {
|
|
331
299
|
const text = message.text ?? '';
|
|
332
300
|
// --- AUTH GATE (lockdown) -------------------------------------------------
|
|
333
301
|
// Auth commands (/login, /logout) and the unbound-sender drop are handled
|
|
@@ -341,6 +309,7 @@ async function handleInbound(tg, auth, state, h, embedder, chatId, message) {
|
|
|
341
309
|
await sendReply(tg, chatId, null, action.reply);
|
|
342
310
|
return;
|
|
343
311
|
case 'logout':
|
|
312
|
+
await sessions.close(chatId);
|
|
344
313
|
console.log(`[bridge] chat ${chatId}: unbound`);
|
|
345
314
|
await sendReply(tg, chatId, null, action.reply);
|
|
346
315
|
return;
|
|
@@ -359,7 +328,6 @@ async function handleInbound(tg, auth, state, h, embedder, chatId, message) {
|
|
|
359
328
|
}
|
|
360
329
|
}
|
|
361
330
|
// --- end auth gate --------------------------------------------------------
|
|
362
|
-
const t0 = Date.now();
|
|
363
331
|
const io = {
|
|
364
332
|
download: async (fileId) => tg.downloadFile(await tg.getFilePath(fileId)),
|
|
365
333
|
write: (relPath, bytes) => { const abs = resolve(ROOT, relPath); mkdirSync(dirname(abs), { recursive: true }); writeFileSync(abs, bytes); },
|
|
@@ -395,14 +363,10 @@ async function handleInbound(tg, auth, state, h, embedder, chatId, message) {
|
|
|
395
363
|
}
|
|
396
364
|
const prompt = buildInboundPrompt(text, attachments);
|
|
397
365
|
console.log(`[bridge] chat ${chatId}: inbound "${journalContent.slice(0, 50)}" (${attachments.length} att) — waking assistant`);
|
|
398
|
-
|
|
399
|
-
const result = await withTyping(tg, chatId, () => runClaude(prompt, state.sessions[chatId]));
|
|
400
|
-
const claudeMs = Date.now() - t1;
|
|
401
|
-
await respond(tg, h, embedder, state, chatId, null, result);
|
|
402
|
-
console.log(`[bridge] chat ${chatId}: turn ${Date.now() - t0}ms (claude ${claudeMs}ms)`);
|
|
366
|
+
await sessions.send(chatId, prompt);
|
|
403
367
|
}
|
|
404
368
|
/** Handle an inline-keyboard tap on an approval card. */
|
|
405
|
-
async function handleCallback(tg, state, h, embedder, chatId, cbId, data, cardMessageId) {
|
|
369
|
+
export async function handleCallback(tg, state, h, embedder, chatId, cbId, data, cardMessageId, sessions) {
|
|
406
370
|
const sep = data.indexOf(':');
|
|
407
371
|
const action = sep >= 0 ? data.slice(0, sep) : data;
|
|
408
372
|
const tuid = sep >= 0 ? data.slice(sep + 1) : '';
|
|
@@ -439,8 +403,8 @@ async function handleCallback(tg, state, h, embedder, chatId, cbId, data, cardMe
|
|
|
439
403
|
delete state.pending[chatId];
|
|
440
404
|
await tg.answerCallbackQuery(cbId, statusText).catch(() => { });
|
|
441
405
|
await tg.editMessageText(chatId, cardMessageId, `${statusText}...`).catch(() => { });
|
|
442
|
-
|
|
443
|
-
await
|
|
406
|
+
saveState(state);
|
|
407
|
+
await sessions.send(chatId, 'Approved - proceed with the deferred action now.', pending.sessionId);
|
|
444
408
|
}
|
|
445
409
|
else {
|
|
446
410
|
console.log(`[bridge] chat ${chatId}: denied ${tuid}`);
|
|
@@ -450,20 +414,24 @@ async function handleCallback(tg, state, h, embedder, chatId, cbId, data, cardMe
|
|
|
450
414
|
await tg.editMessageText(chatId, cardMessageId, 'Denied - the action was not run.').catch(() => { });
|
|
451
415
|
}
|
|
452
416
|
}
|
|
453
|
-
async function pollLoop(tg, auth, state, h, embedder) {
|
|
417
|
+
export async function pollLoop(tg, auth, state, h, embedder, sessions, signal) {
|
|
454
418
|
// Pre-build dedup deps once; null when memory is unavailable (channel-only).
|
|
455
419
|
const replyDeps = makeEnqueueReplyDeps(h);
|
|
456
|
-
while (
|
|
420
|
+
while (!signal.aborted) {
|
|
457
421
|
let updates = [];
|
|
458
422
|
try {
|
|
459
|
-
updates = await tg.getUpdates(state.lastUpdateId + 1);
|
|
423
|
+
updates = await tg.getUpdates(state.lastUpdateId + 1, 30, signal);
|
|
460
424
|
}
|
|
461
425
|
catch (e) {
|
|
426
|
+
if (signal.aborted)
|
|
427
|
+
break;
|
|
462
428
|
console.error(`[bridge] getUpdates error: ${e?.message}; retrying in 5s`);
|
|
463
429
|
await sleep(5000);
|
|
464
430
|
continue;
|
|
465
431
|
}
|
|
466
432
|
for (const u of updates) {
|
|
433
|
+
if (signal.aborted)
|
|
434
|
+
break;
|
|
467
435
|
state.lastUpdateId = Math.max(state.lastUpdateId, u.update_id);
|
|
468
436
|
const chatId = u.message?.chat?.id ?? u.callback_query?.message?.chat?.id;
|
|
469
437
|
if (chatId === undefined)
|
|
@@ -473,17 +441,19 @@ async function pollLoop(tg, auth, state, h, embedder) {
|
|
|
473
441
|
// chat has no pending card, but we still gate to be safe.
|
|
474
442
|
try {
|
|
475
443
|
if (u.message && hasHandleableContent(u.message)) {
|
|
476
|
-
await handleInbound(tg, auth, state, h, embedder, chatId, u.message);
|
|
444
|
+
await handleInbound(tg, auth, state, h, embedder, chatId, u.message, sessions);
|
|
477
445
|
}
|
|
478
446
|
else if (u.callback_query?.data && u.callback_query.message) {
|
|
479
447
|
if (!isAuthorized(auth, chatId)) {
|
|
480
448
|
console.log(`[bridge] chat ${chatId}: callback dropped (unbound, lockdown)`);
|
|
481
449
|
continue;
|
|
482
450
|
}
|
|
483
|
-
await handleCallback(tg, state, h, embedder, chatId, u.callback_query.id, u.callback_query.data, u.callback_query.message.message_id);
|
|
451
|
+
await handleCallback(tg, state, h, embedder, chatId, u.callback_query.id, u.callback_query.data, u.callback_query.message.message_id, sessions);
|
|
484
452
|
}
|
|
485
453
|
}
|
|
486
454
|
catch (e) {
|
|
455
|
+
if (signal.aborted)
|
|
456
|
+
break;
|
|
487
457
|
console.error(`[bridge] handler error: ${e?.message}`);
|
|
488
458
|
if (isAuthorized(auth, chatId)) {
|
|
489
459
|
const errMsg = `⚠️ Something went wrong handling that: ${e?.message ?? e}`;
|
|
@@ -509,18 +479,19 @@ async function pollLoop(tg, auth, state, h, embedder) {
|
|
|
509
479
|
}
|
|
510
480
|
}
|
|
511
481
|
function sleep(ms) { return new Promise((r) => setTimeout(r, ms)); }
|
|
512
|
-
/** Shows Telegram's native "typing…" indicator (refreshed every 4s) while `fn` runs. */
|
|
513
|
-
async function withTyping(tg, chatId, fn) {
|
|
514
|
-
await tg.sendChatAction(chatId, 'typing').catch(() => { });
|
|
515
|
-
const iv = setInterval(() => tg.sendChatAction(chatId, 'typing').catch(() => { }), 4000);
|
|
516
|
-
try {
|
|
517
|
-
return await fn();
|
|
518
|
-
}
|
|
519
|
-
finally {
|
|
520
|
-
clearInterval(iv);
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
482
|
// --- main ---
|
|
483
|
+
/**
|
|
484
|
+
* Startup notice for the fresh-install state (no ALLOWED_CHAT_IDS, no bindings).
|
|
485
|
+
* This is NOT fatal: the bridge runs locked down, every unbound sender is
|
|
486
|
+
* dropped, and the only way in is `/login <code>` with a valid pending
|
|
487
|
+
* challenge (e.g. minted by `fortytwo pair`). Returns null when some chat is
|
|
488
|
+
* already authorized.
|
|
489
|
+
*/
|
|
490
|
+
export function pairingOnlyStartupNotice(bootstrapSize, bindingCount) {
|
|
491
|
+
if (bootstrapSize > 0 || bindingCount > 0)
|
|
492
|
+
return null;
|
|
493
|
+
return '[bridge] no ALLOWED_CHAT_IDS and no bindings yet: running locked down, waiting for /login <code> (mint one with `fortytwo pair`).';
|
|
494
|
+
}
|
|
524
495
|
async function main() {
|
|
525
496
|
const token = process.env.TELEGRAM_BOT_TOKEN;
|
|
526
497
|
const bootstrap = parseAllowed(process.env.ALLOWED_CHAT_IDS);
|
|
@@ -531,16 +502,16 @@ async function main() {
|
|
|
531
502
|
// NOTE: unlike the monolith, ALLOWED_CHAT_IDS is now an OPTIONAL bootstrap set,
|
|
532
503
|
// not the sole authorization. The bot is still locked down: unbound senders get
|
|
533
504
|
// no response and can only earn access via /login <code>. Starting with an empty
|
|
534
|
-
// bootstrap is allowed
|
|
505
|
+
// bootstrap AND zero bindings is allowed: that is the fresh-install state in
|
|
506
|
+
// which the first chat pairs with a code minted by `fortytwo pair`.
|
|
535
507
|
// Self-owned binding store (does not require @justfortytwo/memory's db).
|
|
536
508
|
mkdirSync(dirname(BINDINGS_DB_PATH), { recursive: true });
|
|
537
509
|
const store = new SqliteBindingStore(BINDINGS_DB_PATH);
|
|
538
510
|
const adapter = new TelegramAdapter(store);
|
|
539
511
|
const auth = { adapter, bootstrap };
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
}
|
|
512
|
+
const pairingNotice = pairingOnlyStartupNotice(bootstrap.size, store.list('telegram').length);
|
|
513
|
+
if (pairingNotice)
|
|
514
|
+
console.log(pairingNotice);
|
|
544
515
|
// Persist channel events to the memory store (optional peer; channel-only if absent).
|
|
545
516
|
const dbPath = process.env.DB_PATH ? resolve(ROOT, process.env.DB_PATH) : resolve(ROOT, 'db', 'fortytwo.db');
|
|
546
517
|
const { h, embedder } = await loadMemoryEngine(dbPath);
|
|
@@ -548,7 +519,20 @@ async function main() {
|
|
|
548
519
|
const state = loadState();
|
|
549
520
|
console.log(`[bridge] up. bootstrap=${bootstrap.size}, bindings=${store.list('telegram').length}, bindingsDb=${BINDINGS_DB_PATH}`);
|
|
550
521
|
// Proactive wakes are now handled by @justfortytwo/scheduler (external daemon).
|
|
551
|
-
|
|
522
|
+
const sessions = createBridgeSessions(tg, state, h, embedder);
|
|
523
|
+
const controller = new AbortController();
|
|
524
|
+
const shutdown = () => { controller.abort(); void sessions.closeAll(); };
|
|
525
|
+
process.once('SIGINT', shutdown);
|
|
526
|
+
process.once('SIGTERM', shutdown);
|
|
527
|
+
try {
|
|
528
|
+
await pollLoop(tg, auth, state, h, embedder, sessions, controller.signal);
|
|
529
|
+
}
|
|
530
|
+
finally {
|
|
531
|
+
controller.abort();
|
|
532
|
+
await sessions.closeAll();
|
|
533
|
+
process.off('SIGINT', shutdown);
|
|
534
|
+
process.off('SIGTERM', shutdown);
|
|
535
|
+
}
|
|
552
536
|
}
|
|
553
537
|
// Run only when invoked directly (the bin / node dist/bridge.js), not when
|
|
554
538
|
// imported by tests. Realpath comparison so the npm bin symlink resolves here.
|
|
@@ -563,6 +547,11 @@ function invokedAsBin() {
|
|
|
563
547
|
return false;
|
|
564
548
|
}
|
|
565
549
|
}
|
|
566
|
-
|
|
567
|
-
|
|
550
|
+
// main() resolves only after polling stopped and closeAll() awaited every Claude
|
|
551
|
+
// process and queued delivery. Exit naturally so piped stdout/stderr can flush; the
|
|
552
|
+
// unref'd timer forces exit only if an unrelated handle would keep the process up.
|
|
553
|
+
if (invokedAsBin()) {
|
|
554
|
+
main().then(() => { process.exitCode = 0; }, (e) => { console.error('[bridge] fatal:', e); process.exitCode = 1; })
|
|
555
|
+
.finally(() => { setTimeout(() => process.exit(), 2000).unref(); });
|
|
556
|
+
}
|
|
568
557
|
//# sourceMappingURL=bridge.js.map
|
package/dist/bridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Runner, RunResult } from '@justfortytwo/runner';
|
|
2
|
+
import type { Telegram } from './telegram.js';
|
|
3
|
+
type Transport = Pick<Telegram, 'sendMessage' | 'editMessageText' | 'sendChatAction'>;
|
|
4
|
+
interface Hooks {
|
|
5
|
+
ids: Record<number, string>;
|
|
6
|
+
persist(): void;
|
|
7
|
+
/** Journaling and gate compatibility stay in the bridge. Return true for a gate card. */
|
|
8
|
+
onResult(chatId: number, result: RunResult, text: string): Promise<boolean | void>;
|
|
9
|
+
}
|
|
10
|
+
/** Telegram chat identity and presentation only; runner owns process and input transport. */
|
|
11
|
+
export declare class ChatSessions {
|
|
12
|
+
private runner;
|
|
13
|
+
private tg;
|
|
14
|
+
private hooks;
|
|
15
|
+
private readonly chats;
|
|
16
|
+
private stopped;
|
|
17
|
+
private shutdown?;
|
|
18
|
+
private readonly retired;
|
|
19
|
+
private readonly closing;
|
|
20
|
+
constructor(runner: Pick<Runner, 'createSession'>, tg: Transport, hooks: Hooks);
|
|
21
|
+
private getOrCreate;
|
|
22
|
+
send(chatId: number, prompt: string, fallbackId?: string, retry?: boolean): Promise<void>;
|
|
23
|
+
private remember;
|
|
24
|
+
private queue;
|
|
25
|
+
private event;
|
|
26
|
+
private retire;
|
|
27
|
+
private fail;
|
|
28
|
+
private startTyping;
|
|
29
|
+
private stopTimers;
|
|
30
|
+
private render;
|
|
31
|
+
/** Wait for already queued Telegram delivery, never for a Claude result. */
|
|
32
|
+
drain(chatId: number): Promise<void>;
|
|
33
|
+
close(chatId: number): Promise<void>;
|
|
34
|
+
closeAll(): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
const TYPING_IDLE_MS = 5 * 60_000;
|
|
2
|
+
/** Telegram chat identity and presentation only; runner owns process and input transport. */
|
|
3
|
+
export class ChatSessions {
|
|
4
|
+
runner;
|
|
5
|
+
tg;
|
|
6
|
+
hooks;
|
|
7
|
+
chats = new Map();
|
|
8
|
+
stopped = false;
|
|
9
|
+
shutdown;
|
|
10
|
+
retired = new Map();
|
|
11
|
+
closing = new Set();
|
|
12
|
+
constructor(runner, tg, hooks) {
|
|
13
|
+
this.runner = runner;
|
|
14
|
+
this.tg = tg;
|
|
15
|
+
this.hooks = hooks;
|
|
16
|
+
}
|
|
17
|
+
getOrCreate(chatId, fallbackId) {
|
|
18
|
+
if (this.stopped || this.closing.has(chatId))
|
|
19
|
+
return Promise.reject(new Error('Chat sessions are closed'));
|
|
20
|
+
const existing = this.chats.get(chatId);
|
|
21
|
+
if (existing)
|
|
22
|
+
return existing;
|
|
23
|
+
const creating = this.runner.createSession({ resumeSessionId: this.hooks.ids[chatId] ?? fallbackId }).then(async (session) => {
|
|
24
|
+
const chat = { session, output: { text: '', messages: [] }, pending: 0, persistedId: this.hooks.ids[chatId], delivery: Promise.resolve(), closed: false, listener: () => { } };
|
|
25
|
+
chat.listener = event => {
|
|
26
|
+
if (this.chats.get(chatId) === creating)
|
|
27
|
+
this.event(chatId, chat, event);
|
|
28
|
+
};
|
|
29
|
+
session.on('event', chat.listener);
|
|
30
|
+
this.remember(chatId, chat);
|
|
31
|
+
if (session.state === 'closed' || session.state === 'failed') {
|
|
32
|
+
session.off('event', chat.listener);
|
|
33
|
+
await session.close();
|
|
34
|
+
throw new Error('Claude session exited during startup. Send another message to resume.');
|
|
35
|
+
}
|
|
36
|
+
return chat;
|
|
37
|
+
}).catch(error => {
|
|
38
|
+
if (this.chats.get(chatId) === creating)
|
|
39
|
+
this.chats.delete(chatId);
|
|
40
|
+
throw error;
|
|
41
|
+
});
|
|
42
|
+
this.chats.set(chatId, creating);
|
|
43
|
+
return creating;
|
|
44
|
+
}
|
|
45
|
+
async send(chatId, prompt, fallbackId, retry = true) {
|
|
46
|
+
const entry = this.getOrCreate(chatId, fallbackId);
|
|
47
|
+
const chat = await entry;
|
|
48
|
+
if (this.stopped || this.closing.has(chatId) || chat.closed)
|
|
49
|
+
throw new Error('Chat sessions are closed');
|
|
50
|
+
chat.pending++;
|
|
51
|
+
this.startTyping(chatId, chat);
|
|
52
|
+
try {
|
|
53
|
+
await chat.session.send(prompt);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
chat.pending = Math.max(0, chat.pending - 1);
|
|
57
|
+
if (!chat.pending)
|
|
58
|
+
this.stopTimers(chat);
|
|
59
|
+
// The process died before its exit event was observed: retire it and resume once.
|
|
60
|
+
// Matched by name so tests can mock the runner module without its error classes.
|
|
61
|
+
if (retry && error?.name === 'RunnerClosedError' && !this.stopped && !this.closing.has(chatId) && !chat.closed) {
|
|
62
|
+
if (this.chats.get(chatId) === entry)
|
|
63
|
+
this.retire(chatId, chat, true);
|
|
64
|
+
return this.send(chatId, prompt, fallbackId, false);
|
|
65
|
+
}
|
|
66
|
+
// Dispatch reports a rejected send. Events report asynchronous failures.
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
remember(chatId, chat) {
|
|
71
|
+
const id = chat.session.sessionId;
|
|
72
|
+
if (id && chat.persistedId !== id) {
|
|
73
|
+
this.hooks.ids[chatId] = id;
|
|
74
|
+
try {
|
|
75
|
+
this.hooks.persist();
|
|
76
|
+
chat.persistedId = id;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.error('[bridge] session ID persistence failed:', error);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
queue(chat, task) {
|
|
84
|
+
chat.delivery = chat.delivery.then(async () => { if (!chat.closed)
|
|
85
|
+
await task(); }).catch(error => {
|
|
86
|
+
console.error('[bridge] asynchronous delivery failed:', error);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
event(chatId, chat, event) {
|
|
90
|
+
if (chat.closed)
|
|
91
|
+
return;
|
|
92
|
+
this.remember(chatId, chat);
|
|
93
|
+
switch (event.type) {
|
|
94
|
+
case 'assistant': {
|
|
95
|
+
// Runner emits complete assistant messages, not token deltas or cumulative snapshots.
|
|
96
|
+
const output = chat.output;
|
|
97
|
+
output.text += (output.text ? '\n\n' : '') + event.text;
|
|
98
|
+
if (chat.pending)
|
|
99
|
+
this.startTyping(chatId, chat);
|
|
100
|
+
if (!chat.flush)
|
|
101
|
+
chat.flush = setTimeout(() => {
|
|
102
|
+
chat.flush = undefined;
|
|
103
|
+
this.queue(chat, () => this.render(chatId, chat, output));
|
|
104
|
+
}, 1000);
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
case 'result': {
|
|
108
|
+
clearTimeout(chat.flush);
|
|
109
|
+
chat.flush = undefined;
|
|
110
|
+
const output = chat.output;
|
|
111
|
+
chat.output = { text: '', messages: [] };
|
|
112
|
+
// Turn accounting assumes Claude Code emits exactly one result per submitted
|
|
113
|
+
// user turn (as runner's own pendingTurns does); results carry no input
|
|
114
|
+
// correlation, so overlapping turns are matched by count, in order.
|
|
115
|
+
chat.pending = Math.max(0, chat.pending - 1);
|
|
116
|
+
if (!chat.pending)
|
|
117
|
+
this.stopTimers(chat);
|
|
118
|
+
// Shown text keeps every assistant message already streamed; result.text is the
|
|
119
|
+
// final message, so it is only appended when no assistant event carried it.
|
|
120
|
+
const final = event.result.text;
|
|
121
|
+
if (final && !output.text.includes(final))
|
|
122
|
+
output.text += (output.text ? '\n\n' : '') + final;
|
|
123
|
+
if (!event.result.ok)
|
|
124
|
+
output.text += (output.text ? '\n\n' : '') + '⚠️ Claude could not complete the turn.';
|
|
125
|
+
if (!output.text)
|
|
126
|
+
output.text = '(no reply)';
|
|
127
|
+
// Journal the authoritative final reply, as the one-shot bridge did.
|
|
128
|
+
const reply = final || output.text;
|
|
129
|
+
this.queue(chat, async () => {
|
|
130
|
+
const gate = await this.hooks.onResult(chatId, event.result, reply);
|
|
131
|
+
if (!gate)
|
|
132
|
+
await this.render(chatId, chat, output);
|
|
133
|
+
});
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
case 'error':
|
|
137
|
+
// Only a failed session ends the turn; e.g. one malformed JSONL line does not.
|
|
138
|
+
if (chat.session.state !== 'failed') {
|
|
139
|
+
console.error(`[bridge] Claude chat ${chatId}: ${event.error.message}`);
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
this.fail(chatId, chat, `Claude session error: ${event.error.message}`);
|
|
143
|
+
this.retire(chatId, chat, true);
|
|
144
|
+
break;
|
|
145
|
+
case 'exit':
|
|
146
|
+
this.fail(chatId, chat, `Claude exited (${event.signal ?? event.code ?? 'unknown'}). Send another message to resume.`);
|
|
147
|
+
this.retire(chatId, chat);
|
|
148
|
+
break;
|
|
149
|
+
case 'stderr':
|
|
150
|
+
console.error(`[bridge] Claude chat ${chatId}: ${event.text}`);
|
|
151
|
+
break;
|
|
152
|
+
case 'raw': break; // ID is read from the normalized session property, never parsed here.
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
retire(chatId, chat, terminate = false) {
|
|
156
|
+
this.chats.delete(chatId);
|
|
157
|
+
chat.session.off('event', chat.listener);
|
|
158
|
+
chat.termination = terminate ? chat.session.close() : Promise.resolve();
|
|
159
|
+
const retired = this.retired.get(chatId) ?? new Set();
|
|
160
|
+
this.retired.set(chatId, retired);
|
|
161
|
+
retired.add(chat);
|
|
162
|
+
// Keep queued output reachable by logout/shutdown until both sides settle.
|
|
163
|
+
void Promise.allSettled([chat.delivery, chat.termination]).then(results => {
|
|
164
|
+
for (const result of results)
|
|
165
|
+
if (result.status === 'rejected')
|
|
166
|
+
console.error('[bridge] close failed:', result.reason);
|
|
167
|
+
retired.delete(chat);
|
|
168
|
+
if (!retired.size && this.retired.get(chatId) === retired)
|
|
169
|
+
this.retired.delete(chatId);
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
fail(chatId, chat, message) {
|
|
173
|
+
const active = chat.pending > 0;
|
|
174
|
+
chat.pending = 0;
|
|
175
|
+
this.stopTimers(chat);
|
|
176
|
+
chat.output = { text: '', messages: [] };
|
|
177
|
+
if (active)
|
|
178
|
+
this.queue(chat, async () => { await this.tg.sendMessage(chatId, `⚠️ ${message}`); });
|
|
179
|
+
}
|
|
180
|
+
startTyping(chatId, chat) {
|
|
181
|
+
if (chat.typing)
|
|
182
|
+
return;
|
|
183
|
+
const refresh = () => {
|
|
184
|
+
// Indicator only, not a turn timeout: stop refreshing a silent session so a
|
|
185
|
+
// missing result cannot keep typing forever. Assistant output restarts it.
|
|
186
|
+
if (Date.now() - chat.session.lastActivityAt > TYPING_IDLE_MS) {
|
|
187
|
+
clearInterval(chat.typing);
|
|
188
|
+
chat.typing = undefined;
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
void this.tg.sendChatAction(chatId, 'typing').catch(() => { });
|
|
192
|
+
};
|
|
193
|
+
refresh();
|
|
194
|
+
chat.typing = setInterval(refresh, 4000);
|
|
195
|
+
}
|
|
196
|
+
stopTimers(chat) {
|
|
197
|
+
clearInterval(chat.typing);
|
|
198
|
+
chat.typing = undefined;
|
|
199
|
+
clearTimeout(chat.flush);
|
|
200
|
+
chat.flush = undefined;
|
|
201
|
+
}
|
|
202
|
+
async render(chatId, chat, output) {
|
|
203
|
+
// Keep each Telegram message below 4096 UTF-16 units, including surrogate pairs.
|
|
204
|
+
const chunks = [];
|
|
205
|
+
for (let start = 0; start < output.text.length;) {
|
|
206
|
+
let end = Math.min(start + 4000, output.text.length);
|
|
207
|
+
if (end < output.text.length && /[\uD800-\uDBFF]/.test(output.text[end - 1]))
|
|
208
|
+
end--;
|
|
209
|
+
chunks.push(output.text.slice(start, end));
|
|
210
|
+
start = end;
|
|
211
|
+
}
|
|
212
|
+
for (let i = 0; i < Math.max(chunks.length, output.messages.length); i++) {
|
|
213
|
+
if (chat.closed)
|
|
214
|
+
return;
|
|
215
|
+
const text = chunks[i] ?? '…';
|
|
216
|
+
const previous = output.messages[i];
|
|
217
|
+
if (!previous) {
|
|
218
|
+
const sent = await this.tg.sendMessage(chatId, text);
|
|
219
|
+
output.messages.push({ id: sent.message_id, text });
|
|
220
|
+
}
|
|
221
|
+
else if (previous.text !== text) {
|
|
222
|
+
await this.tg.editMessageText(chatId, previous.id, text);
|
|
223
|
+
previous.text = text;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/** Wait for already queued Telegram delivery, never for a Claude result. */
|
|
228
|
+
async drain(chatId) { await (await this.chats.get(chatId))?.delivery; }
|
|
229
|
+
async close(chatId) {
|
|
230
|
+
this.closing.add(chatId);
|
|
231
|
+
const creating = this.chats.get(chatId);
|
|
232
|
+
const retiring = [...(this.retired.get(chatId) ?? [])];
|
|
233
|
+
for (const chat of retiring)
|
|
234
|
+
chat.closed = true;
|
|
235
|
+
try {
|
|
236
|
+
// A failed creation has nothing to close; logout must still succeed.
|
|
237
|
+
const live = await creating?.catch(() => undefined);
|
|
238
|
+
const chats = live ? [...retiring, live] : retiring;
|
|
239
|
+
await Promise.all(chats.map(async (chat) => {
|
|
240
|
+
chat.closed = true;
|
|
241
|
+
this.stopTimers(chat);
|
|
242
|
+
chat.session.off('event', chat.listener);
|
|
243
|
+
chat.termination ??= chat.session.close();
|
|
244
|
+
await chat.termination;
|
|
245
|
+
await chat.delivery;
|
|
246
|
+
}));
|
|
247
|
+
}
|
|
248
|
+
finally {
|
|
249
|
+
if (this.chats.get(chatId) === creating)
|
|
250
|
+
this.chats.delete(chatId);
|
|
251
|
+
this.closing.delete(chatId);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
closeAll() {
|
|
255
|
+
if (this.shutdown)
|
|
256
|
+
return this.shutdown;
|
|
257
|
+
this.stopped = true;
|
|
258
|
+
this.shutdown = (async () => {
|
|
259
|
+
const ids = new Set([...this.chats.keys(), ...this.retired.keys()]);
|
|
260
|
+
const results = await Promise.allSettled([...ids].map(id => this.close(id)));
|
|
261
|
+
for (const result of results)
|
|
262
|
+
if (result.status === 'rejected')
|
|
263
|
+
console.error('[bridge] close failed:', result.reason);
|
|
264
|
+
})();
|
|
265
|
+
return this.shutdown;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=chat-sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-sessions.js","sourceRoot":"","sources":["../src/chat-sessions.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// @justfortytwo/telegram — public API.
|
|
2
2
|
//
|
|
3
3
|
// The Telegram channel adapter for fortytwo: a long-polling bridge that
|
|
4
|
-
//
|
|
4
|
+
// maintains a persistent Claude Code session per active chat, surfaces gate approvals as
|
|
5
5
|
// inline keyboards, and gates inbound access behind a login/pairing binding flow.
|
|
6
6
|
//
|
|
7
|
-
//
|
|
8
|
-
// - @justfortytwo/memory (MEMORY_TOOL_CONTRACT_VERSION, tools mcp__fortytwo-memory__*)
|
|
9
|
-
// - @justfortytwo/gate
|
|
7
|
+
// fortytwo packages (referenced, NOT bundled):
|
|
8
|
+
// - @justfortytwo/memory optional peer (MEMORY_TOOL_CONTRACT_VERSION, tools mcp__fortytwo-memory__*)
|
|
9
|
+
// - @justfortytwo/gate dependency: provenance envelopes (POLICY_SCHEMA_VERSION)
|
|
10
10
|
// See src/bridge.ts for the `// TODO(wire):` seams where these are wired.
|
|
11
11
|
// --- Channel transport (owned) ---
|
|
12
12
|
export { Telegram, parseAllowed, approvalKeyboard, messageAttachmentSpecs, largestPhoto, formatTelegramHtml, } from './telegram.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,EAAE;AACF,wEAAwE;AACxE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,EAAE;AACF,wEAAwE;AACxE,yFAAyF;AACzF,kFAAkF;AAClF,EAAE;AACF,+CAA+C;AAC/C,wGAAwG;AACxG,qFAAqF;AACrF,0EAA0E;AAE1E,oCAAoC;AACpC,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,GAOnB,MAAM,eAAe,CAAC;AAEvB,mFAAmF;AACnF,OAAO,EACL,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,eAAe,GAGhB,MAAM,kBAAkB,CAAC;AAE1B,iCAAiC;AACjC,OAAO,EACL,kBAAkB,GAGnB,MAAM,sBAAsB,CAAC;AAE9B,2CAA2C;AAC3C,OAAO,EACL,eAAe,GAIhB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAInB,MAAM,eAAe,CAAC;AAEvB,6CAA6C;AAC7C,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,aAAa,GAGd,MAAM,YAAY,CAAC;AAEpB,8DAA8D;AAC9D,OAAO,EACL,gBAAgB,EAChB,YAAY,GAIb,MAAM,aAAa,CAAC;AAErB,+EAA+E;AAC/E,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EACxB,4BAA4B,GAI7B,MAAM,aAAa,CAAC"}
|
package/dist/telegram.d.ts
CHANGED
|
@@ -71,7 +71,7 @@ export declare class Telegram {
|
|
|
71
71
|
*/
|
|
72
72
|
allowed(chatId: number): boolean;
|
|
73
73
|
/** Long-poll for updates. Pass offset = lastUpdateId + 1 to acknowledge. */
|
|
74
|
-
getUpdates(offset: number, timeoutSec?: number): Promise<TgUpdate[]>;
|
|
74
|
+
getUpdates(offset: number, timeoutSec?: number, signal?: AbortSignal): Promise<TgUpdate[]>;
|
|
75
75
|
sendMessage(chatId: number, text: string, replyMarkup?: Record<string, unknown>): Promise<{
|
|
76
76
|
message_id: number;
|
|
77
77
|
}>;
|
package/dist/telegram.js
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
// just fetch against https://api.telegram.org/bot<token>/. The bridge is the
|
|
3
3
|
// ONLY long-poller; nothing else may call getUpdates on this bot.
|
|
4
4
|
const API = (token) => `https://api.telegram.org/bot${token}`;
|
|
5
|
-
async function tg(token, method, body) {
|
|
5
|
+
async function tg(token, method, body, signal) {
|
|
6
6
|
const res = await fetch(`${API(token)}/${method}`, {
|
|
7
7
|
method: 'POST',
|
|
8
|
+
signal,
|
|
8
9
|
headers: { 'content-type': 'application/json' },
|
|
9
10
|
body: JSON.stringify(body),
|
|
10
11
|
});
|
|
@@ -85,8 +86,8 @@ export class Telegram {
|
|
|
85
86
|
return this.allowedChatIds.has(chatId);
|
|
86
87
|
}
|
|
87
88
|
/** Long-poll for updates. Pass offset = lastUpdateId + 1 to acknowledge. */
|
|
88
|
-
getUpdates(offset, timeoutSec = 30) {
|
|
89
|
-
return tg(this.token, 'getUpdates', { offset, timeout: timeoutSec, allowed_updates: ['message', 'callback_query'] });
|
|
89
|
+
getUpdates(offset, timeoutSec = 30, signal) {
|
|
90
|
+
return tg(this.token, 'getUpdates', { offset, timeout: timeoutSec, allowed_updates: ['message', 'callback_query'] }, signal);
|
|
90
91
|
}
|
|
91
92
|
sendMessage(chatId, text, replyMarkup) {
|
|
92
93
|
const body = { chat_id: chatId, text: formatTelegramHtml(text), parse_mode: 'HTML' };
|
package/dist/telegram.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../src/telegram.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,6EAA6E;AAC7E,kEAAkE;AAElE,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,+BAA+B,KAAK,EAAE,CAAC;AAEtE,KAAK,UAAU,EAAE,CAAC,KAAa,EAAE,MAAc,EAAE,IAA6B;
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../src/telegram.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@justfortytwo/telegram",
|
|
3
|
-
"version": "0.1
|
|
4
|
-
"description": "Telegram channel adapter for fortytwo:
|
|
3
|
+
"version": "1.0.0-1",
|
|
4
|
+
"description": "Telegram channel adapter for fortytwo: persistent Claude Code sessions per chat, asynchronous replies, gate approval cards, and login/pairing authorization.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Enrico Deleo",
|
|
@@ -49,22 +49,20 @@
|
|
|
49
49
|
"login"
|
|
50
50
|
],
|
|
51
51
|
"peerDependencies": {
|
|
52
|
-
"@justfortytwo/memory": "^0.1.5"
|
|
53
|
-
"@justfortytwo/gate": "^0.1.0"
|
|
52
|
+
"@justfortytwo/memory": "^0.1.5"
|
|
54
53
|
},
|
|
55
54
|
"peerDependenciesMeta": {
|
|
56
55
|
"@justfortytwo/memory": {
|
|
57
56
|
"optional": true
|
|
58
|
-
},
|
|
59
|
-
"@justfortytwo/gate": {
|
|
60
|
-
"optional": true
|
|
61
57
|
}
|
|
62
58
|
},
|
|
63
59
|
"dependencies": {
|
|
64
|
-
"@justfortytwo/
|
|
60
|
+
"@justfortytwo/gate": "^0.1.0",
|
|
61
|
+
"@justfortytwo/runner": "1.0.0-0",
|
|
65
62
|
"better-sqlite3": "^12.0.0"
|
|
66
63
|
},
|
|
67
64
|
"devDependencies": {
|
|
65
|
+
"@justfortytwo/memory": "^0.1.5",
|
|
68
66
|
"@types/better-sqlite3": "^7.6.0",
|
|
69
67
|
"@types/node": "^20.0.0",
|
|
70
68
|
"typescript": "^5.4.0",
|