@theia/ai-codex 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/codex-chat-agent.d.ts +79 -0
- package/lib/browser/codex-chat-agent.d.ts.map +1 -0
- package/lib/browser/codex-chat-agent.js +556 -0
- package/lib/browser/codex-chat-agent.js.map +1 -0
- package/lib/browser/codex-chat-agent.spec.d.ts +2 -0
- package/lib/browser/codex-chat-agent.spec.d.ts.map +1 -0
- package/lib/browser/codex-chat-agent.spec.js +538 -0
- package/lib/browser/codex-chat-agent.spec.js.map +1 -0
- package/lib/browser/codex-frontend-module.d.ts +5 -0
- package/lib/browser/codex-frontend-module.d.ts.map +1 -0
- package/lib/browser/codex-frontend-module.js +52 -0
- package/lib/browser/codex-frontend-module.js.map +1 -0
- package/lib/browser/codex-frontend-service.d.ts +47 -0
- package/lib/browser/codex-frontend-service.d.ts.map +1 -0
- package/lib/browser/codex-frontend-service.js +194 -0
- package/lib/browser/codex-frontend-service.js.map +1 -0
- package/lib/browser/codex-frontend-service.spec.d.ts +2 -0
- package/lib/browser/codex-frontend-service.spec.d.ts.map +1 -0
- package/lib/browser/codex-frontend-service.spec.js +200 -0
- package/lib/browser/codex-frontend-service.spec.js.map +1 -0
- package/lib/browser/codex-tool-call-content.d.ts +9 -0
- package/lib/browser/codex-tool-call-content.d.ts.map +1 -0
- package/lib/browser/codex-tool-call-content.js +41 -0
- package/lib/browser/codex-tool-call-content.js.map +1 -0
- package/lib/browser/renderers/collapsible-tool-renderer.d.ts +13 -0
- package/lib/browser/renderers/collapsible-tool-renderer.d.ts.map +1 -0
- package/lib/browser/renderers/collapsible-tool-renderer.js +45 -0
- package/lib/browser/renderers/collapsible-tool-renderer.js.map +1 -0
- package/lib/browser/renderers/command-execution-renderer.d.ts +10 -0
- package/lib/browser/renderers/command-execution-renderer.d.ts.map +1 -0
- package/lib/browser/renderers/command-execution-renderer.js +74 -0
- package/lib/browser/renderers/command-execution-renderer.js.map +1 -0
- package/lib/browser/renderers/todo-list-renderer.d.ts +11 -0
- package/lib/browser/renderers/todo-list-renderer.d.ts.map +1 -0
- package/lib/browser/renderers/todo-list-renderer.js +106 -0
- package/lib/browser/renderers/todo-list-renderer.js.map +1 -0
- package/lib/browser/renderers/web-search-renderer.d.ts +10 -0
- package/lib/browser/renderers/web-search-renderer.d.ts.map +1 -0
- package/lib/browser/renderers/web-search-renderer.js +71 -0
- package/lib/browser/renderers/web-search-renderer.js.map +1 -0
- package/lib/common/codex-preferences.d.ts +4 -0
- package/lib/common/codex-preferences.d.ts.map +1 -0
- package/lib/common/codex-preferences.js +32 -0
- package/lib/common/codex-preferences.js.map +1 -0
- package/lib/common/codex-service.d.ts +23 -0
- package/lib/common/codex-service.d.ts.map +1 -0
- package/lib/common/codex-service.js +22 -0
- package/lib/common/codex-service.js.map +1 -0
- package/lib/common/index.d.ts +3 -0
- package/lib/common/index.d.ts.map +1 -0
- package/lib/common/index.js +21 -0
- package/lib/common/index.js.map +1 -0
- package/lib/node/codex-backend-module.d.ts +4 -0
- package/lib/node/codex-backend-module.d.ts.map +1 -0
- package/lib/node/codex-backend-module.js +35 -0
- package/lib/node/codex-backend-module.js.map +1 -0
- package/lib/node/codex-service-impl.d.ts +13 -0
- package/lib/node/codex-service-impl.d.ts.map +1 -0
- package/lib/node/codex-service-impl.js +97 -0
- package/lib/node/codex-service-impl.js.map +1 -0
- package/package.json +11 -11
|
@@ -0,0 +1,52 @@
|
|
|
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 ai_chat_1 = require("@theia/ai-chat");
|
|
19
|
+
const chat_response_part_renderer_1 = require("@theia/ai-chat-ui/lib/browser/chat-response-part-renderer");
|
|
20
|
+
const ai_core_1 = require("@theia/ai-core");
|
|
21
|
+
const core_1 = require("@theia/core");
|
|
22
|
+
const browser_1 = require("@theia/core/lib/browser");
|
|
23
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
24
|
+
const codex_service_1 = require("../common/codex-service");
|
|
25
|
+
const codex_preferences_1 = require("../common/codex-preferences");
|
|
26
|
+
const codex_chat_agent_1 = require("./codex-chat-agent");
|
|
27
|
+
const codex_frontend_service_1 = require("./codex-frontend-service");
|
|
28
|
+
const command_execution_renderer_1 = require("./renderers/command-execution-renderer");
|
|
29
|
+
const todo_list_renderer_1 = require("./renderers/todo-list-renderer");
|
|
30
|
+
const web_search_renderer_1 = require("./renderers/web-search-renderer");
|
|
31
|
+
require("../../src/browser/style/codex-tool-renderers.css");
|
|
32
|
+
exports.default = new inversify_1.ContainerModule(bind => {
|
|
33
|
+
bind(core_1.PreferenceContribution).toConstantValue({ schema: codex_preferences_1.CodexPreferencesSchema });
|
|
34
|
+
bind(codex_frontend_service_1.CodexFrontendService).toSelf().inSingletonScope();
|
|
35
|
+
bind(codex_frontend_service_1.CodexClientImpl).toSelf().inSingletonScope();
|
|
36
|
+
bind(codex_service_1.CodexClient).toService(codex_frontend_service_1.CodexClientImpl);
|
|
37
|
+
bind(codex_service_1.CodexService).toDynamicValue(ctx => {
|
|
38
|
+
const connection = ctx.container.get(browser_1.RemoteConnectionProvider);
|
|
39
|
+
const backendClient = ctx.container.get(codex_service_1.CodexClient);
|
|
40
|
+
return connection.createProxy(codex_service_1.CODEX_SERVICE_PATH, backendClient);
|
|
41
|
+
}).inSingletonScope();
|
|
42
|
+
bind(codex_chat_agent_1.CodexChatAgent).toSelf().inSingletonScope();
|
|
43
|
+
bind(ai_core_1.Agent).toService(codex_chat_agent_1.CodexChatAgent);
|
|
44
|
+
bind(ai_chat_1.ChatAgent).toService(codex_chat_agent_1.CodexChatAgent);
|
|
45
|
+
bind(command_execution_renderer_1.CommandExecutionRenderer).toSelf().inSingletonScope();
|
|
46
|
+
bind(chat_response_part_renderer_1.ChatResponsePartRenderer).toService(command_execution_renderer_1.CommandExecutionRenderer);
|
|
47
|
+
bind(todo_list_renderer_1.TodoListRenderer).toSelf().inSingletonScope();
|
|
48
|
+
bind(chat_response_part_renderer_1.ChatResponsePartRenderer).toService(todo_list_renderer_1.TodoListRenderer);
|
|
49
|
+
bind(web_search_renderer_1.WebSearchRenderer).toSelf().inSingletonScope();
|
|
50
|
+
bind(chat_response_part_renderer_1.ChatResponsePartRenderer).toService(web_search_renderer_1.WebSearchRenderer);
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=codex-frontend-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-frontend-module.js","sourceRoot":"","sources":["../../src/browser/codex-frontend-module.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;;AAEhF,4CAA2C;AAC3C,2GAAqG;AACrG,4CAAuC;AACvC,sCAAqD;AACrD,qDAA8F;AAC9F,4DAA+D;AAC/D,2DAIiC;AACjC,mEAAqE;AACrE,yDAAoD;AACpD,qEAAiF;AACjF,uFAAkF;AAClF,uEAAkE;AAClE,yEAAoE;AACpE,4DAA0D;AAE1D,kBAAe,IAAI,2BAAe,CAAC,IAAI,CAAC,EAAE;IACtC,IAAI,CAAC,6BAAsB,CAAC,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,0CAAsB,EAAE,CAAC,CAAC;IAEjF,IAAI,CAAC,6CAAoB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACvD,IAAI,CAAC,wCAAe,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAClD,IAAI,CAAC,2BAAW,CAAC,CAAC,SAAS,CAAC,wCAAe,CAAC,CAAC;IAE7C,IAAI,CAAC,4BAAY,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;QACpC,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAA4B,kCAAwB,CAAC,CAAC;QAC1F,MAAM,aAAa,GAAgB,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,2BAAW,CAAC,CAAC;QAClE,OAAO,UAAU,CAAC,WAAW,CAAC,kCAAkB,EAAE,aAAa,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAEtB,IAAI,CAAC,iCAAc,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACjD,IAAI,CAAC,eAAK,CAAC,CAAC,SAAS,CAAC,iCAAc,CAAC,CAAC;IACtC,IAAI,CAAC,mBAAS,CAAC,CAAC,SAAS,CAAC,iCAAc,CAAC,CAAC;IAE1C,IAAI,CAAC,qDAAwB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC3D,IAAI,CAAC,sDAAwB,CAAC,CAAC,SAAS,CAAC,qDAAwB,CAAC,CAAC;IAEnE,IAAI,CAAC,qCAAgB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACnD,IAAI,CAAC,sDAAwB,CAAC,CAAC,SAAS,CAAC,qCAAgB,CAAC,CAAC;IAE3D,IAAI,CAAC,uCAAiB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACpD,IAAI,CAAC,sDAAwB,CAAC,CAAC,SAAS,CAAC,uCAAiB,CAAC,CAAC;AAChE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { CancellationToken, PreferenceService } from '@theia/core';
|
|
2
|
+
import { WorkspaceService } from '@theia/workspace/lib/browser';
|
|
3
|
+
import type { ThreadEvent } from '@openai/codex-sdk';
|
|
4
|
+
import { CodexClient, CodexRequest, CodexService } from '../common';
|
|
5
|
+
export declare class CodexClientImpl implements CodexClient {
|
|
6
|
+
protected tokenHandlers: Map<string, (token?: ThreadEvent) => void>;
|
|
7
|
+
protected errorHandlers: Map<string, (error: Error) => void>;
|
|
8
|
+
/**
|
|
9
|
+
* `undefined` token signals end of stream per RPC protocol.
|
|
10
|
+
*/
|
|
11
|
+
sendToken(streamId: string, token?: ThreadEvent): void;
|
|
12
|
+
sendError(streamId: string, error: Error): void;
|
|
13
|
+
registerTokenHandler(streamId: string, handler: (token?: ThreadEvent) => void): void;
|
|
14
|
+
registerErrorHandler(streamId: string, handler: (error: Error) => void): void;
|
|
15
|
+
unregisterHandlers(streamId: string): void;
|
|
16
|
+
}
|
|
17
|
+
interface StreamState {
|
|
18
|
+
id: string;
|
|
19
|
+
tokens: (ThreadEvent | undefined)[];
|
|
20
|
+
isComplete: boolean;
|
|
21
|
+
hasError: boolean;
|
|
22
|
+
error?: Error;
|
|
23
|
+
pendingResolve?: () => void;
|
|
24
|
+
pendingReject?: (error: Error) => void;
|
|
25
|
+
}
|
|
26
|
+
export declare class CodexFrontendService {
|
|
27
|
+
protected readonly backendService: CodexService;
|
|
28
|
+
protected readonly client: CodexClientImpl;
|
|
29
|
+
protected readonly preferenceService: PreferenceService;
|
|
30
|
+
protected readonly workspaceService: WorkspaceService;
|
|
31
|
+
protected streams: Map<string, StreamState>;
|
|
32
|
+
send(request: CodexRequest, cancellationToken?: CancellationToken): Promise<AsyncIterable<ThreadEvent>>;
|
|
33
|
+
protected generateStreamId(): string;
|
|
34
|
+
protected setupStreamHandlers(streamState: StreamState): void;
|
|
35
|
+
protected createAsyncIterable(streamState: StreamState): AsyncIterable<ThreadEvent>;
|
|
36
|
+
protected cleanup(streamId: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Fallback hierarchy:
|
|
39
|
+
* 1. Codex-specific API key (highest priority)
|
|
40
|
+
* 2. Shared OpenAI API key
|
|
41
|
+
* 3. undefined (backend will check OPENAI_API_KEY env var)
|
|
42
|
+
*/
|
|
43
|
+
protected getApiKey(): string | undefined;
|
|
44
|
+
protected getWorkspaceRoot(): Promise<string | undefined>;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=codex-frontend-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-frontend-service.d.ts","sourceRoot":"","sources":["../../src/browser/codex-frontend-service.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,iBAAiB,EAAgB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACH,WAAW,EACX,YAAY,EACZ,YAAY,EAGf,MAAM,WAAW,CAAC;AAEnB,qBACa,eAAgB,YAAW,WAAW;IAC/C,SAAS,CAAC,aAAa,uBAA4B,WAAW,KAAK,IAAI,EAAI;IAC3E,SAAS,CAAC,aAAa,sBAA2B,KAAK,KAAK,IAAI,EAAI;IAEpE;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI;IAOtD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAO/C,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAIpF,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAI7E,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAI7C;AAED,UAAU,WAAW;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC1C;AAED,qBACa,oBAAoB;IAG7B,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC;IAGhD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IAG3C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAGxD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAEtD,SAAS,CAAC,OAAO,2BAAkC;IAE7C,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAmC7G,SAAS,CAAC,gBAAgB,IAAI,MAAM;IAIpC,SAAS,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;cAyB5C,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC;IA+B1F,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAKzC;;;;;OAKG;IACH,SAAS,CAAC,SAAS,IAAI,MAAM,GAAG,SAAS;cAczB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAOlE"}
|
|
@@ -0,0 +1,194 @@
|
|
|
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
|
+
exports.CodexFrontendService = exports.CodexClientImpl = void 0;
|
|
19
|
+
const tslib_1 = require("tslib");
|
|
20
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
21
|
+
const core_1 = require("@theia/core");
|
|
22
|
+
const file_uri_1 = require("@theia/core/lib/common/file-uri");
|
|
23
|
+
const browser_1 = require("@theia/workspace/lib/browser");
|
|
24
|
+
const openai_preferences_1 = require("@theia/ai-openai/lib/common/openai-preferences");
|
|
25
|
+
const common_1 = require("../common");
|
|
26
|
+
let CodexClientImpl = class CodexClientImpl {
|
|
27
|
+
constructor() {
|
|
28
|
+
this.tokenHandlers = new Map();
|
|
29
|
+
this.errorHandlers = new Map();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* `undefined` token signals end of stream per RPC protocol.
|
|
33
|
+
*/
|
|
34
|
+
sendToken(streamId, token) {
|
|
35
|
+
const handler = this.tokenHandlers.get(streamId);
|
|
36
|
+
if (handler) {
|
|
37
|
+
handler(token);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
sendError(streamId, error) {
|
|
41
|
+
const handler = this.errorHandlers.get(streamId);
|
|
42
|
+
if (handler) {
|
|
43
|
+
handler(error);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
registerTokenHandler(streamId, handler) {
|
|
47
|
+
this.tokenHandlers.set(streamId, handler);
|
|
48
|
+
}
|
|
49
|
+
registerErrorHandler(streamId, handler) {
|
|
50
|
+
this.errorHandlers.set(streamId, handler);
|
|
51
|
+
}
|
|
52
|
+
unregisterHandlers(streamId) {
|
|
53
|
+
this.tokenHandlers.delete(streamId);
|
|
54
|
+
this.errorHandlers.delete(streamId);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
exports.CodexClientImpl = CodexClientImpl;
|
|
58
|
+
exports.CodexClientImpl = CodexClientImpl = tslib_1.__decorate([
|
|
59
|
+
(0, inversify_1.injectable)()
|
|
60
|
+
], CodexClientImpl);
|
|
61
|
+
let CodexFrontendService = class CodexFrontendService {
|
|
62
|
+
constructor() {
|
|
63
|
+
this.streams = new Map();
|
|
64
|
+
}
|
|
65
|
+
async send(request, cancellationToken) {
|
|
66
|
+
var _a;
|
|
67
|
+
const streamState = {
|
|
68
|
+
id: this.generateStreamId(),
|
|
69
|
+
tokens: [],
|
|
70
|
+
isComplete: false,
|
|
71
|
+
hasError: false
|
|
72
|
+
};
|
|
73
|
+
this.streams.set(streamState.id, streamState);
|
|
74
|
+
this.setupStreamHandlers(streamState);
|
|
75
|
+
cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.onCancellationRequested(() => {
|
|
76
|
+
this.backendService.cancel(streamState.id);
|
|
77
|
+
this.cleanup(streamState.id);
|
|
78
|
+
});
|
|
79
|
+
const apiKey = this.getApiKey();
|
|
80
|
+
const sandboxMode = (_a = request.sandboxMode) !== null && _a !== void 0 ? _a : 'workspace-write';
|
|
81
|
+
const workingDirectory = await this.getWorkspaceRoot();
|
|
82
|
+
const backendRequest = {
|
|
83
|
+
prompt: request.prompt,
|
|
84
|
+
options: {
|
|
85
|
+
workingDirectory,
|
|
86
|
+
...request.options,
|
|
87
|
+
sandboxMode
|
|
88
|
+
},
|
|
89
|
+
apiKey,
|
|
90
|
+
sessionId: request.sessionId
|
|
91
|
+
};
|
|
92
|
+
await this.backendService.send(backendRequest, streamState.id);
|
|
93
|
+
return this.createAsyncIterable(streamState);
|
|
94
|
+
}
|
|
95
|
+
generateStreamId() {
|
|
96
|
+
return (0, core_1.generateUuid)();
|
|
97
|
+
}
|
|
98
|
+
setupStreamHandlers(streamState) {
|
|
99
|
+
this.client.registerTokenHandler(streamState.id, (token) => {
|
|
100
|
+
if (token === undefined) {
|
|
101
|
+
streamState.isComplete = true;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
streamState.tokens.push(token);
|
|
105
|
+
}
|
|
106
|
+
if (streamState.pendingResolve) {
|
|
107
|
+
streamState.pendingResolve();
|
|
108
|
+
streamState.pendingResolve = undefined;
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
this.client.registerErrorHandler(streamState.id, (error) => {
|
|
112
|
+
streamState.hasError = true;
|
|
113
|
+
streamState.error = error;
|
|
114
|
+
if (streamState.pendingReject) {
|
|
115
|
+
streamState.pendingReject(error);
|
|
116
|
+
streamState.pendingReject = undefined;
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
async *createAsyncIterable(streamState) {
|
|
121
|
+
let currentIndex = 0;
|
|
122
|
+
while (true) {
|
|
123
|
+
if (currentIndex < streamState.tokens.length) {
|
|
124
|
+
const token = streamState.tokens[currentIndex];
|
|
125
|
+
currentIndex++;
|
|
126
|
+
if (token !== undefined) {
|
|
127
|
+
yield token;
|
|
128
|
+
}
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (streamState.isComplete) {
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
if (streamState.hasError && streamState.error) {
|
|
135
|
+
this.cleanup(streamState.id);
|
|
136
|
+
throw streamState.error;
|
|
137
|
+
}
|
|
138
|
+
await new Promise((resolve, reject) => {
|
|
139
|
+
streamState.pendingResolve = resolve;
|
|
140
|
+
streamState.pendingReject = reject;
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
this.cleanup(streamState.id);
|
|
144
|
+
}
|
|
145
|
+
cleanup(streamId) {
|
|
146
|
+
this.client.unregisterHandlers(streamId);
|
|
147
|
+
this.streams.delete(streamId);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Fallback hierarchy:
|
|
151
|
+
* 1. Codex-specific API key (highest priority)
|
|
152
|
+
* 2. Shared OpenAI API key
|
|
153
|
+
* 3. undefined (backend will check OPENAI_API_KEY env var)
|
|
154
|
+
*/
|
|
155
|
+
getApiKey() {
|
|
156
|
+
const codexKey = this.preferenceService.get(common_1.CODEX_API_KEY_PREF);
|
|
157
|
+
if (codexKey && codexKey.trim()) {
|
|
158
|
+
return codexKey;
|
|
159
|
+
}
|
|
160
|
+
const openaiKey = this.preferenceService.get(openai_preferences_1.API_KEY_PREF);
|
|
161
|
+
if (openaiKey && openaiKey.trim()) {
|
|
162
|
+
return openaiKey;
|
|
163
|
+
}
|
|
164
|
+
return undefined;
|
|
165
|
+
}
|
|
166
|
+
async getWorkspaceRoot() {
|
|
167
|
+
const roots = await this.workspaceService.roots;
|
|
168
|
+
if (roots && roots.length > 0) {
|
|
169
|
+
return file_uri_1.FileUri.fsPath(roots[0].resource.toString());
|
|
170
|
+
}
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
exports.CodexFrontendService = CodexFrontendService;
|
|
175
|
+
tslib_1.__decorate([
|
|
176
|
+
(0, inversify_1.inject)(common_1.CodexService),
|
|
177
|
+
tslib_1.__metadata("design:type", Object)
|
|
178
|
+
], CodexFrontendService.prototype, "backendService", void 0);
|
|
179
|
+
tslib_1.__decorate([
|
|
180
|
+
(0, inversify_1.inject)(CodexClientImpl),
|
|
181
|
+
tslib_1.__metadata("design:type", CodexClientImpl)
|
|
182
|
+
], CodexFrontendService.prototype, "client", void 0);
|
|
183
|
+
tslib_1.__decorate([
|
|
184
|
+
(0, inversify_1.inject)(core_1.PreferenceService),
|
|
185
|
+
tslib_1.__metadata("design:type", Object)
|
|
186
|
+
], CodexFrontendService.prototype, "preferenceService", void 0);
|
|
187
|
+
tslib_1.__decorate([
|
|
188
|
+
(0, inversify_1.inject)(browser_1.WorkspaceService),
|
|
189
|
+
tslib_1.__metadata("design:type", browser_1.WorkspaceService)
|
|
190
|
+
], CodexFrontendService.prototype, "workspaceService", void 0);
|
|
191
|
+
exports.CodexFrontendService = CodexFrontendService = tslib_1.__decorate([
|
|
192
|
+
(0, inversify_1.injectable)()
|
|
193
|
+
], CodexFrontendService);
|
|
194
|
+
//# sourceMappingURL=codex-frontend-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-frontend-service.js","sourceRoot":"","sources":["../../src/browser/codex-frontend-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-frontend-service.spec.d.ts","sourceRoot":"","sources":["../../src/browser/codex-frontend-service.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,200 @@
|
|
|
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 path = require("path");
|
|
23
|
+
const chai_1 = require("chai");
|
|
24
|
+
const sinon = require("sinon");
|
|
25
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
26
|
+
const core_1 = require("@theia/core");
|
|
27
|
+
const browser_1 = require("@theia/workspace/lib/browser");
|
|
28
|
+
const uri_1 = require("@theia/core/lib/common/uri");
|
|
29
|
+
const common_1 = require("../common");
|
|
30
|
+
const openai_preferences_1 = require("@theia/ai-openai/lib/common/openai-preferences");
|
|
31
|
+
disableJSDOM();
|
|
32
|
+
describe('CodexFrontendService', () => {
|
|
33
|
+
let container;
|
|
34
|
+
let CodexFrontendServiceConstructor;
|
|
35
|
+
let CodexClientImplConstructor;
|
|
36
|
+
let mockPreferenceService;
|
|
37
|
+
let mockBackendService;
|
|
38
|
+
before(async () => {
|
|
39
|
+
disableJSDOM = (0, jsdom_1.enableJSDOM)();
|
|
40
|
+
const serviceModule = await Promise.resolve().then(() => require('./codex-frontend-service'));
|
|
41
|
+
CodexFrontendServiceConstructor = serviceModule.CodexFrontendService;
|
|
42
|
+
CodexClientImplConstructor = serviceModule.CodexClientImpl;
|
|
43
|
+
});
|
|
44
|
+
beforeEach(() => {
|
|
45
|
+
container = new inversify_1.Container();
|
|
46
|
+
mockPreferenceService = {
|
|
47
|
+
get: sinon.stub()
|
|
48
|
+
};
|
|
49
|
+
mockBackendService = {
|
|
50
|
+
send: sinon.stub().resolves(),
|
|
51
|
+
cancel: sinon.stub()
|
|
52
|
+
};
|
|
53
|
+
const mockWorkspaceService = {
|
|
54
|
+
roots: Promise.resolve([{ resource: new uri_1.URI('file:///test/workspace') }])
|
|
55
|
+
};
|
|
56
|
+
container.bind(core_1.PreferenceService).toConstantValue(mockPreferenceService);
|
|
57
|
+
container.bind(common_1.CodexService).toConstantValue(mockBackendService);
|
|
58
|
+
container.bind(browser_1.WorkspaceService).toConstantValue(mockWorkspaceService);
|
|
59
|
+
container.bind(CodexClientImplConstructor).toSelf().inSingletonScope();
|
|
60
|
+
container.bind(CodexFrontendServiceConstructor).toSelf();
|
|
61
|
+
});
|
|
62
|
+
afterEach(() => {
|
|
63
|
+
sinon.restore();
|
|
64
|
+
});
|
|
65
|
+
after(() => {
|
|
66
|
+
disableJSDOM();
|
|
67
|
+
});
|
|
68
|
+
describe('API Key Preference Hierarchy', () => {
|
|
69
|
+
it('should prioritize Codex-specific API key over shared OpenAI key', async () => {
|
|
70
|
+
mockPreferenceService.get.withArgs(common_1.CODEX_API_KEY_PREF).returns('codex-key-123');
|
|
71
|
+
mockPreferenceService.get.withArgs(openai_preferences_1.API_KEY_PREF).returns('openai-key-456');
|
|
72
|
+
const service = container.get(CodexFrontendServiceConstructor);
|
|
73
|
+
await service.send({ prompt: 'test', sessionId: 'session-1' });
|
|
74
|
+
(0, chai_1.expect)(mockBackendService.send.calledOnce).to.be.true;
|
|
75
|
+
const backendRequest = mockBackendService.send.firstCall.args[0];
|
|
76
|
+
(0, chai_1.expect)(backendRequest.apiKey).to.equal('codex-key-123');
|
|
77
|
+
});
|
|
78
|
+
it('should fall back to shared OpenAI API key when Codex key not set', async () => {
|
|
79
|
+
mockPreferenceService.get.withArgs(common_1.CODEX_API_KEY_PREF).returns(undefined);
|
|
80
|
+
mockPreferenceService.get.withArgs(openai_preferences_1.API_KEY_PREF).returns('openai-key-456');
|
|
81
|
+
const service = container.get(CodexFrontendServiceConstructor);
|
|
82
|
+
await service.send({ prompt: 'test', sessionId: 'session-1' });
|
|
83
|
+
const backendRequest = mockBackendService.send.firstCall.args[0];
|
|
84
|
+
(0, chai_1.expect)(backendRequest.apiKey).to.equal('openai-key-456');
|
|
85
|
+
});
|
|
86
|
+
it('should return undefined when neither key is set', async () => {
|
|
87
|
+
mockPreferenceService.get.withArgs(common_1.CODEX_API_KEY_PREF).returns(undefined);
|
|
88
|
+
mockPreferenceService.get.withArgs(openai_preferences_1.API_KEY_PREF).returns(undefined);
|
|
89
|
+
const service = container.get(CodexFrontendServiceConstructor);
|
|
90
|
+
await service.send({ prompt: 'test', sessionId: 'session-1' });
|
|
91
|
+
const backendRequest = mockBackendService.send.firstCall.args[0];
|
|
92
|
+
(0, chai_1.expect)(backendRequest.apiKey).to.be.undefined;
|
|
93
|
+
});
|
|
94
|
+
it('should treat empty Codex key as not set', async () => {
|
|
95
|
+
mockPreferenceService.get.withArgs(common_1.CODEX_API_KEY_PREF).returns('');
|
|
96
|
+
mockPreferenceService.get.withArgs(openai_preferences_1.API_KEY_PREF).returns('openai-key-456');
|
|
97
|
+
const service = container.get(CodexFrontendServiceConstructor);
|
|
98
|
+
await service.send({ prompt: 'test', sessionId: 'session-1' });
|
|
99
|
+
const backendRequest = mockBackendService.send.firstCall.args[0];
|
|
100
|
+
(0, chai_1.expect)(backendRequest.apiKey).to.equal('openai-key-456');
|
|
101
|
+
});
|
|
102
|
+
it('should treat whitespace-only Codex key as not set', async () => {
|
|
103
|
+
mockPreferenceService.get.withArgs(common_1.CODEX_API_KEY_PREF).returns(' ');
|
|
104
|
+
mockPreferenceService.get.withArgs(openai_preferences_1.API_KEY_PREF).returns('openai-key-456');
|
|
105
|
+
const service = container.get(CodexFrontendServiceConstructor);
|
|
106
|
+
await service.send({ prompt: 'test', sessionId: 'session-1' });
|
|
107
|
+
const backendRequest = mockBackendService.send.firstCall.args[0];
|
|
108
|
+
(0, chai_1.expect)(backendRequest.apiKey).to.equal('openai-key-456');
|
|
109
|
+
});
|
|
110
|
+
it('should treat empty OpenAI key as not set', async () => {
|
|
111
|
+
mockPreferenceService.get.withArgs(common_1.CODEX_API_KEY_PREF).returns(undefined);
|
|
112
|
+
mockPreferenceService.get.withArgs(openai_preferences_1.API_KEY_PREF).returns('');
|
|
113
|
+
const service = container.get(CodexFrontendServiceConstructor);
|
|
114
|
+
await service.send({ prompt: 'test', sessionId: 'session-1' });
|
|
115
|
+
const backendRequest = mockBackendService.send.firstCall.args[0];
|
|
116
|
+
(0, chai_1.expect)(backendRequest.apiKey).to.be.undefined;
|
|
117
|
+
});
|
|
118
|
+
it('should treat whitespace-only OpenAI key as not set', async () => {
|
|
119
|
+
mockPreferenceService.get.withArgs(common_1.CODEX_API_KEY_PREF).returns(undefined);
|
|
120
|
+
mockPreferenceService.get.withArgs(openai_preferences_1.API_KEY_PREF).returns(' ');
|
|
121
|
+
const service = container.get(CodexFrontendServiceConstructor);
|
|
122
|
+
await service.send({ prompt: 'test', sessionId: 'session-1' });
|
|
123
|
+
const backendRequest = mockBackendService.send.firstCall.args[0];
|
|
124
|
+
(0, chai_1.expect)(backendRequest.apiKey).to.be.undefined;
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
describe('Sandbox Mode Configuration', () => {
|
|
128
|
+
beforeEach(() => {
|
|
129
|
+
mockPreferenceService.get.withArgs(common_1.CODEX_API_KEY_PREF).returns('test-key');
|
|
130
|
+
});
|
|
131
|
+
it('should default to workspace-write when no sandboxMode is provided in request', async () => {
|
|
132
|
+
var _a;
|
|
133
|
+
const service = container.get(CodexFrontendServiceConstructor);
|
|
134
|
+
await service.send({ prompt: 'test', sessionId: 'session-1' });
|
|
135
|
+
const backendRequest = mockBackendService.send.firstCall.args[0];
|
|
136
|
+
(0, chai_1.expect)((_a = backendRequest.options) === null || _a === void 0 ? void 0 : _a.sandboxMode).to.equal('workspace-write');
|
|
137
|
+
});
|
|
138
|
+
it('should use sandboxMode from request when provided', async () => {
|
|
139
|
+
var _a;
|
|
140
|
+
const service = container.get(CodexFrontendServiceConstructor);
|
|
141
|
+
await service.send({ prompt: 'test', sessionId: 'session-1', sandboxMode: 'read-only' });
|
|
142
|
+
const backendRequest = mockBackendService.send.firstCall.args[0];
|
|
143
|
+
(0, chai_1.expect)((_a = backendRequest.options) === null || _a === void 0 ? void 0 : _a.sandboxMode).to.equal('read-only');
|
|
144
|
+
});
|
|
145
|
+
it('should use danger-full-access when provided in request', async () => {
|
|
146
|
+
var _a;
|
|
147
|
+
const service = container.get(CodexFrontendServiceConstructor);
|
|
148
|
+
await service.send({ prompt: 'test', sessionId: 'session-1', sandboxMode: 'danger-full-access' });
|
|
149
|
+
const backendRequest = mockBackendService.send.firstCall.args[0];
|
|
150
|
+
(0, chai_1.expect)((_a = backendRequest.options) === null || _a === void 0 ? void 0 : _a.sandboxMode).to.equal('danger-full-access');
|
|
151
|
+
});
|
|
152
|
+
it('should default to workspace-write when request sandboxMode is undefined', async () => {
|
|
153
|
+
var _a;
|
|
154
|
+
const service = container.get(CodexFrontendServiceConstructor);
|
|
155
|
+
await service.send({ prompt: 'test', sessionId: 'session-1', sandboxMode: undefined });
|
|
156
|
+
const backendRequest = mockBackendService.send.firstCall.args[0];
|
|
157
|
+
(0, chai_1.expect)((_a = backendRequest.options) === null || _a === void 0 ? void 0 : _a.sandboxMode).to.equal('workspace-write');
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
describe('Request Building', () => {
|
|
161
|
+
beforeEach(() => {
|
|
162
|
+
mockPreferenceService.get.withArgs(common_1.CODEX_API_KEY_PREF).returns('test-key');
|
|
163
|
+
});
|
|
164
|
+
it('should include workspace root in request', async () => {
|
|
165
|
+
var _a;
|
|
166
|
+
const service = container.get(CodexFrontendServiceConstructor);
|
|
167
|
+
await service.send({ prompt: 'test prompt', sessionId: 'session-1' });
|
|
168
|
+
const backendRequest = mockBackendService.send.firstCall.args[0];
|
|
169
|
+
const expectedPath = path.join('test', 'workspace');
|
|
170
|
+
(0, chai_1.expect)((_a = backendRequest.options) === null || _a === void 0 ? void 0 : _a.workingDirectory).to.include(expectedPath);
|
|
171
|
+
});
|
|
172
|
+
it('should pass prompt to backend', async () => {
|
|
173
|
+
const service = container.get(CodexFrontendServiceConstructor);
|
|
174
|
+
await service.send({ prompt: 'my test prompt', sessionId: 'session-1' });
|
|
175
|
+
const backendRequest = mockBackendService.send.firstCall.args[0];
|
|
176
|
+
(0, chai_1.expect)(backendRequest.prompt).to.equal('my test prompt');
|
|
177
|
+
});
|
|
178
|
+
it('should pass sessionId to backend', async () => {
|
|
179
|
+
const service = container.get(CodexFrontendServiceConstructor);
|
|
180
|
+
await service.send({ prompt: 'test', sessionId: 'my-session-123' });
|
|
181
|
+
const backendRequest = mockBackendService.send.firstCall.args[0];
|
|
182
|
+
(0, chai_1.expect)(backendRequest.sessionId).to.equal('my-session-123');
|
|
183
|
+
});
|
|
184
|
+
it('should merge custom options with defaults', async () => {
|
|
185
|
+
var _a, _b;
|
|
186
|
+
const service = container.get(CodexFrontendServiceConstructor);
|
|
187
|
+
await service.send({
|
|
188
|
+
prompt: 'test',
|
|
189
|
+
sessionId: 'session-1',
|
|
190
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
191
|
+
options: { customOption: 'value' } // Testing dynamic options extension
|
|
192
|
+
});
|
|
193
|
+
const backendRequest = mockBackendService.send.firstCall.args[0];
|
|
194
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
195
|
+
(0, chai_1.expect)((_a = backendRequest.options) === null || _a === void 0 ? void 0 : _a.customOption).to.equal('value'); // Accessing dynamic test property
|
|
196
|
+
(0, chai_1.expect)((_b = backendRequest.options) === null || _b === void 0 ? void 0 : _b.sandboxMode).to.equal('workspace-write');
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
//# sourceMappingURL=codex-frontend-service.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-frontend-service.spec.js","sourceRoot":"","sources":["../../src/browser/codex-frontend-service.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ToolCallChatResponseContentImpl } from '@theia/ai-chat/lib/common';
|
|
2
|
+
import { ToolCallResult } from '@theia/ai-core';
|
|
3
|
+
export declare class CodexToolCallChatResponseContent extends ToolCallChatResponseContentImpl {
|
|
4
|
+
static readonly type = "codex-tool-call";
|
|
5
|
+
constructor(id?: string, name?: string, arg_string?: string, finished?: boolean, result?: ToolCallResult);
|
|
6
|
+
static is(content: unknown): content is CodexToolCallChatResponseContent;
|
|
7
|
+
update(args?: string, finished?: boolean, result?: ToolCallResult): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=codex-tool-call-content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-tool-call-content.d.ts","sourceRoot":"","sources":["../../src/browser/codex-tool-call-content.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,qBAAa,gCAAiC,SAAQ,+BAA+B;IACjF,MAAM,CAAC,QAAQ,CAAC,IAAI,qBAAqB;gBAE7B,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,cAAc;IAIxG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,gCAAgC;IAIxE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI;CAW3E"}
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
exports.CodexToolCallChatResponseContent = void 0;
|
|
19
|
+
const common_1 = require("@theia/ai-chat/lib/common");
|
|
20
|
+
class CodexToolCallChatResponseContent extends common_1.ToolCallChatResponseContentImpl {
|
|
21
|
+
constructor(id, name, arg_string, finished, result) {
|
|
22
|
+
super(id, name, arg_string, finished, result);
|
|
23
|
+
}
|
|
24
|
+
static is(content) {
|
|
25
|
+
return content instanceof CodexToolCallChatResponseContent;
|
|
26
|
+
}
|
|
27
|
+
update(args, finished, result) {
|
|
28
|
+
if (args !== undefined) {
|
|
29
|
+
this._arguments = args;
|
|
30
|
+
}
|
|
31
|
+
if (finished !== undefined) {
|
|
32
|
+
this._finished = finished;
|
|
33
|
+
}
|
|
34
|
+
if (result !== undefined) {
|
|
35
|
+
this._result = result;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.CodexToolCallChatResponseContent = CodexToolCallChatResponseContent;
|
|
40
|
+
CodexToolCallChatResponseContent.type = 'codex-tool-call';
|
|
41
|
+
//# sourceMappingURL=codex-tool-call-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-tool-call-content.js","sourceRoot":"","sources":["../../src/browser/codex-tool-call-content.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;;;AAEhF,sDAA4E;AAG5E,MAAa,gCAAiC,SAAQ,wCAA+B;IAGjF,YAAY,EAAW,EAAE,IAAa,EAAE,UAAmB,EAAE,QAAkB,EAAE,MAAuB;QACpG,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,OAAgB;QACtB,OAAO,OAAO,YAAY,gCAAgC,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,IAAa,EAAE,QAAkB,EAAE,MAAuB;QAC7D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC9B,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAC1B,CAAC;IACL,CAAC;;AArBL,4EAsBC;AArBmB,qCAAI,GAAG,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import * as React from '@theia/core/shared/react';
|
|
3
|
+
import { ReactNode } from '@theia/core/shared/react';
|
|
4
|
+
interface CollapsibleToolRendererProps {
|
|
5
|
+
compactHeader: ReactNode;
|
|
6
|
+
expandedContent?: ReactNode;
|
|
7
|
+
onHeaderClick?: () => void;
|
|
8
|
+
headerStyle?: React.CSSProperties;
|
|
9
|
+
defaultExpanded?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare const CollapsibleToolRenderer: React.FC<CollapsibleToolRendererProps>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=collapsible-tool-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapsible-tool-renderer.d.ts","sourceRoot":"","sources":["../../../src/browser/renderers/collapsible-tool-renderer.tsx"],"names":[],"mappings":";AAiBA,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,UAAU,4BAA4B;IAClC,aAAa,EAAE,SAAS,CAAC;IACzB,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CA8C1E,CAAC"}
|