@theia/ai-ide 1.71.0-next.72 → 1.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/lib/browser/frontend-module.d.ts.map +1 -1
  2. package/lib/browser/frontend-module.js +8 -0
  3. package/lib/browser/frontend-module.js.map +1 -1
  4. package/lib/browser/review/pr-review-agent.d.ts +19 -0
  5. package/lib/browser/review/pr-review-agent.d.ts.map +1 -0
  6. package/lib/browser/review/pr-review-agent.js +47 -0
  7. package/lib/browser/review/pr-review-agent.js.map +1 -0
  8. package/lib/browser/review/pr-review-prompt-template.d.ts +4 -0
  9. package/lib/browser/review/pr-review-prompt-template.d.ts.map +1 -0
  10. package/lib/browser/review/pr-review-prompt-template.js +437 -0
  11. package/lib/browser/review/pr-review-prompt-template.js.map +1 -0
  12. package/lib/browser/user-interaction-tool-renderer.d.ts +18 -0
  13. package/lib/browser/user-interaction-tool-renderer.d.ts.map +1 -0
  14. package/lib/browser/user-interaction-tool-renderer.js +330 -0
  15. package/lib/browser/user-interaction-tool-renderer.js.map +1 -0
  16. package/lib/browser/user-interaction-tool.d.ts +47 -0
  17. package/lib/browser/user-interaction-tool.d.ts.map +1 -0
  18. package/lib/browser/user-interaction-tool.js +397 -0
  19. package/lib/browser/user-interaction-tool.js.map +1 -0
  20. package/lib/browser/user-interaction-tool.spec.d.ts +2 -0
  21. package/lib/browser/user-interaction-tool.spec.d.ts.map +1 -0
  22. package/lib/browser/user-interaction-tool.spec.js +336 -0
  23. package/lib/browser/user-interaction-tool.spec.js.map +1 -0
  24. package/lib/common/user-interaction-tool.d.ts +53 -0
  25. package/lib/common/user-interaction-tool.d.ts.map +1 -0
  26. package/lib/common/user-interaction-tool.js +176 -0
  27. package/lib/common/user-interaction-tool.js.map +1 -0
  28. package/lib/common/user-interaction-tool.spec.d.ts +2 -0
  29. package/lib/common/user-interaction-tool.spec.d.ts.map +1 -0
  30. package/lib/common/user-interaction-tool.spec.js +216 -0
  31. package/lib/common/user-interaction-tool.spec.js.map +1 -0
  32. package/package.json +22 -22
  33. package/src/browser/frontend-module.ts +9 -0
  34. package/src/browser/review/pr-review-agent.ts +42 -0
  35. package/src/browser/review/pr-review-prompt-template.ts +449 -0
  36. package/src/browser/style/index.css +299 -0
  37. package/src/browser/user-interaction-tool-renderer.tsx +531 -0
  38. package/src/browser/user-interaction-tool.spec.ts +396 -0
  39. package/src/browser/user-interaction-tool.ts +423 -0
  40. package/src/common/user-interaction-tool.spec.ts +241 -0
  41. package/src/common/user-interaction-tool.ts +237 -0
