opencode-telegram-bridge 1.2.1 → 1.2.2

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2026 Gabriel Trigo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/README.md CHANGED
@@ -1,27 +1,50 @@
1
1
  # OpenCode Telegram Bridge
2
2
 
3
- Run a Telegram bot that forwards messages to an OpenCode backend and returns responses.
3
+ [![CI](https://github.com/gabriel-trigo/opencode-telegram-bridge/actions/workflows/ci.yml/badge.svg)](https://github.com/gabriel-trigo/opencode-telegram-bridge/actions/workflows/ci.yml)
4
+ [![npm version](https://img.shields.io/npm/v/opencode-telegram-bridge.svg)](https://www.npmjs.com/package/opencode-telegram-bridge)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
4
6
 
5
- ## Requirements
6
- - Node.js 18+
7
- - OpenCode CLI installed and available on PATH
8
- - OpenCode server running (`opencode serve`)
7
+ Run a Telegram bot that forwards messages to an OpenCode server and returns responses.
8
+
9
+ ## Installation (users)
10
+
11
+ This project is currently Linux-only (it is designed to run as a long-running `systemd` service).
12
+
13
+ Prereqs: Node.js 18+, OpenCode CLI on PATH, and an OpenCode server running (`opencode serve`).
14
+
15
+ Recommended: use the installation wizard to set this up as a `systemd` daemon.
9
16
 
10
- ## Install (for users)
11
17
  ```bash
12
18
  npm install -g opencode-telegram-bridge
19
+ opencode-telegram-bridge setup
13
20
  ```
14
21
 
15
- Run:
22
+ The wizard is the easiest and recommended path; it writes the systemd unit and
23
+ env file for you and starts the service.
24
+
25
+ For required environment variables and systemd setup, see:
26
+ - [docs/installation.md](docs/installation.md)
27
+ - [docs/configuration.md](docs/configuration.md)
28
+ - [docs/systemd.md](docs/systemd.md)
29
+
30
+ Contributing:
31
+ - [CONTRIBUTING.md](CONTRIBUTING.md)
32
+
33
+ ## Installation (developers)
34
+
16
35
  ```bash
17
- opencode-telegram-bridge
36
+ git clone https://github.com/gabriel-trigo/opencode-telegram-bridge.git
37
+ cd opencode-telegram-bridge
38
+ npm install
39
+ cp .env.example .env
18
40
  ```
19
41
 
20
- You still need OpenCode running separately:
42
+ In one terminal:
21
43
  ```bash
22
44
  opencode serve
23
45
  ```
24
46
 
25
- ## Documentation
26
- See the docs for configuration, usage, and systemd setup:
27
- https://gabriel-trigo.github.io/opencode-telegram-bridge/
47
+ In another terminal:
48
+ ```bash
49
+ npm run dev
50
+ ```
@@ -0,0 +1,51 @@
1
+ export type TelegramUser = {
2
+ id?: number;
3
+ username?: string;
4
+ };
5
+ export type BotCommandEntity = {
6
+ type: string;
7
+ offset: number;
8
+ };
9
+ export type PermissionButtonSpec = {
10
+ text: string;
11
+ data: string;
12
+ };
13
+ export type PermissionKeyboardSpec = {
14
+ buttons: PermissionButtonSpec[];
15
+ };
16
+ export type PermissionCallback = {
17
+ requestId: string;
18
+ reply: "once" | "always" | "reject";
19
+ };
20
+ export type ModelProvider = {
21
+ id: string;
22
+ models: Record<string, {
23
+ name?: string;
24
+ } | undefined>;
25
+ };
26
+ export declare const isAuthorized: (user: TelegramUser | undefined, allowedUserId: number) => boolean;
27
+ export declare const formatUserLabel: (user: TelegramUser | undefined) => string;
28
+ export declare const isCommandMessage: (message: {
29
+ entities?: unknown;
30
+ }) => boolean;
31
+ export type ParsedCommand = {
32
+ subcommand: string;
33
+ args: string[];
34
+ };
35
+ export declare const parseProjectCommand: (text: string) => ParsedCommand;
36
+ export declare const parseModelCommand: (text: string) => ParsedCommand;
37
+ export declare const formatProjectList: (entries: Array<{
38
+ alias: string;
39
+ path: string;
40
+ }>, activeAlias: string) => string;
41
+ export declare const formatModelList: (providers: ModelProvider[]) => string;
42
+ export declare const buildPermissionSummary: (request: {
43
+ permission: string;
44
+ patterns: Array<string>;
45
+ always: Array<string>;
46
+ }) => string;
47
+ export declare const buildPermissionKeyboardSpec: (requestId: string, includeAlways: boolean) => PermissionKeyboardSpec;
48
+ export declare const parsePermissionCallback: (data: string) => PermissionCallback | null;
49
+ export declare const formatPermissionDecision: (reply: PermissionCallback["reply"]) => "Rejected" | "Approved (always)" | "Approved (once)";
50
+ export declare const formatCommandOutput: (value: string | undefined) => string | null;
51
+ //# sourceMappingURL=bot-logic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-logic.d.ts","sourceRoot":"","sources":["../src/bot-logic.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,oBAAoB,EAAE,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAA;CACtD,CAAA;AAED,eAAO,MAAM,YAAY,GACvB,MAAM,YAAY,GAAG,SAAS,EAC9B,eAAe,MAAM,YACQ,CAAA;AAE/B,eAAO,MAAM,eAAe,GAAI,MAAM,YAAY,GAAG,SAAS,WAU7D,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,SAAS;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,KAAG,OAelE,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,EAAE,CAAA;CACf,CAAA;AAcD,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,aAMlD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,aAMhD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC5B,SAAS,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC/C,aAAa,MAAM,WAYpB,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,WAAW,aAAa,EAAE,WAwBzD,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,SAAS;IAC9C,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IACvB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CACtB,WAUA,CAAA;AAED,eAAO,MAAM,2BAA2B,GACtC,WAAW,MAAM,EACjB,eAAe,OAAO,KACrB,sBAcF,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,MAAM,MAAM,KAAG,kBAAkB,GAAG,IAoB3E,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAI,OAAO,kBAAkB,CAAC,OAAO,CAAC,yDAKlD,CAAA;AAEzB,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,GAAG,SAAS,kBAgB5D,CAAA"}
@@ -0,0 +1,136 @@
1
+ export const isAuthorized = (user, allowedUserId) => user?.id === allowedUserId;
2
+ export const formatUserLabel = (user) => {
3
+ if (!user) {
4
+ return "unknown";
5
+ }
6
+ if (user.username) {
7
+ return `${user.username} (${user.id ?? "unknown"})`;
8
+ }
9
+ return String(user.id ?? "unknown");
10
+ };
11
+ export const isCommandMessage = (message) => {
12
+ const entities = message.entities;
13
+ if (!Array.isArray(entities)) {
14
+ return false;
15
+ }
16
+ return entities.some((entity) => typeof entity === "object" &&
17
+ entity !== null &&
18
+ "type" in entity &&
19
+ "offset" in entity &&
20
+ entity.type === "bot_command" &&
21
+ entity.offset === 0);
22
+ };
23
+ const parseCommand = (text, command) => {
24
+ const parts = text.trim().split(/\s+/);
25
+ const head = parts.shift();
26
+ if (!head || !head.startsWith(`/${command}`)) {
27
+ return { subcommand: "", args: [] };
28
+ }
29
+ const subcommand = parts[0] ?? "";
30
+ const args = parts.slice(1);
31
+ return { subcommand, args };
32
+ };
33
+ export const parseProjectCommand = (text) => {
34
+ const parsed = parseCommand(text, "project");
35
+ return {
36
+ subcommand: parsed.subcommand || "list",
37
+ args: parsed.args,
38
+ };
39
+ };
40
+ export const parseModelCommand = (text) => {
41
+ const parsed = parseCommand(text, "model");
42
+ return {
43
+ subcommand: parsed.subcommand || "current",
44
+ args: parsed.args,
45
+ };
46
+ };
47
+ export const formatProjectList = (entries, activeAlias) => {
48
+ if (entries.length === 0) {
49
+ return "No projects configured.";
50
+ }
51
+ const lines = entries.map((entry) => {
52
+ const prefix = entry.alias === activeAlias ? "*" : " ";
53
+ return `${prefix} ${entry.alias}: ${entry.path}`;
54
+ });
55
+ return ["Projects (active marked with *):", ...lines].join("\n");
56
+ };
57
+ export const formatModelList = (providers) => {
58
+ const lines = ["Available models:"];
59
+ const providerEntries = [...providers].sort((a, b) => a.id.localeCompare(b.id));
60
+ for (const provider of providerEntries) {
61
+ const modelEntries = Object.entries(provider.models).sort((a, b) => a[0].localeCompare(b[0]));
62
+ for (const [modelId, model] of modelEntries) {
63
+ if (!model) {
64
+ continue;
65
+ }
66
+ const label = model.name
67
+ ? `${provider.id}/${modelId} (${model.name})`
68
+ : `${provider.id}/${modelId}`;
69
+ lines.push(label);
70
+ }
71
+ }
72
+ if (lines.length === 1) {
73
+ lines.push("No models available.");
74
+ }
75
+ return lines.join("\n");
76
+ };
77
+ export const buildPermissionSummary = (request) => {
78
+ const lines = ["OpenCode permission request", `Permission: ${request.permission}`];
79
+ if (request.patterns.length > 0) {
80
+ lines.push(`Patterns: ${request.patterns.join(", ")}`);
81
+ }
82
+ if (request.always.length > 0) {
83
+ lines.push(`Always scopes: ${request.always.join(", ")}`);
84
+ }
85
+ return lines.join("\n");
86
+ };
87
+ export const buildPermissionKeyboardSpec = (requestId, includeAlways) => {
88
+ const buttons = [
89
+ { text: "Approve once", data: `perm:${requestId}:once` },
90
+ { text: "Reject", data: `perm:${requestId}:reject` },
91
+ ];
92
+ if (includeAlways) {
93
+ buttons.splice(1, 0, {
94
+ text: "Approve always",
95
+ data: `perm:${requestId}:always`,
96
+ });
97
+ }
98
+ return { buttons };
99
+ };
100
+ export const parsePermissionCallback = (data) => {
101
+ if (!data.startsWith("perm:")) {
102
+ return null;
103
+ }
104
+ const parts = data.split(":");
105
+ if (parts.length !== 3) {
106
+ return null;
107
+ }
108
+ const [, requestId, reply] = parts;
109
+ if (!requestId) {
110
+ return null;
111
+ }
112
+ if (reply !== "once" && reply !== "always" && reply !== "reject") {
113
+ return null;
114
+ }
115
+ return { requestId, reply };
116
+ };
117
+ export const formatPermissionDecision = (reply) => reply === "reject"
118
+ ? "Rejected"
119
+ : reply === "always"
120
+ ? "Approved (always)"
121
+ : "Approved (once)";
122
+ export const formatCommandOutput = (value) => {
123
+ if (!value) {
124
+ return null;
125
+ }
126
+ const trimmed = value.trim();
127
+ if (!trimmed) {
128
+ return null;
129
+ }
130
+ const maxLength = 800;
131
+ if (trimmed.length <= maxLength) {
132
+ return trimmed;
133
+ }
134
+ return `${trimmed.slice(0, maxLength)}...`;
135
+ };
136
+ //# sourceMappingURL=bot-logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-logic.js","sourceRoot":"","sources":["../src/bot-logic.ts"],"names":[],"mappings":"AA6BA,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,IAA8B,EAC9B,aAAqB,EACrB,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,aAAa,CAAA;AAE/B,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAA8B,EAAE,EAAE;IAChE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,IAAI,SAAS,GAAG,CAAA;IACrD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,SAAS,CAAC,CAAA;AACrC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAA+B,EAAW,EAAE;IAC3E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAClB,CAAC,MAAM,EAAE,EAAE,CACT,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,MAAM,IAAI,MAAM;QAChB,QAAQ,IAAI,MAAM;QACjB,MAA2B,CAAC,IAAI,KAAK,aAAa;QAClD,MAA2B,CAAC,MAAM,KAAK,CAAC,CAC5C,CAAA;AACH,CAAC,CAAA;AAOD,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,OAAe,EAAiB,EAAE;IACpE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;IAC1B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;IACrC,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACjC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC3B,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;AAC7B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAiB,EAAE;IACjE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC5C,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM;QACvC,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAiB,EAAE;IAC/D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC1C,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,SAAS;QAC1C,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,OAA+C,EAC/C,WAAmB,EACnB,EAAE;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,yBAAyB,CAAA;IAClC,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAClC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QACtD,OAAO,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,kCAAkC,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAClE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,SAA0B,EAAE,EAAE;IAC5D,MAAM,KAAK,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAEnC,MAAM,eAAe,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/E,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACjE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzB,CAAA;QACD,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,SAAQ;YACV,CAAC;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI;gBACtB,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,OAAO,KAAK,KAAK,CAAC,IAAI,GAAG;gBAC7C,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,OAAO,EAAE,CAAA;YAC/B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;IACpC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAItC,EAAE,EAAE;IACH,MAAM,KAAK,GAAG,CAAC,6BAA6B,EAAE,eAAe,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IAClF,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACxD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC3D,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,SAAiB,EACjB,aAAsB,EACE,EAAE;IAC1B,MAAM,OAAO,GAA2B;QACtC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,SAAS,OAAO,EAAE;QACxD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,SAAS,SAAS,EAAE;KACrD,CAAA;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;YACnB,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,QAAQ,SAAS,SAAS;SACjC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAA;AACpB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAA6B,EAAE;IACjF,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,KAAK,CAAA;IAClC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACjE,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;AAC7B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,KAAkC,EAAE,EAAE,CAC7E,KAAK,KAAK,QAAQ;IAChB,CAAC,CAAC,UAAU;IACZ,CAAC,CAAC,KAAK,KAAK,QAAQ;QAClB,CAAC,CAAC,mBAAmB;QACrB,CAAC,CAAC,iBAAiB,CAAA;AAEzB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAyB,EAAE,EAAE;IAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,CAAA;IACrB,IAAI,OAAO,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAChC,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAA;AAC5C,CAAC,CAAA"}
package/dist/bot.d.ts CHANGED
@@ -1,7 +1,9 @@
1
- import { Telegraf } from "telegraf";
1
+ import { Markup, Telegraf } from "telegraf";
2
2
  import type { BotConfig } from "./config.js";
3
3
  import type { OpencodeBridge } from "./opencode.js";
4
4
  import { type ProjectStore } from "./projects.js";
5
5
  import type { ChatModelStore, ChatProjectStore } from "./state.js";
6
+ import { type PermissionKeyboardSpec } from "./bot-logic.js";
7
+ export declare const toTelegrafInlineKeyboard: (spec: PermissionKeyboardSpec) => Markup.Markup<import("@telegraf/types").InlineKeyboardMarkup>;
6
8
  export declare const startBot: (config: BotConfig, opencode: OpencodeBridge, projects: ProjectStore, chatProjects: ChatProjectStore, chatModels: ChatModelStore) => Telegraf<import("telegraf").Context<import("@telegraf/types").Update>>;
7
9
  //# sourceMappingURL=bot.d.ts.map
package/dist/bot.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"AAGA,OAAO,EAAU,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAwB,MAAM,aAAa,CAAA;AAClE,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,eAAe,CAAA;AAEpE,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAyClE,eAAO,MAAM,QAAQ,GACnB,QAAQ,SAAS,EACjB,UAAU,cAAc,EACxB,UAAU,YAAY,EACtB,cAAc,gBAAgB,EAC9B,YAAY,cAAc,2EAqqB3B,CAAA"}
1
+ {"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAwB,MAAM,aAAa,CAAA;AAClE,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,eAAe,CAAA;AAEpE,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElE,OAAO,EAcL,KAAK,sBAAsB,EAC5B,MAAM,gBAAgB,CAAA;AAoBvB,eAAO,MAAM,wBAAwB,GAAI,MAAM,sBAAsB,kEAKpE,CAAA;AAED,eAAO,MAAM,QAAQ,GACnB,QAAQ,SAAS,EACjB,UAAU,cAAc,EACxB,UAAU,YAAY,EACtB,cAAc,gBAAgB,EAC9B,YAAY,cAAc,2EA0jB3B,CAAA"}
package/dist/bot.js CHANGED
@@ -4,16 +4,11 @@ import { Markup, Telegraf } from "telegraf";
4
4
  import { createPromptGuard } from "./prompt-guard.js";
5
5
  import { HOME_PROJECT_ALIAS } from "./projects.js";
6
6
  import { splitTelegramMessage } from "./telegram.js";
7
+ import { buildPermissionKeyboardSpec, buildPermissionSummary, formatCommandOutput, formatModelList, formatPermissionDecision, formatProjectList, formatUserLabel, isAuthorized, isCommandMessage, parseModelCommand, parsePermissionCallback, parseProjectCommand, } from "./bot-logic.js";
7
8
  const execAsync = promisify(exec);
8
- const isAuthorized = (user, allowedUserId) => user?.id === allowedUserId;
9
- const formatUserLabel = (user) => {
10
- if (!user) {
11
- return "unknown";
12
- }
13
- if (user.username) {
14
- return `${user.username} (${user.id ?? "unknown"})`;
15
- }
16
- return String(user.id ?? "unknown");
9
+ export const toTelegrafInlineKeyboard = (spec) => {
10
+ const buttons = spec.buttons.map((button) => Markup.button.callback(button.text, button.data));
11
+ return Markup.inlineKeyboard([buttons]);
17
12
  };
18
13
  export const startBot = (config, opencode, projects, chatProjects, chatModels) => {
19
14
  const bot = new Telegraf(config.botToken, {
@@ -41,26 +36,6 @@ export const startBot = (config, opencode, projects, chatProjects, chatModels) =
41
36
  console.error("Failed to send Telegram reply", error);
42
37
  }
43
38
  };
44
- const buildPermissionSummary = (request) => {
45
- const lines = ["OpenCode permission request", `Permission: ${request.permission}`];
46
- if (request.patterns.length > 0) {
47
- lines.push(`Patterns: ${request.patterns.join(", ")}`);
48
- }
49
- if (request.always.length > 0) {
50
- lines.push(`Always scopes: ${request.always.join(", ")}`);
51
- }
52
- return lines.join("\n");
53
- };
54
- const buildPermissionKeyboard = (requestId, includeAlways) => {
55
- const buttons = [
56
- Markup.button.callback("Approve once", `perm:${requestId}:once`),
57
- Markup.button.callback("Reject", `perm:${requestId}:reject`),
58
- ];
59
- if (includeAlways) {
60
- buttons.splice(1, 0, Markup.button.callback("Approve always", `perm:${requestId}:always`));
61
- }
62
- return Markup.inlineKeyboard([buttons]);
63
- };
64
39
  const buildBotCommands = () => {
65
40
  const commands = [
66
41
  { command: "start", description: "Confirm the bot is online" },
@@ -85,20 +60,6 @@ export const startBot = (config, opencode, projects, chatProjects, chatModels) =
85
60
  }
86
61
  return commands;
87
62
  };
88
- const formatCommandOutput = (value) => {
89
- if (!value) {
90
- return null;
91
- }
92
- const trimmed = value.trim();
93
- if (!trimmed) {
94
- return null;
95
- }
96
- const maxLength = 800;
97
- if (trimmed.length <= maxLength) {
98
- return trimmed;
99
- }
100
- return `${trimmed.slice(0, maxLength)}...`;
101
- };
102
63
  const runRestartCommand = async (restartConfig) => {
103
64
  if (!restartConfig) {
104
65
  return { configured: false };
@@ -142,7 +103,7 @@ export const startBot = (config, opencode, projects, chatProjects, chatModels) =
142
103
  }
143
104
  const summary = buildPermissionSummary(request);
144
105
  try {
145
- const replyMarkup = buildPermissionKeyboard(request.id, request.always.length > 0);
106
+ const replyMarkup = toTelegrafInlineKeyboard(buildPermissionKeyboardSpec(request.id, request.always.length > 0));
146
107
  const message = await bot.telegram.sendMessage(owner.chatId, summary, {
147
108
  reply_markup: replyMarkup.reply_markup,
148
109
  });
@@ -165,18 +126,6 @@ export const startBot = (config, opencode, projects, chatProjects, chatModels) =
165
126
  const setChatProjectAlias = (chatId, alias) => {
166
127
  chatProjects.setActiveAlias(chatId, alias);
167
128
  };
168
- const formatProjectList = (activeAlias) => {
169
- const entries = projects.listProjects();
170
- if (entries.length === 0) {
171
- return "No projects configured.";
172
- }
173
- const lines = entries.map((entry) => {
174
- const prefix = entry.alias === activeAlias ? "*" : " ";
175
- return `${prefix} ${entry.alias}: ${entry.path}`;
176
- });
177
- return ["Projects (active marked with *):", ...lines].join("\n");
178
- };
179
- const isCommandMessage = (ctx) => ctx.message?.entities?.some((entity) => entity.type === "bot_command" && entity.offset === 0) ?? false;
180
129
  bot.start(async (ctx) => {
181
130
  if (!isAuthorized(ctx.from, config.allowedUserId)) {
182
131
  await ctx.reply("Not authorized.");
@@ -196,14 +145,11 @@ export const startBot = (config, opencode, projects, chatProjects, chatModels) =
196
145
  return;
197
146
  }
198
147
  const messageText = ctx.message?.text ?? "";
199
- const parts = messageText.trim().split(/\s+/);
200
- parts.shift();
201
- const subcommand = parts[0] ?? "list";
202
- const args = parts.slice(1);
148
+ const { subcommand, args } = parseProjectCommand(messageText);
203
149
  try {
204
150
  switch (subcommand) {
205
151
  case "list": {
206
- await ctx.reply(formatProjectList(getChatProjectAlias(chatId)));
152
+ await ctx.reply(formatProjectList(projects.listProjects(), getChatProjectAlias(chatId)));
207
153
  return;
208
154
  }
209
155
  case "current": {
@@ -285,28 +231,12 @@ export const startBot = (config, opencode, projects, chatProjects, chatModels) =
285
231
  return;
286
232
  }
287
233
  const messageText = ctx.message?.text ?? "";
288
- const parts = messageText.trim().split(/\s+/);
289
- parts.shift();
290
- const subcommand = parts[0] ?? "current";
234
+ const { subcommand } = parseModelCommand(messageText);
291
235
  try {
292
236
  switch (subcommand) {
293
237
  case "list": {
294
238
  const providers = await opencode.listModels(project.path);
295
- const lines = ["Available models:"];
296
- const providerEntries = [...providers].sort((a, b) => a.id.localeCompare(b.id));
297
- for (const provider of providerEntries) {
298
- const modelEntries = Object.entries(provider.models).sort((a, b) => a[0].localeCompare(b[0]));
299
- for (const [modelId, model] of modelEntries) {
300
- const label = model?.name
301
- ? `${provider.id}/${modelId} (${model.name})`
302
- : `${provider.id}/${modelId}`;
303
- lines.push(label);
304
- }
305
- }
306
- if (lines.length === 1) {
307
- lines.push("No models available.");
308
- }
309
- await sendReply(chatId, ctx.message?.message_id, lines.join("\n"));
239
+ await sendReply(chatId, ctx.message?.message_id, formatModelList(providers));
310
240
  return;
311
241
  }
312
242
  case "current": {
@@ -423,23 +353,16 @@ export const startBot = (config, opencode, projects, chatProjects, chatModels) =
423
353
  return;
424
354
  }
425
355
  const data = callbackQuery.data;
426
- if (!data.startsWith("perm:")) {
356
+ const parsed = parsePermissionCallback(data);
357
+ if (!parsed) {
427
358
  return;
428
359
  }
429
360
  if (!isAuthorized(ctx.from, config.allowedUserId)) {
430
361
  await ctx.answerCbQuery("Not authorized.");
431
362
  return;
432
363
  }
433
- const [, requestId, reply] = data.split(":");
434
- if (!requestId || !reply) {
435
- await ctx.answerCbQuery("Invalid permission response.");
436
- return;
437
- }
438
- const permissionReply = reply;
439
- if (!["once", "always", "reject"].includes(permissionReply)) {
440
- await ctx.answerCbQuery("Invalid permission response.");
441
- return;
442
- }
364
+ const requestId = parsed.requestId;
365
+ const permissionReply = parsed.reply;
443
366
  const pending = pendingPermissions.get(requestId);
444
367
  if (!pending) {
445
368
  await ctx.answerCbQuery("Permission request not found.");
@@ -448,11 +371,7 @@ export const startBot = (config, opencode, projects, chatProjects, chatModels) =
448
371
  try {
449
372
  await opencode.replyToPermission(requestId, permissionReply, pending.directory);
450
373
  pendingPermissions.delete(requestId);
451
- const decisionLabel = permissionReply === "reject"
452
- ? "Rejected"
453
- : permissionReply === "always"
454
- ? "Approved (always)"
455
- : "Approved (once)";
374
+ const decisionLabel = formatPermissionDecision(permissionReply);
456
375
  await bot.telegram.editMessageText(pending.chatId, pending.messageId, undefined, `${pending.summary}\nDecision: ${decisionLabel}`);
457
376
  await ctx.answerCbQuery("Response sent.");
458
377
  }
@@ -466,7 +385,7 @@ export const startBot = (config, opencode, projects, chatProjects, chatModels) =
466
385
  void ctx.reply("Not authorized.");
467
386
  return;
468
387
  }
469
- if (isCommandMessage(ctx)) {
388
+ if (ctx.message && isCommandMessage(ctx.message)) {
470
389
  return;
471
390
  }
472
391
  const text = ctx.message.text;
package/dist/bot.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bot.js","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bot.js","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,35 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024">
3
+ <g fill="none" stroke="#0B1320" stroke-linecap="round" stroke-linejoin="round">
4
+
5
+ <!-- Bridge deck -->
6
+ <rect x="120" y="660" width="784" height="140" rx="70"
7
+ fill="#FFC857" stroke-width="48"/>
8
+
9
+ <!-- Angle bracket supports -->
10
+ <path d="M 370 800 L 270 850 L 370 900" stroke-width="60"/>
11
+ <path d="M 654 800 L 754 850 L 654 900" stroke-width="60"/>
12
+
13
+ <!-- Robot head -->
14
+ <rect x="170" y="236" width="240" height="210" rx="96"
15
+ fill="#23B5A6" stroke-width="48"/>
16
+ <!-- Robot body -->
17
+ <rect x="150" y="412" width="280" height="220" rx="110"
18
+ fill="#23B5A6" stroke-width="48"/>
19
+
20
+ <!-- Antenna -->
21
+ <path d="M 290 198 L 290 236" stroke-width="48"/>
22
+ <circle cx="290" cy="178" r="36" fill="#23B5A6" stroke-width="48"/>
23
+
24
+ <!-- Eyes -->
25
+ <circle cx="250" cy="336" r="18" fill="#0B1320" stroke="none"/>
26
+ <circle cx="330" cy="336" r="18" fill="#0B1320" stroke="none"/>
27
+
28
+ <!-- Paper plane (clean outline + fold line) -->
29
+ <g stroke="#0B1320" stroke-linecap="round" stroke-linejoin="round">
30
+ <path d="M 540 420 L 740 350 L 610 570 L 590 470 Z" fill="#23B5A6" stroke-width="18"/>
31
+ <path d="M 590 470 L 740 350" fill="none" stroke-width="12"/>
32
+ </g>
33
+
34
+ </g>
35
+ </svg>
package/docs/index.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # OpenCode Telegram Bridge
2
2
 
3
+ ![OpenCode Telegram Bridge logo](assets/logo.svg)
4
+
3
5
  Run a Telegram bot that forwards messages to an OpenCode backend and returns responses. These docs are for end users and aim to make setup and operation unambiguous.
4
6
 
5
7
  Start here:
package/docs/systemd.md CHANGED
@@ -7,36 +7,61 @@ This project ships a user systemd unit template in `systemd/opencode-telegram-br
7
7
  opencode-telegram-bridge setup
8
8
  ```
9
9
 
10
+ This is the recommended and supported path. It writes the correct systemd unit
11
+ and env file for your machine (including the right Node/CLI paths), and starts
12
+ the service for you.
13
+
10
14
  The wizard can optionally install a user service for `opencode serve` as well.
11
15
 
12
- ## Manual install
16
+ ## Advanced: manual install
17
+ Only use this if you cannot run the wizard. It is easy to misconfigure paths
18
+ or environment values and end up with a service that does not start.
13
19
  1. Install the package:
14
20
 
15
21
  ```bash
16
22
  npm install -g opencode-telegram-bridge
17
23
  ```
18
24
 
19
- 2. Copy the service and env files:
25
+ 2. Locate the installed package so you can copy the bundled systemd files:
26
+
27
+ ```bash
28
+ npm root -g
29
+ ```
30
+
31
+ This prints a path like `/usr/local/lib/node_modules` or `~/.nvm/versions/node/v20.x/lib/node_modules`.
32
+ The systemd files live at:
33
+
34
+ ```text
35
+ <npm root -g>/opencode-telegram-bridge/systemd/
36
+ ```
37
+
38
+ 3. Copy the service and env files:
20
39
 
21
40
  ```bash
22
41
  mkdir -p ~/.config/systemd/user
23
42
  mkdir -p ~/.config/opencode-telegram-bridge
24
- cp systemd/opencode-telegram-bridge.service ~/.config/systemd/user/opencode-telegram-bridge.service
25
- cp systemd/opencode-telegram-bridge.env.example ~/.config/opencode-telegram-bridge/opencode-telegram-bridge.env
43
+ cp "$(npm root -g)/opencode-telegram-bridge/systemd/opencode-telegram-bridge.service" \
44
+ ~/.config/systemd/user/opencode-telegram-bridge.service
45
+ cp "$(npm root -g)/opencode-telegram-bridge/systemd/opencode-telegram-bridge.env.example" \
46
+ ~/.config/opencode-telegram-bridge/opencode-telegram-bridge.env
26
47
  ```
27
48
 
28
- 3. Edit the env file:
49
+ 4. Edit the env file:
29
50
 
30
51
  ```bash
31
52
  nano ~/.config/opencode-telegram-bridge/opencode-telegram-bridge.env
32
53
  ```
33
54
 
34
- 4. Update the service path if needed:
55
+ 5. Set the correct ExecStart path in the service file:
56
+
57
+ - The default is `ExecStart=/usr/bin/opencode-telegram-bridge`.
58
+ - Replace it with the output of:
35
59
 
36
- - `ExecStart=/usr/bin/opencode-telegram-bridge`
37
- - If you installed via npm in a non-standard location, set `ExecStart` to the output of `command -v opencode-telegram-bridge`.
60
+ ```bash
61
+ command -v opencode-telegram-bridge
62
+ ```
38
63
 
39
- 5. Enable and start:
64
+ 6. Enable and start:
40
65
 
41
66
  ```bash
42
67
  systemctl --user daemon-reload
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-telegram-bridge",
3
- "version": "1.2.1",
3
+ "version": "1.2.2",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -30,10 +30,26 @@
30
30
  "test:watch": "vitest",
31
31
  "test:coverage": "vitest run --coverage"
32
32
  },
33
- "keywords": [],
34
- "author": "",
35
- "license": "ISC",
36
- "description": "",
33
+ "description": "Telegram bot bridge for the OpenCode server",
34
+ "keywords": [
35
+ "opencode",
36
+ "telegram",
37
+ "bot",
38
+ "bridge",
39
+ "telegraf",
40
+ "systemd",
41
+ "cli"
42
+ ],
43
+ "author": "Gabriel Trigo",
44
+ "license": "MIT",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "git+https://github.com/gabriel-trigo/opencode-telegram-bridge.git"
48
+ },
49
+ "bugs": {
50
+ "url": "https://github.com/gabriel-trigo/opencode-telegram-bridge/issues"
51
+ },
52
+ "homepage": "https://gabriel-trigo.github.io/opencode-telegram-bridge/",
37
53
  "devDependencies": {
38
54
  "@changesets/cli": "^2.29.8",
39
55
  "@types/better-sqlite3": "^7.6.13",