@sojaner/telex 0.2.2 → 0.4.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 +22 -8
- package/dist/ask.js +6 -2
- package/dist/ask.js.map +1 -1
- package/dist/cli.js +9 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.js +21 -1
- package/dist/config.js.map +1 -1
- package/dist/inbox.js +144 -0
- package/dist/inbox.js.map +1 -0
- package/dist/index.js +42 -8
- package/dist/index.js.map +1 -1
- package/dist/registry.js +18 -0
- package/dist/registry.js.map +1 -1
- package/dist/setup.js +7 -2
- package/dist/setup.js.map +1 -1
- package/dist/telegram.js +24 -17
- package/dist/telegram.js.map +1 -1
- package/package.json +3 -2
- package/plugins/telex/.claude-plugin/plugin.json +14 -0
- package/plugins/telex/.codex-plugin/plugin.json +25 -0
- package/plugins/telex/.mcp.json +9 -0
- package/plugins/telex/README.md +11 -0
- package/plugins/telex/skills/telex/SKILL.md +17 -0
package/README.md
CHANGED
|
@@ -38,8 +38,9 @@ npm i -g https://github.com/Sojaner/telex/releases/latest/download/telex.tgz
|
|
|
38
38
|
npm i -g https://github.com/Sojaner/telex/releases/download/v0.1.14/telex.tgz
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
tarball to a GitHub release
|
|
41
|
+
After CI passes on `main`, the release workflow publishes the version declared in `package.json`
|
|
42
|
+
and attaches the same tarball to a GitHub release. If that version is already tagged, the workflow
|
|
43
|
+
increments the patch version instead, so both routes carry identical builds.
|
|
43
44
|
|
|
44
45
|
Or run it from a checkout:
|
|
45
46
|
|
|
@@ -52,6 +53,13 @@ pnpm run build && pnpm link --global # or link this checkout as the global tel
|
|
|
52
53
|
|
|
53
54
|
Upgrade with the same install command; uninstall with `npm rm -g @sojaner/telex`.
|
|
54
55
|
|
|
56
|
+
### Codex and Claude plugins
|
|
57
|
+
|
|
58
|
+
This repository also contains an installable plugin for Codex and Claude Code. Install telex first,
|
|
59
|
+
then install the `plugins/telex` directory from this checkout (or from an unpacked published package)
|
|
60
|
+
so the host registers the `telex` MCP server. The plugin contains no bot tokens. Its Codex manifest
|
|
61
|
+
is `plugins/telex/.codex-plugin/plugin.json`; its Claude manifest is `plugins/telex/.claude-plugin/plugin.json`.
|
|
62
|
+
|
|
55
63
|
---
|
|
56
64
|
|
|
57
65
|
## Set up a bot
|
|
@@ -108,6 +116,7 @@ telex list configured bots, tokens masked
|
|
|
108
116
|
telex set <name> [options] change token / chat / allowlist / default
|
|
109
117
|
telex remove <name> delete a bot
|
|
110
118
|
telex config [name] install the MCP registration into this project
|
|
119
|
+
telex project <name> pin this repository to a configured bot
|
|
111
120
|
telex serve run the MCP server over stdio (what agents launch)
|
|
112
121
|
```
|
|
113
122
|
|
|
@@ -271,7 +280,8 @@ Which bot a message goes to, in order:
|
|
|
271
280
|
|
|
272
281
|
1. The `bot` argument on the tool call, if the agent passes one.
|
|
273
282
|
2. `TELEX_BOT` from the MCP registration — the project's bot.
|
|
274
|
-
3. `
|
|
283
|
+
3. `.telex.json` in the repository — written by `telex project <name>` or `telex config <name>`.
|
|
284
|
+
4. `defaultBot` from the config file.
|
|
275
285
|
|
|
276
286
|
So a project's agent messages its own bot without being told to, and can still reach another bot
|
|
277
287
|
deliberately (`bot: "oncall"` for something urgent, say).
|
|
@@ -334,9 +344,13 @@ too, delivered exactly as a heartbeat would:
|
|
|
334
344
|
|
|
335
345
|
### Messages you send first
|
|
336
346
|
|
|
337
|
-
You can talk to the bot without being asked.
|
|
338
|
-
|
|
339
|
-
|
|
347
|
+
You can talk to the bot without being asked. While an agent session is open, telex long-polls
|
|
348
|
+
Telegram continuously and queues inbound messages immediately; the host still decides when the
|
|
349
|
+
model reads them. An MCP server cannot wake a fully terminated Codex or Claude Code process: their
|
|
350
|
+
documented MCP transports (stdio, HTTP, or SSE) connect tools but do not start an agent turn. An
|
|
351
|
+
idle session receives the message on its next tool call/heartbeat; a terminated host requires its
|
|
352
|
+
own resume or automation facility. Telex holds what you said until the agent checks in, and edits
|
|
353
|
+
a single receipt under your message as it moves:
|
|
340
354
|
|
|
341
355
|
| What you see | What it means |
|
|
342
356
|
|---|---|
|
|
@@ -517,8 +531,8 @@ pnpm run build # tsc → dist/, normally done by CI
|
|
|
517
531
|
node src/cli.ts # run from source; Node strips the types
|
|
518
532
|
```
|
|
519
533
|
|
|
520
|
-
`dist/` is not committed. CI runs the tests on Node 22 and 24 with a frozen lockfile, then
|
|
521
|
-
the version
|
|
534
|
+
`dist/` is not committed. CI runs the tests on Node 22 and 24 with a frozen lockfile, then tags and
|
|
535
|
+
publishes the declared version (or increments an already-tagged version) with the built tarball attached.
|
|
522
536
|
|
|
523
537
|
## License
|
|
524
538
|
|
package/dist/ask.js
CHANGED
|
@@ -73,8 +73,12 @@ export async function receipt(session, chatId, message) {
|
|
|
73
73
|
parse_mode: "HTML",
|
|
74
74
|
reply_parameters: { message_id: message.message_id, allow_sending_without_reply: true },
|
|
75
75
|
}).catch(() => undefined);
|
|
76
|
-
if (sent)
|
|
77
|
-
|
|
76
|
+
if (!sent)
|
|
77
|
+
return;
|
|
78
|
+
message.receipt_id = sent.message_id;
|
|
79
|
+
// A shared queue holds a copy, so the id has to be written back or no other process could
|
|
80
|
+
// settle this receipt.
|
|
81
|
+
session.recordReceipt(chatId, message.message_id, sent.message_id);
|
|
78
82
|
}
|
|
79
83
|
function updateReceipt(session, chatId, message, text) {
|
|
80
84
|
if (message.receipt_id === undefined)
|
package/dist/ask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { parseArgs } from "node:util";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
|
-
import { readConfig, writeConfig, configPath, maskToken } from "./config.js";
|
|
4
|
+
import { readConfig, writeConfig, configPath, projectConfigPath, writeProjectConfig, maskToken } from "./config.js";
|
|
5
5
|
import { addBotInteractive, installConfig } from "./setup.js";
|
|
6
6
|
import { agents, snippet } from "./agents.js";
|
|
7
7
|
const USAGE = `telex — send messages from local AI agents to Telegram
|
|
@@ -12,6 +12,7 @@ const USAGE = `telex — send messages from local AI agents to Telegram
|
|
|
12
12
|
telex set <name> [options] change a bot
|
|
13
13
|
telex remove <name> delete a bot
|
|
14
14
|
telex config [name] install the MCP registration into this project
|
|
15
|
+
telex project <name> pin this repository to a configured bot
|
|
15
16
|
|
|
16
17
|
Options for config:
|
|
17
18
|
--agent <id> skip the prompts: claude, codex, cursor, vscode, zed, ...
|
|
@@ -139,6 +140,13 @@ async function run(command, name) {
|
|
|
139
140
|
await installConfig(name, { agent: flags.agent, scope: flags.scope, yes: flags.yes });
|
|
140
141
|
return;
|
|
141
142
|
}
|
|
143
|
+
case "project": {
|
|
144
|
+
const config = readConfig();
|
|
145
|
+
required(config.bots, name);
|
|
146
|
+
writeProjectConfig(name);
|
|
147
|
+
console.log(`✓ Pinned this project to "${name}" (${projectConfigPath()})`);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
142
150
|
default:
|
|
143
151
|
throw new Error(`unknown command "${command}"\n\n${USAGE}`);
|
|
144
152
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAwB,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAY,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAwB,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,SAAS,EAAY,MAAM,aAAa,CAAC;AAC9H,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAc,MAAM,aAAa,CAAC;AAE1D,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;kBAsBI,UAAU,EAAE,gCAAgC,CAAC;AAE/D,uEAAuE;AACvE,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvH,uFAAuF;AACvF,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,iBAAiB,CAAC;IACvD,gBAAgB,EAAE,IAAI;IACtB,OAAO,EAAE;QACP,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC7B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACzB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC1B,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;QACpC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;KACtC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC;AAEnC,SAAS,iBAAiB,CAA4B,OAAU;IAC9D,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAI,GAAa,CAAC,OAAO,CAAC;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC9E,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,oDAAoD,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;YACjH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,OAAe,EAAE,IAAa;IAC/C,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YAC3B,OAAO;QAET,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,qCAAqC,IAAI,GAAG,CAAC,CAAC;YACzG,2GAA2G;YAC3G,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,KAAK,CAAC,OAAO;oBAAE,UAAU,CAAC,KAAK,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACvE,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;YAC9F,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClH,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;YACnF,WAAW,CAAC,MAAM,CAAC,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClF,OAAO;QACT,CAAC;QAED,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,KAAK;gBAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACzC,IAAI,KAAK,CAAC,SAAS,CAAC;gBAAE,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YAC7D,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;gBAAE,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvE,IAAI,KAAK,CAAC,OAAO;gBAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;YAC5C,WAAW,CAAC,MAAM,CAAC,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;YAC1B,kEAAkE;YAClE,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI;gBAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAChF,WAAW,CAAC,MAAM,CAAC,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YAC9E,IAAI,KAAK,CAAC,IAAI;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5E,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBAClF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;YACvJ,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,0BAA0B,UAAU,EAAE,EAAE,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,IAAI,IAAI;gBAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACnG,IAAI,KAAK,CAAC,IAAI;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9F,IAAI,KAAK,CAAC,KAAK;gBAAE,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAClD,MAAM,aAAa,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YACtF,OAAO;QACT,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5B,kBAAkB,CAAC,IAAK,CAAC,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,MAAM,iBAAiB,EAAE,GAAG,CAAC,CAAC;YAC3E,OAAO;QACT,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,QAAQ,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,2FAA2F;AAC3F,SAAS,YAAY,CAAC,KAAY,EAAE,IAAa;IAC/C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAC3E,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,GAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEvH,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxH,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAClF,IAAI,IAAI;QAAE,OAAO,CAAC,GAAG,CAAC,0CAA0C,IAAI,0CAA0C,CAAC,CAAC;;QAC3G,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,kEAAkE,WAAW,IAAI,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,QAAQ,CAAC,IAAyB,EAAE,IAAa;IACxD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,kBAAkB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;IAC1G,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAExF,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAChD,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAChC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACzG,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,MAAqC,EAAE,EAAE,CAAC,CAAC;IACzD,GAAG,MAAM;IACT,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;CAChH,CAAC,CAAC;AAEH,IAAI,CAAC;IACH,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,KAAK,CAAC,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -2,6 +2,26 @@ import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
|
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
export const configPath = () => process.env.TELEX_CONFIG ?? join(process.env.XDG_CONFIG_HOME ?? join(homedir(), ".config"), "telex", "config.json");
|
|
5
|
+
/** Repository-local routing, deliberately containing a bot name only (never a token). */
|
|
6
|
+
export const projectConfigPath = () => process.env.TELEX_PROJECT_CONFIG ?? join(process.cwd(), ".telex.json");
|
|
7
|
+
export function readProjectConfig() {
|
|
8
|
+
const primary = projectConfigPath();
|
|
9
|
+
const path = existsSync(primary) ? primary : join(process.cwd(), ".telex", "config.json");
|
|
10
|
+
if (!existsSync(path))
|
|
11
|
+
return {};
|
|
12
|
+
try {
|
|
13
|
+
const raw = JSON.parse(readFileSync(path, "utf8"));
|
|
14
|
+
return typeof raw?.bot === "string" ? { bot: raw.bot } : {};
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
throw new Error(`telex: ${path} is not valid JSON: ${err.message}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export function writeProjectConfig(bot) {
|
|
21
|
+
const path = projectConfigPath();
|
|
22
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
23
|
+
writeFileSync(path, `${JSON.stringify({ bot }, null, 2)}\n`);
|
|
24
|
+
}
|
|
5
25
|
/** Config as it is on disk, or an empty one. For the CLI, which has to cope with "nothing yet". */
|
|
6
26
|
export function readConfig() {
|
|
7
27
|
const path = configPath();
|
|
@@ -40,7 +60,7 @@ export function loadConfig() {
|
|
|
40
60
|
* project via TELEX_BOT, then the global default.
|
|
41
61
|
*/
|
|
42
62
|
export function pickBot(config, name) {
|
|
43
|
-
const key = name || process.env.TELEX_BOT || config.defaultBot;
|
|
63
|
+
const key = name || process.env.TELEX_BOT || readProjectConfig().bot || config.defaultBot;
|
|
44
64
|
const bot = config.bots[key];
|
|
45
65
|
if (!bot)
|
|
46
66
|
throw new Error(`telex: unknown bot "${key}". Configured: ${Object.keys(config.bots).join(", ")}`);
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAM1C,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE,CAC7B,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AAEtH,mGAAmG;AACnG,MAAM,UAAU,UAAU;IACxB,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAW,CAAC;QAC7D,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;IAC9D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,uBAAwB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,EAAE,oBAAoB,CAAC,CAAC;IAC1G,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,+BAA+B,CAAC,CAAC;IACnH,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,UAAU,kBAAkB,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,IAAa;IACnD,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,UAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/inbox.js
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The queue of unprompted user messages, shared by every telex process on one machine.
|
|
3
|
+
*
|
|
4
|
+
* It used to be a field on each process's session object. That is wrong the moment a project runs
|
|
5
|
+
* more than one agent: the process that polls queues the message, and a different process's
|
|
6
|
+
* heartbeat truthfully finds nothing, so the user watches "held" sit there until the holder
|
|
7
|
+
* happens to send something of its own. A message belongs to the bot and chat it arrived on, not
|
|
8
|
+
* to whichever process happened to be listening.
|
|
9
|
+
*/
|
|
10
|
+
import { closeSync, mkdirSync, openSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
11
|
+
import { dirname, join } from "node:path";
|
|
12
|
+
import { statePath } from "./registry.js";
|
|
13
|
+
/** An agent that never checks in must not grow the queue without bound; oldest go first. */
|
|
14
|
+
const LIMIT = 50;
|
|
15
|
+
export const inboxPath = () => process.env.TELEX_INBOX ?? join(dirname(statePath()), "inbox.json");
|
|
16
|
+
const read = () => {
|
|
17
|
+
try {
|
|
18
|
+
const parsed = JSON.parse(readFileSync(inboxPath(), "utf8"));
|
|
19
|
+
return Array.isArray(parsed?.held) ? parsed.held : [];
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return []; // missing or corrupt reads as empty, the same as nothing queued
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const write = (held) => {
|
|
26
|
+
const path = inboxPath();
|
|
27
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
28
|
+
const tmp = `${path}.${process.pid}.tmp`;
|
|
29
|
+
writeFileSync(tmp, `${JSON.stringify({ held }, null, 2)}\n`, { mode: 0o600 });
|
|
30
|
+
renameSync(tmp, path);
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Exclusive-create is the portable atomic primitive, and a queue needs one: a read-modify-write
|
|
34
|
+
* racing another can drop a message, and a dropped message is the user's, not ours.
|
|
35
|
+
*
|
|
36
|
+
* ponytail: a bounded synchronous spin. Only the bot's owner pushes and heartbeats are seconds
|
|
37
|
+
* apart, so contention is rare; if that changes, move the store behind an async interface.
|
|
38
|
+
*/
|
|
39
|
+
function withLock(fn) {
|
|
40
|
+
const lock = `${inboxPath()}.lock`;
|
|
41
|
+
mkdirSync(dirname(lock), { recursive: true });
|
|
42
|
+
const deadline = Date.now() + 2000;
|
|
43
|
+
let held = false;
|
|
44
|
+
while (Date.now() < deadline) {
|
|
45
|
+
try {
|
|
46
|
+
closeSync(openSync(lock, "wx"));
|
|
47
|
+
held = true;
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// A lock left behind by a crash must not wedge every agent on the machine.
|
|
52
|
+
try {
|
|
53
|
+
if (Date.now() - statSync(lock).mtimeMs > 10_000)
|
|
54
|
+
unlinkSync(lock);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// it went away on its own
|
|
58
|
+
}
|
|
59
|
+
const until = Date.now() + 20;
|
|
60
|
+
while (Date.now() < until)
|
|
61
|
+
;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
return fn();
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
if (held) {
|
|
69
|
+
try {
|
|
70
|
+
unlinkSync(lock);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// already gone
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** The queue every telex process on this machine shares. */
|
|
79
|
+
export function fileInbox() {
|
|
80
|
+
const strip = ({ key: _key, expires_at: _expires, ...message }) => message;
|
|
81
|
+
return {
|
|
82
|
+
push(key, message, expiresAt) {
|
|
83
|
+
withLock(() => {
|
|
84
|
+
const held = read().filter((m) => !(m.key === key && m.message_id === message.message_id));
|
|
85
|
+
const mine = held.filter((m) => m.key === key);
|
|
86
|
+
const others = held.filter((m) => m.key !== key);
|
|
87
|
+
write([...others, ...[...mine, { ...message, key, expires_at: expiresAt }].slice(-LIMIT)]);
|
|
88
|
+
});
|
|
89
|
+
},
|
|
90
|
+
take(key) {
|
|
91
|
+
return withLock(() => {
|
|
92
|
+
const held = read();
|
|
93
|
+
write(held.filter((m) => m.key !== key));
|
|
94
|
+
return held.filter((m) => m.key === key).map(strip);
|
|
95
|
+
});
|
|
96
|
+
},
|
|
97
|
+
expire(key, now) {
|
|
98
|
+
return withLock(() => {
|
|
99
|
+
const held = read();
|
|
100
|
+
const dead = held.filter((m) => m.key === key && m.expires_at !== undefined && now > m.expires_at);
|
|
101
|
+
if (dead.length)
|
|
102
|
+
write(held.filter((m) => !dead.includes(m)));
|
|
103
|
+
return dead.map(strip);
|
|
104
|
+
});
|
|
105
|
+
},
|
|
106
|
+
receipt(key, messageId, receiptId) {
|
|
107
|
+
withLock(() => {
|
|
108
|
+
const held = read();
|
|
109
|
+
const found = held.find((m) => m.key === key && m.message_id === messageId);
|
|
110
|
+
if (!found)
|
|
111
|
+
return;
|
|
112
|
+
found.receipt_id = receiptId;
|
|
113
|
+
write(held);
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/** The default: private to one process, which is all a single-agent project ever needed. */
|
|
119
|
+
export function memoryInbox() {
|
|
120
|
+
// Holds the very object it was handed: callers stamp a receipt id onto a queued message after
|
|
121
|
+
// Telegram answers, and a copy would silently lose it.
|
|
122
|
+
const held = new Map();
|
|
123
|
+
return {
|
|
124
|
+
push(key, message, expiresAt) {
|
|
125
|
+
held.set(key, [...(held.get(key) ?? []), { message, expiresAt }].slice(-LIMIT));
|
|
126
|
+
},
|
|
127
|
+
take(key) {
|
|
128
|
+
const queued = held.get(key) ?? [];
|
|
129
|
+
held.delete(key);
|
|
130
|
+
return queued.map((entry) => entry.message);
|
|
131
|
+
},
|
|
132
|
+
expire(key, now) {
|
|
133
|
+
const queued = held.get(key) ?? [];
|
|
134
|
+
const dead = queued.filter((entry) => entry.expiresAt !== undefined && now > entry.expiresAt);
|
|
135
|
+
if (dead.length)
|
|
136
|
+
held.set(key, queued.filter((entry) => !dead.includes(entry)));
|
|
137
|
+
return dead.map((entry) => entry.message);
|
|
138
|
+
},
|
|
139
|
+
receipt() {
|
|
140
|
+
// Nothing to do: the caller already holds the object it queued.
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=inbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../src/inbox.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,8 @@ import { z } from "zod";
|
|
|
5
5
|
import { loadConfig, pickBot } from "./config.js";
|
|
6
6
|
import { sessionFor } from "./telegram.js";
|
|
7
7
|
import { ask, receipt, markExpired, refuse, heartbeat, deliver } from "./ask.js";
|
|
8
|
-
import { touch, release, repoOf } from "./registry.js";
|
|
8
|
+
import { touch, release, repoOf, ownerOf } from "./registry.js";
|
|
9
|
+
import { fileInbox } from "./inbox.js";
|
|
9
10
|
import { randomUUID } from "node:crypto";
|
|
10
11
|
const config = loadConfig();
|
|
11
12
|
const botNames = Object.keys(config.bots);
|
|
@@ -13,9 +14,20 @@ const botNames = Object.keys(config.bots);
|
|
|
13
14
|
const defaultBot = process.env.TELEX_BOT || config.defaultBot;
|
|
14
15
|
/** Set once the agent has identified itself; until then telex has no interval and no owner. */
|
|
15
16
|
let checkedIn = false;
|
|
17
|
+
/**
|
|
18
|
+
* Every telex on this machine queues into the same place. One process polls and a different one
|
|
19
|
+
* may be the one that heartbeats, so a queue private to a process leaves the user's message held
|
|
20
|
+
* by an agent that is not the one checking in.
|
|
21
|
+
*/
|
|
22
|
+
const shared = fileInbox();
|
|
23
|
+
function bind(bot) {
|
|
24
|
+
const session = sessionFor(bot.token);
|
|
25
|
+
session.setInboxStore(shared);
|
|
26
|
+
return session;
|
|
27
|
+
}
|
|
16
28
|
/** Listen to a bot's chat for messages nobody asked for, and acknowledge each one to the user. */
|
|
17
29
|
function watch(bot) {
|
|
18
|
-
const session =
|
|
30
|
+
const session = bind(bot);
|
|
19
31
|
session.watch(bot.chatId, {
|
|
20
32
|
allowFrom: bot.allowFrom,
|
|
21
33
|
accept: () => checkedIn,
|
|
@@ -25,16 +37,33 @@ function watch(bot) {
|
|
|
25
37
|
});
|
|
26
38
|
return session;
|
|
27
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Poll only while this process holds the bot.
|
|
42
|
+
*
|
|
43
|
+
* Telegram serves an update to whoever asks and confirms it only when that asker returns with a
|
|
44
|
+
* higher offset, so two pollers on one token duplicate receipts and swallow replies. Symphony runs
|
|
45
|
+
* a lead and its workers inside one repository, all on one bot, each with its own telex — which is
|
|
46
|
+
* how a single message came back acknowledged twice.
|
|
47
|
+
*/
|
|
48
|
+
function claim(botName, bot, sessionId) {
|
|
49
|
+
// Nobody registered yet means nobody to defer to: the first process up starts listening.
|
|
50
|
+
// Two starting in the same instant both listen until their first check-in settles it, which
|
|
51
|
+
// is one poll cycle and self-correcting; registering needs an identity a caller supplies.
|
|
52
|
+
const owns = (ownerOf(botName) ?? sessionId) === sessionId;
|
|
53
|
+
if (owns)
|
|
54
|
+
return { session: watch(bot), owns };
|
|
55
|
+
const session = bind(bot);
|
|
56
|
+
session.stop();
|
|
57
|
+
return { session, owns };
|
|
58
|
+
}
|
|
28
59
|
const warned = new Set();
|
|
29
60
|
/**
|
|
30
61
|
* Every call says who is calling. That fixes the expiry clock from the very first interaction and,
|
|
31
62
|
* through the shared registry, lets separate telex processes notice they share a bot.
|
|
32
63
|
*/
|
|
33
64
|
function checkIn(botName, bot, caller) {
|
|
34
|
-
const session = watch(bot);
|
|
35
65
|
const sessionId = caller.session_id ?? processSession;
|
|
36
|
-
|
|
37
|
-
checkedIn = true;
|
|
66
|
+
// Register before claiming: ownership is decided from the registry, so this call has to be in it.
|
|
38
67
|
const others = touch({
|
|
39
68
|
session_id: sessionId,
|
|
40
69
|
bot: botName,
|
|
@@ -44,13 +73,16 @@ function checkIn(botName, bot, caller) {
|
|
|
44
73
|
pid: process.pid,
|
|
45
74
|
interval_seconds: caller.interval_seconds,
|
|
46
75
|
});
|
|
76
|
+
const { session, owns } = claim(botName, bot, sessionId);
|
|
77
|
+
session.setInboxTtl(bot.chatId, caller.interval_seconds * MISSED_BEATS * 1000);
|
|
78
|
+
checkedIn = true;
|
|
47
79
|
for (const other of others) {
|
|
48
80
|
if (warned.has(other.session_id))
|
|
49
81
|
continue;
|
|
50
82
|
warned.add(other.session_id);
|
|
51
83
|
void conflictWarning(session, bot, caller, other);
|
|
52
84
|
}
|
|
53
|
-
return { session, sessionId };
|
|
85
|
+
return { session, sessionId, owns };
|
|
54
86
|
}
|
|
55
87
|
/** Telegram hands each update to one poller only, so a shared bot silently loses half the traffic. */
|
|
56
88
|
function conflictWarning(session, bot, mine, other) {
|
|
@@ -169,8 +201,10 @@ server.registerTool("heartbeat", {
|
|
|
169
201
|
const { session, sessionId } = checkIn(targetName, target, caller);
|
|
170
202
|
return json({ messages: heartbeat(session, target.chatId), interval_seconds: caller.interval_seconds, session_id: sessionId });
|
|
171
203
|
});
|
|
172
|
-
// Start listening before any agent checks in, so early messages get refused rather than ignored
|
|
173
|
-
|
|
204
|
+
// Start listening before any agent checks in, so early messages get refused rather than ignored —
|
|
205
|
+
// unless another process in this project already holds the bot, in which case it is doing that.
|
|
206
|
+
const startup = pickBot(config);
|
|
207
|
+
claim(startup.name, startup.bot, processSession);
|
|
174
208
|
const transport = new StdioServerTransport();
|
|
175
209
|
// Polling now outlives any single request, so the process has to be told when the agent is gone.
|
|
176
210
|
transport.onclose = () => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,OAAO,EAAY,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAmB,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACjF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAgB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/registry.js
CHANGED
|
@@ -81,6 +81,24 @@ export function touch(entry, now = Date.now()) {
|
|
|
81
81
|
// Worktrees of one repository are one project sharing one bot deliberately; that is not a clash.
|
|
82
82
|
return others.filter((s) => s.bot === entry.bot && s.repo !== repo);
|
|
83
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* The one session allowed to poll a bot.
|
|
86
|
+
*
|
|
87
|
+
* Telegram serves an update to whoever asks, and confirms it only when that asker comes back with
|
|
88
|
+
* a higher offset, so two pollers on one token either lose messages or acknowledge the same one
|
|
89
|
+
* twice. Symphony runs a lead and its workers inside one repository, each with its own telex
|
|
90
|
+
* process, which is exactly that case: sharing a repo can mean sharing a bot, but it can never
|
|
91
|
+
* mean sharing the poll.
|
|
92
|
+
*
|
|
93
|
+
* The oldest live claim wins and hands over by itself once that process stops, so the lead keeps
|
|
94
|
+
* the channel while it lives and a worker never takes it.
|
|
95
|
+
*/
|
|
96
|
+
export function ownerOf(bot, now = Date.now()) {
|
|
97
|
+
const live = read()
|
|
98
|
+
.filter((s) => s.bot === bot && isLive(s, now))
|
|
99
|
+
.sort((a, b) => a.started_at.localeCompare(b.started_at) || a.session_id.localeCompare(b.session_id));
|
|
100
|
+
return live[0]?.session_id;
|
|
101
|
+
}
|
|
84
102
|
/** Drop this session's record. Best effort — a crash is covered by the liveness check instead. */
|
|
85
103
|
export function release(sessionId) {
|
|
86
104
|
try {
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Interactive bot onboarding: validate a token, learn the chat id by watching for a message. */
|
|
2
2
|
import { createInterface } from "node:readline/promises";
|
|
3
3
|
import { apiFor } from "./telegram.js";
|
|
4
|
-
import { readConfig, writeConfig, configPath } from "./config.js";
|
|
4
|
+
import { readConfig, writeConfig, configPath, writeProjectConfig } from "./config.js";
|
|
5
5
|
import { agents, runCli, writeFileConfig, ensureGitignored } from "./agents.js";
|
|
6
6
|
const say = (s = "") => console.log(s);
|
|
7
7
|
export async function addBotInteractive(preferredName) {
|
|
@@ -90,8 +90,11 @@ export async function installConfig(bot, flags) {
|
|
|
90
90
|
if (agent.cli) {
|
|
91
91
|
const argv = agent.cli(bot);
|
|
92
92
|
const result = runCli(argv, dir);
|
|
93
|
-
if (result)
|
|
93
|
+
if (result) {
|
|
94
|
+
if (result.ok && bot)
|
|
95
|
+
writeProjectConfig(bot);
|
|
94
96
|
return report(result, agent);
|
|
97
|
+
}
|
|
95
98
|
if (!agent.file)
|
|
96
99
|
throw new Error(`${agent.label}'s CLI ("${argv[0]}") is not on PATH, and it has no config file telex can write.`);
|
|
97
100
|
say(`! ${argv[0]} is not on PATH — writing ${agent.file} instead.\n`);
|
|
@@ -107,6 +110,8 @@ export async function installConfig(bot, flags) {
|
|
|
107
110
|
const result = writeFileConfig(agent, entry, dir, local);
|
|
108
111
|
const ignored = local && agent.localFile ? ensureGitignored(dir, agent.localFile) : null;
|
|
109
112
|
report(result, agent);
|
|
113
|
+
if (result.ok && bot)
|
|
114
|
+
writeProjectConfig(bot);
|
|
110
115
|
if (ignored)
|
|
111
116
|
say(`✓ Added ${agent.localFile} to ${ignored}`);
|
|
112
117
|
}
|
package/dist/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAe,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAY,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/telegram.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** Thin Telegram Bot API client plus an on-demand long-poll loop per bot token. */
|
|
2
|
+
import { memoryInbox } from "./inbox.js";
|
|
2
3
|
export class TelegramError extends Error {
|
|
3
4
|
method;
|
|
4
5
|
description;
|
|
@@ -86,8 +87,6 @@ export const stripHtml = (text) => text
|
|
|
86
87
|
.replace(/&/g, "&");
|
|
87
88
|
/** Telegram counts message length in UTF-16 code units, which is what JS strings already are. */
|
|
88
89
|
export const MAX_MESSAGE_LEN = 4000;
|
|
89
|
-
/** An agent that never checks in must not grow the inbox without bound; oldest go first. */
|
|
90
|
-
const INBOX_LIMIT = 50;
|
|
91
90
|
/**
|
|
92
91
|
* One session per bot token. Polling runs while a question is open and, once a chat is watched,
|
|
93
92
|
* for the rest of the process's life — a project that is not running simply never answers.
|
|
@@ -101,7 +100,8 @@ export class BotSession {
|
|
|
101
100
|
callbackWaiters = new Map();
|
|
102
101
|
textWaiters = new Map();
|
|
103
102
|
watched = new Map();
|
|
104
|
-
|
|
103
|
+
/** Where queued messages live. Shared across processes in the server; private in tests. */
|
|
104
|
+
store = memoryInbox();
|
|
105
105
|
ttl = new Map();
|
|
106
106
|
listening = false;
|
|
107
107
|
constructor(api, pollTimeout = 30) {
|
|
@@ -140,12 +140,21 @@ export class BotSession {
|
|
|
140
140
|
setInboxTtl(chatId, ms) {
|
|
141
141
|
this.ttl.set(String(chatId), ms);
|
|
142
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Queue somewhere every telex process can reach. One process polls and another one heartbeats,
|
|
145
|
+
* so a queue private to one of them leaves the user's message held by an agent that is not the
|
|
146
|
+
* one checking in.
|
|
147
|
+
*/
|
|
148
|
+
setInboxStore(store) {
|
|
149
|
+
this.store = store;
|
|
150
|
+
}
|
|
143
151
|
/** Hand over everything held for this chat. */
|
|
144
152
|
take(chatId) {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
153
|
+
return this.store.take(String(chatId));
|
|
154
|
+
}
|
|
155
|
+
/** Remember telex's reply to a message, so whichever process settles it can find the receipt. */
|
|
156
|
+
recordReceipt(chatId, messageId, receiptId) {
|
|
157
|
+
this.store.receipt(String(chatId), messageId, receiptId);
|
|
149
158
|
}
|
|
150
159
|
get idle() {
|
|
151
160
|
return this.callbackWaiters.size === 0 && this.textWaiters.size === 0;
|
|
@@ -225,7 +234,10 @@ export class BotSession {
|
|
|
225
234
|
const message = { message_id: msg.message_id, from_id: msg.from?.id, text: msg.text, received_at: now };
|
|
226
235
|
if (watch.accept && !watch.accept())
|
|
227
236
|
return watch.onRefused?.(message);
|
|
228
|
-
|
|
237
|
+
// The deadline is fixed when the message is queued, so any process can expire it without
|
|
238
|
+
// knowing whose interval set it. Before an agent declares one there is no deadline at all.
|
|
239
|
+
const ttl = this.ttl.get(key);
|
|
240
|
+
this.store.push(key, message, ttl === undefined ? undefined : now + ttl);
|
|
229
241
|
watch.onQueued?.(message);
|
|
230
242
|
}
|
|
231
243
|
/**
|
|
@@ -233,15 +245,10 @@ export class BotSession {
|
|
|
233
245
|
* has stopped checking in entirely — which is exactly when the user most needs telling.
|
|
234
246
|
*/
|
|
235
247
|
sweepInbox(now = Date.now()) {
|
|
236
|
-
for (const [key,
|
|
237
|
-
const
|
|
238
|
-
if (
|
|
239
|
-
|
|
240
|
-
const expired = held.filter((m) => now - m.received_at > ttl);
|
|
241
|
-
if (!expired.length)
|
|
242
|
-
continue;
|
|
243
|
-
this.inbox.set(key, held.filter((m) => now - m.received_at <= ttl));
|
|
244
|
-
this.watched.get(key)?.onExpired?.(expired);
|
|
248
|
+
for (const [key, watch] of this.watched) {
|
|
249
|
+
const expired = this.store.expire(key, now);
|
|
250
|
+
if (expired.length)
|
|
251
|
+
watch.onExpired?.(expired);
|
|
245
252
|
}
|
|
246
253
|
}
|
|
247
254
|
}
|
package/dist/telegram.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../src/telegram.ts"],"names":[],"mappings":"AAAA,mFAAmF;
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../src/telegram.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sojaner/telex",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "MCP server that lets local AI agents ask users questions through Telegram bots",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
"files": [
|
|
26
26
|
"dist",
|
|
27
27
|
"config.example.json",
|
|
28
|
-
"README.md"
|
|
28
|
+
"README.md",
|
|
29
|
+
"plugins"
|
|
29
30
|
],
|
|
30
31
|
"repository": {
|
|
31
32
|
"type": "git",
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "telex",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "Bidirectional Telegram relay for Claude Code sessions.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Sojaner",
|
|
7
|
+
"url": "https://github.com/Sojaner"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/Sojaner/telex",
|
|
10
|
+
"repository": "https://github.com/Sojaner/telex",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": ["telegram", "mcp", "chat", "agent"],
|
|
13
|
+
"mcpServers": "./.mcp.json"
|
|
14
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "telex",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "Bidirectional Telegram relay for Codex agent sessions.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Sojaner",
|
|
7
|
+
"url": "https://github.com/Sojaner"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/Sojaner/telex",
|
|
10
|
+
"repository": "https://github.com/Sojaner/telex",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": ["telegram", "mcp", "chat", "agent"],
|
|
13
|
+
"mcpServers": "./.mcp.json",
|
|
14
|
+
"skills": "./skills/",
|
|
15
|
+
"interface": {
|
|
16
|
+
"displayName": "telex",
|
|
17
|
+
"shortDescription": "Telegram chat relay for agents",
|
|
18
|
+
"longDescription": "Send and receive Telegram messages from Codex through a local MCP server.",
|
|
19
|
+
"developerName": "Sojaner",
|
|
20
|
+
"category": "Productivity",
|
|
21
|
+
"capabilities": ["Instructions"],
|
|
22
|
+
"brandColor": "#229ED9",
|
|
23
|
+
"defaultPrompt": ["Use telex to ask me on Telegram when a decision is needed."]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# telex plugin
|
|
2
|
+
|
|
3
|
+
This package exposes the telex MCP server to Codex and Claude Code.
|
|
4
|
+
|
|
5
|
+
1. Install the runtime: `npm install -g @sojaner/telex`.
|
|
6
|
+
2. Install this plugin using the host's local plugin installer.
|
|
7
|
+
3. In the repository, run `telex add` once and `telex project <name>` to select its bot.
|
|
8
|
+
|
|
9
|
+
The server long-polls Telegram while the host session is alive. MCP has no documented external
|
|
10
|
+
start-turn operation in Codex or Claude Code, so a fully terminated host cannot be woken by this
|
|
11
|
+
plugin; use the host's resume or automation feature for that case.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: telex
|
|
3
|
+
description: Use Telegram to ask the user for decisions, collect replies, and receive unsolicited messages.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# telex
|
|
7
|
+
|
|
8
|
+
Use `send_to_user` for a decision, missing detail, or notification. Include `project_path`,
|
|
9
|
+
`agent`, and `interval_seconds` on every call. Use `heartbeat` at the requested interval while
|
|
10
|
+
working so inbound Telegram messages are delivered and stale messages expire.
|
|
11
|
+
|
|
12
|
+
The plugin polls Telegram while the host session is alive. An idle Codex or Claude Code session
|
|
13
|
+
gets messages on its next tool call. A fully terminated host cannot be started by MCP; use the
|
|
14
|
+
host's own resume or automation facility for that case.
|
|
15
|
+
|
|
16
|
+
Bot routing is automatic: explicit `bot`, then `TELEX_BOT`, then the repository `.telex.json`,
|
|
17
|
+
then the global default in `~/.config/telex/config.json`. Never put bot tokens in the repository.
|