libre-webui 0.15.1 → 0.16.1

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 (205) hide show
  1. package/README.md +18 -8
  2. package/backend/dist/db.d.ts.map +1 -1
  3. package/backend/dist/db.js +63 -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 +4 -4
  7. package/backend/dist/index.js.map +1 -1
  8. package/backend/dist/routes/chat.d.ts.map +1 -1
  9. package/backend/dist/routes/chat.js +93 -10
  10. package/backend/dist/routes/chat.js.map +1 -1
  11. package/backend/dist/routes/imageGen.d.ts.map +1 -1
  12. package/backend/dist/routes/imageGen.js +52 -29
  13. package/backend/dist/routes/imageGen.js.map +1 -1
  14. package/backend/dist/routes/plugins.d.ts.map +1 -1
  15. package/backend/dist/routes/plugins.js +226 -42
  16. package/backend/dist/routes/plugins.js.map +1 -1
  17. package/backend/dist/routes/preferences.d.ts.map +1 -1
  18. package/backend/dist/routes/preferences.js +5 -4
  19. package/backend/dist/routes/preferences.js.map +1 -1
  20. package/backend/dist/routes/tts.js +2 -2
  21. package/backend/dist/routes/tts.js.map +1 -1
  22. package/backend/dist/routes/work.d.ts.map +1 -1
  23. package/backend/dist/routes/work.js +2 -1
  24. package/backend/dist/routes/work.js.map +1 -1
  25. package/backend/dist/services/assistantCompletionService.d.ts +2 -1
  26. package/backend/dist/services/assistantCompletionService.d.ts.map +1 -1
  27. package/backend/dist/services/assistantCompletionService.js +3 -1
  28. package/backend/dist/services/assistantCompletionService.js.map +1 -1
  29. package/backend/dist/services/chatGenerationService.d.ts +5 -3
  30. package/backend/dist/services/chatGenerationService.d.ts.map +1 -1
  31. package/backend/dist/services/chatGenerationService.js +18 -6
  32. package/backend/dist/services/chatGenerationService.js.map +1 -1
  33. package/backend/dist/services/chatRequestService.d.ts +6 -4
  34. package/backend/dist/services/chatRequestService.d.ts.map +1 -1
  35. package/backend/dist/services/chatRequestService.js +10 -2
  36. package/backend/dist/services/chatRequestService.js.map +1 -1
  37. package/backend/dist/services/chatService.d.ts +2 -2
  38. package/backend/dist/services/chatService.d.ts.map +1 -1
  39. package/backend/dist/services/chatService.js +29 -17
  40. package/backend/dist/services/chatService.js.map +1 -1
  41. package/backend/dist/services/embeddingService.js +1 -1
  42. package/backend/dist/services/embeddingService.js.map +1 -1
  43. package/backend/dist/services/pluginActivationService.d.ts +11 -0
  44. package/backend/dist/services/pluginActivationService.d.ts.map +1 -0
  45. package/backend/dist/services/pluginActivationService.js +163 -0
  46. package/backend/dist/services/pluginActivationService.js.map +1 -0
  47. package/backend/dist/services/pluginCapabilityRegistryService.d.ts +1 -1
  48. package/backend/dist/services/pluginCapabilityRegistryService.d.ts.map +1 -1
  49. package/backend/dist/services/pluginCapabilityRegistryService.js +1 -1
  50. package/backend/dist/services/pluginCapabilityRegistryService.js.map +1 -1
  51. package/backend/dist/services/pluginCredentialsService.d.ts +16 -8
  52. package/backend/dist/services/pluginCredentialsService.d.ts.map +1 -1
  53. package/backend/dist/services/pluginCredentialsService.js +47 -14
  54. package/backend/dist/services/pluginCredentialsService.js.map +1 -1
  55. package/backend/dist/services/pluginEmbeddingService.d.ts +2 -2
  56. package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -1
  57. package/backend/dist/services/pluginEmbeddingService.js +33 -13
  58. package/backend/dist/services/pluginEmbeddingService.js.map +1 -1
  59. package/backend/dist/services/pluginImageGenerationService.d.ts +11 -7
  60. package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
  61. package/backend/dist/services/pluginImageGenerationService.js +265 -81
  62. package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
  63. package/backend/dist/services/pluginService.d.ts +97 -26
  64. package/backend/dist/services/pluginService.d.ts.map +1 -1
  65. package/backend/dist/services/pluginService.js +797 -178
  66. package/backend/dist/services/pluginService.js.map +1 -1
  67. package/backend/dist/services/pluginTTSService.d.ts +4 -4
  68. package/backend/dist/services/pluginTTSService.d.ts.map +1 -1
  69. package/backend/dist/services/pluginTTSService.js +24 -28
  70. package/backend/dist/services/pluginTTSService.js.map +1 -1
  71. package/backend/dist/services/pluginVariablesService.d.ts +6 -1
  72. package/backend/dist/services/pluginVariablesService.d.ts.map +1 -1
  73. package/backend/dist/services/pluginVariablesService.js +59 -1
  74. package/backend/dist/services/pluginVariablesService.js.map +1 -1
  75. package/backend/dist/services/preferencesService.d.ts +2 -2
  76. package/backend/dist/services/preferencesService.d.ts.map +1 -1
  77. package/backend/dist/services/preferencesService.js +78 -10
  78. package/backend/dist/services/preferencesService.js.map +1 -1
  79. package/backend/dist/services/titleGenerationService.d.ts +6 -4
  80. package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
  81. package/backend/dist/services/titleGenerationService.js +9 -5
  82. package/backend/dist/services/titleGenerationService.js.map +1 -1
  83. package/backend/dist/services/workAgentService.d.ts +5 -2
  84. package/backend/dist/services/workAgentService.d.ts.map +1 -1
  85. package/backend/dist/services/workAgentService.js +315 -44
  86. package/backend/dist/services/workAgentService.js.map +1 -1
  87. package/backend/dist/services/workModelProviderService.d.ts +6 -3
  88. package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
  89. package/backend/dist/services/workModelProviderService.js +243 -19
  90. package/backend/dist/services/workModelProviderService.js.map +1 -1
  91. package/backend/dist/services/workRuntimeService.d.ts +18 -1
  92. package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
  93. package/backend/dist/services/workRuntimeService.js +62 -11
  94. package/backend/dist/services/workRuntimeService.js.map +1 -1
  95. package/backend/dist/services/workTaskService.d.ts +2 -0
  96. package/backend/dist/services/workTaskService.d.ts.map +1 -1
  97. package/backend/dist/services/workTaskService.js +89 -14
  98. package/backend/dist/services/workTaskService.js.map +1 -1
  99. package/backend/dist/storage.d.ts.map +1 -1
  100. package/backend/dist/storage.js +9 -6
  101. package/backend/dist/storage.js.map +1 -1
  102. package/backend/dist/storageMappers.d.ts +3 -0
  103. package/backend/dist/storageMappers.d.ts.map +1 -1
  104. package/backend/dist/storageMappers.js +3 -0
  105. package/backend/dist/storageMappers.js.map +1 -1
  106. package/backend/dist/types/index.d.ts +54 -1
  107. package/backend/dist/types/index.d.ts.map +1 -1
  108. package/backend/dist/types/index.js.map +1 -1
  109. package/backend/dist/types/work.d.ts +1 -1
  110. package/backend/dist/types/work.d.ts.map +1 -1
  111. package/backend/dist/utils/chatContext.d.ts +13 -1
  112. package/backend/dist/utils/chatContext.d.ts.map +1 -1
  113. package/backend/dist/utils/chatContext.js +52 -0
  114. package/backend/dist/utils/chatContext.js.map +1 -1
  115. package/backend/dist/utils/chatProviderSelection.d.ts +15 -0
  116. package/backend/dist/utils/chatProviderSelection.d.ts.map +1 -0
  117. package/backend/dist/utils/chatProviderSelection.js +59 -0
  118. package/backend/dist/utils/chatProviderSelection.js.map +1 -0
  119. package/backend/dist/utils/imageGenerationValidation.d.ts +3 -0
  120. package/backend/dist/utils/imageGenerationValidation.d.ts.map +1 -0
  121. package/backend/dist/utils/imageGenerationValidation.js +55 -0
  122. package/backend/dist/utils/imageGenerationValidation.js.map +1 -0
  123. package/backend/dist/utils/openAIResponsesAdapter.d.ts +88 -0
  124. package/backend/dist/utils/openAIResponsesAdapter.d.ts.map +1 -0
  125. package/backend/dist/utils/openAIResponsesAdapter.js +521 -0
  126. package/backend/dist/utils/openAIResponsesAdapter.js.map +1 -0
  127. package/backend/dist/utils/pluginChatAdapter.d.ts +7 -4
  128. package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
  129. package/backend/dist/utils/pluginChatAdapter.js +33 -5
  130. package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
  131. package/backend/dist/utils/pluginChatContext.d.ts.map +1 -1
  132. package/backend/dist/utils/pluginChatContext.js +5 -1
  133. package/backend/dist/utils/pluginChatContext.js.map +1 -1
  134. package/backend/dist/utils/pluginConnectionVariables.d.ts +6 -0
  135. package/backend/dist/utils/pluginConnectionVariables.d.ts.map +1 -0
  136. package/backend/dist/utils/pluginConnectionVariables.js +52 -0
  137. package/backend/dist/utils/pluginConnectionVariables.js.map +1 -0
  138. package/backend/dist/utils/pluginDefinitionTrust.d.ts +9 -0
  139. package/backend/dist/utils/pluginDefinitionTrust.d.ts.map +1 -0
  140. package/backend/dist/utils/pluginDefinitionTrust.js +71 -0
  141. package/backend/dist/utils/pluginDefinitionTrust.js.map +1 -0
  142. package/backend/dist/utils/pluginStreamAdapter.d.ts +3 -0
  143. package/backend/dist/utils/pluginStreamAdapter.d.ts.map +1 -1
  144. package/backend/dist/utils/pluginStreamAdapter.js +410 -0
  145. package/backend/dist/utils/pluginStreamAdapter.js.map +1 -1
  146. package/backend/dist/utils/pluginStreaming.d.ts +7 -1
  147. package/backend/dist/utils/pluginStreaming.d.ts.map +1 -1
  148. package/backend/dist/utils/pluginStreaming.js +12 -1
  149. package/backend/dist/utils/pluginStreaming.js.map +1 -1
  150. package/backend/dist/utils/pluginValidation.d.ts +20 -2
  151. package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
  152. package/backend/dist/utils/pluginValidation.js +187 -17
  153. package/backend/dist/utils/pluginValidation.js.map +1 -1
  154. package/backend/dist/utils/pluginVariableValidation.d.ts +7 -0
  155. package/backend/dist/utils/pluginVariableValidation.d.ts.map +1 -1
  156. package/backend/dist/utils/pluginVariableValidation.js +79 -4
  157. package/backend/dist/utils/pluginVariableValidation.js.map +1 -1
  158. package/backend/dist/websocketServer.d.ts.map +1 -1
  159. package/backend/dist/websocketServer.js +16 -3
  160. package/backend/dist/websocketServer.js.map +1 -1
  161. package/backend/package.json +1 -1
  162. package/frontend/dist/assets/index-BVgyQN3z.js +5 -0
  163. package/frontend/dist/assets/index-Dme2Ozol.css +1 -0
  164. package/frontend/dist/index.html +3 -3
  165. package/frontend/dist/js/{ArtifactContainer-BHSBrlQB.js → ArtifactContainer-CbMAYwvr.js} +1 -1
  166. package/frontend/dist/js/{ArtifactDemoPage-BHGJmJAT.js → ArtifactDemoPage-CWDhGWrz.js} +1 -1
  167. package/frontend/dist/js/ArtifactSlideOutPanel-CzUpDM59.js +1 -0
  168. package/frontend/dist/js/ChatPage-D0fdzy7a.js +16 -0
  169. package/frontend/dist/js/{FirstTimeSetup-BYWAVAdE.js → FirstTimeSetup-CfnOmy9w.js} +1 -1
  170. package/frontend/dist/js/GalleryPage-CMkCur9v.js +1 -0
  171. package/frontend/dist/js/LibreClawPage-CHEfny1k.js +1 -0
  172. package/frontend/dist/js/ModelSelector-COnlNsVM.js +1 -0
  173. package/frontend/dist/js/ModelsPage-nxheiYJp.js +2 -0
  174. package/frontend/dist/js/PersonasPage-C2pqDsWA.js +13 -0
  175. package/frontend/dist/js/{RichMessageContent-BdU5vXz9.js → RichMessageContent-Cz9y-bgl.js} +1 -1
  176. package/frontend/dist/js/SettingsModal-B6Se68Hd.js +1 -0
  177. package/frontend/dist/js/UserManagementPage-DQeL-Twp.js +1 -0
  178. package/frontend/dist/js/WorkPage-AcZMp8OB.js +2 -0
  179. package/frontend/dist/js/api-Fi-lJlfu.js +19 -0
  180. package/frontend/dist/js/{estree-Bu_-Wi6O.js → estree-BRklD62a.js} +1 -1
  181. package/frontend/dist/js/{html-Ca764Rus.js → html-BgGIAGmn.js} +1 -1
  182. package/frontend/dist/js/{markdown-DaiQGPEs.js → markdown-CM2nBJJi.js} +1 -1
  183. package/frontend/dist/js/{standalone-DWWnsbIr.js → standalone-CUBo-NGt.js} +1 -1
  184. package/frontend/dist/js/{typescript-CatjJeHm.js → typescript-Dcy9qxSB.js} +1 -1
  185. package/frontend/dist/js/useBaseQuery-CFTidwqz.js +1 -0
  186. package/frontend/dist/js/useQuery-UsSBfWzs.js +1 -0
  187. package/package.json +2 -2
  188. package/plugins/github.json +1 -2
  189. package/plugins/huggingface.json +30 -30
  190. package/plugins/openai.json +53 -22
  191. package/frontend/dist/assets/index-DkShhNBf.js +0 -5
  192. package/frontend/dist/assets/index-bdSWBsAM.css +0 -1
  193. package/frontend/dist/js/ArtifactSlideOutPanel-s8vcE5Ea.js +0 -1
  194. package/frontend/dist/js/ChatPage-B6Hm_pdu.js +0 -16
  195. package/frontend/dist/js/GalleryPage-CH4f65q8.js +0 -1
  196. package/frontend/dist/js/LibreClawPage-CcH7M3mJ.js +0 -1
  197. package/frontend/dist/js/ModelSelector-T1KZtIde.js +0 -1
  198. package/frontend/dist/js/ModelsPage-C1bM_Yoc.js +0 -2
  199. package/frontend/dist/js/PersonasPage-T_PrhnPG.js +0 -13
  200. package/frontend/dist/js/SettingsModal-BVj-D1L4.js +0 -1
  201. package/frontend/dist/js/UserManagementPage-Pix71oRW.js +0 -1
  202. package/frontend/dist/js/WorkPage-DdOVGyj_.js +0 -2
  203. package/frontend/dist/js/api-Do6u0tMM.js +0 -19
  204. package/frontend/dist/js/useBaseQuery-CVNuhuID.js +0 -1
  205. package/frontend/dist/js/useQuery-CYhC_da4.js +0 -1
