@raolin2025/claude-code-node 2.7.5 → 2.7.7
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/core/cli.js +13 -26
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@raolin2025/claude-code-node",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.7",
|
|
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",
|
package/src/core/cli.js
CHANGED
|
@@ -588,8 +588,6 @@ const systemPrompt = cliArgs.systemPrompt || DEFAULT_SYSTEM_PROMPT
|
|
|
588
588
|
let currentSource = 'cli'
|
|
589
589
|
// 等待中的 Telegram 权限确认(resolve 回调)— 远程用户回复 y/n/a 时响应
|
|
590
590
|
let pendingConfirm = null
|
|
591
|
-
// 等待中的 Telegram AskUserQuestion 回答(resolve 回调)— 远程用户回复任意文本时响应
|
|
592
|
-
let pendingAskUser = null
|
|
593
591
|
// 最近一次 /models 拉取的模型列表(供 /model <编号> 选择)
|
|
594
592
|
let modelList = []
|
|
595
593
|
// /models 从 Telegram 发出后,等待用户回复编号/名字来选择模型
|
|
@@ -609,13 +607,8 @@ const systemPrompt = cliArgs.systemPrompt || DEFAULT_SYSTEM_PROMPT
|
|
|
609
607
|
// 关键:来自 Telegram 的消息,如果当前正在等待远程权限确认(pendingConfirm),
|
|
610
608
|
// 则把它当作确认回复(y/n/a)处理,而不是当作新的 REPL 输入。
|
|
611
609
|
// 注意:/ 开头的命令优先走命令分支,不被权限确认拦截(否则 /quit、/stop 会被吞)。
|
|
612
|
-
//
|
|
613
|
-
|
|
614
|
-
const ask = pendingAskUser
|
|
615
|
-
pendingAskUser = null
|
|
616
|
-
ask(trimmed)
|
|
617
|
-
return
|
|
618
|
-
}
|
|
610
|
+
// (AskUserQuestion 已改为异步发问,不再依赖 pendingAskUser 挂起结构——用户回复
|
|
611
|
+
// 作为正常消息进入引擎处理,无锁死/发呆问题。)
|
|
619
612
|
if (source === 'telegram' && pendingConfirm && !trimmed.startsWith('/')) {
|
|
620
613
|
const confirm = pendingConfirm
|
|
621
614
|
pendingConfirm = null
|
|
@@ -808,7 +801,8 @@ const systemPrompt = cliArgs.systemPrompt || DEFAULT_SYSTEM_PROMPT
|
|
|
808
801
|
console.log('Conversation cleared')
|
|
809
802
|
break
|
|
810
803
|
case 'stop':
|
|
811
|
-
// 停止当前正在运行的 AI 工作(如卡死 /
|
|
804
|
+
// 停止当前正在运行的 AI 工作(如卡死 / 长时间无响应时)。
|
|
805
|
+
// AskUserQuestion 已改为异步发问(不挂起),无需在此取消 pending 等待。
|
|
812
806
|
if (engine.state.isRunning) {
|
|
813
807
|
engine.abort()
|
|
814
808
|
console.log('⏹️ 已发送停止信号,正在中止当前工作...')
|
|
@@ -1147,26 +1141,19 @@ const systemPrompt = cliArgs.systemPrompt || DEFAULT_SYSTEM_PROMPT
|
|
|
1147
1141
|
}
|
|
1148
1142
|
engine.config.readline = rl
|
|
1149
1143
|
|
|
1150
|
-
// AskUserQuestion 工具回调 —
|
|
1151
|
-
// - Telegram
|
|
1152
|
-
//
|
|
1144
|
+
// AskUserQuestion 工具回调 — 按通道分流:
|
|
1145
|
+
// - Telegram 可用时:异步发问——发问题到 Telegram 后立即返回(不挂起 Promise、不锁死引擎),
|
|
1146
|
+
// 用户后续回复作为正常消息进入,由下一轮引擎处理时把回复当作回答。
|
|
1147
|
+
// 避免旧"挂起等待"结构导致会话卡死/发呆。
|
|
1148
|
+
// - CLI 本地模式:同步等待本地终端输入。
|
|
1153
1149
|
engine.config.onAskUser = (question) => {
|
|
1154
|
-
if (
|
|
1150
|
+
if (tgListener?.bot && tgChatId) {
|
|
1155
1151
|
const promptText = `❓ ${question}\n\n请直接回复你的回答。`
|
|
1156
1152
|
sendTelegram(promptText, null).catch(() => {})
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
const timer = setTimeout(() => {
|
|
1160
|
-
if (pendingAskUser === resolve) pendingAskUser = null
|
|
1161
|
-
resolve('(用户未在 60 秒内回答)')
|
|
1162
|
-
}, 60000)
|
|
1163
|
-
pendingAskUser = (val) => {
|
|
1164
|
-
clearTimeout(timer)
|
|
1165
|
-
resolve(val)
|
|
1166
|
-
}
|
|
1167
|
-
})
|
|
1153
|
+
// 立即返回,不挂起;用户回复会在下一轮以正常消息进入
|
|
1154
|
+
return `(已向用户提问,等待回复): ${question}`
|
|
1168
1155
|
}
|
|
1169
|
-
// CLI
|
|
1156
|
+
// CLI 本地模式:同步等待终端输入
|
|
1170
1157
|
return askQuestion(`❓ ${question}\n> `)
|
|
1171
1158
|
}
|
|
1172
1159
|
|