claude-code-best/src/hooks
IronRookieCoder 28f2e3a6ac fix(agent-team): handle idle teammate coordination failures
## Bug 详情
Agent Team 在 CoStrict 环境下可能出现子代理无法执行、完成后主代理持续 Idle、shutdown 后 TeamDelete 被阻塞,以及 TeamCreate 参数错误时抛出 name.replace 深层异常。

## 根因
- Team teammate 默认模型路径未复用普通 subagent 的 CoStrict 继承逻辑,未配置 teammateDefaultModel 时会回退到 CoStrict 不可用的 claude-opus-4-6。
- in-process teammate 的 AsyncLocalStorage 上下文可能影响 team lead 的 inbox polling 身份判断。
- SendMessage 收到字符串形式的 shutdown_response JSON 时按普通消息转发,未进入 shutdown approval 分支。
- ExecuteExtraTool 调用 deferred tool 前未执行目标工具 validateInput,错误参数会绕过入口校验进入目标工具内部。

## 修复方案
- 将 teammate 模型解析集中到 teammateModel,并在 CoStrict 默认场景继承 leader model。
- 抽出 inbox poller 身份判断,基于 AppState 识别 team lead polling。
- 兼容字符串 JSON 协议响应,将 shutdown_response / plan_approval_response 路由到结构化处理逻辑。
- ExecuteExtraTool 在权限检查和实际执行前调用目标工具 validateInput。

## 变更要点
- 新增 teammate 模型解析和 CoStrict 继承测试。
- 新增 inbox poller identity helper 和 in-process 上下文回归测试。
- 新增 SendMessage 字符串 shutdown_response 回归测试。
- 新增 ExecuteExtraTool 目标工具校验回归测试。

