libre-webui 0.16.1 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +232 -154
- package/backend/dist/db.d.ts.map +1 -1
- package/backend/dist/db.js +5 -0
- package/backend/dist/db.js.map +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +2 -0
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/routes/agentCli.d.ts +3 -0
- package/backend/dist/routes/agentCli.d.ts.map +1 -0
- package/backend/dist/routes/agentCli.js +33 -0
- package/backend/dist/routes/agentCli.js.map +1 -0
- package/backend/dist/routes/chat.d.ts.map +1 -1
- package/backend/dist/routes/chat.js +27 -0
- package/backend/dist/routes/chat.js.map +1 -1
- package/backend/dist/routes/work.d.ts.map +1 -1
- package/backend/dist/routes/work.js +23 -2
- package/backend/dist/routes/work.js.map +1 -1
- package/backend/dist/services/agentCliService.d.ts +30 -0
- package/backend/dist/services/agentCliService.d.ts.map +1 -0
- package/backend/dist/services/agentCliService.js +328 -0
- package/backend/dist/services/agentCliService.js.map +1 -0
- package/backend/dist/services/chatGenerationService.d.ts.map +1 -1
- package/backend/dist/services/chatGenerationService.js +19 -1
- package/backend/dist/services/chatGenerationService.js.map +1 -1
- package/backend/dist/services/workAgentGuidance.js +1 -1
- package/backend/dist/services/workAgentGuidance.js.map +1 -1
- package/backend/dist/services/workAgentService.d.ts.map +1 -1
- package/backend/dist/services/workAgentService.js +37 -0
- package/backend/dist/services/workAgentService.js.map +1 -1
- package/backend/dist/services/workHostWorkspaceService.d.ts +22 -0
- package/backend/dist/services/workHostWorkspaceService.d.ts.map +1 -0
- package/backend/dist/services/workHostWorkspaceService.js +136 -0
- package/backend/dist/services/workHostWorkspaceService.js.map +1 -0
- package/backend/dist/services/workRuntimeService.d.ts +43 -2
- package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
- package/backend/dist/services/workRuntimeService.js +249 -6
- package/backend/dist/services/workRuntimeService.js.map +1 -1
- package/backend/dist/services/workTaskService.d.ts +3 -3
- package/backend/dist/services/workTaskService.d.ts.map +1 -1
- package/backend/dist/services/workTaskService.js +10 -6
- package/backend/dist/services/workTaskService.js.map +1 -1
- package/backend/dist/services/workTerminalService.d.ts +46 -0
- package/backend/dist/services/workTerminalService.d.ts.map +1 -0
- package/backend/dist/services/workTerminalService.js +241 -0
- package/backend/dist/services/workTerminalService.js.map +1 -0
- package/backend/dist/types/index.d.ts +1 -1
- package/backend/dist/types/index.d.ts.map +1 -1
- package/backend/dist/types/work.d.ts +22 -0
- package/backend/dist/types/work.d.ts.map +1 -1
- package/backend/dist/utils/chatProviderSelection.d.ts.map +1 -1
- package/backend/dist/utils/chatProviderSelection.js +7 -5
- package/backend/dist/utils/chatProviderSelection.js.map +1 -1
- package/backend/dist/websocketServer.d.ts.map +1 -1
- package/backend/dist/websocketServer.js +51 -14
- package/backend/dist/websocketServer.js.map +1 -1
- package/backend/dist/workTerminalServer.d.ts +17 -0
- package/backend/dist/workTerminalServer.d.ts.map +1 -0
- package/backend/dist/workTerminalServer.js +224 -0
- package/backend/dist/workTerminalServer.js.map +1 -0
- package/backend/package.json +1 -1
- package/frontend/dist/assets/index-BqI0kezz.css +1 -0
- package/frontend/dist/assets/index-CRC6g6bL.js +3 -0
- package/frontend/dist/assets/xterm-CmMoOwwu.css +1 -0
- package/frontend/dist/index.html +8 -6
- package/frontend/dist/js/ArtifactContainer-Cdy-973y.js +1 -0
- package/frontend/dist/js/{ArtifactDemoPage-CWDhGWrz.js → ArtifactDemoPage-B4qsvUnF.js} +1 -1
- package/frontend/dist/js/ArtifactSlideOutPanel-CmKgQ4eD.js +1 -0
- package/frontend/dist/js/{Button-DBk-AREB.js → Button-CRwzOaDZ.js} +1 -1
- package/frontend/dist/js/ChatPage-CYT69oBR.js +16 -0
- package/frontend/dist/js/FirstTimeSetup-C8LdLP5J.js +1 -0
- package/frontend/dist/js/GalleryPage-Bm89pnS8.js +1 -0
- package/frontend/dist/js/HomePage-CeCYnMUG.js +1 -0
- package/frontend/dist/js/{LibreClawPage-CHEfny1k.js → LibreClawPage-DGMEV6dm.js} +1 -1
- package/frontend/dist/js/{ModelManagerModals-DltRprHU.js → ModelManagerModals-DMoEav1l.js} +1 -1
- package/frontend/dist/js/ModelSelector-DXPdGdQ_.js +1 -0
- package/frontend/dist/js/ModelsPage-D-FIy2x-.js +2 -0
- package/frontend/dist/js/PersonasPage-CIrEVFo5.js +13 -0
- package/frontend/dist/js/RichMessageContent-BJ49VN9j.js +3 -0
- package/frontend/dist/js/SettingsModal-CxtOXPY7.js +1 -0
- package/frontend/dist/js/UserManagementPage-BfyYGGFQ.js +1 -0
- package/frontend/dist/js/WorkPage-C7bW6Hxx.js +4 -0
- package/frontend/dist/js/addon-fit-Cj0_dfHF.js +1 -0
- package/frontend/dist/js/api-DCD41-l9.js +19 -0
- package/frontend/dist/js/appStore-Bw-8Exsx.js +2 -0
- package/frontend/dist/js/ar-BAHlIvy0.js +2 -0
- package/frontend/dist/js/authStore-mOYH_AXI.js +4 -0
- package/frontend/dist/js/bn-BxquDVbd.js +2 -0
- package/frontend/dist/js/{cs-6UKhKj0A.js → cs-C4DoKzRm.js} +2 -2
- package/frontend/dist/js/da-CFslpGTw.js +2 -0
- package/frontend/dist/js/de-ChudoRh2.js +2 -0
- package/frontend/dist/js/es-B36fefE-.js +2 -0
- package/frontend/dist/js/{estree-BRklD62a.js → estree-0vwU39qX.js} +1 -1
- package/frontend/dist/js/fr-BSVeTM5W.js +2 -0
- package/frontend/dist/js/hi-BGoFbl5V.js +2 -0
- package/frontend/dist/js/{html-BgGIAGmn.js → html-CApr2Bvi.js} +1 -1
- package/frontend/dist/js/id-BfYs2p_j.js +2 -0
- package/frontend/dist/js/{is-BWSbAIoq.js → is-DZ1MS-5A.js} +2 -2
- package/frontend/dist/js/it-CXtrPCG1.js +2 -0
- package/frontend/dist/js/ja-FPJ_NK_y.js +2 -0
- package/frontend/dist/js/ko-DVwD4ZZF.js +2 -0
- package/frontend/dist/js/{markdown-CM2nBJJi.js → markdown-C78Qc6xu.js} +1 -1
- package/frontend/dist/js/ms-PKPP0RX3.js +2 -0
- package/frontend/dist/js/nl-DWM5HJZ8.js +2 -0
- package/frontend/dist/js/pl-B9va8Tuf.js +2 -0
- package/frontend/dist/js/pt-P0IQi-Zr.js +2 -0
- package/frontend/dist/js/ru-Ca2bxYnc.js +2 -0
- package/frontend/dist/js/{standalone-CUBo-NGt.js → standalone-DmLfI4Qj.js} +1 -1
- package/frontend/dist/js/sv-DI4RDwyZ.js +2 -0
- package/frontend/dist/js/th-DN0bDS9d.js +2 -0
- package/frontend/dist/js/tr-ChqMv5Q4.js +2 -0
- package/frontend/dist/js/{typescript-Dcy9qxSB.js → typescript-Bcq62agC.js} +1 -1
- package/frontend/dist/js/{ui-vendor-CAFEDSaO.js → ui-vendor-DohPFHDW.js} +1 -1
- package/frontend/dist/js/uk-Cr51h_XQ.js +2 -0
- package/frontend/dist/js/useBaseQuery-BAOlhjar.js +1 -0
- package/frontend/dist/js/useQuery-CcRqxveh.js +1 -0
- package/frontend/dist/js/utils-DmZD5uA3.js +1 -0
- package/frontend/dist/js/{vi-82JkwFsQ.js → vi-D4OhoVMH.js} +2 -2
- package/frontend/dist/js/work-DVgm81bJ.js +1 -0
- package/frontend/dist/js/xterm-DKl1QLiw.js +7 -0
- package/frontend/dist/js/zh-Bvau7hlR.js +2 -0
- package/package.json +3 -3
- package/frontend/dist/assets/index-BVgyQN3z.js +0 -5
- package/frontend/dist/assets/index-Dme2Ozol.css +0 -1
- package/frontend/dist/js/ArtifactContainer-CbMAYwvr.js +0 -1
- package/frontend/dist/js/ArtifactSlideOutPanel-CzUpDM59.js +0 -1
- package/frontend/dist/js/ChatPage-D0fdzy7a.js +0 -16
- package/frontend/dist/js/FirstTimeSetup-CfnOmy9w.js +0 -1
- package/frontend/dist/js/GalleryPage-CMkCur9v.js +0 -1
- package/frontend/dist/js/ModelSelector-COnlNsVM.js +0 -1
- package/frontend/dist/js/ModelsPage-nxheiYJp.js +0 -2
- package/frontend/dist/js/PersonasPage-C2pqDsWA.js +0 -13
- package/frontend/dist/js/RichMessageContent-Cz9y-bgl.js +0 -3
- package/frontend/dist/js/SettingsModal-B6Se68Hd.js +0 -1
- package/frontend/dist/js/UserManagementPage-DQeL-Twp.js +0 -1
- package/frontend/dist/js/WorkPage-AcZMp8OB.js +0 -2
- package/frontend/dist/js/api-Fi-lJlfu.js +0 -19
- package/frontend/dist/js/ar-KceI0PfT.js +0 -2
- package/frontend/dist/js/bn-DsKo2dzS.js +0 -2
- package/frontend/dist/js/da-CJgZ3YuL.js +0 -2
- package/frontend/dist/js/de-BZAmOuCT.js +0 -2
- package/frontend/dist/js/es-CD4u7no9.js +0 -2
- package/frontend/dist/js/fr-Cou2jOS3.js +0 -2
- package/frontend/dist/js/hi-ZxkbNCyB.js +0 -2
- package/frontend/dist/js/id-DT9CqaWQ.js +0 -2
- package/frontend/dist/js/it-CdNoTXm3.js +0 -2
- package/frontend/dist/js/ja-CIuQg0xv.js +0 -2
- package/frontend/dist/js/ko-BWRUjDOH.js +0 -2
- package/frontend/dist/js/ms-gJstIj2a.js +0 -2
- package/frontend/dist/js/nl-CydjVNUw.js +0 -2
- package/frontend/dist/js/pl-DPN9mAa5.js +0 -2
- package/frontend/dist/js/pt-MRXGqIjQ.js +0 -2
- package/frontend/dist/js/ru-CvQ9GkJF.js +0 -2
- package/frontend/dist/js/sv-BxS2fvhU.js +0 -2
- package/frontend/dist/js/th-DMxyn6e4.js +0 -2
- package/frontend/dist/js/tr-BTPldUaA.js +0 -2
- package/frontend/dist/js/uk-BGxZOKgp.js +0 -2
- package/frontend/dist/js/useBaseQuery-CFTidwqz.js +0 -1
- package/frontend/dist/js/useQuery-UsSBfWzs.js +0 -1
- package/frontend/dist/js/utils-pTFqSV8c.js +0 -1
- package/frontend/dist/js/zh-Bxxfwci3.js +0 -2
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Libre WebUI
|
|
3
|
+
* Copyright (C) 2025 Kroonen AI, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at:
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { spawn } from 'child_process';
|
|
18
|
+
import fs from 'fs';
|
|
19
|
+
import os from 'os';
|
|
20
|
+
import path from 'path';
|
|
21
|
+
import { userModel } from '../models/userModel.js';
|
|
22
|
+
import { createLogger } from '../utils/logger.js';
|
|
23
|
+
const logger = createLogger('agent-cli');
|
|
24
|
+
const AGENT_CLI_DEFINITIONS = [
|
|
25
|
+
{
|
|
26
|
+
id: 'claude-code',
|
|
27
|
+
name: 'Claude Code',
|
|
28
|
+
command: 'claude',
|
|
29
|
+
parser: 'claude',
|
|
30
|
+
// -p reads the prompt from stdin; stream-json gives line-delimited events.
|
|
31
|
+
buildArgs: () => [
|
|
32
|
+
'-p',
|
|
33
|
+
'--output-format',
|
|
34
|
+
'stream-json',
|
|
35
|
+
'--verbose',
|
|
36
|
+
'--include-partial-messages',
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: 'codex',
|
|
41
|
+
name: 'Codex',
|
|
42
|
+
command: 'codex',
|
|
43
|
+
parser: 'codex',
|
|
44
|
+
buildArgs: () => ['exec', '--json', '--skip-git-repo-check', '-'],
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
const AGENT_TIMEOUT_MS = Math.max(30000, parseInt(process.env.AGENT_CLI_TIMEOUT_MS || '600000', 10) || 600000);
|
|
48
|
+
const MAX_OUTPUT_CHARS = 2000000;
|
|
49
|
+
const MAX_STDERR_CHARS = 8000;
|
|
50
|
+
const MAX_CONTEXT_MESSAGES = 30;
|
|
51
|
+
const agentsEnabled = () => process.env.AGENT_CLI_MODELS_ENABLED !== 'false';
|
|
52
|
+
function resolveBinary(command) {
|
|
53
|
+
const pathValue = process.env.PATH || '';
|
|
54
|
+
for (const dir of pathValue.split(path.delimiter)) {
|
|
55
|
+
if (!dir)
|
|
56
|
+
continue;
|
|
57
|
+
const candidate = path.join(dir, command);
|
|
58
|
+
try {
|
|
59
|
+
fs.accessSync(candidate, fs.constants.X_OK);
|
|
60
|
+
return candidate;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// keep scanning
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
function roleLabel(role) {
|
|
69
|
+
if (role === 'assistant')
|
|
70
|
+
return 'Assistant';
|
|
71
|
+
if (role === 'system')
|
|
72
|
+
return 'System';
|
|
73
|
+
return 'User';
|
|
74
|
+
}
|
|
75
|
+
export function buildAgentPrompt(messages) {
|
|
76
|
+
const context = messages.slice(-MAX_CONTEXT_MESSAGES);
|
|
77
|
+
const transcript = context
|
|
78
|
+
.map(message => `${roleLabel(message.role)}: ${message.content}`)
|
|
79
|
+
.join('\n\n');
|
|
80
|
+
return [
|
|
81
|
+
'You are the assistant in an ongoing chat conversation. The conversation so far:',
|
|
82
|
+
'',
|
|
83
|
+
transcript,
|
|
84
|
+
'',
|
|
85
|
+
'Reply to the last user message. Respond with the reply text only — no role prefix.',
|
|
86
|
+
].join('\n');
|
|
87
|
+
}
|
|
88
|
+
/** Simple push-based async queue bridging child-process events to a generator. */
|
|
89
|
+
class ChunkQueue {
|
|
90
|
+
constructor() {
|
|
91
|
+
this.chunks = [];
|
|
92
|
+
this.waiters = [];
|
|
93
|
+
this.finished = false;
|
|
94
|
+
this.failure = null;
|
|
95
|
+
}
|
|
96
|
+
push(chunk) {
|
|
97
|
+
if (this.finished)
|
|
98
|
+
return;
|
|
99
|
+
this.chunks.push(chunk);
|
|
100
|
+
this.wake();
|
|
101
|
+
}
|
|
102
|
+
finish(error) {
|
|
103
|
+
if (this.finished)
|
|
104
|
+
return;
|
|
105
|
+
this.finished = true;
|
|
106
|
+
this.failure = error ?? null;
|
|
107
|
+
this.wake();
|
|
108
|
+
}
|
|
109
|
+
wake() {
|
|
110
|
+
const waiters = this.waiters;
|
|
111
|
+
this.waiters = [];
|
|
112
|
+
for (const waiter of waiters)
|
|
113
|
+
waiter();
|
|
114
|
+
}
|
|
115
|
+
async *drain() {
|
|
116
|
+
for (;;) {
|
|
117
|
+
while (this.chunks.length > 0) {
|
|
118
|
+
yield this.chunks.shift();
|
|
119
|
+
}
|
|
120
|
+
if (this.finished) {
|
|
121
|
+
if (this.failure)
|
|
122
|
+
throw this.failure;
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
await new Promise(resolve => this.waiters.push(resolve));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function parseClaudeLine(line, queue, state) {
|
|
130
|
+
const event = JSON.parse(line);
|
|
131
|
+
if (event.type === 'system' && event.subtype === 'init') {
|
|
132
|
+
if (typeof event.session_id === 'string') {
|
|
133
|
+
state.agentSessionId = event.session_id;
|
|
134
|
+
}
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (event.type === 'stream_event') {
|
|
138
|
+
const inner = event.event;
|
|
139
|
+
if (inner?.type === 'content_block_delta') {
|
|
140
|
+
if (inner.delta?.type === 'text_delta' && inner.delta.text) {
|
|
141
|
+
state.emittedContent = true;
|
|
142
|
+
queue.push({ type: 'content', content: inner.delta.text });
|
|
143
|
+
}
|
|
144
|
+
else if (inner.delta?.type === 'thinking_delta' &&
|
|
145
|
+
inner.delta.thinking) {
|
|
146
|
+
queue.push({ type: 'reasoning', content: inner.delta.thinking });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (event.type === 'result') {
|
|
152
|
+
if (event.is_error) {
|
|
153
|
+
const detail = typeof event.result === 'string' ? event.result : 'agent error';
|
|
154
|
+
throw new Error(`Claude Code failed: ${detail}`);
|
|
155
|
+
}
|
|
156
|
+
// Older CLIs without partial events still return the final text here.
|
|
157
|
+
if (!state.emittedContent && typeof event.result === 'string') {
|
|
158
|
+
state.emittedContent = true;
|
|
159
|
+
queue.push({ type: 'content', content: event.result });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
function parseCodexLine(line, queue, state) {
|
|
164
|
+
const event = JSON.parse(line);
|
|
165
|
+
if (event.type === 'thread.started' && typeof event.thread_id === 'string') {
|
|
166
|
+
state.agentSessionId = event.thread_id;
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (event.type === 'item.completed') {
|
|
170
|
+
const item = event.item;
|
|
171
|
+
if (item?.type === 'agent_message' && item.text) {
|
|
172
|
+
state.emittedContent = true;
|
|
173
|
+
queue.push({ type: 'content', content: item.text });
|
|
174
|
+
}
|
|
175
|
+
else if (item?.type === 'reasoning' && item.text) {
|
|
176
|
+
queue.push({ type: 'reasoning', content: item.text });
|
|
177
|
+
}
|
|
178
|
+
else if (item?.type === 'error' && (item.message || item.text)) {
|
|
179
|
+
// Codex reports non-fatal warnings as error items; only surface them if
|
|
180
|
+
// the run produces no answer at all.
|
|
181
|
+
state.itemErrors.push(item.message || item.text || 'unknown error');
|
|
182
|
+
}
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (event.type === 'turn.failed') {
|
|
186
|
+
const error = event.error;
|
|
187
|
+
throw new Error(`Codex failed: ${error?.message || 'turn failed'}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
export class AgentCliService {
|
|
191
|
+
listAgentModels() {
|
|
192
|
+
if (!agentsEnabled())
|
|
193
|
+
return [];
|
|
194
|
+
const models = [];
|
|
195
|
+
for (const definition of AGENT_CLI_DEFINITIONS) {
|
|
196
|
+
const binaryPath = resolveBinary(definition.command);
|
|
197
|
+
if (binaryPath) {
|
|
198
|
+
models.push({
|
|
199
|
+
id: definition.id,
|
|
200
|
+
name: definition.name,
|
|
201
|
+
command: definition.command,
|
|
202
|
+
binaryPath,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return models;
|
|
207
|
+
}
|
|
208
|
+
isAdminUser(userId) {
|
|
209
|
+
const user = userModel.getUserById(userId);
|
|
210
|
+
return user?.role === 'admin';
|
|
211
|
+
}
|
|
212
|
+
assertAgentAccess(userId) {
|
|
213
|
+
if (!agentsEnabled()) {
|
|
214
|
+
throw new Error('Agent CLI models are disabled on this server.');
|
|
215
|
+
}
|
|
216
|
+
if (!this.isAdminUser(userId)) {
|
|
217
|
+
throw new Error('Agent CLI models require an admin account.');
|
|
218
|
+
}
|
|
219
|
+
return AGENT_CLI_DEFINITIONS;
|
|
220
|
+
}
|
|
221
|
+
executeAgentStreamRequest(agentId, messages, userId, options = {}) {
|
|
222
|
+
this.assertAgentAccess(userId);
|
|
223
|
+
const definition = AGENT_CLI_DEFINITIONS.find(candidate => candidate.id === agentId);
|
|
224
|
+
if (!definition) {
|
|
225
|
+
throw new Error(`Unknown agent CLI "${agentId}".`);
|
|
226
|
+
}
|
|
227
|
+
const binaryPath = resolveBinary(definition.command);
|
|
228
|
+
if (!binaryPath) {
|
|
229
|
+
throw new Error(`The "${definition.command}" CLI is not installed on this server.`);
|
|
230
|
+
}
|
|
231
|
+
const cwd = options.cwd && fs.existsSync(options.cwd) ? options.cwd : os.homedir();
|
|
232
|
+
const prompt = buildAgentPrompt(messages);
|
|
233
|
+
const queue = new ChunkQueue();
|
|
234
|
+
const state = { emittedContent: false, itemErrors: [] };
|
|
235
|
+
const parseLine = definition.parser === 'claude' ? parseClaudeLine : parseCodexLine;
|
|
236
|
+
logger.info(`Spawning agent CLI ${definition.id} (${binaryPath}) in ${cwd} for user ${userId}`);
|
|
237
|
+
const child = spawn(binaryPath, definition.buildArgs(), {
|
|
238
|
+
cwd,
|
|
239
|
+
env: process.env,
|
|
240
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
241
|
+
});
|
|
242
|
+
let stdoutBuffer = '';
|
|
243
|
+
let stderrBuffer = '';
|
|
244
|
+
let totalChars = 0;
|
|
245
|
+
let settled = false;
|
|
246
|
+
const timeout = setTimeout(() => {
|
|
247
|
+
fail(new Error(`Agent CLI timed out after ${AGENT_TIMEOUT_MS}ms.`));
|
|
248
|
+
child.kill('SIGKILL');
|
|
249
|
+
}, AGENT_TIMEOUT_MS);
|
|
250
|
+
const fail = (error) => {
|
|
251
|
+
if (settled)
|
|
252
|
+
return;
|
|
253
|
+
settled = true;
|
|
254
|
+
clearTimeout(timeout);
|
|
255
|
+
queue.finish(error);
|
|
256
|
+
};
|
|
257
|
+
const succeed = () => {
|
|
258
|
+
if (settled)
|
|
259
|
+
return;
|
|
260
|
+
settled = true;
|
|
261
|
+
clearTimeout(timeout);
|
|
262
|
+
const metadata = { agentCli: definition.id };
|
|
263
|
+
if (state.agentSessionId) {
|
|
264
|
+
metadata.agentSessionId = state.agentSessionId;
|
|
265
|
+
}
|
|
266
|
+
queue.push({ type: 'done', providerMetadata: metadata });
|
|
267
|
+
queue.finish();
|
|
268
|
+
};
|
|
269
|
+
const handleLine = (line) => {
|
|
270
|
+
const trimmed = line.trim();
|
|
271
|
+
if (!trimmed.startsWith('{'))
|
|
272
|
+
return;
|
|
273
|
+
try {
|
|
274
|
+
parseLine(trimmed, queue, state);
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
if (error instanceof SyntaxError)
|
|
278
|
+
return; // partial/non-JSON line
|
|
279
|
+
fail(error instanceof Error ? error : new Error(String(error)));
|
|
280
|
+
child.kill('SIGKILL');
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
child.stdout.on('data', (data) => {
|
|
284
|
+
totalChars += data.length;
|
|
285
|
+
if (totalChars > MAX_OUTPUT_CHARS) {
|
|
286
|
+
fail(new Error('Agent CLI output exceeded the size limit.'));
|
|
287
|
+
child.kill('SIGKILL');
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
stdoutBuffer += data.toString();
|
|
291
|
+
let newlineIndex = stdoutBuffer.indexOf('\n');
|
|
292
|
+
while (newlineIndex !== -1) {
|
|
293
|
+
handleLine(stdoutBuffer.slice(0, newlineIndex));
|
|
294
|
+
stdoutBuffer = stdoutBuffer.slice(newlineIndex + 1);
|
|
295
|
+
newlineIndex = stdoutBuffer.indexOf('\n');
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
child.stderr.on('data', (data) => {
|
|
299
|
+
if (stderrBuffer.length < MAX_STDERR_CHARS) {
|
|
300
|
+
stderrBuffer += data.toString().slice(0, MAX_STDERR_CHARS);
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
child.on('error', error => {
|
|
304
|
+
fail(new Error(`Failed to start ${definition.command}: ${error.message}`));
|
|
305
|
+
});
|
|
306
|
+
child.on('close', code => {
|
|
307
|
+
if (stdoutBuffer)
|
|
308
|
+
handleLine(stdoutBuffer);
|
|
309
|
+
if (settled)
|
|
310
|
+
return;
|
|
311
|
+
if (state.emittedContent) {
|
|
312
|
+
succeed();
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
const detail = state.itemErrors[0] || stderrBuffer.trim() || `exit code ${code}`;
|
|
316
|
+
fail(new Error(`${definition.name} produced no reply (${detail}).`));
|
|
317
|
+
});
|
|
318
|
+
child.stdin.on('error', () => {
|
|
319
|
+
// The CLI may exit before consuming the prompt; close handles reporting.
|
|
320
|
+
});
|
|
321
|
+
child.stdin.write(prompt);
|
|
322
|
+
child.stdin.end();
|
|
323
|
+
return queue.drain();
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
const agentCliService = new AgentCliService();
|
|
327
|
+
export default agentCliService;
|
|
328
|
+
//# sourceMappingURL=agentCliService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentCliService.js","sourceRoot":"","sources":["../../src/services/agentCliService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;AAoBzC,MAAM,qBAAqB,GAAyB;IAClD;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,QAAQ;QAChB,2EAA2E;QAC3E,SAAS,EAAE,GAAG,EAAE,CAAC;YACf,IAAI;YACJ,iBAAiB;YACjB,aAAa;YACb,WAAW;YACX,4BAA4B;SAC7B;KACF;IACD;QACE,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;QAChB,MAAM,EAAE,OAAO;QACf,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,uBAAuB,EAAE,GAAG,CAAC;KAClE;CACF,CAAC;AAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAC/B,KAAM,EACN,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,QAAQ,EAAE,EAAE,CAAC,IAAI,MAAO,CACtE,CAAC;AACF,MAAM,gBAAgB,GAAG,OAAS,CAAC;AACnC,MAAM,gBAAgB,GAAG,IAAK,CAAC;AAC/B,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,MAAM,aAAa,GAAG,GAAY,EAAE,CAClC,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,OAAO,CAAC;AAEnD,SAAS,aAAa,CAAC,OAAe;IACpC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,IAAyB;IAC1C,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,WAAW,CAAC;IAC7C,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACvC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgC;IAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,OAAO;SACvB,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;SAChE,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,OAAO;QACL,iFAAiF;QACjF,EAAE;QACF,UAAU;QACV,EAAE;QACF,oFAAoF;KACrF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU;IAAhB;QACU,WAAM,GAAwB,EAAE,CAAC;QACjC,YAAO,GAAsB,EAAE,CAAC;QAChC,aAAQ,GAAG,KAAK,CAAC;QACjB,YAAO,GAAiB,IAAI,CAAC;IAiCvC,CAAC;IA/BC,IAAI,CAAC,KAAwB;QAC3B,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,IAAI;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,MAAM,IAAI,OAAO;YAAE,MAAM,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,CAAC,KAAK;QACV,SAAS,CAAC;YACR,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAuB,CAAC;YACjD,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,IAAI,CAAC,OAAO;oBAAE,MAAM,IAAI,CAAC,OAAO,CAAC;gBACrC,OAAO;YACT,CAAC;YACD,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;CACF;AAQD,SAAS,eAAe,CACtB,IAAY,EACZ,KAAiB,EACjB,KAAkB;IAElB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;IAC1D,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QACxD,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACzC,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC;QAC1C,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAKP,CAAC;QACd,IAAI,KAAK,EAAE,IAAI,KAAK,qBAAqB,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC3D,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC;iBAAM,IACL,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,gBAAgB;gBACtC,KAAK,CAAC,KAAK,CAAC,QAAQ,EACpB,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,MAAM,GACV,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,sEAAsE;QACtE,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC9D,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,IAAY,EACZ,KAAiB,EACjB,KAAkB;IAElB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;IAC1D,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3E,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC;QACvC,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAC6C,CAAC;QACjE,IAAI,IAAI,EAAE,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAChD,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,IAAI,EAAE,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;aAAM,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjE,wEAAwE;YACxE,qCAAqC;YACrC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,eAAe,CAAC,CAAC;QACtE,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAyC,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,MAAM,OAAO,eAAe;IAC1B,eAAe;QACb,IAAI,CAAC,aAAa,EAAE;YAAE,OAAO,EAAE,CAAC;QAChC,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,KAAK,MAAM,UAAU,IAAI,qBAAqB,EAAE,CAAC;YAC/C,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,UAAU,CAAC,EAAE;oBACjB,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,WAAW,CAAC,MAAc;QACxB,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;IAChC,CAAC;IAED,iBAAiB,CAAC,MAAc;QAC9B,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IAED,yBAAyB,CACvB,OAAe,EACf,QAAgC,EAChC,MAAc,EACd,UAA4B,EAAE;QAE9B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,CAC3C,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,OAAO,CACtC,CAAC;QACF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,IAAI,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,QAAQ,UAAU,CAAC,OAAO,wCAAwC,CACnE,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QACzE,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAgB,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QACrE,MAAM,SAAS,GACb,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;QAEpE,MAAM,CAAC,IAAI,CACT,sBAAsB,UAAU,CAAC,EAAE,KAAK,UAAU,QAAQ,GAAG,aAAa,MAAM,EAAE,CACnF,CAAC;QAEF,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,SAAS,EAAE,EAAE;YACtD,GAAG;YACH,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,IAAI,CAAC,IAAI,KAAK,CAAC,6BAA6B,gBAAgB,KAAK,CAAC,CAAC,CAAC;YACpE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAErB,MAAM,IAAI,GAAG,CAAC,KAAY,EAAE,EAAE;YAC5B,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM,QAAQ,GAA4B,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;YACtE,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBACzB,QAAQ,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;YACjD,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,CAAC;YACzD,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO;YACrC,IAAI,CAAC;gBACH,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,WAAW;oBAAE,OAAO,CAAC,wBAAwB;gBAClE,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAChE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACvC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC;YAC1B,IAAI,UAAU,GAAG,gBAAgB,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC,CAAC;gBAC7D,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9C,OAAO,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC3B,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;gBAChD,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBACpD,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACvC,IAAI,YAAY,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;gBAC3C,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YACxB,IAAI,CACF,IAAI,KAAK,CAAC,mBAAmB,UAAU,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CACrE,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YACvB,IAAI,YAAY;gBAAE,UAAU,CAAC,YAAY,CAAC,CAAC;YAC3C,IAAI,OAAO;gBAAE,OAAO;YACpB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GACV,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,aAAa,IAAI,EAAE,CAAC;YACpE,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,UAAU,CAAC,IAAI,uBAAuB,MAAM,IAAI,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC3B,yEAAyE;QAC3E,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAElB,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF;AAED,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAC9C,eAAe,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatGenerationService.d.ts","sourceRoot":"","sources":["../../src/services/chatGenerationService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chatGenerationService.d.ts","sourceRoot":"","sources":["../../src/services/chatGenerationService.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,EACN,cAAc,EACf,MAAM,mBAAmB,CAAC;AAM3B,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,iBAAiB,CAAC;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IAC3D,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,gBAAgB,CAAC;IACzB,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB;AAED,cAAM,qBAAqB;IACnB,sBAAsB,CAC1B,YAAY,EAAE,MAAM,EACpB,MAAM,GAAE,MAAkB,GACzB,OAAO,CAAC,MAAM,CAAC;IA2BlB,YAAY,CAAC,OAAO,GAAE,iBAAsB,GAAG,iBAAiB;IAO1D,uBAAuB,CAC3B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,iBAAsB,EAC/B,iBAAiB,CAAC,EAAE,qBAAqB,GACxC,OAAO,CAAC,gBAAgB,CAAC;IA4B5B,6BAA6B,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM;IAI/D,wBAAwB,CACtB,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACzC,kBAAkB;IAaf,mBAAmB,CAAC,EACxB,MAAM,EACN,cAAc,EACd,cAAc,EACd,MAAM,EACN,oBAAiC,GAClC,EAAE,4BAA4B,GAAG,OAAO,CAAC,2BAA2B,CAAC;CA2FvE;;AAED,wBAA2C"}
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
import { mergeGenerationOptions } from '../utils/generationUtils.js';
|
|
18
18
|
import { OPENAI_RESPONSES_INCOMPLETE_REASON_METADATA_KEY } from '../utils/openAIResponsesAdapter.js';
|
|
19
19
|
import { extractPluginAssistantContent } from '../utils/pluginResponse.js';
|
|
20
|
+
import agentCliService from './agentCliService.js';
|
|
20
21
|
import ollamaService from './ollamaService.js';
|
|
21
22
|
import { personaService } from './personaService.js';
|
|
22
23
|
import pluginService from './pluginService.js';
|
|
@@ -53,7 +54,7 @@ class ChatGenerationService {
|
|
|
53
54
|
const actualModelName = await this.resolveActualModelName(sessionModel, userId);
|
|
54
55
|
const mergedOptions = this.mergeOptions(options);
|
|
55
56
|
const provider = normalizeChatProviderSelection(providerSelection);
|
|
56
|
-
const activePlugin = provider?.providerType === 'ollama'
|
|
57
|
+
const activePlugin = provider?.providerType === 'ollama' || provider?.providerType === 'agent'
|
|
57
58
|
? null
|
|
58
59
|
: pluginService.getActivePluginForModel(actualModelName, userId, provider?.providerId);
|
|
59
60
|
const pluginVariables = activePlugin
|
|
@@ -89,6 +90,23 @@ class ChatGenerationService {
|
|
|
89
90
|
stream: false,
|
|
90
91
|
options: target.mergedOptions,
|
|
91
92
|
};
|
|
93
|
+
if (target.providerType === 'agent' && target.providerId) {
|
|
94
|
+
let assistantContent = '';
|
|
95
|
+
let providerMetadata;
|
|
96
|
+
for await (const chunk of agentCliService.executeAgentStreamRequest(target.providerId, pluginMessages, userId)) {
|
|
97
|
+
if (chunk.type === 'content' && chunk.content) {
|
|
98
|
+
assistantContent += chunk.content;
|
|
99
|
+
}
|
|
100
|
+
else if (chunk.type === 'done' && chunk.providerMetadata) {
|
|
101
|
+
providerMetadata = chunk.providerMetadata;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
response: this.createPluginChatResponse(target.actualModelName, assistantContent, providerMetadata),
|
|
106
|
+
assistantContent,
|
|
107
|
+
source: 'plugin',
|
|
108
|
+
};
|
|
109
|
+
}
|
|
92
110
|
if (target.activePlugin) {
|
|
93
111
|
try {
|
|
94
112
|
const pluginResponse = await pluginService.executePluginRequest(target.actualModelName, pluginMessages, target.mergedOptions, userId, target.activePlugin.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatGenerationService.js","sourceRoot":"","sources":["../../src/services/chatGenerationService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,+CAA+C,EAAE,MAAM,oCAAoC,CAAC;AACrG,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AAWzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,8BAA8B,EAAE,MAAM,mCAAmC,CAAC;AAEnF,MAAM,MAAM,GAAG,YAAY,CAAC,kCAAkC,CAAC,CAAC;AA4BhE,MAAM,qBAAqB;IACzB,KAAK,CAAC,sBAAsB,CAC1B,YAAoB,EACpB,SAAiB,SAAS;QAE1B,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACzC,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAEvD,IAAI,OAAO,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACrE,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACrC,OAAO,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACtE,CAAC;YAED,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;gBACnB,OAAO,OAAO,CAAC,KAAK,CAAC;YACvB,CAAC;YAED,MAAM,CAAC,IAAI,CACT,WAAW,SAAS,2CAA2C,CAChE,CAAC;YACF,OAAO,YAAY,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACtD,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAED,YAAY,CAAC,UAA6B,EAAE;QAC1C,OAAO,sBAAsB,CAC3B,kBAAkB,CAAC,oBAAoB,EAAE,EACzC,OAAO,CACR,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,YAAoB,EACpB,MAAc,EACd,UAA6B,EAAE,EAC/B,iBAAyC;QAEzC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,sBAAsB,CACvD,YAAY,EACZ,MAAM,CACP,CAAC;QACF,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,8BAA8B,CAAC,iBAAiB,CAAC,CAAC;QACnE,MAAM,YAAY,GAChB,QAAQ,EAAE,YAAY,KAAK,QAAQ;
|
|
1
|
+
{"version":3,"file":"chatGenerationService.js","sourceRoot":"","sources":["../../src/services/chatGenerationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@ export const WORK_AGENT_SKILLS = [
|
|
|
39
39
|
instructions: [
|
|
40
40
|
'Continue through implementation and verification; do not stop after only describing a plan.',
|
|
41
41
|
'Search for the relevant symbols before broad reads. Do not repeatedly list, search, or read unchanged content.',
|
|
42
|
-
'Use write_file for a new file or an intentional complete replacement. Keep run_command non-interactive and narrowly scoped.',
|
|
42
|
+
'Use write_file for a new file or an intentional complete replacement. Use delete_file and move_file to remove or reorganize paths instead of shell rm or mv; they stay inside the workspace and also work while a preview is running. Keep run_command non-interactive and narrowly scoped.',
|
|
43
43
|
`Keep each write_file payload below ${WORK_WRITE_FILE_RECOMMENDED_CHARS.toLocaleString('en-US')} characters. Split larger implementations into focused modules or files before writing so the provider cannot truncate the tool arguments.`,
|
|
44
44
|
'Group independent operations into one model response and use one focused command when it can safely replace several serial tool calls.',
|
|
45
45
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workAgentGuidance.js","sourceRoot":"","sources":["../../src/services/workAgentGuidance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAgBH,MAAM,sBAAsB,GAAG,MAAO,CAAC;AACvC,MAAM,mBAAmB,GAAG,OAAS,CAAC;AACtC,MAAM,CAAC,MAAM,iCAAiC,GAAG,IAAK,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA8B;IAC1D;QACE,EAAE,EAAE,qBAAqB;QACzB,KAAK,EAAE,qBAAqB;QAC5B,YAAY,EAAE;YACZ,qJAAqJ;YACrJ,uLAAuL;YACvL,kKAAkK;SACnK;KACF;IACD;QACE,EAAE,EAAE,wBAAwB;QAC5B,KAAK,EAAE,wBAAwB;QAC/B,YAAY,EAAE;YACZ,6FAA6F;YAC7F,gHAAgH;YAChH,
|
|
1
|
+
{"version":3,"file":"workAgentGuidance.js","sourceRoot":"","sources":["../../src/services/workAgentGuidance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workAgentService.d.ts","sourceRoot":"","sources":["../../src/services/workAgentService.ts"],"names":[],"mappings":"AAmCA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EACL,WAAW,EACX,OAAO,EACP,cAAc,EAEd,YAAY,EACb,MAAM,kBAAkB,CAAC;AAU1B,eAAO,MAAM,gCAAgC,sBAAsB,CAAC;AAEpE,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"workAgentService.d.ts","sourceRoot":"","sources":["../../src/services/workAgentService.ts"],"names":[],"mappings":"AAmCA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EACL,WAAW,EACX,OAAO,EACP,cAAc,EAEd,YAAY,EACb,MAAM,kBAAkB,CAAC;AAU1B,eAAO,MAAM,gCAAgC,sBAAsB,CAAC;AAEpE,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EA8EtD,CAAC;AAEF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,UAAU,CAAoC;IAEtD,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAepD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAK/D,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAIjD,UAAU;IA2BlB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAajD,uBAAuB,CAAC,CAAC,EAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC,CAAC,CAAC;IAqEb,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;YAI7B,kBAAkB;IA2B1B,QAAQ,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;YAgBhD,OAAO;YAojBP,yBAAyB;IA6BvC,OAAO,CAAC,2BAA2B;IAsBnC,OAAO,CAAC,eAAe;YA0BT,WAAW;IAgHzB,OAAO,CAAC,gBAAgB;CAYzB;AA+CD,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAM1D;AA8CD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,WAAW,EAAE,EACvB,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,YAAY,GAAG,OAAO,CAAC,EAChE,kBAAkB,CAAC,EAAE,MAAM,GAC1B,iBAAiB,EAAE,CAkKrB;AA4ED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,kBAAkB,GAC3B,YAAY,EAAE,CA+GhB;AAwLD,eAAO,MAAM,gBAAgB,kBAAyB,CAAC;AACvD,eAAe,gBAAgB,CAAC"}
|
|
@@ -32,6 +32,17 @@ export const WORK_TOOL_SCHEMAS = [
|
|
|
32
32
|
path: stringProperty('Relative file path.'),
|
|
33
33
|
content: stringProperty(`Complete file content. Keep one write below ${WORK_WRITE_FILE_RECOMMENDED_CHARS.toLocaleString('en-US')} characters and split larger implementations into focused files.`),
|
|
34
34
|
}, ['path', 'content']),
|
|
35
|
+
functionTool('delete_file', 'Delete a workspace file or directory. Directories require recursive: true. Works while a preview is running.', {
|
|
36
|
+
path: stringProperty('Relative file or directory path.'),
|
|
37
|
+
recursive: {
|
|
38
|
+
type: 'boolean',
|
|
39
|
+
description: 'Required as true to delete a directory with its contents.',
|
|
40
|
+
},
|
|
41
|
+
}, ['path']),
|
|
42
|
+
functionTool('move_file', 'Move or rename a workspace file or directory. Destination parents are created; an existing destination is never overwritten. Works while a preview is running.', {
|
|
43
|
+
from: stringProperty('Relative source path.'),
|
|
44
|
+
to: stringProperty('Relative destination path.'),
|
|
45
|
+
}, ['from', 'to']),
|
|
35
46
|
functionTool('search_files', 'Search text recursively in workspace files.', {
|
|
36
47
|
query: stringProperty('Literal text to find.'),
|
|
37
48
|
path: stringProperty('Relative directory path. Defaults to workspace root.'),
|
|
@@ -686,6 +697,20 @@ export class WorkAgentService {
|
|
|
686
697
|
metadata: { path: result.path, size: result.size },
|
|
687
698
|
};
|
|
688
699
|
}
|
|
700
|
+
case 'delete_file': {
|
|
701
|
+
const result = await workRuntimeService.deletePath(task, requiredString(args.path, 'path'), args.recursive === true);
|
|
702
|
+
return {
|
|
703
|
+
content: `Deleted ${result.type} ${result.path}.`,
|
|
704
|
+
metadata: { path: result.path, type: result.type },
|
|
705
|
+
};
|
|
706
|
+
}
|
|
707
|
+
case 'move_file': {
|
|
708
|
+
const result = await workRuntimeService.movePath(task, requiredString(args.from, 'from'), requiredString(args.to, 'to'));
|
|
709
|
+
return {
|
|
710
|
+
content: `Moved ${result.from} to ${result.to}.`,
|
|
711
|
+
metadata: { from: result.from, to: result.to },
|
|
712
|
+
};
|
|
713
|
+
}
|
|
689
714
|
case 'search_files': {
|
|
690
715
|
const result = await workRuntimeService.searchFiles(task, requiredString(args.query, 'query'), optionalString(args.path) || '.');
|
|
691
716
|
return commandResult(result);
|
|
@@ -1113,9 +1138,12 @@ function validateToolCallArguments(call) {
|
|
|
1113
1138
|
case 'stop_preview':
|
|
1114
1139
|
return undefined;
|
|
1115
1140
|
case 'read_file':
|
|
1141
|
+
case 'delete_file':
|
|
1116
1142
|
return invalidRequiredString('path');
|
|
1117
1143
|
case 'write_file':
|
|
1118
1144
|
return (invalidRequiredString('path') || invalidRequiredString('content', true));
|
|
1145
|
+
case 'move_file':
|
|
1146
|
+
return invalidRequiredString('from') || invalidRequiredString('to');
|
|
1119
1147
|
case 'search_files':
|
|
1120
1148
|
return invalidRequiredString('query');
|
|
1121
1149
|
case 'run_command':
|
|
@@ -1151,6 +1179,15 @@ function summarizeToolCall(call) {
|
|
|
1151
1179
|
case 'list_files':
|
|
1152
1180
|
includeString('path', args.path);
|
|
1153
1181
|
break;
|
|
1182
|
+
case 'delete_file':
|
|
1183
|
+
includeString('path', args.path);
|
|
1184
|
+
if (args.recursive === true)
|
|
1185
|
+
metadata.recursive = true;
|
|
1186
|
+
break;
|
|
1187
|
+
case 'move_file':
|
|
1188
|
+
includeString('from', args.from);
|
|
1189
|
+
includeString('to', args.to);
|
|
1190
|
+
break;
|
|
1154
1191
|
case 'search_files':
|
|
1155
1192
|
includeString('path', args.path);
|
|
1156
1193
|
includeString('query', args.query, 500);
|