coding-agent-telegram 2026.4.2__tar.gz → 2026.4.7__tar.gz
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.
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/PKG-INFO +9 -1
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/README.de.md +8 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/README.fr.md +8 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/README.ja.md +8 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/README.ko.md +8 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/README.md +8 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/README.nl.md +8 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/README.th.md +9 -1
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/README.vi.md +8 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/README.zh-CN.md +8 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/README.zh-HK.md +8 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/README.zh-TW.md +8 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/bot.py +9 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/diff_utils.py +54 -4
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/locales/de.json +85 -56
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/locales/en.json +27 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/locales/fr.json +81 -52
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/locales/ja.json +87 -58
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/locales/ko.json +89 -60
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/locales/nl.json +85 -56
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/locales/th.json +91 -62
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/locales/vi.json +99 -70
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/locales/zh-CN.json +93 -64
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/locales/zh-HK.json +93 -64
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/locales/zh-TW.json +93 -64
- coding_agent_telegram-2026.4.7/src/coding_agent_telegram/router/git_commands.py +679 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/router/message_commands.py +20 -1
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/router/queue_processing.py +3 -2
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/router/session_common.py +1 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/router/switch_commands.py +64 -7
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram.egg-info/PKG-INFO +9 -1
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_bot.py +2 -2
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_command_router.py +641 -13
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_diff_chunking.py +36 -0
- coding_agent_telegram-2026.4.2/src/coding_agent_telegram/router/git_commands.py +0 -160
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/.github/workflows/pull-request-checks.yml +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/.github/workflows/python-publish.yml +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/.github/workflows/testpypi-publish.yml +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/.gitignore +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/.gitkeep +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/LICENSE +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/install-stt.sh +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/install.sh +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/pyproject.toml +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/setup.cfg +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/setup.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/__init__.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/__main__.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/agent_runner.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/cli.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/command_router.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/config.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/filters.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/git_utils.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/i18n.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/logging_utils.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/native_codex_sessions.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/native_copilot_sessions.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/native_session_types.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/native_session_utils.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/native_sessions.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/.env.example +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/secret_scrub_patterns.properties +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/sensitive_path_globs.txt +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/snapshot_excluded_dir_globs.txt +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/snapshot_excluded_dir_names.txt +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/resources/snapshot_excluded_file_globs.txt +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/router/__init__.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/router/base.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/router/project_commands.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/router/session_branch_resolution.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/router/session_commands.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/router/session_lifecycle_commands.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/router/session_provider_commands.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/router/session_status_commands.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/session_runtime.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/session_store.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/speech_to_text.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/stt_setup.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/telegram_sender.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram.egg-info/SOURCES.txt +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram.egg-info/dependency_links.txt +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram.egg-info/entry_points.txt +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram.egg-info/requires.txt +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram.egg-info/top_level.txt +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/startup.sh +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/conftest.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_agent_runner.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_agent_runner_stall.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_config.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_filters.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_git_utils.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_i18n.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_logging_utils.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_native_session_utils.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_native_sessions.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_project_validation.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_session_runtime_diff_merge.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_session_runtime_security.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_session_store.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_speech_to_text.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_stt_setup.py +0 -0
- {coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/tests/test_telegram_sender.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: coding-agent-telegram
|
|
3
|
-
Version: 2026.4.
|
|
3
|
+
Version: 2026.4.7
|
|
4
4
|
Summary: Telegram bot bridge for local coding agents (Codex/Copilot CLI)
|
|
5
5
|
Author: DCHA
|
|
6
6
|
License: MIT
|
|
@@ -277,6 +277,14 @@ The bot currently accepts:
|
|
|
277
277
|
<td><code>/commit <git commands></code></td>
|
|
278
278
|
<td>Run validated git commit-related commands inside the active session project. Available only when <code>ENABLE_COMMIT_COMMAND=true</code>. Mutating git commands require a trusted project.</td>
|
|
279
279
|
</tr>
|
|
280
|
+
<tr>
|
|
281
|
+
<td><code>/diff</code></td>
|
|
282
|
+
<td>Show changed filenames for the active session project, separated into tracked and untracked files. Tracked files include inline buttons to open per-file diffs.</td>
|
|
283
|
+
</tr>
|
|
284
|
+
<tr>
|
|
285
|
+
<td><code>/pull</code></td>
|
|
286
|
+
<td>Pull from <code>origin</code> for the active session branch after confirmation. The bot also refreshes the default branch when applicable.</td>
|
|
287
|
+
</tr>
|
|
280
288
|
<tr>
|
|
281
289
|
<td><code>/push</code></td>
|
|
282
290
|
<td>Push <code>origin <branch></code> for the current active session. The bot asks for confirmation before pushing.</td>
|
|
@@ -252,6 +252,14 @@ Der Bot akzeptiert derzeit:
|
|
|
252
252
|
<td width="332"><code>/commit <git commands></code></td>
|
|
253
253
|
<td>Geprüfte <code>git commit</code>-bezogene Befehle im Projekt der aktiven Session ausführen. Nur verfügbar, wenn <code>ENABLE_COMMIT_COMMAND=true</code>. Schreibende Git-Befehle erfordern ein vertrauenswürdiges Projekt.</td>
|
|
254
254
|
</tr>
|
|
255
|
+
<tr>
|
|
256
|
+
<td width="332"><code>/diff</code></td>
|
|
257
|
+
<td>Geänderte Dateinamen im Projekt der aktiven Session anzeigen, getrennt nach versionierten und nicht versionierten Dateien. Für versionierte Dateien gibt es Inline-Buttons zum Öffnen des jeweiligen Diffs.</td>
|
|
258
|
+
</tr>
|
|
259
|
+
<tr>
|
|
260
|
+
<td width="332"><code>/pull</code></td>
|
|
261
|
+
<td>Nach Bestätigung <code>origin</code> in den Branch der aktiven Session pullen. Wenn zutreffend, aktualisiert der Bot zusätzlich den Standard-Branch.</td>
|
|
262
|
+
</tr>
|
|
255
263
|
<tr>
|
|
256
264
|
<td width="332"><code>/push</code></td>
|
|
257
265
|
<td><code>origin <branch></code> für die aktuelle aktive Session pushen. Der Bot fragt vor dem Push nach einer Bestätigung.</td>
|
|
@@ -252,6 +252,14 @@ Le bot accepte actuellement :
|
|
|
252
252
|
<td width="332"><code>/commit <git commands></code></td>
|
|
253
253
|
<td>Exécuter des commandes liées à <code>git commit</code> validées dans le projet de la session active. Disponible uniquement si <code>ENABLE_COMMIT_COMMAND=true</code>. Les commandes Git mutantes exigent un projet trusted.</td>
|
|
254
254
|
</tr>
|
|
255
|
+
<tr>
|
|
256
|
+
<td width="332"><code>/diff</code></td>
|
|
257
|
+
<td>Afficher les noms des fichiers modifiés du projet de la session active, séparés entre fichiers suivis et non suivis. Les fichiers suivis proposent des boutons inline pour ouvrir le diff de chaque fichier.</td>
|
|
258
|
+
</tr>
|
|
259
|
+
<tr>
|
|
260
|
+
<td width="332"><code>/pull</code></td>
|
|
261
|
+
<td>Après confirmation, exécuter un <code>pull</code> depuis <code>origin</code> pour la branche de la session active. Le bot rafraîchit aussi la branche par défaut si nécessaire.</td>
|
|
262
|
+
</tr>
|
|
255
263
|
<tr>
|
|
256
264
|
<td width="332"><code>/push</code></td>
|
|
257
265
|
<td>Pousser <code>origin <branch></code> pour la session active courante. Le bot demande une confirmation avant le push.</td>
|
|
@@ -252,6 +252,14 @@ https://api.telegram.org/bot<BOT_TOKEN>/getUpdates
|
|
|
252
252
|
<td width="332"><code>/commit <git commands></code></td>
|
|
253
253
|
<td>アクティブなセッション の project 内で、検証済みの <code>git commit</code> 関連コマンドを実行します。<code>ENABLE_COMMIT_COMMAND=true</code> のときだけ利用できます。変更を伴う Git コマンドには trusted project が必要です。</td>
|
|
254
254
|
</tr>
|
|
255
|
+
<tr>
|
|
256
|
+
<td width="332"><code>/diff</code></td>
|
|
257
|
+
<td>アクティブなセッションの project で変更されたファイル名を、追跡済みファイルと未追跡ファイルに分けて表示します。追跡済みファイルには各ファイルの diff を開く inline ボタンが付きます。</td>
|
|
258
|
+
</tr>
|
|
259
|
+
<tr>
|
|
260
|
+
<td width="332"><code>/pull</code></td>
|
|
261
|
+
<td>確認後に、アクティブなセッションのブランチで <code>origin</code> から pull します。必要に応じてデフォルト ブランチも更新します。</td>
|
|
262
|
+
</tr>
|
|
255
263
|
<tr>
|
|
256
264
|
<td width="332"><code>/push</code></td>
|
|
257
265
|
<td>現在の アクティブなセッション に対して <code>origin <branch></code> を push します。push 前に bot が確認します。</td>
|
|
@@ -252,6 +252,14 @@ https://api.telegram.org/bot<BOT_TOKEN>/getUpdates
|
|
|
252
252
|
<td width="332"><code>/commit <git commands></code></td>
|
|
253
253
|
<td>활성 세션 project 안에서 검증된 <code>git commit</code> 관련 명령을 실행합니다. <code>ENABLE_COMMIT_COMMAND=true</code> 일 때만 사용할 수 있습니다. 변경성 Git 명령은 trusted project 가 필요합니다.</td>
|
|
254
254
|
</tr>
|
|
255
|
+
<tr>
|
|
256
|
+
<td width="332"><code>/diff</code></td>
|
|
257
|
+
<td>활성 세션 project 의 변경된 파일 이름을 추적 중인 파일과 추적되지 않은 파일로 나누어 표시합니다. 추적 중인 파일에는 각 파일의 diff 를 여는 inline 버튼이 함께 표시됩니다.</td>
|
|
258
|
+
</tr>
|
|
259
|
+
<tr>
|
|
260
|
+
<td width="332"><code>/pull</code></td>
|
|
261
|
+
<td>확인 후 활성 세션 브랜치에 대해 <code>origin</code> 에서 pull 합니다. 필요하면 기본 브랜치도 함께 새로고칩니다.</td>
|
|
262
|
+
</tr>
|
|
255
263
|
<tr>
|
|
256
264
|
<td width="332"><code>/push</code></td>
|
|
257
265
|
<td>현재 활성 세션 에 대해 <code>origin <branch></code> 를 push 합니다. push 전에 bot 이 확인합니다.</td>
|
|
@@ -263,6 +263,14 @@ The bot currently accepts:
|
|
|
263
263
|
<td><code>/commit <git commands></code></td>
|
|
264
264
|
<td>Run validated git commit-related commands inside the active session project. Available only when <code>ENABLE_COMMIT_COMMAND=true</code>. Mutating git commands require a trusted project.</td>
|
|
265
265
|
</tr>
|
|
266
|
+
<tr>
|
|
267
|
+
<td><code>/diff</code></td>
|
|
268
|
+
<td>Show changed filenames for the active session project, separated into tracked and untracked files. Tracked files include inline buttons to open per-file diffs.</td>
|
|
269
|
+
</tr>
|
|
270
|
+
<tr>
|
|
271
|
+
<td><code>/pull</code></td>
|
|
272
|
+
<td>Pull from <code>origin</code> for the active session branch after confirmation. The bot also refreshes the default branch when applicable.</td>
|
|
273
|
+
</tr>
|
|
266
274
|
<tr>
|
|
267
275
|
<td><code>/push</code></td>
|
|
268
276
|
<td>Push <code>origin <branch></code> for the current active session. The bot asks for confirmation before pushing.</td>
|
|
@@ -252,6 +252,14 @@ De bot accepteert momenteel:
|
|
|
252
252
|
<td width="332"><code>/commit <git commands></code></td>
|
|
253
253
|
<td>Voer gevalideerde <code>git commit</code>-gerelateerde commando’s uit binnen het project van de actieve sessie. Alleen beschikbaar als <code>ENABLE_COMMIT_COMMAND=true</code>. Muterende Git-commando’s vereisen een trusted project.</td>
|
|
254
254
|
</tr>
|
|
255
|
+
<tr>
|
|
256
|
+
<td width="332"><code>/diff</code></td>
|
|
257
|
+
<td>Toon gewijzigde bestandsnamen voor het project van de actieve sessie, gescheiden in gevolgde en niet-gevolgde bestanden. Gevolgde bestanden krijgen inline-knoppen om de diff per bestand te openen.</td>
|
|
258
|
+
</tr>
|
|
259
|
+
<tr>
|
|
260
|
+
<td width="332"><code>/pull</code></td>
|
|
261
|
+
<td>Voer na bevestiging een pull uit vanaf <code>origin</code> voor de branch van de actieve sessie. De bot ververst ook de standaardbranch wanneer dat van toepassing is.</td>
|
|
262
|
+
</tr>
|
|
255
263
|
<tr>
|
|
256
264
|
<td width="332"><code>/push</code></td>
|
|
257
265
|
<td>Push <code>origin <branch></code> voor de huidige actieve sessie. De bot vraagt om bevestiging voordat hij pusht.</td>
|
|
@@ -250,7 +250,15 @@ https://api.telegram.org/bot<BOT_TOKEN>/getUpdates
|
|
|
250
250
|
</tr>
|
|
251
251
|
<tr>
|
|
252
252
|
<td width="332"><code>/commit <git commands></code></td>
|
|
253
|
-
<td>รันคำสั่งที่เกี่ยวข้องกับ <code>git commit</code> ซึ่งผ่านการตรวจสอบแล้วภายใน project
|
|
253
|
+
<td>รันคำสั่งที่เกี่ยวข้องกับ <code>git commit</code> ซึ่งผ่านการตรวจสอบแล้วภายใน project ของเซสชันที่ใช้งานอยู่ ใช้ได้เมื่อ <code>ENABLE_COMMIT_COMMAND=true</code> เท่านั้น คำสั่ง Git ที่มีการแก้ไขต้องใช้ project ที่ trusted</td>
|
|
254
|
+
</tr>
|
|
255
|
+
<tr>
|
|
256
|
+
<td width="332"><code>/diff</code></td>
|
|
257
|
+
<td>แสดงรายชื่อไฟล์ที่เปลี่ยนใน project ของเซสชันที่ใช้งานอยู่ โดยแยกไฟล์ที่ติดตามอยู่กับไฟล์ที่ยังไม่ได้ติดตามออกจากกัน ไฟล์ที่ติดตามอยู่จะมีปุ่ม inline สำหรับเปิด diff ของแต่ละไฟล์</td>
|
|
258
|
+
</tr>
|
|
259
|
+
<tr>
|
|
260
|
+
<td width="332"><code>/pull</code></td>
|
|
261
|
+
<td>ดึงจาก <code>origin</code> สำหรับ branch ของเซสชันที่ใช้งานอยู่หลังจากยืนยันแล้ว และ bot จะรีเฟรช default branch ให้ด้วยเมื่อเกี่ยวข้อง</td>
|
|
254
262
|
</tr>
|
|
255
263
|
<tr>
|
|
256
264
|
<td width="332"><code>/push</code></td>
|
|
@@ -252,6 +252,14 @@ Hiện tại bot chấp nhận:
|
|
|
252
252
|
<td width="332"><code>/commit <git commands></code></td>
|
|
253
253
|
<td>Chạy các lệnh liên quan đến <code>git commit</code> đã được kiểm tra trong project của phiên hoạt động. Chỉ có khi <code>ENABLE_COMMIT_COMMAND=true</code>. Các lệnh Git có thay đổi yêu cầu project đã trusted.</td>
|
|
254
254
|
</tr>
|
|
255
|
+
<tr>
|
|
256
|
+
<td width="332"><code>/diff</code></td>
|
|
257
|
+
<td>Hiển thị tên các tệp đã thay đổi trong project của phiên đang hoạt động, tách riêng tệp đã theo dõi và tệp chưa theo dõi. Các tệp đã theo dõi có nút inline để mở diff của từng tệp.</td>
|
|
258
|
+
</tr>
|
|
259
|
+
<tr>
|
|
260
|
+
<td width="332"><code>/pull</code></td>
|
|
261
|
+
<td>Sau khi xác nhận, thực hiện pull từ <code>origin</code> cho branch của phiên đang hoạt động. Bot cũng làm mới branch mặc định khi cần.</td>
|
|
262
|
+
</tr>
|
|
255
263
|
<tr>
|
|
256
264
|
<td width="332"><code>/push</code></td>
|
|
257
265
|
<td>Push <code>origin <branch></code> cho phiên hoạt động hiện tại. Bot sẽ hỏi xác nhận trước khi push.</td>
|
|
@@ -252,6 +252,14 @@ bot 当前接受:
|
|
|
252
252
|
<td width="332"><code>/commit <git commands></code></td>
|
|
253
253
|
<td>在活动会话的项目内执行已校验的 <code>git commit</code> 相关命令。仅当 <code>ENABLE_COMMIT_COMMAND=true</code> 时可用。会修改内容的 Git 命令要求项目已 trusted。</td>
|
|
254
254
|
</tr>
|
|
255
|
+
<tr>
|
|
256
|
+
<td width="332"><code>/diff</code></td>
|
|
257
|
+
<td>显示活动会话项目里的已变更文件名,并分开列出已跟踪文件与未跟踪文件。已跟踪文件会附带 inline 按钮,可直接打开单个文件的 diff。</td>
|
|
258
|
+
</tr>
|
|
259
|
+
<tr>
|
|
260
|
+
<td width="332"><code>/pull</code></td>
|
|
261
|
+
<td>确认后,从 <code>origin</code> 拉取活动会话当前分支。适用时,bot 也会一并刷新默认分支。</td>
|
|
262
|
+
</tr>
|
|
255
263
|
<tr>
|
|
256
264
|
<td width="332"><code>/push</code></td>
|
|
257
265
|
<td>为当前活动会话执行 <code>origin <branch></code> push。push 前 bot 会要求确认。</td>
|
|
@@ -252,6 +252,14 @@ bot 目前接受:
|
|
|
252
252
|
<td width="332"><code>/commit <git commands></code></td>
|
|
253
253
|
<td>在作用中工作階段的專案內執行已驗證的 <code>git commit</code> 相關指令。只在 <code>ENABLE_COMMIT_COMMAND=true</code> 時可用。會修改內容的 Git 指令要求專案已 trusted。</td>
|
|
254
254
|
</tr>
|
|
255
|
+
<tr>
|
|
256
|
+
<td width="332"><code>/diff</code></td>
|
|
257
|
+
<td>顯示作用中工作階段專案內已變更的檔案名稱,並分開列出已追蹤與未追蹤檔案。已追蹤檔案會附帶 inline 按鈕,可直接開啟單一檔案的 diff。</td>
|
|
258
|
+
</tr>
|
|
259
|
+
<tr>
|
|
260
|
+
<td width="332"><code>/pull</code></td>
|
|
261
|
+
<td>確認後,從 <code>origin</code> 拉取作用中工作階段目前的分支。適用時,bot 也會一併重新整理預設分支。</td>
|
|
262
|
+
</tr>
|
|
255
263
|
<tr>
|
|
256
264
|
<td width="332"><code>/push</code></td>
|
|
257
265
|
<td>為目前作用中工作階段執行 <code>origin <branch></code> push。push 前 bot 會要求確認。</td>
|
|
@@ -252,6 +252,14 @@ bot 目前接受:
|
|
|
252
252
|
<td width="332"><code>/commit <git commands></code></td>
|
|
253
253
|
<td>在作用中工作階段的專案內執行已驗證的 <code>git commit</code> 相關指令。僅在 <code>ENABLE_COMMIT_COMMAND=true</code> 時可用。會修改內容的 Git 指令要求專案已 trusted。</td>
|
|
254
254
|
</tr>
|
|
255
|
+
<tr>
|
|
256
|
+
<td width="332"><code>/diff</code></td>
|
|
257
|
+
<td>顯示作用中工作階段專案內已變更的檔案名稱,並分開列出已追蹤與未追蹤檔案。已追蹤檔案會附帶 inline 按鈕,可直接開啟單一檔案的 diff。</td>
|
|
258
|
+
</tr>
|
|
259
|
+
<tr>
|
|
260
|
+
<td width="332"><code>/pull</code></td>
|
|
261
|
+
<td>確認後,從 <code>origin</code> 拉取作用中工作階段目前的分支。適用時,bot 也會一併重新整理預設分支。</td>
|
|
262
|
+
</tr>
|
|
255
263
|
<tr>
|
|
256
264
|
<td width="332"><code>/push</code></td>
|
|
257
265
|
<td>為目前作用中工作階段執行 <code>origin <branch></code> push。push 前 bot 會要求確認。</td>
|
{coding_agent_telegram-2026.4.2 → coding_agent_telegram-2026.4.7}/src/coding_agent_telegram/bot.py
RENAMED
|
@@ -48,9 +48,11 @@ def default_bot_commands(*, enable_commit_command: bool, locale: str = DEFAULT_L
|
|
|
48
48
|
BotCommand("new", translate(locale, "bot.command.new")),
|
|
49
49
|
BotCommand("switch", translate(locale, "bot.command.switch")),
|
|
50
50
|
BotCommand("compact", translate(locale, "bot.command.compact")),
|
|
51
|
+
BotCommand("diff", translate(locale, "bot.command.diff")),
|
|
51
52
|
]
|
|
52
53
|
if enable_commit_command:
|
|
53
54
|
commands.append(BotCommand("commit", translate(locale, "bot.command.commit")))
|
|
55
|
+
commands.append(BotCommand("pull", translate(locale, "bot.command.pull")))
|
|
54
56
|
commands.append(BotCommand("push", translate(locale, "bot.command.push")))
|
|
55
57
|
commands.append(BotCommand("abort", translate(locale, "bot.command.abort")))
|
|
56
58
|
return commands
|
|
@@ -148,7 +150,9 @@ def build_application(token: str, router: CommandRouter, *, allowed_chat_ids: se
|
|
|
148
150
|
app.add_handler(CommandHandler("new", router.handle_new, filters=allowed_private, block=False))
|
|
149
151
|
app.add_handler(CommandHandler("switch", router.handle_switch, filters=allowed_private))
|
|
150
152
|
app.add_handler(CommandHandler("compact", router.handle_compact, filters=allowed_private))
|
|
153
|
+
app.add_handler(CommandHandler("diff", router.handle_diff, filters=allowed_private))
|
|
151
154
|
app.add_handler(CommandHandler("commit", router.handle_commit, filters=allowed_private))
|
|
155
|
+
app.add_handler(CommandHandler("pull", router.handle_pull, filters=allowed_private))
|
|
152
156
|
app.add_handler(CommandHandler("push", router.handle_push, filters=allowed_private))
|
|
153
157
|
app.add_handler(CommandHandler("abort", router.handle_abort, filters=allowed_private))
|
|
154
158
|
app.add_handler(CallbackQueryHandler(router.handle_provider_callback, pattern=r"^provider:set:(codex|copilot)$", block=False))
|
|
@@ -156,6 +160,11 @@ def build_application(token: str, router: CommandRouter, *, allowed_chat_ids: se
|
|
|
156
160
|
app.add_handler(CallbackQueryHandler(router.handle_queue_continue_callback, pattern=r"^queuecontinue:(yes|no)$", block=False))
|
|
157
161
|
app.add_handler(CallbackQueryHandler(router.handle_branch_source_callback, pattern=r"^branchsource:[0-9a-f]{12}$", block=False))
|
|
158
162
|
app.add_handler(CallbackQueryHandler(router.handle_branch_discrepancy_callback, pattern=r"^branchdiscrepancy:(stored|current)$", block=False))
|
|
163
|
+
app.add_handler(CallbackQueryHandler(router.handle_commit_generate_callback, pattern=r"^commitgen:(confirm|cancel)$"))
|
|
164
|
+
app.add_handler(CallbackQueryHandler(router.handle_commit_execute_callback, pattern=r"^commitexec:(confirm|cancel)$"))
|
|
165
|
+
app.add_handler(CallbackQueryHandler(router.handle_diff_callback, pattern=r"^diff(?:show|page):\d+$"))
|
|
166
|
+
app.add_handler(CallbackQueryHandler(router.handle_switch_page_callback, pattern=r"^switchpage:\d+$"))
|
|
167
|
+
app.add_handler(CallbackQueryHandler(router.handle_pull_callback, pattern=r"^pull:(confirm|cancel)$"))
|
|
159
168
|
app.add_handler(CallbackQueryHandler(router.handle_push_callback, pattern=r"^push:(confirm|cancel)$"))
|
|
160
169
|
app.add_handler(CallbackQueryHandler(router.handle_trust_project_callback, pattern=r"^trustproject:(yes|no):"))
|
|
161
170
|
app.add_handler(MessageHandler(allowed_private & tg_filters.PHOTO, router.handle_photo, block=False))
|
|
@@ -233,16 +233,66 @@ def changed_files(project_path: Path) -> list[str]:
|
|
|
233
233
|
]
|
|
234
234
|
|
|
235
235
|
|
|
236
|
-
def
|
|
237
|
-
|
|
236
|
+
def split_changed_files(project_path: Path) -> tuple[list[str], list[str]]:
|
|
237
|
+
output = _git(project_path, ["status", "--short", "--untracked-files=all"])
|
|
238
|
+
tracked: list[str] = []
|
|
239
|
+
untracked: list[str] = []
|
|
240
|
+
for line in output.splitlines():
|
|
241
|
+
if len(line) < 4:
|
|
242
|
+
continue
|
|
243
|
+
status = line[:2]
|
|
244
|
+
path = line[3:].strip()
|
|
245
|
+
if " -> " in path:
|
|
246
|
+
path = path.split(" -> ", 1)[1].strip()
|
|
247
|
+
if (
|
|
248
|
+
not path
|
|
249
|
+
or path.startswith(f"{INTERNAL_APP_DIR}/")
|
|
250
|
+
or is_snapshot_excluded_path(path)
|
|
251
|
+
):
|
|
252
|
+
continue
|
|
253
|
+
if status == "??":
|
|
254
|
+
untracked.append(path)
|
|
255
|
+
else:
|
|
256
|
+
tracked.append(path)
|
|
257
|
+
return tracked, untracked
|
|
238
258
|
|
|
239
259
|
|
|
240
|
-
def
|
|
260
|
+
def _collect_diff_for_file(
|
|
261
|
+
project_path: Path,
|
|
262
|
+
path: str,
|
|
263
|
+
*,
|
|
264
|
+
against_ref: str | None = None,
|
|
265
|
+
cached: bool = False,
|
|
266
|
+
) -> str:
|
|
267
|
+
args = ["diff"]
|
|
268
|
+
if cached:
|
|
269
|
+
args.append("--cached")
|
|
270
|
+
if against_ref:
|
|
271
|
+
args.append(against_ref)
|
|
272
|
+
args.extend(["--", path])
|
|
273
|
+
return _git(project_path, args).strip()
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
def collect_diffs(
|
|
277
|
+
project_path: Path,
|
|
278
|
+
files: list[str],
|
|
279
|
+
*,
|
|
280
|
+
against_ref: str | None = None,
|
|
281
|
+
include_cached: bool = False,
|
|
282
|
+
) -> list[FileDiff]:
|
|
241
283
|
results: list[FileDiff] = []
|
|
242
284
|
for path in files:
|
|
243
285
|
if is_snapshot_excluded_path(path):
|
|
244
286
|
continue
|
|
245
|
-
|
|
287
|
+
parts: list[str] = []
|
|
288
|
+
diff = _collect_diff_for_file(project_path, path, against_ref=against_ref)
|
|
289
|
+
if diff:
|
|
290
|
+
parts.append(diff)
|
|
291
|
+
if include_cached:
|
|
292
|
+
cached_diff = _collect_diff_for_file(project_path, path, cached=True)
|
|
293
|
+
if cached_diff and cached_diff not in parts:
|
|
294
|
+
parts.append(cached_diff)
|
|
295
|
+
diff = "\n\n".join(parts).strip()
|
|
246
296
|
results.append(FileDiff(path=path, diff=diff.strip()))
|
|
247
297
|
return results
|
|
248
298
|
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"bot.command.abort": "Aktuellen Agent-Lauf abbrechen",
|
|
3
|
-
"bot.command.branch": "Git
|
|
3
|
+
"bot.command.branch": "Git Zweig erstellen und wechseln",
|
|
4
4
|
"bot.command.commit": "Geprüfte Git commit-Befehle ausführen",
|
|
5
5
|
"bot.command.current": "Aktive Sitzung anzeigen",
|
|
6
|
+
"bot.command.diff": "Geänderte Dateinamen gegenüber HEAD anzeigen",
|
|
6
7
|
"bot.command.new": "Neue Sitzung erstellen",
|
|
8
|
+
"bot.command.pull": "Die aktuelle Sitzungs-Zweig pullen",
|
|
7
9
|
"bot.command.project": "Aktuellen Projektordner festlegen",
|
|
8
|
-
"bot.command.provider": "
|
|
9
|
-
"bot.command.push": "Die aktuelle Sitzungs-
|
|
10
|
+
"bot.command.provider": "Anbieter für neue Sitzungen wählen",
|
|
11
|
+
"bot.command.push": "Die aktuelle Sitzungs-Zweig pushen",
|
|
10
12
|
"bot.command.switch": "Sitzungen auflisten oder wechseln",
|
|
11
13
|
"bot.error.command_failed": "⚠️ Befehl fehlgeschlagen. Bitte das Server-Log prüfen.",
|
|
12
14
|
"bot.error.session_store": "⚠️ {error}",
|
|
@@ -16,13 +18,23 @@
|
|
|
16
18
|
"common.no_project_selected": "Kein Projekt ausgewählt.\nBitte zuerst /project <project_folder> ausführen.",
|
|
17
19
|
"common.project_busy": "Auf Projekt '{project_folder}' läuft gerade ein Agent.\nBis zum Abschluss werden nur /current und /abort unterstützt.",
|
|
18
20
|
"common.project_folder_missing": "⚠️ Der Projektordner für diese Sitzung existiert nicht mehr: {project_folder}",
|
|
19
|
-
"
|
|
21
|
+
"common.button_expired": "⚠️ Diese Schaltfläche ist abgelaufen. Bitte führe den Befehl erneut aus.",
|
|
22
|
+
"git.branch_unknown": "⚠️ Der Zweig der aktuellen Sitzung konnte nicht ermittelt werden.",
|
|
20
23
|
"git.cancel_button": "Abbrechen",
|
|
24
|
+
"git.usage_diff": "Verwendung: /diff",
|
|
25
|
+
"git.usage_pull": "Verwendung: /pull",
|
|
26
|
+
"git.pull_cancelled": "Pull abgebrochen.",
|
|
27
|
+
"git.pull_completed": "Pull abgeschlossen.",
|
|
28
|
+
"git.pull_confirm_button": "Pull bestätigen",
|
|
29
|
+
"git.pull_confirm_prompt": "Zweig `{branch_name}` von `origin` pullen?",
|
|
30
|
+
"git.pull_confirm_prompt_with_default": "Zweig `{branch_name}` von `origin` pullen und zusätzlich die Standard-Zweig `{default_branch}` aktualisieren?",
|
|
31
|
+
"git.pull_in_progress": "Zweig `{branch_name}` wird von `origin` gepullt...",
|
|
32
|
+
"git.pull_in_progress_with_default": "Zweig `{branch_name}` wird von `origin` gepullt und die Standard-Zweig `{default_branch}` wird aktualisiert...",
|
|
21
33
|
"git.push_cancelled": "Push abgebrochen.",
|
|
22
34
|
"git.push_cancelled_checkout_failed": "Push abgebrochen. Wechsel zu `{branch_name}` ist zuerst fehlgeschlagen.",
|
|
23
35
|
"git.push_confirm_button": "Push bestätigen",
|
|
24
|
-
"git.push_confirm_prompt": "
|
|
25
|
-
"git.push_in_progress": "
|
|
36
|
+
"git.push_confirm_prompt": "Zweig `{branch_name}` nach `origin` pushen?",
|
|
37
|
+
"git.push_in_progress": "Zweig `{branch_name}` wird nach `origin` gepusht...",
|
|
26
38
|
"git.usage_push": "Verwendung: /push",
|
|
27
39
|
"message.photo_only_codex": "Fotoanhänge werden derzeit nur für Codex-Sitzungen unterstützt.",
|
|
28
40
|
"message.question_queued": "Frage als Q{question_number} in die Warteschlange gestellt. Sie wird verarbeitet, sobald die aktuelle Agent-Aufgabe abgeschlossen ist.",
|
|
@@ -49,6 +61,7 @@
|
|
|
49
61
|
"runtime.agent_run_failed": "Der Agent-Lauf ist fehlgeschlagen.",
|
|
50
62
|
"runtime.live_agent_output": "Live-Ausgabe des Agenten",
|
|
51
63
|
"runtime.photo_too_large": "Das Foto ist zu groß. Die maximal unterstützte Größe beträgt 5 MB.",
|
|
64
|
+
"runtime.voice_audio_too_large": "Die Audiodatei ist zu groß für die lokale Spracherkennung. Die maximal unterstützte Größe beträgt {max_size_mb} MB.",
|
|
52
65
|
"runtime.provider_output_index": "{provider}-Ausgabe {index}/{total}",
|
|
53
66
|
"runtime.provider_output_single": "{provider}-Ausgabe",
|
|
54
67
|
"runtime.replacement_session_stall": "Die Erstellung der Ersatzsitzung scheint festzuhängen.\nDer lokale Agent-Prozess läuft noch, hat aber keine Ausgabe erzeugt.\nUnter macOS kann dies daran liegen, dass auf dem Rechner, auf dem der Bot läuft, ein versteckter Berechtigungsdialog auf eine Bestätigung wartet.",
|
|
@@ -79,7 +92,7 @@
|
|
|
79
92
|
"switch.switched_to_session": "Zur Sitzung gewechselt",
|
|
80
93
|
"switch.project_label": "Projekt",
|
|
81
94
|
"switch.provider_label": "Anbieter",
|
|
82
|
-
"switch.branch_label": "
|
|
95
|
+
"switch.branch_label": "Zweig",
|
|
83
96
|
"switch.source_label": "Quelle",
|
|
84
97
|
"switch.imported_into_state_json": "In state.json importiert.",
|
|
85
98
|
"switch.status_active": "aktiv",
|
|
@@ -88,37 +101,37 @@
|
|
|
88
101
|
"bootstrap.env_created_change_line": "Wenn du später eine andere Sprache verwenden möchtest, ändere APP_LOCALE in {env_path}.",
|
|
89
102
|
"queue.button_cancel": "Abbrechen",
|
|
90
103
|
"queue.cancelled": "Die Warteschlangenfragen wurden verworfen.",
|
|
91
|
-
"project.branch_switch_requires_source": "Für den Wechsel zu
|
|
92
|
-
"project.branch_create_from_source": "Um die neue
|
|
93
|
-
"project.branch_source_missing": "Für das Projekt '{project_folder}' wurde keine
|
|
104
|
+
"project.branch_switch_requires_source": "Für den Wechsel zu Zweig {new_branch} muss zuerst eine Quelle gewählt werden.",
|
|
105
|
+
"project.branch_create_from_source": "Um die neue Zweig {new_branch} zu erstellen, wähle zuerst eine Quell-Zweig.",
|
|
106
|
+
"project.branch_source_missing": "Für das Projekt '{project_folder}' wurde keine Zweig-Quelle gefunden.\nEs fehlen local/{source_branch} und origin/{source_branch}.",
|
|
94
107
|
"project.project_label": "Projekt: {project_folder}",
|
|
95
|
-
"project.branch_target_label": "Ziel-
|
|
96
|
-
"project.choose_branch_source": "Wähle die
|
|
97
|
-
"project.current_branch_in_repo_label": "Aktuelle
|
|
98
|
-
"project.default_branch_label": "Standard-
|
|
108
|
+
"project.branch_target_label": "Ziel-Zweig: {new_branch}",
|
|
109
|
+
"project.choose_branch_source": "Wähle die Zweig-Quelle:",
|
|
110
|
+
"project.current_branch_in_repo_label": "Aktuelle Zweig im Repository: {branch_name}",
|
|
111
|
+
"project.default_branch_label": "Standard-Zweig: {branch_name}",
|
|
99
112
|
"project.refresh_warnings": "Warnungen beim Aktualisieren:",
|
|
100
|
-
"project.local_branches": "Lokale
|
|
113
|
+
"project.local_branches": "Lokale Zweiges:",
|
|
101
114
|
"project.annotation_default": "Standard",
|
|
102
|
-
"project.annotation_current_branch_in_repo": "aktuelle
|
|
115
|
+
"project.annotation_current_branch_in_repo": "aktuelle Zweig im Repository",
|
|
103
116
|
"project.none": "(keine)",
|
|
104
|
-
"project.select_branch_with": "Wähle eine
|
|
117
|
+
"project.select_branch_with": "Wähle eine Zweig mit:",
|
|
105
118
|
"project.usage_project": "Verwendung: /project <project_folder>\nBeispiel: /project backend",
|
|
106
119
|
"project.invalid_project_folder": "Ungültiger Projektordner. Es ist nur ein Ordnername erlaubt.",
|
|
107
120
|
"project.path_not_directory": "Der Projektpfad existiert, ist aber kein Verzeichnis: {folder}",
|
|
108
|
-
"project.active_session_mismatch_title": "Aktive
|
|
109
|
-
"project.current_session_html": "Aktuelle
|
|
110
|
-
"project.session_project_html": "
|
|
111
|
-
"project.start_new_session_for_project_html": "Starte mit <code>/new</code> eine neue
|
|
121
|
+
"project.active_session_mismatch_title": "Aktive Sitzung passt nicht zum Projekt",
|
|
122
|
+
"project.current_session_html": "Aktuelle Sitzung: {session_name}",
|
|
123
|
+
"project.session_project_html": "Sitzung-Projekt: {project_folder}",
|
|
124
|
+
"project.start_new_session_for_project_html": "Starte mit <code>/new</code> eine neue Sitzung, wenn du in diesem neu gewählten Projekt arbeiten möchtest.",
|
|
112
125
|
"project.project_changed_to": "Projekt gewechselt zu: {folder}",
|
|
113
|
-
"project.branch_selection_required": "Bevor in diesem Projekt eine
|
|
114
|
-
"project.active_session_label": "Aktive
|
|
115
|
-
"project.session_project_label": "
|
|
126
|
+
"project.branch_selection_required": "Bevor in diesem Projekt eine Sitzung erstellt oder fortgesetzt werden kann, muss eine Zweig gewählt werden.",
|
|
127
|
+
"project.active_session_label": "Aktive Sitzung: {session_name}",
|
|
128
|
+
"project.session_project_label": "Sitzung-Projekt: {project_folder}",
|
|
116
129
|
"project.project_set_title": "Projekt gesetzt",
|
|
117
130
|
"project.project_html": "Projekt: {project_folder}",
|
|
118
|
-
"project.current_branch_html": "Aktuelle
|
|
119
|
-
"project.branch_usage_html": "Verwende <code>/branch <new_branch></code> oder <code>/branch <origin_branch> <new_branch></code>, wenn du eine eigene Arbeits-
|
|
120
|
-
"project.default_branch_behavior_html": "Wenn <code><origin_branch></code> nicht angegeben ist, verwendet der Bot die Standard-
|
|
121
|
-
"project.current_branch_behavior_html": "Wenn du keine setzt, arbeitet der Bot auf der aktuellen
|
|
131
|
+
"project.current_branch_html": "Aktuelle Zweig: {branch_name}",
|
|
132
|
+
"project.branch_usage_html": "Verwende <code>/branch <new_branch></code> oder <code>/branch <origin_branch> <new_branch></code>, wenn du eine eigene Arbeits-Zweig möchtest.",
|
|
133
|
+
"project.default_branch_behavior_html": "Wenn <code><origin_branch></code> nicht angegeben ist, verwendet der Bot die Standard-Zweig: {branch_name}.",
|
|
134
|
+
"project.current_branch_behavior_html": "Wenn du keine setzt, arbeitet der Bot auf der aktuellen Zweig: {branch_name}",
|
|
122
135
|
"project.trust_prompt_html": "Vertraust du diesem Projekt?\nProjekt: {project_folder}",
|
|
123
136
|
"project.invalid_trust_decision": "Ungültige Vertrauensentscheidung.",
|
|
124
137
|
"project.project_folder_missing_only": "Projektordner existiert nicht: {project_folder}",
|
|
@@ -126,50 +139,66 @@
|
|
|
126
139
|
"project.already_trusted": "Projekt ist bereits vertrauenswürdig: {folder}",
|
|
127
140
|
"project.trusted": "Projekt als vertrauenswürdig markiert: {folder}",
|
|
128
141
|
"project.usage_branch": "Verwendung: /branch <new_branch>\nOder: /branch <origin_branch> <new_branch>",
|
|
129
|
-
"project.default_branch_unknown": "Die Standard-
|
|
142
|
+
"project.default_branch_unknown": "Die Standard-Zweig für dieses Repository konnte nicht bestimmt werden.",
|
|
130
143
|
"project.project_folder_missing_retry": "Projektordner existiert nicht: {project_folder}\nFühre /project {project_folder} erneut aus.",
|
|
131
144
|
"branch_resolution.use_branch": "{branch_name} verwenden",
|
|
132
|
-
"branch_resolution.create_from_instead_of_origin": "Möchtest du
|
|
133
|
-
"branch_resolution.discrepancy_detected": "Vor dem Start der aktiven
|
|
134
|
-
"branch_resolution.session_label": "
|
|
135
|
-
"branch_resolution.stored_branch_label": "Gespeicherte
|
|
136
|
-
"branch_resolution.choose_branch_to_use": "Wähle, welche
|
|
137
|
-
"branch_resolution.no_pending_decision": "Keine ausstehende
|
|
138
|
-
"branch_resolution.no_pending_discrepancy": "Kein ausstehender
|
|
139
|
-
"branch_resolution.no_active_session": "Keine aktive
|
|
140
|
-
"branch_resolution.using_current_branch": "Aktuelle
|
|
141
|
-
"branch_resolution.stored_branch_unavailable_no_fallback": "Die gespeicherte
|
|
142
|
-
"branch_resolution.stored_branch_unavailable": "Die gespeicherte
|
|
145
|
+
"branch_resolution.create_from_instead_of_origin": "Möchtest du Zweig {new_branch} von einer dieser Zweiges statt von origin/{source_branch} erstellen?",
|
|
146
|
+
"branch_resolution.discrepancy_detected": "Vor dem Start der aktiven Sitzung wurde ein Zweig-Konflikt erkannt.",
|
|
147
|
+
"branch_resolution.session_label": "Sitzung: {session_name}",
|
|
148
|
+
"branch_resolution.stored_branch_label": "Gespeicherte Zweig: {branch_name}",
|
|
149
|
+
"branch_resolution.choose_branch_to_use": "Wähle, welche Zweig verwendet werden soll.",
|
|
150
|
+
"branch_resolution.no_pending_decision": "Keine ausstehende Zweig-Entscheidung gefunden.",
|
|
151
|
+
"branch_resolution.no_pending_discrepancy": "Kein ausstehender Zweig-Konflikt gefunden.",
|
|
152
|
+
"branch_resolution.no_active_session": "Keine aktive Sitzung verfügbar.",
|
|
153
|
+
"branch_resolution.using_current_branch": "Aktuelle Zweig wird verwendet: {branch_name}",
|
|
154
|
+
"branch_resolution.stored_branch_unavailable_no_fallback": "Die gespeicherte Zweig ist nicht mehr verfügbar: {branch_name}\nEs ist keine Ersatz-Quell-Zweig verfügbar.",
|
|
155
|
+
"branch_resolution.stored_branch_unavailable": "Die gespeicherte Zweig ist nicht mehr verfügbar.",
|
|
143
156
|
"branch_resolution.missing_local_and_origin": "Es fehlen local/{branch_name} und origin/{branch_name}.",
|
|
144
|
-
"branch_resolution.create_branch_from_choices": "Möchtest du
|
|
145
|
-
"branch_resolution.choose_restore_method": "Wähle, wie die gespeicherte
|
|
146
|
-
"lifecycle.provider_selection_required": "Vor dem Erstellen oder Fortsetzen einer
|
|
157
|
+
"branch_resolution.create_branch_from_choices": "Möchtest du Zweig {branch_name} von einer dieser Zweiges erstellen?",
|
|
158
|
+
"branch_resolution.choose_restore_method": "Wähle, wie die gespeicherte Zweig wiederhergestellt werden soll.",
|
|
159
|
+
"lifecycle.provider_selection_required": "Vor dem Erstellen oder Fortsetzen einer Sitzung muss ein Anbieter gewählt werden.",
|
|
147
160
|
"lifecycle.no_project_selected_example": "Kein Projekt ausgewählt.\nBitte zuerst /project <project_folder> ausführen.\nBeispiel: /project backend",
|
|
148
|
-
"lifecycle.session_name_exists": "Der
|
|
149
|
-
"lifecycle.creating_session": "
|
|
150
|
-
"lifecycle.failed_create_session": "
|
|
151
|
-
"lifecycle.session_created_successfully": "
|
|
152
|
-
"provider.cli_not_found": "{provider_label} CLI nicht gefunden: {bin_name}\nFühre /provider aus, um einen verfügbaren
|
|
161
|
+
"lifecycle.session_name_exists": "Der Sitzung-Name existiert bereits: {session_name}\nBitte verwende einen anderen Sitzung-Namen.",
|
|
162
|
+
"lifecycle.creating_session": "Sitzung wird erstellt...",
|
|
163
|
+
"lifecycle.failed_create_session": "Sitzung konnte nicht erstellt werden.",
|
|
164
|
+
"lifecycle.session_created_successfully": "Sitzung erfolgreich erstellt: {session_name}\nSitzung-ID: {session_id}\nProjekt: {project_folder}\nAnbieter: {provider}\nZweig: {branch_name}",
|
|
165
|
+
"provider.cli_not_found": "{provider_label} CLI nicht gefunden: {bin_name}\nFühre /provider aus, um einen verfügbaren Anbieter zu wählen oder die Bot-Konfiguration zu aktualisieren.",
|
|
153
166
|
"provider.status_available": "verfügbar",
|
|
154
167
|
"provider.status_missing": "fehlt",
|
|
155
168
|
"provider.status_current": "aktuell",
|
|
156
169
|
"provider.usage_provider": "Verwendung: /provider",
|
|
157
|
-
"provider.current_provider_prompt": "Aktueller
|
|
170
|
+
"provider.current_provider_prompt": "Aktueller Anbieter: {provider}\nWähle den Anbieter für neue Sitzungs.",
|
|
158
171
|
"provider.not_selected": "(nicht ausgewählt)",
|
|
159
172
|
"provider.cli_not_found_install_first": "{provider_label} CLI nicht gefunden: {bin_name}\nAktualisiere die Bot-Konfiguration oder installiere zuerst diese CLI.",
|
|
160
|
-
"provider.current_provider_set": "Aktueller
|
|
161
|
-
"status.current_session_details": "Aktuelle
|
|
162
|
-
"status.current_branch_placeholder": "(aktuelle
|
|
173
|
+
"provider.current_provider_set": "Aktueller Anbieter gesetzt auf: {provider}",
|
|
174
|
+
"status.current_session_details": "Aktuelle Sitzung: {session_name}\nSitzung-ID: {session_id}\nProjekt: {project_folder}\nAnbieter: {provider}\nZweig: {branch_name}",
|
|
175
|
+
"status.current_branch_placeholder": "(aktuelle Zweig)",
|
|
163
176
|
"git.commit_disabled": "/commit ist deaktiviert.\nSetze ENABLE_COMMIT_COMMAND=true in der Bot-Umgebung, um ihn zu aktivieren.",
|
|
164
177
|
"git.usage_commit": "Verwendung: /commit git add ... && git commit ...",
|
|
165
178
|
"git.no_valid_commit_commands": "Es wurden keine gültigen git commit-Befehle gefunden.",
|
|
179
|
+
"git.commit_generate_prompt": "Einen git commit-Befehl für die aktuell geänderten Dateien erzeugen?",
|
|
180
|
+
"git.commit_generate_button": "Befehl erzeugen",
|
|
181
|
+
"git.commit_generate_cancelled": "Die Generierung des Commit-Befehls wurde abgebrochen.",
|
|
182
|
+
"git.commit_generate_no_changes": "Es gibt keine geänderten Dateien, für die ein Commit-Befehl erzeugt werden könnte.",
|
|
183
|
+
"git.commit_generated_below": "Der erzeugte Commit-Befehl steht unten.",
|
|
184
|
+
"git.commit_generated_command": "Erzeugter Commit-Befehl",
|
|
185
|
+
"git.commit_execute_prompt": "Möchtest du den Commit ausführen?",
|
|
186
|
+
"git.commit_execute_button": "Commit ausführen",
|
|
187
|
+
"git.commit_execute_confirmed": "Der erzeugte Commit-Befehl wird ausgeführt...",
|
|
188
|
+
"git.commit_execute_context_changed": "Die aktive Sitzung oder das Projekt wurde geändert. Bitte den Commit-Befehl erneut erzeugen.",
|
|
166
189
|
"git.project_not_trusted_for_mutation": "Dieses Projekt ist nicht für verändernde Git-Operationen freigegeben. Verwende ein mit /project angelegtes Projekt oder markiere es zuerst als vertrauenswürdig.",
|
|
167
190
|
"git.unsafe_path_arguments": "Unsichere Pfadargumente sind nicht erlaubt. Es dürfen nur Dateien innerhalb des aktuellen Projekts verwendet werden.",
|
|
168
191
|
"diff.task_completed": "Aufgabe abgeschlossen.",
|
|
169
|
-
"diff.session_label": "
|
|
192
|
+
"diff.session_label": "Sitzung: {session_name}",
|
|
170
193
|
"diff.project_label": "Projekt: {project_folder}",
|
|
171
194
|
"diff.changed_files": "Geänderte Dateien:",
|
|
172
195
|
"diff.none": "(keine)",
|
|
196
|
+
"diff.tracked_files": "Geänderte versionierte Dateien:",
|
|
197
|
+
"diff.tracked_files_page_info": "Zeige {start}-{end} von {total}.",
|
|
198
|
+
"diff.untracked_files": "Unversionierte Dateien:",
|
|
199
|
+
"diff.click_button_to_see_file_diff": "Klicke unten auf eine Schaltfläche, um den Diff einer Datei anzuzeigen.",
|
|
200
|
+
"diff.button_prev_page": "Zurück",
|
|
201
|
+
"diff.button_next_page": "Weiter",
|
|
173
202
|
"diff.new_file_header": "{file_path} (neue Datei) ({index}/{total})",
|
|
174
203
|
"diff.changed_file_header": "{file_path} (+{additions} -{deletions}) ({index}/{total})",
|
|
175
204
|
"cli.created_env_if_missing": "{env_path} wurde erstellt, falls die Datei noch nicht existierte.",
|
|
@@ -177,7 +206,7 @@
|
|
|
177
206
|
"cli.then_run": "Dann ausführen: coding-agent-telegram",
|
|
178
207
|
"bot.command.compact": "Aktive Sitzung komprimieren",
|
|
179
208
|
"status.usage_compact": "Verwendung: /compact",
|
|
180
|
-
"runtime.compacting_session": "Aktive
|
|
181
|
-
"runtime.compact_summary_missing": "Der
|
|
182
|
-
"runtime.session_compacted": "
|
|
209
|
+
"runtime.compacting_session": "Aktive Sitzung wird komprimiert...",
|
|
210
|
+
"runtime.compact_summary_missing": "Der Anbieter hat keine verwendbare kompakte Übergabezusammenfassung zurückgegeben.",
|
|
211
|
+
"runtime.session_compacted": "Sitzung erfolgreich komprimiert. Zu {session_name} ({session_id}) gewechselt."
|
|
183
212
|
}
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
"bot.command.branch": "Create and switch to a Git branch",
|
|
4
4
|
"bot.command.commit": "Run validated Git commit commands",
|
|
5
5
|
"bot.command.current": "Show the active session",
|
|
6
|
+
"bot.command.diff": "Show changed filenames vs HEAD",
|
|
6
7
|
"bot.command.new": "Create a new session",
|
|
8
|
+
"bot.command.pull": "Pull the current session branch",
|
|
7
9
|
"bot.command.project": "Set the current project folder",
|
|
8
10
|
"bot.command.provider": "Choose the provider for new sessions",
|
|
9
11
|
"bot.command.push": "Push the current session branch",
|
|
@@ -19,11 +21,20 @@
|
|
|
19
21
|
"common.project_folder_missing": "⚠️ Project folder no longer exists for this session: {project_folder}",
|
|
20
22
|
"git.branch_unknown": "⚠️ Could not determine the branch for the current session.",
|
|
21
23
|
"git.cancel_button": "Cancel",
|
|
24
|
+
"git.usage_diff": "Usage: /diff",
|
|
25
|
+
"git.pull_cancelled": "Pull cancelled.",
|
|
26
|
+
"git.pull_completed": "Pull completed.",
|
|
27
|
+
"git.pull_confirm_button": "Confirm pull",
|
|
28
|
+
"git.pull_confirm_prompt": "Pull branch `{branch_name}` from `origin`?",
|
|
29
|
+
"git.pull_confirm_prompt_with_default": "Pull branch `{branch_name}` from `origin` and also refresh default branch `{default_branch}`?",
|
|
30
|
+
"git.pull_in_progress": "Pulling branch `{branch_name}` from `origin`...",
|
|
31
|
+
"git.pull_in_progress_with_default": "Pulling branch `{branch_name}` from `origin` and refreshing default branch `{default_branch}`...",
|
|
22
32
|
"git.push_cancelled": "Push cancelled.",
|
|
23
33
|
"git.push_cancelled_checkout_failed": "Push cancelled. Failed to switch to `{branch_name}` first.",
|
|
24
34
|
"git.push_confirm_button": "Confirm push",
|
|
25
35
|
"git.push_confirm_prompt": "Push branch `{branch_name}` to `origin`?",
|
|
26
36
|
"git.push_in_progress": "Pushing branch `{branch_name}` to `origin`...",
|
|
37
|
+
"git.usage_pull": "Usage: /pull",
|
|
27
38
|
"git.usage_push": "Usage: /push",
|
|
28
39
|
"message.photo_only_codex": "Photo attachments are currently supported only for codex sessions.",
|
|
29
40
|
"message.question_queued": "Question queued as Q{question_number}. It will run after the current agent task finishes.",
|
|
@@ -165,6 +176,16 @@
|
|
|
165
176
|
"git.commit_disabled": "/commit is disabled.\nSet ENABLE_COMMIT_COMMAND=true in the bot environment to enable it.",
|
|
166
177
|
"git.usage_commit": "Usage: /commit git add ... && git commit ...",
|
|
167
178
|
"git.no_valid_commit_commands": "No valid git commit commands were found.",
|
|
179
|
+
"git.commit_generate_prompt": "Generate a git commit command for the current changed files?",
|
|
180
|
+
"git.commit_generate_button": "Generate command",
|
|
181
|
+
"git.commit_generate_cancelled": "Commit command generation cancelled.",
|
|
182
|
+
"git.commit_generate_no_changes": "There are no changed files to generate a commit command for.",
|
|
183
|
+
"git.commit_generated_below": "Generated commit command below.",
|
|
184
|
+
"git.commit_generated_command": "Generated commit command",
|
|
185
|
+
"git.commit_execute_prompt": "Do you want to execute the commit?",
|
|
186
|
+
"git.commit_execute_button": "Execute commit",
|
|
187
|
+
"git.commit_execute_confirmed": "Executing generated commit command...",
|
|
188
|
+
"git.commit_execute_context_changed": "The active session or project changed. Please generate the commit command again.",
|
|
168
189
|
"git.project_not_trusted_for_mutation": "This project is not trusted for mutating git operations. Use a project created by /project or mark it trusted first.",
|
|
169
190
|
"git.unsafe_path_arguments": "Unsafe path arguments are not allowed. Only files inside the current project may be used.",
|
|
170
191
|
"diff.task_completed": "Task completed.",
|
|
@@ -172,6 +193,12 @@
|
|
|
172
193
|
"diff.project_label": "Project: {project_folder}",
|
|
173
194
|
"diff.changed_files": "Changed files:",
|
|
174
195
|
"diff.none": "(none)",
|
|
196
|
+
"diff.tracked_files": "Tracked changed files:",
|
|
197
|
+
"diff.tracked_files_page_info": "Showing {start}-{end} of {total}.",
|
|
198
|
+
"diff.untracked_files": "Untracked files:",
|
|
199
|
+
"diff.click_button_to_see_file_diff": "Click a button below to see a file diff.",
|
|
200
|
+
"diff.button_prev_page": "Prev",
|
|
201
|
+
"diff.button_next_page": "Next",
|
|
175
202
|
"diff.new_file_header": "{file_path} (new file) ({index}/{total})",
|
|
176
203
|
"diff.changed_file_header": "{file_path} (+{additions} -{deletions}) ({index}/{total})",
|
|
177
204
|
"cli.created_env_if_missing": "Created {env_path} if it did not already exist.",
|