@pixelbyte-software/pixcode 1.53.4 → 1.53.6

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 (31) hide show
  1. package/dist/assets/{index-DlwfTw9d.js → index-DP7jnMyc.js} +155 -155
  2. package/dist/index.html +1 -1
  3. package/dist-server/server/database/db.js +28 -0
  4. package/dist-server/server/database/db.js.map +1 -1
  5. package/dist-server/server/openai-codex.js +5 -0
  6. package/dist-server/server/openai-codex.js.map +1 -1
  7. package/dist-server/server/routes/agent.js +17 -7
  8. package/dist-server/server/routes/agent.js.map +1 -1
  9. package/dist-server/server/routes/telegram.js +16 -2
  10. package/dist-server/server/routes/telegram.js.map +1 -1
  11. package/dist-server/server/services/telegram/bot.js +9 -4
  12. package/dist-server/server/services/telegram/bot.js.map +1 -1
  13. package/dist-server/server/services/telegram/control-center.js +914 -98
  14. package/dist-server/server/services/telegram/control-center.js.map +1 -1
  15. package/dist-server/server/services/telegram/telegram-gateway.js +286 -0
  16. package/dist-server/server/services/telegram/telegram-gateway.js.map +1 -0
  17. package/dist-server/server/services/telegram/telegram-http-client.js +10 -8
  18. package/dist-server/server/services/telegram/telegram-http-client.js.map +1 -1
  19. package/dist-server/server/services/telegram/translations.js +72 -0
  20. package/dist-server/server/services/telegram/translations.js.map +1 -1
  21. package/package.json +1 -1
  22. package/scripts/smoke/telegram-control.mjs +50 -2
  23. package/server/database/db.js +28 -0
  24. package/server/openai-codex.js +5 -0
  25. package/server/routes/agent.js +17 -7
  26. package/server/routes/telegram.js +25 -2
  27. package/server/services/telegram/bot.js +8 -4
  28. package/server/services/telegram/control-center.js +927 -98
  29. package/server/services/telegram/telegram-gateway.js +314 -0
  30. package/server/services/telegram/telegram-http-client.js +7 -5
  31. package/server/services/telegram/translations.js +72 -0
@@ -65,6 +65,7 @@ export class TelegramHttpBot extends EventEmitter {
65
65
  this._polling = false;
66
66
  this._abortController = null;
67
67
  this._pollingLoop = null;
68
+ this._pollingErrorCount = 0;
68
69
  if (polling)
69
70
  this.startPolling();
70
71
  }
@@ -152,9 +153,9 @@ export class TelegramHttpBot extends EventEmitter {
152
153
  if (dropPendingUpdates) {
153
154
  await this._dropPendingUpdatesBeforePolling();
154
155
  }
155
- // Kick off a non-awaited loop. Each iteration long-polls getUpdates for
156
- // up to pollTimeoutSec, then loops immediately. We deliberately serialize
157
- // (no concurrent long-polls) because Telegram rejects that with 409.
156
+ // Each iteration long-polls getUpdates for up to pollTimeoutSec, then
157
+ // loops immediately. We deliberately serialize update handling because a
158
+ // stale Telegram backlog can otherwise fan out into many expensive scans.
158
159
  while (this._polling) {
159
160
  this._abortController = new AbortController();
160
161
  try {
@@ -175,17 +176,18 @@ export class TelegramHttpBot extends EventEmitter {
175
176
  await this._emitSerial('callback_query', update.callback_query);
176
177
  }
177
178
  }
179
+ this._pollingErrorCount = 0;
178
180
  }
179
181
  catch (err) {
180
182
  // AbortError is the expected path when stopPolling() is called.
181
183
  if (err?.name === 'AbortError' || !this._polling)
182
184
  break;
183
185
  this.emit('polling_error', err);
184
- // Back off before retrying — rapid retries on 401/409 would
185
- // otherwise spin at 100% CPU. Upstream consumer's polling_error
186
- // handler may also call stopBot() on 401/409 which flips _polling
187
- // off and breaks the loop on the next tick.
188
- await new Promise((r) => setTimeout(r, 2000));
186
+ const status = err?.response?.statusCode || err?.code;
187
+ const baseDelay = status === 409 ? 2000 : 1000;
188
+ const delay = Math.min(60_000, baseDelay * 2 ** this._pollingErrorCount);
189
+ this._pollingErrorCount = Math.min(this._pollingErrorCount + 1, 6);
190
+ await new Promise((r) => setTimeout(r, delay));
189
191
  }
190
192
  }
