opencode-telegram-bridge 1.2.1 → 1.2.3

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,51 @@
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 supports Linux (systemd) and macOS (launchd) for long-running services.
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 service.
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/launchd
23
+ service definition and env file for you and starts the service.
24
+
25
+ For required environment variables and service setup, see:
26
+ - [docs/installation.md](docs/installation.md)
27
+ - [docs/configuration.md](docs/configuration.md)
28
+ - [docs/systemd.md](docs/systemd.md)
29
+ - [docs/launchd.md](docs/launchd.md)
30
+
31
+ Contributing:
32
+ - [CONTRIBUTING.md](CONTRIBUTING.md)
33
+
34
+ ## Installation (developers)
35
+
16
36
  ```bash
17
- opencode-telegram-bridge
37
+ git clone https://github.com/gabriel-trigo/opencode-telegram-bridge.git
38
+ cd opencode-telegram-bridge
39
+ npm install
40
+ cp .env.example .env
18
41
  ```
19
42
 
20
- You still need OpenCode running separately:
43
+ In one terminal:
21
44
  ```bash
22
45
  opencode serve
23
46
  ```
24
47
 
25
- ## Documentation
26
- See the docs for configuration, usage, and systemd setup:
27
- https://gabriel-trigo.github.io/opencode-telegram-bridge/
48
+ In another terminal:
49
+ ```bash
50
+ npm run dev
51
+ ```
@@ -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":"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"}
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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"}
package/dist/cli.js CHANGED
@@ -104,6 +104,17 @@ const writeUnitFile = (unitPath, content) => {
104
104
  fs.mkdirSync(path.dirname(unitPath), { recursive: true });
105
105
  fs.writeFileSync(unitPath, content, "utf8");
106
106
  };