@@ -23,9 +23,94 @@ import pluginCredentialsService from '../services/pluginCredentialsService.js';
23
23
  import pluginVariablesService from '../services/pluginVariablesService.js';
24
24
  import { getErrorMessage, } from '../types/index.js';
25
25
  import { pluginUpload as upload, safeCleanupFile, } from '../utils/pluginUpload.js';
26
- import { validatePluginVariables } from '../utils/pluginVariableValidation.js';
26
+ import { validatePluginVariables, validatePluginVariablesToUnset, } from '../utils/pluginVariableValidation.js';
27
+ import { requireAdmin } from '../middleware/auth.js';
28
+ import { userModel } from '../models/userModel.js';
29
+ import { isPluginConnectionVariableForPlugin } from '../utils/pluginConnectionVariables.js';
30
+ import { inferPluginApiMode, PLUGIN_MODEL_DISCOVERY_VARIABLES, } from '../utils/pluginValidation.js';
27
31
  const router = express.Router();
28
- const getRequestUserId = (req) => req.user?.userId || 'default';
32
+ const getRequestUserId = (req) => {
33
+ const userId = req.user?.userId;
34
+ if (!userId) {
35
+ throw new Error('Authenticated user context is required');
36
+ }
37
+ return userId;
38
+ };
39
+ const requestUserIsAdmin = (req) => {
40
+ const userId = req.user?.userId;
41
+ if (!userId)
42
+ return false;
43
+ try {
44
+ return userModel.getUserById(userId)?.role === 'admin';
45
+ }
46
+ catch {
47
+ return false;
48
+ }
49
+ };
50
+ const supportsCompletionModelDiscovery = (plugin) => plugin.type === 'completion' || plugin.type === 'chat';
51
+ const getModelDiscoveryVariableNames = (plugin) => {
52
+ const names = new Set(PLUGIN_MODEL_DISCOVERY_VARIABLES);
53
+ for (const capability of Object.values((plugin.capabilities || {}))) {
54
+ if (!capability || typeof capability !== 'object')
55
+ continue;
56
+ const capabilityRecord = capability;
57
+ const config = capabilityRecord.config && typeof capabilityRecord.config === 'object'
58
+ ? capabilityRecord.config
59
+ : {};
60
+ const selector = config.endpoint_variable ?? capabilityRecord.endpoint_variable;
61
+ if (typeof selector === 'string' && selector.trim()) {
62
+ names.add(selector.trim());
63
+ }
64
+ }
65
+ return names;
66
+ };
67
+ const modelDiscoveryConnectionChanged = (plugin, previousVariables, nextVariables) => [...getModelDiscoveryVariableNames(plugin)].some(name => previousVariables[name] !== nextVariables[name]);
68
+ const matchesInheritedDefault = (plugin, definition, value) => {
69
+ let inheritedValue = definition.default;
70
+ if (inheritedValue === undefined) {
71
+ if (definition.name === 'endpoint' || definition.name === 'api_url') {
72
+ inheritedValue = plugin.endpoint;
73
+ }
74
+ else if (definition.name === 'base_url') {
75
+ inheritedValue = plugin.base_url;
76
+ }
77
+ else if (definition.name === 'api_path') {
78
+ inheritedValue = plugin.api_path;
79
+ }
80
+ else if (definition.name === 'api_mode') {
81
+ inheritedValue = plugin.api_mode ?? inferPluginApiMode(plugin.endpoint);
82
+ }
83
+ else {
84
+ for (const capability of Object.values((plugin.capabilities || {}))) {
85
+ if (!capability || typeof capability !== 'object')
86
+ continue;
87
+ const capabilityRecord = capability;
88
+ const config = capabilityRecord.config && typeof capabilityRecord.config === 'object'
89
+ ? capabilityRecord.config
90
+ : {};
91
+ const selector = config.endpoint_variable ?? capabilityRecord.endpoint_variable;
92
+ if (selector === definition.name &&
93
+ typeof capabilityRecord.endpoint === 'string') {
94
+ inheritedValue = capabilityRecord.endpoint;
95
+ break;
96
+ }
97
+ }
98
+ }
99
+ }
100
+ const defaultValidation = validatePluginVariables([definition], {
101
+ [definition.name]: inheritedValue ?? '',
102
+ });
103
+ return (defaultValidation.success &&
104
+ Object.is(defaultValidation.variables[definition.name], value));
105
+ };
106
+ const refreshUserModels = async (plugin, userId, clearExisting = true) => {
107
+ if (!supportsCompletionModelDiscovery(plugin))
108
+ return;
109
+ if (clearExisting) {
110
+ pluginService.clearDiscoveredModels(plugin.id, userId);
111
+ }
112
+ await pluginService.discoverModels(plugin.id, userId).catch(() => { });
113
+ };
29
114
  // Rate limiting for plugin operations
