0.30.0
Added
- P2-T5: Cancellation discipline — кооперативная отмена через
ctx.Done()вgrep.go(collectFiles каждые 128 файлов, grepFile каждые 512 строк) иglob.go(WalkDir каждые 128 файлов →filepath.SkipAll). - P2-T4: Tool versioning — опциональный интерфейс
VersionedToolс методомVersion() string. Registry добавляетx-versionв JSON schema.Version()добавлен ко всем 20+ builtin tools (версия"1.0.0"). - P2-T7: MCP tool concurrency safety — поле
ConcurrencySafe *boolвMCPServerPerms(per-agent override).MCPToolWrapper.ConcurrencySafe()использует override илиReadOnlyHintиз MCP annotations. - P2-T6: Per-file mutex и dedup —
FileStatesрасширена:LockFile/UnlockFile(ленивый per-file mutex) вwrite_fileиedit_file. Dedup cacheGetDedup/SetDedupна основе SHA256(tool+params). - P2-T2: Skills FS↔DB синхронизация —
SkillWatcherнаfsnotify: отслеживает измененияAGENTS.md/config.jsonв skills-директориях, debounce 500ms, upsert в БД. Startup sync (SyncAll). Интеграция в main.go с graceful shutdown. Новая зависимостьgithub.com/fsnotify/fsnotify. - P2-T3: StreamingTool interface — интерфейс
StreamingToolсExecuteStream(ctx, params) <-chan ToolStreamEvent(partial/result/error).AgentHook.OnToolProgress(callID, partial)— прогресс через шину bus.exec.go— стриминг stdout/stderr по строкам.web_fetch.go— progress-сообщение при загрузке.runner.go→runStreamingTool()для потоковых инструментов.