@matthias-hausberger/beige 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/LICENSE.md +8 -0
  2. package/README.md +183 -0
  3. package/dist/channels/registry.d.ts +14 -0
  4. package/dist/channels/registry.d.ts.map +1 -0
  5. package/dist/channels/registry.js +14 -0
  6. package/dist/channels/registry.js.map +1 -0
  7. package/dist/channels/telegram.d.ts +92 -0
  8. package/dist/channels/telegram.d.ts.map +1 -0
  9. package/dist/channels/telegram.js +469 -0
  10. package/dist/channels/telegram.js.map +1 -0
  11. package/dist/channels/tui.d.ts +8 -0
  12. package/dist/channels/tui.d.ts.map +1 -0
  13. package/dist/channels/tui.js +574 -0
  14. package/dist/channels/tui.js.map +1 -0
  15. package/dist/cli.d.ts +23 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +571 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/config/loader.d.ts +6 -0
  20. package/dist/config/loader.d.ts.map +1 -0
  21. package/dist/config/loader.js +103 -0
  22. package/dist/config/loader.js.map +1 -0
  23. package/dist/config/loader.spec.d.ts +2 -0
  24. package/dist/config/loader.spec.d.ts.map +1 -0
  25. package/dist/config/loader.spec.js +195 -0
  26. package/dist/config/loader.spec.js.map +1 -0
  27. package/dist/config/schema.d.ts +107 -0
  28. package/dist/config/schema.d.ts.map +1 -0
  29. package/dist/config/schema.js +42 -0
  30. package/dist/config/schema.js.map +1 -0
  31. package/dist/config/schema.spec.d.ts +2 -0
  32. package/dist/config/schema.spec.d.ts.map +1 -0
  33. package/dist/config/schema.spec.js +180 -0
  34. package/dist/config/schema.spec.js.map +1 -0
  35. package/dist/gateway/agent-manager.d.ts +138 -0
  36. package/dist/gateway/agent-manager.d.ts.map +1 -0
  37. package/dist/gateway/agent-manager.js +532 -0
  38. package/dist/gateway/agent-manager.js.map +1 -0
  39. package/dist/gateway/api.d.ts +43 -0
  40. package/dist/gateway/api.d.ts.map +1 -0
  41. package/dist/gateway/api.js +256 -0
  42. package/dist/gateway/api.js.map +1 -0
  43. package/dist/gateway/api.spec.d.ts +2 -0
  44. package/dist/gateway/api.spec.d.ts.map +1 -0
  45. package/dist/gateway/api.spec.js +256 -0
  46. package/dist/gateway/api.spec.js.map +1 -0
  47. package/dist/gateway/audit.d.ts +38 -0
  48. package/dist/gateway/audit.d.ts.map +1 -0
  49. package/dist/gateway/audit.js +82 -0
  50. package/dist/gateway/audit.js.map +1 -0
  51. package/dist/gateway/audit.spec.d.ts +2 -0
  52. package/dist/gateway/audit.spec.d.ts.map +1 -0
  53. package/dist/gateway/audit.spec.js +212 -0
  54. package/dist/gateway/audit.spec.js.map +1 -0
  55. package/dist/gateway/gateway.d.ts +27 -0
  56. package/dist/gateway/gateway.d.ts.map +1 -0
  57. package/dist/gateway/gateway.js +158 -0
  58. package/dist/gateway/gateway.js.map +1 -0
  59. package/dist/gateway/policy.d.ts +27 -0
  60. package/dist/gateway/policy.d.ts.map +1 -0
  61. package/dist/gateway/policy.js +40 -0
  62. package/dist/gateway/policy.js.map +1 -0
  63. package/dist/gateway/policy.spec.d.ts +2 -0
  64. package/dist/gateway/policy.spec.d.ts.map +1 -0
  65. package/dist/gateway/policy.spec.js +121 -0
  66. package/dist/gateway/policy.spec.js.map +1 -0
  67. package/dist/gateway/provider-health.d.ts +83 -0
  68. package/dist/gateway/provider-health.d.ts.map +1 -0
  69. package/dist/gateway/provider-health.js +219 -0
  70. package/dist/gateway/provider-health.js.map +1 -0
  71. package/dist/gateway/provider-health.spec.d.ts +2 -0
  72. package/dist/gateway/provider-health.spec.d.ts.map +1 -0
  73. package/dist/gateway/provider-health.spec.js +278 -0
  74. package/dist/gateway/provider-health.spec.js.map +1 -0
  75. package/dist/gateway/session-settings.d.ts +62 -0
  76. package/dist/gateway/session-settings.d.ts.map +1 -0
  77. package/dist/gateway/session-settings.js +91 -0
  78. package/dist/gateway/session-settings.js.map +1 -0
  79. package/dist/gateway/session-settings.spec.d.ts +2 -0
  80. package/dist/gateway/session-settings.spec.d.ts.map +1 -0
  81. package/dist/gateway/session-settings.spec.js +141 -0
  82. package/dist/gateway/session-settings.spec.js.map +1 -0
  83. package/dist/gateway/sessions.d.ts +68 -0
  84. package/dist/gateway/sessions.d.ts.map +1 -0
  85. package/dist/gateway/sessions.js +177 -0
  86. package/dist/gateway/sessions.js.map +1 -0
  87. package/dist/gateway/sessions.spec.d.ts +2 -0
  88. package/dist/gateway/sessions.spec.d.ts.map +1 -0
  89. package/dist/gateway/sessions.spec.js +190 -0
  90. package/dist/gateway/sessions.spec.js.map +1 -0
  91. package/dist/index.d.ts +11 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +10 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/install.d.ts +39 -0
  96. package/dist/install.d.ts.map +1 -0
  97. package/dist/install.js +144 -0
  98. package/dist/install.js.map +1 -0
  99. package/dist/sandbox/manager.d.ts +63 -0
  100. package/dist/sandbox/manager.d.ts.map +1 -0
  101. package/dist/sandbox/manager.js +294 -0
  102. package/dist/sandbox/manager.js.map +1 -0
  103. package/dist/skills/index.d.ts +2 -0
  104. package/dist/skills/index.d.ts.map +1 -0
  105. package/dist/skills/index.js +2 -0
  106. package/dist/skills/index.js.map +1 -0
  107. package/dist/skills/registry.d.ts +11 -0
  108. package/dist/skills/registry.d.ts.map +1 -0
  109. package/dist/skills/registry.js +86 -0
  110. package/dist/skills/registry.js.map +1 -0
  111. package/dist/skills/registry.spec.d.ts +2 -0
  112. package/dist/skills/registry.spec.d.ts.map +1 -0
  113. package/dist/skills/registry.spec.js +220 -0
  114. package/dist/skills/registry.spec.js.map +1 -0
  115. package/dist/socket/protocol.d.ts +21 -0
  116. package/dist/socket/protocol.d.ts.map +1 -0
  117. package/dist/socket/protocol.js +7 -0
  118. package/dist/socket/protocol.js.map +1 -0
  119. package/dist/socket/protocol.spec.d.ts +2 -0
  120. package/dist/socket/protocol.spec.d.ts.map +1 -0
  121. package/dist/socket/protocol.spec.js +135 -0
  122. package/dist/socket/protocol.spec.js.map +1 -0
  123. package/dist/socket/server.d.ts +21 -0
  124. package/dist/socket/server.d.ts.map +1 -0
  125. package/dist/socket/server.js +133 -0
  126. package/dist/socket/server.js.map +1 -0
  127. package/dist/socket/server.spec.d.ts +2 -0
  128. package/dist/socket/server.spec.d.ts.map +1 -0
  129. package/dist/socket/server.spec.js +333 -0
  130. package/dist/socket/server.spec.js.map +1 -0
  131. package/dist/test/fixtures.d.ts +47 -0
  132. package/dist/test/fixtures.d.ts.map +1 -0
  133. package/dist/test/fixtures.js +144 -0
  134. package/dist/test/fixtures.js.map +1 -0
  135. package/dist/toolkit/index.d.ts +4 -0
  136. package/dist/toolkit/index.d.ts.map +1 -0
  137. package/dist/toolkit/index.js +4 -0
  138. package/dist/toolkit/index.js.map +1 -0
  139. package/dist/toolkit/installer.d.ts +26 -0
  140. package/dist/toolkit/installer.d.ts.map +1 -0
  141. package/dist/toolkit/installer.js +247 -0
  142. package/dist/toolkit/installer.js.map +1 -0
  143. package/dist/toolkit/registry.d.ts +19 -0
  144. package/dist/toolkit/registry.d.ts.map +1 -0
  145. package/dist/toolkit/registry.js +119 -0
  146. package/dist/toolkit/registry.js.map +1 -0
  147. package/dist/toolkit/registry.spec.d.ts +2 -0
  148. package/dist/toolkit/registry.spec.d.ts.map +1 -0
  149. package/dist/toolkit/registry.spec.js +194 -0
  150. package/dist/toolkit/registry.spec.js.map +1 -0
  151. package/dist/toolkit/schema.d.ts +61 -0
  152. package/dist/toolkit/schema.d.ts.map +1 -0
  153. package/dist/toolkit/schema.js +116 -0
  154. package/dist/toolkit/schema.js.map +1 -0
  155. package/dist/toolkit/schema.spec.d.ts +2 -0
  156. package/dist/toolkit/schema.spec.d.ts.map +1 -0
  157. package/dist/toolkit/schema.spec.js +202 -0
  158. package/dist/toolkit/schema.spec.js.map +1 -0
  159. package/dist/tools/core.d.ts +10 -0
  160. package/dist/tools/core.d.ts.map +1 -0
  161. package/dist/tools/core.js +246 -0
  162. package/dist/tools/core.js.map +1 -0
  163. package/dist/tools/core.spec.d.ts +2 -0
  164. package/dist/tools/core.spec.d.ts.map +1 -0
  165. package/dist/tools/core.spec.js +315 -0
  166. package/dist/tools/core.spec.js.map +1 -0
  167. package/dist/tools/registry.d.ts +15 -0
  168. package/dist/tools/registry.d.ts.map +1 -0
  169. package/dist/tools/registry.js +62 -0
  170. package/dist/tools/registry.js.map +1 -0
  171. package/dist/tools/registry.spec.d.ts +2 -0
  172. package/dist/tools/registry.spec.d.ts.map +1 -0
  173. package/dist/tools/registry.spec.js +228 -0
  174. package/dist/tools/registry.spec.js.map +1 -0
  175. package/dist/tools/runner.d.ts +25 -0
  176. package/dist/tools/runner.d.ts.map +1 -0
  177. package/dist/tools/runner.js +35 -0
  178. package/dist/tools/runner.js.map +1 -0
  179. package/dist/tools/runner.spec.d.ts +2 -0
  180. package/dist/tools/runner.spec.d.ts.map +1 -0
  181. package/dist/tools/runner.spec.js +129 -0
  182. package/dist/tools/runner.spec.js.map +1 -0
  183. package/dist/types/session.d.ts +8 -0
  184. package/dist/types/session.d.ts.map +1 -0
  185. package/dist/types/session.js +23 -0
  186. package/dist/types/session.js.map +1 -0
  187. package/package.json +76 -0
  188. package/tools/README.md +1 -0
  189. package/tools/kv/README.md +150 -0
  190. package/tools/kv/index.ts +149 -0
  191. package/tools/kv/tool.json +23 -0
  192. package/tools/message/README.md +53 -0
  193. package/tools/message/index.ts +183 -0
  194. package/tools/message/tool.json +11 -0