30
115
  const pluginRateLimit = rateLimit({
31
116
  windowMs: 15 * 60 * 1000, // 15 minutes
@@ -47,7 +132,11 @@ const uploadRateLimit = rateLimit({
47
132
  // Get all plugins
48
133
  router.get('/', async (req, res) => {
49
134
  try {
50
- const plugins = pluginService.getAllPlugins();
135
+ const userId = getRequestUserId(req);
136
+ // Keep provider catalogs current: a stale or never-discovered model list
137
+ // is refreshed here so a browser reload reflects the provider's models.
138
+ await pluginService.refreshStaleModels(userId).catch(() => { });
139
+ const plugins = pluginService.getAllPlugins(userId);
51
140
  res.json({
52
141
  success: true,
53
142
  data: plugins,
@@ -63,7 +152,7 @@ router.get('/', async (req, res) => {
63
152
  // Get active plugins
64
153
  router.get('/active', async (req, res) => {
65
154
  try {
66
- const activePlugins = pluginService.getActivePlugins();
155
+ const activePlugins = pluginService.getActivePlugins(getRequestUserId(req));
67
156
  res.json({
68
157
  success: true,
69
158
  data: activePlugins,
@@ -79,7 +168,7 @@ router.get('/active', async (req, res) => {
79
168
  // Get active plugin (alternative route)
80
169
  router.get('/active/current', async (req, res) => {
81
170
  try {
82
- const activePlugin = pluginService.getActivePlugin();
171
+ const activePlugin = pluginService.getActivePlugin(getRequestUserId(req));
83
172
  res.json({
84
173
  success: true,
85
174
  data: activePlugin,
@@ -95,7 +184,7 @@ router.get('/active/current', async (req, res) => {
95
184
  // Get plugin status
96
185
  router.get('/status/all', async (req, res) => {
97
186
  try {
98
- const status = pluginService.getPluginStatus();
187
+ const status = pluginService.getPluginStatus(getRequestUserId(req));
99
188
  res.json({
100
189
  success: true,
101
190
  data: status,
@@ -112,7 +201,7 @@ router.get('/status/all', async (req, res) => {
112
201
  router.get('/:id', async (req, res) => {
113
202
  try {
114
203
  const id = req.params.id;
115
- const plugin = pluginService.getPlugin(id);
204
+ const plugin = pluginService.getPlugin(id, getRequestUserId(req));
116
205
  if (!plugin) {
117
206
  res.status(404).json({
118
207
  success: false,
@@ -133,7 +222,7 @@ router.get('/:id', async (req, res) => {
133
222
  }
134
223
  });
135
224
  // Upload and install a plugin
136
- router.post('/upload', uploadRateLimit, upload.single('plugin'), async (req, res) => {
225
+ router.post('/upload', requireAdmin, uploadRateLimit, upload.single('plugin'), async (req, res) => {
137
226
  const tempDir = path.resolve('temp/');
138
227
  try {
139
228
  if (!req.file) {
@@ -181,7 +270,7 @@ router.post('/upload', uploadRateLimit, upload.single('plugin'), async (req, res
181
270
  // Clean up uploaded file after reading
182
271
  safeCleanupFile(req.file.path, tempDir);
183
272
  // Install the plugin
184
- const plugin = pluginService.importPlugin(pluginData);
273
+ const plugin = pluginService.importPlugin(pluginData, getRequestUserId(req));
185
274
  res.json({
186
275
  success: true,
187
276
  data: plugin,
@@ -214,10 +303,10 @@ router.post('/upload', uploadRateLimit, upload.single('plugin'), async (req, res
214
303
  }
215
304
  });
216
305
  // Install plugin from JSON data (alternative to file upload)
217
- router.post('/install', pluginRateLimit, async (req, res) => {
306
+ router.post('/install', requireAdmin, pluginRateLimit, async (req, res) => {
218
307
  try {
219
308
  const pluginData = req.body;
220
- const plugin = pluginService.installPlugin(pluginData);
309
+ const plugin = pluginService.installPlugin(pluginData, getRequestUserId(req));
221
310
  res.json({
222
311
  success: true,
223
312
  data: plugin,
@@ -246,7 +335,7 @@ router.post('/install', pluginRateLimit, async (req, res) => {
246
335
  }
247
336
  });
248
337
  // Update a plugin
249
- router.put('/:id', pluginRateLimit, async (req, res) => {
338
+ router.put('/:id', requireAdmin, pluginRateLimit, async (req, res) => {
250
339
  try {
251
340
  const id = req.params.id;
252
341
  const updates = req.body;
@@ -259,7 +348,7 @@ router.put('/:id', pluginRateLimit, async (req, res) => {
259
348
  return;
260
349
  }
261
350
  updates.id = id;
262
- const plugin = pluginService.installPlugin(updates);
351
+ const plugin = pluginService.installPlugin(updates, getRequestUserId(req));
263
352
  res.json({
264
353
  success: true,
265
354
  data: plugin,
@@ -273,7 +362,7 @@ router.put('/:id', pluginRateLimit, async (req, res) => {
273
362
  }
274
363
  });
275
364
  // Delete a plugin
276
- router.delete('/:id', pluginRateLimit, async (req, res) => {
365
+ router.delete('/:id', requireAdmin, pluginRateLimit, async (req, res) => {
277
366
  try {
278
367
  const id = req.params.id;
279
368
  const success = pluginService.deletePlugin(id);
@@ -300,7 +389,8 @@ router.delete('/:id', pluginRateLimit, async (req, res) => {
300
389
  router.post('/activate/:id', pluginRateLimit, async (req, res) => {
301
390
  try {
302
391
  const id = req.params.id;
303
- const success = pluginService.activatePlugin(id);
392
+ const userId = getRequestUserId(req);
393
+ const success = await pluginService.activatePlugin(id, userId);
304
394
  res.json({
305
395
  success: true,
306
396
  data: success,
@@ -326,10 +416,13 @@ router.post('/activate/:id', pluginRateLimit, async (req, res) => {
326
416
  router.post('/discover/:id', pluginRateLimit, async (req, res) => {
327
417
  try {
328
418
  const id = req.params.id;
329
- const models = await pluginService.discoverModels(id);
419
+ // Report the outcome rather than only the catalog: without a usable API
420
+ // key or a reachable provider the returned models are the previous ones,
421
+ // and the caller must not present that as a refresh.
422
+ const result = await pluginService.discoverModelsResult(id, getRequestUserId(req));
330
423
  res.json({
331
424
  success: true,
332
- data: models,
425
+ data: result,
333
426
  });
334
427
  }
335
428
  catch (error) {
@@ -343,7 +436,7 @@ router.post('/discover/:id', pluginRateLimit, async (req, res) => {
343
436
  router.post('/deactivate/:id', pluginRateLimit, async (req, res) => {
344
437
  try {
345
438
  const id = req.params.id;
346
- const success = pluginService.deactivatePlugin(id);
439
+ const success = pluginService.deactivatePlugin(id, getRequestUserId(req));
347
440
  res.json({
348
441
  success: true,
349
442
  data: success,
@@ -359,7 +452,7 @@ router.post('/deactivate/:id', pluginRateLimit, async (req, res) => {
359
452
  // Deactivate all plugins (legacy)
360
453
  router.post('/deactivate', pluginRateLimit, async (req, res) => {
361
454
  try {
362
- const success = pluginService.deactivatePlugin();
455
+ const success = pluginService.deactivatePlugin(undefined, getRequestUserId(req));
363
456
  res.json({
364
457
  success: true,
365
458
  data: success,
@@ -376,7 +469,7 @@ router.post('/deactivate', pluginRateLimit, async (req, res) => {
376
469
  router.get('/:id/export', async (req, res) => {
377
470
  try {
378
471
  const id = req.params.id;
379
- const plugin = pluginService.exportPlugin(id);
472
+ const plugin = pluginService.exportPlugin(id, getRequestUserId(req));
380
473
  if (!plugin) {
381
474
  res.status(404).json({
382
475
  success: false,
@@ -410,7 +503,16 @@ router.get('/credentials/all', async (req, res) => {
410
503
  try {
411
504
  // Get userId from auth context (defaults to 'default' for single-user mode)
412
505
  const userId = getRequestUserId(req);
413
- const credentials = pluginCredentialsService.getCredentials(userId);
506
+ const credentials = pluginCredentialsService
507
+ .getCredentials(userId)
508
+ .map(credential => {
509
+ const plugin = pluginService.getPlugin(credential.plugin_id, userId);
510
+ return {
511
+ ...credential,
512
+ has_api_key: plugin !== null &&
513
+ pluginService.getApiKey(plugin, userId) !== null,
514
+ };
515
+ });
414
516
  res.json({
415
517
  success: true,
416
518
  data: credentials,
@@ -428,6 +530,7 @@ router.post('/:id/credentials', pluginRateLimit, async (req, res) => {
428
530
  try {
429
531
  const id = req.params.id;
430
532
  const { api_key } = req.body;
533
+ const userId = getRequestUserId(req);
431
534
  if (!api_key || typeof api_key !== 'string') {
432
535
  res.status(400).json({
433
536
  success: false,
@@ -436,7 +539,7 @@ router.post('/:id/credentials', pluginRateLimit, async (req, res) => {
436
539
  return;
437
540
  }
438
541
  // Verify plugin exists
439
- const plugin = pluginService.getPlugin(id);
542
+ const plugin = pluginService.getPlugin(id, userId);
440
543
  if (!plugin) {
441
544
  res.status(404).json({
442
545
  success: false,
@@ -444,10 +547,9 @@ router.post('/:id/credentials', pluginRateLimit, async (req, res) => {
444
547
  });
445
548
  return;
446
549
  }
447
- // Get userId from auth context
448
- const userId = getRequestUserId(req);
449
- const success = pluginCredentialsService.setApiKey(id, api_key, userId);
550
+ const success = pluginCredentialsService.setApiKey(id, api_key, userId, pluginService.getCredentialRoutingAuthFingerprint(plugin, userId));
450
551
  if (success) {
552
+ await refreshUserModels(plugin, userId, true);
451
553
  res.json({
452
554
  success: true,
453
555
  data: true,
@@ -471,8 +573,9 @@ router.post('/:id/credentials', pluginRateLimit, async (req, res) => {
471
573
  router.delete('/:id/credentials', pluginRateLimit, async (req, res) => {
472
574
  try {
473
575
  const id = req.params.id;
576
+ const userId = getRequestUserId(req);
474
577
  // Verify plugin exists
475
- const plugin = pluginService.getPlugin(id);
578
+ const plugin = pluginService.getPlugin(id, userId);
476
579
  if (!plugin) {
477
580
  res.status(404).json({
478
581
  success: false,
@@ -480,9 +583,10 @@ router.delete('/:id/credentials', pluginRateLimit, async (req, res) => {
480
583
  });
481
584
  return;
482
585
  }
483
- // Get userId from auth context
484
- const userId = getRequestUserId(req);
485
586
  const success = pluginCredentialsService.deleteApiKey(id, userId);
587
+ if (success) {
588
+ await refreshUserModels(plugin, userId, true);
589
+ }
486
590
  res.json({
487
591
  success: true,
488
592
  data: success,
@@ -499,8 +603,9 @@ router.delete('/:id/credentials', pluginRateLimit, async (req, res) => {
499
603
  router.get('/:id/credentials/check', async (req, res) => {
500
604
  try {
501
605
  const id = req.params.id;
606
+ const userId = getRequestUserId(req);
502
607
  // Verify plugin exists
503
- const plugin = pluginService.getPlugin(id);
608
+ const plugin = pluginService.getPlugin(id, userId);
504
609
  if (!plugin) {
505
610
  res.status(404).json({
506
611
  success: false,
@@ -508,9 +613,7 @@ router.get('/:id/credentials/check', async (req, res) => {
508
613
  });
509
614
  return;
510
615
  }
511
- // Get userId from auth context
512
- const userId = getRequestUserId(req);
513
- const hasKey = pluginCredentialsService.hasApiKey(id, plugin.auth.key_env, userId);
616
+ const hasKey = pluginService.getApiKey(plugin, userId) !== null;
514
617
  res.json({
515
618
  success: true,
516
619
  data: hasKey,
@@ -530,7 +633,8 @@ router.get('/:id/credentials/check', async (req, res) => {
530
633
  router.get('/:id/variables', async (req, res) => {
531
634
  try {
532
635
  const id = req.params.id;
533
- const plugin = pluginService.getPlugin(id);
636
+ const userId = getRequestUserId(req);
637
+ const plugin = pluginService.getPlugin(id, userId);
534
638
  if (!plugin) {
535
639
  res.status(404).json({ success: false, error: 'Plugin not found' });
536
640
  return;
@@ -539,9 +643,21 @@ router.get('/:id/variables', async (req, res) => {
539
643
  res.json({ success: true, data: {} });
540
644
  return;
541
645
  }
542
- const userId = getRequestUserId(req);
543
646
  const variables = pluginVariablesService.getVariables(id, plugin.variables, userId, true // forDisplay - mask sensitive values
544
647
  );
648
+ if (!requestUserIsAdmin(req)) {
649
+ for (const definition of plugin.variables) {
650
+ if (!isPluginConnectionVariableForPlugin(plugin, definition.name)) {
651
+ continue;
652
+ }
653
+ variables[definition.name] = {
654
+ name: definition.name,
655
+ value: definition.sensitive ? '' : (definition.default ?? ''),
656
+ is_sensitive: definition.sensitive ?? false,
657
+ has_value: false,
658
+ };
659
+ }
660
+ }
545
661
  res.json({ success: true, data: variables });
546
662
  }
547
663
  catch (error) {
@@ -555,14 +671,17 @@ router.get('/:id/variables', async (req, res) => {
555
671
  router.put('/:id/variables', pluginRateLimit, async (req, res) => {
556
672
  try {
557
673
  const id = req.params.id;
558
- const { variables } = req.body;
559
- if (!variables || typeof variables !== 'object') {
674
+ const { variables, unset } = req.body ?? {};
675
+ const userId = getRequestUserId(req);
676
+ if (!variables ||
677
+ typeof variables !== 'object' ||
678
+ Array.isArray(variables)) {
560
679
  res
561
680
  .status(400)
562
681
  .json({ success: false, error: 'Variables object is required' });
563
682
  return;
564
683
  }
565
- const plugin = pluginService.getPlugin(id);
684
+ const plugin = pluginService.getPlugin(id, userId);
566
685
  if (!plugin) {
567
686
  res.status(404).json({ success: false, error: 'Plugin not found' });
568
687
  return;
@@ -574,14 +693,59 @@ router.put('/:id/variables', pluginRateLimit, async (req, res) => {
574
693
  });
575
694
  return;
576
695
  }
696
+ const submittedNames = Object.keys(variables);
697
+ const requestedUnsetNames = Array.isArray(unset)
698
+ ? unset.filter((name) => typeof name === 'string')
699
+ : [];
700
+ if (!requestUserIsAdmin(req) &&
701
+ [...submittedNames, ...requestedUnsetNames].some(name => isPluginConnectionVariableForPlugin(plugin, name))) {
702
+ res.status(403).json({
703
+ success: false,
704
+ error: 'Administrator access is required to change provider routing',
705
+ });
706
+ return;
707
+ }
577
708
  const validation = validatePluginVariables(plugin.variables, variables);
578
709
  if (!validation.success) {
579
710
  res.status(400).json({ success: false, error: validation.error });
580
711
  return;
581
712
  }
582
- const userId = getRequestUserId(req);
583
- const success = pluginVariablesService.setVariables(id, validation.variables, plugin.variables, userId);
713
+ const unsetValidation = validatePluginVariablesToUnset(plugin.variables, unset);
714
+ if (!unsetValidation.success) {
715
+ res.status(400).json({ success: false, error: unsetValidation.error });
716
+ return;
717
+ }
718
+ const validatedSubmittedNames = new Set(Object.keys(validation.variables));
719
+ const overlap = unsetValidation.variables.find(name => validatedSubmittedNames.has(name));
720
+ if (overlap) {
721
+ res.status(400).json({
722
+ success: false,
723
+ error: `Variable "${overlap}" cannot be both set and unset`,
724
+ });
725
+ return;
726
+ }
727
+ const definitionsByName = new Map(plugin.variables.map(definition => [definition.name, definition]));
728
+ const variablesToSet = { ...validation.variables };
729
+ const variablesToUnset = new Set(unsetValidation.variables);
730
+ // A submitted manifest default is inherited state, not a user override.
731
+ // Keep it sparse so trusted environment credentials do not become bound
732
+ // to a redundant stored routing row.
733
+ for (const [name, value] of Object.entries(variablesToSet)) {
734
+ const definition = definitionsByName.get(name);
735
+ if (definition &&
736
+ isPluginConnectionVariableForPlugin(plugin, name) &&
737
+ matchesInheritedDefault(plugin, definition, value)) {
738
+ delete variablesToSet[name];
739
+ variablesToUnset.add(name);
740
+ }
741
+ }
742
+ const previousVariables = pluginVariablesService.getResolvedVariables(id, plugin.variables, userId);
743
+ const success = pluginVariablesService.setVariables(id, variablesToSet, plugin.variables, userId, [...variablesToUnset]);
584
744
  if (success) {
745
+ const nextVariables = pluginVariablesService.getResolvedVariables(id, plugin.variables, userId);
746
+ if (modelDiscoveryConnectionChanged(plugin, previousVariables, nextVariables)) {
747
+ await refreshUserModels(plugin, userId);
748
+ }
585
749
  res.json({ success: true, data: true });
586
750
  }
587
751
  else {
@@ -601,14 +765,34 @@ router.put('/:id/variables', pluginRateLimit, async (req, res) => {
601
765
  router.delete('/:id/variables', pluginRateLimit, async (req, res) => {
602
766
  try {
603
767
  const id = req.params.id;
604
- const plugin = pluginService.getPlugin(id);
768
+ const userId = getRequestUserId(req);
769
+ const plugin = pluginService.getPlugin(id, userId);
605
770
  if (!plugin) {
606
771
  res.status(404).json({ success: false, error: 'Plugin not found' });
607
772
  return;
608
773
  }
609
- const userId = getRequestUserId(req);
774
+ // A full account-scoped reset also purges ignored legacy routing rows.
775
+ // Non-admins still cannot target routing variables through the update
776
+ // endpoint, but reset must not leave dormant values that a later role
777
+ // promotion could reactivate.
778
+ const previousVariables = plugin.variables
779
+ ? pluginVariablesService.getResolvedVariables(id, plugin.variables, userId)
780
+ : {};
610
781
  const success = pluginVariablesService.deletePluginVariables(id, userId);
611
- res.json({ success: true, data: success });
782
+ if (!success) {
783
+ res.status(500).json({
784
+ success: false,
785
+ error: 'Failed to reset plugin variables',
786
+ });
787
+ return;
788
+ }
789
+ if (plugin.variables) {
790
+ const nextVariables = pluginVariablesService.getResolvedVariables(id, plugin.variables, userId);
791
+ if (modelDiscoveryConnectionChanged(plugin, previousVariables, nextVariables)) {
792
+ await refreshUserModels(plugin, userId);
793
+ }
794
+ }
795
+ res.json({ success: true, data: true });
612
796
  }
613
797
  catch (error) {
614
798
  res.status(500).json({
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/routes/plugins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/routes/plugins.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../../src/routes/preferences.ts"],"names":[],"mappings":"AA2BA,QAAA,MAAM,MAAM,4CAAmB,CAAC;AAmYhC,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../../src/routes/preferences.ts"],"names":[],"mappings":"AA4BA,QAAA,MAAM,MAAM,4CAAmB,CAAC;AAoYhC,eAAe,MAAM,CAAC"}
@@ -19,6 +19,7 @@ import rateLimit from 'express-rate-limit';
19
19
  import preferencesService from '../services/preferencesService.js';
20
20
  import { getErrorMessage, } from '../types/index.js';
21
21
  import { authenticate } from '../middleware/auth.js';
22
+ import { ChatProviderSelectionError } from '../utils/chatProviderSelection.js';
22
23
  const router = express.Router();
23
24
  // Rate limiter for preferences routes: 30 requests per minute (reasonable for settings)
24
25
  const preferencesRateLimiter = rateLimit({
@@ -78,7 +79,7 @@ router.put('/', async (req, res) => {
78
79
  });
79
80
  }
80
81
  catch (error) {
81
- res.status(500).json({
82
+ res.status(error instanceof ChatProviderSelectionError ? 400 : 500).json({
82
83
  success: false,
83
84
  error: getErrorMessage(error, 'Failed to update preferences'),
84
85
  });
@@ -95,7 +96,7 @@ router.put('/default-model', async (req, res) => {
95
96
  });
96
97
  return;
97
98
  }
98
- const { model } = req.body;
99
+ const { model, providerType, providerId } = req.body;
99
100
  if (!model) {
100
101
  res.status(400).json({
101
102
  success: false,
@@ -103,14 +104,14 @@ router.put('/default-model', async (req, res) => {
103
104
  });
104
105
  return;
105
106
  }
106
- const updatedPreferences = preferencesService.setDefaultModel(model, userId);
107
+ const updatedPreferences = preferencesService.setDefaultModel(model, userId, { providerType, providerId });
107
108
  res.json({
108
109
  success: true,
109
110
  data: updatedPreferences,
110
111
  });
111
112
  }
112
113
  catch (error) {
113
- res.status(500).json({
114
+ res.status(error instanceof ChatProviderSelectionError ? 400 : 500).json({
114
115
  success: false,
115
116
  error: getErrorMessage(error, 'Failed to set default model'),
116
117
  });