Repository navigation
v1.5.1 — H2 & Verification Pipeline(breaking change!)
Release Notes
What's New
Session → Task: Concept Rename (Breaking API Change)
The entire API has been migrated from "session" to "task" terminology across 84 files:
| Before | After |
|---|---|
SessionContext |
TaskContext |
SessionTransactionManager |
TaskTransactionManager |
SessionLineAccessTracker |
TaskLineAccessTracker |
SessionSearchTracker |
TaskSearchTracker |
SessionTool (session package) |
TaskTool (task package) |
TaskTool (system package) |
ProcessTool (system package) |
nts_session |
nts_task |
sessionId |
taskId |
Why: "Task" better reflects the isolated unit of work with its own undo history, checkpoints, and token registry.
H2 Database Persistence
Transaction journal storage migrated from JSON files to embedded H2 database:
JournalDatabase— connection pool and schema managementJournalRepository— CRUD operations for journal entries- Survives server restarts with full transaction history
- Eliminates JSON serialization overhead and file corruption risks
SmartUndoEngine: In-Memory Snapshots
Undo engine migrated from file-based backups (Map<Path,Path>) to in-memory byte[] snapshots (Map<Path,byte[]>):
- Faster undo/redo operations (no disk I/O for snapshots)
- Reduced temporary file clutter
- File lineage tracking preserved for move/rename recovery
New Tool: nts_verify — Multi-Level Validation
Verification tool with three levels of code correctness checking:
| Action | Description |
|---|---|
syntax |
Fast tree-sitter AST check (no build needed) |
compile |
Run gradlew build -x test for compilation |
test |
Run gradlew test for full test validation |
Powered by SyntaxChecker — tree-sitter based AST parsing for instant syntax validation.
New Tool: nts_workspace_status — Context Recovery
Compact workspace summary for agent re-orientation after context compression:
- Current task ID and stats
- TODO progress (if active)
- Recently modified files
- Recent journal entries (last 5 operations)
- Suggested next action
New Tool: nts_process — Background Process Management
Monitor and control long-running background processes:
| Action | Description |
|---|---|
log |
Retrieve output from async process |
kill |
Terminate running process |
Works with nts_gradle_task and nts_git async operations.
EditFileTool: Auto Syntax Verification
After every edit, the tool automatically runs tree-sitter syntax check on the modified file. If syntax errors are detected, the response includes a warning with error details — agent catches mistakes immediately without a separate verification step.
LineAccessTracker: File CRC Token Invalidation
Tokens now track file CRC (fileCrc) in addition to range CRC:
registerAccess()requires mandatoryfileCrcparameter- External file changes invalidate tokens even if the edited range hasn't changed
- Per-symbol tokens in
CodeNavigateToolfor precise invalidation
EncodingUtils: ICU4J Multi-Level Detection
Encoding detection migrated from basic charset detection to ICU4J with multi-level strategy:
- BOM detection (UTF-8/16/32)
- ICU4J
CharsetDetectorwith confidence scoring - Fallback to system default
Handles CRLF normalization, Unicode BOM stripping, and charset-aware text comparison.
TodoTool Enhancements
- New actions:
itemsandall_itemsfor structured JSON responses - FOCUS hint — reminds agent of the current active task
- Verify reminder — prompts to verify after completing edits
- Role-aware suggestions — different tips for different agent roles
GradleTool: Project Initialization
initaction — generate Gradle wrapper for new projects- System Gradle fallback when wrapper not present
- Improved error messages with actionable suggestions
TipFilter: Role-Aware Filtering
Smart contextual tips now filtered based on agent role via ntsAllowedTools:
- Workers see execution-focused tips
- Architects see planning tips
- Scouts see exploration tips
API Consistency Improvements
isInternal()method onMcpTool— marks tools hidden from externaltools/listincludeInternalparameter inlistTools— allows orchestrator to see all toolsntsAllowedToolsmetadata — restricts which tools are visible per agent role- Lazy Root Refresh in
PathSanitizer— retries root resolution on access denial ObjectMapper→JsonMapper.builder()inMcpIntegrator
NtsErrorCode: Placeholder Interpolation
Error messages now support %placeholder% interpolation:
TOKEN_EXPIRED: "Token expired for %path%. File was modified externally."
Placeholders are resolved at error creation time with actual values.
Search Improvements
- BOM-aware text search — handles files with byte order marks
- CRLF-normalized comparison — consistent matching across line endings
- Unicode Boyer-Moore-Horspool — optimized for multi-byte characters
- Encoding-aware
containsText— correct matching regardless of file encoding
PathSanitizer: Lazy Root Refresh
When a path access is denied, the sanitizer now retries with refreshed roots before failing — handles cases where roots are updated after server startup.
FileReadTool: Directory Validation
executeRead and executeInfo now validate that the path is a file, not a directory, before attempting to read — prevents confusing error messages.
BatchToolsTool: Copy Path Fix
Fixed path resolution for copy action in nts_file_manage — the destination path is now correctly resolved in batch variable interpolation.
Documentation Updates
README.md
Both English and Russian sections updated:
- Tool count badge: 15 → 17
- Server name:
NTS-FileSystem→NTS-FileSystem-MCPin all config examples - New tools documented:
nts_verify,nts_workspace_status,nts_process - Refactoring operations: 6 → 10 (added Extract Variable, Wrap, Move, Delete, Batch)
- Client integrations: 7 clients (Gemini CLI, Claude Code, Qwen CLI, Cursor, LM Studio, Antigravity, Copilot VS Code)
- Session → Task terminology migration
- H2 Database persistence documentation
- In-memory snapshots for undo engine
MCP_LOG_FILEenvironment variable for Docker- Discipline loop diagrams updated with Verify and Workspace Status
Breaking Changes
API Migration: Session → Task
| Change | Impact |
|---|---|
sessionId → taskId |
All nts_init calls must use taskId parameter |
nts_session → nts_task |
Tool name changed |
SessionTool → TaskTool |
Package moved from session to task |
TaskTool (old, system) → ProcessTool |
Background process tool renamed to avoid collision |
Migration: Replace sessionId with taskId in all client configurations and API calls.
H2 Database Replaces JSON Journal
- Old
journal.jsonfiles are not auto-migrated - New tasks use H2 storage automatically
- Existing task directories with
journal.jsonwill start with clean journal state
Upgrade Notes
- Update client integrations to use
taskIdinstead ofsessionId - The server name in MCP configs is now
NTS-FileSystem-MCP - Old JSON journal files can be safely deleted after upgrading
- No changes to Docker configuration required
Stats
| Metric | Value |
|---|---|
| Commits in release | 19 |
| Files changed | 89 |
| Lines added | +7,148 |
| Lines removed | -3,007 |
| Net change | +4,141 |
Примечания к релизу (RU)
Новые возможности
Session → Task: Переименование концепции (Ломающее изменение API)
Весь API мигрирован с терминологии «сессия» на «задача» в 84 файлах:
| Было | Стало |
|---|---|
SessionContext |
TaskContext |
SessionTransactionManager |
TaskTransactionManager |
SessionLineAccessTracker |
TaskLineAccessTracker |
SessionSearchTracker |
TaskSearchTracker |
SessionTool (пакет session) |
TaskTool (пакет task) |
TaskTool (пакет system) |
ProcessTool (пакет system) |
nts_session |
nts_task |
sessionId |
taskId |
Зачем: «Задача» точнее отражает изолированную единицу работы с собственной историей undo, чекпоинтами и реестром токенов.
Персистентность на H2 Database
Хранилище журнала транзакций мигрировано с JSON-файлов на встроенную H2 базу данных:
JournalDatabase— пул соединений и управление схемойJournalRepository— CRUD-операции для записей журнала- Переживает перезапуски сервера с полной историей транзакций
- Устраняет накладные расходы JSON-сериализации и риски повреждения файлов
SmartUndoEngine: In-Memory снапшоты
Движок отката мигрирован с файловых бэкапов (Map<Path,Path>) на in-memory byte[] снапшоты (Map<Path,byte[]>):
- Быстрые операции undo/redo (без дискового I/O для снапшотов)
- Меньше временных файлов
- Отслеживание родословной файлов для восстановления после move/rename сохранено
Новый инструмент: nts_verify — Многоуровневая валидация
Инструмент верификации с тремя уровнями проверки корректности кода:
| Действие | Описание |
|---|---|
syntax |
Быстрая проверка AST через tree-sitter (без сборки) |
compile |
Запуск gradlew build -x test для проверки компиляции |
test |
Запуск gradlew test для полной проверки тестами |
Работает на основе SyntaxChecker — парсинг AST через tree-sitter для мгновенной валидации синтаксиса.
Новый инструмент: nts_workspace_status — Восстановление контекста
Компактная сводка рабочего пространства для переориентации агента после сжатия контекста:
- ID текущей задачи и статистика
- Прогресс TODO (если активен)
- Недавно изменённые файлы
- Последние записи журнала (5 операций)
- Предложение следующего действия
Новый инструмент: nts_process — Управление фоновыми процессами
Мониторинг и управление долгими фоновыми процессами:
| Действие | Описание |
|---|---|
log |
Получить вывод асинхронного процесса |
kill |
Остановить работающий процесс |
Работает с асинхронными операциями nts_gradle_task и nts_git.
EditFileTool: Автоматическая проверка синтаксиса
После каждой правки инструмент автоматически запускает проверку синтаксиса через tree-sitter. Если обнаружены ошибки синтаксиса, ответ включает предупреждение с деталями — агент ловит ошибки мгновенно без отдельного шага верификации.
LineAccessTracker: Инвалидация токенов по CRC файла
Токены теперь отслеживают CRC файла (fileCrc) в дополнение к CRC диапазона:
registerAccess()требует обязательный параметрfileCrc- Внешние изменения файла инвалидируют токены, даже если изменённый диапазон не затронут
- Per-symbol токены в
CodeNavigateToolдля точной инвалидации
EncodingUtils: ICU4J многоуровневая детекция
Определение кодировки мигрировано на ICU4J с многоуровневой стратегией:
- Детекция BOM (UTF-8/16/32)
- ICU4J
CharsetDetectorс оценкой уверенности - Fallback на системную кодировку по умолчанию
Обработка нормализации CRLF, удаления Unicode BOM, сравнения текста с учётом кодировки.
Улучшения TodoTool
- Новые действия:
itemsиall_itemsдля структурированных JSON-ответов - FOCUS hint — напоминает агенту о текущей активной задаче
- Verify reminder — предлагает проверить после завершения правок
- Role-aware подсказки — разные советы для разных ролей агентов
GradleTool: Инициализация проектов
- Действие
init— генерация Gradle wrapper для новых проектов - Fallback на системный Gradle при отсутствии wrapper
- Улучшенные сообщения об ошибках с предложениями действий
TipFilter: Role-aware фильтрация
Умные контекстные подсказки теперь фильтруются на основе роли агента через ntsAllowedTools:
- Workers видят подсказки по выполнению
- Architects видят подсказки по планированию
- Scouts видят подсказки по исследованию
Консистентность API
- Метод
isInternal()вMcpTool— скрывает инструменты из внешнегоtools/list - Параметр
includeInternalвlistTools— позволяет оркестратору видеть все инструменты - Метаданные
ntsAllowedTools— ограничивает видимость инструментов по роли агента - Ленивое обновление Roots в
PathSanitizer— повторная попытка при отказе в доступе ObjectMapper→JsonMapper.builder()вMcpIntegrator
NtsErrorCode: Интерполяция плейсхолдеров
Сообщения об ошибках теперь поддерживают интерполяцию %placeholder%:
TOKEN_EXPIRED: "Token expired for %path%. File was modified externally."
Плейсхолдеры подставляются при создании ошибки с реальными значениями.
Улучшения поиска
- Поиск с учётом BOM — корректная обработка файлов с byte order mark
- Нормализация CRLF — единообразное совпадение вне зависимости от окончаний строк
- Unicode Boyer-Moore-Horspool — оптимизация для многобайтовых символов
containsTextс учётом кодировки — корректное совпадение независимо от кодировки файла
PathSanitizer: Ленивое обновление Roots
При отказе в доступе к пути sanitizer теперь обновляет roots и повторяет попытку — обрабатывает случаи, когда roots обновлены после старта сервера.
FileReadTool: Валидация директорий
executeRead и executeInfo теперь проверяют, что путь указывает на файл, а не директорию — предотвращает непонятные сообщения об ошибках.
BatchToolsTool: Исправление пути копирования
Исправлено разрешение path для действия copy в nts_file_manage — путь назначения теперь корректно подставляется при интерполяции переменных батча.
Обновления документации
README.md
Обе версии (EN и RU) обновлены:
- Бейдж инструментов: 15 → 17
- Имя сервера:
NTS-FileSystem→NTS-FileSystem-MCPво всех конфигурациях - Документированы новые инструменты:
nts_verify,nts_workspace_status,nts_process - Операции рефакторинга: 6 → 10 (добавлены Extract Variable, Wrap, Move, Delete, Batch)
- Интеграция клиентов: 7 клиентов (Gemini CLI, Claude Code, Qwen CLI, Cursor, LM Studio, Antigravity, Copilot VS Code)
- Миграция терминологии Session → Task
- Документация персистентности H2 Database
- In-memory снапшоты для движка отката
- Переменная окружения
MCP_LOG_FILEдля Docker - Диаграммы цикла дисциплины обновлены с Verify и Workspace Status
Ломающие изменения
Миграция API: Session → Task
| Изменение | Влияние |
|---|---|
sessionId → taskId |
Все вызовы nts_init должны использовать параметр taskId |
nts_session → nts_task |
Имя инструмента изменено |
SessionTool → TaskTool |
Пакет перемещён из session в task |
TaskTool (старый, system) → ProcessTool |
Инструмент фоновых процессов переименован во избежание коллизии |
Миграция: Замените sessionId на taskId во всех клиентских конфигурациях и API-вызовах.
H2 Database заменяет JSON-журнал
- Старые файлы
journal.jsonне мигрируются автоматически - Новые задачи используют H2 хранилище автоматически
- Существующие директории задач с
journal.jsonначнут с чистого состояния журнала
Примечания по обновлению
- Обновите клиентские интеграции — используйте
taskIdвместоsessionId - Имя сервера в MCP-конфигурациях теперь
NTS-FileSystem-MCP - Старые JSON-файлы журнала можно безопасно удалить после обновления
- Изменения в Docker-конфигурации не требуются
Статистика
| Метрика | Значение |
|---|---|
| Коммитов в релизе | 19 |
| Файлов изменено | 89 |
| Строк добавлено | +7 148 |
| Строк удалено | -3 007 |
| Нетто-изменение | +4 141 |