@justfortytwo/telegram 0.1.5 → 1.0.0-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md 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** that connects a Telegram bot to a headless
5
- [`claude`](https://docs.claude.com/en/docs/claude-code) turn loop.
6
-
7
- It does three jobs:
8
-
9
- 1. **Turn loop.** Long-poll Telegram, and for each authorized inbound message
10
- drive a headless `claude -p --output-format json` turn (resuming the per-chat
11
- session), then transport the assistant's reply back.
12
- 2. **Approval UX.** When the safety gate defers an external/irreversible tool
13
- call, the turn ends with `stop_reason: tool_deferred`. The bridge surfaces an
14
- **inline-keyboard approval card** (Approve / Deny, plus "Allow _N_h" for exact
15
- Bash commands). The tap records the decision and resumes the turn so the
16
- one-shot allow fires.
17
- 3. **Proactive wakes.** A scheduler invokes `claude -p` at fixed cron-like slots
18
- (daily briefing, open-thread sweeps, weekly learn-review).
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,7 +78,7 @@ 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
83
  optional `ALLOWED_CHAT_IDS` bootstrap set**. The bootstrap set lets the first
39
84
  owner chat reach the bridge before any binding exists; it is not required once
@@ -64,20 +109,23 @@ sqlite db exists:
64
109
  > table, swap the default store for a memory-backed `BindingStore`. The login
65
110
  > flow is unaffected.
66
111
 
67
- ## Peer dependencies
112
+ ## fortytwo package dependencies
68
113
 
69
- This package orchestrates two **peer** packages — they are referenced, not
70
- bundled:
114
+ `@justfortytwo/gate` is a regular dependency: `attachments.ts` imports its
115
+ `createSourceEnvelope` provenance helper at runtime (gate has no dependencies of
116
+ its own). Using gate as a *policy hook* remains optional and is configured
117
+ separately. `@justfortytwo/memory` is an **optional peer**: it is loaded
118
+ dynamically, and it is also a devDependency so types and tests resolve.
71
119
 
72
- | Peer | Used for | Contract |
120
+ | Package | Used for | Contract |
73
121
  | --- | --- | --- |
74
122
  | `@justfortytwo/memory` | Memory store, jobs, pending-decision records, embeddings | `MEMORY_TOOL_CONTRACT_VERSION` (tools `mcp__fortytwo-memory__*`) |
75
123
  | `@justfortytwo/gate` | Bash exact-command allowlist behind "Allow _N_h"; provenance envelopes | `POLICY_SCHEMA_VERSION` |
76
124
 
77
- Install them alongside this package:
125
+ Install memory alongside this package to enable persistence:
78
126
 
79
127
  ```sh
80
- npm install @justfortytwo/telegram @justfortytwo/memory @justfortytwo/gate
128
+ npm install @justfortytwo/telegram @justfortytwo/memory
81
129
  ```
82
130
 
83
131
  The **memory** data path is wired: the bridge opens + migrates the memory DB at
@@ -85,8 +133,8 @@ startup and **persists each channel event** to `@justfortytwo/memory`; recall
85
133
  happens inside the headless `claude` turn via the Memory MCP tools. If the memory
86
134
  peer is absent, the bridge degrades to **channel-only** (messages relay but are
87
135
  not persisted) rather than refusing to start. The **gate** "Allow _N_h" path
88
- still uses a local bash-allowlist fallback; wiring it to `@justfortytwo/gate`'s
89
- exact-command allowlist is the remaining seam.
136
+ still uses a local placeholder; wiring it to `@justfortytwo/gate`'s
137
+ 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
138
 
91
139
  ## Environment
92
140
 
@@ -95,7 +143,6 @@ exact-command allowlist is the remaining seam.
95
143
  | `TELEGRAM_BOT_TOKEN` | yes | Bot token. The bridge is the **only** long-poller on this bot. |
96
144
  | `ALLOWED_CHAT_IDS` | bootstrap | Comma-separated chat IDs allowed before any binding exists. Optional once bindings exist. |
97
145
  | `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
146
  | `FORTYTWO_BASH_ALLOW_TTL_HOURS` | no | Default TTL (hours) for "Allow _N_h" bash approvals (default 8). |
100
147
  | `TELEGRAM_BINDINGS_DB` | no | Path to the self-owned bindings db (default `state/telegram-bindings.db`). |
101
148
  | `DB_PATH` | no | Path to the memory DB the bridge opens/migrates at startup (default `db/fortytwo.db`, relative to `FORTYTWO_ROOT`). |
@@ -104,7 +151,7 @@ exact-command allowlist is the remaining seam.
104
151
  | `ASSISTANT_NAME` / `ASSISTANT_ACTOR` / `OWNER_ACTOR` | no | Display name + journal actor labels. |
105
152
  | `FORTYTWO_ROOT` | no | Working root for the headless `claude` process + state files. |
106
153
 
107
- > The historical `FORD_*` names (`FORD_ROOT`, `FORD_TURN_TIMEOUT`,
154
+ > The historical `FORD_*` names (`FORD_ROOT`,
108
155
  > `FORD_BASH_ALLOW_TTL_HOURS`) are still honored as deprecated aliases — set the
109
156
  > `FORTYTWO_*` equivalents in new deployments.
110
157
 
package/dist/bridge.d.ts CHANGED
@@ -1,8 +1,12 @@
1
1
  #!/usr/bin/env node
2
- import { type TgMessage, type AttachmentSpec } from './telegram.js';
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,19 @@ 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>;
53
82
  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
- // headless `claude -p` per chat, and transport the assistant's reply back.
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
- // --- claude driver ---
257
- // The assistant's canonical memory is the Memory MCP — skip Claude Code's
258
- // built-in file-memory so context isn't double-booked.
259
- //
260
- // Lazily initialised: the env mutation + runner construction happen on the
261
- // FIRST headless turn, NOT at module load — so importing bridge.ts (as the
262
- // tests do for interpretResult/mapChannelEventToMemoryInput) has no
263
- // side-effects (no process.env writes, no spawn). The env must be set before
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, placeholderId, result) {
311
- if (result?.session_id)
312
- state.sessions[chatId] = result.session_id;
313
- const interp = interpretResult(result);
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: interp.deferred.id, sessionId: result?.session_id,
317
- toolName: interp.deferred.name, input: interp.deferred.input,
287
+ toolUseId: deferred.id, sessionId: state.sessions[chatId],
288
+ toolName: deferred.name, input: deferred.input,
318
289
  };
319
- console.log(`[bridge] chat ${chatId}: action deferred (${interp.deferred.name}) — approval card sent`);
320
- const keyboardOpts = interp.deferred.name === 'Bash' ? { bashTtlHours: BASH_ALLOW_TTL_HOURS } : {};
321
- await tg.sendMessage(chatId, formatApprovalCard(interp.deferred), approvalKeyboard(interp.deferred.id, keyboardOpts));
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
- const t1 = Date.now();
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
- const result = await withTyping(tg, chatId, () => runClaude('Approved - proceed with the deferred action now.', pending.sessionId));
443
- await respond(tg, h, embedder, state, chatId, null, result);
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 (true) {
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,17 +479,6 @@ 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 ---
524
483
  async function main() {
525
484
  const token = process.env.TELEGRAM_BOT_TOKEN;
@@ -548,7 +507,20 @@ async function main() {
548
507
  const state = loadState();
549
508
  console.log(`[bridge] up. bootstrap=${bootstrap.size}, bindings=${store.list('telegram').length}, bindingsDb=${BINDINGS_DB_PATH}`);
550
509
  // Proactive wakes are now handled by @justfortytwo/scheduler (external daemon).
551
- await pollLoop(tg, auth, state, h, embedder);
510
+ const sessions = createBridgeSessions(tg, state, h, embedder);
511
+ const controller = new AbortController();
512
+ const shutdown = () => { controller.abort(); void sessions.closeAll(); };
513
+ process.once('SIGINT', shutdown);
514
+ process.once('SIGTERM', shutdown);
515
+ try {
516
+ await pollLoop(tg, auth, state, h, embedder, sessions, controller.signal);
517
+ }
518
+ finally {
519
+ controller.abort();
520
+ await sessions.closeAll();
521
+ process.off('SIGINT', shutdown);
522
+ process.off('SIGTERM', shutdown);
523
+ }
552
524
  }
553
525
  // Run only when invoked directly (the bin / node dist/bridge.js), not when
554
526
  // imported by tests. Realpath comparison so the npm bin symlink resolves here.
@@ -563,6 +535,11 @@ function invokedAsBin() {
563
535
  return false;
564
536
  }
565
537
  }
566
- if (invokedAsBin())
567
- main();
538
+ // main() resolves only after polling stopped and closeAll() awaited every Claude
539
+ // process and queued delivery. Exit naturally so piped stdout/stderr can flush; the
540
+ // unref'd timer forces exit only if an unrelated handle would keep the process up.
541
+ if (invokedAsBin()) {
542
+ main().then(() => { process.exitCode = 0; }, (e) => { console.error('[bridge] fatal:', e); process.exitCode = 1; })
543
+ .finally(() => { setTimeout(() => process.exit(), 2000).unref(); });
544
+ }
568
545
  //# sourceMappingURL=bridge.js.map
@@ -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
- // drives a headless `claude` turn loop per chat, surfaces gate approvals as
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
- // Peer packages (declared in peerDependencies, NOT bundled):
8
- // - @justfortytwo/memory (MEMORY_TOOL_CONTRACT_VERSION, tools mcp__fortytwo-memory__*)
9
- // - @justfortytwo/gate (POLICY_SCHEMA_VERSION)
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,4EAA4E;AAC5E,kFAAkF;AAClF,EAAE;AACF,6DAA6D;AAC7D,0FAA0F;AAC1F,kDAAkD;AAClD,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"}
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"}
@@ -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' };
@@ -1 +1 @@
1
- {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../src/telegram.ts"],"names":[],"mappings":"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"}
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.5",
4
- "description": "Telegram channel adapter for fortytwo: a long-polling bridge that drives a headless `claude` turn loop per chat, surfaces gate approvals as inline keyboards, and gates inbound access behind a login/pairing binding flow.",
3
+ "version": "1.0.0-0",
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/runner": "^0.1.0",
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",