@raolin2025/claude-code-node 2.7.5 → 2.7.6
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 +20 -11
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.6",
|
|
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
|
@@ -590,6 +590,8 @@ const systemPrompt = cliArgs.systemPrompt || DEFAULT_SYSTEM_PROMPT
|
|
|
590
590
|
let pendingConfirm = null
|
|
591
591
|
// 等待中的 Telegram AskUserQuestion 回答(resolve 回调)— 远程用户回复任意文本时响应
|
|
592
592
|
let pendingAskUser = null
|
|
593
|
+
// 取消当前等待中的 AskUserQuestion(用户 /stop 时调用,resolve 为取消标记,避免死锁)
|
|
594
|
+
let cancelAskUser = null
|
|
593
595
|
// 最近一次 /models 拉取的模型列表(供 /model <编号> 选择)
|
|
594
596
|
let modelList = []
|
|
595
597
|
// /models 从 Telegram 发出后,等待用户回复编号/名字来选择模型
|
|
@@ -613,7 +615,8 @@ const systemPrompt = cliArgs.systemPrompt || DEFAULT_SYSTEM_PROMPT
|
|
|
613
615
|
if (source === 'telegram' && pendingAskUser && !trimmed.startsWith('/')) {
|
|
614
616
|
const ask = pendingAskUser
|
|
615
617
|
pendingAskUser = null
|
|
616
|
-
|
|
618
|
+
cancelAskUser = null
|
|
619
|
+
ask.fn(trimmed)
|
|
617
620
|
return
|
|
618
621
|
}
|
|
619
622
|
if (source === 'telegram' && pendingConfirm && !trimmed.startsWith('/')) {
|
|
@@ -808,7 +811,14 @@ const systemPrompt = cliArgs.systemPrompt || DEFAULT_SYSTEM_PROMPT
|
|
|
808
811
|
console.log('Conversation cleared')
|
|
809
812
|
break
|
|
810
813
|
case 'stop':
|
|
811
|
-
// 停止当前正在运行的 AI 工作(如卡死 /
|
|
814
|
+
// 停止当前正在运行的 AI 工作(如卡死 / 长时间无响应时)。
|
|
815
|
+
// 若正在等待 AskUserQuestion 回答,先取消提问(resolve 取消标记),避免引擎挂起。
|
|
816
|
+
if (pendingAskUser) {
|
|
817
|
+
const cancel = cancelAskUser
|
|
818
|
+
pendingAskUser = null
|
|
819
|
+
cancelAskUser = null
|
|
820
|
+
if (cancel) cancel()
|
|
821
|
+
}
|
|
812
822
|
if (engine.state.isRunning) {
|
|
813
823
|
engine.abort()
|
|
814
824
|
console.log('⏹️ 已发送停止信号,正在中止当前工作...')
|
|
@@ -1152,17 +1162,16 @@ const systemPrompt = cliArgs.systemPrompt || DEFAULT_SYSTEM_PROMPT
|
|
|
1152
1162
|
// - CLI 本地模式:走本地终端交互(inputCtrl.ask)
|
|
1153
1163
|
engine.config.onAskUser = (question) => {
|
|
1154
1164
|
if (currentSource === 'telegram' && tgListener?.bot) {
|
|
1155
|
-
const promptText = `❓ ${question}\n\n
|
|
1165
|
+
const promptText = `❓ ${question}\n\n请直接回复你的回答。\n(发 /stop 可取消本次提问)`
|
|
1156
1166
|
sendTelegram(promptText, null).catch(() => {})
|
|
1157
1167
|
return new Promise((resolve) => {
|
|
1158
|
-
//
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
resolve(val)
|
|
1168
|
+
// 一直等待用户回答——不设超时自行结束(超时会吞掉迟到回答,违背"等待回答"语义)。
|
|
1169
|
+
// 用户回复任意文本即作为回答;用户 /stop 则通过 cancelAskUser 取消(resolve 取消标记,避免死锁)。
|
|
1170
|
+
pendingAskUser = { fn: (val) => resolve(val) }
|
|
1171
|
+
cancelAskUser = () => {
|
|
1172
|
+
if (pendingAskUser) pendingAskUser = null
|
|
1173
|
+
cancelAskUser = null
|
|
1174
|
+
resolve('(提问已取消)')
|
|
1166
1175
|
}
|
|
1167
1176
|
})
|
|
1168
1177
|
}
|