@theia/ai-ide 1.75.0-next.8 → 1.75.0
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/lib/browser/ai-allow-all-mode-chat-banner.js +2 -20
- package/lib/browser/ai-allow-all-mode-chat-banner.js.map +1 -1
- package/lib/browser/ai-configuration/agent-icon.d.ts +16 -0
- package/lib/browser/ai-configuration/agent-icon.d.ts.map +1 -0
- package/lib/browser/ai-configuration/agent-icon.js +38 -0
- package/lib/browser/ai-configuration/agent-icon.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-breadcrumbs-contribution.d.ts +36 -0
- package/lib/browser/ai-configuration/ai-configuration-breadcrumbs-contribution.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-breadcrumbs-contribution.js +163 -0
- package/lib/browser/ai-configuration/ai-configuration-breadcrumbs-contribution.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-detail-widget.d.ts +50 -0
- package/lib/browser/ai-configuration/ai-configuration-detail-widget.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-detail-widget.js +208 -0
- package/lib/browser/ai-configuration/ai-configuration-detail-widget.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-detail-widget.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/ai-configuration-detail-widget.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-detail-widget.spec.js +139 -0
- package/lib/browser/ai-configuration/ai-configuration-detail-widget.spec.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-label-provider-contribution.d.ts +13 -0
- package/lib/browser/ai-configuration/ai-configuration-label-provider-contribution.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-label-provider-contribution.js +48 -0
- package/lib/browser/ai-configuration/ai-configuration-label-provider-contribution.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-open-preference-renderer.d.ts +22 -0
- package/lib/browser/ai-configuration/ai-configuration-open-preference-renderer.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-open-preference-renderer.js +72 -0
- package/lib/browser/ai-configuration/ai-configuration-open-preference-renderer.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-preference-ownership.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/ai-configuration-preference-ownership.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-preference-ownership.spec.js +126 -0
- package/lib/browser/ai-configuration/ai-configuration-preference-ownership.spec.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-resource.d.ts +10 -0
- package/lib/browser/ai-configuration/ai-configuration-resource.d.ts.map +1 -0
- package/lib/browser/ai-configuration/{components/configuration-section.js → ai-configuration-resource.js} +11 -11
- package/lib/browser/ai-configuration/ai-configuration-resource.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-search-widget.d.ts +29 -0
- package/lib/browser/ai-configuration/ai-configuration-search-widget.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-search-widget.js +106 -0
- package/lib/browser/ai-configuration/ai-configuration-search-widget.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-search.d.ts +18 -0
- package/lib/browser/ai-configuration/ai-configuration-search.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-search.js +45 -0
- package/lib/browser/ai-configuration/ai-configuration-search.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-search.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/ai-configuration-search.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-search.spec.js +79 -0
- package/lib/browser/ai-configuration/ai-configuration-search.spec.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-tree-model.d.ts +8 -0
- package/lib/browser/ai-configuration/ai-configuration-tree-model.d.ts.map +1 -0
- package/lib/browser/ai-configuration/{base/ai-configuration-base-widget.js → ai-configuration-tree-model.js} +11 -14
- package/lib/browser/ai-configuration/ai-configuration-tree-model.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-tree-nodes.d.ts +57 -0
- package/lib/browser/ai-configuration/ai-configuration-tree-nodes.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-tree-nodes.js +134 -0
- package/lib/browser/ai-configuration/ai-configuration-tree-nodes.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-tree-nodes.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/ai-configuration-tree-nodes.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-tree-nodes.spec.js +134 -0
- package/lib/browser/ai-configuration/ai-configuration-tree-nodes.spec.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-tree-widget.d.ts +96 -0
- package/lib/browser/ai-configuration/ai-configuration-tree-widget.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-tree-widget.js +407 -0
- package/lib/browser/ai-configuration/ai-configuration-tree-widget.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-view-contribution.d.ts +38 -4
- package/lib/browser/ai-configuration/ai-configuration-view-contribution.d.ts.map +1 -1
- package/lib/browser/ai-configuration/ai-configuration-view-contribution.js +151 -19
- package/lib/browser/ai-configuration/ai-configuration-view-contribution.js.map +1 -1
- package/lib/browser/ai-configuration/ai-configuration-widget.d.ts +21 -23
- package/lib/browser/ai-configuration/ai-configuration-widget.d.ts.map +1 -1
- package/lib/browser/ai-configuration/ai-configuration-widget.js +102 -70
- package/lib/browser/ai-configuration/ai-configuration-widget.js.map +1 -1
- package/lib/browser/ai-configuration/categories/agent-capabilities-settings.d.ts +56 -0
- package/lib/browser/ai-configuration/categories/agent-capabilities-settings.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/agent-capabilities-settings.js +195 -0
- package/lib/browser/ai-configuration/categories/agent-capabilities-settings.js.map +1 -0
- package/lib/browser/ai-configuration/categories/agent-capabilities-settings.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/categories/agent-capabilities-settings.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/agent-capabilities-settings.spec.js +140 -0
- package/lib/browser/ai-configuration/categories/agent-capabilities-settings.spec.js.map +1 -0
- package/lib/browser/ai-configuration/categories/agent-chips.d.ts +15 -0
- package/lib/browser/ai-configuration/categories/agent-chips.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/agent-chips.js +19 -0
- package/lib/browser/ai-configuration/categories/agent-chips.js.map +1 -0
- package/lib/browser/ai-configuration/categories/agent-detail-model.d.ts +37 -0
- package/lib/browser/ai-configuration/categories/agent-detail-model.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/agent-detail-model.js +99 -0
- package/lib/browser/ai-configuration/categories/agent-detail-model.js.map +1 -0
- package/lib/browser/ai-configuration/categories/agent-detail-view.d.ts +28 -0
- package/lib/browser/ai-configuration/categories/agent-detail-view.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/agent-detail-view.js +135 -0
- package/lib/browser/ai-configuration/categories/agent-detail-view.js.map +1 -0
- package/lib/browser/ai-configuration/categories/agents-configuration-category.d.ts +78 -0
- package/lib/browser/ai-configuration/categories/agents-configuration-category.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/agents-configuration-category.js +352 -0
- package/lib/browser/ai-configuration/categories/agents-configuration-category.js.map +1 -0
- package/lib/browser/ai-configuration/categories/agents-configuration-category.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/categories/agents-configuration-category.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/agents-configuration-category.spec.js +99 -0
- package/lib/browser/ai-configuration/categories/agents-configuration-category.spec.js.map +1 -0
- package/lib/browser/ai-configuration/categories/general-configuration-category.d.ts +93 -0
- package/lib/browser/ai-configuration/categories/general-configuration-category.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/general-configuration-category.js +313 -0
- package/lib/browser/ai-configuration/categories/general-configuration-category.js.map +1 -0
- package/lib/browser/ai-configuration/categories/general-configuration-category.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/categories/general-configuration-category.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/general-configuration-category.spec.js +213 -0
- package/lib/browser/ai-configuration/categories/general-configuration-category.spec.js.map +1 -0
- package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.d.ts +53 -0
- package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.js +241 -0
- package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.js.map +1 -0
- package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.spec.js +75 -0
- package/lib/browser/ai-configuration/categories/model-aliases-configuration-category.spec.js.map +1 -0
- package/lib/browser/ai-configuration/categories/models-configuration-category.d.ts +72 -0
- package/lib/browser/ai-configuration/categories/models-configuration-category.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/models-configuration-category.js +227 -0
- package/lib/browser/ai-configuration/categories/models-configuration-category.js.map +1 -0
- package/lib/browser/ai-configuration/categories/models-configuration-category.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/categories/models-configuration-category.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/models-configuration-category.spec.js +145 -0
- package/lib/browser/ai-configuration/categories/models-configuration-category.spec.js.map +1 -0
- package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.d.ts +114 -0
- package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.js +341 -0
- package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.js.map +1 -0
- package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.spec.js +199 -0
- package/lib/browser/ai-configuration/categories/prompt-snippets-configuration-category.spec.js.map +1 -0
- package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.d.ts +84 -0
- package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.js +341 -0
- package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.js.map +1 -0
- package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.spec.js +184 -0
- package/lib/browser/ai-configuration/categories/prompts-and-skills-configuration-category.spec.js.map +1 -0
- package/lib/browser/ai-configuration/categories/token-usage-configuration-category.d.ts +38 -0
- package/lib/browser/ai-configuration/categories/token-usage-configuration-category.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/token-usage-configuration-category.js +130 -0
- package/lib/browser/ai-configuration/categories/token-usage-configuration-category.js.map +1 -0
- package/lib/browser/ai-configuration/categories/token-usage-configuration-category.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/categories/token-usage-configuration-category.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/token-usage-configuration-category.spec.js +51 -0
- package/lib/browser/ai-configuration/categories/token-usage-configuration-category.spec.js.map +1 -0
- package/lib/browser/ai-configuration/categories/tools-configuration-category.d.ts +60 -0
- package/lib/browser/ai-configuration/categories/tools-configuration-category.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/tools-configuration-category.js +302 -0
- package/lib/browser/ai-configuration/categories/tools-configuration-category.js.map +1 -0
- package/lib/browser/ai-configuration/categories/tools-configuration-category.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/categories/tools-configuration-category.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/tools-configuration-category.spec.js +111 -0
- package/lib/browser/ai-configuration/categories/tools-configuration-category.spec.js.map +1 -0
- package/lib/browser/ai-configuration/categories/variables-configuration-category.d.ts +72 -0
- package/lib/browser/ai-configuration/categories/variables-configuration-category.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/variables-configuration-category.js +245 -0
- package/lib/browser/ai-configuration/categories/variables-configuration-category.js.map +1 -0
- package/lib/browser/ai-configuration/categories/variables-configuration-category.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/categories/variables-configuration-category.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/categories/variables-configuration-category.spec.js +131 -0
- package/lib/browser/ai-configuration/categories/variables-configuration-category.spec.js.map +1 -0
- package/lib/browser/ai-configuration/components/agent-notification-settings.d.ts +6 -2
- package/lib/browser/ai-configuration/components/agent-notification-settings.d.ts.map +1 -1
- package/lib/browser/ai-configuration/components/agent-notification-settings.js +15 -21
- package/lib/browser/ai-configuration/components/agent-notification-settings.js.map +1 -1
- package/lib/browser/ai-configuration/language-model-renderer.d.ts +25 -1
- package/lib/browser/ai-configuration/language-model-renderer.d.ts.map +1 -1
- package/lib/browser/ai-configuration/language-model-renderer.js +159 -63
- package/lib/browser/ai-configuration/language-model-renderer.js.map +1 -1
- package/lib/browser/ai-configuration/language-model-renderer.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/language-model-renderer.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/language-model-renderer.spec.js +93 -0
- package/lib/browser/ai-configuration/language-model-renderer.spec.js.map +1 -0
- package/lib/browser/ai-sessions-widget.js +12 -16
- package/lib/browser/ai-sessions-widget.js.map +1 -1
- package/lib/browser/app-tester-chat-agent.d.ts +2 -0
- package/lib/browser/app-tester-chat-agent.d.ts.map +1 -1
- package/lib/browser/app-tester-chat-agent.js +5 -0
- package/lib/browser/app-tester-chat-agent.js.map +1 -1
- package/lib/browser/architect-agent.d.ts +2 -0
- package/lib/browser/architect-agent.d.ts.map +1 -1
- package/lib/browser/architect-agent.js +5 -0
- package/lib/browser/architect-agent.js.map +1 -1
- package/lib/browser/architect-prompt-template.d.ts.map +1 -1
- package/lib/browser/architect-prompt-template.js +7 -0
- package/lib/browser/architect-prompt-template.js.map +1 -1
- package/lib/browser/chat-session-item.d.ts.map +1 -1
- package/lib/browser/chat-session-item.js +17 -30
- package/lib/browser/chat-session-item.js.map +1 -1
- package/lib/browser/chat-session-list-components.js +7 -30
- package/lib/browser/chat-session-list-components.js.map +1 -1
- package/lib/browser/chat-session-list-service.d.ts +2 -1
- package/lib/browser/chat-session-list-service.d.ts.map +1 -1
- package/lib/browser/chat-session-list-service.js +6 -1
- package/lib/browser/chat-session-list-service.js.map +1 -1
- package/lib/browser/chat-sessions-welcome-message-provider.js +3 -21
- package/lib/browser/chat-sessions-welcome-message-provider.js.map +1 -1
- package/lib/browser/code-reviewer-agent.d.ts +2 -0
- package/lib/browser/code-reviewer-agent.d.ts.map +1 -1
- package/lib/browser/code-reviewer-agent.js +5 -0
- package/lib/browser/code-reviewer-agent.js.map +1 -1
- package/lib/browser/coder-agent.d.ts +2 -0
- package/lib/browser/coder-agent.d.ts.map +1 -1
- package/lib/browser/coder-agent.js +6 -1
- package/lib/browser/coder-agent.js.map +1 -1
- package/lib/browser/context-file-validation-service-impl.spec.js +2 -0
- package/lib/browser/context-file-validation-service-impl.spec.js.map +1 -1
- package/lib/browser/create-skill-agent.d.ts +2 -0
- package/lib/browser/create-skill-agent.d.ts.map +1 -1
- package/lib/browser/create-skill-agent.js +5 -0
- package/lib/browser/create-skill-agent.js.map +1 -1
- package/lib/browser/explore-agent.d.ts +2 -0
- package/lib/browser/explore-agent.d.ts.map +1 -1
- package/lib/browser/explore-agent.js +5 -0
- package/lib/browser/explore-agent.js.map +1 -1
- package/lib/browser/file-changeset-functions.d.ts +7 -1
- package/lib/browser/file-changeset-functions.d.ts.map +1 -1
- package/lib/browser/file-changeset-functions.js +62 -20
- package/lib/browser/file-changeset-functions.js.map +1 -1
- package/lib/browser/file-changeset-functions.spec.js +130 -1
- package/lib/browser/file-changeset-functions.spec.js.map +1 -1
- package/lib/browser/frontend-module.d.ts.map +1 -1
- package/lib/browser/frontend-module.js +65 -59
- package/lib/browser/frontend-module.js.map +1 -1
- package/lib/browser/github-chat-agent.d.ts +2 -1
- package/lib/browser/github-chat-agent.d.ts.map +1 -1
- package/lib/browser/github-chat-agent.js +5 -0
- package/lib/browser/github-chat-agent.js.map +1 -1
- package/lib/browser/github-repo-variable-contribution.d.ts +2 -1
- package/lib/browser/github-repo-variable-contribution.d.ts.map +1 -1
- package/lib/browser/github-repo-variable-contribution.js +6 -1
- package/lib/browser/github-repo-variable-contribution.js.map +1 -1
- package/lib/browser/ide-chat-welcome-message-provider.d.ts.map +1 -1
- package/lib/browser/ide-chat-welcome-message-provider.js +31 -118
- package/lib/browser/ide-chat-welcome-message-provider.js.map +1 -1
- package/lib/browser/memory-capability-contribution.d.ts +8 -0
- package/lib/browser/memory-capability-contribution.d.ts.map +1 -0
- package/lib/browser/memory-capability-contribution.js +88 -0
- package/lib/browser/memory-capability-contribution.js.map +1 -0
- package/lib/browser/memory-capability-contribution.spec.d.ts +2 -0
- package/lib/browser/memory-capability-contribution.spec.d.ts.map +1 -0
- package/lib/browser/memory-capability-contribution.spec.js +74 -0
- package/lib/browser/memory-capability-contribution.spec.js.map +1 -0
- package/lib/browser/memory-directory-variable-contribution.d.ts +41 -0
- package/lib/browser/memory-directory-variable-contribution.d.ts.map +1 -0
- package/lib/browser/memory-directory-variable-contribution.js +107 -0
- package/lib/browser/memory-directory-variable-contribution.js.map +1 -0
- package/lib/browser/memory-directory-variable-contribution.spec.d.ts +2 -0
- package/lib/browser/memory-directory-variable-contribution.spec.d.ts.map +1 -0
- package/lib/browser/memory-directory-variable-contribution.spec.js +98 -0
- package/lib/browser/memory-directory-variable-contribution.spec.js.map +1 -0
- package/lib/browser/open-editors-hint-contribution.d.ts +7 -0
- package/lib/browser/open-editors-hint-contribution.d.ts.map +1 -0
- package/lib/browser/open-editors-hint-contribution.js +43 -0
- package/lib/browser/open-editors-hint-contribution.js.map +1 -0
- package/lib/browser/project-info-agent.d.ts +2 -0
- package/lib/browser/project-info-agent.d.ts.map +1 -1
- package/lib/browser/project-info-agent.js +5 -0
- package/lib/browser/project-info-agent.js.map +1 -1
- package/lib/browser/review/pr-review-agent.d.ts +2 -0
- package/lib/browser/review/pr-review-agent.d.ts.map +1 -1
- package/lib/browser/review/pr-review-agent.js +5 -0
- package/lib/browser/review/pr-review-agent.js.map +1 -1
- package/lib/browser/summarize-session-command-contribution.d.ts +2 -1
- package/lib/browser/summarize-session-command-contribution.d.ts.map +1 -1
- package/lib/browser/summarize-session-command-contribution.js +6 -1
- package/lib/browser/summarize-session-command-contribution.js.map +1 -1
- package/lib/browser/task-context-file-storage-service.d.ts.map +1 -1
- package/lib/browser/task-context-file-storage-service.js +1 -0
- package/lib/browser/task-context-file-storage-service.js.map +1 -1
- package/lib/browser/todo-tool-renderer.js +11 -19
- package/lib/browser/todo-tool-renderer.js.map +1 -1
- package/lib/browser/user-interaction-tool-renderer.js +39 -83
- package/lib/browser/user-interaction-tool-renderer.js.map +1 -1
- package/lib/browser/user-interaction-tool.d.ts +2 -0
- package/lib/browser/user-interaction-tool.d.ts.map +1 -1
- package/lib/browser/user-interaction-tool.js +7 -1
- package/lib/browser/user-interaction-tool.js.map +1 -1
- package/lib/browser/user-interaction-tool.spec.js +4 -2
- package/lib/browser/user-interaction-tool.spec.js.map +1 -1
- package/lib/browser/workspace-functions.d.ts +45 -7
- package/lib/browser/workspace-functions.d.ts.map +1 -1
- package/lib/browser/workspace-functions.js +108 -70
- package/lib/browser/workspace-functions.js.map +1 -1
- package/lib/browser/workspace-functions.spec.js +139 -9
- package/lib/browser/workspace-functions.spec.js.map +1 -1
- package/lib/browser/workspace-launch-provider.spec.js +3 -0
- package/lib/browser/workspace-launch-provider.spec.js.map +1 -1
- package/lib/browser/workspace-search-provider.d.ts.map +1 -1
- package/lib/browser/workspace-search-provider.js +4 -7
- package/lib/browser/workspace-search-provider.js.map +1 -1
- package/lib/browser/workspace-search-provider.spec.js +1 -2
- package/lib/browser/workspace-search-provider.spec.js.map +1 -1
- package/lib/browser/workspace-task-provider.spec.js +4 -0
- package/lib/browser/workspace-task-provider.spec.js.map +1 -1
- package/lib/common/coder-replace-prompt-template.d.ts +0 -2
- package/lib/common/coder-replace-prompt-template.d.ts.map +1 -1
- package/lib/common/coder-replace-prompt-template.js +10 -11
- package/lib/common/coder-replace-prompt-template.js.map +1 -1
- package/lib/common/command-chat-agents.d.ts +2 -1
- package/lib/common/command-chat-agents.d.ts.map +1 -1
- package/lib/common/command-chat-agents.js +6 -1
- package/lib/common/command-chat-agents.js.map +1 -1
- package/lib/common/open-editors-hint-fragment-id.d.ts +2 -0
- package/lib/common/open-editors-hint-fragment-id.d.ts.map +1 -0
- package/lib/{browser/ai-configuration/components/empty-state.js → common/open-editors-hint-fragment-id.js} +5 -11
- package/lib/common/open-editors-hint-fragment-id.js.map +1 -0
- package/lib/common/orchestrator-chat-agent.d.ts +2 -1
- package/lib/common/orchestrator-chat-agent.d.ts.map +1 -1
- package/lib/common/orchestrator-chat-agent.js +5 -0
- package/lib/common/orchestrator-chat-agent.js.map +1 -1
- package/lib/common/universal-chat-agent.d.ts +2 -0
- package/lib/common/universal-chat-agent.d.ts.map +1 -1
- package/lib/common/universal-chat-agent.js +5 -0
- package/lib/common/universal-chat-agent.js.map +1 -1
- package/lib/common/universal-prompt-template.d.ts.map +1 -1
- package/lib/common/universal-prompt-template.js +3 -0
- package/lib/common/universal-prompt-template.js.map +1 -1
- package/lib/common/workspace-preferences.js +2 -2
- package/lib/common/workspace-preferences.js.map +1 -1
- package/lib/common/workspace-search-provider-util.d.ts +2 -1
- package/lib/common/workspace-search-provider-util.d.ts.map +1 -1
- package/lib/common/workspace-search-provider-util.js +3 -2
- package/lib/common/workspace-search-provider-util.js.map +1 -1
- package/lib/common/workspace-search-provider-util.spec.d.ts +2 -0
- package/lib/common/workspace-search-provider-util.spec.d.ts.map +1 -0
- package/lib/common/workspace-search-provider-util.spec.js +55 -0
- package/lib/common/workspace-search-provider-util.spec.js.map +1 -0
- package/lib/node/github-repo-service-impl.d.ts +2 -0
- package/lib/node/github-repo-service-impl.d.ts.map +1 -1
- package/lib/node/github-repo-service-impl.js +7 -1
- package/lib/node/github-repo-service-impl.js.map +1 -1
- package/package.json +26 -25
- package/src/browser/ai-configuration/agent-icon.ts +37 -0
- package/src/browser/ai-configuration/ai-configuration-breadcrumbs-contribution.ts +164 -0
- package/src/browser/ai-configuration/ai-configuration-detail-widget.spec.ts +165 -0
- package/src/browser/ai-configuration/ai-configuration-detail-widget.tsx +237 -0
- package/src/browser/ai-configuration/ai-configuration-label-provider-contribution.ts +47 -0
- package/src/browser/ai-configuration/ai-configuration-open-preference-renderer.ts +64 -0
- package/src/browser/ai-configuration/ai-configuration-preference-ownership.spec.ts +135 -0
- package/src/browser/ai-configuration/{components/configuration-section.tsx → ai-configuration-resource.ts} +9 -19
- package/src/browser/ai-configuration/ai-configuration-search-widget.tsx +135 -0
- package/src/browser/ai-configuration/ai-configuration-search.spec.ts +91 -0
- package/src/browser/ai-configuration/ai-configuration-search.ts +43 -0
- package/src/browser/ai-configuration/{components/empty-state.tsx → ai-configuration-tree-model.ts} +7 -11
- package/src/browser/ai-configuration/ai-configuration-tree-nodes.spec.ts +150 -0
- package/src/browser/ai-configuration/ai-configuration-tree-nodes.ts +167 -0
- package/src/browser/ai-configuration/ai-configuration-tree-widget.tsx +457 -0
- package/src/browser/ai-configuration/ai-configuration-view-contribution.ts +156 -18
- package/src/browser/ai-configuration/ai-configuration-widget.tsx +107 -75
- package/src/browser/ai-configuration/categories/agent-capabilities-settings.spec.ts +161 -0
- package/src/browser/ai-configuration/categories/agent-capabilities-settings.tsx +340 -0
- package/src/browser/ai-configuration/categories/agent-chips.tsx +51 -0
- package/src/browser/ai-configuration/categories/agent-detail-model.ts +152 -0
- package/src/browser/ai-configuration/categories/agent-detail-view.tsx +329 -0
- package/src/browser/ai-configuration/categories/agents-configuration-category.spec.ts +119 -0
- package/src/browser/ai-configuration/categories/agents-configuration-category.tsx +431 -0
- package/src/browser/ai-configuration/categories/general-configuration-category.spec.ts +225 -0
- package/src/browser/ai-configuration/categories/general-configuration-category.tsx +465 -0
- package/src/browser/ai-configuration/categories/model-aliases-configuration-category.spec.ts +87 -0
- package/src/browser/ai-configuration/categories/model-aliases-configuration-category.tsx +286 -0
- package/src/browser/ai-configuration/categories/models-configuration-category.spec.ts +167 -0
- package/src/browser/ai-configuration/categories/models-configuration-category.tsx +264 -0
- package/src/browser/ai-configuration/categories/prompt-snippets-configuration-category.spec.ts +250 -0
- package/src/browser/ai-configuration/categories/prompt-snippets-configuration-category.tsx +438 -0
- package/src/browser/ai-configuration/categories/prompts-and-skills-configuration-category.spec.ts +226 -0
- package/src/browser/ai-configuration/categories/prompts-and-skills-configuration-category.tsx +419 -0
- package/src/browser/ai-configuration/categories/token-usage-configuration-category.spec.ts +57 -0
- package/src/browser/ai-configuration/categories/token-usage-configuration-category.tsx +185 -0
- package/src/browser/ai-configuration/categories/tools-configuration-category.spec.ts +130 -0
- package/src/browser/ai-configuration/categories/tools-configuration-category.tsx +421 -0
- package/src/browser/ai-configuration/categories/variables-configuration-category.spec.ts +154 -0
- package/src/browser/ai-configuration/categories/variables-configuration-category.tsx +322 -0
- package/src/browser/ai-configuration/components/agent-notification-settings.tsx +38 -33
- package/src/browser/ai-configuration/language-model-renderer.spec.ts +100 -0
- package/src/browser/ai-configuration/language-model-renderer.tsx +244 -100
- package/src/browser/app-tester-chat-agent.ts +5 -2
- package/src/browser/architect-agent.ts +5 -2
- package/src/browser/architect-prompt-template.ts +7 -0
- package/src/browser/chat-session-item.tsx +2 -4
- package/src/browser/chat-session-list-service.ts +6 -3
- package/src/browser/code-reviewer-agent.ts +5 -2
- package/src/browser/coder-agent.ts +7 -5
- package/src/browser/context-file-validation-service-impl.spec.ts +3 -2
- package/src/browser/create-skill-agent.ts +5 -2
- package/src/browser/explore-agent.ts +5 -2
- package/src/browser/file-changeset-functions.spec.ts +158 -5
- package/src/browser/file-changeset-functions.ts +61 -23
- package/src/browser/frontend-module.ts +76 -63
- package/src/browser/github-chat-agent.ts +5 -2
- package/src/browser/github-repo-variable-contribution.ts +6 -3
- package/src/browser/ide-chat-welcome-message-provider.tsx +11 -11
- package/src/browser/memory-capability-contribution.spec.ts +85 -0
- package/src/browser/memory-capability-contribution.ts +86 -0
- package/src/browser/memory-directory-variable-contribution.spec.ts +113 -0
- package/src/browser/memory-directory-variable-contribution.ts +113 -0
- package/src/browser/open-editors-hint-contribution.ts +38 -0
- package/src/browser/project-info-agent.ts +5 -2
- package/src/browser/review/pr-review-agent.ts +5 -2
- package/src/browser/style/ai-configuration-base.css +0 -6
- package/src/browser/style/ai-configuration-shell.css +416 -0
- package/src/browser/style/ai-configuration-table.css +2 -15
- package/src/browser/style/index.css +220 -276
- package/src/browser/summarize-session-command-contribution.ts +6 -3
- package/src/browser/task-context-file-storage-service.ts +5 -2
- package/src/browser/user-interaction-tool.spec.ts +5 -2
- package/src/browser/user-interaction-tool.ts +6 -2
- package/src/browser/workspace-functions.spec.ts +163 -10
- package/src/browser/workspace-functions.ts +121 -72
- package/src/browser/workspace-launch-provider.spec.ts +4 -1
- package/src/browser/workspace-search-provider.spec.ts +1 -2
- package/src/browser/workspace-search-provider.ts +4 -7
- package/src/browser/workspace-task-provider.spec.ts +5 -1
- package/src/common/coder-replace-prompt-template.ts +9 -9
- package/src/common/command-chat-agents.ts +6 -2
- package/src/{browser/ai-configuration/base/ai-configuration-base-widget.tsx → common/open-editors-hint-fragment-id.ts} +2 -22
- package/src/common/orchestrator-chat-agent.ts +5 -2
- package/src/common/universal-chat-agent.ts +5 -2
- package/src/common/universal-prompt-template.ts +3 -0
- package/src/common/workspace-preferences.ts +2 -2
- package/src/common/workspace-search-provider-util.spec.ts +61 -0
- package/src/common/workspace-search-provider-util.ts +3 -2
- package/src/node/github-repo-service-impl.ts +6 -2
- package/lib/browser/ai-configuration/agent-configuration-widget.d.ts +0 -72
- package/lib/browser/ai-configuration/agent-configuration-widget.d.ts.map +0 -1
- package/lib/browser/ai-configuration/agent-configuration-widget.js +0 -620
- package/lib/browser/ai-configuration/agent-configuration-widget.js.map +0 -1
- package/lib/browser/ai-configuration/agent-configuration-widget.spec.d.ts +0 -2
- package/lib/browser/ai-configuration/agent-configuration-widget.spec.d.ts.map +0 -1
- package/lib/browser/ai-configuration/agent-configuration-widget.spec.js +0 -56
- package/lib/browser/ai-configuration/agent-configuration-widget.spec.js.map +0 -1
- package/lib/browser/ai-configuration/base/ai-card-grid-configuration-widget.d.ts +0 -31
- package/lib/browser/ai-configuration/base/ai-card-grid-configuration-widget.d.ts.map +0 -1
- package/lib/browser/ai-configuration/base/ai-card-grid-configuration-widget.js +0 -55
- package/lib/browser/ai-configuration/base/ai-card-grid-configuration-widget.js.map +0 -1
- package/lib/browser/ai-configuration/base/ai-configuration-base-widget.d.ts +0 -13
- package/lib/browser/ai-configuration/base/ai-configuration-base-widget.d.ts.map +0 -1
- package/lib/browser/ai-configuration/base/ai-configuration-base-widget.js.map +0 -1
- package/lib/browser/ai-configuration/base/ai-hierarchical-configuration-widget.d.ts +0 -23
- package/lib/browser/ai-configuration/base/ai-hierarchical-configuration-widget.d.ts.map +0 -1
- package/lib/browser/ai-configuration/base/ai-hierarchical-configuration-widget.js +0 -60
- package/lib/browser/ai-configuration/base/ai-hierarchical-configuration-widget.js.map +0 -1
- package/lib/browser/ai-configuration/base/ai-list-detail-configuration-widget.d.ts +0 -55
- package/lib/browser/ai-configuration/base/ai-list-detail-configuration-widget.d.ts.map +0 -1
- package/lib/browser/ai-configuration/base/ai-list-detail-configuration-widget.js +0 -96
- package/lib/browser/ai-configuration/base/ai-list-detail-configuration-widget.js.map +0 -1
- package/lib/browser/ai-configuration/base/ai-table-configuration-widget.d.ts +0 -44
- package/lib/browser/ai-configuration/base/ai-table-configuration-widget.d.ts.map +0 -1
- package/lib/browser/ai-configuration/base/ai-table-configuration-widget.js +0 -66
- package/lib/browser/ai-configuration/base/ai-table-configuration-widget.js.map +0 -1
- package/lib/browser/ai-configuration/components/configuration-section.d.ts +0 -12
- package/lib/browser/ai-configuration/components/configuration-section.d.ts.map +0 -1
- package/lib/browser/ai-configuration/components/configuration-section.js.map +0 -1
- package/lib/browser/ai-configuration/components/empty-state.d.ts +0 -10
- package/lib/browser/ai-configuration/components/empty-state.d.ts.map +0 -1
- package/lib/browser/ai-configuration/components/empty-state.js.map +0 -1
- package/lib/browser/ai-configuration/components/expandable-section.d.ts +0 -13
- package/lib/browser/ai-configuration/components/expandable-section.d.ts.map +0 -1
- package/lib/browser/ai-configuration/components/expandable-section.js +0 -31
- package/lib/browser/ai-configuration/components/expandable-section.js.map +0 -1
- package/lib/browser/ai-configuration/model-aliases-configuration-widget.d.ts +0 -26
- package/lib/browser/ai-configuration/model-aliases-configuration-widget.d.ts.map +0 -1
- package/lib/browser/ai-configuration/model-aliases-configuration-widget.js +0 -198
- package/lib/browser/ai-configuration/model-aliases-configuration-widget.js.map +0 -1
- package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.d.ts +0 -140
- package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.d.ts.map +0 -1
- package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.js +0 -508
- package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.js.map +0 -1
- package/lib/browser/ai-configuration/skills-configuration-widget.d.ts +0 -29
- package/lib/browser/ai-configuration/skills-configuration-widget.d.ts.map +0 -1
- package/lib/browser/ai-configuration/skills-configuration-widget.js +0 -166
- package/lib/browser/ai-configuration/skills-configuration-widget.js.map +0 -1
- package/lib/browser/ai-configuration/skills-configuration-widget.spec.d.ts +0 -2
- package/lib/browser/ai-configuration/skills-configuration-widget.spec.d.ts.map +0 -1
- package/lib/browser/ai-configuration/skills-configuration-widget.spec.js +0 -191
- package/lib/browser/ai-configuration/skills-configuration-widget.spec.js.map +0 -1
- package/lib/browser/ai-configuration/template-settings-renderer.d.ts +0 -9
- package/lib/browser/ai-configuration/template-settings-renderer.d.ts.map +0 -1
- package/lib/browser/ai-configuration/template-settings-renderer.js +0 -78
- package/lib/browser/ai-configuration/template-settings-renderer.js.map +0 -1
- package/lib/browser/ai-configuration/token-usage-configuration-widget.d.ts +0 -20
- package/lib/browser/ai-configuration/token-usage-configuration-widget.d.ts.map +0 -1
- package/lib/browser/ai-configuration/token-usage-configuration-widget.js +0 -170
- package/lib/browser/ai-configuration/token-usage-configuration-widget.js.map +0 -1
- package/lib/browser/ai-configuration/tools-configuration-widget.d.ts +0 -52
- package/lib/browser/ai-configuration/tools-configuration-widget.d.ts.map +0 -1
- package/lib/browser/ai-configuration/tools-configuration-widget.js +0 -357
- package/lib/browser/ai-configuration/tools-configuration-widget.js.map +0 -1
- package/lib/browser/ai-configuration/variable-configuration-widget.d.ts +0 -22
- package/lib/browser/ai-configuration/variable-configuration-widget.d.ts.map +0 -1
- package/lib/browser/ai-configuration/variable-configuration-widget.js +0 -133
- package/lib/browser/ai-configuration/variable-configuration-widget.js.map +0 -1
- package/src/browser/ai-configuration/agent-configuration-widget.spec.ts +0 -71
- package/src/browser/ai-configuration/agent-configuration-widget.tsx +0 -928
- package/src/browser/ai-configuration/base/ai-card-grid-configuration-widget.tsx +0 -72
- package/src/browser/ai-configuration/base/ai-hierarchical-configuration-widget.tsx +0 -51
- package/src/browser/ai-configuration/base/ai-list-detail-configuration-widget.tsx +0 -140
- package/src/browser/ai-configuration/base/ai-table-configuration-widget.tsx +0 -107
- package/src/browser/ai-configuration/components/expandable-section.tsx +0 -51
- package/src/browser/ai-configuration/model-aliases-configuration-widget.tsx +0 -270
- package/src/browser/ai-configuration/prompt-fragments-configuration-widget.tsx +0 -736
- package/src/browser/ai-configuration/skills-configuration-widget.spec.ts +0 -248
- package/src/browser/ai-configuration/skills-configuration-widget.tsx +0 -229
- package/src/browser/ai-configuration/template-settings-renderer.tsx +0 -125
- package/src/browser/ai-configuration/token-usage-configuration-widget.tsx +0 -214
- package/src/browser/ai-configuration/tools-configuration-widget.tsx +0 -544
- package/src/browser/ai-configuration/variable-configuration-widget.tsx +0 -159
- package/src/browser/style/ai-configuration-cards.css +0 -60
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
ChatMode, ChatRequestModel, ChatService, ChatSession,
|
|
18
18
|
MutableChatModel, MutableChatRequestModel
|
|
19
19
|
} from '@theia/ai-chat/lib/common';
|
|
20
|
-
import { inject, injectable } from '@theia/core/shared/inversify';
|
|
20
|
+
import { inject, injectable, named } from '@theia/core/shared/inversify';
|
|
21
21
|
import {
|
|
22
22
|
CODER_SYSTEM_PROMPT_ID,
|
|
23
23
|
CODER_EDIT_TEMPLATE_ID,
|
|
@@ -25,11 +25,10 @@ import {
|
|
|
25
25
|
CODER_AGENT_MODE_NEXT_TEMPLATE_ID,
|
|
26
26
|
getCoderAgentModePromptTemplate,
|
|
27
27
|
getCoderAgentModeNextPromptTemplate,
|
|
28
|
-
getCoderPromptTemplateEdit
|
|
29
|
-
getCoderPromptTemplateEditNext
|
|
28
|
+
getCoderPromptTemplateEdit
|
|
30
29
|
} from '../common/coder-replace-prompt-template';
|
|
31
30
|
import { LanguageModelRequirement, PromptVariantSet } from '@theia/ai-core';
|
|
32
|
-
import { nls } from '@theia/core';
|
|
31
|
+
import { ILogger, nls } from '@theia/core';
|
|
33
32
|
import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/frontend-application-config-provider';
|
|
34
33
|
import { MarkdownStringImpl } from '@theia/core/lib/common/markdown-rendering';
|
|
35
34
|
import { AI_CHAT_HOME, ChatCommands } from '@theia/ai-chat-ui/lib/browser/chat-view-commands';
|
|
@@ -40,6 +39,9 @@ export const CoderAgentId = 'Coder';
|
|
|
40
39
|
|
|
41
40
|
@injectable()
|
|
42
41
|
export class CoderAgent extends AbstractModeAwareChatAgent {
|
|
42
|
+
@inject(ILogger) @named('ai-ide:CoderAgent')
|
|
43
|
+
protected override readonly logger: ILogger;
|
|
44
|
+
|
|
43
45
|
@inject(ChatService) protected readonly chatService: ChatService;
|
|
44
46
|
@inject(AgentModeConfirmationService) protected readonly agentModeConfirmation: AgentModeConfirmationService;
|
|
45
47
|
id: string = CoderAgentId;
|
|
@@ -75,7 +77,7 @@ export class CoderAgent extends AbstractModeAwareChatAgent {
|
|
|
75
77
|
override prompts: PromptVariantSet[] = [{
|
|
76
78
|
id: CODER_SYSTEM_PROMPT_ID,
|
|
77
79
|
defaultVariant: getCoderAgentModePromptTemplate(),
|
|
78
|
-
variants: [getCoderPromptTemplateEdit(), getCoderAgentModeNextPromptTemplate()
|
|
80
|
+
variants: [getCoderPromptTemplateEdit(), getCoderAgentModeNextPromptTemplate()]
|
|
79
81
|
}];
|
|
80
82
|
protected override systemPromptId: string | undefined = CODER_SYSTEM_PROMPT_ID;
|
|
81
83
|
|
|
@@ -21,7 +21,7 @@ FrontendApplicationConfigProvider.set({});
|
|
|
21
21
|
|
|
22
22
|
import { expect } from 'chai';
|
|
23
23
|
import { Container } from '@theia/core/shared/inversify';
|
|
24
|
-
import { URI, PreferenceService } from '@theia/core';
|
|
24
|
+
import { URI, PreferenceService, ILogger } from '@theia/core';
|
|
25
25
|
import { FileService } from '@theia/filesystem/lib/browser/file-service';
|
|
26
26
|
import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service';
|
|
27
27
|
import { FileStat } from '@theia/filesystem/lib/common/files';
|
|
@@ -30,6 +30,7 @@ import { ContextFileValidationServiceImpl } from './context-file-validation-serv
|
|
|
30
30
|
import { WorkspaceFunctionScope } from './workspace-functions';
|
|
31
31
|
import { AiConfigurationService } from '@theia/ai-core';
|
|
32
32
|
import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
|
|
33
|
+
import { MockLogger } from '@theia/core/lib/common/test/mock-logger';
|
|
33
34
|
|
|
34
35
|
disableJSDOM();
|
|
35
36
|
|
|
@@ -68,7 +69,7 @@ describe('ContextFileValidationService', () => {
|
|
|
68
69
|
|
|
69
70
|
beforeEach(async () => {
|
|
70
71
|
container = new Container();
|
|
71
|
-
|
|
72
|
+
container.bind(ILogger).to(MockLogger).inSingletonScope();
|
|
72
73
|
// Mock WorkspaceService
|
|
73
74
|
mockWorkspaceService = {
|
|
74
75
|
tryGetRoots: () => [{
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
import { ChatMode } from '@theia/ai-chat';
|
|
17
17
|
import { LanguageModelRequirement } from '@theia/ai-core';
|
|
18
|
-
import { injectable } from '@theia/core/shared/inversify';
|
|
18
|
+
import { inject, injectable, named } from '@theia/core/shared/inversify';
|
|
19
19
|
import {
|
|
20
20
|
createSkillSystemVariants,
|
|
21
21
|
CREATE_SKILL_SYSTEM_PROMPT_TEMPLATE_ID,
|
|
@@ -23,11 +23,14 @@ import {
|
|
|
23
23
|
CREATE_SKILL_SYSTEM_AGENT_MODE_TEMPLATE_ID,
|
|
24
24
|
} from '../common/create-skill-prompt-template';
|
|
25
25
|
import { AbstractModeAwareChatAgent } from './mode-aware-chat-agent';
|
|
26
|
-
import { nls } from '@theia/core';
|
|
26
|
+
import { ILogger, nls } from '@theia/core';
|
|
27
27
|
|
|
28
28
|
@injectable()
|
|
29
29
|
export class CreateSkillAgent extends AbstractModeAwareChatAgent {
|
|
30
30
|
|
|
31
|
+
@inject(ILogger) @named('ai-ide:CreateSkillAgent')
|
|
32
|
+
protected override readonly logger: ILogger;
|
|
33
|
+
|
|
31
34
|
name = 'CreateSkill';
|
|
32
35
|
id = 'CreateSkill';
|
|
33
36
|
languageModelRequirements: LanguageModelRequirement[] = [{
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
import { AbstractStreamParsingChatAgent } from '@theia/ai-chat/lib/common/chat-agents';
|
|
18
18
|
import { LanguageModelRequirement } from '@theia/ai-core/lib/common';
|
|
19
|
-
import { nls } from '@theia/core';
|
|
20
|
-
import { injectable } from '@theia/core/shared/inversify';
|
|
19
|
+
import { ILogger, nls } from '@theia/core';
|
|
20
|
+
import { inject, injectable, named } from '@theia/core/shared/inversify';
|
|
21
21
|
import { exploreSystemPrompt, EXPLORE_SYSTEM_PROMPT_ID } from './explore-prompt-template';
|
|
22
22
|
import { ExploreAgentId } from '../common/agent-ids';
|
|
23
23
|
|
|
@@ -25,6 +25,9 @@ export { ExploreAgentId };
|
|
|
25
25
|
|
|
26
26
|
@injectable()
|
|
27
27
|
export class ExploreAgent extends AbstractStreamParsingChatAgent {
|
|
28
|
+
@inject(ILogger) @named('ai-ide:ExploreAgent')
|
|
29
|
+
protected override readonly logger: ILogger;
|
|
30
|
+
|
|
28
31
|
name = 'Explore';
|
|
29
32
|
id = ExploreAgentId;
|
|
30
33
|
languageModelRequirements: LanguageModelRequirement[] = [{
|
|
@@ -20,7 +20,7 @@ import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/front
|
|
|
20
20
|
FrontendApplicationConfigProvider.set({});
|
|
21
21
|
|
|
22
22
|
import { expect } from 'chai';
|
|
23
|
-
import { CancellationTokenSource } from '@theia/core';
|
|
23
|
+
import { CancellationTokenSource, PreferenceService, ILogger } from '@theia/core';
|
|
24
24
|
import {
|
|
25
25
|
SuggestFileContent,
|
|
26
26
|
WriteFileContent,
|
|
@@ -35,13 +35,18 @@ import {
|
|
|
35
35
|
DefaultFileChangeSetTitleProvider,
|
|
36
36
|
ReplaceContentInFileFunctionHelperV2
|
|
37
37
|
} from './file-changeset-functions';
|
|
38
|
-
import { ChatToolContext, MutableChatRequestModel, MutableChatResponseModel, MutableChatModel } from '@theia/ai-chat';
|
|
38
|
+
import { ChatToolContext, FileReadTracker, MutableChatRequestModel, MutableChatResponseModel, MutableChatModel } from '@theia/ai-chat';
|
|
39
39
|
import { ChangeSet, ChangeSetElement } from '@theia/ai-chat/lib/common/change-set';
|
|
40
40
|
import { Container } from '@theia/core/shared/inversify';
|
|
41
|
-
import { WorkspaceFunctionScope } from './workspace-functions';
|
|
41
|
+
import { AccessibleRootContribution, WorkspaceFunctionScope } from './workspace-functions';
|
|
42
|
+
import { bindRootContributionProvider } from '@theia/core/lib/common/contribution-provider';
|
|
43
|
+
import { AiConfigurationService } from '@theia/ai-core';
|
|
44
|
+
import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
|
|
45
|
+
import { WorkspaceService } from '@theia/workspace/lib/browser';
|
|
42
46
|
import { FileService } from '@theia/filesystem/lib/browser/file-service';
|
|
43
|
-
import { ChangeSetFileElementFactory, ChangeSetFileElement } from '@theia/ai-chat/lib/browser/change-set-file-element';
|
|
47
|
+
import { ChangeSetElementArgs, ChangeSetFileElementFactory, ChangeSetFileElement } from '@theia/ai-chat/lib/browser/change-set-file-element';
|
|
44
48
|
import { URI } from '@theia/core/lib/common/uri';
|
|
49
|
+
import { MockLogger } from '@theia/core/lib/common/test/mock-logger';
|
|
45
50
|
|
|
46
51
|
disableJSDOM();
|
|
47
52
|
|
|
@@ -86,7 +91,7 @@ describe('File Changeset Functions Cancellation Tests', () => {
|
|
|
86
91
|
|
|
87
92
|
// Mock dependencies
|
|
88
93
|
const mockWorkspaceScope = {
|
|
89
|
-
|
|
94
|
+
resolveAccessiblePath: async () => new URI('file:///workspace/test.txt')
|
|
90
95
|
} as unknown as WorkspaceFunctionScope;
|
|
91
96
|
|
|
92
97
|
const mockFileService = {
|
|
@@ -104,6 +109,7 @@ describe('File Changeset Functions Cancellation Tests', () => {
|
|
|
104
109
|
|
|
105
110
|
// Register mocks in the container
|
|
106
111
|
container.bind(WorkspaceFunctionScope).toConstantValue(mockWorkspaceScope);
|
|
112
|
+
container.bind(ILogger).to(MockLogger).inSingletonScope();
|
|
107
113
|
container.bind(FileService).toConstantValue(mockFileService);
|
|
108
114
|
container.bind(ChangeSetFileElementFactory).toConstantValue(mockFileChangeFactory);
|
|
109
115
|
container.bind(FileChangeSetTitleProvider).to(DefaultFileChangeSetTitleProvider).inSingletonScope();
|
|
@@ -264,4 +270,151 @@ describe('File Changeset Functions Cancellation Tests', () => {
|
|
|
264
270
|
expect(SuggestFileReplacements.ID).to.equal('suggestFileReplacements');
|
|
265
271
|
expect(suggestFileReplacements.getTool().id).to.equal('suggestFileReplacements');
|
|
266
272
|
});
|
|
273
|
+
|
|
274
|
+
describe('stale file guard', () => {
|
|
275
|
+
/** Stands in for the tracker: the file counts as changed until the agent reads it again. */
|
|
276
|
+
function bindTracker(): FileReadTracker & { stale: boolean } {
|
|
277
|
+
const tracker: FileReadTracker & { stale: boolean } = {
|
|
278
|
+
stale: true,
|
|
279
|
+
recordRead: async () => { tracker.stale = false; },
|
|
280
|
+
isStale: async () => tracker.stale,
|
|
281
|
+
getChangedFiles: async () => []
|
|
282
|
+
};
|
|
283
|
+
container.bind(FileReadTracker).toConstantValue(tracker);
|
|
284
|
+
return tracker;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
it('WriteFileContent refuses to overwrite a file that changed since it was read', async () => {
|
|
288
|
+
bindTracker();
|
|
289
|
+
const handler = container.get(WriteFileContent).getTool().handler;
|
|
290
|
+
|
|
291
|
+
const result = await handler(JSON.stringify({ path: 'test.txt', content: 'new content' }), mockCtx);
|
|
292
|
+
|
|
293
|
+
const jsonResponse = typeof result === 'string' ? JSON.parse(result) : result;
|
|
294
|
+
expect(jsonResponse.error).to.match(/changed since you last read it/);
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
it('SuggestFileContent refuses to propose overwriting a file that changed since it was read', async () => {
|
|
298
|
+
bindTracker();
|
|
299
|
+
const handler = container.get(SuggestFileContent).getTool().handler;
|
|
300
|
+
|
|
301
|
+
const result = await handler(JSON.stringify({ path: 'test.txt', content: 'new content' }), mockCtx);
|
|
302
|
+
|
|
303
|
+
const jsonResponse = typeof result === 'string' ? JSON.parse(result) : result;
|
|
304
|
+
expect(jsonResponse.error).to.match(/changed since you last read it/);
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
it('WriteFileContent writes once the agent has read the file again', async () => {
|
|
308
|
+
const tracker = bindTracker();
|
|
309
|
+
const handler = container.get(WriteFileContent).getTool().handler;
|
|
310
|
+
await handler(JSON.stringify({ path: 'test.txt', content: 'new content' }), mockCtx);
|
|
311
|
+
|
|
312
|
+
await tracker.recordRead(mockCtx.request.session.id, new URI('file:///workspace/test.txt'));
|
|
313
|
+
|
|
314
|
+
const result = await handler(JSON.stringify({ path: 'test.txt', content: 'new content' }), mockCtx);
|
|
315
|
+
expect(result).to.equal('Successfully wrote content to file test.txt.');
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
describe('File Changeset Functions access control', () => {
|
|
321
|
+
let container: Container;
|
|
322
|
+
let ctx: ChatToolContext;
|
|
323
|
+
let written: Array<{ uri: URI; content: string }>;
|
|
324
|
+
let contributedRoots: URI[];
|
|
325
|
+
|
|
326
|
+
before(() => { disableJSDOM = enableJSDOM(); });
|
|
327
|
+
after(() => { disableJSDOM(); });
|
|
328
|
+
|
|
329
|
+
beforeEach(() => {
|
|
330
|
+
written = [];
|
|
331
|
+
contributedRoots = [];
|
|
332
|
+
|
|
333
|
+
const changeSet: Partial<ChangeSet> = {
|
|
334
|
+
addElements: () => true,
|
|
335
|
+
setTitle: () => { },
|
|
336
|
+
removeElements: () => true,
|
|
337
|
+
getElementByURI: () => undefined
|
|
338
|
+
};
|
|
339
|
+
ctx = {
|
|
340
|
+
request: {
|
|
341
|
+
id: 'request-id',
|
|
342
|
+
session: { id: 'session-id', changeSet: changeSet as ChangeSet } as MutableChatModel
|
|
343
|
+
} as MutableChatRequestModel,
|
|
344
|
+
response: {} as MutableChatResponseModel
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
container = new Container();
|
|
348
|
+
container.bind(ILogger).to(MockLogger).inSingletonScope();
|
|
349
|
+
container.bind(WorkspaceService).toConstantValue({
|
|
350
|
+
roots: [{ resource: new URI('file:///workspace') }],
|
|
351
|
+
tryGetRoots: () => [{ resource: new URI('file:///workspace') }],
|
|
352
|
+
onWorkspaceChanged: () => ({ dispose: () => { } })
|
|
353
|
+
} as unknown as WorkspaceService);
|
|
354
|
+
container.bind(FileService).toConstantValue({
|
|
355
|
+
exists: async () => true,
|
|
356
|
+
read: async () => ({ value: { toString: () => 'old content' } }),
|
|
357
|
+
watch: () => ({ dispose: () => { } }),
|
|
358
|
+
onDidFilesChange: () => ({ dispose: () => { } })
|
|
359
|
+
} as unknown as FileService);
|
|
360
|
+
container.bind(PreferenceService).toConstantValue({ get: <T>(_path: string, defaultValue: T) => defaultValue });
|
|
361
|
+
container.bind(AiConfigurationService).toConstantValue({
|
|
362
|
+
get: <T>(_name: string, fallback?: T) => fallback,
|
|
363
|
+
ready: Promise.resolve(),
|
|
364
|
+
onDidChangeTrust: () => ({ dispose: () => { } })
|
|
365
|
+
} as unknown as AiConfigurationService);
|
|
366
|
+
container.bind(EnvVariablesServer).toConstantValue({
|
|
367
|
+
getHomeDirUri: async () => 'file:///home/test',
|
|
368
|
+
getConfigDirUri: async () => 'file:///home/test/.theia'
|
|
369
|
+
} as unknown as EnvVariablesServer);
|
|
370
|
+
bindRootContributionProvider(container, AccessibleRootContribution);
|
|
371
|
+
container.bind(AccessibleRootContribution).toConstantValue({ getRoots: async () => contributedRoots });
|
|
372
|
+
container.bind(WorkspaceFunctionScope).toSelf();
|
|
373
|
+
container.bind(ChangeSetFileElementFactory).toConstantValue((args: ChangeSetElementArgs) => ({
|
|
374
|
+
uri: args.uri,
|
|
375
|
+
apply: async () => {
|
|
376
|
+
written.push({ uri: args.uri, content: args.targetState ?? '' });
|
|
377
|
+
}
|
|
378
|
+
} as ChangeSetFileElement));
|
|
379
|
+
container.bind(FileChangeSetTitleProvider).to(DefaultFileChangeSetTitleProvider).inSingletonScope();
|
|
380
|
+
container.bind(ReplaceContentInFileFunctionHelperV2).toSelf();
|
|
381
|
+
container.bind(WriteFileContent).toSelf();
|
|
382
|
+
container.bind(WriteFileReplacements).toSelf();
|
|
383
|
+
});
|
|
384
|
+
|
|
385
|
+
const writeContent = (path: string) =>
|
|
386
|
+
container.get(WriteFileContent).getTool().handler(JSON.stringify({ path, content: 'new content' }), ctx) as Promise<string>;
|
|
387
|
+
const writeReplacements = (path: string) =>
|
|
388
|
+
container.get(WriteFileReplacements).getTool().handler(
|
|
389
|
+
JSON.stringify({ path, replacements: [{ oldContent: 'old content', newContent: 'new content' }] }), ctx
|
|
390
|
+
) as Promise<string>;
|
|
391
|
+
|
|
392
|
+
it('refuses to write through a .. traversal instead of escaping the workspace', async () => {
|
|
393
|
+
expect(JSON.parse(await writeContent('../../etc/passwd')).error).to.include('Invalid path');
|
|
394
|
+
expect(JSON.parse(await writeReplacements('../../etc/passwd')).error).to.include('Invalid path');
|
|
395
|
+
expect(written).to.be.empty;
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
it('refuses to write to an absolute path outside the workspace', async () => {
|
|
399
|
+
expect(JSON.parse(await writeContent('/etc/passwd')).error).to.include('not allowed');
|
|
400
|
+
expect(JSON.parse(await writeReplacements('/etc/passwd')).error).to.include('not allowed');
|
|
401
|
+
expect(written).to.be.empty;
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
it('refuses to write to the user home directory', async () => {
|
|
405
|
+
expect(JSON.parse(await writeContent('~/.ssh/authorized_keys')).error).to.include('not allowed');
|
|
406
|
+
expect(written).to.be.empty;
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
it('writes inside the workspace', async () => {
|
|
410
|
+
expect(await writeContent('src/index.ts')).to.include('Successfully');
|
|
411
|
+
expect(written.map(w => w.uri.toString())).to.deep.equal(['file:///workspace/src/index.ts']);
|
|
412
|
+
});
|
|
413
|
+
|
|
414
|
+
it('writes to a contributed root such as the memory directory', async () => {
|
|
415
|
+
contributedRoots = [new URI('file:///home/test/.theia/workspace-metadata/uuid/memory')];
|
|
416
|
+
const result = await writeContent('/home/test/.theia/workspace-metadata/uuid/memory/wiki/index.md');
|
|
417
|
+
expect(result).to.include('Successfully');
|
|
418
|
+
expect(written.map(w => w.uri.toString())).to.deep.equal(['file:///home/test/.theia/workspace-metadata/uuid/memory/wiki/index.md']);
|
|
419
|
+
});
|
|
267
420
|
});
|
|
@@ -13,18 +13,18 @@
|
|
|
13
13
|
//
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
|
-
import { assertChatContext, ChatToolContext } from '@theia/ai-chat';
|
|
16
|
+
import { assertChatContext, ChatToolContext, FileReadTracker } from '@theia/ai-chat';
|
|
17
17
|
import { ChangeSet } from '@theia/ai-chat/lib/common/change-set';
|
|
18
18
|
import { ChangeSetElementArgs, ChangeSetFileElement, ChangeSetFileElementFactory } from '@theia/ai-chat/lib/browser/change-set-file-element';
|
|
19
19
|
import { ToolInvocationContext, ToolProvider, ToolRequest, ToolRequestParameters, ToolRequestParametersProperties } from '@theia/ai-core';
|
|
20
20
|
import { ContentReplacerV1Impl, Replacement, ContentReplacer } from '@theia/core/lib/common/content-replacer';
|
|
21
21
|
import { ContentReplacerV2Impl } from '@theia/core/lib/common/content-replacer-v2-impl';
|
|
22
22
|
import { URI } from '@theia/core/lib/common/uri';
|
|
23
|
-
import { inject, injectable } from '@theia/core/shared/inversify';
|
|
23
|
+
import { inject, injectable, named, optional } from '@theia/core/shared/inversify';
|
|
24
24
|
import { FileService } from '@theia/filesystem/lib/browser/file-service';
|
|
25
25
|
import { WorkspaceFunctionScope } from './workspace-functions';
|
|
26
26
|
|
|
27
|
-
import { nls } from '@theia/core';
|
|
27
|
+
import { nls, ILogger } from '@theia/core';
|
|
28
28
|
import { extractJsonStringField } from '@theia/ai-chat-ui/lib/browser/chat-response-renderer/toolcall-utils';
|
|
29
29
|
import {
|
|
30
30
|
CLEAR_FILE_CHANGES_ID,
|
|
@@ -37,6 +37,15 @@ import {
|
|
|
37
37
|
WRITE_FILE_REPLACEMENTS_SIMPLE_ID
|
|
38
38
|
} from '../common/file-changeset-function-ids';
|
|
39
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Description of the `path` parameter shared by all file changeset tools, so that they advertise the
|
|
42
|
+
* same accepted forms as the read-only workspace tools.
|
|
43
|
+
*/
|
|
44
|
+
const FILE_PATH_PARAMETER_DESCRIPTION = 'Path to the target file. May be workspace-relative ' +
|
|
45
|
+
'(e.g., "my-project/src/index.ts"), an absolute path, or a `file://` URI. ' +
|
|
46
|
+
'Absolute / URI forms must point to a location the tools may access, such as a directory listed in the ' +
|
|
47
|
+
'`ai-features.workspaceFunctions.allowedExternalPaths` preference.';
|
|
48
|
+
|
|
40
49
|
function createPathShortLabel(args: string, hasMore: boolean): { label: string; hasMore: boolean } | undefined {
|
|
41
50
|
const path = extractJsonStringField(args, 'path');
|
|
42
51
|
if (path) {
|
|
@@ -45,6 +54,14 @@ function createPathShortLabel(args: string, hasMore: boolean): { label: string;
|
|
|
45
54
|
return undefined;
|
|
46
55
|
}
|
|
47
56
|
|
|
57
|
+
/**
|
|
58
|
+
* Whole-file writes from an outdated read would silently discard whatever changed in between. The replacement
|
|
59
|
+
* tools need no such guard: they re-read and fail when their matched content is gone.
|
|
60
|
+
*/
|
|
61
|
+
function staleFileError(path: string): string {
|
|
62
|
+
return `File ${path} changed since you last read it. Read it again before overwriting it, so that the changes made in the meantime are not lost.`;
|
|
63
|
+
}
|
|
64
|
+
|
|
48
65
|
export const FileChangeSetTitleProvider = Symbol('FileChangeSetTitleProvider');
|
|
49
66
|
|
|
50
67
|
export interface FileChangeSetTitleProvider {
|
|
@@ -67,6 +84,10 @@ export class SuggestFileContent implements ToolProvider {
|
|
|
67
84
|
@inject(FileChangeSetTitleProvider)
|
|
68
85
|
protected readonly fileChangeSetTitleProvider: FileChangeSetTitleProvider;
|
|
69
86
|
|
|
87
|
+
/** Optional: the guard is advisory, so containers without a tracker still get a working tool. */
|
|
88
|
+
@inject(FileReadTracker) @optional()
|
|
89
|
+
protected readonly fileReadTracker: FileReadTracker | undefined;
|
|
90
|
+
|
|
70
91
|
getTool(): ToolRequest {
|
|
71
92
|
return {
|
|
72
93
|
id: SuggestFileContent.ID,
|
|
@@ -82,8 +103,7 @@ export class SuggestFileContent implements ToolProvider {
|
|
|
82
103
|
properties: {
|
|
83
104
|
path: {
|
|
84
105
|
type: 'string',
|
|
85
|
-
description:
|
|
86
|
-
'(e.g., "my-project/src/index.ts", "backend/config/settings.json").'
|
|
106
|
+
description: FILE_PATH_PARAMETER_DESCRIPTION
|
|
87
107
|
},
|
|
88
108
|
content: {
|
|
89
109
|
type: 'string',
|
|
@@ -100,7 +120,15 @@ export class SuggestFileContent implements ToolProvider {
|
|
|
100
120
|
}
|
|
101
121
|
const { path, content } = JSON.parse(args);
|
|
102
122
|
const chatSessionId = ctx.request.session.id;
|
|
103
|
-
|
|
123
|
+
let uri: URI;
|
|
124
|
+
try {
|
|
125
|
+
uri = await this.workspaceFunctionScope.resolveAccessiblePath(path);
|
|
126
|
+
} catch (error) {
|
|
127
|
+
return JSON.stringify({ error: error.message });
|
|
128
|
+
}
|
|
129
|
+
if (await this.fileReadTracker?.isStale(chatSessionId, uri)) {
|
|
130
|
+
return JSON.stringify({ error: staleFileError(path) });
|
|
131
|
+
}
|
|
104
132
|
let type: ChangeSetElementArgs['type'] = 'modify';
|
|
105
133
|
if (content === '') {
|
|
106
134
|
type = 'delete';
|
|
@@ -143,6 +171,10 @@ export class WriteFileContent implements ToolProvider {
|
|
|
143
171
|
@inject(FileChangeSetTitleProvider)
|
|
144
172
|
protected readonly fileChangeSetTitleProvider: FileChangeSetTitleProvider;
|
|
145
173
|
|
|
174
|
+
/** Optional: the guard is advisory, so containers without a tracker still get a working tool. */
|
|
175
|
+
@inject(FileReadTracker) @optional()
|
|
176
|
+
protected readonly fileReadTracker: FileReadTracker | undefined;
|
|
177
|
+
|
|
146
178
|
getTool(): ToolRequest {
|
|
147
179
|
return {
|
|
148
180
|
id: WriteFileContent.ID,
|
|
@@ -158,8 +190,7 @@ export class WriteFileContent implements ToolProvider {
|
|
|
158
190
|
properties: {
|
|
159
191
|
path: {
|
|
160
192
|
type: 'string',
|
|
161
|
-
description:
|
|
162
|
-
'(e.g., "my-project/src/index.ts", "backend/config/settings.json").'
|
|
193
|
+
description: FILE_PATH_PARAMETER_DESCRIPTION
|
|
163
194
|
},
|
|
164
195
|
content: {
|
|
165
196
|
type: 'string',
|
|
@@ -176,7 +207,15 @@ export class WriteFileContent implements ToolProvider {
|
|
|
176
207
|
}
|
|
177
208
|
const { path, content } = JSON.parse(args);
|
|
178
209
|
const chatSessionId = ctx.request.session.id;
|
|
179
|
-
|
|
210
|
+
let uri: URI;
|
|
211
|
+
try {
|
|
212
|
+
uri = await this.workspaceFunctionScope.resolveAccessiblePath(path);
|
|
213
|
+
} catch (error) {
|
|
214
|
+
return JSON.stringify({ error: error.message });
|
|
215
|
+
}
|
|
216
|
+
if (await this.fileReadTracker?.isStale(chatSessionId, uri)) {
|
|
217
|
+
return JSON.stringify({ error: staleFileError(path) });
|
|
218
|
+
}
|
|
180
219
|
let type = 'modify';
|
|
181
220
|
if (content === '') {
|
|
182
221
|
type = 'delete';
|
|
@@ -223,6 +262,9 @@ export class ReplaceContentInFileFunctionHelper {
|
|
|
223
262
|
@inject(FileChangeSetTitleProvider)
|
|
224
263
|
protected readonly fileChangeSetTitleProvider: FileChangeSetTitleProvider;
|
|
225
264
|
|
|
265
|
+
@inject(ILogger) @named('ai-ide:ReplaceContentInFileFunctionHelper')
|
|
266
|
+
protected readonly logger: ILogger;
|
|
267
|
+
|
|
226
268
|
private replacer: ContentReplacer;
|
|
227
269
|
|
|
228
270
|
constructor() {
|
|
@@ -256,9 +298,7 @@ export class ReplaceContentInFileFunctionHelper {
|
|
|
256
298
|
properties: {
|
|
257
299
|
path: {
|
|
258
300
|
type: 'string',
|
|
259
|
-
description: '
|
|
260
|
-
'(e.g., "my-project/src/index.ts", "backend/src/main.ts"). ' +
|
|
261
|
-
'Must read the file with getFileContent first.'
|
|
301
|
+
description: FILE_PATH_PARAMETER_DESCRIPTION + ' Must read the file with getFileContent first.'
|
|
262
302
|
},
|
|
263
303
|
replacements: {
|
|
264
304
|
type: 'array',
|
|
@@ -324,7 +364,7 @@ export class ReplaceContentInFileFunctionHelper {
|
|
|
324
364
|
return `No changes needed for file ${result.path}. Content already matches the requested state.`;
|
|
325
365
|
}
|
|
326
366
|
} catch (error) {
|
|
327
|
-
|
|
367
|
+
this.logger.debug('Error processing replacements:', error.message);
|
|
328
368
|
return JSON.stringify({ error: error.message });
|
|
329
369
|
}
|
|
330
370
|
}
|
|
@@ -350,7 +390,7 @@ export class ReplaceContentInFileFunctionHelper {
|
|
|
350
390
|
return `No changes needed for file ${result.path}. Content already matches the requested state.`;
|
|
351
391
|
}
|
|
352
392
|
} catch (error) {
|
|
353
|
-
|
|
393
|
+
this.logger.debug('Error processing replacements:', error.message);
|
|
354
394
|
return JSON.stringify({ error: error.message });
|
|
355
395
|
}
|
|
356
396
|
}
|
|
@@ -365,7 +405,7 @@ export class ReplaceContentInFileFunctionHelper {
|
|
|
365
405
|
}
|
|
366
406
|
|
|
367
407
|
const { path, replacements, reset } = JSON.parse(toolCallString) as { path: string, replacements: Replacement[], reset?: boolean };
|
|
368
|
-
const fileUri = await this.workspaceFunctionScope.
|
|
408
|
+
const fileUri = await this.workspaceFunctionScope.resolveAccessiblePath(path);
|
|
369
409
|
|
|
370
410
|
let startingContent: string;
|
|
371
411
|
if (reset || !ctx.request.session.changeSet) {
|
|
@@ -423,14 +463,14 @@ export class ReplaceContentInFileFunctionHelper {
|
|
|
423
463
|
return JSON.stringify({ error: 'Operation cancelled by user' });
|
|
424
464
|
}
|
|
425
465
|
|
|
426
|
-
const fileUri = await this.workspaceFunctionScope.
|
|
466
|
+
const fileUri = await this.workspaceFunctionScope.resolveAccessiblePath(path);
|
|
427
467
|
if (ctx.request.session.changeSet.removeElements(fileUri)) {
|
|
428
468
|
return `Cleared pending change(s) for file ${path}.`;
|
|
429
469
|
} else {
|
|
430
470
|
return `No pending changes found for file ${path}.`;
|
|
431
471
|
}
|
|
432
472
|
} catch (error) {
|
|
433
|
-
|
|
473
|
+
this.logger.debug('Error clearing file changes:', error.message);
|
|
434
474
|
return JSON.stringify({ error: error.message });
|
|
435
475
|
}
|
|
436
476
|
}
|
|
@@ -441,7 +481,7 @@ export class ReplaceContentInFileFunctionHelper {
|
|
|
441
481
|
return JSON.stringify({ error: 'Operation cancelled by user' });
|
|
442
482
|
}
|
|
443
483
|
|
|
444
|
-
const fileUri = await this.workspaceFunctionScope.
|
|
484
|
+
const fileUri = await this.workspaceFunctionScope.resolveAccessiblePath(path);
|
|
445
485
|
|
|
446
486
|
if (!ctx.request.session.changeSet) {
|
|
447
487
|
const originalContent = (await this.fileService.read(fileUri)).value.toString();
|
|
@@ -456,7 +496,7 @@ export class ReplaceContentInFileFunctionHelper {
|
|
|
456
496
|
return `File ${path} has no pending changes. Original content:\n\n${originalContent}`;
|
|
457
497
|
}
|
|
458
498
|
} catch (error) {
|
|
459
|
-
|
|
499
|
+
this.logger.debug('Error getting proposed file state:', error.message);
|
|
460
500
|
return JSON.stringify({ error: error.message });
|
|
461
501
|
}
|
|
462
502
|
}
|
|
@@ -584,8 +624,7 @@ export class ClearFileChanges implements ToolProvider {
|
|
|
584
624
|
properties: {
|
|
585
625
|
path: {
|
|
586
626
|
type: 'string',
|
|
587
|
-
description:
|
|
588
|
-
'(e.g., "my-project/src/index.ts", "backend/src/main.ts").'
|
|
627
|
+
description: FILE_PATH_PARAMETER_DESCRIPTION
|
|
589
628
|
}
|
|
590
629
|
},
|
|
591
630
|
required: ['path']
|
|
@@ -622,8 +661,7 @@ export class GetProposedFileState implements ToolProvider {
|
|
|
622
661
|
properties: {
|
|
623
662
|
path: {
|
|
624
663
|
type: 'string',
|
|
625
|
-
description:
|
|
626
|
-
'(e.g., "my-project/src/index.ts", "backend/src/main.ts").'
|
|
664
|
+
description: FILE_PATH_PARAMETER_DESCRIPTION
|
|
627
665
|
}
|
|
628
666
|
},
|
|
629
667
|
required: ['path']
|