@theia/ai-ide 1.67.0-next.56 → 1.67.0-next.59
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-configuration/agent-configuration-widget.d.ts +41 -0
- package/lib/browser/ai-configuration/agent-configuration-widget.d.ts.map +1 -0
- package/lib/browser/ai-configuration/agent-configuration-widget.js +333 -0
- package/lib/browser/ai-configuration/agent-configuration-widget.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-service.d.ts +18 -0
- package/lib/browser/ai-configuration/ai-configuration-service.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-service.js +53 -0
- package/lib/browser/ai-configuration/ai-configuration-service.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-view-contribution.d.ts +14 -0
- package/lib/browser/ai-configuration/ai-configuration-view-contribution.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-view-contribution.js +67 -0
- package/lib/browser/ai-configuration/ai-configuration-view-contribution.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-widget.d.ts +29 -0
- package/lib/browser/ai-configuration/ai-configuration-widget.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-widget.js +118 -0
- package/lib/browser/ai-configuration/ai-configuration-widget.js.map +1 -0
- package/lib/browser/ai-configuration/language-model-renderer.d.ts +13 -0
- package/lib/browser/ai-configuration/language-model-renderer.d.ts.map +1 -0
- package/lib/browser/ai-configuration/language-model-renderer.js +104 -0
- package/lib/browser/ai-configuration/language-model-renderer.js.map +1 -0
- package/lib/browser/ai-configuration/mcp-configuration-widget.d.ts +43 -0
- package/lib/browser/ai-configuration/mcp-configuration-widget.d.ts.map +1 -0
- package/lib/browser/ai-configuration/mcp-configuration-widget.js +302 -0
- package/lib/browser/ai-configuration/mcp-configuration-widget.js.map +1 -0
- package/lib/browser/ai-configuration/model-aliases-configuration-widget.d.ts +41 -0
- package/lib/browser/ai-configuration/model-aliases-configuration-widget.d.ts.map +1 -0
- package/lib/browser/ai-configuration/model-aliases-configuration-widget.js +226 -0
- package/lib/browser/ai-configuration/model-aliases-configuration-widget.js.map +1 -0
- package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.d.ts +141 -0
- package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.d.ts.map +1 -0
- package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.js +508 -0
- package/lib/browser/ai-configuration/prompt-fragments-configuration-widget.js.map +1 -0
- package/lib/browser/ai-configuration/template-settings-renderer.d.ts +10 -0
- package/lib/browser/ai-configuration/template-settings-renderer.d.ts.map +1 -0
- package/lib/browser/ai-configuration/template-settings-renderer.js +48 -0
- package/lib/browser/ai-configuration/template-settings-renderer.js.map +1 -0
- package/lib/browser/ai-configuration/token-usage-configuration-widget.d.ts +22 -0
- package/lib/browser/ai-configuration/token-usage-configuration-widget.d.ts.map +1 -0
- package/lib/browser/ai-configuration/token-usage-configuration-widget.js +156 -0
- package/lib/browser/ai-configuration/token-usage-configuration-widget.js.map +1 -0
- package/lib/browser/ai-configuration/tools-configuration-widget.d.ts +30 -0
- package/lib/browser/ai-configuration/tools-configuration-widget.d.ts.map +1 -0
- package/lib/browser/ai-configuration/tools-configuration-widget.js +150 -0
- package/lib/browser/ai-configuration/tools-configuration-widget.js.map +1 -0
- package/lib/browser/ai-configuration/variable-configuration-widget.d.ts +19 -0
- package/lib/browser/ai-configuration/variable-configuration-widget.d.ts.map +1 -0
- package/lib/browser/ai-configuration/variable-configuration-widget.js +99 -0
- package/lib/browser/ai-configuration/variable-configuration-widget.js.map +1 -0
- package/lib/browser/ai-ide-activation-service.d.ts +18 -0
- package/lib/browser/ai-ide-activation-service.d.ts.map +1 -0
- package/lib/browser/ai-ide-activation-service.js +71 -0
- package/lib/browser/ai-ide-activation-service.js.map +1 -0
- package/lib/browser/ai-terminal-functions.d.ts +13 -0
- package/lib/browser/ai-terminal-functions.d.ts.map +1 -0
- package/lib/browser/ai-terminal-functions.js +114 -0
- package/lib/browser/ai-terminal-functions.js.map +1 -0
- package/lib/browser/app-tester-chat-agent.d.ts +35 -0
- package/lib/browser/app-tester-chat-agent.d.ts.map +1 -0
- package/lib/browser/app-tester-chat-agent.js +142 -0
- package/lib/browser/app-tester-chat-agent.js.map +1 -0
- package/lib/browser/app-tester-chat-functions.d.ts +25 -0
- package/lib/browser/app-tester-chat-functions.d.ts.map +1 -0
- package/lib/browser/app-tester-chat-functions.js +170 -0
- package/lib/browser/app-tester-chat-functions.js.map +1 -0
- package/lib/browser/app-tester-prompt-template.d.ts +6 -0
- package/lib/browser/app-tester-prompt-template.d.ts.map +1 -0
- package/lib/browser/app-tester-prompt-template.js +83 -0
- package/lib/browser/app-tester-prompt-template.js.map +1 -0
- package/lib/browser/architect-agent.d.ts +15 -0
- package/lib/browser/architect-agent.d.ts.map +1 -0
- package/lib/browser/architect-agent.js +68 -0
- package/lib/browser/architect-agent.js.map +1 -0
- package/lib/browser/coder-agent.d.ts +15 -0
- package/lib/browser/coder-agent.d.ts.map +1 -0
- package/lib/browser/coder-agent.js +81 -0
- package/lib/browser/coder-agent.js.map +1 -0
- package/lib/browser/context-file-validation-service-impl.d.ts +13 -0
- package/lib/browser/context-file-validation-service-impl.d.ts.map +1 -0
- package/lib/browser/context-file-validation-service-impl.js +123 -0
- package/lib/browser/context-file-validation-service-impl.js.map +1 -0
- package/lib/browser/context-file-validation-service-impl.spec.d.ts +2 -0
- package/lib/browser/context-file-validation-service-impl.spec.d.ts.map +1 -0
- package/lib/browser/context-file-validation-service-impl.spec.js +340 -0
- package/lib/browser/context-file-validation-service-impl.spec.js.map +1 -0
- package/lib/browser/context-functions.d.ts +16 -0
- package/lib/browser/context-functions.d.ts.map +1 -0
- package/lib/browser/context-functions.js +166 -0
- package/lib/browser/context-functions.js.map +1 -0
- package/lib/browser/context-functions.spec.d.ts +2 -0
- package/lib/browser/context-functions.spec.d.ts.map +1 -0
- package/lib/browser/context-functions.spec.js +213 -0
- package/lib/browser/context-functions.spec.js.map +1 -0
- package/lib/browser/file-changeset-function.spec.d.ts +2 -0
- package/lib/browser/file-changeset-function.spec.d.ts.map +1 -0
- package/lib/browser/file-changeset-function.spec.js +45 -0
- package/lib/browser/file-changeset-function.spec.js.map +1 -0
- package/lib/browser/file-changeset-functions.d.ts +87 -0
- package/lib/browser/file-changeset-functions.d.ts.map +1 -0
- package/lib/browser/file-changeset-functions.js +645 -0
- package/lib/browser/file-changeset-functions.js.map +1 -0
- package/lib/browser/file-changeset-functions.spec.d.ts +2 -0
- package/lib/browser/file-changeset-functions.spec.d.ts.map +1 -0
- package/lib/browser/file-changeset-functions.spec.js +179 -0
- package/lib/browser/file-changeset-functions.spec.js.map +1 -0
- package/lib/browser/frontend-module.d.ts +5 -0
- package/lib/browser/frontend-module.d.ts.map +1 -0
- package/lib/browser/frontend-module.js +220 -0
- package/lib/browser/frontend-module.js.map +1 -0
- package/lib/browser/github-chat-agent.d.ts +48 -0
- package/lib/browser/github-chat-agent.d.ts.map +1 -0
- package/lib/browser/github-chat-agent.js +222 -0
- package/lib/browser/github-chat-agent.js.map +1 -0
- package/lib/browser/github-prompt-template.d.ts +6 -0
- package/lib/browser/github-prompt-template.d.ts.map +1 -0
- package/lib/browser/github-prompt-template.js +53 -0
- package/lib/browser/github-prompt-template.js.map +1 -0
- package/lib/browser/github-repo-variable-contribution.d.ts +15 -0
- package/lib/browser/github-repo-variable-contribution.d.ts.map +1 -0
- package/lib/browser/github-repo-variable-contribution.js +82 -0
- package/lib/browser/github-repo-variable-contribution.js.map +1 -0
- package/lib/browser/ide-chat-welcome-message-provider.d.ts +10 -0
- package/lib/browser/ide-chat-welcome-message-provider.d.ts.map +1 -0
- package/lib/browser/ide-chat-welcome-message-provider.js +102 -0
- package/lib/browser/ide-chat-welcome-message-provider.js.map +1 -0
- package/lib/browser/project-info-agent.d.ts +13 -0
- package/lib/browser/project-info-agent.d.ts.map +1 -0
- package/lib/browser/project-info-agent.js +45 -0
- package/lib/browser/project-info-agent.js.map +1 -0
- package/lib/browser/remember-command-contribution.d.ts +16 -0
- package/lib/browser/remember-command-contribution.d.ts.map +1 -0
- package/lib/browser/remember-command-contribution.js +101 -0
- package/lib/browser/remember-command-contribution.js.map +1 -0
- package/lib/browser/summarize-session-command-contribution.d.ts +19 -0
- package/lib/browser/summarize-session-command-contribution.d.ts.map +1 -0
- package/lib/browser/summarize-session-command-contribution.js +118 -0
- package/lib/browser/summarize-session-command-contribution.js.map +1 -0
- package/lib/browser/task-background-summary-variable.d.ts +9 -0
- package/lib/browser/task-background-summary-variable.d.ts.map +1 -0
- package/lib/browser/task-background-summary-variable.js +60 -0
- package/lib/browser/task-background-summary-variable.js.map +1 -0
- package/lib/browser/task-context-agent.d.ts +13 -0
- package/lib/browser/task-context-agent.d.ts.map +1 -0
- package/lib/browser/task-context-agent.js +45 -0
- package/lib/browser/task-context-agent.js.map +1 -0
- package/lib/browser/task-context-file-storage-service.d.ts +40 -0
- package/lib/browser/task-context-file-storage-service.d.ts.map +1 -0
- package/lib/browser/task-context-file-storage-service.js +232 -0
- package/lib/browser/task-context-file-storage-service.js.map +1 -0
- package/lib/browser/template-preference-contribution.d.ts +17 -0
- package/lib/browser/template-preference-contribution.d.ts.map +1 -0
- package/lib/browser/template-preference-contribution.js +94 -0
- package/lib/browser/template-preference-contribution.js.map +1 -0
- package/lib/browser/test/tool-provider-cancellation-test-util.spec.d.ts +2 -0
- package/lib/browser/test/tool-provider-cancellation-test-util.spec.d.ts.map +1 -0
- package/lib/browser/test/tool-provider-cancellation-test-util.spec.js +52 -0
- package/lib/browser/test/tool-provider-cancellation-test-util.spec.js.map +1 -0
- package/lib/browser/workspace-functions.d.ts +78 -0
- package/lib/browser/workspace-functions.d.ts.map +1 -0
- package/lib/browser/workspace-functions.js +697 -0
- package/lib/browser/workspace-functions.js.map +1 -0
- package/lib/browser/workspace-functions.spec.d.ts +2 -0
- package/lib/browser/workspace-functions.spec.d.ts.map +1 -0
- package/lib/browser/workspace-functions.spec.js +161 -0
- package/lib/browser/workspace-functions.spec.js.map +1 -0
- package/lib/browser/workspace-launch-provider.d.ts +24 -0
- package/lib/browser/workspace-launch-provider.d.ts.map +1 -0
- package/lib/browser/workspace-launch-provider.js +216 -0
- package/lib/browser/workspace-launch-provider.js.map +1 -0
- package/lib/browser/workspace-launch-provider.spec.d.ts +2 -0
- package/lib/browser/workspace-launch-provider.spec.d.ts.map +1 -0
- package/lib/browser/workspace-launch-provider.spec.js +245 -0
- package/lib/browser/workspace-launch-provider.spec.js.map +1 -0
- package/lib/browser/workspace-search-provider.d.ts +15 -0
- package/lib/browser/workspace-search-provider.d.ts.map +1 -0
- package/lib/browser/workspace-search-provider.js +204 -0
- package/lib/browser/workspace-search-provider.js.map +1 -0
- package/lib/browser/workspace-search-provider.spec.d.ts +2 -0
- package/lib/browser/workspace-search-provider.spec.d.ts.map +1 -0
- package/lib/browser/workspace-search-provider.spec.js +82 -0
- package/lib/browser/workspace-search-provider.spec.js.map +1 -0
- package/lib/browser/workspace-task-provider.d.ts +15 -0
- package/lib/browser/workspace-task-provider.d.ts.map +1 -0
- package/lib/browser/workspace-task-provider.js +138 -0
- package/lib/browser/workspace-task-provider.js.map +1 -0
- package/lib/browser/workspace-task-provider.spec.d.ts +2 -0
- package/lib/browser/workspace-task-provider.spec.d.ts.map +1 -0
- package/lib/browser/workspace-task-provider.spec.js +109 -0
- package/lib/browser/workspace-task-provider.spec.js.map +1 -0
- package/lib/common/ai-configuration-preferences.d.ts +8 -0
- package/lib/common/ai-configuration-preferences.d.ts.map +1 -0
- package/lib/common/ai-configuration-preferences.js +41 -0
- package/lib/common/ai-configuration-preferences.js.map +1 -0
- package/lib/common/ai-ide-preferences.d.ts +5 -0
- package/lib/common/ai-ide-preferences.d.ts.map +1 -0
- package/lib/common/ai-ide-preferences.js +53 -0
- package/lib/common/ai-ide-preferences.js.map +1 -0
- package/lib/common/ai-terminal-functions.d.ts +2 -0
- package/lib/common/ai-terminal-functions.d.ts.map +1 -0
- package/lib/common/ai-terminal-functions.js +20 -0
- package/lib/common/ai-terminal-functions.js.map +1 -0
- package/lib/common/app-tester-chat-functions.d.ts +5 -0
- package/lib/common/app-tester-chat-functions.d.ts.map +1 -0
- package/lib/common/app-tester-chat-functions.js +23 -0
- package/lib/common/app-tester-chat-functions.js.map +1 -0
- package/lib/common/architect-prompt-template.d.ts +3 -0
- package/lib/common/architect-prompt-template.d.ts.map +1 -0
- package/lib/common/architect-prompt-template.js +81 -0
- package/lib/common/architect-prompt-template.js.map +1 -0
- package/lib/common/browser-automation-protocol.d.ts +15 -0
- package/lib/common/browser-automation-protocol.d.ts.map +1 -0
- package/lib/common/browser-automation-protocol.js +22 -0
- package/lib/common/browser-automation-protocol.js.map +1 -0
- package/lib/common/coder-replace-prompt-template.d.ts +11 -0
- package/lib/common/coder-replace-prompt-template.d.ts.map +1 -0
- package/lib/common/coder-replace-prompt-template.js +296 -0
- package/lib/common/coder-replace-prompt-template.js.map +1 -0
- package/lib/common/command-chat-agents.d.ts +36 -0
- package/lib/common/command-chat-agents.d.ts.map +1 -0
- package/lib/common/command-chat-agents.js +122 -0
- package/lib/common/command-chat-agents.js.map +1 -0
- package/lib/common/command-prompt-template.d.ts +3 -0
- package/lib/common/command-prompt-template.d.ts.map +1 -0
- package/lib/common/command-prompt-template.js +226 -0
- package/lib/common/command-prompt-template.js.map +1 -0
- package/lib/common/context-files-variable.d.ts +9 -0
- package/lib/common/context-files-variable.d.ts.map +1 -0
- package/lib/common/context-files-variable.js +52 -0
- package/lib/common/context-files-variable.js.map +1 -0
- package/lib/common/context-functions.d.ts +4 -0
- package/lib/common/context-functions.d.ts.map +1 -0
- package/lib/common/context-functions.js +22 -0
- package/lib/common/context-functions.js.map +1 -0
- package/lib/common/context-variables.d.ts +3 -0
- package/lib/common/context-variables.d.ts.map +1 -0
- package/lib/common/context-variables.js +21 -0
- package/lib/common/context-variables.js.map +1 -0
- package/lib/common/file-changeset-function-ids.d.ts +19 -0
- package/lib/common/file-changeset-function-ids.d.ts.map +1 -0
- package/lib/common/file-changeset-function-ids.js +37 -0
- package/lib/common/file-changeset-function-ids.js.map +1 -0
- package/lib/common/github-repo-protocol.d.ts +15 -0
- package/lib/common/github-repo-protocol.d.ts.map +1 -0
- package/lib/common/github-repo-protocol.js +21 -0
- package/lib/common/github-repo-protocol.js.map +1 -0
- package/lib/common/orchestrator-chat-agent.d.ts +36 -0
- package/lib/common/orchestrator-chat-agent.d.ts.map +1 -0
- package/lib/common/orchestrator-chat-agent.js +167 -0
- package/lib/common/orchestrator-chat-agent.js.map +1 -0
- package/lib/common/orchestrator-prompt-template.d.ts +3 -0
- package/lib/common/orchestrator-prompt-template.d.ts.map +1 -0
- package/lib/common/orchestrator-prompt-template.js +55 -0
- package/lib/common/orchestrator-prompt-template.js.map +1 -0
- package/lib/common/project-info-prompt-template.d.ts +6 -0
- package/lib/common/project-info-prompt-template.d.ts.map +1 -0
- package/lib/common/project-info-prompt-template.js +145 -0
- package/lib/common/project-info-prompt-template.js.map +1 -0
- package/lib/common/summarize-session-commands.d.ts +4 -0
- package/lib/common/summarize-session-commands.d.ts.map +1 -0
- package/lib/common/summarize-session-commands.js +28 -0
- package/lib/common/summarize-session-commands.js.map +1 -0
- package/lib/common/task-context-prompt-template.d.ts +8 -0
- package/lib/common/task-context-prompt-template.d.ts.map +1 -0
- package/lib/common/task-context-prompt-template.js +217 -0
- package/lib/common/task-context-prompt-template.js.map +1 -0
- package/lib/common/universal-chat-agent.d.ts +17 -0
- package/lib/common/universal-chat-agent.d.ts.map +1 -0
- package/lib/common/universal-chat-agent.js +47 -0
- package/lib/common/universal-chat-agent.js.map +1 -0
- package/lib/common/universal-prompt-template.d.ts +4 -0
- package/lib/common/universal-prompt-template.d.ts.map +1 -0
- package/lib/common/universal-prompt-template.js +32 -0
- package/lib/common/universal-prompt-template.js.map +1 -0
- package/lib/common/workspace-functions.d.ts +12 -0
- package/lib/common/workspace-functions.d.ts.map +1 -0
- package/lib/common/workspace-functions.js +30 -0
- package/lib/common/workspace-functions.js.map +1 -0
- package/lib/common/workspace-preferences.d.ts +10 -0
- package/lib/common/workspace-preferences.d.ts.map +1 -0
- package/lib/common/workspace-preferences.js +89 -0
- package/lib/common/workspace-preferences.js.map +1 -0
- package/lib/common/workspace-search-provider-util.d.ts +17 -0
- package/lib/common/workspace-search-provider-util.d.ts.map +1 -0
- package/lib/common/workspace-search-provider-util.js +51 -0
- package/lib/common/workspace-search-provider-util.js.map +1 -0
- package/lib/node/app-tester-agent/browser-automation-impl.d.ts +18 -0
- package/lib/node/app-tester-agent/browser-automation-impl.d.ts.map +1 -0
- package/lib/node/app-tester-agent/browser-automation-impl.js +96 -0
- package/lib/node/app-tester-agent/browser-automation-impl.js.map +1 -0
- package/lib/node/backend-module.d.ts +4 -0
- package/lib/node/backend-module.d.ts.map +1 -0
- package/lib/node/backend-module.js +45 -0
- package/lib/node/backend-module.js.map +1 -0
- package/lib/node/github-repo-service-impl.d.ts +7 -0
- package/lib/node/github-repo-service-impl.d.ts.map +1 -0
- package/lib/node/github-repo-service-impl.js +86 -0
- package/lib/node/github-repo-service-impl.js.map +1 -0
- package/lib/package.spec.d.ts +1 -0
- package/lib/package.spec.d.ts.map +1 -0
- package/lib/package.spec.js +26 -0
- package/lib/package.spec.js.map +1 -0
- package/package.json +21 -21
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2025 EclipseSource GmbH.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const jsdom_1 = require("@theia/core/lib/browser/test/jsdom");
|
|
19
|
+
let disableJSDOM = (0, jsdom_1.enableJSDOM)();
|
|
20
|
+
const frontend_application_config_provider_1 = require("@theia/core/lib/browser/frontend-application-config-provider");
|
|
21
|
+
frontend_application_config_provider_1.FrontendApplicationConfigProvider.set({});
|
|
22
|
+
const chai_1 = require("chai");
|
|
23
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
24
|
+
const core_1 = require("@theia/core");
|
|
25
|
+
const file_service_1 = require("@theia/filesystem/lib/browser/file-service");
|
|
26
|
+
const workspace_service_1 = require("@theia/workspace/lib/browser/workspace-service");
|
|
27
|
+
const context_file_validation_service_1 = require("@theia/ai-chat/lib/browser/context-file-validation-service");
|
|
28
|
+
const context_file_validation_service_impl_1 = require("./context-file-validation-service-impl");
|
|
29
|
+
const workspace_functions_1 = require("./workspace-functions");
|
|
30
|
+
disableJSDOM();
|
|
31
|
+
describe('ContextFileValidationService', () => {
|
|
32
|
+
let container;
|
|
33
|
+
let validationService;
|
|
34
|
+
let mockFileService;
|
|
35
|
+
let mockWorkspaceService;
|
|
36
|
+
let mockPreferenceService;
|
|
37
|
+
const workspaceRoot = new core_1.URI('file:///home/user/workspace');
|
|
38
|
+
// Store URIs as actual URI strings, exactly as URI.toString() would produce them
|
|
39
|
+
const existingFiles = new Map([
|
|
40
|
+
// Files inside workspace
|
|
41
|
+
['file:///home/user/workspace/src/index.tsx', true],
|
|
42
|
+
['file:///home/user/workspace/package.json', true],
|
|
43
|
+
['file:///home/user/workspace/README.md', true],
|
|
44
|
+
['file:///home/user/workspace/src/components/Button.tsx', true],
|
|
45
|
+
['file:///home/user/workspace/config.json', true],
|
|
46
|
+
['file:///home/user/workspace/src/file%20with%20spaces.tsx', true],
|
|
47
|
+
// Files outside workspace (these exist but should be rejected)
|
|
48
|
+
['file:///etc/passwd', true],
|
|
49
|
+
['file:///etc/hosts', true],
|
|
50
|
+
['file:///home/other-user/secret.txt', true],
|
|
51
|
+
['file:///tmp/temporary-file.log', true]
|
|
52
|
+
]);
|
|
53
|
+
before(() => {
|
|
54
|
+
disableJSDOM = (0, jsdom_1.enableJSDOM)();
|
|
55
|
+
});
|
|
56
|
+
after(() => {
|
|
57
|
+
disableJSDOM();
|
|
58
|
+
});
|
|
59
|
+
beforeEach(async () => {
|
|
60
|
+
container = new inversify_1.Container();
|
|
61
|
+
// Mock WorkspaceService
|
|
62
|
+
mockWorkspaceService = {
|
|
63
|
+
tryGetRoots: () => [{
|
|
64
|
+
resource: workspaceRoot,
|
|
65
|
+
isDirectory: true
|
|
66
|
+
}],
|
|
67
|
+
roots: Promise.resolve([{
|
|
68
|
+
resource: workspaceRoot,
|
|
69
|
+
isDirectory: true
|
|
70
|
+
}])
|
|
71
|
+
};
|
|
72
|
+
// Mock FileService
|
|
73
|
+
mockFileService = {
|
|
74
|
+
exists: async (uri) => {
|
|
75
|
+
const normalizedUri = uri.path.normalize();
|
|
76
|
+
const normalizedUriString = uri.withPath(normalizedUri).toString();
|
|
77
|
+
const uriString = uri.toString();
|
|
78
|
+
const exists = (existingFiles.has(uriString) && existingFiles.get(uriString) === true) ||
|
|
79
|
+
(existingFiles.has(normalizedUriString) && existingFiles.get(normalizedUriString) === true);
|
|
80
|
+
return exists;
|
|
81
|
+
},
|
|
82
|
+
resolve: async (uri) => {
|
|
83
|
+
const uriString = uri.toString();
|
|
84
|
+
if (existingFiles.has(uriString) && existingFiles.get(uriString) === true) {
|
|
85
|
+
return {
|
|
86
|
+
resource: uri,
|
|
87
|
+
isDirectory: false
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
throw new Error('File not found');
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
// Mock PreferenceService
|
|
94
|
+
mockPreferenceService = {
|
|
95
|
+
get: () => false
|
|
96
|
+
};
|
|
97
|
+
container.bind(file_service_1.FileService).toConstantValue(mockFileService);
|
|
98
|
+
container.bind(workspace_service_1.WorkspaceService).toConstantValue(mockWorkspaceService);
|
|
99
|
+
container.bind(core_1.PreferenceService).toConstantValue(mockPreferenceService);
|
|
100
|
+
container.bind(workspace_functions_1.WorkspaceFunctionScope).toSelf();
|
|
101
|
+
container.bind(context_file_validation_service_impl_1.ContextFileValidationServiceImpl).toSelf();
|
|
102
|
+
container.bind(context_file_validation_service_1.ContextFileValidationService).toService(context_file_validation_service_impl_1.ContextFileValidationServiceImpl);
|
|
103
|
+
validationService = await container.getAsync(context_file_validation_service_1.ContextFileValidationService);
|
|
104
|
+
});
|
|
105
|
+
describe('validateFile with relative paths', () => {
|
|
106
|
+
it('should validate existing file with relative path', async () => {
|
|
107
|
+
const result = await validationService.validateFile('src/index.tsx');
|
|
108
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.VALID);
|
|
109
|
+
});
|
|
110
|
+
it('should reject non-existing file with relative path', async () => {
|
|
111
|
+
const result = await validationService.validateFile('src/missing.tsx');
|
|
112
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
113
|
+
});
|
|
114
|
+
it('should validate nested file with relative path', async () => {
|
|
115
|
+
const result = await validationService.validateFile('src/components/Button.tsx');
|
|
116
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.VALID);
|
|
117
|
+
});
|
|
118
|
+
it('should validate file in root with relative path', async () => {
|
|
119
|
+
const result = await validationService.validateFile('package.json');
|
|
120
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.VALID);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
describe('validateFile with absolute file paths', () => {
|
|
124
|
+
it('should validate existing file with absolute path within workspace', async () => {
|
|
125
|
+
const result = await validationService.validateFile('/home/user/workspace/src/index.tsx');
|
|
126
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.VALID);
|
|
127
|
+
});
|
|
128
|
+
it('should reject non-existing file with absolute path within workspace', async () => {
|
|
129
|
+
const result = await validationService.validateFile('/home/user/workspace/src/missing.tsx');
|
|
130
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
131
|
+
});
|
|
132
|
+
it('should reject existing file with absolute path outside workspace (/etc/passwd)', async () => {
|
|
133
|
+
const result = await validationService.validateFile('/etc/passwd');
|
|
134
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
135
|
+
});
|
|
136
|
+
it('should reject existing file with absolute path outside workspace (/etc/hosts)', async () => {
|
|
137
|
+
const result = await validationService.validateFile('/etc/hosts');
|
|
138
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
139
|
+
});
|
|
140
|
+
it('should reject existing file with absolute path in other user directory', async () => {
|
|
141
|
+
const result = await validationService.validateFile('/home/other-user/secret.txt');
|
|
142
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
143
|
+
});
|
|
144
|
+
it('should reject existing file with absolute path in /tmp', async () => {
|
|
145
|
+
const result = await validationService.validateFile('/tmp/temporary-file.log');
|
|
146
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
147
|
+
});
|
|
148
|
+
it('should reject non-existing file with absolute path outside workspace', async () => {
|
|
149
|
+
const result = await validationService.validateFile('/var/log/nonexistent.log');
|
|
150
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
151
|
+
});
|
|
152
|
+
it('should validate nested file with absolute path within workspace', async () => {
|
|
153
|
+
const result = await validationService.validateFile('/home/user/workspace/src/components/Button.tsx');
|
|
154
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.VALID);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
describe('validateFile with file:// URIs', () => {
|
|
158
|
+
it('should validate existing file with file:// URI within workspace', async () => {
|
|
159
|
+
const result = await validationService.validateFile('file:///home/user/workspace/src/index.tsx');
|
|
160
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.VALID);
|
|
161
|
+
});
|
|
162
|
+
it('should reject non-existing file with file:// URI within workspace', async () => {
|
|
163
|
+
const result = await validationService.validateFile('file:///home/user/workspace/src/missing.tsx');
|
|
164
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
165
|
+
});
|
|
166
|
+
it('should reject existing file with file:// URI outside workspace (/etc/passwd)', async () => {
|
|
167
|
+
const result = await validationService.validateFile('file:///etc/passwd');
|
|
168
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
169
|
+
});
|
|
170
|
+
it('should reject existing file with file:// URI outside workspace (/etc/hosts)', async () => {
|
|
171
|
+
const result = await validationService.validateFile('file:///etc/hosts');
|
|
172
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
173
|
+
});
|
|
174
|
+
it('should reject existing file with file:// URI in other user directory', async () => {
|
|
175
|
+
const result = await validationService.validateFile('file:///home/other-user/secret.txt');
|
|
176
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
177
|
+
});
|
|
178
|
+
it('should reject existing file with file:// URI in /tmp', async () => {
|
|
179
|
+
const result = await validationService.validateFile('file:///tmp/temporary-file.log');
|
|
180
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
181
|
+
});
|
|
182
|
+
it('should reject non-existing file with file:// URI outside workspace', async () => {
|
|
183
|
+
const result = await validationService.validateFile('file:///var/log/nonexistent.log');
|
|
184
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
185
|
+
});
|
|
186
|
+
it('should validate file at workspace root with file:// URI', async () => {
|
|
187
|
+
const result = await validationService.validateFile('file:///home/user/workspace/package.json');
|
|
188
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.VALID);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
describe('validateFile with URI objects', () => {
|
|
192
|
+
it('should validate existing file with URI object within workspace', async () => {
|
|
193
|
+
const uri = new core_1.URI('file:///home/user/workspace/src/index.tsx');
|
|
194
|
+
const result = await validationService.validateFile(uri);
|
|
195
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.VALID);
|
|
196
|
+
});
|
|
197
|
+
it('should reject non-existing file with URI object within workspace', async () => {
|
|
198
|
+
const uri = new core_1.URI('file:///home/user/workspace/src/missing.tsx');
|
|
199
|
+
const result = await validationService.validateFile(uri);
|
|
200
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
201
|
+
});
|
|
202
|
+
it('should reject existing file with URI object outside workspace', async () => {
|
|
203
|
+
const uri = new core_1.URI('file:///etc/passwd');
|
|
204
|
+
const result = await validationService.validateFile(uri);
|
|
205
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
206
|
+
});
|
|
207
|
+
it('should reject another existing file with URI object outside workspace', async () => {
|
|
208
|
+
const uri = new core_1.URI('file:///home/other-user/secret.txt');
|
|
209
|
+
const result = await validationService.validateFile(uri);
|
|
210
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
describe('validateFile with no workspace', () => {
|
|
214
|
+
beforeEach(async () => {
|
|
215
|
+
// Override mock to return no workspace roots
|
|
216
|
+
mockWorkspaceService.tryGetRoots = () => [];
|
|
217
|
+
});
|
|
218
|
+
it('should reject any file when no workspace is open', async () => {
|
|
219
|
+
const result = await validationService.validateFile('src/index.tsx');
|
|
220
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
221
|
+
});
|
|
222
|
+
it('should reject absolute path when no workspace is open', async () => {
|
|
223
|
+
const result = await validationService.validateFile('/home/user/file.txt');
|
|
224
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
225
|
+
});
|
|
226
|
+
it('should reject file:// URI when no workspace is open', async () => {
|
|
227
|
+
const result = await validationService.validateFile('file:///home/user/file.txt');
|
|
228
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
describe('validateFile with multiple workspace roots', () => {
|
|
232
|
+
const workspaceRoot2 = new core_1.URI('file:///home/user/other-project');
|
|
233
|
+
beforeEach(async () => {
|
|
234
|
+
// Override mock to return multiple workspace roots
|
|
235
|
+
mockWorkspaceService.tryGetRoots = () => [
|
|
236
|
+
{
|
|
237
|
+
resource: workspaceRoot,
|
|
238
|
+
isDirectory: true
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
resource: workspaceRoot2,
|
|
242
|
+
isDirectory: true
|
|
243
|
+
}
|
|
244
|
+
];
|
|
245
|
+
// Add files in the second workspace
|
|
246
|
+
existingFiles.set('file:///home/user/other-project/index.js', true);
|
|
247
|
+
existingFiles.set('file:///home/user/other-project/lib/utils.js', true);
|
|
248
|
+
});
|
|
249
|
+
afterEach(() => {
|
|
250
|
+
// Clean up files added for this test
|
|
251
|
+
existingFiles.delete('file:///home/user/other-project/index.js');
|
|
252
|
+
existingFiles.delete('file:///home/user/other-project/lib/utils.js');
|
|
253
|
+
});
|
|
254
|
+
it('should validate file in first workspace root', async () => {
|
|
255
|
+
const result = await validationService.validateFile('src/index.tsx');
|
|
256
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.VALID);
|
|
257
|
+
});
|
|
258
|
+
it('should validate file in second workspace root with relative path', async () => {
|
|
259
|
+
const result = await validationService.validateFile('index.js');
|
|
260
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_SECONDARY);
|
|
261
|
+
});
|
|
262
|
+
it('should validate file in second workspace root with absolute path', async () => {
|
|
263
|
+
const result = await validationService.validateFile('/home/user/other-project/index.js');
|
|
264
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_SECONDARY);
|
|
265
|
+
});
|
|
266
|
+
it('should validate file in second workspace root with file:// URI', async () => {
|
|
267
|
+
const result = await validationService.validateFile('file:///home/user/other-project/lib/utils.js');
|
|
268
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_SECONDARY);
|
|
269
|
+
});
|
|
270
|
+
it('should still reject files outside both workspace roots', async () => {
|
|
271
|
+
const result = await validationService.validateFile('/etc/passwd');
|
|
272
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
describe('validateFile error handling', () => {
|
|
276
|
+
it('should return false when FileService.exists throws error', async () => {
|
|
277
|
+
mockFileService.exists = async () => {
|
|
278
|
+
throw new Error('Permission denied');
|
|
279
|
+
};
|
|
280
|
+
const result = await validationService.validateFile('src/index.tsx');
|
|
281
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
282
|
+
});
|
|
283
|
+
it('should handle Windows-style paths', async () => {
|
|
284
|
+
// Add a Windows path to existing files
|
|
285
|
+
// Note: URI encoding will convert 'c:' to 'c%3A'
|
|
286
|
+
const windowsRoot = new core_1.URI('file:///c:/Users/user/project');
|
|
287
|
+
const windowsFile = new core_1.URI('file:///c:/Users/user/project/file.txt');
|
|
288
|
+
existingFiles.set(windowsFile.toString(), true);
|
|
289
|
+
// Override workspace to use Windows path
|
|
290
|
+
mockWorkspaceService.tryGetRoots = () => [{
|
|
291
|
+
resource: windowsRoot,
|
|
292
|
+
isDirectory: true
|
|
293
|
+
}];
|
|
294
|
+
const result = await validationService.validateFile('file:///c:/Users/user/project/file.txt');
|
|
295
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.VALID);
|
|
296
|
+
// Clean up
|
|
297
|
+
existingFiles.delete(windowsFile.toString());
|
|
298
|
+
});
|
|
299
|
+
it('should reject Windows system files outside workspace', async () => {
|
|
300
|
+
// Add Windows system file
|
|
301
|
+
const windowsSystemFile = 'file:///c:/Windows/System32/config/sam';
|
|
302
|
+
existingFiles.set(windowsSystemFile, true);
|
|
303
|
+
// Keep workspace as Linux for this test
|
|
304
|
+
const result = await validationService.validateFile('file:///c:/Windows/System32/config/sam');
|
|
305
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
306
|
+
// Clean up
|
|
307
|
+
existingFiles.delete(windowsSystemFile);
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
describe('edge cases', () => {
|
|
311
|
+
it('should handle paths with special characters', async () => {
|
|
312
|
+
const result = await validationService.validateFile('file:///home/user/workspace/src/file%20with%20spaces.tsx');
|
|
313
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.VALID);
|
|
314
|
+
});
|
|
315
|
+
it('should handle paths with normalized separators', async () => {
|
|
316
|
+
const result = await validationService.validateFile('src\\components\\Button.tsx');
|
|
317
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.VALID);
|
|
318
|
+
});
|
|
319
|
+
it('should reject empty path', async () => {
|
|
320
|
+
const result = await validationService.validateFile('');
|
|
321
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
322
|
+
});
|
|
323
|
+
it('should reject parent directory references in relative paths', async () => {
|
|
324
|
+
// Parent directory references are not allowed for security and clarity
|
|
325
|
+
const result = await validationService.validateFile('src/../config.json');
|
|
326
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
327
|
+
});
|
|
328
|
+
it('should reject path traversal attempts with parent directory references', async () => {
|
|
329
|
+
// Path traversal attempts should be rejected
|
|
330
|
+
const result = await validationService.validateFile('../../../../../../etc/passwd');
|
|
331
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
332
|
+
});
|
|
333
|
+
it('should reject absolute paths with parent directory references', async () => {
|
|
334
|
+
// Even absolute paths with .. should be rejected for consistency
|
|
335
|
+
const result = await validationService.validateFile('/home/user/workspace/src/../config.json');
|
|
336
|
+
(0, chai_1.expect)(result.state).to.equal(context_file_validation_service_1.FileValidationState.INVALID_NOT_FOUND);
|
|
337
|
+
});
|
|
338
|
+
});
|
|
339
|
+
});
|
|
340
|
+
//# sourceMappingURL=context-file-validation-service-impl.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-file-validation-service-impl.spec.js","sourceRoot":"","sources":["../../src/browser/context-file-validation-service-impl.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ToolProvider, ToolRequest } from '@theia/ai-core';
|
|
2
|
+
import { ContextFileValidationService } from '@theia/ai-chat/lib/browser/context-file-validation-service';
|
|
3
|
+
export declare class ListChatContext implements ToolProvider {
|
|
4
|
+
static ID: string;
|
|
5
|
+
getTool(): ToolRequest;
|
|
6
|
+
}
|
|
7
|
+
export declare class ResolveChatContext implements ToolProvider {
|
|
8
|
+
static ID: string;
|
|
9
|
+
getTool(): ToolRequest;
|
|
10
|
+
}
|
|
11
|
+
export declare class AddFileToChatContext implements ToolProvider {
|
|
12
|
+
static ID: string;
|
|
13
|
+
protected readonly validationService: ContextFileValidationService | undefined;
|
|
14
|
+
getTool(): ToolRequest;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=context-functions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-functions.d.ts","sourceRoot":"","sources":["../../src/browser/context-functions.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI3D,OAAO,EAAE,4BAA4B,EAAuB,MAAM,4DAA4D,CAAC;AAE/H,qBACa,eAAgB,YAAW,YAAY;IAChD,MAAM,CAAC,EAAE,SAAiC;IAE1C,OAAO,IAAI,WAAW;CAqBzB;AAED,qBACa,kBAAmB,YAAW,YAAY;IACnD,MAAM,CAAC,EAAE,SAAoC;IAE7C,OAAO,IAAI,WAAW;CAkCzB;AAED,qBACa,oBAAqB,YAAW,YAAY;IACrD,MAAM,CAAC,EAAE,SAAoC;IAG7C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,4BAA4B,GAAG,SAAS,CAAC;IAE/E,OAAO,IAAI,WAAW;CA6DzB"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2025 EclipseSource GmbH.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
var ListChatContext_1, ResolveChatContext_1, AddFileToChatContext_1;
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.AddFileToChatContext = exports.ResolveChatContext = exports.ListChatContext = void 0;
|
|
20
|
+
const tslib_1 = require("tslib");
|
|
21
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
22
|
+
const context_functions_1 = require("../common/context-functions");
|
|
23
|
+
const file_variable_contribution_1 = require("@theia/ai-core/lib/browser/file-variable-contribution");
|
|
24
|
+
const context_file_validation_service_1 = require("@theia/ai-chat/lib/browser/context-file-validation-service");
|
|
25
|
+
let ListChatContext = ListChatContext_1 = class ListChatContext {
|
|
26
|
+
getTool() {
|
|
27
|
+
return {
|
|
28
|
+
id: ListChatContext_1.ID,
|
|
29
|
+
name: ListChatContext_1.ID,
|
|
30
|
+
description: 'Returns the list of context elements (such as files) specified by the user manually as part of the chat request.',
|
|
31
|
+
handler: async (_, ctx) => {
|
|
32
|
+
var _a, _b;
|
|
33
|
+
if ((_b = (_a = ctx === null || ctx === void 0 ? void 0 : ctx.response) === null || _a === void 0 ? void 0 : _a.cancellationToken) === null || _b === void 0 ? void 0 : _b.isCancellationRequested) {
|
|
34
|
+
return JSON.stringify({ error: 'Operation cancelled by user' });
|
|
35
|
+
}
|
|
36
|
+
const result = ctx.context.variables.map(contextElement => ({
|
|
37
|
+
id: contextElement.variable.id + contextElement.arg,
|
|
38
|
+
type: contextElement.variable.name
|
|
39
|
+
}));
|
|
40
|
+
return JSON.stringify(result, undefined, 2);
|
|
41
|
+
},
|
|
42
|
+
parameters: {
|
|
43
|
+
type: 'object',
|
|
44
|
+
properties: {}
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
exports.ListChatContext = ListChatContext;
|
|
50
|
+
ListChatContext.ID = context_functions_1.LIST_CHAT_CONTEXT_FUNCTION_ID;
|
|
51
|
+
exports.ListChatContext = ListChatContext = ListChatContext_1 = tslib_1.__decorate([
|
|
52
|
+
(0, inversify_1.injectable)()
|
|
53
|
+
], ListChatContext);
|
|
54
|
+
let ResolveChatContext = ResolveChatContext_1 = class ResolveChatContext {
|
|
55
|
+
getTool() {
|
|
56
|
+
return {
|
|
57
|
+
id: ResolveChatContext_1.ID,
|
|
58
|
+
name: ResolveChatContext_1.ID,
|
|
59
|
+
description: 'Returns the content of a specific context element (such as files) specified by the user manually as part of the chat request.',
|
|
60
|
+
parameters: {
|
|
61
|
+
type: 'object',
|
|
62
|
+
properties: {
|
|
63
|
+
contextElementId: {
|
|
64
|
+
type: 'string',
|
|
65
|
+
description: 'The id of the context element to resolve.'
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
required: ['contextElementId']
|
|
69
|
+
},
|
|
70
|
+
handler: async (args, ctx) => {
|
|
71
|
+
var _a, _b;
|
|
72
|
+
if ((_b = (_a = ctx === null || ctx === void 0 ? void 0 : ctx.response) === null || _a === void 0 ? void 0 : _a.cancellationToken) === null || _b === void 0 ? void 0 : _b.isCancellationRequested) {
|
|
73
|
+
return JSON.stringify({ error: 'Operation cancelled by user' });
|
|
74
|
+
}
|
|
75
|
+
const { contextElementId } = JSON.parse(args);
|
|
76
|
+
const variable = ctx.context.variables.find(contextElement => contextElement.variable.id + contextElement.arg === contextElementId);
|
|
77
|
+
if (variable) {
|
|
78
|
+
const result = {
|
|
79
|
+
type: variable.variable.name,
|
|
80
|
+
ref: variable.value,
|
|
81
|
+
content: variable.contextValue
|
|
82
|
+
};
|
|
83
|
+
return JSON.stringify(result, undefined, 2);
|
|
84
|
+
}
|
|
85
|
+
return JSON.stringify({ error: 'Context element not found' }, undefined, 2);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
exports.ResolveChatContext = ResolveChatContext;
|
|
91
|
+
ResolveChatContext.ID = context_functions_1.RESOLVE_CHAT_CONTEXT_FUNCTION_ID;
|
|
92
|
+
exports.ResolveChatContext = ResolveChatContext = ResolveChatContext_1 = tslib_1.__decorate([
|
|
93
|
+
(0, inversify_1.injectable)()
|
|
94
|
+
], ResolveChatContext);
|
|
95
|
+
let AddFileToChatContext = AddFileToChatContext_1 = class AddFileToChatContext {
|
|
96
|
+
getTool() {
|
|
97
|
+
return {
|
|
98
|
+
id: AddFileToChatContext_1.ID,
|
|
99
|
+
name: AddFileToChatContext_1.ID,
|
|
100
|
+
parameters: {
|
|
101
|
+
type: 'object',
|
|
102
|
+
properties: {
|
|
103
|
+
filesToAdd: {
|
|
104
|
+
type: 'array',
|
|
105
|
+
description: 'The absolute paths of files to add to the context of the current chat.',
|
|
106
|
+
items: { type: 'string' }
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
required: ['filesToAdd']
|
|
110
|
+
},
|
|
111
|
+
description: 'Adds one or more files to the context of the current chat session. ' +
|
|
112
|
+
'Only files that exist within the workspace boundaries will be added. ' +
|
|
113
|
+
'Files outside the workspace or non-existent files will be rejected. ' +
|
|
114
|
+
'Returns a detailed status for each file, including which were successfully added and which were rejected with reasons.',
|
|
115
|
+
handler: async (arg, ctx) => {
|
|
116
|
+
var _a, _b;
|
|
117
|
+
if ((_b = (_a = ctx === null || ctx === void 0 ? void 0 : ctx.response) === null || _a === void 0 ? void 0 : _a.cancellationToken) === null || _b === void 0 ? void 0 : _b.isCancellationRequested) {
|
|
118
|
+
return JSON.stringify({ error: 'Operation cancelled by user' });
|
|
119
|
+
}
|
|
120
|
+
const { filesToAdd } = JSON.parse(arg);
|
|
121
|
+
const added = [];
|
|
122
|
+
const rejected = [];
|
|
123
|
+
for (const file of filesToAdd) {
|
|
124
|
+
if (this.validationService) {
|
|
125
|
+
const validationResult = await this.validationService.validateFile(file);
|
|
126
|
+
if (validationResult.state === context_file_validation_service_1.FileValidationState.VALID) {
|
|
127
|
+
ctx.session.context.addVariables({ arg: file, variable: file_variable_contribution_1.FILE_VARIABLE });
|
|
128
|
+
added.push(file);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
rejected.push({
|
|
132
|
+
file,
|
|
133
|
+
reason: validationResult.message || 'File validation failed',
|
|
134
|
+
state: validationResult.state
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
ctx.session.context.addVariables({ arg: file, variable: file_variable_contribution_1.FILE_VARIABLE });
|
|
140
|
+
added.push(file);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return JSON.stringify({
|
|
144
|
+
added,
|
|
145
|
+
rejected,
|
|
146
|
+
summary: {
|
|
147
|
+
totalRequested: filesToAdd.length,
|
|
148
|
+
added: added.length,
|
|
149
|
+
rejected: rejected.length
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
exports.AddFileToChatContext = AddFileToChatContext;
|
|
157
|
+
AddFileToChatContext.ID = context_functions_1.UPDATE_CONTEXT_FILES_FUNCTION_ID;
|
|
158
|
+
tslib_1.__decorate([
|
|
159
|
+
(0, inversify_1.inject)(context_file_validation_service_1.ContextFileValidationService),
|
|
160
|
+
(0, inversify_1.optional)(),
|
|
161
|
+
tslib_1.__metadata("design:type", Object)
|
|
162
|
+
], AddFileToChatContext.prototype, "validationService", void 0);
|
|
163
|
+
exports.AddFileToChatContext = AddFileToChatContext = AddFileToChatContext_1 = tslib_1.__decorate([
|
|
164
|
+
(0, inversify_1.injectable)()
|
|
165
|
+
], AddFileToChatContext);
|
|
166
|
+
//# sourceMappingURL=context-functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-functions.js","sourceRoot":"","sources":["../../src/browser/context-functions.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;;AAIhF,4DAA4E;AAC5E,mEAAgJ;AAChJ,sGAAsF;AACtF,gHAA+H;AAGxH,IAAM,eAAe,uBAArB,MAAM,eAAe;IAGxB,OAAO;QACH,OAAO;YACH,EAAE,EAAE,iBAAe,CAAC,EAAE;YACtB,IAAI,EAAE,iBAAe,CAAC,EAAE;YACxB,WAAW,EAAE,kHAAkH;YAC/H,OAAO,EAAE,KAAK,EAAE,CAAS,EAAE,GAA4B,EAAmB,EAAE;;gBACxE,IAAI,MAAA,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,0CAAE,iBAAiB,0CAAE,uBAAuB,EAAE,CAAC;oBAC5D,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAC;gBACpE,CAAC;gBACD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;oBACxD,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,GAAG,cAAc,CAAC,GAAG;oBACnD,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,IAAI;iBACrC,CAAC,CAAC,CAAC;gBACJ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YAChD,CAAC;YACD,UAAU,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACjB;SACJ,CAAC;IACN,CAAC;;AAvBQ,0CAAe;AACjB,kBAAE,GAAG,iDAA6B,AAAhC,CAAiC;0BADjC,eAAe;IAD3B,IAAA,sBAAU,GAAE;GACA,eAAe,CAwB3B;AAGM,IAAM,kBAAkB,0BAAxB,MAAM,kBAAkB;IAG3B,OAAO;QACH,OAAO;YACH,EAAE,EAAE,oBAAkB,CAAC,EAAE;YACzB,IAAI,EAAE,oBAAkB,CAAC,EAAE;YAC3B,WAAW,EAAE,+HAA+H;YAC5I,UAAU,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACR,gBAAgB,EAAE;wBACd,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,2CAA2C;qBAC3D;iBACJ;gBACD,QAAQ,EAAE,CAAC,kBAAkB,CAAC;aACjC;YACD,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,GAA4B,EAAmB,EAAE;;gBAC3E,IAAI,MAAA,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,0CAAE,iBAAiB,0CAAE,uBAAuB,EAAE,CAAC;oBAC5D,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAC;gBACpE,CAAC;gBAED,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiC,CAAC;gBAC9E,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,GAAG,cAAc,CAAC,GAAG,KAAK,gBAAgB,CAAC,CAAC;gBACpI,IAAI,QAAQ,EAAE,CAAC;oBACX,MAAM,MAAM,GAAG;wBACX,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI;wBAC5B,GAAG,EAAE,QAAQ,CAAC,KAAK;wBACnB,OAAO,EAAE,QAAQ,CAAC,YAAY;qBACjC,CAAC;oBACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAChD,CAAC;gBACD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YAChF,CAAC;SACJ,CAAC;IACN,CAAC;;AApCQ,gDAAkB;AACpB,qBAAE,GAAG,oDAAgC,AAAnC,CAAoC;6BADpC,kBAAkB;IAD9B,IAAA,sBAAU,GAAE;GACA,kBAAkB,CAqC9B;AAGM,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAM7B,OAAO;QACH,OAAO;YACH,EAAE,EAAE,sBAAoB,CAAC,EAAE;YAC3B,IAAI,EAAE,sBAAoB,CAAC,EAAE;YAC7B,UAAU,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACR,UAAU,EAAE;wBACR,IAAI,EAAE,OAAO;wBACb,WAAW,EAAE,wEAAwE;wBACrF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;qBAC5B;iBACJ;gBACD,QAAQ,EAAE,CAAC,YAAY,CAAC;aAC3B;YACD,WAAW,EAAE,qEAAqE;gBAC9E,uEAAuE;gBACvE,sEAAsE;gBACtE,wHAAwH;YAC5H,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,GAA4B,EAAmB,EAAE;;gBAC1E,IAAI,MAAA,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,0CAAE,iBAAiB,0CAAE,uBAAuB,EAAE,CAAC;oBAC5D,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAC;gBACpE,CAAC;gBAED,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6B,CAAC;gBAEnE,MAAM,KAAK,GAAa,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAA2D,EAAE,CAAC;gBAE5E,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;oBAC5B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;wBACzB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;wBAEzE,IAAI,gBAAgB,CAAC,KAAK,KAAK,qDAAmB,CAAC,KAAK,EAAE,CAAC;4BACvD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,0CAAa,EAAE,CAAC,CAAC;4BACzE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACrB,CAAC;6BAAM,CAAC;4BACJ,QAAQ,CAAC,IAAI,CAAC;gCACV,IAAI;gCACJ,MAAM,EAAE,gBAAgB,CAAC,OAAO,IAAI,wBAAwB;gCAC5D,KAAK,EAAE,gBAAgB,CAAC,KAAK;6BAChC,CAAC,CAAC;wBACP,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,0CAAa,EAAE,CAAC,CAAC;wBACzE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACrB,CAAC;gBACL,CAAC;gBAED,OAAO,IAAI,CAAC,SAAS,CAAC;oBAClB,KAAK;oBACL,QAAQ;oBACR,OAAO,EAAE;wBACL,cAAc,EAAE,UAAU,CAAC,MAAM;wBACjC,KAAK,EAAE,KAAK,CAAC,MAAM;wBACnB,QAAQ,EAAE,QAAQ,CAAC,MAAM;qBAC5B;iBACJ,CAAC,CAAC;YACP,CAAC;SACJ,CAAC;IACN,CAAC;;AAlEQ,oDAAoB;AACtB,uBAAE,GAAG,oDAAgC,AAAnC,CAAoC;AAG1B;IADlB,IAAA,kBAAM,EAAC,8DAA4B,CAAC;IAAE,IAAA,oBAAQ,GAAE;;+DAC8B;+BAJtE,oBAAoB;IADhC,IAAA,sBAAU,GAAE;GACA,oBAAoB,CAmEhC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-functions.spec.d.ts","sourceRoot":"","sources":["../../src/browser/context-functions.spec.ts"],"names":[],"mappings":""}
|