libre-webui 0.16.0 → 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.
Files changed (167) hide show
  1. package/README.md +237 -149
  2. package/backend/dist/db.d.ts.map +1 -1
  3. package/backend/dist/db.js +5 -0
  4. package/backend/dist/db.js.map +1 -1
  5. package/backend/dist/index.d.ts.map +1 -1
  6. package/backend/dist/index.js +2 -0
  7. package/backend/dist/index.js.map +1 -1
  8. package/backend/dist/routes/agentCli.d.ts +3 -0
  9. package/backend/dist/routes/agentCli.d.ts.map +1 -0
  10. package/backend/dist/routes/agentCli.js +33 -0
  11. package/backend/dist/routes/agentCli.js.map +1 -0
  12. package/backend/dist/routes/chat.d.ts.map +1 -1
  13. package/backend/dist/routes/chat.js +27 -0
  14. package/backend/dist/routes/chat.js.map +1 -1
  15. package/backend/dist/routes/plugins.d.ts.map +1 -1
  16. package/backend/dist/routes/plugins.js +10 -3
  17. package/backend/dist/routes/plugins.js.map +1 -1
  18. package/backend/dist/routes/work.d.ts.map +1 -1
  19. package/backend/dist/routes/work.js +25 -3
  20. package/backend/dist/routes/work.js.map +1 -1
  21. package/backend/dist/services/agentCliService.d.ts +30 -0
  22. package/backend/dist/services/agentCliService.d.ts.map +1 -0
  23. package/backend/dist/services/agentCliService.js +328 -0
  24. package/backend/dist/services/agentCliService.js.map +1 -0
  25. package/backend/dist/services/chatGenerationService.d.ts.map +1 -1
  26. package/backend/dist/services/chatGenerationService.js +19 -1
  27. package/backend/dist/services/chatGenerationService.js.map +1 -1
  28. package/backend/dist/services/pluginService.d.ts +42 -1
  29. package/backend/dist/services/pluginService.d.ts.map +1 -1
  30. package/backend/dist/services/pluginService.js +143 -12
  31. package/backend/dist/services/pluginService.js.map +1 -1
  32. package/backend/dist/services/workAgentGuidance.js +1 -1
  33. package/backend/dist/services/workAgentGuidance.js.map +1 -1
  34. package/backend/dist/services/workAgentService.d.ts.map +1 -1
  35. package/backend/dist/services/workAgentService.js +37 -0
  36. package/backend/dist/services/workAgentService.js.map +1 -1
  37. package/backend/dist/services/workHostWorkspaceService.d.ts +22 -0
  38. package/backend/dist/services/workHostWorkspaceService.d.ts.map +1 -0
  39. package/backend/dist/services/workHostWorkspaceService.js +136 -0
  40. package/backend/dist/services/workHostWorkspaceService.js.map +1 -0
  41. package/backend/dist/services/workRuntimeService.d.ts +61 -3
  42. package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
  43. package/backend/dist/services/workRuntimeService.js +311 -17
  44. package/backend/dist/services/workRuntimeService.js.map +1 -1
  45. package/backend/dist/services/workTaskService.d.ts +3 -3
  46. package/backend/dist/services/workTaskService.d.ts.map +1 -1
  47. package/backend/dist/services/workTaskService.js +10 -6
  48. package/backend/dist/services/workTaskService.js.map +1 -1
  49. package/backend/dist/services/workTerminalService.d.ts +46 -0
  50. package/backend/dist/services/workTerminalService.d.ts.map +1 -0
  51. package/backend/dist/services/workTerminalService.js +241 -0
  52. package/backend/dist/services/workTerminalService.js.map +1 -0
  53. package/backend/dist/types/index.d.ts +1 -1
  54. package/backend/dist/types/index.d.ts.map +1 -1
  55. package/backend/dist/types/work.d.ts +22 -0
  56. package/backend/dist/types/work.d.ts.map +1 -1
  57. package/backend/dist/utils/chatProviderSelection.d.ts.map +1 -1
  58. package/backend/dist/utils/chatProviderSelection.js +7 -5
  59. package/backend/dist/utils/chatProviderSelection.js.map +1 -1
  60. package/backend/dist/websocketServer.d.ts.map +1 -1
  61. package/backend/dist/websocketServer.js +51 -14
  62. package/backend/dist/websocketServer.js.map +1 -1
  63. package/backend/dist/workTerminalServer.d.ts +17 -0
  64. package/backend/dist/workTerminalServer.d.ts.map +1 -0
  65. package/backend/dist/workTerminalServer.js +224 -0
  66. package/backend/dist/workTerminalServer.js.map +1 -0
  67. package/backend/package.json +1 -1
  68. package/frontend/dist/assets/index-BqI0kezz.css +1 -0
  69. package/frontend/dist/assets/index-CRC6g6bL.js +3 -0
  70. package/frontend/dist/assets/xterm-CmMoOwwu.css +1 -0
  71. package/frontend/dist/index.html +8 -6
  72. package/frontend/dist/js/ArtifactContainer-Cdy-973y.js +1 -0
  73. package/frontend/dist/js/{ArtifactDemoPage-DBVPHFxk.js → ArtifactDemoPage-B4qsvUnF.js} +1 -1
  74. package/frontend/dist/js/ArtifactSlideOutPanel-CmKgQ4eD.js +1 -0
  75. package/frontend/dist/js/{Button-DBk-AREB.js → Button-CRwzOaDZ.js} +1 -1
  76. package/frontend/dist/js/ChatPage-CYT69oBR.js +16 -0
  77. package/frontend/dist/js/FirstTimeSetup-C8LdLP5J.js +1 -0
  78. package/frontend/dist/js/GalleryPage-Bm89pnS8.js +1 -0
  79. package/frontend/dist/js/HomePage-CeCYnMUG.js +1 -0
  80. package/frontend/dist/js/{LibreClawPage-qGr1Jy8p.js → LibreClawPage-DGMEV6dm.js} +1 -1
  81. package/frontend/dist/js/{ModelManagerModals-DltRprHU.js → ModelManagerModals-DMoEav1l.js} +1 -1
  82. package/frontend/dist/js/ModelSelector-DXPdGdQ_.js +1 -0
  83. package/frontend/dist/js/ModelsPage-D-FIy2x-.js +2 -0
  84. package/frontend/dist/js/PersonasPage-CIrEVFo5.js +13 -0
  85. package/frontend/dist/js/RichMessageContent-BJ49VN9j.js +3 -0
  86. package/frontend/dist/js/SettingsModal-CxtOXPY7.js +1 -0
  87. package/frontend/dist/js/UserManagementPage-BfyYGGFQ.js +1 -0
  88. package/frontend/dist/js/WorkPage-C7bW6Hxx.js +4 -0
  89. package/frontend/dist/js/addon-fit-Cj0_dfHF.js +1 -0
  90. package/frontend/dist/js/api-DCD41-l9.js +19 -0
  91. package/frontend/dist/js/appStore-Bw-8Exsx.js +2 -0
  92. package/frontend/dist/js/ar-BAHlIvy0.js +2 -0
  93. package/frontend/dist/js/authStore-mOYH_AXI.js +4 -0
  94. package/frontend/dist/js/bn-BxquDVbd.js +2 -0
  95. package/frontend/dist/js/{cs-6UKhKj0A.js → cs-C4DoKzRm.js} +2 -2
  96. package/frontend/dist/js/da-CFslpGTw.js +2 -0
  97. package/frontend/dist/js/de-ChudoRh2.js +2 -0
  98. package/frontend/dist/js/es-B36fefE-.js +2 -0
  99. package/frontend/dist/js/{estree-PDLT672k.js → estree-0vwU39qX.js} +1 -1
  100. package/frontend/dist/js/fr-BSVeTM5W.js +2 -0
  101. package/frontend/dist/js/hi-BGoFbl5V.js +2 -0
  102. package/frontend/dist/js/{html-CkhF9wDQ.js → html-CApr2Bvi.js} +1 -1
  103. package/frontend/dist/js/id-BfYs2p_j.js +2 -0
  104. package/frontend/dist/js/{is-BWSbAIoq.js → is-DZ1MS-5A.js} +2 -2
  105. package/frontend/dist/js/it-CXtrPCG1.js +2 -0
  106. package/frontend/dist/js/ja-FPJ_NK_y.js +2 -0
  107. package/frontend/dist/js/ko-DVwD4ZZF.js +2 -0
  108. package/frontend/dist/js/{markdown-B1iNUbse.js → markdown-C78Qc6xu.js} +1 -1
  109. package/frontend/dist/js/ms-PKPP0RX3.js +2 -0
  110. package/frontend/dist/js/nl-DWM5HJZ8.js +2 -0
  111. package/frontend/dist/js/pl-B9va8Tuf.js +2 -0
  112. package/frontend/dist/js/pt-P0IQi-Zr.js +2 -0
  113. package/frontend/dist/js/ru-Ca2bxYnc.js +2 -0
  114. package/frontend/dist/js/{standalone-CCd6rkf-.js → standalone-DmLfI4Qj.js} +1 -1
  115. package/frontend/dist/js/sv-DI4RDwyZ.js +2 -0
  116. package/frontend/dist/js/th-DN0bDS9d.js +2 -0
  117. package/frontend/dist/js/tr-ChqMv5Q4.js +2 -0
  118. package/frontend/dist/js/{typescript-DKJ1uM5L.js → typescript-Bcq62agC.js} +1 -1
  119. package/frontend/dist/js/{ui-vendor-CAFEDSaO.js → ui-vendor-DohPFHDW.js} +1 -1
  120. package/frontend/dist/js/uk-Cr51h_XQ.js +2 -0
  121. package/frontend/dist/js/useBaseQuery-BAOlhjar.js +1 -0
  122. package/frontend/dist/js/useQuery-CcRqxveh.js +1 -0
  123. package/frontend/dist/js/utils-DmZD5uA3.js +1 -0
  124. package/frontend/dist/js/{vi-82JkwFsQ.js → vi-D4OhoVMH.js} +2 -2
  125. package/frontend/dist/js/work-DVgm81bJ.js +1 -0
  126. package/frontend/dist/js/xterm-DKl1QLiw.js +7 -0
  127. package/frontend/dist/js/zh-Bvau7hlR.js +2 -0
  128. package/package.json +3 -3
  129. package/frontend/dist/assets/index-CKV9Lnj8.js +0 -5
  130. package/frontend/dist/assets/index-Dme2Ozol.css +0 -1
  131. package/frontend/dist/js/ArtifactContainer-B0uVR8Z9.js +0 -1
  132. package/frontend/dist/js/ArtifactSlideOutPanel-Cg5kAwv9.js +0 -1
  133. package/frontend/dist/js/ChatPage-CPHlIZqU.js +0 -16
  134. package/frontend/dist/js/FirstTimeSetup-DksL5arK.js +0 -1
  135. package/frontend/dist/js/GalleryPage-1mdUGo_N.js +0 -1
  136. package/frontend/dist/js/ModelSelector-CUnwRmNU.js +0 -1
  137. package/frontend/dist/js/ModelsPage-DMYVg3LT.js +0 -2
  138. package/frontend/dist/js/PersonasPage-Ct-KKW-j.js +0 -13
  139. package/frontend/dist/js/RichMessageContent-CGBAcUES.js +0 -3
  140. package/frontend/dist/js/SettingsModal-BVj3gFCS.js +0 -1
  141. package/frontend/dist/js/UserManagementPage-D3tLGtTu.js +0 -1
  142. package/frontend/dist/js/WorkPage-DhTjy-kf.js +0 -2
  143. package/frontend/dist/js/api-YWoSobKv.js +0 -19
  144. package/frontend/dist/js/ar-KceI0PfT.js +0 -2
  145. package/frontend/dist/js/bn-DsKo2dzS.js +0 -2
  146. package/frontend/dist/js/da-CJgZ3YuL.js +0 -2
  147. package/frontend/dist/js/de-BZAmOuCT.js +0 -2
  148. package/frontend/dist/js/es-CD4u7no9.js +0 -2
  149. package/frontend/dist/js/fr-Cou2jOS3.js +0 -2
  150. package/frontend/dist/js/hi-ZxkbNCyB.js +0 -2
  151. package/frontend/dist/js/id-DT9CqaWQ.js +0 -2
  152. package/frontend/dist/js/it-CdNoTXm3.js +0 -2
  153. package/frontend/dist/js/ja-CIuQg0xv.js +0 -2
  154. package/frontend/dist/js/ko-BWRUjDOH.js +0 -2
  155. package/frontend/dist/js/ms-gJstIj2a.js +0 -2
  156. package/frontend/dist/js/nl-CydjVNUw.js +0 -2
  157. package/frontend/dist/js/pl-DPN9mAa5.js +0 -2
  158. package/frontend/dist/js/pt-MRXGqIjQ.js +0 -2
  159. package/frontend/dist/js/ru-CvQ9GkJF.js +0 -2
  160. package/frontend/dist/js/sv-BxS2fvhU.js +0 -2
  161. package/frontend/dist/js/th-DMxyn6e4.js +0 -2
  162. package/frontend/dist/js/tr-BTPldUaA.js +0 -2
  163. package/frontend/dist/js/uk-BGxZOKgp.js +0 -2
  164. package/frontend/dist/js/useBaseQuery-MuQj7vA5.js +0 -1
  165. package/frontend/dist/js/useQuery-CYGPkxWR.js +0 -1
  166. package/frontend/dist/js/utils-pTFqSV8c.js +0 -1
  167. package/frontend/dist/js/zh-Bxxfwci3.js +0 -2
