@deadragdoll/tellymcp 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 (124) hide show
  1. package/.env.example.client +93 -0
  2. package/.env.example.gateway +120 -0
  3. package/CHANGELOG.md +155 -0
  4. package/LICENSE +21 -0
  5. package/README-ru.md +338 -0
  6. package/README.md +1262 -0
  7. package/STANDALONE-ru.md +266 -0
  8. package/STANDALONE.md +266 -0
  9. package/TOOLS.md +1296 -0
  10. package/config/templates/env.both.template +83 -0
  11. package/config/templates/env.client.template +60 -0
  12. package/config/templates/env.gateway.template +82 -0
  13. package/dist/cli.js +636 -0
  14. package/dist/index.js +17 -0
  15. package/dist/lib/logfeed/store.js +52 -0
  16. package/dist/lib/middlewares/tracer.js +172 -0
  17. package/dist/lib/mixins/db.js +267 -0
  18. package/dist/lib/mixins/logfeed.js +34 -0
  19. package/dist/lib/mixins/session.errors.js +142 -0
  20. package/dist/lib/moleculer.js +2 -0
  21. package/dist/lib/trace.js +147 -0
  22. package/dist/lib/traceContext.js +116 -0
  23. package/dist/moleculer.config.js +274 -0
  24. package/dist/services/features/telegram-mcp/approval.service.js +33 -0
  25. package/dist/services/features/telegram-mcp/browser.service.js +42 -0
  26. package/dist/services/features/telegram-mcp/collaboration.service.js +53 -0
  27. package/dist/services/features/telegram-mcp/ensuredb.service.js +337 -0
  28. package/dist/services/features/telegram-mcp/gateway-delivery.service.js +378 -0
  29. package/dist/services/features/telegram-mcp/gateway-loopback.js +10 -0
  30. package/dist/services/features/telegram-mcp/gateway-rmq.service.js +294 -0
  31. package/dist/services/features/telegram-mcp/gateway-socket.service.js +1463 -0
  32. package/dist/services/features/telegram-mcp/gateway.service.js +1141 -0
  33. package/dist/services/features/telegram-mcp/inbox.service.js +33 -0
  34. package/dist/services/features/telegram-mcp/mcp-http.service.js +76 -0
  35. package/dist/services/features/telegram-mcp/mcp-server.service.js +127 -0
  36. package/dist/services/features/telegram-mcp/notify.service.js +33 -0
  37. package/dist/services/features/telegram-mcp/pair.service.js +33 -0
  38. package/dist/services/features/telegram-mcp/runtime.service.js +36 -0
  39. package/dist/services/features/telegram-mcp/session-context.service.js +33 -0
  40. package/dist/services/features/telegram-mcp/src/app/bootstrap/runtime.js +103 -0
  41. package/dist/services/features/telegram-mcp/src/app/config/env.js +317 -0
  42. package/dist/services/features/telegram-mcp/src/app/http.js +774 -0
  43. package/dist/services/features/telegram-mcp/src/app/index.js +2 -0
  44. package/dist/services/features/telegram-mcp/src/app/providers/mcp/server.js +13 -0
  45. package/dist/services/features/telegram-mcp/src/app/providers/redis/client.js +18 -0
  46. package/dist/services/features/telegram-mcp/src/app/webapp/assets.js +740 -0
  47. package/dist/services/features/telegram-mcp/src/app/webapp/auth.js +267 -0
  48. package/dist/services/features/telegram-mcp/src/app/webapp/relay.js +69 -0
  49. package/dist/services/features/telegram-mcp/src/app/webapp/tmux.js +9 -0
  50. package/dist/services/features/telegram-mcp/src/entities/auth/model/types.js +2 -0
  51. package/dist/services/features/telegram-mcp/src/entities/browser/model/types.js +2 -0
  52. package/dist/services/features/telegram-mcp/src/entities/collaboration/model/types.js +2 -0
  53. package/dist/services/features/telegram-mcp/src/entities/inbox/model/types.js +2 -0
  54. package/dist/services/features/telegram-mcp/src/entities/request/model/schema.js +545 -0
  55. package/dist/services/features/telegram-mcp/src/entities/request/model/types.js +2 -0
  56. package/dist/services/features/telegram-mcp/src/entities/session/model/types.js +2 -0
  57. package/dist/services/features/telegram-mcp/src/features/ask-user/model/askUserTelegram.js +33 -0
  58. package/dist/services/features/telegram-mcp/src/features/browser/model/browserClearLogsTool.js +28 -0
  59. package/dist/services/features/telegram-mcp/src/features/browser/model/browserClickTool.js +28 -0
  60. package/dist/services/features/telegram-mcp/src/features/browser/model/browserCloseTool.js +28 -0
  61. package/dist/services/features/telegram-mcp/src/features/browser/model/browserComputedStyleTool.js +28 -0
  62. package/dist/services/features/telegram-mcp/src/features/browser/model/browserConsoleTool.js +28 -0
  63. package/dist/services/features/telegram-mcp/src/features/browser/model/browserDomTool.js +28 -0
  64. package/dist/services/features/telegram-mcp/src/features/browser/model/browserErrorsTool.js +28 -0
  65. package/dist/services/features/telegram-mcp/src/features/browser/model/browserFillTool.js +28 -0
  66. package/dist/services/features/telegram-mcp/src/features/browser/model/browserNetworkFailuresTool.js +28 -0
  67. package/dist/services/features/telegram-mcp/src/features/browser/model/browserOpenTool.js +33 -0
  68. package/dist/services/features/telegram-mcp/src/features/browser/model/browserPressTool.js +28 -0
  69. package/dist/services/features/telegram-mcp/src/features/browser/model/browserReloadTool.js +28 -0
  70. package/dist/services/features/telegram-mcp/src/features/browser/model/browserScreenshotTool.js +28 -0
  71. package/dist/services/features/telegram-mcp/src/features/browser/model/browserService.js +689 -0
  72. package/dist/services/features/telegram-mcp/src/features/browser/model/browserWaitForTool.js +28 -0
  73. package/dist/services/features/telegram-mcp/src/features/browser/model/browserWaitForUrlTool.js +28 -0
  74. package/dist/services/features/telegram-mcp/src/features/collaboration/model/backend.js +2 -0
  75. package/dist/services/features/telegram-mcp/src/features/collaboration/model/collaborationService.js +26 -0
  76. package/dist/services/features/telegram-mcp/src/features/collaboration/model/localCollaborationBackend.js +390 -0
  77. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerFileService.js +102 -0
  78. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerFileTool.js +33 -0
  79. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerNoteTool.js +33 -0
  80. package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayCollaborationBackend.js +69 -0
  81. package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/gatewayHttpService.js +657 -0
  82. package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/gatewayReplyResolution.js +17 -0
  83. package/dist/services/features/telegram-mcp/src/features/inbox/model/deleteTelegramInboxMessageTool.js +33 -0
  84. package/dist/services/features/telegram-mcp/src/features/inbox/model/getTelegramInboxCountTool.js +33 -0
  85. package/dist/services/features/telegram-mcp/src/features/inbox/model/getTelegramInboxTool.js +33 -0
  86. package/dist/services/features/telegram-mcp/src/features/inbox/model/inboxService.js +77 -0
  87. package/dist/services/features/telegram-mcp/src/features/notify/model/notifyService.js +93 -0
  88. package/dist/services/features/telegram-mcp/src/features/notify/model/notifyTelegramTool.js +33 -0
  89. package/dist/services/features/telegram-mcp/src/features/pair-session/model/clearSessionPairingTool.js +33 -0
  90. package/dist/services/features/telegram-mcp/src/features/pair-session/model/createSessionPairCodeTool.js +33 -0
  91. package/dist/services/features/telegram-mcp/src/features/pair-session/model/generatePairCode.js +202 -0
  92. package/dist/services/features/telegram-mcp/src/features/session-context/model/clearSessionContextTool.js +33 -0
  93. package/dist/services/features/telegram-mcp/src/features/session-context/model/getSessionContextTool.js +33 -0
  94. package/dist/services/features/telegram-mcp/src/features/session-context/model/getTmuxTargetTool.js +33 -0
  95. package/dist/services/features/telegram-mcp/src/features/session-context/model/renameSessionTool.js +33 -0
  96. package/dist/services/features/telegram-mcp/src/features/session-context/model/sessionContextService.js +409 -0
  97. package/dist/services/features/telegram-mcp/src/features/session-context/model/setSessionContextTool.js +33 -0
  98. package/dist/services/features/telegram-mcp/src/features/session-context/model/setTmuxTargetTool.js +33 -0
  99. package/dist/services/features/telegram-mcp/src/features/tools-sync/model/refreshToolsMarkdownService.js +123 -0
  100. package/dist/services/features/telegram-mcp/src/features/tools-sync/model/refreshToolsMarkdownTool.js +33 -0
  101. package/dist/services/features/telegram-mcp/src/processes/human-approval/model/orchestrator.js +243 -0
  102. package/dist/services/features/telegram-mcp/src/shared/api/storage/contract.js +2 -0
  103. package/dist/services/features/telegram-mcp/src/shared/api/tool-registry/registry.js +8 -0
  104. package/dist/services/features/telegram-mcp/src/shared/api/tool-registry/types.js +2 -0
  105. package/dist/services/features/telegram-mcp/src/shared/api/transport/contract.js +2 -0
  106. package/dist/services/features/telegram-mcp/src/shared/integrations/object-storage/minioExchangeStore.js +86 -0
  107. package/dist/services/features/telegram-mcp/src/shared/integrations/redis/stateStore.js +436 -0
  108. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/collabSemantics.js +21 -0
  109. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/collabUi.js +87 -0
  110. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/messageFormat.js +60 -0
  111. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/proxyFetch.js +46 -0
  112. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transport.js +6534 -0
  113. package/dist/services/features/telegram-mcp/src/shared/integrations/tmux/client.js +280 -0
  114. package/dist/services/features/telegram-mcp/src/shared/lib/ids/ids.js +34 -0
  115. package/dist/services/features/telegram-mcp/src/shared/lib/logger/logger.js +68 -0
  116. package/dist/services/features/telegram-mcp/src/shared/lib/project-identity/projectIdentity.js +223 -0
  117. package/dist/services/features/telegram-mcp/src/shared/lib/redact-secrets/redactSecrets.js +22 -0
  118. package/dist/services/features/telegram-mcp/src/shared/lib/truncate/truncate.js +12 -0
  119. package/dist/services/features/telegram-mcp/src/shared/lib/version/versionHandshake.js +124 -0
  120. package/dist/services/features/telegram-mcp/src/shared/types/common.js +2 -0
  121. package/dist/services/features/telegram-mcp/standalone-http.service.js +113 -0
  122. package/dist/services/features/telegram-mcp/tools-sync.service.js +33 -0
  123. package/package.json +110 -0
  124. package/scripts/postinstall.js +60 -0