package/LICENSE.md ADDED
@@ -0,0 +1,8 @@
1
+ Copyright 2026 Matthias Hausberger
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8
+
package/README.md ADDED
@@ -0,0 +1,183 @@
1
+ # Beige
2
+
3
+ Secure, sandboxed agent system. Let agents write and execute code — safely.
4
+
5
+ ## What is Beige?
6
+
7
+ Beige is an open-source agent gateway that runs AI agents inside Docker sandboxes. Agents have 4 core tools (`read`, `write`, `patch`, `exec`) and can use additional tools exposed as executables. All tool calls route through the gateway for policy enforcement and audit logging.
8
+
9
+ **Key principles:**
10
+ - 🔒 **Sandboxed** — Every agent runs in its own Docker container. No access to host env vars, secrets, or files.
11
+ - 📋 **Audited** — Every tool call is logged with agent identity, args, timing, and permission decision.
12
+ - 🛡️ **Policy-enforced** — Deny by default. Agents can only use tools explicitly granted in config.
13
+ - 🔌 **Extensible** — Add tools as simple packages. They mount into sandboxes read-only.
14
+ - 🤖 **LLM-agnostic** — Uses [pi SDK](https://pi.dev) for LLM interaction. Supports Anthropic, OpenAI, ZAI, and more.
15
+
16
+ ## Quick Start
17
+
18
+ Beige has two install modes. Pick the one that fits you.
19
+
20
+ ### Option A — npm global (recommended for most users)
21
+
22
+ **Prerequisites:** Node.js 22+, Docker
23
+
24
+ ```bash
25
+ npm install -g matthias-hausberger/beige
26
+ ```
27
+
28
+ On first run, beige automatically creates `~/.beige/` with a default config and the bundled KV tool:
29
+
30
+ ```bash
31
+ export ANTHROPIC_API_KEY="sk-ant-..."
32
+
33
+ # Shell 1 — start the gateway
34
+ beige gateway start
35
+
36
+ # Shell 2 — open the TUI
37
+ beige tui
38
+ ```
39
+
40
+ You can also run setup explicitly:
41
+
42
+ ```bash
43
+ beige setup
44
+ ```
45
+
46
+ ### Option B — Source install (contributors / power users)
47
+
48
+ **Prerequisites:** Node.js 22+, Docker
49
+
50
+ ```bash
51
+ git clone https://github.com/matthias-hausberger/beige.git
52
+ cd beige
53
+ npm install
54
+ npm run build:sandbox # build the sandbox Docker image
55
+ ```
56
+
57
+ No files are written outside the repo. Configure manually:
58
+
59
+ ```bash
60
+ cp examples/config.json5 ~/.beige/config.json5
61
+ # Edit ~/.beige/config.json5: set your API key and adjust tool paths
62
+ export ANTHROPIC_API_KEY="sk-ant-..."
63
+
64
+ # Shell 1
65
+ npx tsx src/cli.ts gateway start --foreground
66
+
67
+ # Shell 2
68
+ npx tsx src/cli.ts tui
69
+ ```
70
+
71
+ See [docs/installation.md](docs/installation.md) for a full comparison of both modes.
72
+
73
+ ### TUI Commands
74
+
75
+ Once inside the TUI, these slash commands are available:
76
+
77
+ | Command | Description |
78
+ |---------|-------------|
79
+ | `/new` | Start a fresh conversation session |
80
+ | `/resume` | Pick a previous session to continue |
81
+ | `/sessions` | List saved sessions for the current agent |
82
+ | `/agent [name]` | Switch to a different beige agent (with tab-completion) |
83
+
84
+ ## Architecture
85
+
86
+ ```
87
+ Channels
88
+ ├── TUI (pi interactive mode)
89
+ └── Telegram bot
90
+
91
+
92
+ Gateway (always running)
93
+ ├── Agent Manager → LLM (via pi SDK) → Core Tools
94
+ │ │
95
+ │ ▼
96
+ │ Docker Sandbox
97
+ │ ├── /workspace (rw)
98
+ │ ├── /tools/bin (ro)
99
+ │ └── /tools/packages (ro)
100
+
101
+ └── Unix Socket ← Tool launchers call back to gateway
102
+
103
+
104
+ Policy Engine → Audit Logger → Tool Runner
105
+ ```
106
+
107
+ See [docs/](docs/) for full documentation:
108
+ - [Installation](docs/installation.md) — npm vs source install, setup flow, detection logic
109
+ - [System Overview](docs/system-overview.md) — architecture diagrams
110
+ - [Request Flows](docs/request-flows.md) — sequence diagrams for every request type
111
+ - [Security Model](docs/security-model.md) — sandboxing, identity, threat model
112
+ - [Tools](docs/tools.md) — how to write and use tools
113
+ - [Configuration](docs/configuration.md) — full config reference
114
+
115
+ ## Configuration
116
+
117
+ Config is a single JSON5 file (JSON with comments) at `~/.beige/config.json5`. See [examples/config.json5](examples/config.json5) for a template.
118
+
119
+ ```json5
120
+ {
121
+ llm: {
122
+ providers: {
123
+ anthropic: { apiKey: "${ANTHROPIC_API_KEY}" },
124
+ },
125
+ },
126
+ tools: {
127
+ kv: { path: "./tools/kv", target: "gateway" },
128
+ },
129
+ agents: {
130
+ assistant: {
131
+ model: { provider: "anthropic", model: "claude-sonnet-4-20250514" },
132
+ tools: ["kv"],
133
+ },
134
+ },
135
+ channels: {
136
+ telegram: {
137
+ enabled: true,
138
+ token: "${TELEGRAM_BOT_TOKEN}",
139
+ allowedUsers: [123456789],
140
+ agentMapping: { default: "assistant" },
141
+ },
142
+ },
143
+ }
144
+ ```
145
+
146
+ ## Tools
147
+
148
+ Tools are simple packages:
149
+
150
+ ```
151
+ tools/my-tool/
152
+ ├── tool.json # Name, description, commands
153
+ ├── index.ts # Handler (gateway-targeted) or logic (sandbox-targeted)
154
+ └── README.md # Documentation (mounted into sandbox for agent context)
155
+ ```
156
+
157
+ The agent calls tools via `exec /tools/bin/my-tool <args>`. The launcher routes through the gateway socket for policy checks and execution.
158
+
159
+ ## Security Model
160
+
161
+ 1. **Sandbox isolation**: Agents run in Docker containers with no host env access
162
+ 2. **Read-only mounts**: Tool code and launchers are mounted read-only
163
+ 3. **Socket identity**: Agent identity derived from Unix socket (not payload)
164
+ 4. **Policy engine**: Deny by default, explicit allow per agent per tool
165
+ 5. **Audit log**: Every tool invocation logged as JSONL
166
+
167
+ ## Project Status
168
+
169
+ **Phase 1 (current):** Core gateway + KV tool MVP
170
+ - [x] Config system
171
+ - [x] Docker sandbox manager
172
+ - [x] Core tools (read, write, patch, exec)
173
+ - [x] Unix socket server for tool routing
174
+ - [x] Policy engine
175
+ - [x] Audit logging
176
+ - [x] KV tool (gateway-hosted)
177
+ - [x] Telegram channel (GrammY)
178
+ - [x] Interactive TUI (via pi SDK InteractiveMode)
179
+ - [x] LLM integration via pi SDK
180
+
181
+ ## License
182
+
183
+ MIT
@@ -0,0 +1,14 @@
1
+ export interface SendMessageOptions {
2
+ parseMode?: "html" | "markdown";
3
+ }
4
+ export interface ChannelAdapter {
5
+ sendMessage(chatId: string, threadId: string | undefined, text: string, options?: SendMessageOptions): Promise<void>;
6
+ supportsMessaging(): boolean;
7
+ }
8
+ export declare class ChannelRegistry {
9
+ private channels;
10
+ register(channel: string, adapter: ChannelAdapter): void;
11
+ get(channel: string): ChannelAdapter | undefined;
12
+ has(channel: string): boolean;
13
+ }
14
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/channels/registry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,CACT,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,iBAAiB,IAAI,OAAO,CAAC;CAC9B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAqC;IAErD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAKxD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIhD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAG9B"}
@@ -0,0 +1,14 @@
1
+ export class ChannelRegistry {
2
+ channels = new Map();
3
+ register(channel, adapter) {
4
+ this.channels.set(channel, adapter);
5
+ console.log(`[CHANNELS] Registered channel adapter: ${channel}`);
6
+ }
7
+ get(channel) {
8
+ return this.channels.get(channel);
9
+ }
10
+ has(channel) {
11
+ return this.channels.has(channel);
12
+ }
13
+ }
14
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/channels/registry.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,eAAe;IAClB,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IAErD,QAAQ,CAAC,OAAe,EAAE,OAAuB;QAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,0CAA0C,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,92 @@
1
+ import type { TelegramChannelConfig } from "../config/schema.js";
2
+ import type { AgentManager } from "../gateway/agent-manager.js";
3
+ import { BeigeSessionStore } from "../gateway/sessions.js";
4
+ import type { SessionSettingsStore } from "../gateway/session-settings.js";
5
+ import type { ChannelRegistry, ChannelAdapter, SendMessageOptions } from "./registry.js";
6
+ /**
7
+ * Telegram channel adapter using GrammY.
8
+ *
9
+ * Session model:
10
+ * - Each chat gets a persistent session (survives gateway restarts).
11
+ * - If a chat has threads (forum topics), each thread gets its own session.
12
+ * - /new starts a fresh session in the current chat/thread.
13
+ * - /start shows a welcome message.
14
+ *
15
+ * Channel commands (handled locally, NOT forwarded to the LLM):
16
+ * - /start — welcome message + command overview
17
+ * - /new — start a new conversation session
18
+ * - /status — show session info + current settings
19
+ * - /v on|off — toggle verbose mode for this session (shorthand)
20
+ * - /verbose on|off — toggle verbose mode for this session
21
+ * - /s on|off — toggle streaming mode for this session (shorthand)
22
+ * - /streaming on|off — toggle streaming mode for this session
23
+ *
24
+ * Verbose mode:
25
+ * - When ON, the bot sends a small notification whenever the agent calls a tool.
26
+ * - Default is OFF (configurable via channels.telegram.defaults.verbose in config.json5).
27
+ * - Persisted per-session in ~/.beige/sessions/session-settings.json.
28
+ *
29
+ * Streaming mode:
30
+ * - When ON (default), responses are streamed in real-time (message edits as LLM generates).
31
+ * - When OFF, the full response is sent once the LLM finishes.
32
+ * - Default is ON (configurable via channels.telegram.defaults.streaming in config.json5).
33
+ * - Persisted per-session in ~/.beige/sessions/session-settings.json.
34
+ *
35
+ * Bot command registration:
36
+ * - On startup, the bot deletes all old commands and registers the current set.
37
+ */
38
+ export declare class TelegramChannel implements ChannelAdapter {
39
+ private agentManager;
40
+ private sessionStore;
41
+ private settingsStore;
42
+ private channelRegistry?;
43
+ private bot;
44
+ private config;
45
+ constructor(telegramConfig: TelegramChannelConfig, agentManager: AgentManager, sessionStore: BeigeSessionStore, settingsStore: SessionSettingsStore, channelRegistry?: ChannelRegistry | undefined);
46
+ private setupHandlers;
47
+ /**
48
+ * Handle /verbose and /v commands.
49
+ * Parses "on"/"off" argument and persists the setting for this session.
50
+ */
51
+ private handleVerboseCommand;
52
+ /**
53
+ * Resolve the effective verbose setting for a session (layered: default → config → override).
54
+ */
55
+ private resolveVerbose;
56
+ /**
57
+ * Handle /streaming and /s commands.
58
+ * Parses "on"/"off" argument and persists the setting for this session.
59
+ */
60
+ private handleStreamingCommand;
61
+ /**
62
+ * Resolve the effective streaming setting for a session (layered: default → config → override).
63
+ */
64
+ private resolveStreaming;
65
+ /**
66
+ * Create an OnToolStart callback that sends a Telegram notification.
67
+ * Uses a GrammY context for thread-aware replies.
68
+ */
69
+ private makeToolStartHandler;
70
+ /**
71
+ * Create an OnToolStart callback using raw chat/thread IDs.
72
+ * Used when toggling verbose on mid-session (no fresh ctx available).
73
+ */
74
+ private makeToolStartHandlerForKey;
75
+ private buildToolStartHandler;
76
+ /**
77
+ * Resolve which agent to use for a given user.
78
+ */
79
+ private resolveAgent;
80
+ private sessionKeyFromCtx;
81
+ supportsMessaging(): boolean;
82
+ sendMessage(chatId: string, threadId: string | undefined, text: string, options?: SendMessageOptions): Promise<void>;
83
+ start(): Promise<void>;
84
+ stop(): Promise<void>;
85
+ /**
86
+ * Register the bot's command list with Telegram.
87
+ * First deletes all existing commands, then sets the current ones.
88
+ * This ensures stale commands from old bot versions are removed.
89
+ */
90
+ private registerBotCommands;
91
+ }
92
+ //# sourceMappingURL=telegram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../src/channels/telegram.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEzF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,eAAgB,YAAW,cAAc;IAMlD,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,eAAe,CAAC;IAR1B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,MAAM,CAAwB;gBAGpC,cAAc,EAAE,qBAAqB,EAC7B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,iBAAiB,EAC/B,aAAa,EAAE,oBAAoB,EACnC,eAAe,CAAC,EAAE,eAAe,YAAA;IAQ3C,OAAO,CAAC,aAAa;IAiMrB;;;OAGG;YACW,oBAAoB;IA0ClC;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;;OAGG;YACW,sBAAsB;IAgCpC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IASlC,OAAO,CAAC,qBAAqB;IAoB7B;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,iBAAiB;IAQzB,iBAAiB,IAAI,OAAO;IAItB,WAAW,CACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,IAAI,CAAC;IA2BV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B;;;;OAIG;YACW,mBAAmB;CAmClC"}