191
193
  }
@@ -1 +1 @@
1
- {"version":3,"file":"telegram-http-client.js","sourceRoot":"","sources":["../../../../server/services/telegram/telegram-http-client.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telegram-http-client.js","sourceRoot":"","sources":["../../../../server/services/telegram/telegram-http-client.js"],"names":[],"mappings":"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"}
@@ -54,8 +54,11 @@ const EN = {
54
54
  'control.button.refresh': 'Refresh',
55
55
  'control.button.approve': 'Approve',
56
56
  'control.button.deny': 'Deny',
57
+ 'control.button.confirm': 'Confirm',
58
+ 'control.button.cancel': 'Cancel',
57
59
  'control.noProjects': 'No Pixcode projects were found yet. Add/open a project in Pixcode first.',
58
60
  'control.pickProject': 'Pick the project Telegram should control:',
61
+ 'control.projectNotFound': 'No project matched "{{query}}". Pick one from the list.',
59
62
  'control.pickProvider': 'Pick the CLI provider Telegram should use:',
60
63
  'control.modelsFor': 'Models for {{provider}}:',
61
64
  'control.pickWorkflow': 'Pick an orchestration workflow:',
@@ -82,6 +85,12 @@ const EN = {
82
85
  'control.authMenu': 'Pick a provider for OAuth/login instructions:',
83
86
  'control.manualInstall': 'Manual install for {{provider}}:\n{{manual}}',
84
87
  'control.installStarted': 'Install started for {{provider}}.\nJob: {{jobId}}\nCommand: {{command}}',
88
+ 'control.confirmationRequired': 'This action needs confirmation before it can run.',
89
+ 'control.confirmInstall': 'Confirm CLI install/repair for {{provider}}?',
90
+ 'control.confirmCancelRun': 'Confirm cancel for workflow run {{runId}}?',
91
+ 'control.confirmationExpired': 'That confirmation expired. Start the action again.',
92
+ 'control.confirmationMissing': 'No matching confirmation is pending. Start the action again.',
93
+ 'control.confirmationCanceled': 'Action canceled.',
85
94
  'control.settingsTitle': 'Telegram settings',
86
95
  'control.pickLanguage': 'Pick Telegram language:',
87
96
  'control.menuExpired': 'This menu expired. Send /menu.',
@@ -101,6 +110,33 @@ const EN = {
101
110
  'control.cancelUsage': 'Use /cancel <runId>.',
102
111
  'control.runStatus': 'Run {{runId}} status: {{status}}',
103
112
  'control.providerAuthFallback': 'Open Pixcode Settings → Agents and connect this provider.',
113
+ 'control.activity.agentTitle': 'Agent activity',
114
+ 'control.activity.workflowTitle': 'Workflow activity',
115
+ 'control.activity.routerTitle': 'Telegram AI router',
116
+ 'control.activity.provider': 'Provider',
117
+ 'control.activity.project': 'Project',
118
+ 'control.activity.session': 'Session',
119
+ 'control.activity.run': 'Run',
120
+ 'control.activity.workflow': 'Workflow',
121
+ 'control.activity.elapsed': 'Elapsed',
122
+ 'control.activity.status': 'Status',
123
+ 'control.activity.work': 'Work',
124
+ 'control.activity.output': 'Output',
125
+ 'control.activity.starting': 'Starting',
126
+ 'control.activity.interpreting': 'Understanding the request with the selected provider',
127
+ 'control.activity.routerFallback': 'Router fallback: sending this as an agent prompt',
128
+ 'control.activity.startingProvider': 'Starting {{provider}}',
129
+ 'control.activity.startingWorkflow': 'Starting workflow',
130
+ 'control.activity.workflowRunning': 'Workflow running',
131
+ 'control.activity.thinking': 'Thinking',
132
+ 'control.activity.responding': 'Writing the response',
133
+ 'control.activity.working': 'Running tools',
134
+ 'control.activity.done': 'Done',
135
+ 'control.activity.failed': 'Failed',
136
+ 'control.activity.sessionStarted': 'Session started',
137
+ 'control.activity.toolDone': 'Tool completed',
138
+ 'control.activity.toolFailed': 'Tool failed',
139
+ 'control.activity.tokens': 'Tokens',
104
140
  'notification.taskDone': '✅ {{title}} — task completed.',
105
141
  'notification.taskFailed': '⚠️ {{title}} — task failed: {{error}}',
106
142
  'notification.actionRequired': '❗ {{title}} — action required.',
@@ -155,8 +191,11 @@ const TR = {
155
191
  'control.button.refresh': 'Yenile',
156
192
  'control.button.approve': 'Onayla',
157
193
  'control.button.deny': 'Reddet',
194
+ 'control.button.confirm': 'Onayla',
195
+ 'control.button.cancel': 'Vazgeç',
158
196
  'control.noProjects': 'Henüz Pixcode projesi bulunamadı. Önce Pixcode içinde proje ekle/aç.',
159
197
  'control.pickProject': 'Telegramın kontrol edeceği projeyi seç:',
198
+ 'control.projectNotFound': '"{{query}}" ile eşleşen proje bulunamadı. Listeden birini seç.',
160
199
  'control.pickProvider': 'Telegramın kullanacağı CLI sağlayıcısını seç:',
161
200
  'control.modelsFor': '{{provider}} modelleri:',
162
201
  'control.pickWorkflow': 'Bir orkestrasyon iş akışı seç:',
@@ -183,6 +222,12 @@ const TR = {
183
222
  'control.authMenu': 'OAuth/giriş yönergeleri için sağlayıcı seç:',
184
223
  'control.manualInstall': '{{provider}} manuel kurulum:\n{{manual}}',
185
224
  'control.installStarted': '{{provider}} kurulumu başladı.\nİş: {{jobId}}\nKomut: {{command}}',
225
+ 'control.confirmationRequired': 'Bu işlem çalışmadan önce onay gerektiriyor.',
226
+ 'control.confirmInstall': '{{provider}} için CLI kurulum/onarım işlemini onaylıyor musun?',
227
+ 'control.confirmCancelRun': '{{runId}} workflow çalışmasını iptal etmeyi onaylıyor musun?',
228
+ 'control.confirmationExpired': 'Bu onayın süresi doldu. İşlemi yeniden başlat.',
229
+ 'control.confirmationMissing': 'Bekleyen eşleşen bir onay yok. İşlemi yeniden başlat.',
230
+ 'control.confirmationCanceled': 'İşlem iptal edildi.',
186
231
  'control.settingsTitle': 'Telegram ayarları',
187
232
  'control.pickLanguage': 'Telegram dilini seç:',
188
233
  'control.menuExpired': 'Bu menünün süresi doldu. /menu gönder.',
@@ -202,6 +247,33 @@ const TR = {
202
247
  'control.cancelUsage': '/cancel <runId> kullan.',
203
248
  'control.runStatus': '{{runId}} durumu: {{status}}',
204
249
  'control.providerAuthFallback': 'Pixcode Ayarlar → Ajanlar içinden bu sağlayıcıyı bağla.',
250
+ 'control.activity.agentTitle': 'Ajan aktivitesi',
251
+ 'control.activity.workflowTitle': 'Workflow aktivitesi',
252
+ 'control.activity.routerTitle': 'Telegram AI router',
253
+ 'control.activity.provider': 'Sağlayıcı',
254
+ 'control.activity.project': 'Proje',
255
+ 'control.activity.session': 'Oturum',
256
+ 'control.activity.run': 'Çalışma',
257
+ 'control.activity.workflow': 'İş akışı',
258
+ 'control.activity.elapsed': 'Geçen süre',
259
+ 'control.activity.status': 'Durum',
260
+ 'control.activity.work': 'Yapılan işler',
261
+ 'control.activity.output': 'Çıktı',
262
+ 'control.activity.starting': 'Başlatılıyor',
263
+ 'control.activity.interpreting': 'İstek seçili provider ile anlamlandırılıyor',
264
+ 'control.activity.routerFallback': 'Router fallback: istek ajan promptu olarak gönderiliyor',
265
+ 'control.activity.startingProvider': '{{provider}} başlatılıyor',
266
+ 'control.activity.startingWorkflow': 'Workflow başlatılıyor',
267
+ 'control.activity.workflowRunning': 'Workflow çalışıyor',
268
+ 'control.activity.thinking': 'Düşünüyor',
269
+ 'control.activity.responding': 'Yanıt yazılıyor',
270
+ 'control.activity.working': 'Tool çalıştırılıyor',
271
+ 'control.activity.done': 'Tamamlandı',
272
+ 'control.activity.failed': 'Başarısız',
273
+ 'control.activity.sessionStarted': 'Oturum başladı',
274
+ 'control.activity.toolDone': 'Tool tamamlandı',
275
+ 'control.activity.toolFailed': 'Tool başarısız',
276
+ 'control.activity.tokens': 'Token',
205
277
  'notification.taskDone': '✅ {{title}} — görev tamamlandı.',
206
278
  'notification.taskFailed': '⚠️ {{title}} — görev başarısız: {{error}}',
207
279
  'notification.actionRequired': '❗ {{title}} — işlem gerekli.',
@@ -1 +1 @@
1
- {"version":3,"file":"translations.js","sourceRoot":"","sources":["../../../../server/services/telegram/translations.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"translations.js","sourceRoot":"","sources":["../../../../server/services/telegram/translations.js"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixelbyte-software/pixcode",
3
- "version": "1.53.4",
3
+ "version": "1.53.6",
4
4
  "description": "Self-hosted AI coding agent control room for Claude Code, Cursor CLI, OpenAI Codex, Gemini CLI, Qwen Code, and OpenCode with chat, files, shell, Git, orchestration, API keys, Telegram, MCP, plugins, themes, and desktop/server deployment.",
5
5
  "type": "module",
6
6
  "main": "dist-server/server/index.js",
@@ -25,11 +25,14 @@ const checks = [
25
25
  source.includes("allowed_updates: ['message', 'callback_query']")
26
26
  && source.includes('answerCallbackQuery')
27
27
  && source.includes('editMessageText')
28
- && source.includes("this.emit('callback_query'")
28
+ && (
29
+ source.includes("this.emit('callback_query'")
30
+ || source.includes("_emitSerial('callback_query'")
31
+ )
29
32
  ),
30
33
  },
31
34
  {
32
- name: 'telegram control center exposes provider, model, workflow, install, and settings actions',
35
+ name: 'telegram control center exposes provider, model, workflow, install, streaming activity, and settings actions',
33
36
  file: 'server/services/telegram/control-center.js',
34
37
  test: (source) => (
35
38
  source.includes('showMainMenu')
@@ -38,9 +41,31 @@ const checks = [
38
41
  && source.includes('showWorkflowMenu')
39
42
  && source.includes('runWorkflow')
40
43
  && source.includes('startCliInstall')
44
+ && source.includes('localAgentStream')
45
+ && source.includes('editTelegramActivity')
41
46
  && source.includes('updateTelegramControlState')
42
47
  && source.includes('/api/agent')
43
48
  && source.includes('/api/orchestration/workflows')
49
+ && source.includes('TELEGRAM_CONTROL_SCOPES')
50
+ && source.includes('confirm_action')
51
+ ),
52
+ },
53
+ {
54
+ name: 'telegram natural language router is provider-backed instead of source keyword matching',
55
+ file: 'server/services/telegram/telegram-gateway.js',
56
+ test: (source) => (
57
+ source.includes('buildTelegramIntentPrompt')
58
+ && source.includes('parseTelegramAiIntentResponse')
59
+ && source.includes('Decide the user intent by meaning')
60
+ && !source.includes('classifyTelegramIntent')
61
+ ),
62
+ },
63
+ {
64
+ name: 'agent API accepts restricted permission mode for Telegram intent routing',
65
+ file: 'server/routes/agent.js',
66
+ test: (source) => (
67
+ source.includes('requestedPermissionMode')
68
+ && source.includes("permissionMode: permissionMode || 'bypassPermissions'")
44
69
  ),
45
70
  },
46
71
  {
@@ -51,6 +76,8 @@ const checks = [
51
76
  && source.includes('getControlState')
52
77
  && source.includes('updateControlState')
53
78
  && source.includes('remoteControlEnabled')
79
+ && source.includes('routerEnabled')
80
+ && source.includes('pendingConfirmation')
54
81
  ),
55
82
  },
56
83
  {
@@ -59,8 +86,10 @@ const checks = [
59
86
  test: (source) => (
60
87
  source.includes('controlEnabled')
61
88
  && source.includes('progressMode')
89
+ && source.includes('routerEnabled')
62
90
  && source.includes('telegram.control.title')
63
91
  && source.includes('telegram.control.progressMode')
92
+ && source.includes('telegram.router.title')
64
93
  ),
65
94
  },
66
95
  ];
@@ -80,6 +109,9 @@ for (const check of checks) {
80
109
  }
81
110
 
82
111
  try {
112
+ const {
113
+ parseTelegramAiIntentResponse,
114
+ } = await import('../../server/services/telegram/telegram-gateway.js');
83
115
  const {
84
116
  handleTelegramControlCallback,
85
117
  handleTelegramControlMessage,
@@ -90,6 +122,22 @@ try {
90
122
  } = await import('../../server/services/telegram/bot.js');
91
123
  const { telegramLinksDb } = await import('../../server/database/db.js');
92
124
 
125
+ assert.equal(
126
+ parseTelegramAiIntentResponse('{"action":"show_runs","confidence":0.4}', 'Selam dostum son durum nedir şimdi?').action,
127
+ 'agent_prompt',
128
+ 'low-confidence natural-language control guesses should fall back to the agent',
129
+ );
130
+ assert.equal(
131
+ parseTelegramAiIntentResponse('{"action":"show_runs","confidence":0.94}', 'Orchestration run listesini aç').action,
132
+ 'show_runs',
133
+ 'high-confidence AI router results should be accepted',
134
+ );
135
+ assert.equal(
136
+ parseTelegramAiIntentResponse('not json', 'Selam dostum son durum nedir şimdi?').action,
137
+ 'agent_prompt',
138
+ 'unparseable AI router responses should fall back to the agent',
139
+ );
140
+
93
141
  const userId = 4242;
94
142
  telegramLinksDb.unlink(userId);
95
143
  telegramLinksDb.setPairingCode(userId, '123456', new Date(Date.now() + 600_000).toISOString(), 'tr');
@@ -762,6 +762,12 @@ const appConfigDb = {
762
762
  // ---------------------------------------------------------------------------
763
763
  const DEFAULT_TELEGRAM_CONTROL_STATE = {
764
764
  remoteControlEnabled: true,
765
+ routerEnabled: true,
766
+ routerMode: 'hybrid',
767
+ routerProvider: null,
768
+ routerModel: null,
769
+ confirmationPolicy: 'strict',
770
+ pendingConfirmation: null,
765
771
  progressMode: 'final',
766
772
  selectedProjectName: null,
767
773
  selectedProjectPath: null,
@@ -776,14 +782,36 @@ function normalizeTelegramControlState(value = {}) {
776
782
  const selectedProvider = ['claude', 'cursor', 'codex', 'gemini', 'qwen', 'opencode'].includes(raw.selectedProvider)
777
783
  ? raw.selectedProvider
778
784
  : DEFAULT_TELEGRAM_CONTROL_STATE.selectedProvider;
785
+ const routerProvider = ['claude', 'cursor', 'codex', 'gemini', 'qwen', 'opencode'].includes(raw.routerProvider)
786
+ ? raw.routerProvider
787
+ : null;
779
788
  const progressMode = ['final', 'steps', 'all', 'errors'].includes(raw.progressMode)
780
789
  ? raw.progressMode
781
790
  : DEFAULT_TELEGRAM_CONTROL_STATE.progressMode;
791
+ const pendingConfirmation = raw.pendingConfirmation && typeof raw.pendingConfirmation === 'object'
792
+ && typeof raw.pendingConfirmation.id === 'string'
793
+ && typeof raw.pendingConfirmation.action === 'string'
794
+ && typeof raw.pendingConfirmation.expiresAt === 'string'
795
+ ? {
796
+ id: raw.pendingConfirmation.id,
797
+ action: raw.pendingConfirmation.action,
798
+ payload: raw.pendingConfirmation.payload && typeof raw.pendingConfirmation.payload === 'object'
799
+ ? raw.pendingConfirmation.payload
800
+ : {},
801
+ expiresAt: raw.pendingConfirmation.expiresAt,
802
+ }
803
+ : null;
782
804
 
783
805
  return {
784
806
  ...DEFAULT_TELEGRAM_CONTROL_STATE,
785
807
  ...raw,
786
808
  remoteControlEnabled: raw.remoteControlEnabled !== false,
809
+ routerEnabled: raw.routerEnabled !== false,
810
+ routerMode: raw.routerMode === 'hybrid' ? 'hybrid' : DEFAULT_TELEGRAM_CONTROL_STATE.routerMode,
811
+ routerProvider,
812
+ routerModel: typeof raw.routerModel === 'string' && raw.routerModel.trim() ? raw.routerModel.trim() : null,
813
+ confirmationPolicy: 'strict',
814
+ pendingConfirmation,
787
815
  progressMode,
788
816
  selectedProvider,
789
817
  selectedProjectName: typeof raw.selectedProjectName === 'string' ? raw.selectedProjectName : null,
@@ -209,6 +209,11 @@ function mapPermissionModeToCodexOptions(permissionMode) {
209
209
  sandboxMode: 'danger-full-access',
210
210
  approvalPolicy: 'never'
211
211
  };
212
+ case 'plan':
213
+ return {
214
+ sandboxMode: 'read-only',
215
+ approvalPolicy: 'never'
216
+ };
212
217
  case 'default':
213
218
  default:
214
219
  return {
@@ -964,6 +964,10 @@ class ResponseCollector {
964
964
  */
965
965
  router.post('/', validateExternalApiKey, async (req, res) => {
966
966
  const { githubUrl, projectPath, message, provider = 'claude', model, githubToken, branchName, sessionId } = req.body;
967
+ const requestedPermissionMode = typeof req.body.permissionMode === 'string' ? req.body.permissionMode : null;
968
+ const permissionMode = ['default', 'acceptEdits', 'bypassPermissions', 'plan', 'auto_edit', 'yolo'].includes(requestedPermissionMode)
969
+ ? requestedPermissionMode
970
+ : null;
967
971
 
968
972
  // Parse stream and cleanup as booleans (handle string "true"/"false" from curl)
969
973
  const stream = req.body.stream === undefined ? true : (req.body.stream === true || req.body.stream === 'true');
@@ -1075,7 +1079,7 @@ router.post('/', validateExternalApiKey, async (req, res) => {
1075
1079
  cwd: finalProjectPath,
1076
1080
  sessionId: sessionId || null,
1077
1081
  model: model,
1078
- permissionMode: 'bypassPermissions' // Bypass all permissions for API calls
1082
+ permissionMode: permissionMode || 'bypassPermissions' // Bypass all permissions for API calls unless explicitly restricted
1079
1083
  }, writer);
1080
1084
 
1081
1085
  } else if (provider === 'cursor') {
@@ -1086,7 +1090,7 @@ router.post('/', validateExternalApiKey, async (req, res) => {
1086
1090
  cwd: finalProjectPath,
1087
1091
  sessionId: sessionId || null,
1088
1092
  model: model || undefined,
1089
- skipPermissions: true // Bypass permissions for Cursor
1093
+ skipPermissions: permissionMode ? permissionMode === 'bypassPermissions' || permissionMode === 'acceptEdits' || permissionMode === 'yolo' : true
1090
1094
  }, writer);
1091
1095
  } else if (provider === 'codex') {
1092
1096
  console.log('🤖 Starting Codex SDK session');
@@ -1096,7 +1100,7 @@ router.post('/', validateExternalApiKey, async (req, res) => {
1096
1100
  cwd: finalProjectPath,
1097
1101
  sessionId: sessionId || null,
1098
1102
  model: model || getDefaultProviderModel('codex'),
1099
- permissionMode: 'bypassPermissions'
1103
+ permissionMode: permissionMode || 'bypassPermissions'
1100
1104
  }, writer);
1101
1105
  } else if (provider === 'gemini') {
1102
1106
  console.log('✨ Starting Gemini CLI session');
@@ -1106,7 +1110,8 @@ router.post('/', validateExternalApiKey, async (req, res) => {
1106
1110
  cwd: finalProjectPath,
1107
1111
  sessionId: sessionId || null,
1108
1112
  model: model,
1109
- skipPermissions: true // CLI mode bypasses permissions
1113
+ permissionMode: permissionMode || undefined,
1114
+ skipPermissions: permissionMode ? permissionMode === 'bypassPermissions' || permissionMode === 'acceptEdits' || permissionMode === 'yolo' : true
1110
1115
  }, writer);
1111
1116
  } else if (provider === 'qwen') {
1112
1117
  console.log('🐉 Starting Qwen Code CLI session');
@@ -1116,7 +1121,8 @@ router.post('/', validateExternalApiKey, async (req, res) => {
1116
1121
  cwd: finalProjectPath,
1117
1122
  sessionId: sessionId || null,
1118
1123
  model: model,
1119
- skipPermissions: true,
1124
+ permissionMode: permissionMode || undefined,
1125
+ skipPermissions: permissionMode ? permissionMode === 'bypassPermissions' || permissionMode === 'acceptEdits' || permissionMode === 'yolo' : true,
1120
1126
  }, writer);
1121
1127
  } else if (provider === 'opencode') {
1122
1128
  console.log('🅾️ Starting OpenCode CLI session');
@@ -1126,8 +1132,12 @@ router.post('/', validateExternalApiKey, async (req, res) => {
1126
1132
  cwd: finalProjectPath,
1127
1133
  sessionId: sessionId || null,
1128
1134
  model: model,
1129
- permissionMode: 'bypassPermissions',
1130
- toolsSettings: { allowPatterns: [], denyPatterns: [], skipPermissions: true },
1135
+ permissionMode: permissionMode || 'bypassPermissions',
1136
+ toolsSettings: {
1137
+ allowPatterns: [],
1138
+ denyPatterns: [],
1139
+ skipPermissions: permissionMode ? permissionMode === 'bypassPermissions' || permissionMode === 'acceptEdits' || permissionMode === 'yolo' : true,
1140
+ },
1131
1141
  }, writer);
1132
1142
  }
1133
1143
 
@@ -9,6 +9,7 @@ import {
9
9
  startBot,
10
10
  stopBot,
11
11
  } from '../services/telegram/bot.js';
12
+ import { TELEGRAM_PROGRESS_MODES, TELEGRAM_PROVIDERS } from '../services/telegram/telegram-gateway.js';
12
13
  import { SUPPORTED_LANGUAGES } from '../services/telegram/translations.js';
13
14
 
14
15
  const router = express.Router();
@@ -99,7 +100,17 @@ router.post('/pairing-code', (req, res) => {
99
100
  // PATCH /api/telegram/link — update language / toggles on the user's link
100
101
  router.patch('/link', (req, res) => {
101
102
  try {
102
- const { language, notificationsEnabled, bridgeEnabled, controlEnabled, progressMode } = req.body || {};
103
+ const {
104
+ language,
105
+ notificationsEnabled,
106
+ bridgeEnabled,
107
+ controlEnabled,
108
+ progressMode,
109
+ routerEnabled,
110
+ routerProvider,
111
+ routerModel,
112
+ confirmationPolicy,
113
+ } = req.body || {};
103
114
  const payload = {};
104
115
  if (language !== undefined) payload.language = sanitizeLanguage(language);
105
116
  if (notificationsEnabled !== undefined) payload.notificationsEnabled = Boolean(notificationsEnabled);
@@ -108,9 +119,21 @@ router.patch('/link', (req, res) => {
108
119
 
109
120
  const controlPatch = {};
110
121
  if (controlEnabled !== undefined) controlPatch.remoteControlEnabled = Boolean(controlEnabled);
111
- if (progressMode !== undefined && ['final', 'steps', 'all'].includes(progressMode)) {
122
+ if (progressMode !== undefined && TELEGRAM_PROGRESS_MODES.includes(progressMode)) {
112
123
  controlPatch.progressMode = progressMode;
113
124
  }
125
+ if (routerEnabled !== undefined) controlPatch.routerEnabled = Boolean(routerEnabled);
126
+ if (routerProvider !== undefined) {
127
+ controlPatch.routerProvider = TELEGRAM_PROVIDERS.includes(routerProvider) ? routerProvider : null;
128
+ }
129
+ if (routerModel !== undefined) {
130
+ controlPatch.routerModel = typeof routerModel === 'string' && routerModel.trim()
131
+ ? routerModel.trim()
132
+ : null;
133
+ }
134
+ if (confirmationPolicy !== undefined) {
135
+ controlPatch.confirmationPolicy = 'strict';
136
+ }
114
137
  if (Object.keys(controlPatch).length > 0) {
115
138
  telegramLinksDb.updateControlState(req.user.id, controlPatch);
116
139
  }
@@ -207,13 +207,17 @@ export const handleIncomingTelegramMessage = handleMessage;
207
207
  const wirePollingErrors = () => {
208
208
  if (!bot) return;
209
209
  bot.on('polling_error', (err) => {
210
- // 401 = bad token. 409 = another polling instance exists. Both mean we
211
- // should stop and surface the error rather than thrash.
210
+ // 401 = bad token. 409 = another polling instance exists; the HTTP
211
+ // client keeps retrying with backoff so an old poller can disappear.
212
212
  const code = err?.response?.statusCode || err?.code;
213
- lastError = { code: code || 'polling_error', message: err?.message || String(err) };
214
- if (code === 401 || code === 409) {
213
+ lastError = code === 409
214
+ ? { code: 409, message: 'Another Telegram poller detected; retrying with backoff.' }
215
+ : { code: code || 'polling_error', message: err?.message || String(err) };
216
+ if (code === 401) {
215
217
  console.error('[telegram] fatal polling error, stopping:', lastError);
216
218
  stopBot().catch(() => {});
219
+ } else if (code === 409) {
220
+ console.warn('[telegram] polling conflict:', lastError);
217
221
  } else {
218
222
  console.warn('[telegram] polling error:', lastError);
219
223
  }