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 и dedupFileStates расширена: LockFile/UnlockFile (ленивый per-file mutex) в write_file и edit_file. Dedup cache GetDedup/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.gorunStreamingTool() для потоковых инструментов.