@theia/ai-terminal 1.55.0-next.4 → 1.55.0-next.67
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.
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Agent, LanguageModelRegistry, LanguageModelRequirement, PromptService } from '@theia/ai-core/lib/common';
|
|
1
|
+
import { Agent, CommunicationRecordingService, LanguageModelRegistry, LanguageModelRequirement, PromptService } from '@theia/ai-core/lib/common';
|
|
2
2
|
import { ILogger } from '@theia/core';
|
|
3
3
|
export declare class AiTerminalAgent implements Agent {
|
|
4
|
+
protected recordingService: CommunicationRecordingService;
|
|
4
5
|
id: string;
|
|
5
6
|
name: string;
|
|
6
7
|
description: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-terminal-agent.d.ts","sourceRoot":"","sources":["../../src/browser/ai-terminal-agent.ts"],"names":[],"mappings":"AAgBA,OAAO,EACH,KAAK,
|
|
1
|
+
{"version":3,"file":"ai-terminal-agent.d.ts","sourceRoot":"","sources":["../../src/browser/ai-terminal-agent.ts"],"names":[],"mappings":"AAgBA,OAAO,EACH,KAAK,EACL,6BAA6B,EAG7B,qBAAqB,EAAE,wBAAwB,EAC/C,aAAa,EAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAgB,OAAO,EAAE,MAAM,aAAa,CAAC;AAUpD,qBACa,eAAgB,YAAW,KAAK;IAEzC,SAAS,CAAC,gBAAgB,EAAE,6BAA6B,CAAC;IAE1D,EAAE,SAAwB;IAC1B,IAAI,SAAwB;IAC5B,WAAW,SAEoI;IAC/I,SAAS,UAAM;IACf,SAAS,UAAM;IACf,sBAAsB;;;;QAKpB;IACF,eAAe;;;;;QA4Db;IACF,yBAAyB,EAAE,wBAAwB,EAAE,CAKnD;IAGF,SAAS,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAGvD,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IAGvC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAEpB,WAAW,CACb,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,sBAAsB,EAAE,MAAM,EAAE,GACjC,OAAO,CAAC,MAAM,EAAE,CAAC;CAsFvB"}
|
|
@@ -123,24 +123,34 @@ recent-terminal-contents:
|
|
|
123
123
|
cwd,
|
|
124
124
|
recentTerminalContents
|
|
125
125
|
};
|
|
126
|
-
const
|
|
127
|
-
const
|
|
128
|
-
if (!
|
|
126
|
+
const systemMessage = await this.promptService.getPrompt('terminal-system', parameters).then(p => p === null || p === void 0 ? void 0 : p.text);
|
|
127
|
+
const request = await this.promptService.getPrompt('terminal-user', parameters).then(p => p === null || p === void 0 ? void 0 : p.text);
|
|
128
|
+
if (!systemMessage || !request) {
|
|
129
129
|
this.logger.error('The prompt service didn\'t return prompts for the AI Terminal Agent.');
|
|
130
130
|
return [];
|
|
131
131
|
}
|
|
132
|
+
// since we do not actually hold complete conversions, the request/response pair is considered a session
|
|
133
|
+
const sessionId = (0, core_1.generateUuid)();
|
|
134
|
+
const requestId = (0, core_1.generateUuid)();
|
|
135
|
+
this.recordingService.recordRequest({
|
|
136
|
+
agentId: this.id,
|
|
137
|
+
sessionId,
|
|
138
|
+
requestId,
|
|
139
|
+
request,
|
|
140
|
+
systemMessage
|
|
141
|
+
});
|
|
132
142
|
try {
|
|
133
143
|
const result = await lm.request({
|
|
134
144
|
messages: [
|
|
135
145
|
{
|
|
136
146
|
actor: 'ai',
|
|
137
147
|
type: 'text',
|
|
138
|
-
query:
|
|
148
|
+
query: systemMessage
|
|
139
149
|
},
|
|
140
150
|
{
|
|
141
151
|
actor: 'user',
|
|
142
152
|
type: 'text',
|
|
143
|
-
query:
|
|
153
|
+
query: request
|
|
144
154
|
}
|
|
145
155
|
],
|
|
146
156
|
response_format: {
|
|
@@ -156,11 +166,15 @@ recent-terminal-contents:
|
|
|
156
166
|
// model returned structured output
|
|
157
167
|
const parsedResult = Commands.safeParse(result.parsed);
|
|
158
168
|
if (parsedResult.success) {
|
|
169
|
+
const response = JSON.stringify(parsedResult.data.commands);
|
|
170
|
+
this.recordingService.recordResponse({ agentId: this.id, sessionId, requestId, response, systemMessage });
|
|
159
171
|
return parsedResult.data.commands;
|
|
160
172
|
}
|
|
161
173
|
}
|
|
162
174
|
// fall back to agent-based parsing of result
|
|
163
175
|
const jsonResult = await (0, common_1.getJsonOfResponse)(result);
|
|
176
|
+
const responseTextFromJSON = JSON.stringify(jsonResult);
|
|
177
|
+
this.recordingService.recordResponse({ agentId: this.id, sessionId, requestId, response: responseTextFromJSON });
|
|
164
178
|
const parsedJsonResult = Commands.safeParse(jsonResult);
|
|
165
179
|
if (parsedJsonResult.success) {
|
|
166
180
|
return parsedJsonResult.data.commands;
|
|
@@ -174,6 +188,10 @@ recent-terminal-contents:
|
|
|
174
188
|
}
|
|
175
189
|
};
|
|
176
190
|
exports.AiTerminalAgent = AiTerminalAgent;
|
|
191
|
+
tslib_1.__decorate([
|
|
192
|
+
(0, inversify_1.inject)(common_1.CommunicationRecordingService),
|
|
193
|
+
tslib_1.__metadata("design:type", Object)
|
|
194
|
+
], AiTerminalAgent.prototype, "recordingService", void 0);
|
|
177
195
|
tslib_1.__decorate([
|
|
178
196
|
(0, inversify_1.inject)(common_1.LanguageModelRegistry),
|
|
179
197
|
tslib_1.__metadata("design:type", Object)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-terminal-agent.js","sourceRoot":"","sources":["../../src/browser/ai-terminal-agent.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,
|
|
1
|
+
{"version":3,"file":"ai-terminal-agent.js","sourceRoot":"","sources":["../../src/browser/ai-terminal-agent.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/ai-terminal",
|
|
3
|
-
"version": "1.55.0-next.
|
|
3
|
+
"version": "1.55.0-next.67+8664face6",
|
|
4
4
|
"description": "Theia - AI Terminal Extension",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/ai-chat": "1.55.0-next.
|
|
7
|
-
"@theia/ai-core": "1.55.0-next.
|
|
8
|
-
"@theia/core": "1.55.0-next.
|
|
9
|
-
"@theia/terminal": "1.55.0-next.
|
|
6
|
+
"@theia/ai-chat": "1.55.0-next.67+8664face6",
|
|
7
|
+
"@theia/ai-core": "1.55.0-next.67+8664face6",
|
|
8
|
+
"@theia/core": "1.55.0-next.67+8664face6",
|
|
9
|
+
"@theia/terminal": "1.55.0-next.67+8664face6",
|
|
10
10
|
"zod": "^3.23.8",
|
|
11
11
|
"zod-to-json-schema": "^3.23.2"
|
|
12
12
|
},
|
|
@@ -43,10 +43,10 @@
|
|
|
43
43
|
"watch": "theiaext watch"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@theia/ext-scripts": "1.
|
|
46
|
+
"@theia/ext-scripts": "1.55.0"
|
|
47
47
|
},
|
|
48
48
|
"nyc": {
|
|
49
49
|
"extends": "../../configs/nyc.json"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "8664face680c050b8d544a381645259b6821a634"
|
|
52
52
|
}
|
|
@@ -16,12 +16,13 @@
|
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
18
|
Agent,
|
|
19
|
+
CommunicationRecordingService,
|
|
19
20
|
getJsonOfResponse,
|
|
20
21
|
isLanguageModelParsedResponse,
|
|
21
22
|
LanguageModelRegistry, LanguageModelRequirement,
|
|
22
23
|
PromptService
|
|
23
24
|
} from '@theia/ai-core/lib/common';
|
|
24
|
-
import { ILogger } from '@theia/core';
|
|
25
|
+
import { generateUuid, ILogger } from '@theia/core';
|
|
25
26
|
import { inject, injectable } from '@theia/core/shared/inversify';
|
|
26
27
|
import { z } from 'zod';
|
|
27
28
|
import zodToJsonSchema from 'zod-to-json-schema';
|
|
@@ -33,6 +34,8 @@ type Commands = z.infer<typeof Commands>;
|
|
|
33
34
|
|
|
34
35
|
@injectable()
|
|
35
36
|
export class AiTerminalAgent implements Agent {
|
|
37
|
+
@inject(CommunicationRecordingService)
|
|
38
|
+
protected recordingService: CommunicationRecordingService;
|
|
36
39
|
|
|
37
40
|
id = 'Terminal Assistant';
|
|
38
41
|
name = 'Terminal Assistant';
|
|
@@ -146,25 +149,36 @@ recent-terminal-contents:
|
|
|
146
149
|
recentTerminalContents
|
|
147
150
|
};
|
|
148
151
|
|
|
149
|
-
const
|
|
150
|
-
const
|
|
151
|
-
if (!
|
|
152
|
+
const systemMessage = await this.promptService.getPrompt('terminal-system', parameters).then(p => p?.text);
|
|
153
|
+
const request = await this.promptService.getPrompt('terminal-user', parameters).then(p => p?.text);
|
|
154
|
+
if (!systemMessage || !request) {
|
|
152
155
|
this.logger.error('The prompt service didn\'t return prompts for the AI Terminal Agent.');
|
|
153
156
|
return [];
|
|
154
157
|
}
|
|
155
158
|
|
|
159
|
+
// since we do not actually hold complete conversions, the request/response pair is considered a session
|
|
160
|
+
const sessionId = generateUuid();
|
|
161
|
+
const requestId = generateUuid();
|
|
162
|
+
this.recordingService.recordRequest({
|
|
163
|
+
agentId: this.id,
|
|
164
|
+
sessionId,
|
|
165
|
+
requestId,
|
|
166
|
+
request,
|
|
167
|
+
systemMessage
|
|
168
|
+
});
|
|
169
|
+
|
|
156
170
|
try {
|
|
157
171
|
const result = await lm.request({
|
|
158
172
|
messages: [
|
|
159
173
|
{
|
|
160
174
|
actor: 'ai',
|
|
161
175
|
type: 'text',
|
|
162
|
-
query:
|
|
176
|
+
query: systemMessage
|
|
163
177
|
},
|
|
164
178
|
{
|
|
165
179
|
actor: 'user',
|
|
166
180
|
type: 'text',
|
|
167
|
-
query:
|
|
181
|
+
query: request
|
|
168
182
|
}
|
|
169
183
|
],
|
|
170
184
|
response_format: {
|
|
@@ -181,12 +195,16 @@ recent-terminal-contents:
|
|
|
181
195
|
// model returned structured output
|
|
182
196
|
const parsedResult = Commands.safeParse(result.parsed);
|
|
183
197
|
if (parsedResult.success) {
|
|
198
|
+
const response = JSON.stringify(parsedResult.data.commands);
|
|
199
|
+
this.recordingService.recordResponse({ agentId: this.id, sessionId, requestId, response, systemMessage });
|
|
184
200
|
return parsedResult.data.commands;
|
|
185
201
|
}
|
|
186
202
|
}
|
|
187
203
|
|
|
188
204
|
// fall back to agent-based parsing of result
|
|
189
205
|
const jsonResult = await getJsonOfResponse(result);
|
|
206
|
+
const responseTextFromJSON = JSON.stringify(jsonResult);
|
|
207
|
+
this.recordingService.recordResponse({ agentId: this.id, sessionId, requestId, response: responseTextFromJSON });
|
|
190
208
|
const parsedJsonResult = Commands.safeParse(jsonResult);
|
|
191
209
|
if (parsedJsonResult.success) {
|
|
192
210
|
return parsedJsonResult.data.commands;
|