@vybestack/llxprt-code-tools 0.10.0-nightly.260613.1adad3b34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +294 -0
- package/dist/.last_build +0 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/src/__tests__/fixtures/filesystem-tool-fixtures.d.ts +29 -0
- package/dist/src/__tests__/fixtures/filesystem-tool-fixtures.js +30 -0
- package/dist/src/__tests__/fixtures/filesystem-tool-fixtures.js.map +1 -0
- package/dist/src/__tests__/fixtures/key-storage-fixtures.d.ts +39 -0
- package/dist/src/__tests__/fixtures/key-storage-fixtures.js +53 -0
- package/dist/src/__tests__/fixtures/key-storage-fixtures.js.map +1 -0
- package/dist/src/__tests__/fixtures/provider-formatting-fixtures.d.ts +140 -0
- package/dist/src/__tests__/fixtures/provider-formatting-fixtures.js +157 -0
- package/dist/src/__tests__/fixtures/provider-formatting-fixtures.js.map +1 -0
- package/dist/src/__tests__/red-test-helpers.d.ts +14 -0
- package/dist/src/__tests__/red-test-helpers.js +18 -0
- package/dist/src/__tests__/red-test-helpers.js.map +1 -0
- package/dist/src/formatters/IToolFormatter.d.ts +84 -0
- package/dist/src/formatters/IToolFormatter.js +6 -0
- package/dist/src/formatters/IToolFormatter.js.map +1 -0
- package/dist/src/formatters/ToolFormatter.d.ts +94 -0
- package/dist/src/formatters/ToolFormatter.js +379 -0
- package/dist/src/formatters/ToolFormatter.js.map +1 -0
- package/dist/src/formatters/ToolIdStrategy.d.ts +79 -0
- package/dist/src/formatters/ToolIdStrategy.js +173 -0
- package/dist/src/formatters/ToolIdStrategy.js.map +1 -0
- package/dist/src/formatters/doubleEscapeUtils.d.ts +46 -0
- package/dist/src/formatters/doubleEscapeUtils.js +223 -0
- package/dist/src/formatters/doubleEscapeUtils.js.map +1 -0
- package/dist/src/formatters/index.d.ts +21 -0
- package/dist/src/formatters/index.js +12 -0
- package/dist/src/formatters/index.js.map +1 -0
- package/dist/src/formatters/toolIdNormalization.d.ts +28 -0
- package/dist/src/formatters/toolIdNormalization.js +97 -0
- package/dist/src/formatters/toolIdNormalization.js.map +1 -0
- package/dist/src/formatters/toolNameUtils.d.ts +43 -0
- package/dist/src/formatters/toolNameUtils.js +143 -0
- package/dist/src/formatters/toolNameUtils.js.map +1 -0
- package/dist/src/index.d.ts +88 -0
- package/dist/src/index.js +68 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interfaces/IAsyncTaskService.d.ts +57 -0
- package/dist/src/interfaces/IAsyncTaskService.js +6 -0
- package/dist/src/interfaces/IAsyncTaskService.js.map +1 -0
- package/dist/src/interfaces/IIdeService.d.ts +62 -0
- package/dist/src/interfaces/IIdeService.js +6 -0
- package/dist/src/interfaces/IIdeService.js.map +1 -0
- package/dist/src/interfaces/ILspService.d.ts +54 -0
- package/dist/src/interfaces/ILspService.js +6 -0
- package/dist/src/interfaces/ILspService.js.map +1 -0
- package/dist/src/interfaces/IMcpToolService.d.ts +47 -0
- package/dist/src/interfaces/IMcpToolService.js +6 -0
- package/dist/src/interfaces/IMcpToolService.js.map +1 -0
- package/dist/src/interfaces/IPromptRegistryService.d.ts +51 -0
- package/dist/src/interfaces/IPromptRegistryService.js +6 -0
- package/dist/src/interfaces/IPromptRegistryService.js.map +1 -0
- package/dist/src/interfaces/ISettingsService.d.ts +50 -0
- package/dist/src/interfaces/ISettingsService.js +6 -0
- package/dist/src/interfaces/ISettingsService.js.map +1 -0
- package/dist/src/interfaces/IShellExecutionService.d.ts +55 -0
- package/dist/src/interfaces/IShellExecutionService.js +6 -0
- package/dist/src/interfaces/IShellExecutionService.js.map +1 -0
- package/dist/src/interfaces/IShellToolHost.d.ts +176 -0
- package/dist/src/interfaces/IShellToolHost.js +6 -0
- package/dist/src/interfaces/IShellToolHost.js.map +1 -0
- package/dist/src/interfaces/ISkillService.d.ts +69 -0
- package/dist/src/interfaces/ISkillService.js +6 -0
- package/dist/src/interfaces/ISkillService.js.map +1 -0
- package/dist/src/interfaces/IStorageService.d.ts +42 -0
- package/dist/src/interfaces/IStorageService.js +6 -0
- package/dist/src/interfaces/IStorageService.js.map +1 -0
- package/dist/src/interfaces/ISubagentService.d.ts +112 -0
- package/dist/src/interfaces/ISubagentService.js +6 -0
- package/dist/src/interfaces/ISubagentService.js.map +1 -0
- package/dist/src/interfaces/ITaskToolHost.d.ts +185 -0
- package/dist/src/interfaces/ITaskToolHost.js +6 -0
- package/dist/src/interfaces/ITaskToolHost.js.map +1 -0
- package/dist/src/interfaces/ITodoService.d.ts +79 -0
- package/dist/src/interfaces/ITodoService.js +6 -0
- package/dist/src/interfaces/ITodoService.js.map +1 -0
- package/dist/src/interfaces/IToolHost.d.ts +91 -0
- package/dist/src/interfaces/IToolHost.js +6 -0
- package/dist/src/interfaces/IToolHost.js.map +1 -0
- package/dist/src/interfaces/IToolKeyStorage.d.ts +62 -0
- package/dist/src/interfaces/IToolKeyStorage.js +6 -0
- package/dist/src/interfaces/IToolKeyStorage.js.map +1 -0
- package/dist/src/interfaces/IToolMessageBus.d.ts +63 -0
- package/dist/src/interfaces/IToolMessageBus.js +6 -0
- package/dist/src/interfaces/IToolMessageBus.js.map +1 -0
- package/dist/src/interfaces/IToolRegistryHost.d.ts +43 -0
- package/dist/src/interfaces/IToolRegistryHost.js +6 -0
- package/dist/src/interfaces/IToolRegistryHost.js.map +1 -0
- package/dist/src/interfaces/IWebSearchService.d.ts +16 -0
- package/dist/src/interfaces/IWebSearchService.js +7 -0
- package/dist/src/interfaces/IWebSearchService.js.map +1 -0
- package/dist/src/interfaces/index.d.ts +33 -0
- package/dist/src/interfaces/index.js +6 -0
- package/dist/src/interfaces/index.js.map +1 -0
- package/dist/src/tools/activate-skill.d.ts +26 -0
- package/dist/src/tools/activate-skill.js +121 -0
- package/dist/src/tools/activate-skill.js.map +1 -0
- package/dist/src/tools/apply-patch.d.ts +65 -0
- package/dist/src/tools/apply-patch.js +528 -0
- package/dist/src/tools/apply-patch.js.map +1 -0
- package/dist/src/tools/ast-edit/ast-config.d.ts +67 -0
- package/dist/src/tools/ast-edit/ast-config.js +72 -0
- package/dist/src/tools/ast-edit/ast-config.js.map +1 -0
- package/dist/src/tools/ast-edit/ast-edit-invocation.d.ts +40 -0
- package/dist/src/tools/ast-edit/ast-edit-invocation.js +410 -0
- package/dist/src/tools/ast-edit/ast-edit-invocation.js.map +1 -0
- package/dist/src/tools/ast-edit/ast-query-extractor.d.ts +21 -0
- package/dist/src/tools/ast-edit/ast-query-extractor.js +178 -0
- package/dist/src/tools/ast-edit/ast-query-extractor.js.map +1 -0
- package/dist/src/tools/ast-edit/ast-read-file-invocation.d.ts +26 -0
- package/dist/src/tools/ast-edit/ast-read-file-invocation.js +149 -0
- package/dist/src/tools/ast-edit/ast-read-file-invocation.js.map +1 -0
- package/dist/src/tools/ast-edit/constants.d.ts +30 -0
- package/dist/src/tools/ast-edit/constants.js +36 -0
- package/dist/src/tools/ast-edit/constants.js.map +1 -0
- package/dist/src/tools/ast-edit/context-collector.d.ts +25 -0
- package/dist/src/tools/ast-edit/context-collector.js +115 -0
- package/dist/src/tools/ast-edit/context-collector.js.map +1 -0
- package/dist/src/tools/ast-edit/context-optimizer.d.ts +29 -0
- package/dist/src/tools/ast-edit/context-optimizer.js +86 -0
- package/dist/src/tools/ast-edit/context-optimizer.js.map +1 -0
- package/dist/src/tools/ast-edit/cross-file-analyzer.d.ts +41 -0
- package/dist/src/tools/ast-edit/cross-file-analyzer.js +294 -0
- package/dist/src/tools/ast-edit/cross-file-analyzer.js.map +1 -0
- package/dist/src/tools/ast-edit/edit-calculator.d.ts +71 -0
- package/dist/src/tools/ast-edit/edit-calculator.js +249 -0
- package/dist/src/tools/ast-edit/edit-calculator.js.map +1 -0
- package/dist/src/tools/ast-edit/edit-helpers.d.ts +22 -0
- package/dist/src/tools/ast-edit/edit-helpers.js +36 -0
- package/dist/src/tools/ast-edit/edit-helpers.js.map +1 -0
- package/dist/src/tools/ast-edit/language-analysis.d.ts +19 -0
- package/dist/src/tools/ast-edit/language-analysis.js +123 -0
- package/dist/src/tools/ast-edit/language-analysis.js.map +1 -0
- package/dist/src/tools/ast-edit/local-context-analyzer.d.ts +84 -0
- package/dist/src/tools/ast-edit/local-context-analyzer.js +267 -0
- package/dist/src/tools/ast-edit/local-context-analyzer.js.map +1 -0
- package/dist/src/tools/ast-edit/repository-context-provider.d.ts +22 -0
- package/dist/src/tools/ast-edit/repository-context-provider.js +139 -0
- package/dist/src/tools/ast-edit/repository-context-provider.js.map +1 -0
- package/dist/src/tools/ast-edit/types.d.ts +155 -0
- package/dist/src/tools/ast-edit/types.js +7 -0
- package/dist/src/tools/ast-edit/types.js.map +1 -0
- package/dist/src/tools/ast-edit/workspace-context-provider.d.ts +22 -0
- package/dist/src/tools/ast-edit/workspace-context-provider.js +39 -0
- package/dist/src/tools/ast-edit/workspace-context-provider.js.map +1 -0
- package/dist/src/tools/ast-edit.d.ts +43 -0
- package/dist/src/tools/ast-edit.js +183 -0
- package/dist/src/tools/ast-edit.js.map +1 -0
- package/dist/src/tools/ast-grep.d.ts +22 -0
- package/dist/src/tools/ast-grep.js +291 -0
- package/dist/src/tools/ast-grep.js.map +1 -0
- package/dist/src/tools/check-async-tasks.d.ts +46 -0
- package/dist/src/tools/check-async-tasks.js +241 -0
- package/dist/src/tools/check-async-tasks.js.map +1 -0
- package/dist/src/tools/codesearch.d.ts +25 -0
- package/dist/src/tools/codesearch.js +153 -0
- package/dist/src/tools/codesearch.js.map +1 -0
- package/dist/src/tools/delete_line_range.d.ts +41 -0
- package/dist/src/tools/delete_line_range.js +238 -0
- package/dist/src/tools/delete_line_range.js.map +1 -0
- package/dist/src/tools/direct-web-fetch.d.ts +22 -0
- package/dist/src/tools/direct-web-fetch.js +215 -0
- package/dist/src/tools/direct-web-fetch.js.map +1 -0
- package/dist/src/tools/edit-utils.d.ts +53 -0
- package/dist/src/tools/edit-utils.js +250 -0
- package/dist/src/tools/edit-utils.js.map +1 -0
- package/dist/src/tools/edit.d.ts +70 -0
- package/dist/src/tools/edit.js +816 -0
- package/dist/src/tools/edit.js.map +1 -0
- package/dist/src/tools/exa-web-search.d.ts +27 -0
- package/dist/src/tools/exa-web-search.js +153 -0
- package/dist/src/tools/exa-web-search.js.map +1 -0
- package/dist/src/tools/glob.d.ts +55 -0
- package/dist/src/tools/glob.js +284 -0
- package/dist/src/tools/glob.js.map +1 -0
- package/dist/src/tools/google-web-fetch.d.ts +34 -0
- package/dist/src/tools/google-web-fetch.js +417 -0
- package/dist/src/tools/google-web-fetch.js.map +1 -0
- package/dist/src/tools/google-web-search-invocation.d.ts +53 -0
- package/dist/src/tools/google-web-search-invocation.js +180 -0
- package/dist/src/tools/google-web-search-invocation.js.map +1 -0
- package/dist/src/tools/google-web-search.d.ts +16 -0
- package/dist/src/tools/google-web-search.js +34 -0
- package/dist/src/tools/google-web-search.js.map +1 -0
- package/dist/src/tools/grep.d.ts +56 -0
- package/dist/src/tools/grep.js +883 -0
- package/dist/src/tools/grep.js.map +1 -0
- package/dist/src/tools/insert_at_line.d.ts +41 -0
- package/dist/src/tools/insert_at_line.js +287 -0
- package/dist/src/tools/insert_at_line.js.map +1 -0
- package/dist/src/tools/list-subagents.d.ts +31 -0
- package/dist/src/tools/list-subagents.js +122 -0
- package/dist/src/tools/list-subagents.js.map +1 -0
- package/dist/src/tools/ls.d.ts +71 -0
- package/dist/src/tools/ls.js +238 -0
- package/dist/src/tools/ls.js.map +1 -0
- package/dist/src/tools/memoryTool.d.ts +66 -0
- package/dist/src/tools/memoryTool.js +435 -0
- package/dist/src/tools/memoryTool.js.map +1 -0
- package/dist/src/tools/modifiable-tool.d.ts +37 -0
- package/dist/src/tools/modifiable-tool.js +120 -0
- package/dist/src/tools/modifiable-tool.js.map +1 -0
- package/dist/src/tools/read-file.d.ts +49 -0
- package/dist/src/tools/read-file.js +279 -0
- package/dist/src/tools/read-file.js.map +1 -0
- package/dist/src/tools/read-many-files.d.ts +60 -0
- package/dist/src/tools/read-many-files.js +529 -0
- package/dist/src/tools/read-many-files.js.map +1 -0
- package/dist/src/tools/read_line_range.d.ts +47 -0
- package/dist/src/tools/read_line_range.js +248 -0
- package/dist/src/tools/read_line_range.js.map +1 -0
- package/dist/src/tools/ripGrep.d.ts +41 -0
- package/dist/src/tools/ripGrep.js +395 -0
- package/dist/src/tools/ripGrep.js.map +1 -0
- package/dist/src/tools/shell.d.ts +60 -0
- package/dist/src/tools/shell.js +735 -0
- package/dist/src/tools/shell.js.map +1 -0
- package/dist/src/tools/structural-analysis.d.ts +27 -0
- package/dist/src/tools/structural-analysis.js +1089 -0
- package/dist/src/tools/structural-analysis.js.map +1 -0
- package/dist/src/tools/stubs.d.ts +10 -0
- package/dist/src/tools/stubs.js +6 -0
- package/dist/src/tools/stubs.js.map +1 -0
- package/dist/src/tools/task.d.ts +41 -0
- package/dist/src/tools/task.js +195 -0
- package/dist/src/tools/task.js.map +1 -0
- package/dist/src/tools/todo-events.d.ts +22 -0
- package/dist/src/tools/todo-events.js +24 -0
- package/dist/src/tools/todo-events.js.map +1 -0
- package/dist/src/tools/todo-pause.d.ts +29 -0
- package/dist/src/tools/todo-pause.js +172 -0
- package/dist/src/tools/todo-pause.js.map +1 -0
- package/dist/src/tools/todo-read.d.ts +18 -0
- package/dist/src/tools/todo-read.js +98 -0
- package/dist/src/tools/todo-read.js.map +1 -0
- package/dist/src/tools/todo-store.d.ts +35 -0
- package/dist/src/tools/todo-store.js +124 -0
- package/dist/src/tools/todo-store.js.map +1 -0
- package/dist/src/tools/todo-write.d.ts +29 -0
- package/dist/src/tools/todo-write.js +366 -0
- package/dist/src/tools/todo-write.js.map +1 -0
- package/dist/src/tools/tool-registry.d.ts +156 -0
- package/dist/src/tools/tool-registry.js +623 -0
- package/dist/src/tools/tool-registry.js.map +1 -0
- package/dist/src/tools/tools.d.ts +403 -0
- package/dist/src/tools/tools.js +519 -0
- package/dist/src/tools/tools.js.map +1 -0
- package/dist/src/tools/write-file.d.ts +45 -0
- package/dist/src/tools/write-file.js +320 -0
- package/dist/src/tools/write-file.js.map +1 -0
- package/dist/src/types/index.d.ts +17 -0
- package/dist/src/types/index.js +9 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/provider-content-types.d.ts +56 -0
- package/dist/src/types/provider-content-types.js +6 -0
- package/dist/src/types/provider-content-types.js.map +1 -0
- package/dist/src/types/todo-schemas.d.ts +263 -0
- package/dist/src/types/todo-schemas.js +32 -0
- package/dist/src/types/todo-schemas.js.map +1 -0
- package/dist/src/types/tool-confirmation-types.d.ts +34 -0
- package/dist/src/types/tool-confirmation-types.js +29 -0
- package/dist/src/types/tool-confirmation-types.js.map +1 -0
- package/dist/src/types/tool-context.d.ts +31 -0
- package/dist/src/types/tool-context.js +6 -0
- package/dist/src/types/tool-context.js.map +1 -0
- package/dist/src/types/tool-error.d.ts +69 -0
- package/dist/src/types/tool-error.js +94 -0
- package/dist/src/types/tool-error.js.map +1 -0
- package/dist/src/types/tool-names.d.ts +57 -0
- package/dist/src/types/tool-names.js +64 -0
- package/dist/src/types/tool-names.js.map +1 -0
- package/dist/src/utils/EmojiFilter.d.ts +134 -0
- package/dist/src/utils/EmojiFilter.js +370 -0
- package/dist/src/utils/EmojiFilter.js.map +1 -0
- package/dist/src/utils/ast-grep-utils.d.ts +42 -0
- package/dist/src/utils/ast-grep-utils.js +140 -0
- package/dist/src/utils/ast-grep-utils.js.map +1 -0
- package/dist/src/utils/debugLogger.d.ts +11 -0
- package/dist/src/utils/debugLogger.js +16 -0
- package/dist/src/utils/debugLogger.js.map +1 -0
- package/dist/src/utils/diffOptions.d.ts +14 -0
- package/dist/src/utils/diffOptions.js +46 -0
- package/dist/src/utils/diffOptions.js.map +1 -0
- package/dist/src/utils/editor.d.ts +39 -0
- package/dist/src/utils/editor.js +212 -0
- package/dist/src/utils/editor.js.map +1 -0
- package/dist/src/utils/ensure-dirs.d.ts +10 -0
- package/dist/src/utils/ensure-dirs.js +16 -0
- package/dist/src/utils/ensure-dirs.js.map +1 -0
- package/dist/src/utils/errors.d.ts +59 -0
- package/dist/src/utils/errors.js +178 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/fetch.d.ts +11 -0
- package/dist/src/utils/fetch.js +74 -0
- package/dist/src/utils/fetch.js.map +1 -0
- package/dist/src/utils/fileUtils.d.ts +32 -0
- package/dist/src/utils/fileUtils.js +363 -0
- package/dist/src/utils/fileUtils.js.map +1 -0
- package/dist/src/utils/fuzzy-replacer.d.ts +61 -0
- package/dist/src/utils/fuzzy-replacer.js +492 -0
- package/dist/src/utils/fuzzy-replacer.js.map +1 -0
- package/dist/src/utils/gitLineChanges.d.ts +12 -0
- package/dist/src/utils/gitLineChanges.js +171 -0
- package/dist/src/utils/gitLineChanges.js.map +1 -0
- package/dist/src/utils/gitUtils.d.ts +6 -0
- package/dist/src/utils/gitUtils.js +31 -0
- package/dist/src/utils/gitUtils.js.map +1 -0
- package/dist/src/utils/lsp-diagnostics-helper.d.ts +27 -0
- package/dist/src/utils/lsp-diagnostics-helper.js +62 -0
- package/dist/src/utils/lsp-diagnostics-helper.js.map +1 -0
- package/dist/src/utils/mediaUtils.d.ts +38 -0
- package/dist/src/utils/mediaUtils.js +22 -0
- package/dist/src/utils/mediaUtils.js.map +1 -0
- package/dist/src/utils/pathValidation.d.ts +7 -0
- package/dist/src/utils/pathValidation.js +39 -0
- package/dist/src/utils/pathValidation.js.map +1 -0
- package/dist/src/utils/paths.d.ts +7 -0
- package/dist/src/utils/paths.js +158 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/dist/src/utils/resolveTextSearchTarget.d.ts +17 -0
- package/dist/src/utils/resolveTextSearchTarget.js +45 -0
- package/dist/src/utils/resolveTextSearchTarget.js.map +1 -0
- package/dist/src/utils/retry.d.ts +17 -0
- package/dist/src/utils/retry.js +185 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/ripgrepPathResolver.d.ts +23 -0
- package/dist/src/utils/ripgrepPathResolver.js +179 -0
- package/dist/src/utils/ripgrepPathResolver.js.map +1 -0
- package/dist/src/utils/safeJsonStringify.d.ts +9 -0
- package/dist/src/utils/safeJsonStringify.js +21 -0
- package/dist/src/utils/safeJsonStringify.js.map +1 -0
- package/dist/src/utils/schemaValidator.d.ts +13 -0
- package/dist/src/utils/schemaValidator.js +275 -0
- package/dist/src/utils/schemaValidator.js.map +1 -0
- package/dist/src/utils/terminalSerializer.d.ts +33 -0
- package/dist/src/utils/terminalSerializer.js +6 -0
- package/dist/src/utils/terminalSerializer.js.map +1 -0
- package/dist/src/utils/todoContextTracker.d.ts +12 -0
- package/dist/src/utils/todoContextTracker.js +28 -0
- package/dist/src/utils/todoContextTracker.js.map +1 -0
- package/dist/src/utils/todoFormatter.d.ts +24 -0
- package/dist/src/utils/todoFormatter.js +157 -0
- package/dist/src/utils/todoFormatter.js.map +1 -0
- package/dist/src/utils/todoReminderService.d.ts +22 -0
- package/dist/src/utils/todoReminderService.js +43 -0
- package/dist/src/utils/todoReminderService.js.map +1 -0
- package/dist/src/utils/tool-key-storage-facade.d.ts +32 -0
- package/dist/src/utils/tool-key-storage-facade.js +56 -0
- package/dist/src/utils/tool-key-storage-facade.js.map +1 -0
- package/dist/src/utils/tool-key-storage-types.d.ts +56 -0
- package/dist/src/utils/tool-key-storage-types.js +56 -0
- package/dist/src/utils/tool-key-storage-types.js.map +1 -0
- package/dist/src/utils/toolOutputLimiter.d.ts +29 -0
- package/dist/src/utils/toolOutputLimiter.js +107 -0
- package/dist/src/utils/toolOutputLimiter.js.map +1 -0
- package/dist/src/utils/unicodeUtils.d.ts +55 -0
- package/dist/src/utils/unicodeUtils.js +129 -0
- package/dist/src/utils/unicodeUtils.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileUtils.js","sourceRoot":"","sources":["../../../src/utils/fileUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ported from opencode (https://github.com/opencodenpm/opencode).
|
|
3
|
+
* Original by opencode contributors.
|
|
4
|
+
* Adapted for llxprt-code by Vybestack.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Type definition for replacer functions that generate potential matches
|
|
8
|
+
*/
|
|
9
|
+
export type Replacer = (content: string, find: string) => Generator<string, void, unknown>;
|
|
10
|
+
/**
|
|
11
|
+
* Levenshtein distance algorithm implementation
|
|
12
|
+
*/
|
|
13
|
+
export declare function levenshtein(a: string, b: string): number;
|
|
14
|
+
/**
|
|
15
|
+
* Simple exact match replacer
|
|
16
|
+
*/
|
|
17
|
+
export declare const SimpleReplacer: Replacer;
|
|
18
|
+
/**
|
|
19
|
+
* Replacer that matches lines with trimmed content
|
|
20
|
+
*/
|
|
21
|
+
export declare const LineTrimmedReplacer: Replacer;
|
|
22
|
+
/**
|
|
23
|
+
* Replacer that matches blocks using first and last line anchors with fuzzy middle content
|
|
24
|
+
*/
|
|
25
|
+
export declare const BlockAnchorReplacer: Replacer;
|
|
26
|
+
/**
|
|
27
|
+
* Replacer that normalizes whitespace before matching
|
|
28
|
+
*/
|
|
29
|
+
export declare const WhitespaceNormalizedReplacer: Replacer;
|
|
30
|
+
/**
|
|
31
|
+
* Replacer that matches content regardless of indentation level
|
|
32
|
+
*/
|
|
33
|
+
export declare const IndentationFlexibleReplacer: Replacer;
|
|
34
|
+
/**
|
|
35
|
+
* Replacer that handles escape sequences
|
|
36
|
+
*/
|
|
37
|
+
export declare const EscapeNormalizedReplacer: Replacer;
|
|
38
|
+
/**
|
|
39
|
+
* Replacer that yields all exact matches for handling multiple occurrences
|
|
40
|
+
*/
|
|
41
|
+
export declare const MultiOccurrenceReplacer: Replacer;
|
|
42
|
+
/**
|
|
43
|
+
* Replacer that tries to match trimmed versions of the find string
|
|
44
|
+
*/
|
|
45
|
+
export declare const TrimmedBoundaryReplacer: Replacer;
|
|
46
|
+
/**
|
|
47
|
+
* Replacer that uses first and last lines as context anchors with similarity checking
|
|
48
|
+
*/
|
|
49
|
+
export declare const ContextAwareReplacer: Replacer;
|
|
50
|
+
/**
|
|
51
|
+
* Main fuzzy replace function that tries multiple replacement strategies
|
|
52
|
+
* @param content - The content to search in
|
|
53
|
+
* @param oldString - The string to find and replace
|
|
54
|
+
* @param newString - The replacement string
|
|
55
|
+
* @param replaceAll - Whether to replace all occurrences (default: false)
|
|
56
|
+
* @returns Object with result and occurrences count, or null if no replacement was made
|
|
57
|
+
*/
|
|
58
|
+
export declare function fuzzyReplace(content: string, oldString: string, newString: string, replaceAll?: boolean): {
|
|
59
|
+
result: string;
|
|
60
|
+
occurrences: number;
|
|
61
|
+
} | null;
|
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ported from opencode (https://github.com/opencodenpm/opencode).
|
|
3
|
+
* Original by opencode contributors.
|
|
4
|
+
* Adapted for llxprt-code by Vybestack.
|
|
5
|
+
*/
|
|
6
|
+
/* eslint-disable complexity, sonarjs/cognitive-complexity -- Phase 5: legacy core boundary retained while larger decomposition continues. */
|
|
7
|
+
// Similarity thresholds for block anchor fallback matching
|
|
8
|
+
const SINGLE_CANDIDATE_SIMILARITY_THRESHOLD = 0.0;
|
|
9
|
+
const MULTIPLE_CANDIDATES_SIMILARITY_THRESHOLD = 0.3;
|
|
10
|
+
/**
|
|
11
|
+
* Levenshtein distance algorithm implementation
|
|
12
|
+
*/
|
|
13
|
+
export function levenshtein(a, b) {
|
|
14
|
+
// Handle empty strings
|
|
15
|
+
if (a === '' || b === '') {
|
|
16
|
+
return Math.max(a.length, b.length);
|
|
17
|
+
}
|
|
18
|
+
const matrix = Array.from({ length: a.length + 1 }, (_, i) => Array.from({ length: b.length + 1 }, (_, j) =>
|
|
19
|
+
// eslint-disable-next-line sonarjs/no-nested-conditional -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
20
|
+
i === 0 ? j : j === 0 ? i : 0));
|
|
21
|
+
for (let i = 1; i <= a.length; i++) {
|
|
22
|
+
for (let j = 1; j <= b.length; j++) {
|
|
23
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
24
|
+
matrix[i][j] = Math.min(matrix[i - 1][j] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j - 1] + cost);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return matrix[a.length][b.length];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Helper function to escape special regex characters
|
|
31
|
+
*/
|
|
32
|
+
const escapeRegExp = (str) =>
|
|
33
|
+
// eslint-disable-next-line sonarjs/regular-expr -- Static regex reviewed for lint hardening; behavior preserved.
|
|
34
|
+
str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
35
|
+
const ESCAPE_SEQUENCE_PATTERN = /\\(n|t|r|'|"|`|\\|\$)/g;
|
|
36
|
+
const ESCAPE_SEQUENCE_TEST_PATTERN = /\\(n|t|r|'|"|`|\\|\$)/;
|
|
37
|
+
const unescapeEscapedSequences = (str) => str.replace(ESCAPE_SEQUENCE_PATTERN, (_match, capturedChar) => {
|
|
38
|
+
switch (capturedChar) {
|
|
39
|
+
case 'n':
|
|
40
|
+
return '\n';
|
|
41
|
+
case 't':
|
|
42
|
+
return '\t';
|
|
43
|
+
case 'r':
|
|
44
|
+
return '\r';
|
|
45
|
+
case "'":
|
|
46
|
+
return "'";
|
|
47
|
+
case '"':
|
|
48
|
+
return '"';
|
|
49
|
+
case '`':
|
|
50
|
+
return '`';
|
|
51
|
+
case '\\':
|
|
52
|
+
return '\\';
|
|
53
|
+
case '$':
|
|
54
|
+
return '$';
|
|
55
|
+
default:
|
|
56
|
+
return capturedChar;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
/**
|
|
60
|
+
* Simple exact match replacer
|
|
61
|
+
*/
|
|
62
|
+
export const SimpleReplacer = function* (_content, find) {
|
|
63
|
+
yield find;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Replacer that matches lines with trimmed content
|
|
67
|
+
*/
|
|
68
|
+
export const LineTrimmedReplacer = function* (content, find) {
|
|
69
|
+
const originalLines = content.split('\n');
|
|
70
|
+
const searchLines = find.split('\n');
|
|
71
|
+
if (searchLines[searchLines.length - 1] === '') {
|
|
72
|
+
searchLines.pop();
|
|
73
|
+
}
|
|
74
|
+
for (let i = 0; i <= originalLines.length - searchLines.length; i++) {
|
|
75
|
+
let matches = true;
|
|
76
|
+
for (let j = 0; j < searchLines.length; j++) {
|
|
77
|
+
const originalTrimmed = originalLines[i + j].trim();
|
|
78
|
+
const searchTrimmed = searchLines[j].trim();
|
|
79
|
+
if (originalTrimmed !== searchTrimmed) {
|
|
80
|
+
matches = false;
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (matches) {
|
|
85
|
+
let matchStartIndex = 0;
|
|
86
|
+
for (let k = 0; k < i; k++) {
|
|
87
|
+
matchStartIndex += originalLines[k].length + 1;
|
|
88
|
+
}
|
|
89
|
+
let matchEndIndex = matchStartIndex;
|
|
90
|
+
for (let k = 0; k < searchLines.length; k++) {
|
|
91
|
+
matchEndIndex += originalLines[i + k].length;
|
|
92
|
+
// eslint-disable-next-line sonarjs/nested-control-flow -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
93
|
+
if (k < searchLines.length - 1) {
|
|
94
|
+
matchEndIndex += 1; // Add newline character except for the last line
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
yield content.substring(matchStartIndex, matchEndIndex);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Collects candidate positions where both first and last anchor lines match.
|
|
103
|
+
*/
|
|
104
|
+
function collectAnchorCandidates(originalLines, firstLineSearch, lastLineSearch) {
|
|
105
|
+
const candidates = [];
|
|
106
|
+
for (let i = 0; i < originalLines.length; i++) {
|
|
107
|
+
if (originalLines[i].trim() !== firstLineSearch) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
for (let j = i + 2; j < originalLines.length; j++) {
|
|
111
|
+
if (originalLines[j].trim() === lastLineSearch) {
|
|
112
|
+
candidates.push({ startLine: i, endLine: j });
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return candidates;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Computes the character range [startIndex, endIndex) for a line range in the content.
|
|
121
|
+
*/
|
|
122
|
+
function computeLineRangeCharIndices(originalLines, startLine, endLine) {
|
|
123
|
+
let matchStartIndex = 0;
|
|
124
|
+
for (let k = 0; k < startLine; k++) {
|
|
125
|
+
matchStartIndex += originalLines[k].length + 1;
|
|
126
|
+
}
|
|
127
|
+
let matchEndIndex = matchStartIndex;
|
|
128
|
+
for (let k = startLine; k <= endLine; k++) {
|
|
129
|
+
matchEndIndex += originalLines[k].length;
|
|
130
|
+
if (k < endLine) {
|
|
131
|
+
matchEndIndex += 1;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return { matchStartIndex, matchEndIndex };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Computes average similarity of middle lines between a content block and search block.
|
|
138
|
+
* Returns 1.0 if no middle lines to compare (anchor-only match).
|
|
139
|
+
*/
|
|
140
|
+
function computeMiddleSimilarity(originalLines, searchLines, startLine, searchBlockSize, actualBlockSize) {
|
|
141
|
+
const linesToCheck = Math.min(searchBlockSize - 2, actualBlockSize - 2);
|
|
142
|
+
if (linesToCheck <= 0) {
|
|
143
|
+
return 1.0;
|
|
144
|
+
}
|
|
145
|
+
let similarity = 0;
|
|
146
|
+
// eslint-disable-next-line sonarjs/too-many-break-or-continue-in-loop -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
147
|
+
for (let j = 1; j < searchBlockSize - 1 && j < actualBlockSize - 1; j++) {
|
|
148
|
+
const originalLine = originalLines[startLine + j].trim();
|
|
149
|
+
const searchLine = searchLines[j].trim();
|
|
150
|
+
const maxLen = Math.max(originalLine.length, searchLine.length);
|
|
151
|
+
// eslint-disable-next-line sonarjs/nested-control-flow -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
152
|
+
if (maxLen === 0) {
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
const distance = levenshtein(originalLine, searchLine);
|
|
156
|
+
similarity += (1 - distance / maxLen) / linesToCheck;
|
|
157
|
+
// eslint-disable-next-line sonarjs/nested-control-flow -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
158
|
+
if (similarity >= SINGLE_CANDIDATE_SIMILARITY_THRESHOLD) {
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return similarity;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Computes average similarity of middle lines for multiple-candidate scoring.
|
|
166
|
+
* Returns 1.0 if no middle lines to compare (anchor-only match).
|
|
167
|
+
*/
|
|
168
|
+
function computeAverageMiddleSimilarity(originalLines, searchLines, startLine, searchBlockSize, actualBlockSize) {
|
|
169
|
+
const linesToCheck = Math.min(searchBlockSize - 2, actualBlockSize - 2);
|
|
170
|
+
if (linesToCheck <= 0) {
|
|
171
|
+
return 1.0;
|
|
172
|
+
}
|
|
173
|
+
let similarity = 0;
|
|
174
|
+
for (let j = 1; j < searchBlockSize - 1 && j < actualBlockSize - 1; j++) {
|
|
175
|
+
const originalLine = originalLines[startLine + j].trim();
|
|
176
|
+
const searchLine = searchLines[j].trim();
|
|
177
|
+
const maxLen = Math.max(originalLine.length, searchLine.length);
|
|
178
|
+
// eslint-disable-next-line sonarjs/nested-control-flow -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
179
|
+
if (maxLen === 0) {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
const distance = levenshtein(originalLine, searchLine);
|
|
183
|
+
similarity += 1 - distance / maxLen;
|
|
184
|
+
}
|
|
185
|
+
similarity /= linesToCheck;
|
|
186
|
+
return similarity;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Replacer that matches blocks using first and last line anchors with fuzzy middle content
|
|
190
|
+
*/
|
|
191
|
+
export const BlockAnchorReplacer = function* (content, find) {
|
|
192
|
+
const originalLines = content.split('\n');
|
|
193
|
+
const searchLines = find.split('\n');
|
|
194
|
+
if (searchLines.length < 3) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
if (searchLines[searchLines.length - 1] === '') {
|
|
198
|
+
searchLines.pop();
|
|
199
|
+
}
|
|
200
|
+
const firstLineSearch = searchLines[0].trim();
|
|
201
|
+
const lastLineSearch = searchLines[searchLines.length - 1].trim();
|
|
202
|
+
const searchBlockSize = searchLines.length;
|
|
203
|
+
const candidates = collectAnchorCandidates(originalLines, firstLineSearch, lastLineSearch);
|
|
204
|
+
if (candidates.length === 0) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
// Handle single candidate scenario (using relaxed threshold)
|
|
208
|
+
if (candidates.length === 1) {
|
|
209
|
+
const { startLine, endLine } = candidates[0];
|
|
210
|
+
const actualBlockSize = endLine - startLine + 1;
|
|
211
|
+
const similarity = computeMiddleSimilarity(originalLines, searchLines, startLine, searchBlockSize, actualBlockSize);
|
|
212
|
+
if (similarity >= SINGLE_CANDIDATE_SIMILARITY_THRESHOLD) {
|
|
213
|
+
const { matchStartIndex, matchEndIndex } = computeLineRangeCharIndices(originalLines, startLine, endLine);
|
|
214
|
+
yield content.substring(matchStartIndex, matchEndIndex);
|
|
215
|
+
}
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
// Calculate similarity for multiple candidates
|
|
219
|
+
let bestMatch = null;
|
|
220
|
+
let maxSimilarity = -1;
|
|
221
|
+
for (const candidate of candidates) {
|
|
222
|
+
const { startLine, endLine } = candidate;
|
|
223
|
+
const actualBlockSize = endLine - startLine + 1;
|
|
224
|
+
const similarity = computeAverageMiddleSimilarity(originalLines, searchLines, startLine, searchBlockSize, actualBlockSize);
|
|
225
|
+
if (similarity > maxSimilarity) {
|
|
226
|
+
maxSimilarity = similarity;
|
|
227
|
+
bestMatch = candidate;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (maxSimilarity >= MULTIPLE_CANDIDATES_SIMILARITY_THRESHOLD && bestMatch) {
|
|
231
|
+
const { startLine, endLine } = bestMatch;
|
|
232
|
+
const { matchStartIndex, matchEndIndex } = computeLineRangeCharIndices(originalLines, startLine, endLine);
|
|
233
|
+
yield content.substring(matchStartIndex, matchEndIndex);
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
/**
|
|
237
|
+
* Replacer that normalizes whitespace before matching
|
|
238
|
+
*/
|
|
239
|
+
export const WhitespaceNormalizedReplacer = function* (content, find) {
|
|
240
|
+
const normalizeWhitespace = (text) => text.replace(/\s+/g, ' ').trim();
|
|
241
|
+
const normalizedFind = normalizeWhitespace(find);
|
|
242
|
+
// Handle single line matches
|
|
243
|
+
const lines = content.split('\n');
|
|
244
|
+
for (let i = 0; i < lines.length; i++) {
|
|
245
|
+
const line = lines[i];
|
|
246
|
+
if (normalizeWhitespace(line) === normalizedFind) {
|
|
247
|
+
yield line;
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
// Only check for substring matches if the full line doesn't match
|
|
251
|
+
const normalizedLine = normalizeWhitespace(line);
|
|
252
|
+
if (normalizedLine.includes(normalizedFind)) {
|
|
253
|
+
// Find the actual substring in the original line that matches
|
|
254
|
+
const words = find.trim().split(/\s+/);
|
|
255
|
+
// eslint-disable-next-line sonarjs/nested-control-flow -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
256
|
+
if (words.length > 0) {
|
|
257
|
+
const pattern = words.map((word) => escapeRegExp(word)).join('\\s+');
|
|
258
|
+
try {
|
|
259
|
+
const regex = new RegExp(pattern);
|
|
260
|
+
const match = line.match(regex);
|
|
261
|
+
if (match) {
|
|
262
|
+
yield match[0];
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
// Invalid regex pattern, skip
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// Handle multi-line matches
|
|
273
|
+
const findLines = find.split('\n');
|
|
274
|
+
if (findLines.length > 1) {
|
|
275
|
+
for (let i = 0; i <= lines.length - findLines.length; i++) {
|
|
276
|
+
const block = lines.slice(i, i + findLines.length).join('\n');
|
|
277
|
+
if (normalizeWhitespace(block) === normalizedFind) {
|
|
278
|
+
yield block;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
/**
|
|
284
|
+
* Replacer that matches content regardless of indentation level
|
|
285
|
+
*/
|
|
286
|
+
export const IndentationFlexibleReplacer = function* (content, find) {
|
|
287
|
+
const removeIndentation = (text) => {
|
|
288
|
+
const lines = text.split('\n');
|
|
289
|
+
const nonEmptyLines = lines.filter((line) => line.trim().length > 0);
|
|
290
|
+
if (nonEmptyLines.length === 0)
|
|
291
|
+
return text;
|
|
292
|
+
const minIndent = Math.min(...nonEmptyLines.map((line) => {
|
|
293
|
+
const match = line.match(/^(\s*)/);
|
|
294
|
+
return match ? match[1].length : 0;
|
|
295
|
+
}));
|
|
296
|
+
return lines
|
|
297
|
+
.map((line) => (line.trim().length === 0 ? line : line.slice(minIndent)))
|
|
298
|
+
.join('\n');
|
|
299
|
+
};
|
|
300
|
+
const normalizedFind = removeIndentation(find);
|
|
301
|
+
const contentLines = content.split('\n');
|
|
302
|
+
const findLines = find.split('\n');
|
|
303
|
+
for (let i = 0; i <= contentLines.length - findLines.length; i++) {
|
|
304
|
+
const block = contentLines.slice(i, i + findLines.length).join('\n');
|
|
305
|
+
if (removeIndentation(block) === normalizedFind) {
|
|
306
|
+
yield block;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
/**
|
|
311
|
+
* Replacer that handles escape sequences
|
|
312
|
+
*/
|
|
313
|
+
export const EscapeNormalizedReplacer = function* (content, find) {
|
|
314
|
+
// Only apply escape sequence processing if the find string actually contains escaped sequences
|
|
315
|
+
// This prevents corrupting content with actual tab characters, newlines, etc.
|
|
316
|
+
if (!ESCAPE_SEQUENCE_TEST_PATTERN.test(find)) {
|
|
317
|
+
// No escape sequences to process, don't use this replacer
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
const unescapedFind = unescapeEscapedSequences(find);
|
|
321
|
+
// Try direct match with unescaped find string
|
|
322
|
+
if (content.includes(unescapedFind)) {
|
|
323
|
+
yield unescapedFind;
|
|
324
|
+
}
|
|
325
|
+
// Also try finding escaped versions in content that match unescaped find
|
|
326
|
+
const lines = content.split('\n');
|
|
327
|
+
const findLines = unescapedFind.split('\n');
|
|
328
|
+
for (let i = 0; i <= lines.length - findLines.length; i++) {
|
|
329
|
+
const block = lines.slice(i, i + findLines.length).join('\n');
|
|
330
|
+
const unescapedBlock = unescapeEscapedSequences(block);
|
|
331
|
+
if (unescapedBlock === unescapedFind) {
|
|
332
|
+
yield block;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
/**
|
|
337
|
+
* Replacer that yields all exact matches for handling multiple occurrences
|
|
338
|
+
*/
|
|
339
|
+
export const MultiOccurrenceReplacer = function* (content, find) {
|
|
340
|
+
// This replacer yields all exact matches, allowing the replace function
|
|
341
|
+
// to handle multiple occurrences based on replaceAll parameter
|
|
342
|
+
let startIndex = 0;
|
|
343
|
+
while (startIndex < content.length) {
|
|
344
|
+
const index = content.indexOf(find, startIndex);
|
|
345
|
+
if (index === -1)
|
|
346
|
+
break;
|
|
347
|
+
yield find;
|
|
348
|
+
startIndex = index + find.length;
|
|
349
|
+
}
|
|
350
|
+
};
|
|
351
|
+
/**
|
|
352
|
+
* Replacer that tries to match trimmed versions of the find string
|
|
353
|
+
*/
|
|
354
|
+
export const TrimmedBoundaryReplacer = function* (content, find) {
|
|
355
|
+
const trimmedFind = find.trim();
|
|
356
|
+
if (trimmedFind === find) {
|
|
357
|
+
// Already trimmed, no point in trying
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
// Check if the original find contains actual tab characters
|
|
361
|
+
// If it does, we should NOT use this replacer as it might preserve them incorrectly
|
|
362
|
+
if (find.includes('\t')) {
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
// Try to find the trimmed version
|
|
366
|
+
if (content.includes(trimmedFind)) {
|
|
367
|
+
yield trimmedFind;
|
|
368
|
+
}
|
|
369
|
+
// Also try finding blocks where trimmed content matches
|
|
370
|
+
const lines = content.split('\n');
|
|
371
|
+
const findLines = find.split('\n');
|
|
372
|
+
for (let i = 0; i <= lines.length - findLines.length; i++) {
|
|
373
|
+
const block = lines.slice(i, i + findLines.length).join('\n');
|
|
374
|
+
if (block.trim() === trimmedFind) {
|
|
375
|
+
yield block;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
};
|
|
379
|
+
/**
|
|
380
|
+
* Replacer that uses first and last lines as context anchors with similarity checking
|
|
381
|
+
*/
|
|
382
|
+
export const ContextAwareReplacer = function* (content, find) {
|
|
383
|
+
const findLines = find.split('\n');
|
|
384
|
+
if (findLines.length < 3) {
|
|
385
|
+
// Need at least 3 lines to have meaningful context
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
// Remove trailing empty line if present
|
|
389
|
+
if (findLines[findLines.length - 1] === '') {
|
|
390
|
+
findLines.pop();
|
|
391
|
+
}
|
|
392
|
+
const contentLines = content.split('\n');
|
|
393
|
+
// Extract first and last lines as context anchors
|
|
394
|
+
const firstLine = findLines[0].trim();
|
|
395
|
+
const lastLine = findLines[findLines.length - 1].trim();
|
|
396
|
+
// Find blocks that start and end with the context anchors
|
|
397
|
+
for (let i = 0; i < contentLines.length; i++) {
|
|
398
|
+
if (contentLines[i].trim() !== firstLine)
|
|
399
|
+
continue;
|
|
400
|
+
// Look for the matching last line
|
|
401
|
+
// eslint-disable-next-line sonarjs/too-many-break-or-continue-in-loop -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
402
|
+
for (let j = i + 2; j < contentLines.length; j++) {
|
|
403
|
+
if (contentLines[j].trim() === lastLine) {
|
|
404
|
+
// Found a potential context block
|
|
405
|
+
const blockLines = contentLines.slice(i, j + 1);
|
|
406
|
+
const block = blockLines.join('\n');
|
|
407
|
+
// Check if the middle content has reasonable similarity
|
|
408
|
+
// (simple heuristic: at least 50% of non-empty lines should match when trimmed)
|
|
409
|
+
// eslint-disable-next-line sonarjs/nested-control-flow -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
410
|
+
if (blockLines.length === findLines.length) {
|
|
411
|
+
let matchingLines = 0;
|
|
412
|
+
let totalNonEmptyLines = 0;
|
|
413
|
+
for (let k = 1; k < blockLines.length - 1; k++) {
|
|
414
|
+
const blockLine = blockLines[k].trim();
|
|
415
|
+
const findLine = findLines[k].trim();
|
|
416
|
+
if (blockLine.length > 0 || findLine.length > 0) {
|
|
417
|
+
totalNonEmptyLines++;
|
|
418
|
+
if (blockLine === findLine) {
|
|
419
|
+
matchingLines++;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
if (totalNonEmptyLines === 0 ||
|
|
424
|
+
matchingLines / totalNonEmptyLines >= 0.5) {
|
|
425
|
+
yield block;
|
|
426
|
+
break; // Only match the first occurrence
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
break;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
};
|
|
434
|
+
/**
|
|
435
|
+
* Main fuzzy replace function that tries multiple replacement strategies
|
|
436
|
+
* @param content - The content to search in
|
|
437
|
+
* @param oldString - The string to find and replace
|
|
438
|
+
* @param newString - The replacement string
|
|
439
|
+
* @param replaceAll - Whether to replace all occurrences (default: false)
|
|
440
|
+
* @returns Object with result and occurrences count, or null if no replacement was made
|
|
441
|
+
*/
|
|
442
|
+
export function fuzzyReplace(content, oldString, newString, replaceAll = false) {
|
|
443
|
+
if (oldString === newString) {
|
|
444
|
+
return null;
|
|
445
|
+
}
|
|
446
|
+
const oldStringHasEscapes = ESCAPE_SEQUENCE_TEST_PATTERN.test(oldString);
|
|
447
|
+
const newStringHasEscapes = ESCAPE_SEQUENCE_TEST_PATTERN.test(newString);
|
|
448
|
+
let notFound = true;
|
|
449
|
+
for (const replacer of [
|
|
450
|
+
SimpleReplacer,
|
|
451
|
+
LineTrimmedReplacer,
|
|
452
|
+
BlockAnchorReplacer,
|
|
453
|
+
WhitespaceNormalizedReplacer,
|
|
454
|
+
IndentationFlexibleReplacer,
|
|
455
|
+
EscapeNormalizedReplacer,
|
|
456
|
+
TrimmedBoundaryReplacer,
|
|
457
|
+
ContextAwareReplacer,
|
|
458
|
+
MultiOccurrenceReplacer,
|
|
459
|
+
]) {
|
|
460
|
+
// eslint-disable-next-line sonarjs/too-many-break-or-continue-in-loop -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
461
|
+
for (const search of replacer(content, oldString)) {
|
|
462
|
+
const index = content.indexOf(search);
|
|
463
|
+
if (index === -1)
|
|
464
|
+
continue;
|
|
465
|
+
notFound = false;
|
|
466
|
+
const shouldUnescapeReplacement = (oldStringHasEscapes || newStringHasEscapes) && !search.includes('\\');
|
|
467
|
+
// Prepare the replacement string - convert escape sequences when the match
|
|
468
|
+
// represents real characters (no backslashes in the matched content)
|
|
469
|
+
const finalReplacement = shouldUnescapeReplacement
|
|
470
|
+
? unescapeEscapedSequences(newString)
|
|
471
|
+
: newString;
|
|
472
|
+
if (replaceAll) {
|
|
473
|
+
const result = content.replaceAll(search, () => finalReplacement);
|
|
474
|
+
const occurrences = content.split(search).length - 1;
|
|
475
|
+
return { result, occurrences };
|
|
476
|
+
}
|
|
477
|
+
const lastIndex = content.lastIndexOf(search);
|
|
478
|
+
if (index !== lastIndex)
|
|
479
|
+
continue;
|
|
480
|
+
const result = content.substring(0, index) +
|
|
481
|
+
finalReplacement +
|
|
482
|
+
content.substring(index + search.length);
|
|
483
|
+
return { result, occurrences: 1 };
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
if (notFound) {
|
|
487
|
+
return null;
|
|
488
|
+
}
|
|
489
|
+
// Found multiple matches but couldn't replace (ambiguous)
|
|
490
|
+
return null;
|
|
491
|
+
}
|
|
492
|
+
//# sourceMappingURL=fuzzy-replacer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuzzy-replacer.js","sourceRoot":"","sources":["../../../src/utils/fuzzy-replacer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export type GitLineChangeMarker = 'N' | 'M' | 'D' | '░';
|
|
7
|
+
export interface GitLineChangeResult {
|
|
8
|
+
markersByLine: Map<number, Exclude<GitLineChangeMarker, '░'>>;
|
|
9
|
+
deletionAfterLines: Set<number>;
|
|
10
|
+
warning?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function getGitLineChanges(absolutePath: string): Promise<GitLineChangeResult>;
|