@pixelbyte-software/pixcode 1.36.3 → 1.36.4
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/dist/assets/index-CgF0-_6Z.css +32 -0
- package/dist/assets/{index-Bp8mXdQd.js → index-D-YjltED.js} +146 -146
- package/dist/index.html +2 -2
- package/dist-server/server/daemon-manager.js +18 -12
- package/dist-server/server/daemon-manager.js.map +1 -1
- package/dist-server/server/database/db.js +49 -0
- package/dist-server/server/database/db.js.map +1 -1
- package/dist-server/server/index.js +8 -4
- package/dist-server/server/index.js.map +1 -1
- package/dist-server/server/modules/orchestration/workflows/workflow-runner.js +17 -3
- package/dist-server/server/modules/orchestration/workflows/workflow-runner.js.map +1 -1
- package/dist-server/server/routes/telegram.js +16 -2
- package/dist-server/server/routes/telegram.js.map +1 -1
- package/dist-server/server/services/telegram/bot.js +48 -6
- package/dist-server/server/services/telegram/bot.js.map +1 -1
- package/dist-server/server/services/telegram/control-center.js +761 -0
- package/dist-server/server/services/telegram/control-center.js.map +1 -0
- package/dist-server/server/services/telegram/telegram-http-client.js +26 -4
- package/dist-server/server/services/telegram/telegram-http-client.js.map +1 -1
- package/dist-server/server/services/telegram/translations.js +138 -2
- package/dist-server/server/services/telegram/translations.js.map +1 -1
- package/package.json +3 -1
- package/scripts/smoke/daemon-entrypoint.mjs +20 -0
- package/scripts/smoke/orchestration-user-facing-output.mjs +25 -0
- package/scripts/smoke/shell-manual-disconnect.mjs +30 -0
- package/scripts/smoke/side-panel-editor-layout.mjs +34 -0
- package/scripts/smoke/static-root-routing.mjs +21 -0
- package/scripts/smoke/telegram-control.mjs +242 -0
- package/scripts/smoke/version-modal-autoshow.mjs +29 -0
- package/server/daemon-manager.js +17 -12
- package/server/database/db.js +52 -0
- package/server/index.js +9 -5
- package/server/modules/orchestration/workflows/workflow-runner.ts +18 -3
- package/server/routes/telegram.js +17 -2
- package/server/services/telegram/bot.js +58 -6
- package/server/services/telegram/control-center.js +814 -0
- package/server/services/telegram/telegram-http-client.js +25 -4
- package/server/services/telegram/translations.js +138 -2
- package/dist/assets/index-Dx7QyTSN.css +0 -32
|
@@ -6,10 +6,12 @@ import { EventEmitter } from 'node:events';
|
|
|
6
6
|
* Replaces `node-telegram-bot-api` which pulled in the deprecated
|
|
7
7
|
* `request` / `har-validator` / `uuid@3` chain (~30 transitive packages,
|
|
8
8
|
* npm install warnings on every fresh box). The Bot API itself is just
|
|
9
|
-
* HTTP, and we only use
|
|
9
|
+
* HTTP, and we only use a few endpoints (getUpdates polling + sendMessage +
|
|
10
|
+
* callback answers + message edits),
|
|
10
11
|
* so 100 lines of fetch is all that's needed. Exposes the same surface
|
|
11
|
-
* the bot.js consumer relied on: `getMe()`, `sendMessage()`,
|
|
12
|
-
* `
|
|
12
|
+
* the bot.js consumer relied on: `getMe()`, `sendMessage()`,
|
|
13
|
+
* `editMessageText()`, `answerCallbackQuery()`,
|
|
14
|
+
* `on('message'|'callback_query'|'polling_error')`, `stopPolling()`.
|
|
13
15
|
*
|
|
14
16
|
* No third-party deps — uses Node 22's built-in `fetch`.
|
|
15
17
|
*/
|
|
@@ -76,6 +78,20 @@ export class TelegramHttpBot extends EventEmitter {
|
|
|
76
78
|
});
|
|
77
79
|
}
|
|
78
80
|
|
|
81
|
+
async editMessageText(text, extra = {}) {
|
|
82
|
+
return callApi(this._token, 'editMessageText', {
|
|
83
|
+
text,
|
|
84
|
+
...extra,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
async answerCallbackQuery(callbackQueryId, extra = {}) {
|
|
89
|
+
return callApi(this._token, 'answerCallbackQuery', {
|
|
90
|
+
callback_query_id: callbackQueryId,
|
|
91
|
+
...extra,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
79
95
|
async stopPolling(_opts = {}) {
|
|
80
96
|
this._polling = false;
|
|
81
97
|
try { this._abortController?.abort(); } catch { /* ignore */ }
|
|
@@ -99,7 +115,7 @@ export class TelegramHttpBot extends EventEmitter {
|
|
|
99
115
|
{
|
|
100
116
|
offset: this._offset,
|
|
101
117
|
timeout: this._pollTimeoutSec,
|
|
102
|
-
allowed_updates: ['message'],
|
|
118
|
+
allowed_updates: ['message', 'callback_query'],
|
|
103
119
|
},
|
|
104
120
|
{ signal: this._abortController.signal },
|
|
105
121
|
);
|
|
@@ -113,6 +129,11 @@ export class TelegramHttpBot extends EventEmitter {
|
|
|
113
129
|
this.emit('polling_error', err);
|
|
114
130
|
}
|
|
115
131
|
}
|
|
132
|
+
if (update.callback_query) {
|
|
133
|
+
try { this.emit('callback_query', update.callback_query); } catch (err) {
|
|
134
|
+
this.emit('polling_error', err);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
116
137
|
}
|
|
117
138
|
} catch (err) {
|
|
118
139
|
// AbortError is the expected path when stopPolling() is called.
|
|
@@ -13,10 +13,78 @@ const EN = {
|
|
|
13
13
|
'pairing.invalidFormat': 'Please send only the 6-digit code (digits only).',
|
|
14
14
|
'pairing.notFound': 'That code is invalid or has already been used. Please generate a new one in Pixcode and try again.',
|
|
15
15
|
'pairing.expired': 'That code has expired. Please generate a new one in Pixcode.',
|
|
16
|
-
'pairing.success': '✅ Linked successfully! You will now receive notifications
|
|
16
|
+
'pairing.success': '✅ Linked successfully! You will now receive completed-task notifications here. I am opening the Telegram control menu now.',
|
|
17
17
|
'pairing.stillNeeded': 'Please send your 6-digit pairing code first. Open Pixcode → Settings → Telegram to get one.',
|
|
18
18
|
'bridge.queued': '📨 Message forwarded to your latest session. I will reply when the agent responds.',
|
|
19
19
|
'bridge.disabled': 'Message bridge is disabled. Enable it in Pixcode → Settings → Telegram.',
|
|
20
|
+
'control.menu': 'Pixcode Telegram control center',
|
|
21
|
+
'control.help': 'Commands: /menu, /projects, /provider, /model, /workflows, /runs, /chat <prompt>, /workflow <prompt>, /install, /auth, /settings, /progress final|steps|all, /control on|off.',
|
|
22
|
+
'control.examples': 'Examples:\n/chat summarize this project\n/chat fix the last error\n/workflow review the current changes\n/settings to change language and progress mode',
|
|
23
|
+
'control.unknownCommand': 'I do not know that command yet. Here are the available Pixcode commands:',
|
|
24
|
+
'control.onboarding': 'How to start:\n/projects to pick a project\n/provider to pick the CLI\n/model to choose the model\n/chat <prompt> to run the current agent\n/workflow <prompt> to run orchestration\n/help to see all commands',
|
|
25
|
+
'control.summary.project': 'Project',
|
|
26
|
+
'control.summary.provider': 'Provider',
|
|
27
|
+
'control.summary.workflow': 'Workflow',
|
|
28
|
+
'control.summary.progress': 'Progress',
|
|
29
|
+
'control.notSelected': 'not selected',
|
|
30
|
+
'control.button.projects': 'Projects',
|
|
31
|
+
'control.button.provider': 'Provider',
|
|
32
|
+
'control.button.models': 'Models',
|
|
33
|
+
'control.button.workflows': 'Workflows',
|
|
34
|
+
'control.button.runs': 'Runs',
|
|
35
|
+
'control.button.install': 'CLI install',
|
|
36
|
+
'control.button.auth': 'Auth help',
|
|
37
|
+
'control.button.settings': 'Settings',
|
|
38
|
+
'control.button.refreshModels': 'Refresh models',
|
|
39
|
+
'control.button.clearModel': 'Clear model',
|
|
40
|
+
'control.button.runWorkflow': 'Run selected workflow',
|
|
41
|
+
'control.button.remoteOn': 'Remote control: on',
|
|
42
|
+
'control.button.remoteOff': 'Remote control: off',
|
|
43
|
+
'control.button.progressFinal': 'Progress: final',
|
|
44
|
+
'control.button.progressSteps': 'Progress: steps',
|
|
45
|
+
'control.button.progressAll': 'Progress: all',
|
|
46
|
+
'control.button.language': 'Language',
|
|
47
|
+
'control.button.mainMenu': 'Main menu',
|
|
48
|
+
'control.button.cancelRun': 'Cancel run',
|
|
49
|
+
'control.button.refresh': 'Refresh',
|
|
50
|
+
'control.noProjects': 'No Pixcode projects were found yet. Add/open a project in Pixcode first.',
|
|
51
|
+
'control.pickProject': 'Pick the project Telegram should control:',
|
|
52
|
+
'control.pickProvider': 'Pick the CLI provider Telegram should use:',
|
|
53
|
+
'control.modelsFor': 'Models for {{provider}}:',
|
|
54
|
+
'control.pickWorkflow': 'Pick an orchestration workflow:',
|
|
55
|
+
'control.noRuns': 'No orchestration runs yet.',
|
|
56
|
+
'control.recentRuns': 'Recent orchestration runs:',
|
|
57
|
+
'control.disabled': 'Telegram remote control is disabled. Enable it in Pixcode → Settings → Telegram or send /control on.',
|
|
58
|
+
'control.selectProjectFirst': 'Select a project first with /projects.',
|
|
59
|
+
'control.selectWorkflowFirst': 'Select a workflow first.',
|
|
60
|
+
'control.agentStarted': 'Started {{provider}} on {{project}}. I will send the result here.',
|
|
61
|
+
'control.agentDone': 'Done with {{provider}}{{session}}',
|
|
62
|
+
'control.agentFailed': 'Failed: {{error}}',
|
|
63
|
+
'control.noAssistantText': 'No assistant text returned.',
|
|
64
|
+
'control.workflowStarted': 'Orchestration started: {{runId}}\nWorkflow: {{workflowId}}',
|
|
65
|
+
'control.installMenu': 'Install or repair a provider CLI:',
|
|
66
|
+
'control.authMenu': 'Pick a provider for OAuth/login instructions:',
|
|
67
|
+
'control.manualInstall': 'Manual install for {{provider}}:\n{{manual}}',
|
|
68
|
+
'control.installStarted': 'Install started for {{provider}}.\nJob: {{jobId}}\nCommand: {{command}}',
|
|
69
|
+
'control.settingsTitle': 'Telegram settings',
|
|
70
|
+
'control.pickLanguage': 'Pick Telegram language:',
|
|
71
|
+
'control.menuExpired': 'This menu expired. Send /menu.',
|
|
72
|
+
'control.menuExpiredLong': 'This menu expired. Send /menu to open a fresh one.',
|
|
73
|
+
'control.languageSet': 'Language set: {{language}}',
|
|
74
|
+
'control.projectSelected': 'Project selected: {{project}}\n{{path}}',
|
|
75
|
+
'control.providerSelected': 'Provider selected: {{provider}}',
|
|
76
|
+
'control.modelSelected': 'Model selected: {{model}}',
|
|
77
|
+
'control.modelCleared': 'Model cleared.',
|
|
78
|
+
'control.workflowSelected': 'Workflow selected: {{workflow}}',
|
|
79
|
+
'control.sendAgentPrompt': 'Send the agent prompt.',
|
|
80
|
+
'control.sendWorkflowPrompt': 'Send the orchestration prompt.',
|
|
81
|
+
'control.remoteEnabled': 'Remote control enabled.',
|
|
82
|
+
'control.remoteDisabled': 'Remote control disabled.',
|
|
83
|
+
'control.progressUsage': 'Use /progress final, /progress steps, or /progress all.',
|
|
84
|
+
'control.progressSet': 'Progress mode set to {{mode}}.',
|
|
85
|
+
'control.cancelUsage': 'Use /cancel <runId>.',
|
|
86
|
+
'control.runStatus': 'Run {{runId}} status: {{status}}',
|
|
87
|
+
'control.providerAuthFallback': 'Open Pixcode Settings → Agents and connect this provider.',
|
|
20
88
|
'notification.taskDone': '✅ {{title}} — task completed.',
|
|
21
89
|
'notification.taskFailed': '⚠️ {{title}} — task failed: {{error}}',
|
|
22
90
|
'notification.actionRequired': '❗ {{title}} — action required.',
|
|
@@ -30,10 +98,78 @@ const TR = {
|
|
|
30
98
|
'pairing.invalidFormat': 'Lütfen sadece 6 haneli kodu gönder (yalnız rakam).',
|
|
31
99
|
'pairing.notFound': 'Bu kod geçersiz veya daha önce kullanılmış. Pixcode\'dan yeni bir tane oluştur.',
|
|
32
100
|
'pairing.expired': 'Bu kodun süresi doldu. Pixcode\'dan yeni bir tane oluştur.',
|
|
33
|
-
'pairing.success': '✅ Eşleşme başarılı! Bundan sonra tamamlanan görev bildirimlerini buradan alırsın.
|
|
101
|
+
'pairing.success': '✅ Eşleşme başarılı! Bundan sonra tamamlanan görev bildirimlerini buradan alırsın. Şimdi Telegram kontrol menüsünü açıyorum.',
|
|
34
102
|
'pairing.stillNeeded': 'Önce 6 haneli eşleşme kodunu gönder. Pixcode → Ayarlar → Telegram\'dan alabilirsin.',
|
|
35
103
|
'bridge.queued': '📨 Mesaj son oturumuna iletildi. Ajan cevap verince sana yazacağım.',
|
|
36
104
|
'bridge.disabled': 'Mesaj köprüsü kapalı. Pixcode → Ayarlar → Telegram\'dan açabilirsin.',
|
|
105
|
+
'control.menu': 'Pixcode Telegram kontrol merkezi',
|
|
106
|
+
'control.help': 'Komutlar: /menu, /projects, /provider, /model, /workflows, /runs, /chat <prompt>, /workflow <prompt>, /install, /auth, /settings, /progress final|steps|all, /control on|off.',
|
|
107
|
+
'control.examples': 'Örnekler:\n/chat bu projeyi özetle\n/chat son hatayı düzelt\n/workflow mevcut değişiklikleri incele\n/settings ile dil ve ilerleme modunu değiştir',
|
|
108
|
+
'control.unknownCommand': 'Bu komutu henüz tanımıyorum. Kullanabileceğin Pixcode komutları:',
|
|
109
|
+
'control.onboarding': 'Nasıl başlarsın:\n/projects ile proje seç\n/provider ile CLI seç\n/model ile modeli seç\n/chat <prompt> ile ajanı çalıştır\n/workflow <prompt> ile orkestrasyon başlat\n/help ile tüm komutları gör',
|
|
110
|
+
'control.summary.project': 'Proje',
|
|
111
|
+
'control.summary.provider': 'Sağlayıcı',
|
|
112
|
+
'control.summary.workflow': 'İş akışı',
|
|
113
|
+
'control.summary.progress': 'İlerleme',
|
|
114
|
+
'control.notSelected': 'seçilmedi',
|
|
115
|
+
'control.button.projects': 'Projeler',
|
|
116
|
+
'control.button.provider': 'Sağlayıcı',
|
|
117
|
+
'control.button.models': 'Modeller',
|
|
118
|
+
'control.button.workflows': 'İş akışları',
|
|
119
|
+
'control.button.runs': 'Çalışmalar',
|
|
120
|
+
'control.button.install': 'CLI kur',
|
|
121
|
+
'control.button.auth': 'Giriş yardımı',
|
|
122
|
+
'control.button.settings': 'Ayarlar',
|
|
123
|
+
'control.button.refreshModels': 'Modelleri yenile',
|
|
124
|
+
'control.button.clearModel': 'Modeli temizle',
|
|
125
|
+
'control.button.runWorkflow': 'Seçili iş akışını çalıştır',
|
|
126
|
+
'control.button.remoteOn': 'Uzaktan kontrol: açık',
|
|
127
|
+
'control.button.remoteOff': 'Uzaktan kontrol: kapalı',
|
|
128
|
+
'control.button.progressFinal': 'İlerleme: final',
|
|
129
|
+
'control.button.progressSteps': 'İlerleme: adımlar',
|
|
130
|
+
'control.button.progressAll': 'İlerleme: tümü',
|
|
131
|
+
'control.button.language': 'Dil',
|
|
132
|
+
'control.button.mainMenu': 'Ana menü',
|
|
133
|
+
'control.button.cancelRun': 'Çalışmayı iptal et',
|
|
134
|
+
'control.button.refresh': 'Yenile',
|
|
135
|
+
'control.noProjects': 'Henüz Pixcode projesi bulunamadı. Önce Pixcode içinde proje ekle/aç.',
|
|
136
|
+
'control.pickProject': 'Telegramın kontrol edeceği projeyi seç:',
|
|
137
|
+
'control.pickProvider': 'Telegramın kullanacağı CLI sağlayıcısını seç:',
|
|
138
|
+
'control.modelsFor': '{{provider}} modelleri:',
|
|
139
|
+
'control.pickWorkflow': 'Bir orkestrasyon iş akışı seç:',
|
|
140
|
+
'control.noRuns': 'Henüz orkestrasyon çalışması yok.',
|
|
141
|
+
'control.recentRuns': 'Son orkestrasyon çalışmaları:',
|
|
142
|
+
'control.disabled': 'Telegram uzaktan kontrol kapalı. Pixcode → Ayarlar → Telegram içinden aç veya /control on gönder.',
|
|
143
|
+
'control.selectProjectFirst': 'Önce /projects ile proje seç.',
|
|
144
|
+
'control.selectWorkflowFirst': 'Önce bir iş akışı seç.',
|
|
145
|
+
'control.agentStarted': '{{provider}}, {{project}} üzerinde başlatıldı. Sonucu buradan göndereceğim.',
|
|
146
|
+
'control.agentDone': '{{provider}} tamamlandı{{session}}',
|
|
147
|
+
'control.agentFailed': 'Başarısız: {{error}}',
|
|
148
|
+
'control.noAssistantText': 'Asistan metni dönmedi.',
|
|
149
|
+
'control.workflowStarted': 'Orkestrasyon başlatıldı: {{runId}}\nİş akışı: {{workflowId}}',
|
|
150
|
+
'control.installMenu': 'CLI kur veya onar:',
|
|
151
|
+
'control.authMenu': 'OAuth/giriş yönergeleri için sağlayıcı seç:',
|
|
152
|
+
'control.manualInstall': '{{provider}} manuel kurulum:\n{{manual}}',
|
|
153
|
+
'control.installStarted': '{{provider}} kurulumu başladı.\nİş: {{jobId}}\nKomut: {{command}}',
|
|
154
|
+
'control.settingsTitle': 'Telegram ayarları',
|
|
155
|
+
'control.pickLanguage': 'Telegram dilini seç:',
|
|
156
|
+
'control.menuExpired': 'Bu menünün süresi doldu. /menu gönder.',
|
|
157
|
+
'control.menuExpiredLong': 'Bu menünün süresi doldu. Yeni menü açmak için /menu gönder.',
|
|
158
|
+
'control.languageSet': 'Dil ayarlandı: {{language}}',
|
|
159
|
+
'control.projectSelected': 'Proje seçildi: {{project}}\n{{path}}',
|
|
160
|
+
'control.providerSelected': 'Sağlayıcı seçildi: {{provider}}',
|
|
161
|
+
'control.modelSelected': 'Model seçildi: {{model}}',
|
|
162
|
+
'control.modelCleared': 'Model temizlendi.',
|
|
163
|
+
'control.workflowSelected': 'İş akışı seçildi: {{workflow}}',
|
|
164
|
+
'control.sendAgentPrompt': 'Ajan promptunu gönder.',
|
|
165
|
+
'control.sendWorkflowPrompt': 'Orkestrasyon promptunu gönder.',
|
|
166
|
+
'control.remoteEnabled': 'Uzaktan kontrol açıldı.',
|
|
167
|
+
'control.remoteDisabled': 'Uzaktan kontrol kapatıldı.',
|
|
168
|
+
'control.progressUsage': '/progress final, /progress steps veya /progress all kullan.',
|
|
169
|
+
'control.progressSet': 'İlerleme modu {{mode}} olarak ayarlandı.',
|
|
170
|
+
'control.cancelUsage': '/cancel <runId> kullan.',
|
|
171
|
+
'control.runStatus': '{{runId}} durumu: {{status}}',
|
|
172
|
+
'control.providerAuthFallback': 'Pixcode Ayarlar → Ajanlar içinden bu sağlayıcıyı bağla.',
|
|
37
173
|
'notification.taskDone': '✅ {{title}} — görev tamamlandı.',
|
|
38
174
|
'notification.taskFailed': '⚠️ {{title}} — görev başarısız: {{error}}',
|
|
39
175
|
'notification.actionRequired': '❗ {{title}} — işlem gerekli.',
|