feat(upstream): sync b1c4f40f ACP fix + WorkflowTool top-level require()
Codex cherry-pick:
- b1c4f40f: fix ACP extended thinking + tool_use 连续 user 消息导致 400
→ src/utils/messages.ts: ensureToolResultPairing 检查连续 user 消息
→ src/utils/tests/messages.test.ts: 新增测试(冲突手动解决)
James 兜底:
- tools.ts: WorkflowTool lazy getter → top-level require (MonitorTool 模式)
移除 initBundledWorkflows() 调用(经确认是 no-op)
原因: lazy getter 在 splitting:true 下运行时触发 chunk load 死锁
审核结论:
- 上游 a91653a0/6dd378bf/efc218d8 已存在(之前已合入)
- 上游 9d17597e autofix-pr 回流跳过(大规模改动,stub 无基础)
- WORKFLOW_SCRIPTS 仍禁用: top-level require 在 splitting:true 下
触发 WorkflowTool chunk 循环死锁(非加载模式问题,是 chunk 依赖图过深)
当前 splitting:true 启用状态:
MONITOR_TOOL ✅ | WORKFLOW_SCRIPTS ❌ | 其他 features ✅
验证: --version / -p / --print / 源码模式 全部通过
This commit is contained in:
parent
b1d322f7cc
commit
cdd62520eb
|
|
@ -59,7 +59,7 @@ export const DEFAULT_BUILD_FEATURES = [
|
|||
'PROACTIVE', // 主动自主代理模式(SleepTool 控制 tick 节奏,省 token)
|
||||
'DAEMON', // 守护进程模式,长驻 supervisor 管理后台 worker(非 GB 级主因)
|
||||
'ACP', // ACP 代理协议,支持外部 agent 接入
|
||||
// 'WORKFLOW_SCRIPTS', // 已禁用:lazy getter 在 splitting:true 下仍触发 chunk 死锁,待进一步排查
|
||||
// 'WORKFLOW_SCRIPTS', // 已禁用:top-level require() 在 splitting:true 下仍触发 chunk 循环死锁——WorkflowTool chunk 依赖图过深
|
||||
// 'HISTORY_SNIP', // 已禁用:snip 功能暂时关闭
|
||||
// 'CONTEXT_COLLAPSE', // 已禁用:实现是空壳 stub,启用后会抑制 auto compact 导致上下文管理完全失效
|
||||
'MONITOR_TOOL', // 已修复:require() 迁移后 splitting:true 不再触发 __esm() 死锁
|
||||
|
|
|
|||
13
src/tools.ts
13
src/tools.ts
|
|
@ -132,13 +132,10 @@ const SnipTool = feature('HISTORY_SNIP')
|
|||
const ListPeersTool = feature('UDS_INBOX')
|
||||
? require('./tools/ListPeersTool/ListPeersTool.js').ListPeersTool
|
||||
: null
|
||||
// Lazy getter to defer chunk loading — IIFE causes code-split deadlock
|
||||
const getWorkflowTool = () => {
|
||||
if (!feature('WORKFLOW_SCRIPTS')) return null
|
||||
require('@claude-code-best/builtin-tools/tools/WorkflowTool/bundled/index.js').initBundledWorkflows()
|
||||
return require('@claude-code-best/builtin-tools/tools/WorkflowTool/WorkflowTool.js')
|
||||
.WorkflowTool
|
||||
}
|
||||
const WorkflowTool = feature('WORKFLOW_SCRIPTS')
|
||||
? require('@claude-code-best/builtin-tools/tools/WorkflowTool/WorkflowTool.js')
|
||||
.WorkflowTool
|
||||
: null
|
||||
/* eslint-enable custom-rules/no-process-env-top-level, @typescript-eslint/no-require-imports */
|
||||
import type { ToolPermissionContext } from './Tool.js'
|
||||
import { getDenyRuleForTool } from './utils/permissions/permissions.js'
|
||||
|
|
@ -237,7 +234,7 @@ export function getAllBaseTools(): Tools {
|
|||
: []),
|
||||
...(VerifyPlanExecutionTool ? [VerifyPlanExecutionTool] : []),
|
||||
...(process.env.USER_TYPE === 'ant' && REPLTool ? [REPLTool] : []),
|
||||
...(() => { const w = getWorkflowTool(); return w ? [w] : [] })(),
|
||||
...(WorkflowTool ? [WorkflowTool] : []),
|
||||
...(SleepTool ? [SleepTool] : []),
|
||||
...cronTools,
|
||||
...(RemoteTriggerTool ? [RemoteTriggerTool] : []),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user