@@ -0,0 +1,30 @@
1
+ import { ChatMessage } from '../types/index.js';
2
+ import { PluginStreamChunk } from '../utils/pluginStreaming.js';
3
+ export interface AgentCliDefinition {
4
+ /** Stable id used as providerId and model name, e.g. "claude-code". */
5
+ id: string;
6
+ /** Human-readable name shown in the model selector. */
7
+ name: string;
8
+ /** Binary looked up on PATH. */
9
+ command: string;
10
+ parser: 'claude' | 'codex';
11
+ buildArgs: () => string[];
12
+ }
13
+ export interface AgentCliModel {
14
+ id: string;
15
+ name: string;
16
+ command: string;
17
+ binaryPath: string;
18
+ }
19
+ export declare function buildAgentPrompt(messages: readonly ChatMessage[]): string;
20
+ export declare class AgentCliService {
21
+ listAgentModels(): AgentCliModel[];
22
+ isAdminUser(userId: string): boolean;
23
+ assertAgentAccess(userId: string): AgentCliDefinition[];
24
+ executeAgentStreamRequest(agentId: string, messages: readonly ChatMessage[], userId: string, options?: {
25
+ cwd?: string;
26
+ }): AsyncGenerator<PluginStreamChunk, void, unknown>;
27
+ }
28
+ declare const agentCliService: AgentCliService;
29
+ export default agentCliService;
30
+ //# sourceMappingURL=agentCliService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentCliService.d.ts","sourceRoot":"","sources":["../../src/services/agentCliService.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAMhE,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,SAAS,EAAE,MAAM,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AA0DD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,CAazE;AA6HD,qBAAa,eAAe;IAC1B,eAAe,IAAI,aAAa,EAAE;IAiBlC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAKpC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAUvD,yBAAyB,CACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAO,GAC7B,cAAc,CAAC,iBAAiB,EAAE,IAAI,EAAE,OAAO,CAAC;CA0HpD;AAED,QAAA,MAAM,eAAe,iBAAwB,CAAC;AAC9C,eAAe,eAAe,CAAC"}
@@ -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":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chatGenerationService.d.ts","sourceRoot":"","sources":["../../src/services/chatGenerationService.ts"],"names":[],"mappings":"AAwBA,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;CAkEvE;;AAED,wBAA2C"}
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":"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"}
1
+ {"version":3,"file":"chatGenerationService.js","sourceRoot":"","sources":["../../src/services/chatGenerationService.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,24 @@
1
1
  import { EmbeddingModel, OllamaEmbeddingsResponse, Plugin, PluginStatus, PluginResponse, ChatMessage, GenerationOptions, TTSConfig, ImageGenConfig, ImageGenResponse, PluginType } from '../types/index.js';
2
2
  import { type PluginStreamChunk } from '../utils/pluginStreamAdapter.js';
3
+ /**
4
+ * Why a refresh did or did not change the catalog. Reported to the caller so a
5
+ * silent fallback to the bundled catalog is never presented as a live update.
6
+ */
7
+ export type PluginModelDiscoveryOutcome = 'updated' | 'unchanged' | 'missing_credentials' | 'unavailable';
8
+ export interface PluginModelDiscoveryResult {
9
+ models: string[];
10
+ outcome: PluginModelDiscoveryOutcome;
11
+ reason?: string;
12
+ }
3
13
  export declare class PluginService {
4
14
  private pluginsDir;
5
15
  private bundledPluginsDir;
6
16
  private legacyPluginsDir;
7
17
  private pluginReadDirs;
8
18
  private discoveredModelsCache;
19
+ private discoveredModelsUpdatedAt;
20
+ private discoveryAttemptedAt;
21
+ private inflightDiscovery;
9
22
  private embeddingService;
10
23
  private ttsService;
11
24
  private imageGenerationService;
@@ -61,9 +74,37 @@ export declare class PluginService {
61
74
  /**
62
75
  * Attempt to auto-discover available models from a plugin's full API endpoint.
63
76
  * Resolves the provider's model-list endpoint and updates the plugin's model_map.
64
- * Falls back silently to the existing model_map if the endpoint is unavailable.
77
+ * Falls back to the existing model_map if the endpoint is unavailable; callers
78
+ * that need to tell a real update from a fallback use discoverModelsResult.
65
79
  */
66
80
  discoverModels(pluginId: string, userId?: string): Promise<string[]>;
81
+ /**
82
+ * Model discovery with the outcome attached, so a caller can report whether
83
+ * the provider was actually reached instead of assuming the returned catalog
84
+ * is fresh.
85
+ */
86
+ discoverModelsResult(pluginId: string, userId?: string): Promise<PluginModelDiscoveryResult>;
87
+ /**
88
+ * Whether a plugin's catalog should be re-fetched. Missing catalogs are due
89
+ * immediately; stored ones age out after the TTL. Both cases are gated by a
90
+ * per-plugin backoff so a failing provider is not probed on every request.
91
+ */
92
+ private isModelDiscoveryDue;
93
+ /**
94
+ * Re-discover models for every active completion plugin whose catalog is
95
+ * missing or stale. Bounded by a deadline so a slow provider cannot stall the
96
+ * plugin-list response; refreshes that outrun it still persist and surface on
97
+ * the next request.
98
+ */
99
+ refreshStaleModels(userId?: string): Promise<void>;
100
+ /**
101
+ * Say why no key was usable. An environment key is deliberately ignored for a
102
+ * provider whose definition was installed into the writable plugins directory,
103
+ * because that file can be edited to point the credential somewhere else — a
104
+ * silent "no API key" hides that distinction from whoever set the variable.
105
+ */
106
+ private describeMissingCredential;
107
+ private runModelDiscovery;
67
108
  getAllPlugins(userId?: string): Plugin[];
68
109
  getPlugin(id: string, userId?: string): Plugin | null;
69
110
  installPlugin(pluginData: Plugin, approvedByUserId: string): Plugin;
@@ -1 +1 @@
1
- {"version":3,"file":"pluginService.d.ts","sourceRoot":"","sources":["../../src/services/pluginService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pluginService.d.ts","sourceRoot":"","sources":["../../src/services/pluginService.ts"],"names":[],"mappings":"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"}