@@ -485,6 +485,32 @@ complete=HANG)
485485- MergePolicy: бан живёт в одной политике (hasBan per-policy), блокирует весь
486486 вход, unban именно этой политики восстанавливает.
487487
488+ ## 23-й заход: исключение на дубль tool_call id + конфигурируемые таймеры (+4 теста)
489+
490+ ### Изменения поведения (по требованию)
491+ 1 . Дубликат tool_call id от модели теперь КИДАЕТ ИСКЛЮЧЕНИЕ (раньше оба вызова
492+ молча выполнялись). ` src/client/ClientAgent.ts ` : проверка уникальности id
493+ после нормализации, до среза maxToolCalls; ошибка доставляется через
494+ errorSubject + флоу восстанавливается placeholder'ом (не виснет).
495+ ` src/functions/target/session.ts ` : session.complete подписан на errorSubject
496+ (раньше только execute/executeForce/runStateless* /chat/json) — теперь
497+ session.complete реджектится и на дубль id, и на ошибки провайдера.
498+ 2 . Таймеры вынесены в GLOBAL_CONFIG (тестируемость через setConfig в воркере):
499+ - CC_OPERATOR_SIGNAL_TIMEOUT (было константой 90_000 в ClientOperator);
500+ - CC_CHAT_INACTIVITY_CHECK (было 60с в Chat.ts);
501+ - CC_CHAT_INACTIVITY_TIMEOUT (было 15мин в Chat.ts).
502+ Дефолты не изменены. Файлы: config/params.ts, model/GlobalConfig.model.ts,
503+ client/ClientOperator.ts, classes/Chat.ts.
504+
505+ ### Новые тесты (4), сьют вырос до 246/246 — test/spec/modelguard.test.mjs
506+ - дубль tool_call id → session.complete реджектится ("duplicate tool call id"),
507+ ни один из вызовов не выполнен, сессия остаётся рабочей;
508+ - дубль tool_call id → execute() тоже кидает;
509+ - операторский таймаут: оператор молчит → complete возвращает "" через
510+ ~ CC_OPERATOR_SIGNAL_TIMEOUT (300мс в тесте);
511+ - Chat: простаивающий чат авто-диспоузится по CC_CHAT_INACTIVITY_TIMEOUT
512+ (onDispose колбэк, hasSession=false).
513+
488514## Найденные и исправленные баги (24 итого)
489515
490516### 1. Дедлок waitForOutput при functools-kit v4 (причина 39 упавших тестов)
0 commit comments