@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
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2026 EclipseSource and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { enableJSDOM } from '@theia/core/lib/browser/test/jsdom';
|
|
18
|
+
let disableJSDOM = enableJSDOM();
|
|
19
|
+
|
|
20
|
+
import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/frontend-application-config-provider';
|
|
21
|
+
FrontendApplicationConfigProvider.set({});
|
|
22
|
+
|
|
23
|
+
import { expect } from 'chai';
|
|
24
|
+
import { Agent, AgentService, AIVariable, AIVariableService } from '@theia/ai-core/lib/common';
|
|
25
|
+
import { AiConfigurationCategoryId } from '@theia/ai-core-ui/lib/browser/ai-configuration/ai-configuration-category';
|
|
26
|
+
import { VariablesConfigurationCategory } from './variables-configuration-category';
|
|
27
|
+
|
|
28
|
+
disableJSDOM();
|
|
29
|
+
|
|
30
|
+
function variable(id: string, name: string, description = ''): AIVariable {
|
|
31
|
+
return { id, name, description } as unknown as AIVariable;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function agent(id: string, name: string, options: { variables?: string[]; templates?: string[] } = {}): Agent {
|
|
35
|
+
return {
|
|
36
|
+
id,
|
|
37
|
+
name,
|
|
38
|
+
variables: options.variables ?? [],
|
|
39
|
+
prompts: (options.templates ?? []).map((template, index) => ({ id: `${id}-${index}`, defaultVariant: { id: `${id}-${index}-v`, template } }))
|
|
40
|
+
} as unknown as Agent;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function createCategory(variables: AIVariable[], agents: Agent[] = []): VariablesConfigurationCategory {
|
|
44
|
+
const category = new VariablesConfigurationCategory();
|
|
45
|
+
const variableService: Partial<AIVariableService> = { getVariables: () => variables };
|
|
46
|
+
const agentService: Partial<AgentService> = { getAllAgents: () => agents };
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
48
|
+
(category as any).variableService = variableService;
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
50
|
+
(category as any).agentService = agentService;
|
|
51
|
+
return category;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
55
|
+
function agentsForVariable(category: VariablesConfigurationCategory, target: AIVariable): string[] {
|
|
56
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
57
|
+
const anyCategory = category as any;
|
|
58
|
+
return anyCategory.getAgentsForVariable(target, anyCategory.computeAgentUsage()).map((a: Agent) => a.id);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
describe('VariablesConfigurationCategory', () => {
|
|
62
|
+
|
|
63
|
+
before(() => disableJSDOM = enableJSDOM());
|
|
64
|
+
after(() => disableJSDOM());
|
|
65
|
+
|
|
66
|
+
it('declares the variables single-page metadata', () => {
|
|
67
|
+
const category = createCategory([]);
|
|
68
|
+
expect(category.id).to.equal(AiConfigurationCategoryId.VARIABLES);
|
|
69
|
+
expect(category.kind).to.equal('single-page');
|
|
70
|
+
expect(category.renderer).to.equal(category);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('indexes one search item per variable, sorted by name and highlighting the row', () => {
|
|
74
|
+
const items = createCategory([variable('b', 'Beta'), variable('a', 'Alpha', 'the alpha')]).getSearchItems();
|
|
75
|
+
expect(items.map(i => i.label)).to.deep.equal(['Alpha', 'Beta']);
|
|
76
|
+
expect(items[0].target).to.deep.equal({ categoryId: AiConfigurationCategoryId.VARIABLES, highlight: { rowId: 'a' } });
|
|
77
|
+
expect(items[0].keywords).to.contain('a').and.to.contain('the alpha');
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it('associates an agent with a variable referenced in its prompt template', () => {
|
|
81
|
+
const productName = variable('product-name-provider', 'productName');
|
|
82
|
+
const category = createCategory([productName], [
|
|
83
|
+
agent('coder', 'Coder', { templates: ['You are running in {{productName}} today.'] }),
|
|
84
|
+
agent('other', 'Other', { templates: ['References {{today}} only.'] })
|
|
85
|
+
]);
|
|
86
|
+
expect(agentsForVariable(category, productName)).to.deep.equal(['coder']);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('associates an agent that declares the variable id in Agent.variables', () => {
|
|
90
|
+
const file = variable('file-provider', 'file');
|
|
91
|
+
const category = createCategory([file], [agent('coder', 'Coder', { variables: ['file-provider'] })]);
|
|
92
|
+
expect(agentsForVariable(category, file)).to.deep.equal(['coder']);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it('ignores template references with an argument suffix beyond the variable name', () => {
|
|
96
|
+
const file = variable('file-provider', 'file');
|
|
97
|
+
const category = createCategory([file], [agent('coder', 'Coder', { templates: ['Content: {{file:/tmp/x.ts}}'] })]);
|
|
98
|
+
expect(agentsForVariable(category, file)).to.deep.equal(['coder']);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
describe('filter matching', () => {
|
|
102
|
+
const category = createCategory([]);
|
|
103
|
+
|
|
104
|
+
it('matches everything for an empty or whitespace-only query', () => {
|
|
105
|
+
const file = variable('file-provider', 'file', 'The current file');
|
|
106
|
+
expect(category.matchesVariable(file, '')).to.be.true;
|
|
107
|
+
expect(category.matchesVariable(file, ' ')).to.be.true;
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it('matches the variable name case-insensitively', () => {
|
|
111
|
+
const file = variable('file-provider', 'file', 'The current file');
|
|
112
|
+
expect(category.matchesVariable(file, 'FIL')).to.be.true;
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it('matches the description case-insensitively', () => {
|
|
116
|
+
const file = variable('file-provider', 'file', 'The Current File');
|
|
117
|
+
expect(category.matchesVariable(file, 'current')).to.be.true;
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it('does not match when neither name nor description contain the query', () => {
|
|
121
|
+
const file = variable('file-provider', 'file', 'The current file');
|
|
122
|
+
expect(category.matchesVariable(file, 'agent')).to.be.false;
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
describe('description normalization', () => {
|
|
127
|
+
it('collapses runs of whitespace and trims', () => {
|
|
128
|
+
expect(VariablesConfigurationCategory.normalizeDescription(' The absolute path of the currently opened file. '))
|
|
129
|
+
.to.equal('The absolute path of the currently opened file.');
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it('returns an empty string for an undefined description', () => {
|
|
133
|
+
expect(VariablesConfigurationCategory.normalizeDescription(undefined)).to.equal('');
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it('matches variables whose description contains collapsible whitespace', () => {
|
|
137
|
+
const spaced = variable('file-provider', 'file', 'The absolute path of the current file.');
|
|
138
|
+
expect(createCategory([]).matchesVariable(spaced, 'path of the current')).to.be.true;
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
describe('copy reference', () => {
|
|
143
|
+
it('copies the prompt reference of the variable to the clipboard', () => {
|
|
144
|
+
const written: string[] = [];
|
|
145
|
+
const category = createCategory([]);
|
|
146
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
147
|
+
(category as any).clipboardService = { writeText: (text: string) => written.push(text) };
|
|
148
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
149
|
+
(category as any).copyReference(variable('file-provider', 'file'));
|
|
150
|
+
expect(written).to.deep.equal(['#file']);
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
});
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2026 EclipseSource and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { Agent, AgentService, AIVariable, AIVariableService, matchVariablesRegEx, PromptText } from '@theia/ai-core/lib/common';
|
|
18
|
+
import { Emitter, Event, nls } from '@theia/core';
|
|
19
|
+
import { codicon } from '@theia/core/lib/browser';
|
|
20
|
+
import { ClipboardService } from '@theia/core/lib/browser/clipboard-service';
|
|
21
|
+
import { DisposableCollection } from '@theia/core/lib/common';
|
|
22
|
+
import { inject, injectable, postConstruct } from '@theia/core/shared/inversify';
|
|
23
|
+
import * as React from '@theia/core/shared/react';
|
|
24
|
+
import {
|
|
25
|
+
AiConfigurationCategory,
|
|
26
|
+
AiConfigurationCategoryId,
|
|
27
|
+
AiConfigurationCategoryOrder,
|
|
28
|
+
AiConfigurationRenderContext,
|
|
29
|
+
AiConfigurationSearchItem,
|
|
30
|
+
AiConfigurationSearchProvider
|
|
31
|
+
} from '@theia/ai-core-ui/lib/browser/ai-configuration/ai-configuration-category';
|
|
32
|
+
import { SinglePageCategoryRenderer } from '@theia/ai-core-ui/lib/browser/ai-configuration/renderers/single-page-category-renderer';
|
|
33
|
+
import { AgentChip } from './agent-chips';
|
|
34
|
+
import {
|
|
35
|
+
CollapsibleGroup,
|
|
36
|
+
CollapsibleList,
|
|
37
|
+
CollapsibleRow,
|
|
38
|
+
CollapsibleRowAction
|
|
39
|
+
} from '@theia/ai-core-ui/lib/browser/ai-configuration/components/collapsible-list';
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The Variables category: a `single-page` category that renders every variable as a flat,
|
|
43
|
+
* expandable list rather than a tree of nodes with per-item detail pages. Each row shows the
|
|
44
|
+
* variable reference, a one-line description and count pills for its arguments and the agents
|
|
45
|
+
* that use it at a glance; expanding a row reveals the full description, its id, its arguments
|
|
46
|
+
* and the agents that use it as chips. Variables are read-only, so a dedicated detail page per
|
|
47
|
+
* item would be more navigation than the payload warrants.
|
|
48
|
+
*/
|
|
49
|
+
@injectable()
|
|
50
|
+
export class VariablesConfigurationCategory extends SinglePageCategoryRenderer implements AiConfigurationCategory, AiConfigurationSearchProvider {
|
|
51
|
+
|
|
52
|
+
readonly id = AiConfigurationCategoryId.VARIABLES;
|
|
53
|
+
readonly label = nls.localizeByDefault('Variables');
|
|
54
|
+
readonly description = nls.localize(
|
|
55
|
+
'theia/ai/ide/variableConfiguration/pageSubtitle',
|
|
56
|
+
'Values you can reference with {0}name in a prompt. They are resolved and inserted at request time.',
|
|
57
|
+
PromptText.VARIABLE_CHAR
|
|
58
|
+
);
|
|
59
|
+
readonly iconClass = codicon('symbol-variable');
|
|
60
|
+
readonly order = AiConfigurationCategoryOrder.VARIABLES;
|
|
61
|
+
readonly kind = 'single-page' as const;
|
|
62
|
+
|
|
63
|
+
@inject(AIVariableService)
|
|
64
|
+
protected readonly variableService: AIVariableService;
|
|
65
|
+
|
|
66
|
+
@inject(AgentService)
|
|
67
|
+
protected readonly agentService: AgentService;
|
|
68
|
+
|
|
69
|
+
@inject(ClipboardService)
|
|
70
|
+
protected readonly clipboardService: ClipboardService;
|
|
71
|
+
|
|
72
|
+
protected readonly onDidChangeEmitter = new Emitter<void>();
|
|
73
|
+
readonly onDidChange: Event<void> = this.onDidChangeEmitter.event;
|
|
74
|
+
protected readonly toDispose = new DisposableCollection(this.onDidChangeEmitter);
|
|
75
|
+
|
|
76
|
+
get renderer(): this {
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
get search(): AiConfigurationSearchProvider {
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@postConstruct()
|
|
85
|
+
protected init(): void {
|
|
86
|
+
this.toDispose.pushAll([
|
|
87
|
+
this.variableService.onDidChangeVariables(() => this.onDidChangeEmitter.fire()),
|
|
88
|
+
this.agentService.onDidChangeAgents(() => this.onDidChangeEmitter.fire())
|
|
89
|
+
]);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
dispose(): void {
|
|
93
|
+
this.toDispose.dispose();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
protected getVariables(): AIVariable[] {
|
|
97
|
+
return this.variableService.getVariables().sort((a, b) => a.name.localeCompare(b.name));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Computes, per agent, which variables it uses: those explicitly declared in {@link Agent.variables}
|
|
102
|
+
* (matched by id) plus those referenced in its prompt templates as `{{name}}` (matched by name).
|
|
103
|
+
* Declared globals are rarely populated in practice, so the prompt-template references are the
|
|
104
|
+
* signal that actually surfaces the "used by" chips.
|
|
105
|
+
*/
|
|
106
|
+
protected computeAgentUsage(): VariableAgentUsage[] {
|
|
107
|
+
return this.agentService.getAllAgents()
|
|
108
|
+
.slice()
|
|
109
|
+
.sort((a, b) => a.name.localeCompare(b.name))
|
|
110
|
+
.map(agent => ({
|
|
111
|
+
agent,
|
|
112
|
+
declaredIds: new Set(agent.variables ?? []),
|
|
113
|
+
referencedNames: this.getReferencedVariableNames(agent)
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Variable names referenced as `{{name}}` (or `{{name:arg}}`) across the agent's prompt templates. */
|
|
118
|
+
protected getReferencedVariableNames(agent: Agent): Set<string> {
|
|
119
|
+
const names = new Set<string>();
|
|
120
|
+
for (const promptVariantSet of agent.prompts ?? []) {
|
|
121
|
+
const fragments = [promptVariantSet.defaultVariant, ...(promptVariantSet.variants ?? [])];
|
|
122
|
+
for (const fragment of fragments) {
|
|
123
|
+
if (!fragment?.template) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
for (const match of matchVariablesRegEx(fragment.template)) {
|
|
127
|
+
const name = match[1].split(PromptText.VARIABLE_SEPARATOR_CHAR, 2)[0].trim();
|
|
128
|
+
if (name) {
|
|
129
|
+
names.add(name);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return names;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
protected getAgentsForVariable(variable: AIVariable, usage: VariableAgentUsage[]): Agent[] {
|
|
138
|
+
return usage
|
|
139
|
+
.filter(entry => entry.declaredIds.has(variable.id) || entry.referencedNames.has(variable.name))
|
|
140
|
+
.map(entry => entry.agent);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** The prompt reference used to insert the variable, e.g. `#file`. */
|
|
144
|
+
protected getVariableReference(variable: AIVariable): string {
|
|
145
|
+
return `${PromptText.VARIABLE_CHAR}${variable.name}`;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Case-insensitive match of a variable against the filter query, testing both the variable name
|
|
150
|
+
* and its description. An empty (or whitespace-only) query matches everything.
|
|
151
|
+
*/
|
|
152
|
+
matchesVariable(variable: AIVariable, query: string): boolean {
|
|
153
|
+
const needle = query.trim().toLocaleLowerCase();
|
|
154
|
+
if (!needle) {
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
const haystack = `${variable.name} ${VariablesConfigurationCategory.normalizeDescription(variable.description)}`.toLocaleLowerCase();
|
|
158
|
+
return haystack.includes(needle);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
protected buildRow(variable: AIVariable, usage: VariableAgentUsage[], onOpenAgent: (agentId: string) => void): CollapsibleRow {
|
|
162
|
+
const reference = this.getVariableReference(variable);
|
|
163
|
+
const description = VariablesConfigurationCategory.normalizeDescription(variable.description);
|
|
164
|
+
const agents = this.getAgentsForVariable(variable, usage);
|
|
165
|
+
const argCount = variable.args?.length ?? 0;
|
|
166
|
+
const pills: string[] = [];
|
|
167
|
+
if (argCount > 0) {
|
|
168
|
+
pills.push(argCount === 1
|
|
169
|
+
? nls.localize('theia/ai/ide/variableConfiguration/argCountSingular', '1 argument')
|
|
170
|
+
: nls.localize('theia/ai/ide/variableConfiguration/argCountPlural', '{0} arguments', argCount));
|
|
171
|
+
}
|
|
172
|
+
if (agents.length > 0) {
|
|
173
|
+
pills.push(agents.length === 1 ? nls.localizeByDefault('1 agent') : nls.localizeByDefault('{0} agents', agents.length));
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
id: variable.id,
|
|
177
|
+
title: reference,
|
|
178
|
+
description,
|
|
179
|
+
pills,
|
|
180
|
+
filterText: `${variable.name} ${description}`.toLocaleLowerCase(),
|
|
181
|
+
actions: <CopyReferenceButton onCopy={() => this.copyReference(variable)} />,
|
|
182
|
+
body: <>
|
|
183
|
+
<div className='ai-variable-id-row'>
|
|
184
|
+
<span className='ai-variable-id-label'>{nls.localizeByDefault('ID')}</span>
|
|
185
|
+
<code className='ai-variable-id-value'>{variable.id}</code>
|
|
186
|
+
</div>
|
|
187
|
+
{argCount > 0 && <VariableArgs variable={variable} />}
|
|
188
|
+
{agents.length > 0 && <UsedByAgents agents={agents} onOpenAgent={onOpenAgent} />}
|
|
189
|
+
</>
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/** Copies the variable's prompt reference (e.g. `#file`) to the clipboard. */
|
|
194
|
+
protected copyReference(variable: AIVariable): void {
|
|
195
|
+
this.clipboardService.writeText(this.getVariableReference(variable));
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
protected renderSections(ctx: AiConfigurationRenderContext): React.ReactNode {
|
|
199
|
+
const variables = this.getVariables();
|
|
200
|
+
const usage = this.computeAgentUsage();
|
|
201
|
+
const onOpenAgent = (agentId: string): void => ctx.navigate({ categoryId: AiConfigurationCategoryId.AGENTS, itemId: agentId });
|
|
202
|
+
const groups: CollapsibleGroup[] = [
|
|
203
|
+
{
|
|
204
|
+
id: 'context',
|
|
205
|
+
title: nls.localize('theia/ai/ide/variableConfiguration/contextGroup', 'Context Variables'),
|
|
206
|
+
description: nls.localize(
|
|
207
|
+
'theia/ai/ide/variableConfiguration/contextGroupDescription',
|
|
208
|
+
'Referenced with {0}name in a prompt and also attachable to a request as context that the agent and its tools can inspect.',
|
|
209
|
+
PromptText.VARIABLE_CHAR
|
|
210
|
+
),
|
|
211
|
+
rows: variables.filter(variable => variable.isContextVariable).map(variable => this.buildRow(variable, usage, onOpenAgent))
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
id: 'plain',
|
|
215
|
+
title: nls.localize('theia/ai/ide/variableConfiguration/plainGroup', 'Plain Variables'),
|
|
216
|
+
description: nls.localize(
|
|
217
|
+
'theia/ai/ide/variableConfiguration/plainGroupDescription',
|
|
218
|
+
'Referenced with {0}name in a prompt and resolved inline to a text value at request time.',
|
|
219
|
+
PromptText.VARIABLE_CHAR
|
|
220
|
+
),
|
|
221
|
+
rows: variables.filter(variable => !variable.isContextVariable).map(variable => this.buildRow(variable, usage, onOpenAgent))
|
|
222
|
+
}
|
|
223
|
+
];
|
|
224
|
+
return <CollapsibleList
|
|
225
|
+
groups={groups}
|
|
226
|
+
filterPlaceholder={nls.localize('theia/ai/ide/variableConfiguration/filterPlaceholder', 'Filter variables by name or description')}
|
|
227
|
+
emptyMessage={nls.localize('theia/ai/ide/variableConfiguration/noVariables', 'No variables are available.')}
|
|
228
|
+
filterEmptyMessage={query => nls.localize('theia/ai/ide/variableConfiguration/noMatches', 'No variables match "{0}".', query)}
|
|
229
|
+
/>;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
getSearchItems(): AiConfigurationSearchItem[] {
|
|
233
|
+
const typeLabel = nls.localizeByDefault('Variable');
|
|
234
|
+
return this.getVariables().map(variable => ({
|
|
235
|
+
label: variable.name,
|
|
236
|
+
typeLabel,
|
|
237
|
+
categoryId: this.id,
|
|
238
|
+
target: { categoryId: this.id, highlight: { rowId: variable.id } },
|
|
239
|
+
keywords: `${variable.id} ${variable.description ?? ''}`
|
|
240
|
+
} satisfies AiConfigurationSearchItem));
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Trims and collapses internal whitespace in a description. Descriptions are contributed by
|
|
245
|
+
* third-party extensions, so they may contain runs of whitespace from indented template literals.
|
|
246
|
+
*/
|
|
247
|
+
static normalizeDescription(text?: string): string {
|
|
248
|
+
return (text ?? '').replace(/\s+/g, ' ').trim();
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/** An agent together with the variables it uses, resolved once per render. */
|
|
253
|
+
interface VariableAgentUsage {
|
|
254
|
+
readonly agent: Agent;
|
|
255
|
+
/** Ids of variables the agent explicitly declares in {@link Agent.variables}. */
|
|
256
|
+
readonly declaredIds: Set<string>;
|
|
257
|
+
/** Names of variables the agent references in its prompt templates. */
|
|
258
|
+
readonly referencedNames: Set<string>;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/** A copy-to-clipboard affordance for the variable reference, briefly swapping to a check on success. */
|
|
262
|
+
const CopyReferenceButton: React.FC<{ onCopy: () => void }> = ({ onCopy }) => {
|
|
263
|
+
const [copied, setCopied] = React.useState(false);
|
|
264
|
+
const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);
|
|
265
|
+
React.useEffect(() => () => {
|
|
266
|
+
if (timeoutRef.current !== undefined) {
|
|
267
|
+
clearTimeout(timeoutRef.current);
|
|
268
|
+
}
|
|
269
|
+
}, []);
|
|
270
|
+
const label = nls.localize('theia/ai/ide/variableConfiguration/copyVariableName', 'Copy variable name');
|
|
271
|
+
return <>
|
|
272
|
+
<CollapsibleRowAction
|
|
273
|
+
iconClass={codicon(copied ? 'check' : 'copy')}
|
|
274
|
+
label={label}
|
|
275
|
+
onActivate={() => {
|
|
276
|
+
onCopy();
|
|
277
|
+
setCopied(true);
|
|
278
|
+
if (timeoutRef.current !== undefined) {
|
|
279
|
+
clearTimeout(timeoutRef.current);
|
|
280
|
+
}
|
|
281
|
+
timeoutRef.current = setTimeout(() => setCopied(false), 1500);
|
|
282
|
+
}}
|
|
283
|
+
/>
|
|
284
|
+
{/* Announce the copy to assistive tech; the region is always present so the change is spoken. */}
|
|
285
|
+
<span className='ai-variable-visually-hidden' aria-live='polite'>{copied ? nls.localizeByDefault('Copied') : ''}</span>
|
|
286
|
+
</>;
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
const VariableArgs: React.FC<{ variable: AIVariable }> = ({ variable }) => {
|
|
290
|
+
if (!variable.args || variable.args.length === 0) {
|
|
291
|
+
return undefined;
|
|
292
|
+
}
|
|
293
|
+
return <div className='ai-variable-section'>
|
|
294
|
+
<div className='ai-variable-section-label'>{nls.localizeByDefault('Arguments')}</div>
|
|
295
|
+
<div className='ai-variable-args-container'>
|
|
296
|
+
{variable.args.map(arg => <div key={arg.name} className='ai-variable-arg-row'>
|
|
297
|
+
<code className='ai-variable-arg-name'>{arg.name}</code>
|
|
298
|
+
<span className={`ai-variable-arg-badge ${arg.isOptional ? 'optional' : 'required'}`}>
|
|
299
|
+
{arg.isOptional
|
|
300
|
+
? nls.localize('theia/ai/ide/variableConfiguration/optional', 'optional')
|
|
301
|
+
: nls.localize('theia/ai/ide/variableConfiguration/required', 'required')}
|
|
302
|
+
</span>
|
|
303
|
+
<div className='ai-variable-arg-description'>
|
|
304
|
+
{VariablesConfigurationCategory.normalizeDescription(arg.description)}
|
|
305
|
+
{arg.enum && arg.enum.length > 0 && <span className='ai-variable-arg-enum'>
|
|
306
|
+
{nls.localize('theia/ai/ide/variableConfiguration/argEnum', 'One of: {0}', arg.enum.join(', '))}
|
|
307
|
+
</span>}
|
|
308
|
+
</div>
|
|
309
|
+
</div>)}
|
|
310
|
+
</div>
|
|
311
|
+
</div>;
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
/** The agents that reference the variable, rendered as navigable chips. */
|
|
315
|
+
const UsedByAgents: React.FC<{ agents: Agent[]; onOpenAgent: (agentId: string) => void }> = ({ agents, onOpenAgent }) =>
|
|
316
|
+
<div className='ai-variable-section'>
|
|
317
|
+
<div className='ai-variable-section-label'>{nls.localize('theia/ai/ide/variableConfiguration/usedByAgents', 'Used by Agents')}</div>
|
|
318
|
+
<div className='ai-variable-agent-chips'>
|
|
319
|
+
{agents.map(agent => <AgentChip key={agent.id} agent={agent} onOpenAgent={onOpenAgent} />)}
|
|
320
|
+
</div>
|
|
321
|
+
</div>;
|
|
322
|
+
|
|
@@ -21,14 +21,19 @@ import {
|
|
|
21
21
|
NOTIFICATION_TYPE_DESCRIPTIONS,
|
|
22
22
|
} from '@theia/ai-core/lib/common';
|
|
23
23
|
import { nls } from '@theia/core';
|
|
24
|
-
import {
|
|
25
|
-
import
|
|
24
|
+
import { SelectOption } from '@theia/core/lib/browser/widgets/select-component';
|
|
25
|
+
import { AiEnumSelect } from '@theia/ai-core-ui/lib/browser/ai-configuration/components/ai-configuration-controls';
|
|
26
|
+
import { AiConfigurationSettingRow } from '@theia/ai-core-ui/lib/browser/ai-configuration/components/ai-configuration-setting-row';
|
|
27
|
+
import { AiSettingsRowService } from '@theia/ai-core-ui/lib/browser/ai-configuration/components/ai-settings-row-service';
|
|
26
28
|
|
|
27
29
|
export interface AgentNotificationSettingsProps {
|
|
28
30
|
agentId: string;
|
|
29
31
|
currentNotificationType?: NotificationType;
|
|
30
32
|
onNotificationTypeChange: (agentId: string, notificationType: NotificationType | undefined) => Promise<void>;
|
|
33
|
+
/** Opens the global AI notification setting (linked from the description). */
|
|
31
34
|
onOpenNotificationSettings: () => void;
|
|
35
|
+
/** Backs the row's gear menu (its "Reset Setting" resets this agent's override). */
|
|
36
|
+
settingsRowService: AiSettingsRowService;
|
|
32
37
|
}
|
|
33
38
|
|
|
34
39
|
const DEFAULT_VALUE = 'default';
|
|
@@ -47,37 +52,37 @@ const NOTIFICATION_SELECT_OPTIONS: SelectOption[] = [
|
|
|
47
52
|
})),
|
|
48
53
|
];
|
|
49
54
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
55
|
+
/** The agent's completion-notification setting, rendered as a normal setting row whose gear menu resets the override. */
|
|
56
|
+
export const AgentNotificationSettings = ({
|
|
57
|
+
agentId, currentNotificationType, onNotificationTypeChange, onOpenNotificationSettings, settingsRowService
|
|
58
|
+
}: AgentNotificationSettingsProps) => {
|
|
59
|
+
const handleChange = (value: string): void => {
|
|
60
|
+
const notificationType = value === DEFAULT_VALUE ? undefined : value as NotificationType;
|
|
53
61
|
onNotificationTypeChange(agentId, notificationType);
|
|
54
62
|
};
|
|
55
|
-
|
|
56
|
-
return
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
<a href="#" onClick={e => { e.preventDefault(); onOpenNotificationSettings(); }}>{linkText}</a>.
|
|
81
|
-
</div>
|
|
82
|
-
);
|
|
63
|
+
const isOverridden = currentNotificationType !== undefined;
|
|
64
|
+
return <AiConfigurationSettingRow
|
|
65
|
+
title={nls.localizeByDefault('Notifications')}
|
|
66
|
+
description={<>
|
|
67
|
+
{/* Own key: the shipped `completionNotificationDescriptionPrefix` is translated with the older,
|
|
68
|
+
longer wording, and a translation wins over a changed default. */}
|
|
69
|
+
{nls.localize('theia/ai/core/agentConfiguration/completionNotificationIntro',
|
|
70
|
+
'How you want to be notified when this agent needs your attention (it completes its task or requests input). "Default" uses the global ')}
|
|
71
|
+
<a href='#' onClick={event => { event.preventDefault(); onOpenNotificationSettings(); }}>
|
|
72
|
+
{nls.localize('theia/ai/core/agentConfiguration/notificationSettingsLink', 'AI notification setting')}
|
|
73
|
+
</a>.
|
|
74
|
+
</>}
|
|
75
|
+
modified={isOverridden}
|
|
76
|
+
below={<AiEnumSelect
|
|
77
|
+
ariaLabel={nls.localizeByDefault('Notifications')}
|
|
78
|
+
options={NOTIFICATION_SELECT_OPTIONS.map(option => ({
|
|
79
|
+
value: String(option.value ?? ''),
|
|
80
|
+
label: option.label ?? String(option.value ?? ''),
|
|
81
|
+
title: option.description
|
|
82
|
+
}))}
|
|
83
|
+
value={currentNotificationType ?? DEFAULT_VALUE}
|
|
84
|
+
onCommit={handleChange}
|
|
85
|
+
/>}
|
|
86
|
+
onOpenMenu={gear => settingsRowService.openResetMenu(gear, () => onNotificationTypeChange(agentId, undefined))}
|
|
87
|
+
/>;
|
|
83
88
|
};
|