@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,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @plan:PLAN-20260608-ISSUE1585.P11
|
|
3
|
+
* @requirement:REQ-PKG-BOUNDARY
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @license
|
|
7
|
+
* Copyright 2025 Google LLC
|
|
8
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Package-local SchemaValidator for tool parameter validation.
|
|
12
|
+
*
|
|
13
|
+
* This is a self-contained copy of the SchemaValidator utility that
|
|
14
|
+
* was in packages/core/src/utils/schemaValidator.ts. It uses the `ajv`
|
|
15
|
+
* package directly with zero core imports.
|
|
16
|
+
*
|
|
17
|
+
* Tool files (tools.ts, ripGrep.ts, todo-pause.ts) need schema validation
|
|
18
|
+
* for their parameter schemas. Moving this utility into the tools package
|
|
19
|
+
* eliminates the core dependency.
|
|
20
|
+
*/
|
|
21
|
+
// ajv v8 does not declare package "exports", so subpath imports like
|
|
22
|
+
// "ajv/dist/2020" are the only supported way to pull in the draft-2020-12
|
|
23
|
+
// build. See https://ajv.js.org/json-schema.html#draft-2020-12
|
|
24
|
+
// eslint-disable-next-line import/no-internal-modules
|
|
25
|
+
import Ajv2020Pkg from 'ajv/dist/2020.js';
|
|
26
|
+
import AjvPkg from 'ajv';
|
|
27
|
+
// Ajv's ESM/CJS interop: default/namespace dual export.
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
29
|
+
const Ajv2020Class = Ajv2020Pkg.default ?? Ajv2020Pkg;
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
31
|
+
const AjvClass = AjvPkg.default ?? AjvPkg;
|
|
32
|
+
/**
|
|
33
|
+
* The JSON Schema draft-07 meta-schema, inlined verbatim from ajv's
|
|
34
|
+
* `dist/refs/json-schema-draft-07.json`.
|
|
35
|
+
*
|
|
36
|
+
* This is inlined (rather than resolved via `createRequire` or a JSON
|
|
37
|
+
* import) so that it survives esbuild bundling into `bundle/llxprt.js`
|
|
38
|
+
* unchanged.
|
|
39
|
+
*/
|
|
40
|
+
const draft07MetaSchema = {
|
|
41
|
+
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
42
|
+
$id: 'http://json-schema.org/draft-07/schema#',
|
|
43
|
+
title: 'Core schema meta-schema',
|
|
44
|
+
definitions: {
|
|
45
|
+
schemaArray: {
|
|
46
|
+
type: 'array',
|
|
47
|
+
minItems: 1,
|
|
48
|
+
items: { $ref: '#' },
|
|
49
|
+
},
|
|
50
|
+
nonNegativeInteger: {
|
|
51
|
+
type: 'integer',
|
|
52
|
+
minimum: 0,
|
|
53
|
+
},
|
|
54
|
+
nonNegativeIntegerDefault0: {
|
|
55
|
+
allOf: [{ $ref: '#/definitions/nonNegativeInteger' }, { default: 0 }],
|
|
56
|
+
},
|
|
57
|
+
simpleTypes: {
|
|
58
|
+
enum: [
|
|
59
|
+
'array',
|
|
60
|
+
'boolean',
|
|
61
|
+
'integer',
|
|
62
|
+
'null',
|
|
63
|
+
'number',
|
|
64
|
+
'object',
|
|
65
|
+
'string',
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
stringArray: {
|
|
69
|
+
type: 'array',
|
|
70
|
+
items: { type: 'string' },
|
|
71
|
+
uniqueItems: true,
|
|
72
|
+
default: [],
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
type: ['object', 'boolean'],
|
|
76
|
+
properties: {
|
|
77
|
+
$id: { type: 'string', format: 'uri-reference' },
|
|
78
|
+
$schema: { type: 'string', format: 'uri' },
|
|
79
|
+
$ref: { type: 'string', format: 'uri-reference' },
|
|
80
|
+
$comment: { type: 'string' },
|
|
81
|
+
title: { type: 'string' },
|
|
82
|
+
description: { type: 'string' },
|
|
83
|
+
default: true,
|
|
84
|
+
readOnly: { type: 'boolean', default: false },
|
|
85
|
+
examples: { type: 'array', items: true },
|
|
86
|
+
multipleOf: { type: 'number', exclusiveMinimum: 0 },
|
|
87
|
+
maximum: { type: 'number' },
|
|
88
|
+
exclusiveMaximum: { type: 'number' },
|
|
89
|
+
minimum: { type: 'number' },
|
|
90
|
+
exclusiveMinimum: { type: 'number' },
|
|
91
|
+
maxLength: { $ref: '#/definitions/nonNegativeInteger' },
|
|
92
|
+
minLength: { $ref: '#/definitions/nonNegativeIntegerDefault0' },
|
|
93
|
+
pattern: { type: 'string', format: 'regex' },
|
|
94
|
+
additionalItems: { $ref: '#' },
|
|
95
|
+
items: {
|
|
96
|
+
anyOf: [{ $ref: '#' }, { $ref: '#/definitions/schemaArray' }],
|
|
97
|
+
default: true,
|
|
98
|
+
},
|
|
99
|
+
maxItems: { $ref: '#/definitions/nonNegativeInteger' },
|
|
100
|
+
minItems: { $ref: '#/definitions/nonNegativeIntegerDefault0' },
|
|
101
|
+
uniqueItems: { type: 'boolean', default: false },
|
|
102
|
+
contains: { $ref: '#' },
|
|
103
|
+
maxProperties: { $ref: '#/definitions/nonNegativeInteger' },
|
|
104
|
+
minProperties: { $ref: '#/definitions/nonNegativeIntegerDefault0' },
|
|
105
|
+
required: { $ref: '#/definitions/stringArray' },
|
|
106
|
+
additionalProperties: { $ref: '#' },
|
|
107
|
+
definitions: {
|
|
108
|
+
type: 'object',
|
|
109
|
+
additionalProperties: { $ref: '#' },
|
|
110
|
+
default: {},
|
|
111
|
+
},
|
|
112
|
+
properties: {
|
|
113
|
+
type: 'object',
|
|
114
|
+
additionalProperties: { $ref: '#' },
|
|
115
|
+
default: {},
|
|
116
|
+
},
|
|
117
|
+
patternProperties: {
|
|
118
|
+
type: 'object',
|
|
119
|
+
additionalProperties: { $ref: '#' },
|
|
120
|
+
propertyNames: { format: 'regex' },
|
|
121
|
+
default: {},
|
|
122
|
+
},
|
|
123
|
+
dependencies: {
|
|
124
|
+
type: 'object',
|
|
125
|
+
additionalProperties: {
|
|
126
|
+
anyOf: [{ $ref: '#' }, { $ref: '#/definitions/stringArray' }],
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
propertyNames: { $ref: '#' },
|
|
130
|
+
const: true,
|
|
131
|
+
enum: {
|
|
132
|
+
type: 'array',
|
|
133
|
+
items: true,
|
|
134
|
+
minItems: 1,
|
|
135
|
+
uniqueItems: true,
|
|
136
|
+
},
|
|
137
|
+
type: {
|
|
138
|
+
anyOf: [
|
|
139
|
+
{ $ref: '#/definitions/simpleTypes' },
|
|
140
|
+
{
|
|
141
|
+
type: 'array',
|
|
142
|
+
items: { $ref: '#/definitions/simpleTypes' },
|
|
143
|
+
minItems: 1,
|
|
144
|
+
uniqueItems: true,
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
},
|
|
148
|
+
format: { type: 'string' },
|
|
149
|
+
contentMediaType: { type: 'string' },
|
|
150
|
+
contentEncoding: { type: 'string' },
|
|
151
|
+
if: { $ref: '#' },
|
|
152
|
+
then: { $ref: '#' },
|
|
153
|
+
else: { $ref: '#' },
|
|
154
|
+
allOf: { $ref: '#/definitions/schemaArray' },
|
|
155
|
+
anyOf: { $ref: '#/definitions/schemaArray' },
|
|
156
|
+
oneOf: { $ref: '#/definitions/schemaArray' },
|
|
157
|
+
not: { $ref: '#' },
|
|
158
|
+
},
|
|
159
|
+
default: true,
|
|
160
|
+
};
|
|
161
|
+
// See: https://ajv.js.org/options.html#strict-mode-options
|
|
162
|
+
const ajvOptions = { strictSchema: false };
|
|
163
|
+
/**
|
|
164
|
+
* Two Ajv instances because draft-07 and draft-2020-12 are NOT
|
|
165
|
+
* behaviourally compatible. See the long comment in the core version
|
|
166
|
+
* of this file for details.
|
|
167
|
+
*/
|
|
168
|
+
const ajValidator2020 = new Ajv2020Class(ajvOptions);
|
|
169
|
+
ajValidator2020.addMetaSchema(draft07MetaSchema);
|
|
170
|
+
const ajValidator07 = new AjvClass(ajvOptions);
|
|
171
|
+
/** Register custom formats on a given Ajv instance. */
|
|
172
|
+
function registerCustomFormats(instance) {
|
|
173
|
+
instance.addFormat('google-duration', {
|
|
174
|
+
type: 'string',
|
|
175
|
+
validate: () => true,
|
|
176
|
+
});
|
|
177
|
+
instance.addFormat('google-fieldmask', {
|
|
178
|
+
type: 'string',
|
|
179
|
+
validate: () => true,
|
|
180
|
+
});
|
|
181
|
+
instance.addFormat('something-totally-custom', {
|
|
182
|
+
type: 'string',
|
|
183
|
+
validate: () => true,
|
|
184
|
+
});
|
|
185
|
+
// eslint-disable-next-line sonarjs/regular-expr -- Static regex reviewed for lint hardening.
|
|
186
|
+
instance.addFormat('date', /^\d{4}-\d{2}-\d{2}$/);
|
|
187
|
+
}
|
|
188
|
+
registerCustomFormats(ajValidator2020);
|
|
189
|
+
registerCustomFormats(ajValidator07);
|
|
190
|
+
/** Returns true if the declared `$schema` URI refers to JSON Schema draft-07. */
|
|
191
|
+
function isDraft07SchemaUri(uri) {
|
|
192
|
+
return typeof uri === 'string' && /\/draft-07\/schema/.test(uri);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Package-local SchemaValidator utility for tool parameter validation.
|
|
196
|
+
* Zero core imports — uses ajv directly.
|
|
197
|
+
*/
|
|
198
|
+
export class SchemaValidator {
|
|
199
|
+
static validate(schema, data) {
|
|
200
|
+
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
|
201
|
+
if (!schema) {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
if (typeof data !== 'object' || data === null) {
|
|
205
|
+
return 'Value of params must be an object';
|
|
206
|
+
}
|
|
207
|
+
const extSchema = schema;
|
|
208
|
+
if (extSchema.requireOne) {
|
|
209
|
+
for (const oneOfGroup of extSchema.requireOne) {
|
|
210
|
+
const hasOne = oneOfGroup.some((prop) => data[prop] !== undefined &&
|
|
211
|
+
data[prop] !== null &&
|
|
212
|
+
data[prop] !== '');
|
|
213
|
+
if (!hasOne) {
|
|
214
|
+
return `params must have at least one of required properties: ${oneOfGroup.join(', ')}`;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
const declaredSchemaUri = extSchema.$schema;
|
|
219
|
+
const instance = isDraft07SchemaUri(declaredSchemaUri)
|
|
220
|
+
? ajValidator07
|
|
221
|
+
: ajValidator2020;
|
|
222
|
+
const ajvSchema = { ...extSchema };
|
|
223
|
+
delete ajvSchema.requireOne;
|
|
224
|
+
delete ajvSchema.$schema;
|
|
225
|
+
const validate = instance.compile(ajvSchema);
|
|
226
|
+
const valid = validate(data);
|
|
227
|
+
if (valid === false &&
|
|
228
|
+
validate.errors != null &&
|
|
229
|
+
validate.errors.length > 0) {
|
|
230
|
+
return SchemaValidator.formatErrors(validate.errors);
|
|
231
|
+
}
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
static formatPath(rawPath) {
|
|
235
|
+
if (rawPath === '') {
|
|
236
|
+
return 'params';
|
|
237
|
+
}
|
|
238
|
+
const normalized = rawPath
|
|
239
|
+
.replace(/\[(\d+)\]/g, '/$1')
|
|
240
|
+
.replace(/\.+/g, '/')
|
|
241
|
+
.replace(/\/+/g, '/')
|
|
242
|
+
.replace(/^\/+/, '');
|
|
243
|
+
return `params/${normalized}`;
|
|
244
|
+
}
|
|
245
|
+
static formatErrors(errors) {
|
|
246
|
+
const formattedErrors = errors.map((err) => {
|
|
247
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
248
|
+
const instancePath = err.instancePath;
|
|
249
|
+
const dataPath = err.dataPath;
|
|
250
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
251
|
+
const path = (typeof instancePath === 'string' && instancePath !== ''
|
|
252
|
+
? instancePath
|
|
253
|
+
: null) ??
|
|
254
|
+
(typeof dataPath === 'string' && dataPath !== '' ? dataPath : null) ??
|
|
255
|
+
'';
|
|
256
|
+
const basePath = SchemaValidator.formatPath(path);
|
|
257
|
+
const message = err.message ?? 'is invalid';
|
|
258
|
+
return `${basePath} ${message}`;
|
|
259
|
+
});
|
|
260
|
+
const errorTextRaw = formattedErrors.join('; ');
|
|
261
|
+
const replaced = typeof errorTextRaw === 'string' && errorTextRaw !== ''
|
|
262
|
+
? errorTextRaw.replace(/\bshould\b/gi, 'must')
|
|
263
|
+
: null;
|
|
264
|
+
let errorText = replaced ?? errorTextRaw;
|
|
265
|
+
if (typeof errorText === 'string' && errorText !== '') {
|
|
266
|
+
errorText = errorText.replace(/must NOT be shorter than (\d+) characters/gi, 'must NOT have fewer than $1 characters');
|
|
267
|
+
if (/anyOf/i.test(errorText) &&
|
|
268
|
+
!/must match a schema in anyOf/i.test(errorText)) {
|
|
269
|
+
errorText = `${errorText}; must match a schema in anyOf`;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return errorText;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=schemaValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaValidator.js","sourceRoot":"","sources":["../../../src/utils/schemaValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @plan:PLAN-20260608-ISSUE1585.P11
|
|
3
|
+
* @requirement:REQ-PKG-BOUNDARY
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @license
|
|
7
|
+
* Copyright 2025 Vybestack LLC
|
|
8
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Tools-owned structural type for terminal output.
|
|
12
|
+
*
|
|
13
|
+
* Replaces import of AnsiOutput from packages/core/src/utils/terminalSerializer.
|
|
14
|
+
* The full AnsiOutput type requires @xterm/headless which is a core dependency.
|
|
15
|
+
* Moved tool files that need AnsiOutput in their interfaces should use this
|
|
16
|
+
* package-local type instead.
|
|
17
|
+
*
|
|
18
|
+
* The type is structurally equivalent: an array of lines, where each line
|
|
19
|
+
* is an array of tokens. This avoids the @xterm/headless dependency while
|
|
20
|
+
* maintaining interface compatibility.
|
|
21
|
+
*/
|
|
22
|
+
export interface AnsiToken {
|
|
23
|
+
text: string;
|
|
24
|
+
bold: boolean;
|
|
25
|
+
italic: boolean;
|
|
26
|
+
underline: boolean;
|
|
27
|
+
dim: boolean;
|
|
28
|
+
inverse: boolean;
|
|
29
|
+
fg: string;
|
|
30
|
+
bg: string;
|
|
31
|
+
}
|
|
32
|
+
export type AnsiLine = AnsiToken[];
|
|
33
|
+
export type AnsiOutput = AnsiLine[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminalSerializer.js","sourceRoot":"","sources":["../../../src/utils/terminalSerializer.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export declare class TodoContextTracker {
|
|
7
|
+
private activeTodoId;
|
|
8
|
+
static forAgent(sessionId: string, agentId: string): TodoContextTracker;
|
|
9
|
+
setActiveTodo(todoId: string | null): void;
|
|
10
|
+
clearActiveTodo(): void;
|
|
11
|
+
getActiveTodo(): string | null;
|
|
12
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
const trackers = new Map();
|
|
7
|
+
export class TodoContextTracker {
|
|
8
|
+
activeTodoId = null;
|
|
9
|
+
static forAgent(sessionId, agentId) {
|
|
10
|
+
const key = `${sessionId}:${agentId}`;
|
|
11
|
+
let tracker = trackers.get(key);
|
|
12
|
+
if (!tracker) {
|
|
13
|
+
tracker = new TodoContextTracker();
|
|
14
|
+
trackers.set(key, tracker);
|
|
15
|
+
}
|
|
16
|
+
return tracker;
|
|
17
|
+
}
|
|
18
|
+
setActiveTodo(todoId) {
|
|
19
|
+
this.activeTodoId = todoId;
|
|
20
|
+
}
|
|
21
|
+
clearActiveTodo() {
|
|
22
|
+
this.activeTodoId = null;
|
|
23
|
+
}
|
|
24
|
+
getActiveTodo() {
|
|
25
|
+
return this.activeTodoId;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=todoContextTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todoContextTracker.js","sourceRoot":"","sources":["../../../src/utils/todoContextTracker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;AAEvD,MAAM,OAAO,kBAAkB;IACrB,YAAY,GAAkB,IAAI,CAAC;IAE3C,MAAM,CAAC,QAAQ,CAAC,SAAiB,EAAE,OAAe;QAChD,MAAM,GAAG,GAAG,GAAG,SAAS,IAAI,OAAO,EAAE,CAAC;QACtC,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACnC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,aAAa,CAAC,MAAqB;QACjC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IAC7B,CAAC;IAED,eAAe;QACb,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { type Todo, type TodoToolCall } from '../types/todo-schemas.js';
|
|
7
|
+
export interface GroupedToolCall {
|
|
8
|
+
toolCall: TodoToolCall;
|
|
9
|
+
count: number;
|
|
10
|
+
}
|
|
11
|
+
export interface TodoFormatterOptions {
|
|
12
|
+
header?: string;
|
|
13
|
+
includeSummary?: boolean;
|
|
14
|
+
maxToolCalls?: number;
|
|
15
|
+
getLiveToolCalls?: (todoId: string) => TodoToolCall[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Groups consecutive identical tool calls to create a concise textual representation.
|
|
19
|
+
*/
|
|
20
|
+
export declare const groupToolCalls: (toolCalls: TodoToolCall[]) => GroupedToolCall[];
|
|
21
|
+
/**
|
|
22
|
+
* Produces a textual representation of todos that mirrors the information shown in the Ink Todo panel.
|
|
23
|
+
*/
|
|
24
|
+
export declare const formatTodoListForDisplay: (todos: Todo[], options?: TodoFormatterOptions) => string;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
const STATUS_ICONS = {
|
|
7
|
+
in_progress: '→',
|
|
8
|
+
pending: '○',
|
|
9
|
+
completed: '',
|
|
10
|
+
};
|
|
11
|
+
const STATUS_ORDER = {
|
|
12
|
+
in_progress: 0,
|
|
13
|
+
pending: 1,
|
|
14
|
+
completed: 2,
|
|
15
|
+
};
|
|
16
|
+
const DEFAULT_HEADER = '## Todo Progress';
|
|
17
|
+
const DEFAULT_MAX_TOOL_CALLS = 5;
|
|
18
|
+
/**
|
|
19
|
+
* Groups consecutive identical tool calls to create a concise textual representation.
|
|
20
|
+
*/
|
|
21
|
+
export const groupToolCalls = (toolCalls) => {
|
|
22
|
+
if (toolCalls.length === 0) {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
const grouped = [];
|
|
26
|
+
let currentGroup = {
|
|
27
|
+
toolCall: toolCalls[0],
|
|
28
|
+
count: 1,
|
|
29
|
+
};
|
|
30
|
+
for (let i = 1; i < toolCalls.length; i++) {
|
|
31
|
+
const current = toolCalls[i];
|
|
32
|
+
const previous = currentGroup.toolCall;
|
|
33
|
+
if (current.name === previous.name &&
|
|
34
|
+
JSON.stringify(current.parameters) === JSON.stringify(previous.parameters)) {
|
|
35
|
+
currentGroup.count++;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
grouped.push(currentGroup);
|
|
39
|
+
currentGroup = {
|
|
40
|
+
toolCall: current,
|
|
41
|
+
count: 1,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
grouped.push(currentGroup);
|
|
46
|
+
return grouped;
|
|
47
|
+
};
|
|
48
|
+
const formatParameters = (parameters) => {
|
|
49
|
+
const segments = [];
|
|
50
|
+
const MAX_LENGTH = 40;
|
|
51
|
+
for (const [key, value] of Object.entries(parameters)) {
|
|
52
|
+
if (typeof value === 'string') {
|
|
53
|
+
let displayValue = value;
|
|
54
|
+
if (key === 'file_path' ||
|
|
55
|
+
key === 'absolute_path' ||
|
|
56
|
+
value.includes('/')) {
|
|
57
|
+
// eslint-disable-next-line sonarjs/nested-control-flow -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
58
|
+
if (displayValue.length > MAX_LENGTH) {
|
|
59
|
+
displayValue = '...' + displayValue.slice(-(MAX_LENGTH - 3));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else if (displayValue.length > MAX_LENGTH) {
|
|
63
|
+
displayValue = `${displayValue.substring(0, MAX_LENGTH - 3)}...`;
|
|
64
|
+
}
|
|
65
|
+
segments.push(`${key}: '${displayValue}'`);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
const jsonValue = JSON.stringify(value);
|
|
69
|
+
const displayValue = jsonValue.length > MAX_LENGTH
|
|
70
|
+
? `${jsonValue.substring(0, MAX_LENGTH - 3)}...`
|
|
71
|
+
: jsonValue;
|
|
72
|
+
segments.push(`${key}: ${displayValue}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return segments.join(', ');
|
|
76
|
+
};
|
|
77
|
+
const pushToolCalls = (lines, toolCalls, indent, maxToolCalls) => {
|
|
78
|
+
if (toolCalls.length === 0) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const grouped = groupToolCalls(toolCalls);
|
|
82
|
+
if (grouped.length > maxToolCalls) {
|
|
83
|
+
const overflow = grouped.length - maxToolCalls;
|
|
84
|
+
lines.push(`${indent}↳ ...${overflow} more tool calls...`);
|
|
85
|
+
}
|
|
86
|
+
const visible = grouped.slice(-maxToolCalls);
|
|
87
|
+
for (const group of visible) {
|
|
88
|
+
const params = formatParameters(group.toolCall.parameters);
|
|
89
|
+
const countText = group.count > 1 ? ` ${group.count}x` : '';
|
|
90
|
+
lines.push(`${indent}↳ ${group.toolCall.name}(${params})${countText}`.trimEnd());
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const calculateStats = (todos) => ({
|
|
94
|
+
total: todos.length,
|
|
95
|
+
completed: todos.filter((todo) => todo.status === 'completed').length,
|
|
96
|
+
inProgress: todos.filter((todo) => todo.status === 'in_progress').length,
|
|
97
|
+
pending: todos.filter((todo) => todo.status === 'pending').length,
|
|
98
|
+
});
|
|
99
|
+
const formatTodoEntry = (todo) => {
|
|
100
|
+
const marker = STATUS_ICONS[todo.status];
|
|
101
|
+
const currentSuffix = todo.status === 'in_progress' ? ' ← current' : '';
|
|
102
|
+
const statusText = todo.status === 'in_progress' ? ' (in_progress)' : '';
|
|
103
|
+
return `${marker} ${todo.content}${statusText}${currentSuffix}`;
|
|
104
|
+
};
|
|
105
|
+
const mergeToolCalls = (todo, getLiveToolCalls) => {
|
|
106
|
+
const baseCalls = todo.toolCalls ?? [];
|
|
107
|
+
if (!getLiveToolCalls) {
|
|
108
|
+
return baseCalls;
|
|
109
|
+
}
|
|
110
|
+
const seen = new Set(baseCalls.map((call) => call.id));
|
|
111
|
+
const liveCalls = getLiveToolCalls(todo.id).filter((call) => {
|
|
112
|
+
if (seen.has(call.id)) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
seen.add(call.id);
|
|
116
|
+
return true;
|
|
117
|
+
});
|
|
118
|
+
return [...baseCalls, ...liveCalls];
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Produces a textual representation of todos that mirrors the information shown in the Ink Todo panel.
|
|
122
|
+
*/
|
|
123
|
+
export const formatTodoListForDisplay = (todos, options = {}) => {
|
|
124
|
+
const header = options.header ?? DEFAULT_HEADER;
|
|
125
|
+
const maxToolCalls = options.maxToolCalls ?? DEFAULT_MAX_TOOL_CALLS;
|
|
126
|
+
const includeSummary = options.includeSummary ?? true;
|
|
127
|
+
if (todos.length === 0) {
|
|
128
|
+
return `${header}\n\nNo todos found.\n\nUse todo_write to create a task list when working on multi-step projects.`;
|
|
129
|
+
}
|
|
130
|
+
const lines = [header, ''];
|
|
131
|
+
if (includeSummary) {
|
|
132
|
+
const stats = calculateStats(todos);
|
|
133
|
+
lines.push(`${stats.total} tasks: ${stats.completed} completed, ${stats.inProgress} in progress, ${stats.pending} pending`);
|
|
134
|
+
lines.push('');
|
|
135
|
+
}
|
|
136
|
+
const orderedTodos = orderTodos(todos);
|
|
137
|
+
for (const todo of orderedTodos) {
|
|
138
|
+
lines.push(formatTodoEntry(todo));
|
|
139
|
+
if (todo.subtasks) {
|
|
140
|
+
for (const subtask of todo.subtasks) {
|
|
141
|
+
lines.push(` • ${subtask.content}`);
|
|
142
|
+
// eslint-disable-next-line sonarjs/nested-control-flow -- Existing structure is intentionally preserved; refactoring this boundary is outside the lint slice.
|
|
143
|
+
if (subtask.toolCalls && subtask.toolCalls.length > 0) {
|
|
144
|
+
pushToolCalls(lines, subtask.toolCalls, ' ', maxToolCalls);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const combinedToolCalls = mergeToolCalls(todo, options.getLiveToolCalls);
|
|
149
|
+
pushToolCalls(lines, combinedToolCalls, ' ', maxToolCalls);
|
|
150
|
+
lines.push('');
|
|
151
|
+
}
|
|
152
|
+
return lines.join('\n').trimEnd();
|
|
153
|
+
};
|
|
154
|
+
const orderTodos = (todos) =>
|
|
155
|
+
// Sort by status only, preserving original array order within each status group
|
|
156
|
+
[...todos].sort((a, b) => STATUS_ORDER[a.status] - STATUS_ORDER[b.status]);
|
|
157
|
+
//# sourceMappingURL=todoFormatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todoFormatter.js","sourceRoot":"","sources":["../../../src/utils/todoFormatter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,MAAM,YAAY,GAAmC;IACnD,WAAW,EAAE,GAAG;IAChB,OAAO,EAAE,GAAG;IACZ,SAAS,EAAE,EAAE;CACd,CAAC;AAEF,MAAM,YAAY,GAAmC;IACnD,WAAW,EAAE,CAAC;IACd,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,CAAC;CACb,CAAC;AAEF,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAC1C,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,SAAyB,EACN,EAAE;IACrB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,IAAI,YAAY,GAAoB;QAClC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QACtB,KAAK,EAAE,CAAC;KACT,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;QACvC,IACE,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;YAC9B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAC1E,CAAC;YACD,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3B,YAAY,GAAG;gBACb,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,CAAC;aACT,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,UAAmC,EAAU,EAAE;IACvE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,EAAE,CAAC;IAEtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,YAAY,GAAG,KAAK,CAAC;YAEzB,IACE,GAAG,KAAK,WAAW;gBACnB,GAAG,KAAK,eAAe;gBACvB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EACnB,CAAC;gBACD,8JAA8J;gBAC9J,IAAI,YAAY,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;oBACrC,YAAY,GAAG,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;iBAAM,IAAI,YAAY,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;gBAC5C,YAAY,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC;YACnE,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,YAAY,GAAG,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,YAAY,GAChB,SAAS,CAAC,MAAM,GAAG,UAAU;gBAC3B,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,KAAK;gBAChD,CAAC,CAAC,SAAS,CAAC;YAChB,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,YAAY,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CACpB,KAAe,EACf,SAAyB,EACzB,MAAc,EACd,YAAoB,EACpB,EAAE;IACF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,QAAQ,QAAQ,qBAAqB,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,KAAK,CAAC,IAAI,CACR,GAAG,MAAM,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC,OAAO,EAAE,CACrE,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC;IACzC,KAAK,EAAE,KAAK,CAAC,MAAM;IACnB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM;IACrE,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,MAAM;IACxE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;CAClE,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CAAC,IAAU,EAAU,EAAE;IAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,GAAG,UAAU,GAAG,aAAa,EAAE,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACrB,IAAU,EACV,gBAAqD,EACrC,EAAE;IAClB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IACvC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1D,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,SAAS,EAAE,GAAG,SAAS,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,KAAa,EACb,UAAgC,EAAE,EAC1B,EAAE;IACV,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC;IAChD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,sBAAsB,CAAC;IACpE,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;IAEtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,MAAM,kGAAkG,CAAC;IACrH,CAAC;IAED,MAAM,KAAK,GAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CACR,GAAG,KAAK,CAAC,KAAK,WAAW,KAAK,CAAC,SAAS,eAAe,KAAK,CAAC,UAAU,iBAAiB,KAAK,CAAC,OAAO,UAAU,CAChH,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QAElC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrC,8JAA8J;gBAC9J,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtD,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,iBAAiB,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACzE,aAAa,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AACpC,CAAC,CAAC;AACF,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE;AAC3C,gFAAgF;AAChF,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { Todo } from '../types/todo-schemas.js';
|
|
7
|
+
export interface TodoStateChange {
|
|
8
|
+
added: Todo[];
|
|
9
|
+
removed: Todo[];
|
|
10
|
+
statusChanged: Array<{
|
|
11
|
+
todo: Todo;
|
|
12
|
+
oldStatus: Todo['status'];
|
|
13
|
+
newStatus: Todo['status'];
|
|
14
|
+
}>;
|
|
15
|
+
}
|
|
16
|
+
export declare class TodoReminderService {
|
|
17
|
+
private static readonly EMPTY_TODO_REMINDER;
|
|
18
|
+
calculateStateChange(oldTodos: Todo[], newTodos: Todo[]): TodoStateChange;
|
|
19
|
+
shouldGenerateReminder(stateChange: TodoStateChange): boolean;
|
|
20
|
+
getReminderForStateChange(stateChange: TodoStateChange): string | undefined;
|
|
21
|
+
getReminderForEmptyTodos(isComplexTask: boolean): string;
|
|
22
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export class TodoReminderService {
|
|
7
|
+
static EMPTY_TODO_REMINDER = `This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware. If you are working on tasks that would benefit from a todo list please use the TodoWrite tool to create one. If not, please feel free to ignore. Again do not mention this message to the user.`;
|
|
8
|
+
calculateStateChange(oldTodos, newTodos) {
|
|
9
|
+
const oldById = new Map(oldTodos.map((todo) => [todo.id, todo]));
|
|
10
|
+
const newById = new Map(newTodos.map((todo) => [todo.id, todo]));
|
|
11
|
+
const added = newTodos.filter((todo) => !oldById.has(todo.id));
|
|
12
|
+
const removed = oldTodos.filter((todo) => !newById.has(todo.id));
|
|
13
|
+
const statusChanged = newTodos.flatMap((todo) => {
|
|
14
|
+
const oldTodo = oldById.get(todo.id);
|
|
15
|
+
if (!oldTodo || oldTodo.status === todo.status) {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
return [
|
|
19
|
+
{
|
|
20
|
+
todo,
|
|
21
|
+
oldStatus: oldTodo.status,
|
|
22
|
+
newStatus: todo.status,
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
});
|
|
26
|
+
return { added, removed, statusChanged };
|
|
27
|
+
}
|
|
28
|
+
shouldGenerateReminder(stateChange) {
|
|
29
|
+
return (stateChange.added.length > 0 ||
|
|
30
|
+
stateChange.removed.length > 0 ||
|
|
31
|
+
stateChange.statusChanged.length > 0);
|
|
32
|
+
}
|
|
33
|
+
getReminderForStateChange(stateChange) {
|
|
34
|
+
if (!this.shouldGenerateReminder(stateChange)) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
return 'Todo list updated. Continue using TodoWrite to keep progress current.';
|
|
38
|
+
}
|
|
39
|
+
getReminderForEmptyTodos(isComplexTask) {
|
|
40
|
+
return isComplexTask ? TodoReminderService.EMPTY_TODO_REMINDER : '';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=todoReminderService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todoReminderService.js","sourceRoot":"","sources":["../../../src/utils/todoReminderService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,MAAM,OAAO,mBAAmB;IACtB,MAAM,CAAU,mBAAmB,GAAG,uUAAuU,CAAC;IAEtX,oBAAoB,CAAC,QAAgB,EAAE,QAAgB;QACrD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAEjE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC/C,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO;gBACL;oBACE,IAAI;oBACJ,SAAS,EAAE,OAAO,CAAC,MAAM;oBACzB,SAAS,EAAE,IAAI,CAAC,MAAM;iBACvB;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IAC3C,CAAC;IAED,sBAAsB,CAAC,WAA4B;QACjD,OAAO,CACL,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAC5B,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAC9B,WAAW,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CACrC,CAAC;IACJ,CAAC;IAED,yBAAyB,CAAC,WAA4B;QACpD,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9C,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,uEAAuE,CAAC;IACjF,CAAC;IAED,wBAAwB,CAAC,aAAsB;QAC7C,OAAO,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,CAAC"}
|