@raolin2025/claude-code-node 2.6.16 → 2.6.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/channel/tg-listener.js +5 -3
- package/src/core/cli.js +29 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@raolin2025/claude-code-node",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.18",
|
|
4
4
|
"description": "Node.js AI Code Agent CLI - Zero dependencies, pure JavaScript, security hardened, multi-channel notifications, Telegram & QQ Bot remote programming, rich media upload, multi-account management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/core/index.js",
|
|
@@ -118,7 +118,9 @@ export class TelegramBotClient {
|
|
|
118
118
|
const body = {
|
|
119
119
|
chat_id: chatId,
|
|
120
120
|
text: text.slice(0, 4096), // Telegram 消息最大 4096 字符
|
|
121
|
-
|
|
121
|
+
// parseMode: null 表示降级为纯文本(去掉 parse_mode 字段);
|
|
122
|
+
// 否则默认 HTML,或用显式指定的 parseMode。
|
|
123
|
+
...(parseMode === null ? {} : { parse_mode: parseMode || 'HTML' }),
|
|
122
124
|
disable_notification: silent || false,
|
|
123
125
|
disable_web_page_preview: disableWebPreview ?? true,
|
|
124
126
|
}
|
|
@@ -139,9 +141,9 @@ export class TelegramBotClient {
|
|
|
139
141
|
await new Promise(r => setTimeout(r, retryAfter * 1000))
|
|
140
142
|
return this.sendMessage(chatId, text, options)
|
|
141
143
|
}
|
|
142
|
-
// 400 可能是消息太长或格式问题 —
|
|
144
|
+
// 400 可能是消息太长或格式问题 — 降级为纯文本(parseMode: null 去掉 parse_mode)
|
|
143
145
|
if (data.error_code === 400 && parseMode) {
|
|
144
|
-
return this.sendMessage(chatId, text, { ...options, parseMode:
|
|
146
|
+
return this.sendMessage(chatId, text, { ...options, parseMode: null })
|
|
145
147
|
}
|
|
146
148
|
throw new Error(`Telegram API ${data.error_code}: ${data.description?.slice(0, 200) || 'unknown'}`)
|
|
147
149
|
}
|
package/src/core/cli.js
CHANGED
|
@@ -601,6 +601,8 @@ const systemPrompt = cliArgs.systemPrompt || DEFAULT_SYSTEM_PROMPT
|
|
|
601
601
|
let pendingConfirm = null
|
|
602
602
|
// 最近一次 /models 拉取的模型列表(供 /model <编号> 选择)
|
|
603
603
|
let modelList = []
|
|
604
|
+
// /models 从 Telegram 发出后,等待用户回复编号/名字来选择模型
|
|
605
|
+
let pendingModelSelect = false
|
|
604
606
|
|
|
605
607
|
// 处理输入行
|
|
606
608
|
// source: 'cli' 来自终端输入, 'telegram' 来自 Telegram
|
|
@@ -635,7 +637,31 @@ const systemPrompt = cliArgs.systemPrompt || DEFAULT_SYSTEM_PROMPT
|
|
|
635
637
|
return
|
|
636
638
|
}
|
|
637
639
|
|
|
640
|
+
// /models 从 Telegram 发出后,用户回复编号或名字来选择模型
|
|
641
|
+
if (source === 'telegram' && pendingModelSelect && !trimmed.startsWith('/')) {
|
|
642
|
+
const num = parseInt(trimmed, 10)
|
|
643
|
+
let selected = ''
|
|
644
|
+
if (!isNaN(num) && num >= 1 && num <= modelList.length) {
|
|
645
|
+
selected = modelList[num - 1]
|
|
646
|
+
} else if (modelList.includes(trimmed)) {
|
|
647
|
+
selected = trimmed
|
|
648
|
+
}
|
|
649
|
+
// 无论是否是有效选择,都结束"等待选择"状态
|
|
650
|
+
pendingModelSelect = false
|
|
651
|
+
if (selected) {
|
|
652
|
+
engine.config.model = selected
|
|
653
|
+
console.log(`Model → ${selected}`)
|
|
654
|
+
if (tgListener?.bot) {
|
|
655
|
+
await sendTelegram(`✅ 已切换模型 → ${selected}`, tgChatId || null).catch(() => {})
|
|
656
|
+
}
|
|
657
|
+
return
|
|
658
|
+
}
|
|
659
|
+
// 不是有效选择 → 当作普通消息继续处理
|
|
660
|
+
}
|
|
661
|
+
|
|
638
662
|
if (trimmed.startsWith('/')) {
|
|
663
|
+
// 用户输入了命令,取消可能存在的"等待模型选择"状态
|
|
664
|
+
pendingModelSelect = false
|
|
639
665
|
// 来自 Telegram 的命令:捕获 console 输出并回发到 Telegram
|
|
640
666
|
const isTgCmd = source === 'telegram' && tgListener?.bot
|
|
641
667
|
let tgOut = ''
|
|
@@ -694,9 +720,10 @@ const systemPrompt = cliArgs.systemPrompt || DEFAULT_SYSTEM_PROMPT
|
|
|
694
720
|
modelList.forEach((id, i) => {
|
|
695
721
|
console.log(` ${(i + 1).toString().padStart(2)}. ${id}`)
|
|
696
722
|
})
|
|
697
|
-
// 来自 Telegram:直接列出,不等待 CLI 交互(用 /model
|
|
723
|
+
// 来自 Telegram:直接列出,不等待 CLI 交互(用 /model 名字或编号 切换)
|
|
698
724
|
if (source === 'telegram') {
|
|
699
|
-
console.log('\nℹ️
|
|
725
|
+
console.log('\nℹ️ 直接回复编号或模型名即可切换')
|
|
726
|
+
pendingModelSelect = true // 等待用户回复编号/名字来选择模型
|
|
700
727
|
break
|
|
701
728
|
}
|
|
702
729
|
console.log('\nType a number to select, or model name directly:')
|