107
+ const writePlistFile = (plistPath, content) => {
108
+ fs.mkdirSync(path.dirname(plistPath), { recursive: true });
109
+ fs.writeFileSync(plistPath, content, { encoding: "utf8", mode: 0o600 });
110
+ fs.chmodSync(plistPath, 0o600);
111
+ };
112
+ const escapeXml = (value) => value
113
+ .replace(/&/g, "&amp;")
114
+ .replace(/</g, "&lt;")
115
+ .replace(/>/g, "&gt;")
116
+ .replace(/"/g, "&quot;")
117
+ .replace(/'/g, "&apos;");
107
118
  const buildUnitFile = (envPath, nodePath, cliPath) => `
108
119
  [Unit]
109
120
  Description=OpenCode Telegram Bridge
@@ -136,10 +147,47 @@ RestartSec=3
136
147
  [Install]
137
148
  WantedBy=default.target
138
149
  `;
139
- const runSetupWizard = async () => {
140
- if (process.platform !== "linux") {
141
- die("Setup currently supports Linux systemd only. See the docs for manual setup.");
142
- }
150
+ const buildLaunchdPlist = ({ label, programArguments, env, logPath, }) => {
151
+ const envEntries = Object.entries(env)
152
+ .filter(([, value]) => value)
153
+ .map(([key, value]) => ` <key>${escapeXml(key)}</key>\n <string>${escapeXml(value)}</string>`)
154
+ .join("\n");
155
+ const envBlock = envEntries
156
+ ? ` <key>EnvironmentVariables</key>\n <dict>\n${envEntries}\n </dict>\n`
157
+ : "";
158
+ const programArgs = programArguments
159
+ .map((value) => ` <string>${escapeXml(value)}</string>`)
160
+ .join("\n");
161
+ return `<?xml version="1.0" encoding="UTF-8"?>
162
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
163
+ <plist version="1.0">
164
+ <dict>
165
+ <key>Label</key>
166
+ <string>${escapeXml(label)}</string>
167
+ <key>ProgramArguments</key>
168
+ <array>
169
+ ${programArgs}
170
+ </array>
171
+ ${envBlock} <key>RunAtLoad</key>
172
+ <true/>
173
+ <key>KeepAlive</key>
174
+ <true/>
175
+ <key>StandardOutPath</key>
176
+ <string>${escapeXml(logPath)}</string>
177
+ <key>StandardErrorPath</key>
178
+ <string>${escapeXml(logPath)}</string>
179
+ </dict>
180
+ </plist>
181
+ `;
182
+ };
183
+ const buildLaunchdPath = (nodeDir) => [nodeDir, "/opt/homebrew/bin", "/usr/local/bin", "/usr/bin", "/bin"].join(":");
184
+ const isLaunchdServiceLoaded = (uid, label) => {
185
+ const result = spawnSync("launchctl", ["print", `gui/${uid}/${label}`], {
186
+ encoding: "utf8",
187
+ });
188
+ return result.status === 0;
189
+ };
190
+ const runSystemdSetup = async () => {
143
191
  const systemctlCheck = spawnSync("systemctl", ["--user", "--version"], {
144
192
  encoding: "utf8",
145
193
  });
@@ -227,6 +275,116 @@ const runSetupWizard = async () => {
227
275
  console.log(`Env file: ${envPath}`);
228
276
  console.log(`Unit file: ${unitPath}`);
229
277
  };
278
+ const runLaunchdSetup = async () => {
279
+ const rawUid = process.getuid?.();
280
+ if (typeof rawUid !== "number") {
281
+ die("Unable to determine user id for launchd setup.");
282
+ return;
283
+ }
284
+ const uid = rawUid;
285
+ const homeDir = os.homedir();
286
+ const envPath = path.join(homeDir, ".config", "opencode-telegram-bridge", "opencode-telegram-bridge.env");
287
+ const bridgeLabel = "com.opencode.telegram-bridge";
288
+ const opencodeLabel = "com.opencode.server";
289
+ const plistPath = path.join(homeDir, "Library", "LaunchAgents", `${bridgeLabel}.plist`);
290
+ const installOpencode = await confirmAnswer("Set up OpenCode server as a launchd agent?", false);
291
+ const opencodePlistPath = path.join(homeDir, "Library", "LaunchAgents", `${opencodeLabel}.plist`);
292
+ const existingPaths = [envPath, plistPath];
293
+ if (installOpencode) {
294
+ existingPaths.push(opencodePlistPath);
295
+ }
296
+ if (existingPaths.some((filePath) => fs.existsSync(filePath))) {
297
+ const overwrite = await confirmAnswer("Existing config found. Overwrite?", false);
298
+ if (!overwrite) {
299
+ die("Setup cancelled.");
300
+ }
301
+ }
302
+ const opencodePath = installOpencode ? resolveOpencodePath() : null;
303
+ const botToken = await readSecret("TELEGRAM_BOT_TOKEN", { required: true });
304
+ const allowedUserId = await readAnswer("TELEGRAM_ALLOWED_USER_ID", {
305
+ required: true,
306
+ });
307
+ if (!Number.isInteger(Number(allowedUserId))) {
308
+ throw new Error("TELEGRAM_ALLOWED_USER_ID must be an integer");
309
+ }
310
+ const serverUrl = await readAnswer("OPENCODE_SERVER_URL", {
311
+ defaultValue: "http://127.0.0.1:4096",
312
+ });
313
+ const serverUsername = await readAnswer("OPENCODE_SERVER_USERNAME", {
314
+ defaultValue: "opencode",
315
+ });
316
+ const serverPassword = await readSecret("OPENCODE_SERVER_PASSWORD", {});
317
+ const opencodeRestartCommand = installOpencode
318
+ ? `launchctl kickstart -k gui/${uid}/${opencodeLabel}`
319
+ : await readAnswer("OPENCODE_RESTART_COMMAND", {});
320
+ const opencodeRestartTimeoutMs = opencodeRestartCommand ? "30000" : "";
321
+ const bridgeRestartCommand = `launchctl kickstart -k gui/${uid}/${bridgeLabel}`;
322
+ const { nodePath, cliPath } = resolveExecStart();
323
+ const envValues = {
324
+ TELEGRAM_BOT_TOKEN: botToken,
325
+ TELEGRAM_ALLOWED_USER_ID: allowedUserId,
326
+ OPENCODE_SERVER_URL: serverUrl,
327
+ OPENCODE_SERVER_USERNAME: serverUsername,
328
+ OPENCODE_SERVER_PASSWORD: serverPassword,
329
+ OPENCODE_PROMPT_TIMEOUT_MS: "600000",
330
+ TELEGRAM_HANDLER_TIMEOUT_MS: "630000",
331
+ OPENCODE_RESTART_COMMAND: opencodeRestartCommand,
332
+ OPENCODE_RESTART_TIMEOUT_MS: opencodeRestartTimeoutMs,
333
+ OPENCODE_BRIDGE_RESTART_COMMAND: bridgeRestartCommand,
334
+ OPENCODE_BRIDGE_RESTART_TIMEOUT_MS: "30000",
335
+ };
336
+ writeEnvFile(envPath, envValues);
337
+ const logPath = path.join(homeDir, "Library", "Logs", "opencode-telegram-bridge.log");
338
+ const plist = buildLaunchdPlist({
339
+ label: bridgeLabel,
340
+ programArguments: [nodePath, cliPath],
341
+ env: envValues,
342
+ logPath,
343
+ });
344
+ writePlistFile(plistPath, plist);
345
+ if (installOpencode && opencodePath) {
346
+ const nodeDir = path.dirname(nodePath);
347
+ const opencodeLogPath = path.join(homeDir, "Library", "Logs", "opencode-server.log");
348
+ const opencodePlist = buildLaunchdPlist({
349
+ label: opencodeLabel,
350
+ programArguments: [opencodePath, "serve"],
351
+ env: {
352
+ PATH: buildLaunchdPath(nodeDir),
353
+ },
354
+ logPath: opencodeLogPath,
355
+ });
356
+ writePlistFile(opencodePlistPath, opencodePlist);
357
+ }
358
+ if (isLaunchdServiceLoaded(uid, bridgeLabel)) {
359
+ runCommand("launchctl", ["bootout", `gui/${uid}`, plistPath]);
360
+ }
361
+ runCommand("launchctl", ["bootstrap", `gui/${uid}`, plistPath]);
362
+ runCommand("launchctl", ["enable", `gui/${uid}/${bridgeLabel}`]);
363
+ runCommand("launchctl", ["kickstart", "-k", `gui/${uid}/${bridgeLabel}`]);
364
+ if (installOpencode) {
365
+ if (isLaunchdServiceLoaded(uid, opencodeLabel)) {
366
+ runCommand("launchctl", ["bootout", `gui/${uid}`, opencodePlistPath]);
367
+ }
368
+ runCommand("launchctl", ["bootstrap", `gui/${uid}`, opencodePlistPath]);
369
+ runCommand("launchctl", ["enable", `gui/${uid}/${opencodeLabel}`]);
370
+ runCommand("launchctl", ["kickstart", "-k", `gui/${uid}/${opencodeLabel}`]);
371
+ }
372
+ console.log("Setup complete. Service is running.");
373
+ console.log(`Env file: ${envPath}`);
374
+ console.log(`Launch agent: ${plistPath}`);
375
+ console.log("Services start on login. Use a LaunchDaemon for boot-time start.");
376
+ };
377
+ const runSetupWizard = async () => {
378
+ if (process.platform === "linux") {
379
+ await runSystemdSetup();
380
+ return;
381
+ }
382
+ if (process.platform === "darwin") {
383
+ await runLaunchdSetup();
384
+ return;
385
+ }
386
+ die("Setup supports Linux systemd and macOS launchd only.");
387
+ };
230
388
  const command = process.argv[2];
231
389
  if (!command) {
232
390
  runBot();
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.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>
@@ -12,13 +12,13 @@ Set these environment variables in your shell or service environment.
12
12
  - `OPENCODE_SERVER_PASSWORD` - Basic auth password.
13
13
  - `OPENCODE_PROMPT_TIMEOUT_MS` - Prompt timeout in milliseconds (default: 600000).
14
14
  - `TELEGRAM_HANDLER_TIMEOUT_MS` - Telegraf handler timeout in milliseconds (default: prompt timeout + 30000).
15
- - `OPENCODE_RESTART_COMMAND` - Command to restart OpenCode when `/reboot` is used (example: `systemctl --user restart opencode --no-block`).
15
+ - `OPENCODE_RESTART_COMMAND` - Command to restart OpenCode when `/reboot` is used (example: `systemctl --user restart opencode --no-block` or `launchctl kickstart -k gui/$UID/com.opencode.server`).
16
16
  - `OPENCODE_RESTART_TIMEOUT_MS` - Restart command timeout in milliseconds (default: 30000).
17
- - `OPENCODE_BRIDGE_RESTART_COMMAND` - Command to restart the Telegram bridge when `/restart` is used (example: `systemctl --user restart opencode-telegram-bridge --no-block`).
17
+ - `OPENCODE_BRIDGE_RESTART_COMMAND` - Command to restart the Telegram bridge when `/restart` is used (example: `systemctl --user restart opencode-telegram-bridge --no-block` or `launchctl kickstart -k gui/$UID/com.opencode.telegram-bridge`).
18
18
  - `OPENCODE_BRIDGE_RESTART_TIMEOUT_MS` - Restart command timeout in milliseconds (default: 30000).
19
19
 
20
20
  ## Data storage
21
21
  - Project aliases and chat selections are stored in `~/.opencode-telegram-bridge/projects.db`.
22
22
 
23
- ## systemd user service
24
- The setup wizard writes a user service env file at `~/.config/opencode-telegram-bridge/opencode-telegram-bridge.env`.
23
+ ## service env file
24
+ The setup wizard writes the service env file at `~/.config/opencode-telegram-bridge/opencode-telegram-bridge.env`.
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:
@@ -7,3 +9,4 @@ Start here:
7
9
  - Configuration
8
10
  - Usage
9
11
  - Systemd
12
+ - Launchd
@@ -10,12 +10,16 @@
10
10
  npm install -g opencode-telegram-bridge
11
11
  ```
12
12
 
13
- ## Setup (Linux systemd)
13
+ ## Setup (Linux systemd / macOS launchd)
14
14
  ```bash
15
15
  opencode-telegram-bridge setup
16
16
  ```
17
17
 
18
- The wizard can also set up OpenCode as a user service. Setup currently supports Linux systemd only. On other platforms, run the bot manually.
18
+ The wizard can also set up OpenCode as a user service. It supports Linux systemd and macOS launchd.
19
+
20
+ See:
21
+ - [systemd](systemd.md)
22
+ - [launchd](launchd.md)
19
23
 
20
24
  ## Run the bot
21
25
  ```bash
@@ -0,0 +1,90 @@
1
+ # launchd Service (macOS user)
2
+
3
+ This project ships launchd templates in `launchd/` for manual setup on macOS.
4
+
5
+ ## Recommended: setup wizard
6
+ ```bash
7
+ opencode-telegram-bridge setup
8
+ ```
9
+
10
+ This is the recommended path. It writes the launchd plist and env file for your
11
+ machine and starts the service for you.
12
+
13
+ ## Advanced: manual install
14
+ Only use this if you cannot run the wizard. It is easy to misconfigure paths
15
+ or environment values and end up with a service that does not start.
16
+
17
+ 1. Install the package:
18
+
19
+ ```bash
20
+ npm install -g opencode-telegram-bridge
21
+ ```
22
+
23
+ 2. Locate the installed package so you can copy the bundled launchd files:
24
+
25
+ ```bash
26
+ npm root -g
27
+ ```
28
+
29
+ The launchd templates live at:
30
+
31
+ ```text
32
+ <npm root -g>/opencode-telegram-bridge/launchd/
33
+ ```
34
+
35
+ 3. Copy the launchd plist:
36
+
37
+ ```bash
38
+ mkdir -p ~/Library/LaunchAgents
39
+ cp "$(npm root -g)/opencode-telegram-bridge/launchd/opencode-telegram-bridge.plist" \
40
+ ~/Library/LaunchAgents/com.opencode.telegram-bridge.plist
41
+ ```
42
+
43
+ 4. Edit the plist:
44
+
45
+ - Replace `/path/to/node` with `command -v node`.
46
+ - Replace `/path/to/opencode-telegram-bridge/dist/cli.js` with:
47
+
48
+ ```bash
49
+ echo "$(npm root -g)/opencode-telegram-bridge/dist/cli.js"
50
+ ```
51
+
52
+ - Replace `REPLACE_ME` values with your Telegram credentials.
53
+ - Replace `~/Library/Logs/...` with absolute paths (launchd does not expand `~`).
54
+
55
+ 5. Load and start:
56
+
57
+ ```bash
58
+ launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.opencode.telegram-bridge.plist
59
+ launchctl enable gui/$(id -u)/com.opencode.telegram-bridge
60
+ launchctl kickstart -k gui/$(id -u)/com.opencode.telegram-bridge
61
+ ```
62
+
63
+ ## Optional: OpenCode server agent
64
+ If you want `opencode serve` to run as a launchd agent too:
65
+
66
+ ```bash
67
+ cp "$(npm root -g)/opencode-telegram-bridge/launchd/opencode-server.plist" \
68
+ ~/Library/LaunchAgents/com.opencode.server.plist
69
+ ```
70
+
71
+ Edit the plist:
72
+ - Replace `/path/to/opencode` with `command -v opencode`.
73
+ - Replace `/path/to/node/dir` with `dirname "$(command -v node)"`.
74
+ - Replace `~/Library/Logs/...` with absolute paths.
75
+
76
+ Then load and start:
77
+
78
+ ```bash
79
+ launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.opencode.server.plist
80
+ launchctl enable gui/$(id -u)/com.opencode.server
81
+ launchctl kickstart -k gui/$(id -u)/com.opencode.server
82
+ ```
83
+
84
+ ## Logs
85
+ ```bash
86
+ tail -f ~/Library/Logs/opencode-telegram-bridge.log
87
+ ```
88
+
89
+ ## Start on boot (optional)
90
+ LaunchAgents start on login. To start before login, use a LaunchDaemon (requires sudo).
package/docs/systemd.md CHANGED
@@ -1,42 +1,68 @@
1
1
  # systemd Service (Linux user)
2
2
 
3
3
  This project ships a user systemd unit template in `systemd/opencode-telegram-bridge.service`.
4
+ On macOS, use the [launchd](launchd.md) guide instead.
4
5
 
5
6
  ## Recommended: setup wizard
6
7
  ```bash
7
8
  opencode-telegram-bridge setup
8
9
  ```
9
10
 
11
+ This is the recommended and supported path. It writes the correct systemd unit
12
+ and env file for your machine (including the right Node/CLI paths), and starts
13
+ the service for you.
14
+
10
15
  The wizard can optionally install a user service for `opencode serve` as well.
11
16
 
12
- ## Manual install
17
+ ## Advanced: manual install
18
+ Only use this if you cannot run the wizard. It is easy to misconfigure paths
19
+ or environment values and end up with a service that does not start.
13
20
  1. Install the package:
14
21
 
15
22
  ```bash
16
23
  npm install -g opencode-telegram-bridge
17
24
  ```
18
25
 
19
- 2. Copy the service and env files:
26
+ 2. Locate the installed package so you can copy the bundled systemd files:
27
+
28
+ ```bash
29
+ npm root -g
30
+ ```
31
+
32
+ This prints a path like `/usr/local/lib/node_modules` or `~/.nvm/versions/node/v20.x/lib/node_modules`.
33
+ The systemd files live at:
34
+
35
+ ```text
36
+ <npm root -g>/opencode-telegram-bridge/systemd/
37
+ ```
38
+
39
+ 3. Copy the service and env files:
20
40
 
21
41
  ```bash
22
42
  mkdir -p ~/.config/systemd/user
23
43
  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
44
+ cp "$(npm root -g)/opencode-telegram-bridge/systemd/opencode-telegram-bridge.service" \
45
+ ~/.config/systemd/user/opencode-telegram-bridge.service
46
+ cp "$(npm root -g)/opencode-telegram-bridge/systemd/opencode-telegram-bridge.env.example" \
47
+ ~/.config/opencode-telegram-bridge/opencode-telegram-bridge.env
26
48
  ```
27
49
 
28
- 3. Edit the env file:
50
+ 4. Edit the env file:
29
51
 
30
52
  ```bash
31
53
  nano ~/.config/opencode-telegram-bridge/opencode-telegram-bridge.env
32
54
  ```
33
55
 
34
- 4. Update the service path if needed:
56
+ 5. Set the correct ExecStart path in the service file:
57
+
58
+ - The default is `ExecStart=/usr/bin/opencode-telegram-bridge`.
59
+ - Replace it with the output of:
35
60
 
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`.
61
+ ```bash
62
+ command -v opencode-telegram-bridge
63
+ ```
38
64
 
39
- 5. Enable and start:
65
+ 6. Enable and start:
40
66
 
41
67
  ```bash
42
68
  systemctl --user daemon-reload
@@ -0,0 +1,26 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>Label</key>
6
+ <string>com.opencode.server</string>
7
+ <key>ProgramArguments</key>
8
+ <array>
9
+ <string>/path/to/opencode</string>
10
+ <string>serve</string>
11
+ </array>
12
+ <key>EnvironmentVariables</key>
13
+ <dict>
14
+ <key>PATH</key>
15
+ <string>/path/to/node/dir:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin</string>
16
+ </dict>
17
+ <key>RunAtLoad</key>
18
+ <true/>
19
+ <key>KeepAlive</key>
20
+ <true/>
21
+ <key>StandardOutPath</key>
22
+ <string>~/Library/Logs/opencode-server.log</string>
23
+ <key>StandardErrorPath</key>
24
+ <string>~/Library/Logs/opencode-server.log</string>
25
+ </dict>
26
+ </plist>
@@ -0,0 +1,38 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>Label</key>
6
+ <string>com.opencode.telegram-bridge</string>
7
+ <key>ProgramArguments</key>
8
+ <array>
9
+ <string>/path/to/node</string>
10
+ <string>/path/to/opencode-telegram-bridge/dist/cli.js</string>
11
+ </array>
12
+ <key>EnvironmentVariables</key>
13
+ <dict>
14
+ <key>TELEGRAM_BOT_TOKEN</key>
15
+ <string>REPLACE_ME</string>
16
+ <key>TELEGRAM_ALLOWED_USER_ID</key>
17
+ <string>REPLACE_ME</string>
18
+ <key>OPENCODE_SERVER_URL</key>
19
+ <string>http://127.0.0.1:4096</string>
20
+ <key>OPENCODE_SERVER_USERNAME</key>
21
+ <string>opencode</string>
22
+ <key>OPENCODE_SERVER_PASSWORD</key>
23
+ <string></string>
24
+ <key>OPENCODE_PROMPT_TIMEOUT_MS</key>
25
+ <string>600000</string>
26
+ <key>TELEGRAM_HANDLER_TIMEOUT_MS</key>
27
+ <string>630000</string>
28
+ </dict>
29
+ <key>RunAtLoad</key>
30
+ <true/>
31
+ <key>KeepAlive</key>
32
+ <true/>
33
+ <key>StandardOutPath</key>
34
+ <string>~/Library/Logs/opencode-telegram-bridge.log</string>
35
+ <key>StandardErrorPath</key>
36
+ <string>~/Library/Logs/opencode-telegram-bridge.log</string>
37
+ </dict>
38
+ </plist>
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.3",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -11,6 +11,7 @@
11
11
  "dist/",
12
12
  "docs/",
13
13
  "systemd/",
14
+ "launchd/",
14
15
  ".env.example",
15
16
  "README.md"
16
17
  ],
@@ -30,10 +31,26 @@
30
31
  "test:watch": "vitest",
31
32
  "test:coverage": "vitest run --coverage"
32
33
  },
33
- "keywords": [],
34
- "author": "",
35
- "license": "ISC",
36
- "description": "",
34
+ "description": "Telegram bot bridge for the OpenCode server",
35
+ "keywords": [
36
+ "opencode",
37
+ "telegram",
38
+ "bot",
39
+ "bridge",
40
+ "telegraf",
41
+ "systemd",
42
+ "cli"
43
+ ],
44
+ "author": "Gabriel Trigo",
45
+ "license": "MIT",
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "git+https://github.com/gabriel-trigo/opencode-telegram-bridge.git"
49
+ },
50
+ "bugs": {
51
+ "url": "https://github.com/gabriel-trigo/opencode-telegram-bridge/issues"
52
+ },
53
+ "homepage": "https://gabriel-trigo.github.io/opencode-telegram-bridge/",
37
54
  "devDependencies": {
38
55
  "@changesets/cli": "^2.29.8",
39
56
  "@types/better-sqlite3": "^7.6.13",