Repository navigation
v1.2.0 — AST Support
Release Notes
What's New
Batch Integration for nts_code_refactor
Refactoring operations now return access tokens for all modified files, enabling seamless chaining with other tools in nts_batch_tools:
{
"affectedFiles": [
{ "path": "src/User.java", "accessToken": "LAT:...", "crc32c": "A1B2C3D4", "lineCount": 50 },
{ "path": "src/UserService.java", "accessToken": "LAT:...", "crc32c": "E5F6G7H8", "lineCount": 120 }
],
"token": "LAT:..." // shortcut when single file affected
}Batch example:
{
"actions": [
{"id": "ref", "tool": "nts_code_refactor", "params": {"action": "rename", "path": "User.java", "symbol": "getName", "newName": "getFullName"}},
{"tool": "nts_edit_file", "params": {"path": "{{ref.affectedFiles[0].path}}", "accessToken": "{{ref.affectedFiles[0].accessToken}}", ...}}
]
}Path Aliasing for Token Persistence
Tokens now remain valid after move/rename operations through transitive path resolution:
A.java → B.java → C.java
↓
Token from A.java still valid for C.java!
This eliminates the need to re-read files after renaming them within or outside of batch transactions.
Change Signature Refactoring
New change_signature action for modifying method parameters with automatic call site updates:
{
"action": "change_signature",
"path": "UserService.java",
"symbol": "createUser",
"params": [
{"name": "email", "type": "String", "action": "add", "defaultValue": "null"},
{"name": "oldParam", "action": "remove"},
{"name": "name", "newName": "fullName", "action": "rename"},
{"name": "age", "type": "long", "action": "retype"}
]
}Symbol Extraction Architecture
Decomposed SymbolExtractor into 12 language-specific extractors:
- Java, Kotlin, Python, JavaScript/TypeScript/TSX
- Go, Rust, C/C++, C#, PHP, HTML
New utilities in SymbolExtractorUtils:
extractMethodParameters()- parameter extraction with varargs, defaults, annotationsextractMethodCalls()- call site analysis with argument positionsextractVariableReferences()- variable usage analysisextractMethodBody()- body extraction for inline/extract operations
SymbolIndex for Fast Lookup
New SymbolIndex class for project-wide symbol indexing:
- Incremental updates on file changes
- Cross-file symbol resolution
- O(1) definition lookup
Bug Fixes
CRC Mismatch in Batch Operations (Critical)
Problem: Tokens from nts_code_refactor failed validation in subsequent nts_edit_file calls with CRC mismatch errors.
Root cause: Inconsistent CRC calculation - FileReadTool/EditFileTool included line numbers in content, while refactoring used raw content.
Fix: Unified CRC calculation using raw content (without line numbers) across all tools.
Off-by-One Error in Single Line Delete
Problem: nts_edit_file delete operation failed when deleting a single line with error "endLine (6) must be >= startLine (7)".
Root cause: SessionLineAccessTracker.updateAfterEdit() calculated newEditEnd = editEnd + lineDelta, resulting in invalid range for single-line deletes.
Fix: Math.max(editStart, editEnd + lineDelta) ensures valid range.
Session Cache Synchronization
Problem: After refactoring, subsequent tools saw stale file metadata causing validation failures.
Fix: All refactoring operations now call SessionContext.externalChanges().updateSnapshot() after writing files.
Documentation & Schema Updates
Tool Descriptions for LLM
Updated getDescription() in tools to document new features:
- CodeRefactorTool:
CHANGE_SIGNATUREusage,BATCH INTEGRATIONwithaffectedFiles - FileManageTool: Path aliasing with transitive chain example
- BatchToolsTool:
REFACTOR INTEGRATIONsection with interpolation examples
Input Schema
Added params array schema for change_signature:
params[]: {name, type, newName, defaultValue, action: add|remove|rename|retype|reorder}
README.md
Both English and Russian sections updated with:
- Batch integration examples with JSON responses
- Path aliasing documentation
- Change signature operation description
Test Coverage
+20 new tests, +6000 lines
ChangeSignatureComprehensiveTest- 18 scenarios for all parameter modificationsLineAccessTokenPathAliasTest- path aliasing unit testsPathAliasIntegrationTest- move + token integrationParameterExtractionTest- AST-based parameter extractionSymbolIndexTest- symbol indexing- Reorganized test packages to mirror main code structure
Breaking Changes
None. All changes are backward compatible.
Upgrade Notes
No action required. Existing tokens remain valid. New features are opt-in.
Примечания к релизу (RU)
Новые возможности
Интеграция nts_code_refactor с batch-операциями
Операции рефакторинга теперь возвращают токены доступа для всех изменённых файлов, что позволяет бесшовно связывать их с другими инструментами в nts_batch_tools:
{
"affectedFiles": [
{ "path": "src/User.java", "accessToken": "LAT:...", "crc32c": "A1B2C3D4", "lineCount": 50 },
{ "path": "src/UserService.java", "accessToken": "LAT:...", "crc32c": "E5F6G7H8", "lineCount": 120 }
],
"token": "LAT:..." // сокращение при изменении одного файла
}Пример batch-цепочки:
{
"actions": [
{"id": "ref", "tool": "nts_code_refactor", "params": {"action": "rename", "path": "User.java", "symbol": "getName", "newName": "getFullName"}},
{"tool": "nts_edit_file", "params": {"path": "{{ref.affectedFiles[0].path}}", "accessToken": "{{ref.affectedFiles[0].accessToken}}", ...}}
]
}Алиасинг путей для сохранения токенов
Токены остаются валидными после операций move/rename благодаря транзитивному разрешению путей:
A.java → B.java → C.java
↓
Токен от A.java работает для C.java!
Это устраняет необходимость повторного чтения файлов после их переименования.
Рефакторинг Change Signature
Новая операция change_signature для изменения параметров методов с автоматическим обновлением всех мест вызова:
{
"action": "change_signature",
"path": "UserService.java",
"symbol": "createUser",
"params": [
{"name": "email", "type": "String", "action": "add", "defaultValue": "null"},
{"name": "oldParam", "action": "remove"},
{"name": "name", "newName": "fullName", "action": "rename"},
{"name": "age", "type": "long", "action": "retype"}
]
}Архитектура извлечения символов
SymbolExtractor декомпозирован на 12 языковых экстракторов:
- Java, Kotlin, Python, JavaScript/TypeScript/TSX
- Go, Rust, C/C++, C#, PHP, HTML
Новые утилиты в SymbolExtractorUtils:
extractMethodParameters()- извлечение параметров с varargs, значениями по умолчанию, аннотациямиextractMethodCalls()- анализ мест вызова с позициями аргументовextractVariableReferences()- анализ использования переменныхextractMethodBody()- извлечение тела метода для inline/extract операций
SymbolIndex для быстрого поиска
Новый класс SymbolIndex для индексации символов проекта:
- Инкрементальные обновления при изменении файлов
- Разрешение символов между файлами
- O(1) поиск определений
Исправления ошибок
Несовпадение CRC в batch-операциях (Критично)
Проблема: Токены от nts_code_refactor не проходили валидацию в последующих вызовах nts_edit_file с ошибкой несовпадения CRC.
Причина: Несогласованность вычисления CRC - FileReadTool/EditFileTool включали номера строк в контент, а рефакторинг использовал чистый контент.
Решение: Унифицировано вычисление CRC с использованием чистого контента (без номеров строк) во всех инструментах.
Ошибка Off-by-One при удалении одной строки
Проблема: Операция delete в nts_edit_file падала при удалении одной строки с ошибкой "endLine (6) must be >= startLine (7)".
Причина: SessionLineAccessTracker.updateAfterEdit() вычислял newEditEnd = editEnd + lineDelta, что давало невалидный диапазон для удаления одной строки.
Решение: Math.max(editStart, editEnd + lineDelta) гарантирует валидный диапазон.
Синхронизация кеша сессии
Проблема: После рефакторинга последующие инструменты видели устаревшие метаданные файлов, что вызывало ошибки валидации.
Решение: Все операции рефакторинга теперь вызывают SessionContext.externalChanges().updateSnapshot() после записи файлов.
Обновления документации и схем
Описания инструментов для LLM
Обновлены getDescription() в инструментах для документирования новых возможностей:
- CodeRefactorTool: использование
CHANGE_SIGNATURE,BATCH INTEGRATIONсaffectedFiles - FileManageTool: алиасинг путей с примером транзитивной цепочки
- BatchToolsTool: раздел
REFACTOR INTEGRATIONс примерами интерполяции
Входная схема
Добавлена схема массива params для change_signature:
params[]: {name, type, newName, defaultValue, action: add|remove|rename|retype|reorder}
README.md
Обе версии (EN и RU) обновлены:
- Примеры batch-интеграции с JSON-ответами
- Документация алиасинга путей
- Описание операции change signature
Покрытие тестами
+20 новых тестов, +6000 строк
ChangeSignatureComprehensiveTest- 18 сценариев для всех модификаций параметровLineAccessTokenPathAliasTest- unit-тесты алиасинга путейPathAliasIntegrationTest- интеграция move + токеныParameterExtractionTest- извлечение параметров на основе ASTSymbolIndexTest- индексация символов- Реорганизация тестовых пакетов для соответствия структуре основного кода
Критические изменения
Нет. Все изменения обратно совместимы.
Примечания по обновлению
Действий не требуется. Существующие токены остаются валидными. Новые функции опциональны.