## 自测
- bun test packages/builtin-tools/src/tools/ExecuteTool/__tests__/ExecuteTool.test.ts
- bun test packages/builtin-tools/src/tools/SendMessageTool/__tests__/udsRecipientSanitization.test.ts src/utils/swarm/__tests__/teammateModel.test.ts src/hooks/__tests__/useInboxPoller.test.ts
- bunx biome check 相关变更文件
- 变更文件相关 tsc 过滤检查无输出
2026-05-14 14:50:30 +08:00
..
__tests__ fix(agent-team): handle idle teammate coordination failures 2026-05-14 14:50:30 +08:00
notifs chore: 合并社区 upstream/main 代码至 v2.4.2 2026-05-12 11:55:04 +08:00
toolPermission style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
fileSuggestions.ts chore: 清理 src 下 33 项死代码和类型断言 2026-05-05 16:07:30 +08:00
inboxPollerIdentity.ts fix(agent-team): handle idle teammate coordination failures 2026-05-14 14:50:30 +08:00
renderPlaceholder.ts fix: resolve dependency audit findings precisely (#361) 2026-04-26 19:49:54 +08:00
unifiedSuggestions.ts feat: 工具层及 mcp 大重构 (#252) 2026-04-13 09:52:05 +08:00
useAfterFirstRender.ts feat: build 2026-03-31 19:22:47 +08:00
useApiKeyVerification.ts feat: build 2026-03-31 19:22:47 +08:00
useArrowKeyHistory.tsx chore: 清理 src 下 113 项未使用导入和死代码 2026-05-05 20:05:15 +08:00
useAssistantHistory.ts Revert "Revert "feat: 第一个可以用的 ink 组件抽象 (#158)" (#175)" 2026-04-07 16:17:48 +08:00
useAwaySummary.ts Feat/integrate lint preview (#285) 2026-04-16 20:59:29 +08:00
useBackgroundAgentTasks.ts Merge pull request #416 from znygugeyx-ctrl/feat/subagent-fork-render 2026-05-06 09:57:52 +08:00
useBackgroundTaskNavigation.ts feat: 远程群控 (#243) 2026-04-11 23:22:55 +08:00
useBlink.ts style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
useCancelRequest.ts feat: build 2026-03-31 19:22:47 +08:00
useCanUseTool.tsx style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
useChromeExtensionNotification.tsx chore: 清理 src 下 113 项未使用导入和死代码 2026-05-05 20:05:15 +08:00
useClaudeCodeHintRecommendation.tsx style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
useClipboardImageHint.ts feat: build 2026-03-31 19:22:47 +08:00
useCommandKeybindings.tsx style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
useCommandQueue.ts feat: build 2026-03-31 19:22:47 +08:00
useCopyOnSelect.ts Revert "Revert "feat: 第一个可以用的 ink 组件抽象 (#158)" (#175)" 2026-04-07 16:17:48 +08:00
useDeferredHookMessages.ts feat: build 2026-03-31 19:22:47 +08:00
useDiffData.ts feat: build 2026-03-31 19:22:47 +08:00
useDiffInIDE.ts merge: sync upstream claude-code-best/claude-code main (dad3ad2) 2026-04-14 11:18:05 +08:00
useDirectConnect.ts style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
useDoublePress.ts refactor: 大规模迁移原有组件到 ink 包内 2026-04-07 22:26:45 +08:00
useDynamicConfig.ts feat: build 2026-03-31 19:22:47 +08:00
useElapsedTime.ts feat: build 2026-03-31 19:22:47 +08:00
useExitOnCtrlCD.ts Revert "Revert "feat: 第一个可以用的 ink 组件抽象 (#158)" (#175)" 2026-04-07 16:17:48 +08:00
useExitOnCtrlCDWithKeybindings.ts feat: build 2026-03-31 19:22:47 +08:00
useFileHistorySnapshotInit.ts feat: build 2026-03-31 19:22:47 +08:00
useGlobalKeybindings.tsx fix: 修复条件式 hook 调用导致的 "Rendered fewer hooks than expected" 错误 2026-05-08 13:17:25 +08:00
useHistorySearch.ts Revert "Revert "feat: 第一个可以用的 ink 组件抽象 (#158)" (#175)" 2026-04-07 16:17:48 +08:00
useIdeAtMentioned.ts feat: build 2026-03-31 19:22:47 +08:00
useIdeConnectionStatus.ts feat: build 2026-03-31 19:22:47 +08:00
useIDEIntegration.tsx style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
useIdeLogging.ts feat: build 2026-03-31 19:22:47 +08:00
useIdeSelection.ts feat: build 2026-03-31 19:22:47 +08:00
useInboxPoller.ts fix(agent-team): handle idle teammate coordination failures 2026-05-14 14:50:30 +08:00
useInputBuffer.ts feat: build 2026-03-31 19:22:47 +08:00
useIssueFlagBanner.ts chore: 合并社区 upstream/main 代码至 v2.4.2 2026-05-12 11:55:04 +08:00
useLogMessages.ts feat: build 2026-03-31 19:22:47 +08:00
useLspPluginRecommendation.tsx style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
useMailboxBridge.ts feat: build 2026-03-31 19:22:47 +08:00
useMainLoopModel.ts feat: build 2026-03-31 19:22:47 +08:00
useManagePlugins.ts style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
useMasterMonitor.ts style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
useMemoryUsage.ts feat: build 2026-03-31 19:22:47 +08:00
useMergedClients.ts feat: build 2026-03-31 19:22:47 +08:00
useMergedCommands.ts feat: build 2026-03-31 19:22:47 +08:00
useMergedTools.ts chore: 清理 src 下 113 项未使用导入和死代码 2026-05-05 20:05:15 +08:00
useMinDisplayTime.ts refactor: 大规模迁移原有组件到 ink 包内 2026-04-07 22:26:45 +08:00
useNotifyAfterTimeout.ts Revert "Revert "feat: 第一个可以用的 ink 组件抽象 (#158)" (#175)" 2026-04-07 16:17:48 +08:00
useOfficialMarketplaceNotification.tsx chore: 清理 src 下 113 项未使用导入和死代码 2026-05-05 20:05:15 +08:00
usePasteHandler.ts Revert "Revert "feat: 第一个可以用的 ink 组件抽象 (#158)" (#175)" 2026-04-07 16:17:48 +08:00
usePipeIpc.ts style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
usePipeMuteSync.ts style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
usePipePermissionForward.ts Feat/integrate lint preview (#285) 2026-04-16 20:59:29 +08:00
usePipeRelay.ts style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
usePipeRouter.ts feat: 远程群控 (#243) 2026-04-11 23:22:55 +08:00
usePluginRecommendationBase.tsx style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
usePromptsFromClaudeInChrome.tsx style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
usePromptSuggestion.ts Revert "Revert "feat: 第一个可以用的 ink 组件抽象 (#158)" (#175)" 2026-04-07 16:17:48 +08:00
usePrStatus.ts feat: build 2026-03-31 19:22:47 +08:00
useQueueProcessor.ts feat: build 2026-03-31 19:22:47 +08:00
useRemoteSession.ts style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
useReplBridge.tsx docs: 添加 ToolSearch 设计指南 + 禁用 turn-zero 工具推荐弹窗 2026-05-09 16:45:56 +08:00
useScheduledTasks.ts style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
useSearchExtraToolsHint.ts docs: 添加 ToolSearch 设计指南 + 禁用 turn-zero 工具推荐弹窗 2026-05-09 16:45:56 +08:00
useSearchInput.ts Revert "Revert "feat: 第一个可以用的 ink 组件抽象 (#158)" (#175)" 2026-04-07 16:17:48 +08:00
useSessionBackgrounding.ts feat: build 2026-03-31 19:22:47 +08:00
useSettings.ts feat: build 2026-03-31 19:22:47 +08:00
useSettingsChange.ts feat: build 2026-03-31 19:22:47 +08:00
useSkillImprovementSurvey.ts feat: build 2026-03-31 19:22:47 +08:00
useSkillsChange.ts feat: build 2026-03-31 19:22:47 +08:00
useSlaveNotifications.ts feat: 远程群控 (#243) 2026-04-11 23:22:55 +08:00
useSSHSession.ts chore: 清理 src 下 113 项未使用导入和死代码 2026-05-05 20:05:15 +08:00
useSwarmInitialization.ts feat: build 2026-03-31 19:22:47 +08:00
useSwarmPermissionPoller.ts feat: build 2026-03-31 19:22:47 +08:00
useTaskListWatcher.ts feat: build 2026-03-31 19:22:47 +08:00
useTasksV2.ts feat: build 2026-03-31 19:22:47 +08:00
useTeammateViewAutoExit.ts feat: build 2026-03-31 19:22:47 +08:00
useTeleportResume.tsx style: 完成所有文件的lint 2026-05-01 21:39:30 +08:00
useTerminalSize.ts refactor: 大规模迁移原有组件到 ink 包内 2026-04-07 22:26:45 +08:00
useTextInput.ts feat: 添加服务层增强与零散改进 2026-04-22 22:38:10 +08:00
useTimeout.ts refactor: 大规模迁移原有组件到 ink 包内 2026-04-07 22:26:45 +08:00
useTurnDiffs.ts feat: 工具层及 mcp 大重构 (#252) 2026-04-13 09:52:05 +08:00
useTypeahead.tsx chore: 清理 src 下 113 项未使用导入和死代码 2026-05-05 20:05:15 +08:00
useUpdateNotification.ts fix: 修复条件式 hook 调用导致的 "Rendered fewer hooks than expected" 错误 2026-05-08 13:17:25 +08:00
useVimInput.ts Revert "Revert "feat: 第一个可以用的 ink 组件抽象 (#158)" (#175)" 2026-04-07 16:17:48 +08:00
useVirtualScroll.ts docs: 合并性能分析报告并优化内存管理 2026-05-02 09:11:12 +08:00
useVoice.ts chore: 合并社区 upstream/main 代码至 v2.4.2 2026-05-12 11:55:04 +08:00
useVoiceEnabled.ts feat: 集成豆包 ASR 语音识别后端,支持 /voice doubao 切换 (#357) 2026-04-25 13:57:30 +08:00
useVoiceIntegration.tsx fix: 修复条件式 hook 调用导致的 "Rendered fewer hooks than expected" 错误 2026-05-08 13:17:25 +08:00