@raolin2025/claude-code-node 2.7.6 → 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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/core/cli.js +13 -35
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@raolin2025/claude-code-node",
3
- "version": "2.7.6",
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,10 +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
- // 取消当前等待中的 AskUserQuestion(用户 /stop 时调用,resolve 为取消标记,避免死锁)
594
- let cancelAskUser = null
595
591
  // 最近一次 /models 拉取的模型列表(供 /model <编号> 选择)
596
592
  let modelList = []
597
593
  // /models 从 Telegram 发出后,等待用户回复编号/名字来选择模型
@@ -611,14 +607,8 @@ const systemPrompt = cliArgs.systemPrompt || DEFAULT_SYSTEM_PROMPT
611
607
  // 关键:来自 Telegram 的消息,如果当前正在等待远程权限确认(pendingConfirm),
612
608
  // 则把它当作确认回复(y/n/a)处理,而不是当作新的 REPL 输入。
613
609
  // 注意:/ 开头的命令优先走命令分支,不被权限确认拦截(否则 /quit、/stop 会被吞)。
614
- // 优先处理 pendingAskUser(AskUserQuestion 需要任意文本答案,且通常是用户正在等待的问题)。
615
- if (source === 'telegram' && pendingAskUser && !trimmed.startsWith('/')) {
616
- const ask = pendingAskUser
617
- pendingAskUser = null
618
- cancelAskUser = null
619
- ask.fn(trimmed)
620
- return
621
- }
610
+ // (AskUserQuestion 已改为异步发问,不再依赖 pendingAskUser 挂起结构——用户回复
611
+ // 作为正常消息进入引擎处理,无锁死/发呆问题。)
622
612
  if (source === 'telegram' && pendingConfirm && !trimmed.startsWith('/')) {
623
613
  const confirm = pendingConfirm
624
614
  pendingConfirm = null
@@ -812,13 +802,7 @@ const systemPrompt = cliArgs.systemPrompt || DEFAULT_SYSTEM_PROMPT
812
802
  break
813
803
  case 'stop':
814
804
  // 停止当前正在运行的 AI 工作(如卡死 / 长时间无响应时)。
815
- // 若正在等待 AskUserQuestion 回答,先取消提问(resolve 取消标记),避免引擎挂起。
816
- if (pendingAskUser) {
817
- const cancel = cancelAskUser
818
- pendingAskUser = null
819
- cancelAskUser = null
820
- if (cancel) cancel()
821
- }
805
+ // AskUserQuestion 已改为异步发问(不挂起),无需在此取消 pending 等待。
822
806
  if (engine.state.isRunning) {
823
807
  engine.abort()
824
808
  console.log('⏹️ 已发送停止信号,正在中止当前工作...')
@@ -1157,25 +1141,19 @@ const systemPrompt = cliArgs.systemPrompt || DEFAULT_SYSTEM_PROMPT
1157
1141
  }
1158
1142
  engine.config.readline = rl
1159
1143
 
1160
- // AskUserQuestion 工具回调 — 按当前来源分流:
1161
- // - Telegram 远程模式:推送问题到 Telegram 并等待远程回复(带超时兜底,避免死锁)
1162
- // - CLI 本地模式:走本地终端交互(inputCtrl.ask)
1144
+ // AskUserQuestion 工具回调 — 按通道分流:
1145
+ // - Telegram 可用时:异步发问——发问题到 Telegram 后立即返回(不挂起 Promise、不锁死引擎),
1146
+ // 用户后续回复作为正常消息进入,由下一轮引擎处理时把回复当作回答。
1147
+ // 避免旧"挂起等待"结构导致会话卡死/发呆。
1148
+ // - CLI 本地模式:同步等待本地终端输入。
1163
1149
  engine.config.onAskUser = (question) => {
1164
- if (currentSource === 'telegram' && tgListener?.bot) {
1165
- const promptText = `❓ ${question}\n\n请直接回复你的回答。\n(发 /stop 可取消本次提问)`
1150
+ if (tgListener?.bot && tgChatId) {
1151
+ const promptText = `❓ ${question}\n\n请直接回复你的回答。`
1166
1152
  sendTelegram(promptText, null).catch(() => {})
1167
- return new Promise((resolve) => {
1168
- // 一直等待用户回答——不设超时自行结束(超时会吞掉迟到回答,违背"等待回答"语义)。
1169
- // 用户回复任意文本即作为回答;用户 /stop 则通过 cancelAskUser 取消(resolve 取消标记,避免死锁)。
1170
- pendingAskUser = { fn: (val) => resolve(val) }
1171
- cancelAskUser = () => {
1172
- if (pendingAskUser) pendingAskUser = null
1173
- cancelAskUser = null
1174
- resolve('(提问已取消)')
1175
- }
1176
- })
1153
+ // 立即返回,不挂起;用户回复会在下一轮以正常消息进入
1154
+ return `(已向用户提问,等待回复): ${question}`
1177
1155
  }
1178
- // CLI 本地模式
1156
+ // CLI 本地模式:同步等待终端输入
1179
1157
  return askQuestion(`❓ ${question}\n> `)
1180
1158
  }
1181
1159