@@ -0,0 +1,336 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 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 chai_1 = require("chai");
19
+ const sinon = require("sinon");
20
+ const inversify_1 = require("@theia/core/shared/inversify");
21
+ const user_interaction_tool_1 = require("./user-interaction-tool");
22
+ const workspace_functions_1 = require("./workspace-functions");
23
+ const browser_1 = require("@theia/core/lib/browser");
24
+ const browser_2 = require("@theia/editor/lib/browser");
25
+ const scm_service_1 = require("@theia/scm/lib/browser/scm-service");
26
+ const uri_1 = require("@theia/core/lib/common/uri");
27
+ const cancellation_1 = require("@theia/core/lib/common/cancellation");
28
+ const resource_1 = require("@theia/core/lib/common/resource");
29
+ const diff_uris_1 = require("@theia/core/lib/browser/diff-uris");
30
+ const singleStepArgs = (overrides = {}) => JSON.stringify({
31
+ interactions: [{
32
+ title: 'Choose',
33
+ message: 'Pick one',
34
+ options: [{ text: 'A', value: 'a' }, { text: 'B', value: 'b' }],
35
+ ...overrides
36
+ }]
37
+ });
38
+ const parseResult = (raw) => JSON.parse(raw);
39
+ describe('UserInteractionTool', () => {
40
+ let container;
41
+ let tool;
42
+ let mockOpenerService;
43
+ let mockEditorManager;
44
+ let mockWorkspaceScope;
45
+ let mockScmService;
46
+ let mockResourceProvider;
47
+ const workspaceRoot = new uri_1.URI('file:///workspace');
48
+ beforeEach(() => {
49
+ container = new inversify_1.Container();
50
+ mockWorkspaceScope = {
51
+ getWorkspaceRoot: sinon.stub().resolves(workspaceRoot),
52
+ ensureWithinWorkspace: sinon.stub()
53
+ };
54
+ mockOpenerService = {
55
+ getOpeners: sinon.stub().resolves([]),
56
+ getOpener: sinon.stub().resolves({
57
+ open: sinon.stub().resolves(undefined)
58
+ })
59
+ };
60
+ mockEditorManager = {
61
+ open: sinon.stub().resolves(undefined)
62
+ };
63
+ mockScmService = {
64
+ findRepository: sinon.stub().returns(undefined)
65
+ };
66
+ mockResourceProvider = sinon.stub().callsFake(async (uri) => ({
67
+ uri,
68
+ readContents: sinon.stub().resolves(''),
69
+ dispose: sinon.stub()
70
+ }));
71
+ container.bind(workspace_functions_1.WorkspaceFunctionScope).toConstantValue(mockWorkspaceScope);
72
+ container.bind(scm_service_1.ScmService).toConstantValue(mockScmService);
73
+ container.bind(browser_1.OpenerService).toConstantValue(mockOpenerService);
74
+ container.bind(browser_2.EditorManager).toConstantValue(mockEditorManager);
75
+ container.bind(resource_1.ResourceProvider).toConstantValue(mockResourceProvider);
76
+ container.bind(user_interaction_tool_1.UserInteractionTool).toSelf();
77
+ tool = container.get(user_interaction_tool_1.UserInteractionTool);
78
+ });
79
+ afterEach(() => {
80
+ sinon.restore();
81
+ });
82
+ it('should return error when no interactions are provided', async () => {
83
+ const handler = tool.getTool().handler;
84
+ const result = await handler(JSON.stringify({ interactions: [] }), { toolCallId: 'x' });
85
+ (0, chai_1.expect)(JSON.parse(result).error).to.equal('No interactions provided');
86
+ });
87
+ it('should return error when arguments are invalid JSON', async () => {
88
+ const handler = tool.getTool().handler;
89
+ const result = await handler('not-json', { toolCallId: 'x' });
90
+ (0, chai_1.expect)(JSON.parse(result).error).to.equal('Invalid arguments');
91
+ });
92
+ it('should return error when no tool call ID is available', async () => {
93
+ const handler = tool.getTool().handler;
94
+ const result = await handler(singleStepArgs(), undefined);
95
+ (0, chai_1.expect)(JSON.parse(result).error).to.equal('No tool call ID available');
96
+ });
97
+ it('should return single-step result on completion', async () => {
98
+ const handler = tool.getTool().handler;
99
+ const handlerPromise = handler(singleStepArgs(), { toolCallId: 'call-1' });
100
+ tool.setStepResult('call-1', 0, { value: 'b' });
101
+ tool.completeInteraction('call-1');
102
+ const result = parseResult(await handlerPromise);
103
+ (0, chai_1.expect)(result.completed).to.be.true;
104
+ (0, chai_1.expect)(result.steps).to.have.length(1);
105
+ (0, chai_1.expect)(result.steps[0]).to.deep.equal({ title: 'Choose', value: 'b' });
106
+ });
107
+ it('should atomically set and complete via completeInteractionWith', async () => {
108
+ const handler = tool.getTool().handler;
109
+ const handlerPromise = handler(singleStepArgs(), { toolCallId: 'call-with' });
110
+ tool.completeInteractionWith('call-with', 0, { value: 'a' });
111
+ const result = parseResult(await handlerPromise);
112
+ (0, chai_1.expect)(result.completed).to.be.true;
113
+ (0, chai_1.expect)(result.steps[0]).to.deep.equal({ title: 'Choose', value: 'a' });
114
+ });
115
+ it('should accumulate per-step state across multiple steps', async () => {
116
+ const handler = tool.getTool().handler;
117
+ const args = JSON.stringify({
118
+ interactions: [
119
+ { title: 'Overview', message: 'summary' },
120
+ { title: 'Area 1', message: 'finding', options: [{ text: 'OK', value: 'approve' }] },
121
+ { title: 'Area 2', message: 'no findings' }
122
+ ]
123
+ });
124
+ const handlerPromise = handler(args, { toolCallId: 'call-multi' });
125
+ tool.setStepResult('call-multi', 0, { comments: ['nice summary'] });
126
+ tool.setStepResult('call-multi', 1, { value: 'approve', comments: ['fix on line 42'] });
127
+ tool.setStepResult('call-multi', 2, {});
128
+ tool.completeInteraction('call-multi');
129
+ const result = parseResult(await handlerPromise);
130
+ (0, chai_1.expect)(result.completed).to.be.true;
131
+ (0, chai_1.expect)(result.steps).to.have.length(3);
132
+ (0, chai_1.expect)(result.steps[0]).to.deep.equal({ title: 'Overview', comments: ['nice summary'] });
133
+ (0, chai_1.expect)(result.steps[1]).to.deep.equal({ title: 'Area 1', value: 'approve', comments: ['fix on line 42'] });
134
+ (0, chai_1.expect)(result.steps[2]).to.deep.equal({ title: 'Area 2' });
135
+ });
136
+ it('should ignore setStepResult after completion', async () => {
137
+ const handler = tool.getTool().handler;
138
+ const handlerPromise = handler(singleStepArgs(), { toolCallId: 'call-late' });
139
+ tool.setStepResult('call-late', 0, { value: 'a' });
140
+ tool.completeInteraction('call-late');
141
+ const result = parseResult(await handlerPromise);
142
+ (0, chai_1.expect)(result.steps[0].value).to.equal('a');
143
+ // Late call must not throw or change anything
144
+ tool.setStepResult('call-late', 0, { value: 'b' });
145
+ // No assertion needed beyond ensuring no exception
146
+ });
147
+ it('should ignore setStepResult for out-of-range step index', async () => {
148
+ const handler = tool.getTool().handler;
149
+ const handlerPromise = handler(singleStepArgs(), { toolCallId: 'call-range' });
150
+ tool.setStepResult('call-range', 5, { value: 'x' });
151
+ tool.setStepResult('call-range', -1, { value: 'y' });
152
+ tool.completeInteraction('call-range');
153
+ const result = parseResult(await handlerPromise);
154
+ (0, chai_1.expect)(result.steps[0]).to.deep.equal({ title: 'Choose' });
155
+ });
156
+ it('should return partial results with completed=false on cancellation', async () => {
157
+ const handler = tool.getTool().handler;
158
+ const cts = new cancellation_1.CancellationTokenSource();
159
+ const args = JSON.stringify({
160
+ interactions: [
161
+ { title: 'Step A', message: 'm' },
162
+ { title: 'Step B', message: 'm' },
163
+ { title: 'Step C', message: 'm' }
164
+ ]
165
+ });
166
+ const handlerPromise = handler(args, { toolCallId: 'call-cancel', cancellationToken: cts.token });
167
+ tool.setStepResult('call-cancel', 0, { comments: ['first done'] });
168
+ tool.setStepResult('call-cancel', 1, { value: 'whatever' });
169
+ cts.cancel();
170
+ const result = parseResult(await handlerPromise);
171
+ (0, chai_1.expect)(result.completed).to.be.false;
172
+ (0, chai_1.expect)(result.steps[0]).to.deep.equal({ title: 'Step A', comments: ['first done'] });
173
+ (0, chai_1.expect)(result.steps[1]).to.deep.equal({ title: 'Step B', value: 'whatever' });
174
+ (0, chai_1.expect)(result.steps[2].skipped).to.be.true;
175
+ });
176
+ it('should mark all steps as skipped if user did nothing before cancellation', async () => {
177
+ const handler = tool.getTool().handler;
178
+ const cts = new cancellation_1.CancellationTokenSource();
179
+ const args = JSON.stringify({
180
+ interactions: [
181
+ { title: 'Step A', message: 'm' },
182
+ { title: 'Step B', message: 'm' }
183
+ ]
184
+ });
185
+ const handlerPromise = handler(args, { toolCallId: 'call-skip-all', cancellationToken: cts.token });
186
+ cts.cancel();
187
+ const result = parseResult(await handlerPromise);
188
+ (0, chai_1.expect)(result.completed).to.be.false;
189
+ (0, chai_1.expect)(result.steps.every(s => s.skipped)).to.be.true;
190
+ });
191
+ it('should handle parallel calls independently', async () => {
192
+ const handler = tool.getTool().handler;
193
+ const promise1 = handler(JSON.stringify({
194
+ interactions: [{ title: 'Q1', message: 'first', options: [{ text: 'A', value: 'a' }] }]
195
+ }), { toolCallId: 'call-p1' });
196
+ const promise2 = handler(JSON.stringify({
197
+ interactions: [{ title: 'Q2', message: 'second', options: [{ text: 'B', value: 'b' }] }]
198
+ }), { toolCallId: 'call-p2' });
199
+ tool.setStepResult('call-p2', 0, { value: 'b' });
200
+ tool.completeInteraction('call-p2');
201
+ tool.setStepResult('call-p1', 0, { value: 'a' });
202
+ tool.completeInteraction('call-p1');
203
+ (0, chai_1.expect)(parseResult(await promise1).steps[0].value).to.equal('a');
204
+ (0, chai_1.expect)(parseResult(await promise2).steps[0].value).to.equal('b');
205
+ });
206
+ it('should open a file link via openLink helper', async () => {
207
+ await tool.openLink({ ref: { path: 'src/index.ts', line: 10 } });
208
+ (0, chai_1.expect)(mockEditorManager.open.calledOnce).to.be.true;
209
+ const openCall = mockEditorManager.open.getCall(0);
210
+ (0, chai_1.expect)(openCall.args[1]).to.deep.equal({ selection: { start: { line: 9, character: 0 } } });
211
+ });
212
+ it('should open a file link without line number', async () => {
213
+ await tool.openLink({ ref: 'src/app.ts' });
214
+ (0, chai_1.expect)(mockEditorManager.open.calledOnce).to.be.true;
215
+ const openCall = mockEditorManager.open.getCall(0);
216
+ (0, chai_1.expect)(openCall.args[1]).to.deep.equal({ selection: undefined });
217
+ });
218
+ it('should open a diff link with custom label', async () => {
219
+ await tool.openLink({ ref: 'src/old.ts', rightRef: 'src/new.ts', label: 'My Diff' });
220
+ (0, chai_1.expect)(mockOpenerService.getOpener.called).to.be.true;
221
+ });
222
+ it('should forward right-side line as selection when opening a diff', async () => {
223
+ await tool.openLink({ ref: 'src/foo.ts', rightRef: { path: 'src/foo.ts', line: 42 } });
224
+ const getOpenerCall = mockOpenerService.getOpener.getCall(0);
225
+ (0, chai_1.expect)(getOpenerCall.args[1]).to.deep.equal({ selection: { start: { line: 41, character: 0 } } });
226
+ });
227
+ it('should fall back to left-side line when right side has none', async () => {
228
+ await tool.openLink({ ref: { path: 'src/foo.ts', line: 7 }, rightRef: 'src/foo.ts' });
229
+ const getOpenerCall = mockOpenerService.getOpener.getCall(0);
230
+ (0, chai_1.expect)(getOpenerCall.args[1]).to.deep.equal({ selection: { start: { line: 6, character: 0 } } });
231
+ });
232
+ it('should treat new files (content unreadable at gitRef) as empty rather than an error', async () => {
233
+ mockResourceProvider.callsFake(async (uri) => {
234
+ if (uri.scheme === 'git') {
235
+ return {
236
+ uri,
237
+ readContents: sinon.stub().rejects(new Error('file not found at ref')),
238
+ dispose: sinon.stub()
239
+ };
240
+ }
241
+ return {
242
+ uri,
243
+ readContents: sinon.stub().resolves('content'),
244
+ dispose: sinon.stub()
245
+ };
246
+ });
247
+ const mockRepo = { provider: { id: 'git', rootUri: 'file:///workspace' } };
248
+ mockScmService.findRepository.returns(mockRepo);
249
+ await tool.openLink({
250
+ ref: { path: 'src/new-file.ts', gitRef: 'abc123' },
251
+ rightRef: 'src/new-file.ts'
252
+ });
253
+ (0, chai_1.expect)(mockOpenerService.getOpener.called).to.be.true;
254
+ const openCall = mockOpenerService.getOpener.getCall(0);
255
+ const diffUri = openCall.args[0];
256
+ (0, chai_1.expect)(diff_uris_1.DiffUris.isDiffUri(diffUri)).to.be.true;
257
+ const [leftUri] = diff_uris_1.DiffUris.decode(diffUri);
258
+ (0, chai_1.expect)(leftUri.scheme).to.equal(resource_1.MEMORY_TEXT);
259
+ });
260
+ it('should open diff with empty right side when right-side cannot be resolved', async () => {
261
+ mockResourceProvider.callsFake(async (uri) => {
262
+ if (uri.scheme === 'file') {
263
+ return {
264
+ uri,
265
+ readContents: sinon.stub().rejects(new Error('file not found')),
266
+ dispose: sinon.stub()
267
+ };
268
+ }
269
+ return {
270
+ uri,
271
+ readContents: sinon.stub().resolves('content'),
272
+ dispose: sinon.stub()
273
+ };
274
+ });
275
+ const mockRepo = { provider: { id: 'git', rootUri: 'file:///workspace' } };
276
+ mockScmService.findRepository.returns(mockRepo);
277
+ await tool.openLink({
278
+ ref: { path: 'src/deleted-file.ts', gitRef: 'abc123' },
279
+ rightRef: { path: 'src/deleted-file.ts' }
280
+ });
281
+ (0, chai_1.expect)(mockOpenerService.getOpener.called).to.be.true;
282
+ const openCall = mockOpenerService.getOpener.getCall(0);
283
+ const diffUri = openCall.args[0];
284
+ (0, chai_1.expect)(diff_uris_1.DiffUris.isDiffUri(diffUri)).to.be.true;
285
+ const [, rightUri] = diff_uris_1.DiffUris.decode(diffUri);
286
+ (0, chai_1.expect)(rightUri.scheme).to.equal(resource_1.MEMORY_TEXT);
287
+ });
288
+ it('should open diff with both sides empty when neither can be resolved', async () => {
289
+ mockResourceProvider.rejects(new Error('no resolver found'));
290
+ await tool.openLink({
291
+ ref: { path: 'src/file.ts', gitRef: 'abc123' },
292
+ rightRef: 'src/file.ts'
293
+ });
294
+ (0, chai_1.expect)(mockOpenerService.getOpener.called).to.be.true;
295
+ const openCall = mockOpenerService.getOpener.getCall(0);
296
+ const diffUri = openCall.args[0];
297
+ (0, chai_1.expect)(diff_uris_1.DiffUris.isDiffUri(diffUri)).to.be.true;
298
+ const [leftUri, rightUri] = diff_uris_1.DiffUris.decode(diffUri);
299
+ (0, chai_1.expect)(leftUri.scheme).to.equal(resource_1.MEMORY_TEXT_READONLY);
300
+ (0, chai_1.expect)(rightUri.scheme).to.equal(resource_1.MEMORY_TEXT);
301
+ });
302
+ it('should open diff with empty left side when ref is EmptyContentRef', async () => {
303
+ await tool.openLink({
304
+ ref: { empty: true, label: 'new file' },
305
+ rightRef: 'src/new-file.ts'
306
+ });
307
+ (0, chai_1.expect)(mockOpenerService.getOpener.called).to.be.true;
308
+ const openCall = mockOpenerService.getOpener.getCall(0);
309
+ const diffUri = openCall.args[0];
310
+ (0, chai_1.expect)(diff_uris_1.DiffUris.isDiffUri(diffUri)).to.be.true;
311
+ const [leftUri, rightUri] = diff_uris_1.DiffUris.decode(diffUri);
312
+ (0, chai_1.expect)(leftUri.scheme).to.equal(resource_1.MEMORY_TEXT);
313
+ (0, chai_1.expect)(rightUri.scheme).to.equal('file');
314
+ });
315
+ it('should show error content when gitRef cannot be resolved due to missing SCM repo', async () => {
316
+ mockScmService.findRepository.returns(undefined);
317
+ await tool.openLink({
318
+ ref: { path: 'src/file.ts', gitRef: 'abc123' },
319
+ rightRef: 'src/file.ts'
320
+ });
321
+ (0, chai_1.expect)(mockOpenerService.getOpener.called).to.be.true;
322
+ const openCall = mockOpenerService.getOpener.getCall(0);
323
+ const diffUri = openCall.args[0];
324
+ (0, chai_1.expect)(diff_uris_1.DiffUris.isDiffUri(diffUri)).to.be.true;
325
+ const [leftUri] = diff_uris_1.DiffUris.decode(diffUri);
326
+ (0, chai_1.expect)(leftUri.scheme).to.equal(resource_1.MEMORY_TEXT_READONLY);
327
+ (0, chai_1.expect)(leftUri.query).to.contain('Unable to resolve revision');
328
+ (0, chai_1.expect)(leftUri.query).to.contain('abc123');
329
+ });
330
+ it('should not open anything when single link ref is EmptyContentRef', async () => {
331
+ await tool.openLink({ ref: { empty: true } });
332
+ (0, chai_1.expect)(mockOpenerService.getOpener.called).to.be.false;
333
+ (0, chai_1.expect)(mockEditorManager.open.called).to.be.false;
334
+ });
335
+ });
336
+ //# sourceMappingURL=user-interaction-tool.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-interaction-tool.spec.js","sourceRoot":"","sources":["../../src/browser/user-interaction-tool.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ export declare const USER_INTERACTION_FUNCTION_ID = "userInteraction";
2
+ export interface EmptyContentRef {
3
+ empty: true;
4
+ label?: string;
5
+ }
6
+ export interface PathContentRef {
7
+ path: string;
8
+ gitRef?: string;
9
+ line?: number;
10
+ }
11
+ export type ContentRef = string | PathContentRef | EmptyContentRef;
12
+ export declare function isEmptyContentRef(ref: ContentRef): ref is EmptyContentRef;
13
+ export interface UserInteractionLink {
14
+ ref: ContentRef;
15
+ rightRef?: ContentRef;
16
+ label?: string;
17
+ autoOpen?: boolean;
18
+ }
19
+ export declare function resolveContentRef(ref: ContentRef): PathContentRef | EmptyContentRef;
20
+ export declare function buildDiffLabel(left: PathContentRef | EmptyContentRef, right: PathContentRef | EmptyContentRef): string;
21
+ export interface UserInteractionOption {
22
+ text: string;
23
+ value: string;
24
+ description?: string;
25
+ buttonLabel?: string;
26
+ }
27
+ export interface UserInteractionStep {
28
+ title: string;
29
+ message: string;
30
+ options?: UserInteractionOption[];
31
+ links?: UserInteractionLink[];
32
+ }
33
+ export interface UserInteractionStepResult {
34
+ title: string;
35
+ value?: string;
36
+ comments?: string[];
37
+ skipped?: boolean;
38
+ }
39
+ export interface UserInteractionResult {
40
+ completed: boolean;
41
+ steps: UserInteractionStepResult[];
42
+ }
43
+ export interface UserInteractionArgs {
44
+ interactions: UserInteractionStep[];
45
+ }
46
+ export interface UserInteractionInput {
47
+ title: string;
48
+ stepCount: number;
49
+ }
50
+ export declare function parseUserInteractionInput(args: string | undefined): UserInteractionInput;
51
+ export declare function parseUserInteractionResult(raw: unknown): UserInteractionResult | undefined;
52
+ export declare function parseUserInteractionArgs(args: string | undefined): UserInteractionArgs | undefined;
53
+ //# sourceMappingURL=user-interaction-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-interaction-tool.d.ts","sourceRoot":"","sources":["../../src/common/user-interaction-tool.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,4BAA4B,oBAAoB,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,IAAI,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,cAAc,GAAG,eAAe,CAAC;AAEnE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,GAAG,IAAI,eAAe,CAEzE;AAED,MAAM,WAAW,mBAAmB;IAChC,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,eAAe,CAKnF;AAgBD,wBAAgB,cAAc,CAC1B,IAAI,EAAE,cAAc,GAAG,eAAe,EACtC,KAAK,EAAE,cAAc,GAAG,eAAe,GACxC,MAAM,CAkBR;AAED,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAClC,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,yBAAyB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,yBAAyB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAChC,YAAY,EAAE,mBAAmB,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,CAaxF;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,qBAAqB,GAAG,SAAS,CAiB1F;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,mBAAmB,GAAG,SAAS,CAmBlG"}
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 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.USER_INTERACTION_FUNCTION_ID = void 0;
19
+ exports.isEmptyContentRef = isEmptyContentRef;
20
+ exports.resolveContentRef = resolveContentRef;
21
+ exports.buildDiffLabel = buildDiffLabel;
22
+ exports.parseUserInteractionInput = parseUserInteractionInput;
23
+ exports.parseUserInteractionResult = parseUserInteractionResult;
24
+ exports.parseUserInteractionArgs = parseUserInteractionArgs;
25
+ const nls_1 = require("@theia/core/lib/common/nls");
26
+ exports.USER_INTERACTION_FUNCTION_ID = 'userInteraction';
27
+ function isEmptyContentRef(ref) {
28
+ return typeof ref === 'object' && 'empty' in ref && ref.empty === true;
29
+ }
30
+ function resolveContentRef(ref) {
31
+ if (typeof ref === 'string') {
32
+ return { path: ref };
33
+ }
34
+ return ref;
35
+ }
36
+ const SHA_PREFIX_LENGTH = 7;
37
+ function workingCopyLabel() {
38
+ return nls_1.nls.localize('theia/ai-ide/userInteractionWorkingCopy', 'Working Copy');
39
+ }
40
+ function emptyLabel() {
41
+ return nls_1.nls.localize('theia/ai-ide/userInteractionEmpty', 'Empty');
42
+ }
43
+ function gitRefTag(ref) {
44
+ return ref.gitRef ? ref.gitRef.substring(0, SHA_PREFIX_LENGTH) : workingCopyLabel();
45
+ }
46
+ function buildDiffLabel(left, right) {
47
+ const leftIsEmpty = isEmptyContentRef(left);
48
+ const rightIsEmpty = isEmptyContentRef(right);
49
+ if (leftIsEmpty && rightIsEmpty) {
50
+ return `${left.label || emptyLabel()} ⟷ ${right.label || emptyLabel()}`;
51
+ }
52
+ if (leftIsEmpty) {
53
+ return `${right.path} (${left.label || emptyLabel()} ⟷ ${gitRefTag(right)})`;
54
+ }
55
+ if (rightIsEmpty) {
56
+ return `${left.path} (${gitRefTag(left)} ⟷ ${right.label || emptyLabel()})`;
57
+ }
58
+ const leftPath = left;
59
+ const rightPath = right;
60
+ if (leftPath.path === rightPath.path) {
61
+ return `${leftPath.path} (${gitRefTag(leftPath)} ⟷ ${gitRefTag(rightPath)})`;
62
+ }
63
+ return `${leftPath.path} ⟷ ${rightPath.path}`;
64
+ }
65
+ function parseUserInteractionInput(args) {
66
+ if (!args) {
67
+ return { title: '', stepCount: 0 };
68
+ }
69
+ try {
70
+ const parsed = JSON.parse(args);
71
+ const interactions = Array.isArray(parsed.interactions) ? parsed.interactions : [];
72
+ const firstTitle = typeof interactions[0]?.title === 'string' ? interactions[0].title : '';
73
+ return { title: firstTitle, stepCount: interactions.length };
74
+ }
75
+ catch {
76
+ const match = /"title"\s*:\s*"([^"]*)"?/.exec(args);
77
+ return { title: match?.[1] ?? '', stepCount: 0 };
78
+ }
79
+ }
80
+ function parseUserInteractionResult(raw) {
81
+ let candidate = raw;
82
+ if (typeof raw === 'string') {
83
+ try {
84
+ candidate = JSON.parse(raw);
85
+ }
86
+ catch {
87
+ return undefined;
88
+ }
89
+ }
90
+ if (!candidate || typeof candidate !== 'object') {
91
+ return undefined;
92
+ }
93
+ const obj = candidate;
94
+ if (typeof obj.completed !== 'boolean' || !Array.isArray(obj.steps)) {
95
+ return undefined;
96
+ }
97
+ return obj;
98
+ }
99
+ function parseUserInteractionArgs(args) {
100
+ if (!args) {
101
+ return undefined;
102
+ }
103
+ try {
104
+ const parsed = JSON.parse(args);
105
+ if (!Array.isArray(parsed.interactions)) {
106
+ return undefined;
107
+ }
108
+ const validSteps = parsed.interactions
109
+ .map(parseStep)
110
+ .filter((step) => step !== undefined);
111
+ if (validSteps.length === 0) {
112
+ return undefined;
113
+ }
114
+ return { interactions: validSteps };
115
+ }
116
+ catch {
117
+ return undefined;
118
+ }
119
+ }
120
+ function parseStep(raw) {
121
+ if (!raw || typeof raw !== 'object') {
122
+ return undefined;
123
+ }
124
+ const obj = raw;
125
+ if (typeof obj.title !== 'string' || typeof obj.message !== 'string') {
126
+ return undefined;
127
+ }
128
+ let options;
129
+ if (Array.isArray(obj.options)) {
130
+ const validOptions = obj.options.filter((opt) => !!opt && typeof opt === 'object'
131
+ && typeof opt.text === 'string'
132
+ && typeof opt.value === 'string');
133
+ options = validOptions.length > 0 ? validOptions : undefined;
134
+ }
135
+ let links;
136
+ if (Array.isArray(obj.links)) {
137
+ const filtered = obj.links.filter(isValidLink);
138
+ links = filtered.length > 0 ? filtered : undefined;
139
+ }
140
+ else if (isValidLink(obj.link)) {
141
+ links = [obj.link];
142
+ }
143
+ return {
144
+ title: obj.title,
145
+ message: obj.message,
146
+ options,
147
+ links
148
+ };
149
+ }
150
+ function isValidContentRef(ref) {
151
+ if (typeof ref === 'string') {
152
+ return ref.length > 0;
153
+ }
154
+ if (ref && typeof ref === 'object') {
155
+ const obj = ref;
156
+ if (obj.empty === true) {
157
+ return true;
158
+ }
159
+ return typeof obj.path === 'string' && obj.path.length > 0;
160
+ }
161
+ return false;
162
+ }
163
+ function isValidLink(link) {
164
+ if (!link || typeof link !== 'object') {
165
+ return false;
166
+ }
167
+ const obj = link;
168
+ if (!isValidContentRef(obj.ref)) {
169
+ return false;
170
+ }
171
+ if (obj.rightRef !== undefined && !isValidContentRef(obj.rightRef)) {
172
+ return false;
173
+ }
174
+ return true;
175
+ }
176
+ //# sourceMappingURL=user-interaction-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-interaction-tool.js","sourceRoot":"","sources":["../../src/common/user-interaction-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=user-interaction-tool.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-interaction-tool.spec.d.ts","sourceRoot":"","sources":["../../src/common/user-interaction-tool.spec.ts"],"names":[],"mappings":""}