@@ -0,0 +1,317 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.loadConfig = loadConfig;
37
+ const node_fs_1 = require("node:fs");
38
+ const z = __importStar(require("zod/v4"));
39
+ const envSchema = z.object({
40
+ TELEGRAM_BOT_TOKEN: z.string().min(1),
41
+ TELEGRAM_BOT_USERNAME: z.string().min(1).optional(),
42
+ TELEGRAM_POLL_INTERVAL_MS: z.coerce.number().int().positive().default(2000),
43
+ TELEGRAM_DEFAULT_TIMEOUT_SECONDS: z.coerce
44
+ .number()
45
+ .int()
46
+ .positive()
47
+ .default(900),
48
+ TELEGRAM_MAX_CONTEXT_CHARS: z.coerce.number().int().positive().default(3000),
49
+ TELEGRAM_MAX_QUESTION_CHARS: z.coerce.number().int().positive().default(1000),
50
+ TELEGRAM_MAX_MESSAGE_CHARS: z.coerce.number().int().positive().default(3900),
51
+ TELEGRAM_INBOX_BATCH_SIZE: z.coerce
52
+ .number()
53
+ .int()
54
+ .positive()
55
+ .max(100)
56
+ .default(20),
57
+ TELEGRAM_MENU_PAYLOAD_TTL_SECONDS: z.coerce
58
+ .number()
59
+ .int()
60
+ .positive()
61
+ .default(300),
62
+ REDIS_HOST: z.string().min(1),
63
+ REDIS_PORT: z.coerce.number().int().positive(),
64
+ REDIS_DB: z.coerce.number().int().nonnegative(),
65
+ REDIS_USERNAME: z.string().min(1).optional(),
66
+ REDIS_PASSWORD: z.string().min(1).optional(),
67
+ MODE: z.enum(["queue", "reject"]).default("queue"),
68
+ PAIR_CODE_TTL_SECONDS: z.coerce.number().int().positive().default(600),
69
+ PROJECT_NAME: z.string().min(1).optional(),
70
+ MCP_HTTP_HOST: z.string().min(1).default("127.0.0.1"),
71
+ MCP_HTTP_PORT: z.coerce.number().int().positive().default(8787),
72
+ MCP_HTTP_PATH: z.string().min(1).default("/mcp"),
73
+ MCP_HTTP_BEARER_TOKEN: z.string().min(1).optional(),
74
+ MCP_HTTP_ENABLE_DEBUG_ROUTES: z
75
+ .string()
76
+ .optional()
77
+ .transform((value) => value === "true"),
78
+ MCP_HTTP_ENABLE_PRUNE_ROUTE: z
79
+ .string()
80
+ .optional()
81
+ .transform((value) => value === "true"),
82
+ MCP_VFS_SCOPE: z.string().min(1).default("mcp"),
83
+ DISTRIBUTED_MODE: z.enum(["client", "gateway", "both"]).default("client"),
84
+ GATEWAY_PUBLIC_URL: z.string().url().optional(),
85
+ GATEWAY_BIND_HOST: z.string().min(1).default("127.0.0.1"),
86
+ GATEWAY_BIND_PORT: z.coerce.number().int().positive().default(8790),
87
+ GATEWAY_WS_URL: z.string().url().optional(),
88
+ GATEWAY_WS_PATH: z
89
+ .string()
90
+ .min(1)
91
+ .default(`${(process.env.ROOT_PREFIX || "/api").replace(/\/+$/u, "")}/gateway/ws`),
92
+ GATEWAY_AUTH_TOKEN: z.string().min(1).optional(),
93
+ GATEWAY_DATABASE_URL: z.string().min(1).optional(),
94
+ GATEWAY_S3_ENDPOINT: z.string().min(1).optional(),
95
+ GATEWAY_S3_BUCKET: z.string().min(1).optional(),
96
+ GATEWAY_S3_ACCESS_KEY: z.string().min(1).optional(),
97
+ GATEWAY_S3_SECRET_KEY: z.string().min(1).optional(),
98
+ RMQ_HOST: z.string().min(1).optional(),
99
+ RMQ_PORT: z.coerce.number().int().positive().optional(),
100
+ RMQ_USER: z.string().min(1).optional(),
101
+ RMQ_PASSWORD: z.string().min(1).optional(),
102
+ RMQ_VHOST: z.string().optional(),
103
+ RMQ_EXCHANGE: z.string().min(1).default("telegram_mcp.gateway"),
104
+ WEBAPP_ENABLED: z
105
+ .string()
106
+ .optional()
107
+ .transform((value) => value === "true"),
108
+ WEBAPP_BASE_PATH: z.string().min(1).default("/webapp"),
109
+ WEBAPP_PUBLIC_URL: z.string().url().optional(),
110
+ WEBAPP_INITDATA_TTL_SECONDS: z.coerce
111
+ .number()
112
+ .int()
113
+ .positive()
114
+ .default(300),
115
+ WEBAPP_SESSION_TTL_SECONDS: z.coerce
116
+ .number()
117
+ .int()
118
+ .positive()
119
+ .default(900),
120
+ WEBAPP_LAUNCH_MODE: z
121
+ .enum(["default", "expand", "fullscreen"])
122
+ .default("fullscreen"),
123
+ WEBAPP_VISIBLE_SCREENS: z.coerce.number().int().positive().default(2),
124
+ WEBAPP_POLL_INTERVAL_MS: z.coerce.number().int().positive().default(2000),
125
+ WEBAPP_ACTION_COOLDOWN_MS: z.coerce.number().int().nonnegative().default(150),
126
+ MCP_XCHANGE_DIR: z.string().min(1).default(".mcp-xchange"),
127
+ TMUX_NUDGE_ENABLED: z
128
+ .string()
129
+ .optional()
130
+ .transform((value) => value !== "false"),
131
+ TMUX_SOCKET_PATH: z.string().min(1).optional(),
132
+ TMUX_NUDGE_DEBOUNCE_SECONDS: z.coerce.number().int().positive().default(10),
133
+ TMUX_NUDGE_COOLDOWN_SECONDS: z.coerce.number().int().positive().default(30),
134
+ TMUX_NUDGE_MESSAGE: z.string().min(1).default("проверь inbox"),
135
+ TMUX_PARTNER_NUDGE_MESSAGE: z
136
+ .string()
137
+ .min(1)
138
+ .default("не inbox: прочитай SHARED_INDEX.md и partner note"),
139
+ TMUX_CAPTURE_MODE: z.enum(["visible", "lines"]).default("visible"),
140
+ TMUX_CAPTURE_LINES: z.coerce.number().int().positive().default(300),
141
+ BROWSER_ENABLED: z
142
+ .string()
143
+ .optional()
144
+ .transform((value) => value !== "false"),
145
+ BROWSER_HEADLESS: z
146
+ .string()
147
+ .optional()
148
+ .transform((value) => value === "true"),
149
+ BROWSER_DEVTOOLS: z
150
+ .string()
151
+ .optional()
152
+ .transform((value) => value === "true"),
153
+ BROWSER_ADDRESS: z.string().url().optional(),
154
+ BROWSER_TIMEOUT_MS: z.coerce.number().int().positive().default(20000),
155
+ BROWSER_MAX_EVENTS: z.coerce.number().int().positive().default(200),
156
+ BROWSER_WAIT_UNTIL: z
157
+ .enum(["load", "domcontentloaded", "networkidle", "commit"])
158
+ .default("load"),
159
+ BROWSER_EXECUTABLE_PATH: z.string().min(1).optional(),
160
+ BROWSER_CHANNEL: z.enum(["chrome", "chromium", "msedge"]).optional(),
161
+ BROWSER_SLOW_MO_MS: z.coerce.number().int().nonnegative().default(0),
162
+ PROXY_USE: z.enum(["http", "socks5"]).optional(),
163
+ HTTP_PROXY: z.string().min(1).optional(),
164
+ SOCKS5_PROXY: z.string().min(1).optional(),
165
+ LOG_LEVEL: z
166
+ .enum(["fatal", "error", "warn", "info", "debug", "trace", "silent"])
167
+ .default("info"),
168
+ });
169
+ function loadConfig() {
170
+ if ((0, node_fs_1.existsSync)(".env")) {
171
+ process.loadEnvFile(".env");
172
+ }
173
+ const parsed = envSchema.parse(process.env);
174
+ const telegramProxy = parsed.PROXY_USE === "http"
175
+ ? parsed.HTTP_PROXY
176
+ ? {
177
+ type: "http",
178
+ url: parsed.HTTP_PROXY,
179
+ }
180
+ : (() => {
181
+ throw new Error("PROXY_USE=http requires HTTP_PROXY");
182
+ })()
183
+ : parsed.PROXY_USE === "socks5"
184
+ ? parsed.SOCKS5_PROXY
185
+ ? {
186
+ type: "socks5",
187
+ url: parsed.SOCKS5_PROXY,
188
+ }
189
+ : (() => {
190
+ throw new Error("PROXY_USE=socks5 requires SOCKS5_PROXY");
191
+ })()
192
+ : undefined;
193
+ return {
194
+ telegram: {
195
+ botToken: parsed.TELEGRAM_BOT_TOKEN,
196
+ ...(parsed.TELEGRAM_BOT_USERNAME
197
+ ? { botUsername: parsed.TELEGRAM_BOT_USERNAME }
198
+ : {}),
199
+ pollIntervalMs: parsed.TELEGRAM_POLL_INTERVAL_MS,
200
+ defaultTimeoutSeconds: parsed.TELEGRAM_DEFAULT_TIMEOUT_SECONDS,
201
+ maxContextChars: parsed.TELEGRAM_MAX_CONTEXT_CHARS,
202
+ maxQuestionChars: parsed.TELEGRAM_MAX_QUESTION_CHARS,
203
+ maxMessageChars: parsed.TELEGRAM_MAX_MESSAGE_CHARS,
204
+ inboxBatchSize: parsed.TELEGRAM_INBOX_BATCH_SIZE,
205
+ menuPayloadTtlSeconds: parsed.TELEGRAM_MENU_PAYLOAD_TTL_SECONDS,
206
+ ...(telegramProxy ? { proxy: telegramProxy } : {}),
207
+ },
208
+ redis: {
209
+ host: parsed.REDIS_HOST,
210
+ port: parsed.REDIS_PORT,
211
+ db: parsed.REDIS_DB,
212
+ ...(parsed.REDIS_USERNAME ? { username: parsed.REDIS_USERNAME } : {}),
213
+ ...(parsed.REDIS_PASSWORD ? { password: parsed.REDIS_PASSWORD } : {}),
214
+ },
215
+ mode: parsed.MODE,
216
+ pairCodeTtlSeconds: parsed.PAIR_CODE_TTL_SECONDS,
217
+ mcp: {
218
+ httpHost: parsed.MCP_HTTP_HOST,
219
+ httpPort: parsed.MCP_HTTP_PORT,
220
+ httpPath: parsed.MCP_HTTP_PATH,
221
+ vfsScope: parsed.MCP_VFS_SCOPE,
222
+ ...(parsed.MCP_HTTP_BEARER_TOKEN
223
+ ? { bearerToken: parsed.MCP_HTTP_BEARER_TOKEN }
224
+ : {}),
225
+ enableDebugRoutes: parsed.MCP_HTTP_ENABLE_DEBUG_ROUTES,
226
+ enablePruneRoute: parsed.MCP_HTTP_ENABLE_PRUNE_ROUTE,
227
+ },
228
+ distributed: {
229
+ mode: parsed.DISTRIBUTED_MODE,
230
+ ...(parsed.GATEWAY_PUBLIC_URL
231
+ ? { gatewayPublicUrl: parsed.GATEWAY_PUBLIC_URL }
232
+ : {}),
233
+ gatewayBindHost: parsed.GATEWAY_BIND_HOST,
234
+ gatewayBindPort: parsed.GATEWAY_BIND_PORT,
235
+ ...(parsed.GATEWAY_WS_URL
236
+ ? { gatewayWsUrl: parsed.GATEWAY_WS_URL }
237
+ : {}),
238
+ gatewayWsPath: parsed.GATEWAY_WS_PATH,
239
+ ...(parsed.GATEWAY_AUTH_TOKEN
240
+ ? { gatewayAuthToken: parsed.GATEWAY_AUTH_TOKEN }
241
+ : {}),
242
+ ...(parsed.GATEWAY_DATABASE_URL
243
+ ? { gatewayDatabaseUrl: parsed.GATEWAY_DATABASE_URL }
244
+ : {}),
245
+ ...(parsed.GATEWAY_S3_ENDPOINT
246
+ ? { gatewayS3Endpoint: parsed.GATEWAY_S3_ENDPOINT }
247
+ : {}),
248
+ ...(parsed.GATEWAY_S3_BUCKET
249
+ ? { gatewayS3Bucket: parsed.GATEWAY_S3_BUCKET }
250
+ : {}),
251
+ ...(parsed.GATEWAY_S3_ACCESS_KEY
252
+ ? { gatewayS3AccessKey: parsed.GATEWAY_S3_ACCESS_KEY }
253
+ : {}),
254
+ ...(parsed.GATEWAY_S3_SECRET_KEY
255
+ ? { gatewayS3SecretKey: parsed.GATEWAY_S3_SECRET_KEY }
256
+ : {}),
257
+ ...(parsed.RMQ_HOST
258
+ ? {
259
+ rmq: {
260
+ host: parsed.RMQ_HOST,
261
+ port: parsed.RMQ_PORT ?? 5672,
262
+ ...(parsed.RMQ_USER ? { user: parsed.RMQ_USER } : {}),
263
+ ...(parsed.RMQ_PASSWORD
264
+ ? { password: parsed.RMQ_PASSWORD }
265
+ : {}),
266
+ vhost: parsed.RMQ_VHOST ?? "/",
267
+ exchange: parsed.RMQ_EXCHANGE,
268
+ },
269
+ }
270
+ : {}),
271
+ },
272
+ webapp: {
273
+ enabled: parsed.WEBAPP_ENABLED,
274
+ basePath: parsed.WEBAPP_BASE_PATH,
275
+ ...(parsed.WEBAPP_PUBLIC_URL ? { publicUrl: parsed.WEBAPP_PUBLIC_URL } : {}),
276
+ initDataTtlSeconds: parsed.WEBAPP_INITDATA_TTL_SECONDS,
277
+ sessionTtlSeconds: parsed.WEBAPP_SESSION_TTL_SECONDS,
278
+ launchMode: parsed.WEBAPP_LAUNCH_MODE,
279
+ visibleScreens: parsed.WEBAPP_VISIBLE_SCREENS,
280
+ pollIntervalMs: parsed.WEBAPP_POLL_INTERVAL_MS,
281
+ actionCooldownMs: parsed.WEBAPP_ACTION_COOLDOWN_MS,
282
+ },
283
+ exchange: {
284
+ dir: parsed.MCP_XCHANGE_DIR,
285
+ },
286
+ tmux: {
287
+ nudgeEnabled: parsed.TMUX_NUDGE_ENABLED,
288
+ ...(parsed.TMUX_SOCKET_PATH ? { socketPath: parsed.TMUX_SOCKET_PATH } : {}),
289
+ nudgeDebounceSeconds: parsed.TMUX_NUDGE_DEBOUNCE_SECONDS,
290
+ nudgeCooldownSeconds: parsed.TMUX_NUDGE_COOLDOWN_SECONDS,
291
+ nudgeMessage: parsed.TMUX_NUDGE_MESSAGE,
292
+ partnerNudgeMessage: parsed.TMUX_PARTNER_NUDGE_MESSAGE,
293
+ captureMode: parsed.TMUX_CAPTURE_MODE,
294
+ captureLines: parsed.TMUX_CAPTURE_LINES,
295
+ },
296
+ browser: {
297
+ enabled: parsed.BROWSER_ENABLED,
298
+ headless: parsed.BROWSER_HEADLESS,
299
+ devtools: parsed.BROWSER_DEVTOOLS,
300
+ ...(parsed.BROWSER_ADDRESS ? { address: parsed.BROWSER_ADDRESS } : {}),
301
+ timeoutMs: parsed.BROWSER_TIMEOUT_MS,
302
+ maxEvents: parsed.BROWSER_MAX_EVENTS,
303
+ waitUntil: parsed.BROWSER_WAIT_UNTIL,
304
+ ...(parsed.BROWSER_EXECUTABLE_PATH
305
+ ? { executablePath: parsed.BROWSER_EXECUTABLE_PATH }
306
+ : {}),
307
+ ...(parsed.BROWSER_CHANNEL ? { channel: parsed.BROWSER_CHANNEL } : {}),
308
+ slowMoMs: parsed.BROWSER_SLOW_MO_MS,
309
+ },
310
+ project: {
311
+ ...(parsed.PROJECT_NAME ? { name: parsed.PROJECT_NAME } : {}),
312
+ },
313
+ logging: {
314
+ level: parsed.LOG_LEVEL,
315
+ },
316
+ };
317
+ }