9afa877e390bc8456540a7dd3db24b30aa9cc500
Тулзы были написаны ранее (SkillSaveTool/SkillDeleteTool, SkillToolsFactory), но не были подключены к ChatAgent. Этот коммит закрывает пробел: * ChatAgent: новый параметр skillStore: SkillStore? = null. Когда задан — в allTools добавляются SkillToolsFactory.create(skillStore) → агенту доступны skill_save и skill_delete (помимо read_skill который всегда есть при непустом каталоге). * Main.kt: если config.skillsDir задан — создаём DiskSkillStore(File(dir)) и скармливаем агенту. Каталог используется и для чтения (SkillCatalog), и для записи (DiskSkillStore.upsert/remove) — одни и те же файлы, никаких рассинхронов между read_skill и skill_save. * SkillLoader.loadDirectory больше не нужен в Main — DiskSkillStore сам подгружает каталог в init. Удалён старый импорт. * Тесты SkillToolsTest (5): SkillSaveTool persists file and surfaces in catalog; rejects blank name; SkillDeleteTool archives (rename to .archived); errors on missing skill; colon-named skills map to nested dirs (backend:spring:db-base → backend/spring/db-base/SKILL.md). * README: раздел "Навыки" расширен описанием трёх тулов (read_skill / skill_save / skill_delete). Smoke: standalone запускается с пустым AGENTIK_SKILLS_DIR, видит "skills: 0 loaded from /tmp/skills-smoke" (DiskSkillStore создаёт каталог при отсутствии). Агент при наличии skillStore имеет в своём распоряжении все три тула для self-improvement'а. Теперь Phase 3 (skill self-improvement) реально работает end-to-end: агент может дёрнуть skill_save когда понимает что задача повторяется, потом в следующих диалогах использовать новый скил через read_skill. Tests: 160 standalone JVM (+5), 241 всего JVM, 73 native, all green.
Description