Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
491ab5bc8f | ||
|
|
8d4cec9bb3 | ||
|
|
c8b3ff68a7 | ||
|
|
ef9fcb9d4a |
@@ -20,9 +20,10 @@
|
||||
|
||||
## 快速開始
|
||||
|
||||
套件不在官方 npmjs 上,安裝要指定 `--registry`(不用登入):
|
||||
|
||||
```bash
|
||||
# 套件發佈在公司的 npm registry(不是官方 npmjs),安裝要指定 --registry
|
||||
npm install -g telegram-codex-bot --registry=https://git.catan.com.tw/api/packages/Frontend/npm/
|
||||
npm install -g telegram-codex-bot --registry=https://jianmiau.ddns.net/api/packages/AI/npm/
|
||||
|
||||
telegram-codex-bot start # 先做環境檢查(codex/登入/pm2/git),再把控制台掛上 pm2
|
||||
```
|
||||
@@ -30,7 +31,7 @@ telegram-codex-bot start # 先做環境檢查(codex/登入/pm2/git),再
|
||||
之後升級同樣帶 `--registry`:
|
||||
|
||||
```bash
|
||||
npm update -g telegram-codex-bot --registry=https://git.catan.com.tw/api/packages/Frontend/npm/
|
||||
npm update -g telegram-codex-bot --registry=https://jianmiau.ddns.net/api/packages/AI/npm/
|
||||
```
|
||||
|
||||
打開 **http://localhost:3799** →「🤖 Bot 管理」→「➕ 新增 Bot」:
|
||||
@@ -58,7 +59,7 @@ npm update -g telegram-codex-bot --registry=https://git.catan.com.tw/api/package
|
||||
**① Bot 管理首頁** — 每個 bot 一列:狀態、工作目錄、沙盒與模型設定、遮罩後的 token。
|
||||
右側按鈕:▶ 啟動 / ⏹ 停止、🔄 重啟、📄 log、✏️ 編輯、🗑 刪除。上方橫幅提醒群組使用要先關 Group Privacy。
|
||||
|
||||

|
||||

|
||||
|
||||
**② 新增 Bot** — 按右上「➕ 新增 Bot」:
|
||||
|
||||
@@ -68,15 +69,15 @@ npm update -g telegram-codex-bot --registry=https://git.catan.com.tw/api/package
|
||||
4. **模型 / 推理強度 / 速度**:下拉選單,預設值自動帶你機器上 codex 的全域設定;清單讀自本機 codex 模型快取,換模型時強度選項會連動(如 ultra 只有支援的模型才出現)
|
||||
5. 勾「建立後立即啟動」→ 儲存,bot 就上線了
|
||||
|
||||

|
||||

|
||||
|
||||
**③ PM2 分頁** — 整台機器所有 pm2 程序。Port 可直接點開對應網頁,右側可啟停/重啟/刪除任何程序。
|
||||
|
||||

|
||||

|
||||
|
||||
**④ Log 檢視** — 點任一程序的「📄 out」/「⚠ err」,下方展開尾端 200 行,可勾自動更新(5s)。
|
||||
|
||||

|
||||

|
||||
|
||||
- 兩個分頁每 5 秒自動更新
|
||||
- Bot 設定存於 `~/.tgcodex/bots/<名稱>/tgcodex.config.json`,bot 掛 pm2 的程序名 = bot 名稱
|
||||
|
||||
+3
-3
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"name": "telegram-codex-bot",
|
||||
"version": "0.1.2",
|
||||
"version": "0.1.5",
|
||||
"description": "Telegram bot powered by the local Codex CLI — zero-dependency, pm2-managed, with a built-in PM2 web viewer",
|
||||
"license": "MIT",
|
||||
"type": "commonjs",
|
||||
"publishConfig": {
|
||||
"registry": "https://git.catan.com.tw/api/packages/Frontend/npm/"
|
||||
"registry": "https://jianmiau.ddns.net/api/packages/AI/npm/"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git@git.catan.com.tw:Frontend/telegram-codex-bot.git"
|
||||
"url": "ssh://git@jianmiau.ddns.net:8022/AI/telegram-codex-bot.git"
|
||||
},
|
||||
"main": "src/index.js",
|
||||
"bin": {
|
||||
|
||||
+11
-3
@@ -224,13 +224,21 @@ function startBot(config) {
|
||||
const existing = sessions.get(chatId);
|
||||
|
||||
let result;
|
||||
let sessionResetNote = '';
|
||||
try {
|
||||
result = await runCodex({ config, prompt, threadId: existing?.threadId || null, images, onProgress });
|
||||
} catch (err) {
|
||||
// 舊會話可能已被 codex 清掉,找不到就自動開新會話重試一次
|
||||
if (existing && /session|thread|conversation/i.test(err.message) && /not.*found|找不到|no .*(session|thread)/i.test(err.message)) {
|
||||
// 舊會話 resume 不了的情況,自動開新會話重試一次:
|
||||
// 1) 會話已被 codex 清掉(not found)
|
||||
// 2) bot 換了模型,codex 拒絕跨模型 resume(recorded with model X but resuming with Y)
|
||||
const sessionGone = /session|thread|conversation/i.test(err.message) && /not.*found|找不到|no .*(session|thread)/i.test(err.message);
|
||||
const modelMismatch = /recorded with model/i.test(err.message);
|
||||
if (existing && (sessionGone || modelMismatch)) {
|
||||
sessions.clear(chatId);
|
||||
result = await runCodex({ config, prompt, threadId: null, images, onProgress });
|
||||
sessionResetNote = modelMismatch
|
||||
? '🆕 模型設定已變更,舊會話無法沿用,已自動開新會話(先前的對話記憶未帶入)。\n\n'
|
||||
: '🆕 舊會話已失效,已自動開新會話。\n\n';
|
||||
} else {
|
||||
throw err;
|
||||
}
|
||||
@@ -239,7 +247,7 @@ function startBot(config) {
|
||||
if (result.threadId) sessions.set(chatId, result.threadId);
|
||||
|
||||
const footer = buildFooter(config, result.usage, modelMeta, codexDefaults);
|
||||
const html = t.mdToTgHtml((result.text || '(Codex 沒有回覆文字)') + footer);
|
||||
const html = t.mdToTgHtml(sessionResetNote + (result.text || '(Codex 沒有回覆文字)') + footer);
|
||||
await t.editOrSplit(chatId, statusMsg.message_id, html, { html: true });
|
||||
await t.react(chatId, message.message_id, '👍');
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user