/provider |
- 为新 session 选择 provider。该选择会按 bot 和 chat 保存,直到你手动修改。 |
+ 为新会话选择提供方。该选择会按 bot 和 chat 保存,直到你手动修改。 |
/project <project_folder> |
@@ -222,15 +222,15 @@ bot 当前接受:
/branch <origin_branch> <new_branch> |
- 使用 `` 作为 source candidate 来准备或切换 branch。无论哪种形式,bot 之后只会提供实际存在的 source choices:`local/` 和 `origin/`。如果只存在其中一个,就只显示那个;如果两个都不存在,bot 会提示缺少 branch source。 |
+ 使用 <origin_branch> 作为 source candidate 来准备或切换 branch。无论哪种形式,bot 之后只会提供实际存在的 source choices:local/<branch> 和 origin/<branch>。如果只存在其中一个,就只显示那个;如果两个都不存在,bot 会提示缺少 branch source。 |
/current |
- 显示当前 bot 和 chat 的 active session。 |
+ 显示当前 bot 和 chat 的活动会话。 |
/new [session_name] |
- 为当前 project 创建新 session。如果省略名称,bot 会使用真实的 session ID。若缺少 provider、project 或 branch,bot 会引导你完成缺失步骤。 |
+ 为当前项目创建新会话。如果省略名称,bot 会使用真实的会话 ID。若缺少提供方、项目或 branch,bot 会引导你完成缺失步骤。 |
/switch |
@@ -250,11 +250,11 @@ bot 当前接受:
/commit <git commands> |
- 在 active session 的 project 内执行已校验的 `git commit` 相关命令。仅当 `ENABLE_COMMIT_COMMAND=true` 时可用。会修改内容的 Git 命令要求 project 已 trusted。 |
+ 在活动会话的项目内执行已校验的 `git commit` 相关命令。仅当 `ENABLE_COMMIT_COMMAND=true` 时可用。会修改内容的 Git 命令要求项目已 trusted。 |
/push |
- 为当前 active session 执行 `origin ` push。push 前 bot 会要求确认。 |
+ 为当前活动会话执行 `origin ` push。push 前 bot 会要求确认。 |
/abort |
@@ -390,15 +390,15 @@ bot 当前接受:
~/.coding-agent-telegram/state.json |
- Hauptdatei für den Session-Status. |
+ 会话状态主文件。 |
~/.coding-agent-telegram/state.json.bak |
- Backup-Datei für den Status. |
+ 状态备份文件。 |
~/.coding-agent-telegram/logs |
- Log-Verzeichnis. |
+ 日志目录。 |
@@ -418,9 +418,9 @@ ENABLE_SENSITIVE_DIFF_FILTER=true
ENABLE_SECRET_SCRUB_FILTER=true
```
-## 🧠 Session 管理
+## 🧠 会话管理
-Session 按以下范围区分:
+会话按以下范围区分:
- Telegram bot
- Telegram chat
@@ -433,35 +433,35 @@ Session 按以下范围区分:
- Bot B + 你的 chat -> frontend 工作
- Bot C + 你的 chat -> infra 工作
-active session 还会绑定到:
+当前活动会话还会绑定到:
-- project folder
-- provider
+- 项目文件夹
+- 提供方
- 如果有的话,branch 名称
-每个 session 会保存:
+每个会话会保存:
-- session 名称
-- project folder
+- 会话名称
+- 项目文件夹
- branch 名称
-- provider
+- 提供方
- timestamps
-- 该 bot/chat 范围下的 active session 选择
+- 该 bot/chat 范围下的活动会话选择
-### 🔓 Workspace concurrency lock
+### 🔓 工作区并发锁
-同一时间,每个 **project folder** 只能有一个 agent run 在执行,不管它是由哪个 chat 或 Telegram bot 触发的。
+同一时间,每个**项目文件夹**只能有一个代理运行实例在执行,不管它是由哪个 chat 或 Telegram bot 触发的。
-- **project is busy**:该 workspace 里已经有一个 agent run 在运行
-- **agent is busy**:那个 run 仍在处理当前请求
+- **项目忙碌中**:该工作区里已经有一个代理运行实例在执行
+- **代理忙碌中**:该运行实例仍在处理当前请求
bot 会强制这个限制,避免两个 agent 同时写入同一个 workspace,从而减少冲突修改和数据损坏的风险。
如果同一个 project 已经有 agent 在运行,又收到新的消息,bot 会立即回复:
-> ⏳ 这个 project 上已经有 agent 在运行。请等待它完成。
+> ⏳ 项目上已有代理正在运行。请等待其完成。
这个 lock 只保存在内存中,不写入磁盘,所以当 agent 完成、失败或 server 重启时会自动释放。
@@ -479,7 +479,7 @@ bot 会强制这个限制,避免两个 agent 同时写入同一个 workspace
_在每次 agent run 期间,bot 也会为项目生成轻量的 before/after snapshot,用来汇总改动文件并把 diff 发回 Telegram。这个 snapshot 由 bot 应用自己生成,而不是由 Codex 或 Copilot 生成。_
-**Snapshot 说明:**
+**快照说明:**
- app 会在 run 前后扫描 project directory
- 对于普通文本文件,app 会优先使用本次 run 的 snapshot diff,而不是 git head diff
@@ -489,13 +489,13 @@ _在每次 agent run 期间,bot 也会为项目生成轻量的 before/after sn
- 如果 snapshot 无法把某个 file 表示成文本,app 会在可能时 fallback 到 `git diff`
- 对于大文件或非文本文件,diff 仍可能被省略,并替换为一条简短说明
-Snapshot 排除规则位于 package resources 中:
+快照排除规则位于套件资源中:
- `src/coding_agent_telegram/resources/snapshot_excluded_dir_names.txt`
- `src/coding_agent_telegram/resources/snapshot_excluded_dir_globs.txt`
- `src/coding_agent_telegram/resources/snapshot_excluded_file_globs.txt`
-你可以在 env file 中覆盖这些默认值,而无需修改已安装的 package:
+你可以在 env file 中覆盖这些默认值,而无需修改已安装的套件:
- `SNAPSHOT_INCLUDE_PATH_GLOBS`
强制把匹配的 path 包含进 diff。
@@ -518,8 +518,8 @@ bot 会把 project 和 branch 当成一组信息来处理。
当你创建或切换 branch 时,bot 会明确引导你选择 source:
-- `local/` 表示使用本地 branch 作为 source
-- `origin/` 表示先从远端 branch 更新,再切换
+- local/<branch> 表示使用本地 branch 作为 source
+- origin/<branch> 表示先从远端 branch 更新,再切换
如果 bot 发现 session 里保存的 branch 与当前 repository branch 不一致,它不会盲目继续,而是会询问你要使用哪一个 branch:
@@ -533,11 +533,11 @@ bot 会把 project 和 branch 当成一组信息来处理。
- 已存在的 folder 遵循 `CODEX_SKIP_GIT_REPO_CHECK`
- 通过 `/project ` 创建的 folder 会被此 app 标记为 trusted
- 通过 `/project ` 选择的已有 folder,在你于 Telegram 中确认 trust 之前仍然保持 untrusted
-- 因此,新建的 project folder 可以直接使用
+- 因此,新建的项目文件夹可以直接使用
- 可以通过 `ENABLE_COMMIT_COMMAND` 完全禁用 `/commit`
- 会修改内容的 `/commit` 操作只允许在 trusted project 上执行
-## 🪵 Logs
+## 🪵 日志
log 会**同时写入 stdout 和轮转日志文件**,路径为:
@@ -552,7 +552,7 @@ log 会**同时写入 stdout 和轮转日志文件**,路径为:
- project 选择
- session 创建
- session 切换
-- active session 报告
+- 活动会话报告
- 正常 run 执行(包含截断后的 prompt 审计日志行)
- resume 失败后的 session 替换
- warnings 与 runtime errors
@@ -567,17 +567,17 @@ log 会**同时写入 stdout 和轮转日志文件**,路径为:
测试套件
- `startup.sh`
- 本地 bootstrap 与 startup 入口
+ 本地启动与运行入口
- `src/coding_agent_telegram/resources/.env.example`
- 标准环境模板,同时用于 repo 启动和 package 安装
+ 标准环境模板,同时用于仓库启动和套件安装
- `pyproject.toml`
packaging 与依赖配置
-## 📦 Release 版本规则
+## 📦 发布版本规则
-package 版本由 Git tags 推导而来。
+套件版本由 Git tags 推导而来。
- TestPyPI/testing: `v2026.3.26.dev1`
- PyPI prerelease: `v2026.3.26rc1`
diff --git a/README.zh-HK.md b/README.zh-HK.md
index 6ea9dd4..3b3db15 100644
--- a/README.zh-HK.md
+++ b/README.zh-HK.md
@@ -109,7 +109,7 @@ Openclaw 提供非常完整的能力,也內建了名為 Pi-Agent 的 agent loo
## 🚀 快速開始
-### Option A:一行 bootstrap script
+### 方案 A:一行啟動腳本
```bash
curl -fsSL https://raw.githubusercontent.com/daocha/coding-agent-telegram/main/install.sh | bash
```
@@ -210,7 +210,7 @@ bot 目前接受:
/provider |
- 為新 session 選擇 provider。這個選擇會按 bot 與 chat 儲存,直到你手動修改。 |
+ 為新的工作階段選擇提供者。這個選擇會按 bot 與 chat 儲存,直到你手動修改。 |
/project <project_folder> |
@@ -222,15 +222,15 @@ bot 目前接受:
/branch <origin_branch> <new_branch> |
- 使用 `` 作為 source candidate 來準備或切換 branch。無論哪種形式,bot 之後只會提供實際存在的 source choices:`local/` 和 `origin/`。若只存在其中一個,就只顯示那個;若兩個都不存在,bot 會提示缺少 branch source。 |
+ 使用 <origin_branch> 作為 source candidate 來準備或切換 branch。無論哪種形式,bot 之後只會提供實際存在的 source choices:local/<branch> 和 origin/<branch>。若只存在其中一個,就只顯示那個;若兩個都不存在,bot 會提示缺少 branch source。 |
/current |
- 顯示目前 bot 與 chat 的 active session。 |
+ 顯示目前 bot 與 chat 的作用中工作階段。 |
/new [session_name] |
- 為目前的 project 建立新 session。如果省略名稱,bot 會使用真實 session ID。若缺少 provider、project 或 branch,bot 會引導你完成缺少的步驟。 |
+ 為目前的專案建立新工作階段。如果省略名稱,bot 會使用真實工作階段 ID。若缺少提供者、專案或 branch,bot 會引導你完成缺少的步驟。 |
/switch |
@@ -250,11 +250,11 @@ bot 目前接受:
/commit <git commands> |
- 在 active session 的 project 內執行已驗證的 `git commit` 相關指令。只在 `ENABLE_COMMIT_COMMAND=true` 時可用。會修改內容的 Git 指令要求 project 已 trusted。 |
+ 在作用中工作階段的專案內執行已驗證的 `git commit` 相關指令。只在 `ENABLE_COMMIT_COMMAND=true` 時可用。會修改內容的 Git 指令要求專案已 trusted。 |
/push |
- 為目前 active session 執行 `origin ` push。push 前 bot 會要求確認。 |
+ 為目前作用中工作階段執行 `origin ` push。push 前 bot 會要求確認。 |
/abort |
@@ -391,20 +391,20 @@ bot 目前接受:
-State 與 Logs
+狀態與日誌
~/.coding-agent-telegram/state.json |
- Hauptdatei für den Session-Status. |
+ Session 狀態主檔。 |
~/.coding-agent-telegram/state.json.bak |
- Backup-Datei für den Status. |
+ 狀態備份檔。 |
~/.coding-agent-telegram/logs |
- Log-Verzeichnis. |
+ 日誌目錄。 |
@@ -439,35 +439,35 @@ Session 會按以下範圍分開:
- Bot B + 你的 chat -> frontend 工作
- Bot C + 你的 chat -> infra 工作
-active session 亦會綁定到:
+目前作用中的工作階段亦會綁定到:
-- project folder
-- provider
+- 專案資料夾
+- 提供者
- 如有的話,branch 名稱
-每個 session 會儲存:
+每個工作階段會儲存:
-- session 名稱
-- project folder
+- 工作階段名稱
+- 專案資料夾
- branch 名稱
-- provider
+- 提供者
- timestamps
-- 該 bot/chat 範圍下的 active session 選擇
+- 該 bot/chat 範圍下的作用中工作階段選擇
-### 🔓 Workspace concurrency lock
+### 🔓 工作區並行鎖定
-同一時間,每個 **project folder** 只能有一個 agent run 在執行,不論它是由哪個 chat 或 Telegram bot 觸發。
+同一時間,每個**專案資料夾**只能有一個代理執行在運作,不論它是由哪個 chat 或 Telegram bot 觸發。
-- **project is busy**:該 workspace 裡已經有一個 agent run 在運行
-- **agent is busy**:那個 run 仍在處理目前的請求
+- **專案忙碌中**:該工作區裡已經有一個代理執行在運作
+- **代理忙碌中**:該執行仍在處理目前的請求
bot 會強制這個限制,避免兩個 agent 同時寫入同一個 workspace,從而減少衝突修改和資料損壞風險。
如果同一個 project 已經有 agent 在運行,又收到新訊息,bot 會立即回覆:
-> ⏳ 這個 project 上已經有 agent 在運行。請等待它完成。
+> ⏳ 專案上已有代理正在執行。請等待其完成。
這個 lock 只保存在記憶體中,不會寫入磁碟,所以當 agent 完成、失敗或 server 重新啟動時會自動釋放。
@@ -485,7 +485,7 @@ bot 會強制這個限制,避免兩個 agent 同時寫入同一個 workspace
_在每次 agent run 期間,bot 也會為 project 產生輕量的 before/after snapshot,用來總結已變更檔案並把 diff 傳回 Telegram。這個 snapshot 是由 bot app 自己建立,不是由 Codex 或 Copilot 建立。_
-**Snapshot 說明:**
+**快照說明:**
- app 會在 run 前後掃描 project directory
- 對一般文字檔,app 會優先使用本次 run 的 snapshot diff,而不是 git head diff
@@ -495,13 +495,13 @@ _在每次 agent run 期間,bot 也會為 project 產生輕量的 before/after
- 如果 snapshot 無法把 file 表示為文字,app 會在可行時 fallback 到 `git diff`
- 對大檔案或非文字檔,diff 仍可能被省略,並以簡短訊息代替
-Snapshot 排除規則位於 package resources:
+快照排除規則位於套件資源:
- `src/coding_agent_telegram/resources/snapshot_excluded_dir_names.txt`
- `src/coding_agent_telegram/resources/snapshot_excluded_dir_globs.txt`
- `src/coding_agent_telegram/resources/snapshot_excluded_file_globs.txt`
-你可以在 env file 中覆蓋這些預設值,而不用修改已安裝的 package:
+你可以在 env file 中覆蓋這些預設值,而不用修改已安裝的套件:
- `SNAPSHOT_INCLUDE_PATH_GLOBS`
強制把符合的 path 納入 diff。
@@ -524,8 +524,8 @@ bot 會把 project 和 branch 當成一組來處理。
當你建立或切換 branch 時,bot 會明確引導你選擇 source:
-- `local/`:使用本地 branch 作為 source
-- `origin/`:先從遠端 branch 更新,再切換
+- local/<branch>:使用本地 branch 作為 source
+- origin/<branch>:先從遠端 branch 更新,再切換
如果 bot 發現 session 中儲存的 branch 與目前 repository branch 不一致,它不會盲目繼續,而會詢問你想使用哪個 branch:
@@ -539,11 +539,11 @@ bot 會把 project 和 branch 當成一組來處理。
- 已存在的 folder 會遵循 `CODEX_SKIP_GIT_REPO_CHECK`
- 透過 `/project ` 建立的 folder 會被這個 app 標記為 trusted
- 透過 `/project ` 選取的既有 folder,在你於 Telegram 確認 trust 前仍然保持 untrusted
-- 因此,新建立的 project folder 可以立即使用
+- 因此,新建立的專案資料夾可以立即使用
- 可以用 `ENABLE_COMMIT_COMMAND` 完全停用 `/commit`
- 會修改內容的 `/commit` 操作只允許在 trusted project 上執行
-## 🪵 Logs
+## 🪵 日誌
log 會**同時寫入 stdout 和輪轉 log file**,路徑如下:
@@ -558,7 +558,7 @@ log 會**同時寫入 stdout 和輪轉 log file**,路徑如下:
- project 選擇
- session 建立
- session 切換
-- active session 報告
+- 作用中工作階段報告
- 正常 run 執行(包含被截短的 prompt audit log 行)
- resume 失敗後的 session 替換
- warnings 與 runtime errors
@@ -573,17 +573,17 @@ log 會**同時寫入 stdout 和輪轉 log file**,路徑如下:
測試套件
- `startup.sh`
- 本地 bootstrap 與 startup 入口
+ 本地啟動與執行入口
- `src/coding_agent_telegram/resources/.env.example`
- 標準環境範本,同時用於 repo 啟動與 package 安裝
+ 標準環境範本,同時用於儲存庫啟動與套件安裝
- `pyproject.toml`
packaging 與 dependency 設定
-## 📦 Release 版本規則
+## 📦 發行版本規則
-package 版本由 Git tags 推導而來。
+套件版本由 Git tags 推導而來。
- TestPyPI/testing: `v2026.3.26.dev1`
- PyPI prerelease: `v2026.3.26rc1`
diff --git a/README.zh-TW.md b/README.zh-TW.md
index f36d5b7..3a138c1 100644
--- a/README.zh-TW.md
+++ b/README.zh-TW.md
@@ -109,7 +109,7 @@ Openclaw 提供非常完整的能力,也內建了名為 Pi-Agent 的 agent loo
## 🚀 快速開始
-### Option A:一行 bootstrap script
+### 方案 A:一行啟動腳本
```bash
curl -fsSL https://raw.githubusercontent.com/daocha/coding-agent-telegram/main/install.sh | bash
```
@@ -210,7 +210,7 @@ bot 目前接受:
/provider |
- 為新的 session 選擇 provider。這個選擇會依 bot 與 chat 儲存,直到你手動修改。 |
+ 為新的工作階段選擇提供者。這個選擇會依 bot 與 chat 儲存,直到你手動修改。 |
/project <project_folder> |
@@ -222,15 +222,15 @@ bot 目前接受:
/branch <origin_branch> <new_branch> |
- 使用 `` 作為 source candidate 來準備或切換 branch。無論哪種形式,bot 之後只會提供實際存在的 source choices:`local/` 和 `origin/`。若只存在其中一個,就只顯示那個;若兩個都不存在,bot 會提示缺少 branch source。 |
+ 使用 <origin_branch> 作為 source candidate 來準備或切換 branch。無論哪種形式,bot 之後只會提供實際存在的 source choices:local/<branch> 和 origin/<branch>。若只存在其中一個,就只顯示那個;若兩個都不存在,bot 會提示缺少 branch source。 |
/current |
- 顯示目前 bot 與 chat 的 active session。 |
+ 顯示目前 bot 與 chat 的作用中工作階段。 |
/new [session_name] |
- 為目前的 project 建立新的 session。如果省略名稱,bot 會使用真實 session ID。若缺少 provider、project 或 branch,bot 會引導你完成缺少的步驟。 |
+ 為目前的專案建立新的工作階段。如果省略名稱,bot 會使用真實工作階段 ID。若缺少提供者、專案或 branch,bot 會引導你完成缺少的步驟。 |
/switch |
@@ -250,11 +250,11 @@ bot 目前接受:
/commit <git commands> |
- 在 active session 的 project 內執行已驗證的 `git commit` 相關指令。僅在 `ENABLE_COMMIT_COMMAND=true` 時可用。會修改內容的 Git 指令要求 project 已 trusted。 |
+ 在作用中工作階段的專案內執行已驗證的 `git commit` 相關指令。僅在 `ENABLE_COMMIT_COMMAND=true` 時可用。會修改內容的 Git 指令要求專案已 trusted。 |
/push |
- 為目前 active session 執行 `origin ` push。push 前 bot 會要求確認。 |
+ 為目前作用中工作階段執行 `origin ` push。push 前 bot 會要求確認。 |
/abort |
@@ -391,20 +391,20 @@ bot 目前接受:
-State 與 Logs
+狀態與日誌
~/.coding-agent-telegram/state.json |
- Hauptdatei für den Session-Status. |
+ Session 狀態主檔。 |
~/.coding-agent-telegram/state.json.bak |
- Backup-Datei für den Status. |
+ 狀態備份檔。 |
~/.coding-agent-telegram/logs |
- Log-Verzeichnis. |
+ 日誌目錄。 |
@@ -439,35 +439,35 @@ Session 會依以下範圍分開:
- Bot B + 你的 chat -> frontend 工作
- Bot C + 你的 chat -> infra 工作
-active session 也會綁定到:
+目前作用中的工作階段也會綁定到:
-- project folder
-- provider
+- 專案資料夾
+- 提供者
- 如果有的話,branch 名稱
-每個 session 會儲存:
+每個工作階段會儲存:
-- session 名稱
-- project folder
+- 工作階段名稱
+- 專案資料夾
- branch 名稱
-- provider
+- 提供者
- timestamps
-- 該 bot/chat 範圍下的 active session 選擇
+- 該 bot/chat 範圍下的作用中工作階段選擇
-### 🔓 Workspace concurrency lock
+### 🔓 工作區並行鎖定
-同一時間,每個 **project folder** 只能有一個 agent run 在執行,不論它是由哪個 chat 或 Telegram bot 觸發。
+同一時間,每個**專案資料夾**只能有一個代理執行在運作,不論它是由哪個 chat 或 Telegram bot 觸發。
-- **project is busy**:該 workspace 裡已經有一個 agent run 在運行
-- **agent is busy**:那個 run 仍在處理目前的請求
+- **專案忙碌中**:該工作區裡已經有一個代理執行在運作
+- **代理忙碌中**:該執行仍在處理目前的請求
bot 會強制這個限制,避免兩個 agent 同時寫入同一個 workspace,從而減少衝突修改與資料損壞的風險。
如果同一個 project 已經有 agent 在運行,又收到新的訊息,bot 會立即回覆:
-> ⏳ 這個 project 上已經有 agent 在運行。請等待它完成。
+> ⏳ 專案上已有代理正在執行。請等待其完成。
這個 lock 只保存在記憶體中,不會寫入磁碟,所以當 agent 完成、失敗或 server 重新啟動時會自動釋放。
@@ -485,7 +485,7 @@ bot 會強制這個限制,避免兩個 agent 同時寫入同一個 workspace
_在每次 agent run 期間,bot 也會為 project 產生輕量的 before/after snapshot,用來彙整已變更檔案並把 diff 傳回 Telegram。這個 snapshot 是由 bot app 自己建立,不是由 Codex 或 Copilot 建立。_
-**Snapshot 說明:**
+**快照說明:**
- app 會在 run 前後掃描 project directory
- 對一般文字檔,app 會優先使用本次 run 的 snapshot diff,而不是 git head diff
@@ -495,13 +495,13 @@ _在每次 agent run 期間,bot 也會為 project 產生輕量的 before/after
- 如果 snapshot 無法把 file 表示為文字,app 會在可行時 fallback 到 `git diff`
- 對大檔案或非文字檔,diff 仍可能被省略,並改用簡短訊息代替
-Snapshot 排除規則位於 package resources:
+快照排除規則位於套件資源:
- `src/coding_agent_telegram/resources/snapshot_excluded_dir_names.txt`
- `src/coding_agent_telegram/resources/snapshot_excluded_dir_globs.txt`
- `src/coding_agent_telegram/resources/snapshot_excluded_file_globs.txt`
-你可以在 env file 中覆蓋這些預設值,而不用修改已安裝的 package:
+你可以在 env file 中覆蓋這些預設值,而不用修改已安裝的套件:
- `SNAPSHOT_INCLUDE_PATH_GLOBS`
強制把符合的 path 納入 diff。
@@ -524,8 +524,8 @@ bot 會把 project 和 branch 當成一組資訊來處理。
當你建立或切換 branch 時,bot 會明確引導你選擇 source:
-- `local/`:使用本地 branch 作為 source
-- `origin/`:先從遠端 branch 更新,再切換
+- local/<branch>:使用本地 branch 作為 source
+- origin/<branch>:先從遠端 branch 更新,再切換
如果 bot 發現 session 中儲存的 branch 與目前 repository branch 不一致,它不會盲目繼續,而會詢問你想使用哪個 branch:
@@ -539,11 +539,11 @@ bot 會把 project 和 branch 當成一組資訊來處理。
- 已存在的 folder 會遵循 `CODEX_SKIP_GIT_REPO_CHECK`
- 透過 `/project ` 建立的 folder 會被這個 app 標記為 trusted
- 透過 `/project ` 選取的既有 folder,在你於 Telegram 確認 trust 前仍然保持 untrusted
-- 因此,新建立的 project folder 可以立即使用
+- 因此,新建立的專案資料夾可以立即使用
- 可以用 `ENABLE_COMMIT_COMMAND` 完全停用 `/commit`
- 會修改內容的 `/commit` 操作只允許在 trusted project 上執行
-## 🪵 Logs
+## 🪵 日誌
log 會**同時寫入 stdout 與輪轉 log file**,路徑如下:
@@ -558,7 +558,7 @@ log 會**同時寫入 stdout 與輪轉 log file**,路徑如下:
- project 選擇
- session 建立
- session 切換
-- active session 報告
+- 作用中工作階段報告
- 正常 run 執行(包含被截短的 prompt audit log 行)
- resume 失敗後的 session 替換
- warnings 與 runtime errors
@@ -573,17 +573,17 @@ log 會**同時寫入 stdout 與輪轉 log file**,路徑如下:
測試套件
- `startup.sh`
- 本地 bootstrap 與 startup 入口
+ 本地啟動與執行入口
- `src/coding_agent_telegram/resources/.env.example`
- 標準環境範本,同時用於 repo 啟動與 package 安裝
+ 標準環境範本,同時用於儲存庫啟動與套件安裝
- `pyproject.toml`
packaging 與 dependency 設定
-## 📦 Release 版本規則
+## 📦 發行版本規則
-package 版本由 Git tags 推導而來。
+套件版本由 Git tags 推導而來。
- TestPyPI/testing: `v2026.3.26.dev1`
- PyPI prerelease: `v2026.3.26rc1`
diff --git a/src/coding_agent_telegram/resources/locales/zh-HK.json b/src/coding_agent_telegram/resources/locales/zh-HK.json
index 8c4332f..8d67c56 100644
--- a/src/coding_agent_telegram/resources/locales/zh-HK.json
+++ b/src/coding_agent_telegram/resources/locales/zh-HK.json
@@ -10,7 +10,7 @@
"bot.command.switch": "列出工作階段或切換",
"bot.error.command_failed": "⚠️ 指令失敗。請檢查伺服器日誌。",
"bot.error.session_store": "⚠️ {error}",
- "common.agent_already_running": "⏳ 專案 '{project_folder}' 已有代理正在執行。請等待其完成。",
+ "common.agent_already_running": "⏳ 專案 '{project_folder}' 上已有代理正在執行。請等待其完成。",
"common.current_project_not_git": "⚠️ 目前專案不是 Git 儲存庫。",
"common.no_active_session": "沒有使用中的工作階段。\n請先執行 /project 和 /new。",
"common.no_project_selected": "尚未選擇專案。\n請先執行 /project 。",
diff --git a/src/coding_agent_telegram/resources/locales/zh-TW.json b/src/coding_agent_telegram/resources/locales/zh-TW.json
index ef3dc35..5055e6c 100644
--- a/src/coding_agent_telegram/resources/locales/zh-TW.json
+++ b/src/coding_agent_telegram/resources/locales/zh-TW.json
@@ -10,7 +10,7 @@
"bot.command.switch": "列出工作階段或切換",
"bot.error.command_failed": "⚠️ 指令失敗。請檢查伺服器日誌。",
"bot.error.session_store": "⚠️ {error}",
- "common.agent_already_running": "⏳ 專案 '{project_folder}' 已有代理正在執行。請等待其完成。",
+ "common.agent_already_running": "⏳ 專案 '{project_folder}' 上已有代理正在執行。請等待其完成。",
"common.current_project_not_git": "⚠️ 目前專案不是 Git 儲存庫。",
"common.no_active_session": "沒有使用中的工作階段。\n請先執行 /project 和 /new。",
"common.no_project_selected": "尚未選擇專案。\n請先執行 /project 。",
diff --git a/src/coding_agent_telegram/router/session_lifecycle_commands.py b/src/coding_agent_telegram/router/session_lifecycle_commands.py
index bcb7237..622541c 100644
--- a/src/coding_agent_telegram/router/session_lifecycle_commands.py
+++ b/src/coding_agent_telegram/router/session_lifecycle_commands.py
@@ -172,61 +172,70 @@ async def _continue_pending_action(self, update: Update, context: ContextTypes.D
pending_action = self._pending_action(chat_id)
if not pending_action:
return False
+ completed = False
- resolved = await self._resolve_session_prerequisites(update, context, pending_action=pending_action)
- if resolved is None:
- return False
- provider, project_folder, branch_name, project_path = resolved
- kind = str(pending_action.get("kind") or "")
-
- if kind == "new_session":
- if await self._create_session_for_context(
- update,
- context,
- session_name=str(pending_action.get("session_name") or "").strip() or None,
- use_session_id_as_name=bool(pending_action.get("use_session_id_as_name")),
- provider=provider,
- project_folder=project_folder,
- branch_name=branch_name,
- project_path=project_path,
- ):
- self._store_pending_action(chat_id, None)
- return True
- return False
-
- if kind == "message":
- user_message = str(pending_action.get("user_message") or "").strip()
- if not user_message:
- self._store_pending_action(chat_id, None)
+ try:
+ resolved = await self._resolve_session_prerequisites(update, context, pending_action=pending_action)
+ if resolved is None:
return False
- chat_state = self.deps.store.get_chat_state(self.deps.bot_id, chat_id)
- if not self._active_session_matches_current_context(chat_state):
- if not await self._create_session_for_context(
+ provider, project_folder, branch_name, project_path = resolved
+ kind = str(pending_action.get("kind") or "")
+
+ if kind == "new_session":
+ if await self._create_session_for_context(
update,
context,
session_name=str(pending_action.get("session_name") or "").strip() or None,
- use_session_id_as_name=False,
+ use_session_id_as_name=bool(pending_action.get("use_session_id_as_name")),
provider=provider,
project_folder=project_folder,
branch_name=branch_name,
project_path=project_path,
):
- return False
- if not await self._ensure_active_session_ready_for_run(update, context):
+ self._store_pending_action(chat_id, None)
+ completed = True
+ return True
return False
- try:
- self._last_run_results[chat_id] = await self.runtime.run_active_session(
- update,
- context,
- user_message=user_message,
- suppress_working_notice=bool(pending_action.get("suppress_working_notice")),
- )
- finally:
- self._store_pending_action(chat_id, None)
- return True
- self._store_pending_action(chat_id, None)
- return False
+ if kind == "message":
+ user_message = str(pending_action.get("user_message") or "").strip()
+ if not user_message:
+ self._store_pending_action(chat_id, None)
+ completed = True
+ return False
+ chat_state = self.deps.store.get_chat_state(self.deps.bot_id, chat_id)
+ if not self._active_session_matches_current_context(chat_state):
+ if not await self._create_session_for_context(
+ update,
+ context,
+ session_name=str(pending_action.get("session_name") or "").strip() or None,
+ use_session_id_as_name=False,
+ provider=provider,
+ project_folder=project_folder,
+ branch_name=branch_name,
+ project_path=project_path,
+ ):
+ return False
+ if not await self._ensure_active_session_ready_for_run(update, context):
+ return False
+ try:
+ self._last_run_results[chat_id] = await self.runtime.run_active_session(
+ update,
+ context,
+ user_message=user_message,
+ suppress_working_notice=bool(pending_action.get("suppress_working_notice")),
+ )
+ finally:
+ self._store_pending_action(chat_id, None)
+ completed = True
+ return True
+
+ self._store_pending_action(chat_id, None)
+ completed = True
+ return False
+ finally:
+ if completed:
+ await self._drain_chat_message_queue(chat_id, context)
async def _ensure_active_session_ready_for_run(self, update: Update, context: ContextTypes.DEFAULT_TYPE) -> bool:
chat_id = update.effective_chat.id
diff --git a/tests/test_command_router.py b/tests/test_command_router.py
index 45ad0b0..3b3f009 100644
--- a/tests/test_command_router.py
+++ b/tests/test_command_router.py
@@ -2638,6 +2638,59 @@ async def exercise():
asyncio.run(exercise())
+def test_provider_callback_drains_queued_messages_after_pending_message_runs(tmp_path: Path):
+ backend = tmp_path / "backend"
+ backend.mkdir()
+ runner = DummyRunner()
+ cfg = make_config(tmp_path)
+ store = SessionStore(cfg.state_file, cfg.state_backup_file)
+ store.set_current_project_folder("bot-a", 123, "backend")
+ router = CommandRouter(RouterDeps(cfg=cfg, store=store, agent_runner=runner, bot_id="bot-a"))
+ router._provider_available = lambda provider: True
+
+ async def exercise():
+ bot = FakeBot()
+ context = SimpleNamespace(args=[], bot=bot)
+
+ await router.handle_message(make_update(text="first question", message_id=101), context)
+ await router.handle_message(make_update(text="second question", message_id=202), context)
+
+ query = SimpleNamespace(
+ data="provider:set:codex",
+ answer=None,
+ edit_message_text=None,
+ )
+ callback_update = SimpleNamespace(
+ effective_chat=SimpleNamespace(id=123, type="private"),
+ callback_query=query,
+ message=SimpleNamespace(text=None, photo=None, caption=None, message_id=None),
+ )
+ edited = []
+
+ async def fake_answer():
+ return None
+
+ async def fake_edit(text, reply_markup=None):
+ edited.append((text, reply_markup))
+
+ query.answer = fake_answer
+ query.edit_message_text = fake_edit
+
+ await router.handle_provider_callback(callback_update, context)
+
+ assert edited[-1][0] == "Current provider set to: codex"
+ assert len(runner.create_calls) == 1
+ assert len(runner.resume_calls) == 2
+ assert runner.resume_calls[0]["user_message"] == "first question"
+ assert runner.resume_calls[1]["user_message"] == "second question"
+
+ state = store.get_chat_state("bot-a", 123)
+ assert state.get("pending_action") is None
+ assert not router._has_pending_queue_files(123)
+
+ asyncio.run(exercise())
+
+
def test_message_prompts_for_branch_discrepancy_before_running_bot_managed_session(tmp_path: Path):
backend = tmp_path / "backend"
backend.mkdir()
From 69f3d95e45f208828576b28fbfccfe5dd374a99c Mon Sep 17 00:00:00 2001
From: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
Date: Tue, 31 Mar 2026 11:56:03 +0800
Subject: [PATCH 11/20] Correct translations
---
README.de.md | 10 +++++-----
README.fr.md | 12 ++++++------
README.ja.md | 40 ++++++++++++++++++++--------------------
README.ko.md | 40 ++++++++++++++++++++--------------------
README.nl.md | 12 ++++++------
README.th.md | 44 ++++++++++++++++++++++----------------------
README.vi.md | 44 ++++++++++++++++++++++----------------------
README.zh-CN.md | 32 ++++++++++++++++----------------
README.zh-HK.md | 38 +++++++++++++++++++-------------------
README.zh-TW.md | 38 +++++++++++++++++++-------------------
10 files changed, 155 insertions(+), 155 deletions(-)
diff --git a/README.de.md b/README.de.md
index c5dadee..b7b2b5a 100644
--- a/README.de.md
+++ b/README.de.md
@@ -49,7 +49,7 @@
## 🛠️ Typischer lokaler Ablauf
```bash
- coding-agent-telegram # or run ./startup.sh
+ coding-agent-telegram # oder ./startup.sh ausführen
```
##### In Telegram:
@@ -131,10 +131,10 @@ cd coding-agent-telegram
##### Beim ersten Start legt die App die Env-Datei an und sagt dir, welche Felder du ausfüllen musst.
##### Nach dem Bearbeiten der Env-Datei starte erneut:
```bash
-# if you follow Option A or Option B, then run
+# wenn du Option A oder Option B verwendest, dann ausführen
coding-agent-telegram
-# if you follow Option C, then run this again
+# wenn du Option C verwendest, dann dies erneut ausführen
./startup.sh
```
@@ -250,11 +250,11 @@ Der Bot akzeptiert derzeit:
/commit <git commands> |
- Geprüfte `git commit`-bezogene Befehle im Projekt der aktiven Session ausführen. Nur verfügbar, wenn `ENABLE_COMMIT_COMMAND=true`. Schreibende Git-Befehle erfordern ein vertrauenswürdiges Projekt. |
+ Geprüfte git commit-bezogene Befehle im Projekt der aktiven Session ausführen. Nur verfügbar, wenn ENABLE_COMMIT_COMMAND=true. Schreibende Git-Befehle erfordern ein vertrauenswürdiges Projekt. |
/push |
- `origin ` für die aktuelle aktive Session pushen. Der Bot fragt vor dem Push nach einer Bestätigung. |
+ origin <branch> für die aktuelle aktive Session pushen. Der Bot fragt vor dem Push nach einer Bestätigung. |
/abort |
diff --git a/README.fr.md b/README.fr.md
index da5bf86..6df13b4 100644
--- a/README.fr.md
+++ b/README.fr.md
@@ -49,7 +49,7 @@
## 🛠️ Flux local typique
```bash
- coding-agent-telegram # or run ./startup.sh
+ coding-agent-telegram # ou exécutez ./startup.sh
```
##### Dans Telegram :
@@ -131,10 +131,10 @@ cd coding-agent-telegram
##### Au premier lancement, l’application crée le fichier env et vous indique quels champs remplir.
##### Après avoir mis à jour le fichier env, relancez :
```bash
-# if you follow Option A or Option B, then run
+# si vous suivez l’option A ou l’option B, exécutez ensuite
coding-agent-telegram
-# if you follow Option C, then run this again
+# si vous suivez l’option C, exécutez ceci de nouveau
./startup.sh
```
@@ -230,7 +230,7 @@ Le bot accepte actuellement :
/new [session_name] |
- Créer une nouvelle session pour le projet courant. Si vous omettez le nom, le bot utilise la vraie session ID. Si fournisseur, projet ou branch manque, le bot vous guide. |
+ Créer une nouvelle session pour le projet courant. Si vous omettez le nom, le bot utilise le véritable ID de session. Si fournisseur, projet ou branch manque, le bot vous guide. |
/switch |
@@ -250,11 +250,11 @@ Le bot accepte actuellement :
/commit <git commands> |
- Exécuter des commandes liées à `git commit` validées dans le projet de la session active. Disponible uniquement si `ENABLE_COMMIT_COMMAND=true`. Les commandes Git mutantes exigent un projet trusted. |
+ Exécuter des commandes liées à git commit validées dans le projet de la session active. Disponible uniquement si ENABLE_COMMIT_COMMAND=true. Les commandes Git mutantes exigent un projet trusted. |
/push |
- Pousser `origin ` pour la session active courante. Le bot demande une confirmation avant le push. |
+ Pousser origin <branch> pour la session active courante. Le bot demande une confirmation avant le push. |
/abort |
diff --git a/README.ja.md b/README.ja.md
index e139e07..5478678 100644
--- a/README.ja.md
+++ b/README.ja.md
@@ -49,7 +49,7 @@
## 🛠️ 典型的なローカルフロー
```bash
- coding-agent-telegram # or run ./startup.sh
+ coding-agent-telegram # または ./startup.sh を実行
```
##### Telegram では:
@@ -131,10 +131,10 @@ cd coding-agent-telegram
##### 初回起動時にアプリが env ファイルを作成し、入力すべき項目を案内します。
##### env ファイルを更新したら、次を再実行してください:
```bash
-# if you follow Option A or Option B, then run
+# Option A または Option B に従う場合は、次を実行
coding-agent-telegram
-# if you follow Option C, then run this again
+# Option C に従う場合は、これをもう一度実行
./startup.sh
```
@@ -234,27 +234,27 @@ https://api.telegram.org/bot/getUpdates
/switch |
- 最新の session を新しい順で表示します。現在のプロジェクトに対する bot-managed session とローカルの Codex/Copilot CLI session の両方を含みます。 |
+ 最新のセッションを新しい順で表示します。現在のプロジェクトに対する bot 管理セッションとローカルの Codex/Copilot CLI セッションの両方を含みます。 |
/switch page <number> |
- 保存済み session の別ページを表示します。 |
+ 保存済みセッションの別ページを表示します。 |
/switch <session_id> |
- ID を指定して特定の session に切り替えます。ローカル CLI session を選ぶと bot がそれを取り込み、そこから続行します。 |
+ ID を指定して特定のセッションに切り替えます。ローカル CLI セッションを選ぶと bot がそれを取り込み、そこから続行します。 |
/compact |
- アクティブな session から新しい compact 済み session を作成し、そこへ切り替えます。 |
+ アクティブなセッションから新しい compact 済みセッションを作成し、そこへ切り替えます。 |
/commit <git commands> |
- アクティブなセッション の project 内で、検証済みの `git commit` 関連コマンドを実行します。`ENABLE_COMMIT_COMMAND=true` のときだけ利用できます。変更を伴う Git コマンドには trusted project が必要です。 |
+ アクティブなセッション の project 内で、検証済みの git commit 関連コマンドを実行します。ENABLE_COMMIT_COMMAND=true のときだけ利用できます。変更を伴う Git コマンドには trusted project が必要です。 |
/push |
- 現在の アクティブなセッション に対して `origin ` を push します。push 前に bot が確認します。 |
+ 現在の アクティブなセッション に対して origin <branch> を push します。push 前に bot が確認します。 |
/abort |
@@ -418,14 +418,14 @@ ENABLE_SENSITIVE_DIFF_FILTER=true
ENABLE_SECRET_SCRUB_FILTER=true
```
-## 🧠 Session 管理
+## 🧠 セッション管理
-Session は次の単位で分かれます:
+セッションは次の単位で分かれます:
- Telegram bot
- Telegram chat
-そのため、同じ Telegram アカウントでも複数の bot を使い分けながら session を混在させずに運用できます。
+そのため、同じ Telegram アカウントでも複数の bot を使い分けながらセッションを混在させずに運用できます。
例:
@@ -440,9 +440,9 @@ Session は次の単位で分かれます:
- 利用可能なら branch 名
-各 session に保存される内容
+各セッションに保存される内容
-- session 名
+- セッション名
- プロジェクトフォルダー
- branch 名
- プロバイダー
@@ -514,16 +514,16 @@ bot は project と branch をひとまとまりとして扱います。
- project を選んでも、無関係な branch を勝手に選びません
- branch が必要なときは、bot が選択を求めます
-- session 関連メッセージで branch を表示するときは、project と branch を一緒に表示します
+- セッション関連メッセージで branch を表示するときは、プロジェクトと branch を一緒に表示します
branch を作成または切り替えるとき、bot は source を明示的に案内します:
- local/<branch>: ローカル branch を source に使う
- origin/<branch>: remote branch から更新してから切り替える
-保存済み session の branch と現在の repository branch が一致しない場合、bot はそのまま続行しません。どちらの branch を使うか確認します:
+保存済みセッションの branch と現在の repository branch が一致しない場合、bot はそのまま続行しません。どちらの branch を使うか確認します:
-- 保存済み session の branch を使う
+- 保存済みセッションの branch を使う
- 現在の repository branch を使う
希望する source branch が存在しない場合は、生の Git error にせず、default branch と current branch を元に fallback source を提案します。
@@ -550,11 +550,11 @@ log は **stdout とローテーションする log file の両方**に書き込
- bot 起動と polling 開始
- project 選択
-- session 作成
-- session 切り替え
+- セッション作成
+- セッション切り替え
- アクティブなセッション の表示
- 通常の run 実行(切り詰められた prompt を含む audit log 行も含む)
-- resume 失敗後の session 置き換え
+- resume 失敗後のセッション置き換え
- warning と runtime error
diff --git a/README.ko.md b/README.ko.md
index d334f42..6e8f230 100644
--- a/README.ko.md
+++ b/README.ko.md
@@ -49,7 +49,7 @@
## 🛠️ 일반적인 로컬 흐름
```bash
- coding-agent-telegram # or run ./startup.sh
+ coding-agent-telegram # 또는 ./startup.sh 실행
```
##### Telegram에서:
@@ -131,10 +131,10 @@ cd coding-agent-telegram
##### 첫 실행 시 앱이 env 파일을 만들고 어떤 항목을 채워야 하는지 알려줍니다.
##### env 파일을 수정한 뒤 다시 실행하세요:
```bash
-# if you follow Option A or Option B, then run
+# Option A 또는 Option B를 따르는 경우 다음을 실행
coding-agent-telegram
-# if you follow Option C, then run this again
+# Option C를 따르는 경우 이것을 다시 실행
./startup.sh
```
@@ -234,27 +234,27 @@ https://api.telegram.org/bot/getUpdates
/switch |
- 가장 최근 session 을 최신순으로 보여줍니다. 현재 project 의 bot-managed session 과 로컬 Codex/Copilot CLI session 이 함께 표시됩니다. |
+ 가장 최근 세션을 최신순으로 보여줍니다. 현재 프로젝트의 bot 관리 세션과 로컬 Codex/Copilot CLI 세션이 함께 표시됩니다. |
/switch page <number> |
- 저장된 session 의 다른 페이지를 보여줍니다. |
+ 저장된 세션의 다른 페이지를 보여줍니다. |
/switch <session_id> |
- ID 로 특정 session 으로 전환합니다. 로컬 CLI session 을 선택하면 bot 이 state 에 가져와 이어서 진행합니다. |
+ ID 로 특정 세션으로 전환합니다. 로컬 CLI 세션을 선택하면 bot 이 상태에 가져와 이어서 진행합니다. |
/compact |
- 활성 session 에서 새 compact session 을 만들고 그쪽으로 전환합니다. |
+ 활성 세션에서 새 compact 세션을 만들고 그쪽으로 전환합니다. |
/commit <git commands> |
- 활성 세션 project 안에서 검증된 `git commit` 관련 명령을 실행합니다. `ENABLE_COMMIT_COMMAND=true` 일 때만 사용할 수 있습니다. 변경성 Git 명령은 trusted project 가 필요합니다. |
+ 활성 세션 project 안에서 검증된 git commit 관련 명령을 실행합니다. ENABLE_COMMIT_COMMAND=true 일 때만 사용할 수 있습니다. 변경성 Git 명령은 trusted project 가 필요합니다. |
/push |
- 현재 활성 세션 에 대해 `origin ` 를 push 합니다. push 전에 bot 이 확인합니다. |
+ 현재 활성 세션 에 대해 origin <branch> 를 push 합니다. push 전에 bot 이 확인합니다. |
/abort |
@@ -418,14 +418,14 @@ ENABLE_SENSITIVE_DIFF_FILTER=true
ENABLE_SECRET_SCRUB_FILTER=true
```
-## 🧠 Session 관리
+## 🧠 세션 관리
-Session 은 다음 범위로 구분됩니다:
+세션은 다음 범위로 구분됩니다:
- Telegram bot
- Telegram chat
-따라서 같은 Telegram 계정이라도 여러 bot 을 사용하면서 session 이 섞이지 않게 운영할 수 있습니다.
+따라서 같은 Telegram 계정이라도 여러 bot 을 사용하면서 세션이 섞이지 않게 운영할 수 있습니다.
예시:
@@ -440,9 +440,9 @@ Session 은 다음 범위로 구분됩니다:
- 가능할 경우 branch 이름
-각 session 에 저장되는 내용
+각 세션에 저장되는 내용
-- session 이름
+- 세션 이름
- 프로젝트 폴더
- branch 이름
- 제공자
@@ -514,16 +514,16 @@ bot 은 project 와 branch 를 하나의 묶음으로 다룹니다.
- project 를 선택해도 관련 없는 branch 를 조용히 선택하지 않습니다
- branch 가 필요하면 bot 이 직접 선택을 요청합니다
-- session 관련 메시지에서 branch 정보를 보여줄 때는 project 와 branch 를 함께 표시합니다
+- 세션 관련 메시지에서 branch 정보를 보여줄 때는 프로젝트와 branch 를 함께 표시합니다
branch 를 만들거나 바꿀 때 bot 은 source 를 명시적으로 안내합니다:
- local/<branch>: local branch 를 source 로 사용
- origin/<branch>: remote branch 에서 먼저 업데이트한 뒤 전환
-저장된 session branch 와 현재 repository branch 가 다르면 bot 은 그대로 진행하지 않습니다. 어떤 branch 를 쓸지 물어봅니다:
+저장된 세션 branch 와 현재 repository branch 가 다르면 bot 은 그대로 진행하지 않습니다. 어떤 branch 를 쓸지 물어봅니다:
-- 저장된 session branch 사용
+- 저장된 세션 branch 사용
- 현재 repository branch 사용
원하는 source branch 가 없으면 raw Git error 대신 default branch 와 current branch 를 기반으로 fallback source 를 제안합니다.
@@ -550,11 +550,11 @@ log 는 **stdout 과 회전하는 log file 양쪽**에 기록됩니다:
- bot 시작과 polling 시작
- project 선택
-- session 생성
-- session 전환
+- 세션 생성
+- 세션 전환
- 활성 세션 표시
- 일반 run 실행 (잘린 prompt 가 포함된 audit log line 포함)
-- resume 실패 후 session 교체
+- resume 실패 후 세션 교체
- warning 과 runtime error
diff --git a/README.nl.md b/README.nl.md
index f564c36..b7876ca 100644
--- a/README.nl.md
+++ b/README.nl.md
@@ -49,7 +49,7 @@
## 🛠️ Typische lokale flow
```bash
- coding-agent-telegram # or run ./startup.sh
+ coding-agent-telegram # of voer ./startup.sh uit
```
##### In Telegram:
@@ -131,10 +131,10 @@ cd coding-agent-telegram
##### Bij de eerste start maakt de app het env-bestand aan en vertelt welke velden je moet invullen.
##### Start na het bijwerken van het env-bestand opnieuw:
```bash
-# if you follow Option A or Option B, then run
+# als je optie A of optie B volgt, voer dan uit
coding-agent-telegram
-# if you follow Option C, then run this again
+# als je optie C volgt, voer dit dan opnieuw uit
./startup.sh
```
@@ -246,15 +246,15 @@ De bot accepteert momenteel:
/compact |
- Maak vanuit de actieve session een nieuwe compacte session en schakel daarheen over. |
+ Maak vanuit de actieve sessie een nieuwe compacte sessie en schakel daarheen over. |
/commit <git commands> |
- Voer gevalideerde `git commit`-gerelateerde commando’s uit binnen het project van de actieve sessie. Alleen beschikbaar als `ENABLE_COMMIT_COMMAND=true`. Muterende Git-commando’s vereisen een trusted project. |
+ Voer gevalideerde git commit-gerelateerde commando’s uit binnen het project van de actieve sessie. Alleen beschikbaar als ENABLE_COMMIT_COMMAND=true. Muterende Git-commando’s vereisen een trusted project. |
/push |
- Push `origin ` voor de huidige actieve sessie. De bot vraagt om bevestiging voordat hij pusht. |
+ Push origin <branch> voor de huidige actieve sessie. De bot vraagt om bevestiging voordat hij pusht. |
/abort |
diff --git a/README.th.md b/README.th.md
index c9a8ada..55280ad 100644
--- a/README.th.md
+++ b/README.th.md
@@ -49,7 +49,7 @@
## 🛠️ ตัวอย่าง flow การใช้งานบนเครื่อง
```bash
- coding-agent-telegram # or run ./startup.sh
+ coding-agent-telegram # หรือรัน ./startup.sh
```
##### ใน Telegram:
@@ -131,10 +131,10 @@ cd coding-agent-telegram
##### ครั้งแรกแอปจะสร้างไฟล์ env และบอกว่าต้องกรอกค่าใดบ้าง
##### หลังแก้ไฟล์ env แล้ว ให้รันอีกครั้ง:
```bash
-# if you follow Option A or Option B, then run
+# หากคุณทำตามตัวเลือก A หรือ Option B ให้รัน
coding-agent-telegram
-# if you follow Option C, then run this again
+# หากคุณทำตามตัวเลือก C ให้รันสิ่งนี้อีกครั้ง
./startup.sh
```
@@ -210,7 +210,7 @@ https://api.telegram.org/bot/getUpdates
/ผู้ให้บริการ |
- เลือก ผู้ให้บริการ สำหรับ session ใหม่ โดยค่าที่เลือกจะถูกเก็บแยกตาม bot และ chat จนกว่าคุณจะเปลี่ยน |
+ เลือกผู้ให้บริการสำหรับเซสชันใหม่ โดยค่าที่เลือกจะถูกเก็บแยกตาม bot และ chat จนกว่าคุณจะเปลี่ยน |
/project <project_folder> |
@@ -230,31 +230,31 @@ https://api.telegram.org/bot/getUpdates
/new [session_name] |
- สร้าง session ใหม่สำหรับ project ปัจจุบัน หากไม่ระบุชื่อ บอตจะใช้ session ID จริง หากยังไม่มี ผู้ให้บริการ, project หรือ branch บอตจะพาคุณไปยังขั้นตอนที่ขาดอยู่ |
+ สร้างเซสชันใหม่สำหรับ project ปัจจุบัน หากไม่ระบุชื่อ บอตจะใช้รหัสเซสชันจริง หากยังไม่มีผู้ให้บริการ, project หรือ branch บอตจะพาคุณไปยังขั้นตอนที่ขาดอยู่ |
/switch |
- แสดง session ล่าสุด โดยเรียงจากใหม่ไปเก่า รายการนี้รวมทั้ง bot-managed sessions และ local Codex/Copilot CLI sessions ของ project ปัจจุบัน |
+ แสดงเซสชันล่าสุด โดยเรียงจากใหม่ไปเก่า รายการนี้รวมทั้งเซสชันที่ bot ดูแลและ local Codex/Copilot CLI เซสชันของ project ปัจจุบัน |
/switch page <number> |
- แสดงหน้าถัดไปของ sessions ที่จัดเก็บไว้ |
+ แสดงหน้าถัดไปของเซสชันที่จัดเก็บไว้ |
/switch <session_id> |
- สลับไปยัง session ที่ระบุด้วย ID หากเลือก local CLI session บอตจะ import เข้าสู่ state แล้วทำงานต่อจากตรงนั้น |
+ สลับไปยังเซสชันที่ระบุด้วย ID หากเลือก local CLI เซสชัน บอตจะ import เข้าสู่ state แล้วทำงานต่อจากตรงนั้น |
/compact |
- สร้าง session แบบย่อใหม่จาก session ที่กำลังใช้งาน แล้วสลับไปที่ session นั้น |
+ สร้างเซสชันแบบย่อใหม่จากเซสชันที่กำลังใช้งาน แล้วสลับไปที่เซสชันนั้น |
/commit <git commands> |
- รันคำสั่งที่เกี่ยวข้องกับ `git commit` ซึ่งผ่านการตรวจสอบแล้วภายใน project ของ เซสชันที่ใช้งานอยู่ ใช้ได้เมื่อ `ENABLE_COMMIT_COMMAND=true` เท่านั้น คำสั่ง Git ที่มีการแก้ไขต้องใช้ project ที่ trusted |
+ รันคำสั่งที่เกี่ยวข้องกับ git commit ซึ่งผ่านการตรวจสอบแล้วภายใน project ของ เซสชันที่ใช้งานอยู่ ใช้ได้เมื่อ ENABLE_COMMIT_COMMAND=true เท่านั้น คำสั่ง Git ที่มีการแก้ไขต้องใช้ project ที่ trusted |
/push |
- push `origin ` สำหรับ เซสชันที่ใช้งานอยู่ ปัจจุบัน โดยบอตจะขอการยืนยันก่อน push |
+ push origin <branch> สำหรับ เซสชันที่ใช้งานอยู่ ปัจจุบัน โดยบอตจะขอการยืนยันก่อน push |
/abort |
@@ -424,14 +424,14 @@ ENABLE_SENSITIVE_DIFF_FILTER=true
ENABLE_SECRET_SCRUB_FILTER=true
```
-## 🧠 การจัดการ Session
+## 🧠 การจัดการเซสชัน
-Session ถูกแยกตาม:
+เซสชันถูกแยกตาม:
- Telegram bot
- Telegram chat
-ดังนั้นบัญชี Telegram เดียวกันสามารถใช้หลาย bot ได้โดยไม่ทำให้ session ปะปนกัน
+ดังนั้นบัญชี Telegram เดียวกันสามารถใช้หลาย bot ได้โดยไม่ทำให้เซสชันปะปนกัน
ตัวอย่าง:
@@ -446,9 +446,9 @@ Session ถูกแยกตาม:
- ชื่อ branch หากมี
-แต่ละ session จะเก็บข้อมูล:
+แต่ละเซสชันจะเก็บข้อมูล:
-- ชื่อ session
+- ชื่อเซสชัน
- โฟลเดอร์โปรเจ็กต์
- ชื่อ branch
- ผู้ให้บริการ
@@ -520,16 +520,16 @@ _ในแต่ละ agent run บอตจะสร้าง before/after sna
- การเลือก project จะไม่แอบเลือก branch ที่ไม่เกี่ยวข้องให้อัตโนมัติ
- หากต้องใช้ branch บอตจะถามให้คุณเลือก
-- เมื่อมีการแสดงข้อมูล branch ในข้อความที่เกี่ยวกับ session จะโชว์ project และ branch ควบคู่กัน
+- เมื่อมีการแสดงข้อมูล branch ในข้อความที่เกี่ยวกับเซสชัน จะโชว์ project และ branch ควบคู่กัน
เมื่อคุณสร้างหรือสลับ branch บอตจะพาคุณเลือก source อย่างชัดเจน:
- local/<branch> คือใช้ local branch เป็นต้นทาง
- origin/<branch> คืออัปเดตจาก remote branch ก่อน แล้วค่อยสลับ
-ถ้าบอตพบว่า branch ที่เก็บไว้ใน session ไม่ตรงกับ branch ปัจจุบันของ repository บอตจะไม่ทำต่อแบบเดาสุ่ม แต่จะถามว่าต้องการใช้ branch ใด:
+ถ้าบอตพบว่า branch ที่เก็บไว้ในเซสชันไม่ตรงกับ branch ปัจจุบันของ repository บอตจะไม่ทำต่อแบบเดาสุ่ม แต่จะถามว่าต้องการใช้ branch ใด:
-- ใช้ branch ที่เก็บไว้ใน session
+- ใช้ branch ที่เก็บไว้ในเซสชัน
- ใช้ branch ปัจจุบันของ repository
หาก source branch ที่คุณต้องการหายไป บอตจะเสนอ fallback source ตาม default branch และ current branch แทนที่จะปล่อยให้คุณเจอ Git error ตรง ๆ
@@ -556,11 +556,11 @@ log จะถูกเขียน **ทั้งไปที่ stdout แล
- การเริ่มต้น bot และเริ่ม polling
- การเลือก project
-- การสร้าง session
-- การสลับ session
+- การสร้างเซสชัน
+- การสลับเซสชัน
- การรายงาน เซสชันที่ใช้งานอยู่
- การรันงานแบบปกติ (รวม audit log line ที่มี prompt แบบตัดทอน)
-- การแทนที่ session หลัง resume ล้มเหลว
+- การแทนที่เซสชันหลัง resume ล้มเหลว
- warnings และ runtime errors
diff --git a/README.vi.md b/README.vi.md
index 93082ef..43b7329 100644
--- a/README.vi.md
+++ b/README.vi.md
@@ -49,7 +49,7 @@
## 🛠️ Luồng làm việc cục bộ điển hình
```bash
- coding-agent-telegram # or run ./startup.sh
+ coding-agent-telegram # hoặc chạy ./startup.sh
```
##### Trong Telegram:
@@ -131,10 +131,10 @@ cd coding-agent-telegram
##### Ở lần chạy đầu, app sẽ tạo file env và cho bạn biết cần điền trường nào.
##### Sau khi cập nhật file env, hãy chạy lại:
```bash
-# if you follow Option A or Option B, then run
+# nếu bạn làm theo Tùy chọn A hoặc Tùy chọn B, hãy chạy
coding-agent-telegram
-# if you follow Option C, then run this again
+# nếu bạn làm theo Tùy chọn C, hãy chạy lại lệnh này
./startup.sh
```
@@ -210,7 +210,7 @@ Hiện tại bot chấp nhận:
/provider |
- Chọn nhà cung cấp cho các session mới. Lựa chọn này được lưu theo từng bot và chat cho đến khi bạn thay đổi. |
+ Chọn nhà cung cấp cho các phiên mới. Lựa chọn này được lưu theo từng bot và chat cho đến khi bạn thay đổi. |
/project <project_folder> |
@@ -230,31 +230,31 @@ Hiện tại bot chấp nhận:
/new [session_name] |
- Tạo session mới cho project hiện tại. Nếu bỏ qua tên, bot sẽ dùng session ID thật. Nếu thiếu nhà cung cấp, project hoặc branch, bot sẽ hướng dẫn bước còn thiếu. |
+ Tạo phiên mới cho project hiện tại. Nếu bỏ qua tên, bot sẽ dùng mã định danh phiên thật. Nếu thiếu nhà cung cấp, project hoặc branch, bot sẽ hướng dẫn bước còn thiếu. |
/switch |
- Hiển thị các session mới nhất, mới nhất trước. Danh sách bao gồm cả session do bot quản lý và local Codex/Copilot CLI session của project hiện tại. |
+ Hiển thị các phiên mới nhất, mới nhất trước. Danh sách bao gồm cả phiên do bot quản lý và phiên CLI Codex/Copilot cục bộ của project hiện tại. |
/switch page <number> |
- Hiển thị trang khác của các session đã lưu. |
+ Hiển thị trang khác của các phiên đã lưu. |
/switch <session_id> |
- Chuyển sang một session cụ thể bằng ID. Nếu bạn chọn local CLI session, bot sẽ import nó và tiếp tục từ đó. |
+ Chuyển sang một phiên cụ thể bằng ID. Nếu bạn chọn phiên CLI cục bộ, bot sẽ import nó và tiếp tục từ đó. |
/compact |
- Tạo một session rút gọn mới từ session đang hoạt động rồi chuyển sang session đó. |
+ Tạo một phiên rút gọn mới từ phiên đang hoạt động rồi chuyển sang phiên đó. |
/commit <git commands> |
- Chạy các lệnh liên quan đến `git commit` đã được kiểm tra trong project của phiên hoạt động. Chỉ có khi `ENABLE_COMMIT_COMMAND=true`. Các lệnh Git có thay đổi yêu cầu project đã trusted. |
+ Chạy các lệnh liên quan đến git commit đã được kiểm tra trong project của phiên hoạt động. Chỉ có khi ENABLE_COMMIT_COMMAND=true. Các lệnh Git có thay đổi yêu cầu project đã trusted. |
/push |
- Push `origin ` cho phiên hoạt động hiện tại. Bot sẽ hỏi xác nhận trước khi push. |
+ Push origin <branch> cho phiên hoạt động hiện tại. Bot sẽ hỏi xác nhận trước khi push. |
/abort |
@@ -418,14 +418,14 @@ ENABLE_SENSITIVE_DIFF_FILTER=true
ENABLE_SECRET_SCRUB_FILTER=true
```
-## 🧠 Quản lý Session
+## 🧠 Quản lý phiên
-Session được tách theo:
+Phiên được tách theo:
- Telegram bot
- Telegram chat
-Vì vậy cùng một tài khoản Telegram có thể dùng nhiều bot mà không làm lẫn session.
+Vì vậy cùng một tài khoản Telegram có thể dùng nhiều bot mà không làm lẫn phiên.
Ví dụ:
@@ -440,9 +440,9 @@ phiên hoạt động cũng gắn với:
- branch name nếu có
-Mỗi session lưu:
+Mỗi phiên lưu:
-- tên session
+- tên phiên
- thư mục dự án
- branch name
- nhà cung cấp
@@ -514,16 +514,16 @@ Bot coi project và branch là một cặp đi cùng nhau.
- việc chọn project sẽ không âm thầm chọn một branch không liên quan
- nếu cần branch, bot sẽ yêu cầu bạn chọn
-- khi thông tin branch được hiển thị trong các thông báo liên quan đến session, project và branch sẽ được hiển thị cùng nhau
+- khi thông tin branch được hiển thị trong các thông báo liên quan đến phiên, project và branch sẽ được hiển thị cùng nhau
Khi bạn tạo hoặc đổi branch, bot sẽ hướng dẫn rõ source:
- local/<branch> nghĩa là dùng local branch làm source
- origin/<branch> nghĩa là cập nhật từ remote branch trước rồi mới chuyển
-Nếu bot phát hiện branch lưu trong session không khớp với branch hiện tại của repository, bot sẽ không tiếp tục một cách mù quáng. Bot sẽ hỏi bạn muốn dùng branch nào:
+Nếu bot phát hiện branch lưu trong phiên không khớp với branch hiện tại của repository, bot sẽ không tiếp tục một cách mù quáng. Bot sẽ hỏi bạn muốn dùng branch nào:
-- giữ branch đã lưu trong session
+- giữ branch đã lưu trong phiên
- giữ branch hiện tại của repository
Nếu source branch bạn muốn không còn, bot sẽ đưa ra các fallback source dựa trên default branch và current branch thay vì để bạn đối mặt với Git error thô.
@@ -550,11 +550,11 @@ Log được ghi **cả ra stdout và vào file log quay vòng** dưới:
- bot khởi động và bắt đầu polling
- chọn project
-- tạo session
-- chuyển session
+- tạo phiên
+- chuyển phiên
- báo cáo phiên hoạt động
- chạy bình thường (bao gồm audit log line với prompt đã được rút gọn)
-- thay session sau khi resume thất bại
+- thay phiên sau khi resume thất bại
- warnings và runtime errors
diff --git a/README.zh-CN.md b/README.zh-CN.md
index d3ae902..4ca9095 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -49,7 +49,7 @@
## 🛠️ 典型本地流程
```bash
- coding-agent-telegram # or run ./startup.sh
+ coding-agent-telegram # 或运行 ./startup.sh
```
##### 在 Telegram 中:
@@ -131,10 +131,10 @@ cd coding-agent-telegram
##### 首次运行时,应用会创建 env 文件,并告诉你需要填写哪些字段。
##### 更新 env 文件后,再次运行:
```bash
-# if you follow Option A or Option B, then run
+# 如果你使用方案 A 或方案 B,则运行
coding-agent-telegram
-# if you follow Option C, then run this again
+# 如果你使用方案 C,则再次运行此命令
./startup.sh
```
@@ -234,27 +234,27 @@ bot 当前接受:
/switch |
- 显示最新的 session,按从新到旧排序。列表同时包含 bot-managed sessions 和当前 project 的本地 Codex/Copilot CLI sessions。 |
+ 显示最新的会话,按从新到旧排序。列表同时包含 bot 管理的会话和当前项目的本地 Codex/Copilot CLI 会话。 |
/switch page <number> |
- 显示已保存 sessions 的其他页。 |
+ 显示已保存会话的其他页。 |
/switch <session_id> |
- 通过 ID 切换到指定 session。如果你选择本地 CLI session,bot 会把它导入 state 并从那里继续。 |
+ 通过 ID 切换到指定会话。如果你选择本地 CLI 会话,bot 会把它导入状态并从那里继续。 |
/compact |
- 从当前活动 session 创建一个新的压缩 session,并切换到该 session。 |
+ 从当前活动会话创建一个新的压缩会话,并切换到该会话。 |
/commit <git commands> |
- 在活动会话的项目内执行已校验的 `git commit` 相关命令。仅当 `ENABLE_COMMIT_COMMAND=true` 时可用。会修改内容的 Git 命令要求项目已 trusted。 |
+ 在活动会话的项目内执行已校验的 git commit 相关命令。仅当 ENABLE_COMMIT_COMMAND=true 时可用。会修改内容的 Git 命令要求项目已 trusted。 |
/push |
- 为当前活动会话执行 `origin ` push。push 前 bot 会要求确认。 |
+ 为当前活动会话执行 origin <branch> push。push 前 bot 会要求确认。 |
/abort |
@@ -425,7 +425,7 @@ ENABLE_SECRET_SCRUB_FILTER=true
- Telegram bot
- Telegram chat
-这意味着同一个 Telegram 账号可以同时使用多个 bot,而不会把 session 混在一起。
+这意味着同一个 Telegram 账号可以同时使用多个 bot,而不会把会话混在一起。
示例:
@@ -514,16 +514,16 @@ bot 会把 project 和 branch 当成一组信息来处理。
- 选择 project 时不会悄悄切到无关的 branch
- 如果需要 branch 输入,bot 会提示你选择
-- 在 session 相关消息里显示 branch 信息时,project 和 branch 会一起展示
+- 在会话相关消息里显示 branch 信息时,项目和 branch 会一起展示
当你创建或切换 branch 时,bot 会明确引导你选择 source:
- local/<branch> 表示使用本地 branch 作为 source
- origin/<branch> 表示先从远端 branch 更新,再切换
-如果 bot 发现 session 里保存的 branch 与当前 repository branch 不一致,它不会盲目继续,而是会询问你要使用哪一个 branch:
+如果 bot 发现会话里保存的 branch 与当前仓库 branch 不一致,它不会盲目继续,而是会询问你要使用哪一个 branch:
-- 保留 session 中保存的 branch
+- 保留会话中保存的 branch
- 保留当前 repository branch
如果你偏好的 source branch 已缺失,bot 会基于 default branch 和 current branch 提供 fallback source,而不是直接把你丢给原始 Git error。
@@ -550,11 +550,11 @@ log 会**同时写入 stdout 和轮转日志文件**,路径为:
- bot 启动与 polling 启动
- project 选择
-- session 创建
-- session 切换
+- 会话创建
+- 会话切换
- 活动会话报告
- 正常 run 执行(包含截断后的 prompt 审计日志行)
-- resume 失败后的 session 替换
+- resume 失败后的会话替换
- warnings 与 runtime errors
diff --git a/README.zh-HK.md b/README.zh-HK.md
index 3b3db15..a00b44c 100644
--- a/README.zh-HK.md
+++ b/README.zh-HK.md
@@ -49,7 +49,7 @@
## 🛠️ 典型本機流程
```bash
- coding-agent-telegram # or run ./startup.sh
+ coding-agent-telegram # 或執行 ./startup.sh
```
##### 在 Telegram:
@@ -131,10 +131,10 @@ cd coding-agent-telegram
##### 第一次執行時,app 會建立 env 檔案,並告訴你需要填寫哪些欄位。
##### 更新 env 檔案後,再次執行:
```bash
-# if you follow Option A or Option B, then run
+# 如果你使用方案 A 或方案 B,則執行
coding-agent-telegram
-# if you follow Option C, then run this again
+# 如果你使用方案 C,則再次執行此指令
./startup.sh
```
@@ -234,27 +234,27 @@ bot 目前接受:
/switch |
- 顯示最新的 session,按由新到舊排序。列表同時包含 bot-managed sessions 以及目前 project 的本機 Codex/Copilot CLI sessions。 |
+ 顯示最新的工作階段,按由新到舊排序。列表同時包含 bot 管理的工作階段以及目前專案的本機 Codex/Copilot CLI 工作階段。 |
/switch page <number> |
- 顯示已儲存 sessions 的其他頁面。 |
+ 顯示已儲存工作階段的其他頁面。 |
/switch <session_id> |
- 透過 ID 切換到指定 session。如果你選擇本機 CLI session,bot 會把它匯入 state 並從那裡繼續。 |
+ 透過 ID 切換到指定工作階段。如果你選擇本機 CLI 工作階段,bot 會把它匯入狀態並從那裡繼續。 |
/compact |
- 從目前使用中的 session 建立新的壓縮 session,並切換到該 session。 |
+ 從目前使用中的工作階段建立新的壓縮工作階段,並切換到該工作階段。 |
/commit <git commands> |
- 在作用中工作階段的專案內執行已驗證的 `git commit` 相關指令。只在 `ENABLE_COMMIT_COMMAND=true` 時可用。會修改內容的 Git 指令要求專案已 trusted。 |
+ 在作用中工作階段的專案內執行已驗證的 git commit 相關指令。只在 ENABLE_COMMIT_COMMAND=true 時可用。會修改內容的 Git 指令要求專案已 trusted。 |
/push |
- 為目前作用中工作階段執行 `origin ` push。push 前 bot 會要求確認。 |
+ 為目前作用中工作階段執行 origin <branch> push。push 前 bot 會要求確認。 |
/abort |
@@ -396,7 +396,7 @@ bot 目前接受:
~/.coding-agent-telegram/state.json |
- Session 狀態主檔。 |
+ 工作階段狀態主檔。 |
~/.coding-agent-telegram/state.json.bak |
@@ -424,14 +424,14 @@ ENABLE_SENSITIVE_DIFF_FILTER=true
ENABLE_SECRET_SCRUB_FILTER=true
```
-## 🧠 Session 管理
+## 🧠 工作階段管理
-Session 會按以下範圍分開:
+工作階段會按以下範圍分開:
- Telegram bot
- Telegram chat
-這表示同一個 Telegram 帳號可以同時使用多個 bot,而不會把 session 混在一起。
+這表示同一個 Telegram 帳號可以同時使用多個 bot,而不會把工作階段混在一起。
例子:
@@ -520,16 +520,16 @@ bot 會把 project 和 branch 當成一組來處理。
- 選擇 project 時不會靜默切到無關 branch
- 如果需要 branch 輸入,bot 會要求你選擇
-- 在 session 相關訊息中顯示 branch 資訊時,project 和 branch 會一起顯示
+- 在工作階段相關訊息中顯示 branch 資訊時,專案和 branch 會一起顯示
當你建立或切換 branch 時,bot 會明確引導你選擇 source:
- local/<branch>:使用本地 branch 作為 source
- origin/<branch>:先從遠端 branch 更新,再切換
-如果 bot 發現 session 中儲存的 branch 與目前 repository branch 不一致,它不會盲目繼續,而會詢問你想使用哪個 branch:
+如果 bot 發現工作階段中儲存的 branch 與目前儲存庫 branch 不一致,它不會盲目繼續,而會詢問你想使用哪個 branch:
-- 保留 session 中儲存的 branch
+- 保留工作階段中儲存的 branch
- 保留目前 repository branch
如果你偏好的 source branch 已不存在,bot 會根據 default branch 和 current branch 提供 fallback source,而不是直接丟出原始 Git error。
@@ -556,11 +556,11 @@ log 會**同時寫入 stdout 和輪轉 log file**,路徑如下:
- bot 啟動與 polling 開始
- project 選擇
-- session 建立
-- session 切換
+- 工作階段建立
+- 工作階段切換
- 作用中工作階段報告
- 正常 run 執行(包含被截短的 prompt audit log 行)
-- resume 失敗後的 session 替換
+- resume 失敗後的工作階段替換
- warnings 與 runtime errors
diff --git a/README.zh-TW.md b/README.zh-TW.md
index 3a138c1..bba85e0 100644
--- a/README.zh-TW.md
+++ b/README.zh-TW.md
@@ -49,7 +49,7 @@
## 🛠️ 典型本機流程
```bash
- coding-agent-telegram # or run ./startup.sh
+ coding-agent-telegram # 或執行 ./startup.sh
```
##### 在 Telegram:
@@ -131,10 +131,10 @@ cd coding-agent-telegram
##### 第一次執行時,app 會建立 env 檔案,並告訴你需要填寫哪些欄位。
##### 更新 env 檔案後,再次執行:
```bash
-# if you follow Option A or Option B, then run
+# 如果你使用方案 A 或方案 B,則執行
coding-agent-telegram
-# if you follow Option C, then run this again
+# 如果你使用方案 C,則再次執行此指令
./startup.sh
```
@@ -234,27 +234,27 @@ bot 目前接受:
/switch |
- 顯示最新的 sessions,依新到舊排序。列表同時包含 bot-managed sessions 與目前 project 的本機 Codex/Copilot CLI sessions。 |
+ 顯示最新的工作階段,依新到舊排序。列表同時包含 bot 管理的工作階段與目前專案的本機 Codex/Copilot CLI 工作階段。 |
/switch page <number> |
- 顯示已儲存 sessions 的其他頁面。 |
+ 顯示已儲存工作階段的其他頁面。 |
/switch <session_id> |
- 透過 ID 切換到指定 session。如果你選擇本機 CLI session,bot 會把它匯入 state 並從那裡繼續。 |
+ 透過 ID 切換到指定工作階段。如果你選擇本機 CLI 工作階段,bot 會把它匯入狀態並從那裡繼續。 |
/compact |
- 從目前使用中的 session 建立新的壓縮 session,並切換到該 session。 |
+ 從目前使用中的工作階段建立新的壓縮工作階段,並切換到該工作階段。 |
/commit <git commands> |
- 在作用中工作階段的專案內執行已驗證的 `git commit` 相關指令。僅在 `ENABLE_COMMIT_COMMAND=true` 時可用。會修改內容的 Git 指令要求專案已 trusted。 |
+ 在作用中工作階段的專案內執行已驗證的 git commit 相關指令。僅在 ENABLE_COMMIT_COMMAND=true 時可用。會修改內容的 Git 指令要求專案已 trusted。 |
/push |
- 為目前作用中工作階段執行 `origin ` push。push 前 bot 會要求確認。 |
+ 為目前作用中工作階段執行 origin <branch> push。push 前 bot 會要求確認。 |
/abort |
@@ -396,7 +396,7 @@ bot 目前接受:
~/.coding-agent-telegram/state.json |
- Session 狀態主檔。 |
+ 工作階段狀態主檔。 |
~/.coding-agent-telegram/state.json.bak |
@@ -424,14 +424,14 @@ ENABLE_SENSITIVE_DIFF_FILTER=true
ENABLE_SECRET_SCRUB_FILTER=true
```
-## 🧠 Session 管理
+## 🧠 工作階段管理
-Session 會依以下範圍分開:
+工作階段會依以下範圍分開:
- Telegram bot
- Telegram chat
-這表示同一個 Telegram 帳號可以同時使用多個 bot,而不會把 session 混在一起。
+這表示同一個 Telegram 帳號可以同時使用多個 bot,而不會把工作階段混在一起。
範例:
@@ -520,16 +520,16 @@ bot 會把 project 和 branch 當成一組資訊來處理。
- 選擇 project 時不會悄悄切到無關 branch
- 如果需要 branch 輸入,bot 會要求你選擇
-- 在 session 相關訊息中顯示 branch 資訊時,project 和 branch 會一起顯示
+- 在工作階段相關訊息中顯示 branch 資訊時,專案和 branch 會一起顯示
當你建立或切換 branch 時,bot 會明確引導你選擇 source:
- local/<branch>:使用本地 branch 作為 source
- origin/<branch>:先從遠端 branch 更新,再切換
-如果 bot 發現 session 中儲存的 branch 與目前 repository branch 不一致,它不會盲目繼續,而會詢問你想使用哪個 branch:
+如果 bot 發現工作階段中儲存的 branch 與目前儲存庫 branch 不一致,它不會盲目繼續,而會詢問你想使用哪個 branch:
-- 保留 session 中儲存的 branch
+- 保留工作階段中儲存的 branch
- 保留目前 repository branch
如果你偏好的 source branch 已不存在,bot 會根據 default branch 和 current branch 提供 fallback source,而不是直接丟出原始 Git error。
@@ -556,11 +556,11 @@ log 會**同時寫入 stdout 與輪轉 log file**,路徑如下:
- bot 啟動與 polling 開始
- project 選擇
-- session 建立
-- session 切換
+- 工作階段建立
+- 工作階段切換
- 作用中工作階段報告
- 正常 run 執行(包含被截短的 prompt audit log 行)
-- resume 失敗後的 session 替換
+- resume 失敗後的工作階段替換
- warnings 與 runtime errors
From b63a610aaa6bb52e448b09df7c48ed402f65c414 Mon Sep 17 00:00:00 2001
From: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
Date: Tue, 31 Mar 2026 11:57:12 +0800
Subject: [PATCH 12/20] Fix tests regarding queue draining changes
---
src/coding_agent_telegram/router/project_commands.py | 4 ++--
src/coding_agent_telegram/router/queue_processing.py | 6 +++++-
.../router/session_branch_resolution.py | 2 +-
.../router/session_lifecycle_commands.py | 12 +++++++++---
.../router/session_provider_commands.py | 2 +-
5 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/src/coding_agent_telegram/router/project_commands.py b/src/coding_agent_telegram/router/project_commands.py
index 6e92516..ca501e4 100644
--- a/src/coding_agent_telegram/router/project_commands.py
+++ b/src/coding_agent_telegram/router/project_commands.py
@@ -339,7 +339,7 @@ async def handle_project(self, update: Update, context: ContextTypes.DEFAULT_TYP
reply_markup=keyboard,
)
if (not is_git_repo or not switched_project) and hasattr(self, "_continue_pending_action"):
- await self._continue_pending_action(update, context)
+ await self._continue_pending_action(update, context, drain_queue_after_completion=True)
@require_allowed_chat(answer_callback=True)
async def handle_trust_project_callback(self, update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
@@ -514,4 +514,4 @@ async def handle_branch_source_callback(self, update: Update, context: ContextTy
)
)
if hasattr(self, "_continue_pending_action"):
- await self._continue_pending_action(update, context)
+ await self._continue_pending_action(update, context, drain_queue_after_completion=True)
diff --git a/src/coding_agent_telegram/router/queue_processing.py b/src/coding_agent_telegram/router/queue_processing.py
index a227f04..a0bb8b6 100644
--- a/src/coding_agent_telegram/router/queue_processing.py
+++ b/src/coding_agent_telegram/router/queue_processing.py
@@ -288,7 +288,11 @@ async def _dispatch_queued_questions(
"user_message": user_message,
},
)
- continued = await self._continue_pending_action(queued_update, context)
+ continued = await self._continue_pending_action(
+ queued_update,
+ context,
+ drain_queue_after_completion=False,
+ )
if not continued:
self._queue_lock_path(queue_file).unlink(missing_ok=True)
self._chat_processing_queue_files.pop(chat_id, None)
diff --git a/src/coding_agent_telegram/router/session_branch_resolution.py b/src/coding_agent_telegram/router/session_branch_resolution.py
index 8b0b14b..cf2f771 100644
--- a/src/coding_agent_telegram/router/session_branch_resolution.py
+++ b/src/coding_agent_telegram/router/session_branch_resolution.py
@@ -226,7 +226,7 @@ async def handle_branch_discrepancy_callback(self, update: Update, context: Cont
pending_action.pop("branch_resolution", None)
self._store_pending_action(chat_id, pending_action)
await query.edit_message_text(self._t(update, "branch_resolution.using_current_branch", branch_name=current_branch))
- await self._continue_pending_action(update, context)
+ await self._continue_pending_action(update, context, drain_queue_after_completion=True)
return
allow_local = self.git.local_branch_exists(project_path, stored_branch)
diff --git a/src/coding_agent_telegram/router/session_lifecycle_commands.py b/src/coding_agent_telegram/router/session_lifecycle_commands.py
index 622541c..704f65f 100644
--- a/src/coding_agent_telegram/router/session_lifecycle_commands.py
+++ b/src/coding_agent_telegram/router/session_lifecycle_commands.py
@@ -167,7 +167,13 @@ async def _create_session_for_context(
)
return True
- async def _continue_pending_action(self, update: Update, context: ContextTypes.DEFAULT_TYPE) -> bool:
+ async def _continue_pending_action(
+ self,
+ update: Update,
+ context: ContextTypes.DEFAULT_TYPE,
+ *,
+ drain_queue_after_completion: bool = False,
+ ) -> bool:
chat_id = update.effective_chat.id
pending_action = self._pending_action(chat_id)
if not pending_action:
@@ -234,7 +240,7 @@ async def _continue_pending_action(self, update: Update, context: ContextTypes.D
completed = True
return False
finally:
- if completed:
+ if completed and drain_queue_after_completion:
await self._drain_chat_message_queue(chat_id, context)
async def _ensure_active_session_ready_for_run(self, update: Update, context: ContextTypes.DEFAULT_TYPE) -> bool:
@@ -299,4 +305,4 @@ async def handle_new(self, update: Update, context: ContextTypes.DEFAULT_TYPE) -
"use_session_id_as_name": not bool(session_name),
},
)
- await self._continue_pending_action(update, context)
+ await self._continue_pending_action(update, context, drain_queue_after_completion=True)
diff --git a/src/coding_agent_telegram/router/session_provider_commands.py b/src/coding_agent_telegram/router/session_provider_commands.py
index aa57183..8031030 100644
--- a/src/coding_agent_telegram/router/session_provider_commands.py
+++ b/src/coding_agent_telegram/router/session_provider_commands.py
@@ -125,4 +125,4 @@ async def handle_provider_callback(self, update: Update, context: ContextTypes.D
"use_session_id_as_name": True,
},
)
- await self._continue_pending_action(update, context)
+ await self._continue_pending_action(update, context, drain_queue_after_completion=True)
From b8645821c15e60ac4b436b89ce8d720053cefc5e Mon Sep 17 00:00:00 2001
From: DCHA <426225+daocha@users.noreply.github.com>
Date: Tue, 31 Mar 2026 12:04:24 +0800
Subject: [PATCH 13/20] Correct zh-HkK
---
README.zh-HK.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.zh-HK.md b/README.zh-HK.md
index a00b44c..80d1804 100644
--- a/README.zh-HK.md
+++ b/README.zh-HK.md
@@ -89,7 +89,7 @@ curl -fsSL https://raw.githubusercontent.com/daocha/coding-agent-telegram/main/i
- ## ✅ 需求
+ ## ✅ 運行要求
在啟動 server 之前,請先準備:
From 7455764367ea6fc909ea0a1e767c3a2d2f8354c4 Mon Sep 17 00:00:00 2001
From: DCHA <426225+daocha@users.noreply.github.com>
Date: Tue, 31 Mar 2026 12:05:06 +0800
Subject: [PATCH 14/20] Update zh-TW
---
README.zh-TW.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.zh-TW.md b/README.zh-TW.md
index bba85e0..dbf88cd 100644
--- a/README.zh-TW.md
+++ b/README.zh-TW.md
@@ -89,7 +89,7 @@ curl -fsSL https://raw.githubusercontent.com/daocha/coding-agent-telegram/main/i
|
- ## ✅ 需求
+ ## ✅ 執行需求
啟動 server 前,請先準備:
From a7cf33cdb1d411bc2a64e501fe5aaf70e7018ab5 Mon Sep 17 00:00:00 2001
From: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
Date: Tue, 31 Mar 2026 12:12:37 +0800
Subject: [PATCH 15/20] Correct translations
---
README.de.md | 10 +++++-----
README.fr.md | 6 +++---
README.ja.md | 10 +++++-----
README.ko.md | 10 +++++-----
README.nl.md | 6 +++---
README.th.md | 10 +++++-----
README.vi.md | 6 +++---
README.zh-CN.md | 4 ++--
README.zh-HK.md | 4 ++--
README.zh-TW.md | 4 ++--
10 files changed, 35 insertions(+), 35 deletions(-)
diff --git a/README.de.md b/README.de.md
index b7b2b5a..2049d43 100644
--- a/README.de.md
+++ b/README.de.md
@@ -109,18 +109,18 @@ Openclaw bietet dir sehr umfassende Funktionen und hat mit Pi-Agent bereits eine
## 🚀 Schnellstart
-### Option A: Einzeiliges Bootstrap-Skript
+### Variante A: Einzeiliges Bootstrap-Skript
```bash
curl -fsSL https://raw.githubusercontent.com/daocha/coding-agent-telegram/main/install.sh | bash
```
-### Option B: Installation über PyPI mit `pip`
+### Variante B: Installation über PyPI mit `pip`
```bash
pip install coding-agent-telegram
coding-agent-telegram
```
-### Option C: Aus einem geklonten Repository starten
+### Variante C: Aus einem geklonten Repository starten
```bash
git clone https://github.com/daocha/coding-agent-telegram
cd coding-agent-telegram
@@ -131,10 +131,10 @@ cd coding-agent-telegram
##### Beim ersten Start legt die App die Env-Datei an und sagt dir, welche Felder du ausfüllen musst.
##### Nach dem Bearbeiten der Env-Datei starte erneut:
```bash
-# wenn du Option A oder Option B verwendest, dann ausführen
+# wenn du Variante A oder Variante B verwendest, dann ausführen
coding-agent-telegram
-# wenn du Option C verwendest, dann dies erneut ausführen
+# wenn du Variante C verwendest, dann dies erneut ausführen
./startup.sh
```
diff --git a/README.fr.md b/README.fr.md
index 6df13b4..fa3dcc6 100644
--- a/README.fr.md
+++ b/README.fr.md
@@ -109,18 +109,18 @@ Openclaw offre des capacités très complètes et intègre déjà une boucle d
## 🚀 Démarrage rapide
-### Option A : Script bootstrap en une ligne
+### Variante A : Script bootstrap en une ligne
```bash
curl -fsSL https://raw.githubusercontent.com/daocha/coding-agent-telegram/main/install.sh | bash
```
-### Option B : Installation depuis PyPI avec `pip`
+### Variante B : Installation depuis PyPI avec `pip`
```bash
pip install coding-agent-telegram
coding-agent-telegram
```
-### Option C : Exécution depuis un dépôt cloné
+### Variante C : Exécution depuis un dépôt cloné
```bash
git clone https://github.com/daocha/coding-agent-telegram
cd coding-agent-telegram
diff --git a/README.ja.md b/README.ja.md
index 5478678..55b7c5a 100644
--- a/README.ja.md
+++ b/README.ja.md
@@ -109,18 +109,18 @@ Openclaw は非常に多機能で、Pi-Agent という統合 agent loop も備
## 🚀 クイックスタート
-### Option A: ワンライナーのブートストラップスクリプト
+### 方法A: ワンライナーのブートストラップスクリプト
```bash
curl -fsSL https://raw.githubusercontent.com/daocha/coding-agent-telegram/main/install.sh | bash
```
-### Option B: `pip` で PyPI からインストール
+### 方法B: `pip` で PyPI からインストール
```bash
pip install coding-agent-telegram
coding-agent-telegram
```
-### Option C: クローンしたリポジトリから実行
+### 方法C: クローンしたリポジトリから実行
```bash
git clone https://github.com/daocha/coding-agent-telegram
cd coding-agent-telegram
@@ -131,10 +131,10 @@ cd coding-agent-telegram
##### 初回起動時にアプリが env ファイルを作成し、入力すべき項目を案内します。
##### env ファイルを更新したら、次を再実行してください:
```bash
-# Option A または Option B に従う場合は、次を実行
+# 方法A または 方法B に従う場合は、次を実行
coding-agent-telegram
-# Option C に従う場合は、これをもう一度実行
+# 方法C に従う場合は、これをもう一度実行
./startup.sh
```
diff --git a/README.ko.md b/README.ko.md
index 6e8f230..d2f9a91 100644
--- a/README.ko.md
+++ b/README.ko.md
@@ -109,18 +109,18 @@ Openclaw 는 매우 다양한 기능을 제공하고 Pi-Agent 라는 통합 agen
## 🚀 빠른 시작
-### Option A: 한 줄 부트스트랩 스크립트
+### 방법 A: 한 줄 부트스트랩 스크립트
```bash
curl -fsSL https://raw.githubusercontent.com/daocha/coding-agent-telegram/main/install.sh | bash
```
-### Option B: `pip`으로 PyPI 설치
+### 방법 B: `pip`으로 PyPI 설치
```bash
pip install coding-agent-telegram
coding-agent-telegram
```
-### Option C: 저장소를 clone해서 실행
+### 방법 C: 저장소를 clone해서 실행
```bash
git clone https://github.com/daocha/coding-agent-telegram
cd coding-agent-telegram
@@ -131,10 +131,10 @@ cd coding-agent-telegram
##### 첫 실행 시 앱이 env 파일을 만들고 어떤 항목을 채워야 하는지 알려줍니다.
##### env 파일을 수정한 뒤 다시 실행하세요:
```bash
-# Option A 또는 Option B를 따르는 경우 다음을 실행
+# 방법 A 또는 방법 B를 따르는 경우 다음을 실행
coding-agent-telegram
-# Option C를 따르는 경우 이것을 다시 실행
+# 방법 C를 따르는 경우 이것을 다시 실행
./startup.sh
```
diff --git a/README.nl.md b/README.nl.md
index b7876ca..cda19a0 100644
--- a/README.nl.md
+++ b/README.nl.md
@@ -109,18 +109,18 @@ Openclaw biedt zeer uitgebreide mogelijkheden en heeft al een geïntegreerde age
## 🚀 Snel starten
-### Option A: Bootstrapscript in één regel
+### Optie A: Bootstrapscript in één regel
```bash
curl -fsSL https://raw.githubusercontent.com/daocha/coding-agent-telegram/main/install.sh | bash
```
-### Option B: Installeren vanaf PyPI met `pip`
+### Optie B: Installeren vanaf PyPI met `pip`
```bash
pip install coding-agent-telegram
coding-agent-telegram
```
-### Option C: Uitvoeren vanuit een gekloonde repository
+### Optie C: Uitvoeren vanuit een gekloonde repository
```bash
git clone https://github.com/daocha/coding-agent-telegram
cd coding-agent-telegram
diff --git a/README.th.md b/README.th.md
index 55280ad..8b672c6 100644
--- a/README.th.md
+++ b/README.th.md
@@ -109,18 +109,18 @@ Openclaw มีความสามารถครบมาก และมี
## 🚀 เริ่มต้นอย่างรวดเร็ว
-### Option A: สคริปต์ bootstrap แบบบรรทัดเดียว
+### วิธีที่ A: สคริปต์ bootstrap แบบบรรทัดเดียว
```bash
curl -fsSL https://raw.githubusercontent.com/daocha/coding-agent-telegram/main/install.sh | bash
```
-### Option B: ติดตั้งจาก PyPI ด้วย `pip`
+### วิธีที่ B: ติดตั้งจาก PyPI ด้วย `pip`
```bash
pip install coding-agent-telegram
coding-agent-telegram
```
-### Option C: รันจาก repository ที่ clone มา
+### วิธีที่ C: รันจาก repository ที่ clone มา
```bash
git clone https://github.com/daocha/coding-agent-telegram
cd coding-agent-telegram
@@ -131,10 +131,10 @@ cd coding-agent-telegram
##### ครั้งแรกแอปจะสร้างไฟล์ env และบอกว่าต้องกรอกค่าใดบ้าง
##### หลังแก้ไฟล์ env แล้ว ให้รันอีกครั้ง:
```bash
-# หากคุณทำตามตัวเลือก A หรือ Option B ให้รัน
+# หากคุณทำตามวิธีที่ A หรือ วิธีที่ B ให้รัน
coding-agent-telegram
-# หากคุณทำตามตัวเลือก C ให้รันสิ่งนี้อีกครั้ง
+# หากคุณทำตามวิธีที่ C ให้รันสิ่งนี้อีกครั้ง
./startup.sh
```
diff --git a/README.vi.md b/README.vi.md
index 43b7329..11bdd51 100644
--- a/README.vi.md
+++ b/README.vi.md
@@ -109,18 +109,18 @@ Openclaw cung cấp bộ tính năng rất đầy đủ và đã có sẵn agent
## 🚀 Bắt đầu nhanh
-### Option A: Script bootstrap một dòng
+### Cách A: Script bootstrap một dòng
```bash
curl -fsSL https://raw.githubusercontent.com/daocha/coding-agent-telegram/main/install.sh | bash
```
-### Option B: Cài từ PyPI bằng `pip`
+### Cách B: Cài từ PyPI bằng `pip`
```bash
pip install coding-agent-telegram
coding-agent-telegram
```
-### Option C: Chạy từ repository đã clone
+### Cách C: Chạy từ repository đã clone
```bash
git clone https://github.com/daocha/coding-agent-telegram
cd coding-agent-telegram
diff --git a/README.zh-CN.md b/README.zh-CN.md
index 4ca9095..070f23a 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -114,13 +114,13 @@ Openclaw 功能非常完整,也内置了名为 Pi-Agent 的 agent loop,适
curl -fsSL https://raw.githubusercontent.com/daocha/coding-agent-telegram/main/install.sh | bash
```
-### Option B:通过 `pip` 从 PyPI 安装
+### 方案 B:通过 `pip` 从 PyPI 安装
```bash
pip install coding-agent-telegram
coding-agent-telegram
```
-### Option C:从克隆的仓库运行
+### 方案 C:从克隆的仓库运行
```bash
git clone https://github.com/daocha/coding-agent-telegram
cd coding-agent-telegram
diff --git a/README.zh-HK.md b/README.zh-HK.md
index 80d1804..6a09b79 100644
--- a/README.zh-HK.md
+++ b/README.zh-HK.md
@@ -114,13 +114,13 @@ Openclaw 提供非常完整的能力,也內建了名為 Pi-Agent 的 agent loo
curl -fsSL https://raw.githubusercontent.com/daocha/coding-agent-telegram/main/install.sh | bash
```
-### Option B:使用 `pip` 從 PyPI 安裝
+### 方案 B:使用 `pip` 從 PyPI 安裝
```bash
pip install coding-agent-telegram
coding-agent-telegram
```
-### Option C:從 clone 下來的 repository 執行
+### 方案 C:從 clone 下來的 repository 執行
```bash
git clone https://github.com/daocha/coding-agent-telegram
cd coding-agent-telegram
diff --git a/README.zh-TW.md b/README.zh-TW.md
index dbf88cd..ca132dc 100644
--- a/README.zh-TW.md
+++ b/README.zh-TW.md
@@ -114,13 +114,13 @@ Openclaw 提供非常完整的能力,也內建了名為 Pi-Agent 的 agent loo
curl -fsSL https://raw.githubusercontent.com/daocha/coding-agent-telegram/main/install.sh | bash
```
-### Option B:使用 `pip` 從 PyPI 安裝
+### 方案 B:使用 `pip` 從 PyPI 安裝
```bash
pip install coding-agent-telegram
coding-agent-telegram
```
-### Option C:從 clone 下來的 repository 執行
+### 方案 C:從 clone 下來的 repository 執行
```bash
git clone https://github.com/daocha/coding-agent-telegram
cd coding-agent-telegram
From a8b1eed94af64e387da1a384e356dd1002c4e391 Mon Sep 17 00:00:00 2001
From: DCHA Agent <259406208+dcha-agent@users.noreply.github.com>
Date: Tue, 31 Mar 2026 12:32:25 +0800
Subject: [PATCH 16/20] Update translations
---
README.ja.md | 44 ++++++++++++++++++-------------------
README.ko.md | 44 ++++++++++++++++++-------------------
README.th.md | 34 ++++++++++++++---------------
README.vi.md | 58 ++++++++++++++++++++++++-------------------------
README.zh-CN.md | 28 ++++++++++++------------
README.zh-HK.md | 34 ++++++++++++++---------------
README.zh-TW.md | 34 ++++++++++++++---------------
7 files changed, 138 insertions(+), 138 deletions(-)
diff --git a/README.ja.md b/README.ja.md
index 55b7c5a..30b183e 100644
--- a/README.ja.md
+++ b/README.ja.md
@@ -258,7 +258,7 @@ https://api.telegram.org/bot/getUpdates
|
/abort |
- 現在のプロジェクトで実行中の agent run を中断します。queued questions がある場合は続行するか確認します。 |
+ 現在のプロジェクトで実行中の エージェント実行 を中断します。キューされた質問 がある場合は続行するか確認します。 |
@@ -339,11 +339,11 @@ https://api.telegram.org/bot/getUpdates
AGENT_HARD_TIMEOUT_SECONDS |
- 単一の agent run に対するハードタイムアウト。既定: 0(無効)。 |
+ 単一の エージェント実行 に対するハードタイムアウト。既定: 0(無効)。 |
SNAPSHOT_TEXT_FILE_MAX_BYTES |
- 実行ごとの diff 用に before/after snapshot を作る際、bot がテキストとして読む最大ファイルサイズです。既定: 200000. |
+ 実行ごとの diff 用に 実行前後のスナップショット を作る際、bot がテキストとして読む最大ファイルサイズです。既定: 200000. |
MAX_TELEGRAM_MESSAGE_LENGTH |
@@ -363,7 +363,7 @@ https://api.telegram.org/bot/getUpdates
SNAPSHOT_EXCLUDE_PATH_GLOBS |
- パッケージ既定値に加えて diff 除外を追加します。例: .*,personal/*,sensitive*.txt 注: .* は hidden directory 内のファイルも含む hidden path に一致します。 |
+ パッケージ既定値に加えて diff 除外を追加します。例: .*,personal/*,sensitive*.txt 注: .* は 隠しディレクトリ内のファイルも含む隠しパス に一致します。 |
@@ -452,9 +452,9 @@ ENABLE_SECRET_SCRUB_FILTER=true
### 🔓 ワークスペース同時実行ロック
-**プロジェクトフォルダー** ごとに同時に動ける agent run は 1 つだけです。どの chat や Telegram bot から起動したかは関係ありません。
+**プロジェクトフォルダー** ごとに同時に動ける エージェント実行 は 1 つだけです。どの chat や Telegram bot から起動したかは関係ありません。
-- **プロジェクトは使用中**: その workspace ですでに agent run が動いている状態
+- **プロジェクトは使用中**: その workspace ですでに エージェント実行 が動いている状態
- **エージェントは使用中**: その 1 つの run が現在の依頼をまだ処理中の状態
2 つの agent が同じ workspace に同時に書き込まないように、この制約を設けています。競合する編集やデータ破損の可能性を減らすためです。
@@ -467,44 +467,44 @@ lock はディスクではなくメモリ上に保持されるため、agent 完
### 💬 キューされた質問
-現在の project で既に agent run が動いている場合、後から送られたテキストメッセージは拒否されずに queue されます。
+現在の project で既に エージェント実行 が動いている場合、後から送られたテキストメッセージは拒否されずに queue されます。
- 新しい質問はディスク上の queued-questions file に追記されます
- 現在の agent は先の依頼をそのまま処理し続けます
- run が正常終了すると、bot は queue 内の質問の処理を自動で開始します
-現在の run が abort され、まだ queued questions が残っている場合は自動継続しません。残りを続けるかどうか、まとめて処理するか 1 件ずつ処理するかを bot が確認します。
+現在の run が abort され、まだ キューされた質問 が残っている場合は自動継続しません。残りを続けるかどうか、まとめて処理するか 1 件ずつ処理するかを bot が確認します。
## ⚠️ Diff(ファイル変更)
-_各 agent run のたびに、bot はプロジェクトの軽量な before/after snapshot も取得し、変更ファイルの要約と diff を Telegram に送ります。この snapshot は Codex や Copilot ではなく、bot 自身が作成します。_
+_各 エージェント実行 のたびに、bot はプロジェクトの軽量な 実行前後のスナップショット も取得し、変更ファイルの要約と diff を Telegram に送ります。この スナップショット は Codex や Copilot ではなく、bot 自身が作成します。_
**Snapshot のポイント:**
-- app は run の前後で project directory を走査します
-- 通常のテキストファイルでは、git head diff よりも run ごとの snapshot diff を優先します
-- 一般的な依存関係、cache、runtime directory も除外されます
-- binary file と `SNAPSHOT_TEXT_FILE_MAX_BYTES` を超える file は text として読み込みません
+- app は run の前後で プロジェクトディレクトリ を走査します
+- 通常のテキストファイルでは、git head diff よりも 実行ごとのスナップショット差分 を優先します
+- 一般的な依存関係、キャッシュ、実行時ディレクトリ も除外されます
+- binary ファイル と `SNAPSHOT_TEXT_FILE_MAX_BYTES` を超える ファイル は text として読み込みません
- 非常に大きな project では、この追加走査によって I/O と memory の負荷が増えることがあります
-- snapshot で text として表現できない file は、可能なら `git diff` に fallback します
-- 大きい file や非 text file では、diff を省略して短いメッセージに置き換えることがあります
+- スナップショット で text として表現できない ファイル は、可能なら `git diff` に fallback します
+- 大きい ファイル や非 text ファイル では、diff を省略して短いメッセージに置き換えることがあります
-Snapshot の除外ルールは package resource にあります:
+Snapshot の除外ルールは パッケージ resource にあります:
- `src/coding_agent_telegram/resources/snapshot_excluded_dir_names.txt`
- `src/coding_agent_telegram/resources/snapshot_excluded_dir_globs.txt`
- `src/coding_agent_telegram/resources/snapshot_excluded_file_globs.txt`
-これらの既定値は、インストール済み package を編集せずに env file から上書きできます:
+これらの既定値は、インストール済み パッケージ を編集せずに 環境設定ファイル から上書きできます:
- `SNAPSHOT_INCLUDE_PATH_GLOBS`
一致した path を diff に強制的に含めます。
例: `.github/*,.profile.test,.profile.prod`
- `SNAPSHOT_EXCLUDE_PATH_GLOBS`
- package 既定値に追加の diff 除外を加えます。
+ パッケージ 既定値に追加の diff 除外を加えます。
例: `.*,personal/*,sensitive*.txt`
- 注: `.*` は hidden directory 内の file も含む hidden path に一致します。
+ 注: `.*` は 隠しディレクトリ内のファイルも含む隠しパス に一致します。
include と exclude の両方が一致した場合は include が優先されます。
@@ -539,11 +539,11 @@ branch を作成または切り替えるとき、bot は source を明示的に
## 🪵 ログ
-log は **stdout とローテーションする log file の両方**に書き込まれます:
+log は **stdout とローテーションする ログファイル の両方**に書き込まれます:
- `~/.coding-agent-telegram/logs`(10 MB でローテーション、3 世代保持)
-> **注意:** terminal を見ながら同時に log file を tail すると、各メッセージが 2 回表示されます。これは想定どおりです。どちらか一方だけを見てください。
+> **注意:** terminal を見ながら同時に ログファイル を tail すると、各メッセージが 2 回表示されます。これは想定どおりです。どちらか一方だけを見てください。
よく記録されるイベント
@@ -573,7 +573,7 @@ log は **stdout とローテーションする log file の両方**に書き込
repo 起動と package インストールの両方で使う canonical な environment template
- `pyproject.toml`
- packaging と dependency の設定
+ パッケージング と 依存関係 の設定
## 📦 リリース版の付け方
diff --git a/README.ko.md b/README.ko.md
index d2f9a91..5cf2365 100644
--- a/README.ko.md
+++ b/README.ko.md
@@ -258,7 +258,7 @@ https://api.telegram.org/bot/getUpdates
/abort |
- 현재 project 의 agent run 을 중단합니다. 대기 중인 queued question 이 있으면 계속할지 묻습니다. |
+ 현재 project 의 에이전트 실행 을 중단합니다. 대기 중인 queued question 이 있으면 계속할지 묻습니다. |
@@ -339,7 +339,7 @@ https://api.telegram.org/bot/getUpdates
AGENT_HARD_TIMEOUT_SECONDS |
- 단일 agent run 의 하드 타임아웃입니다. 기본값: 0 (비활성화). |
+ 단일 에이전트 실행 의 하드 타임아웃입니다. 기본값: 0 (비활성화). |
SNAPSHOT_TEXT_FILE_MAX_BYTES |
@@ -363,7 +363,7 @@ https://api.telegram.org/bot/getUpdates
SNAPSHOT_EXCLUDE_PATH_GLOBS |
- 패키지 기본값 위에 추가 diff 제외 규칙을 더합니다. 예: .*,personal/*,sensitive*.txt 참고: .* 는 hidden directory 안 파일을 포함한 hidden path 에도 매칭됩니다. |
+ 패키지 기본값 위에 추가 diff 제외 규칙을 더합니다. 예: .*,personal/*,sensitive*.txt 참고: .* 는 숨김 디렉터리 안 파일을 포함한 숨김 경로 에도 매칭됩니다. |
@@ -452,9 +452,9 @@ ENABLE_SECRET_SCRUB_FILTER=true
### 🔓 워크스페이스 동시 실행 잠금
-동시에 실행될 수 있는 agent run 은 **프로젝트 폴더** 당 하나뿐입니다. 어떤 chat 이나 Telegram bot 이 시작했는지는 관계없습니다.
+동시에 실행될 수 있는 에이전트 실행 은 **프로젝트 폴더** 당 하나뿐입니다. 어떤 chat 이나 Telegram bot 이 시작했는지는 관계없습니다.
-- **프로젝트가 사용 중**: 그 workspace 에 이미 agent run 이 있는 상태
+- **프로젝트가 사용 중**: 그 workspace 에 이미 에이전트 실행 이 있는 상태
- **에이전트가 사용 중**: 그 하나의 run 이 현재 요청을 아직 처리 중인 상태
두 agent 가 같은 workspace 에 동시에 쓰지 않도록 bot 이 이 제한을 강제합니다. 충돌하는 수정과 데이터 손상 가능성을 줄이기 위함입니다.
@@ -467,44 +467,44 @@ lock 은 디스크가 아니라 메모리에만 유지되므로 agent 가 끝나
### 💬 Queued questions
-현재 project 에 이미 agent run 이 있으면, 이후의 텍스트 메시지는 거절되지 않고 queue 됩니다.
+현재 project 에 이미 에이전트 실행 이 있으면, 이후의 텍스트 메시지는 거절되지 않고 queue 됩니다.
- 새 질문은 디스크의 queued-questions file 에 추가됩니다
- 현재 agent 는 이전 요청을 계속 처리합니다
-- run 이 정상적으로 끝나면 bot 이 queued questions 를 자동으로 처리하기 시작합니다
+- run 이 정상적으로 끝나면 bot 이 대기 중인 질문 를 자동으로 처리하기 시작합니다
-현재 run 이 abort 되었고 queued questions 가 남아 있으면 자동으로 계속하지 않습니다. 남은 질문을 계속 처리할지, 묶어서 할지, 하나씩 할지를 bot 이 묻습니다.
+현재 run 이 abort 되었고 대기 중인 질문 가 남아 있으면 자동으로 계속하지 않습니다. 남은 질문을 계속 처리할지, 묶어서 할지, 하나씩 할지를 bot 이 묻습니다.
## ⚠️ Diff (파일 변경)
-_각 agent run 동안 bot 은 project 의 가벼운 before/after snapshot 도 만들어 변경 파일 요약과 diff 를 Telegram 으로 보낼 수 있게 합니다. 이 snapshot 은 Codex 나 Copilot 이 아니라 bot 앱 자체가 만듭니다._
+_각 에이전트 실행 동안 bot 은 project 의 가벼운 실행 전후 스냅샷 도 만들어 변경 파일 요약과 diff 를 Telegram 으로 보낼 수 있게 합니다. 이 스냅샷 은 Codex 나 Copilot 이 아니라 bot 앱 자체가 만듭니다._
**Snapshot 참고 사항:**
-- app 은 run 전후에 project directory 를 순회합니다
-- 일반 텍스트 파일은 git head diff 보다 run 별 snapshot diff 를 우선합니다
-- 일반적인 dependency, cache, runtime directory 도 건너뜁니다
-- binary file 과 `SNAPSHOT_TEXT_FILE_MAX_BYTES` 보다 큰 file 은 텍스트로 읽지 않습니다
+- app 은 run 전후에 프로젝트 디렉터리 를 순회합니다
+- 일반 텍스트 파일은 git head diff 보다 run 별 스냅샷 diff 를 우선합니다
+- 일반적인 의존성, 캐시, 런타임 디렉터리 도 건너뜁니다
+- binary 파일 과 `SNAPSHOT_TEXT_FILE_MAX_BYTES` 보다 큰 파일 은 텍스트로 읽지 않습니다
- 매우 큰 project 에서는 이 추가 스캔으로 I/O 와 memory 부담이 커질 수 있습니다
-- snapshot 이 file 을 텍스트로 표현할 수 없으면 가능할 때 `git diff` 로 fallback 합니다
-- 큰 file 이나 비텍스트 file 은 diff 를 생략하고 짧은 안내로 대체할 수 있습니다
+- 스냅샷 이 파일 을 텍스트로 표현할 수 없으면 가능할 때 `git diff` 로 fallback 합니다
+- 큰 파일 이나 비텍스트 파일 은 diff 를 생략하고 짧은 안내로 대체할 수 있습니다
-Snapshot 제외 규칙은 package resource 에 있습니다:
+Snapshot 제외 규칙은 패키지 resource 에 있습니다:
- `src/coding_agent_telegram/resources/snapshot_excluded_dir_names.txt`
- `src/coding_agent_telegram/resources/snapshot_excluded_dir_globs.txt`
- `src/coding_agent_telegram/resources/snapshot_excluded_file_globs.txt`
-설치된 package 를 수정하지 않고 env file 에서 기본값을 덮어쓸 수 있습니다:
+설치된 패키지 를 수정하지 않고 환경 파일 에서 기본값을 덮어쓸 수 있습니다:
- `SNAPSHOT_INCLUDE_PATH_GLOBS`
일치하는 path 를 diff 에 강제로 포함합니다.
예: `.github/*,.profile.test,.profile.prod`
- `SNAPSHOT_EXCLUDE_PATH_GLOBS`
- package 기본값 위에 추가 diff 제외를 더합니다.
+ 패키지 기본값 위에 추가 diff 제외를 더합니다.
예: `.*,personal/*,sensitive*.txt`
- 참고: `.*` 는 hidden directory 안의 file 을 포함한 hidden path 와도 일치합니다.
+ 참고: `.*` 는 숨김 디렉터리 안의 파일을 포함한 숨김 경로 와도 일치합니다.
include 와 exclude 가 모두 맞으면 include 가 우선합니다.
@@ -539,11 +539,11 @@ branch 를 만들거나 바꿀 때 bot 은 source 를 명시적으로 안내합
## 🪵 로그
-log 는 **stdout 과 회전하는 log file 양쪽**에 기록됩니다:
+log 는 **stdout 과 회전하는 로그 파일 양쪽**에 기록됩니다:
- `~/.coding-agent-telegram/logs` (10 MB 에서 회전, 3개 백업 유지)
-> **참고:** terminal 을 보면서 동시에 log file 을 tail 하면 각 메시지가 두 번 보입니다. 정상 동작입니다. 둘 중 하나만 보세요.
+> **참고:** terminal 을 보면서 동시에 로그 파일 을 tail 하면 각 메시지가 두 번 보입니다. 정상 동작입니다. 둘 중 하나만 보세요.
자주 기록되는 이벤트
@@ -573,7 +573,7 @@ log 는 **stdout 과 회전하는 log file 양쪽**에 기록됩니다:
repo 시작과 package 설치에서 모두 사용하는 canonical environment template
- `pyproject.toml`
- packaging 및 dependency 설정
+ 패키징 및 의존성 설정
## 📦 릴리스 버전 규칙
diff --git a/README.th.md b/README.th.md
index 8b672c6..70022a0 100644
--- a/README.th.md
+++ b/README.th.md
@@ -258,7 +258,7 @@ https://api.telegram.org/bot/getUpdates
/abort |
- ยกเลิก agent run ปัจจุบันของ project นี้ หากมี queued questions รออยู่ บอตจะถามว่าจะให้ประมวลผลต่อหรือไม่ |
+ ยกเลิก การรันของเอเจนต์ ปัจจุบันของ project นี้ หากมี คำถามที่เข้าคิว รออยู่ บอตจะถามว่าจะให้ประมวลผลต่อหรือไม่ |
@@ -339,11 +339,11 @@ https://api.telegram.org/bot