@luckydraw/cumulus 0.31.62 → 0.31.64
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/CHANGELOG.md +11 -0
- package/dist/gateway/static/widget.js +675 -192
- package/dist/lib/agentic-loop.d.ts.map +1 -1
- package/dist/lib/agentic-loop.js +37 -0
- package/dist/lib/agentic-loop.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.31.64
|
|
4
|
+
You've hit your weekly limit · resets Aug 6, 9pm (UTC)
|
|
5
|
+
- Bug fixes and stability improvements
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## v0.31.63
|
|
9
|
+
|
|
10
|
+
- Gateway model settings are now organized into Anthropic, OpenAI, and HuggingFace provider cards with editable model catalogs, credentials, context windows, and clear empty states.
|
|
11
|
+
- One gateway-default control now spans all providers while preserving the separate default Claude CLI sub-model.
|
|
12
|
+
- Model catalog and credential changes apply live without a restart, explicitly support credential clearing, and refresh every open thread picker after saving.
|
|
13
|
+
|
|
3
14
|
## v0.31.62
|
|
4
15
|
|
|
5
16
|
- Direct-provider agents now receive namespace-scoped stdio MCP tools, giving OSS and OpenAI models the same application capabilities as Claude CLI threads.
|
|
@@ -46,6 +46,146 @@
|
|
|
46
46
|
localStorage.removeItem('cumulus-api-key');
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
// ─── Provider-organized model settings (task 123) ───────────────────────────
|
|
50
|
+
// Claude CLI variants and direct API models have different runtime contracts,
|
|
51
|
+
// but the UI presents them as one provider-facing catalog. Keep these transforms
|
|
52
|
+
// pure so their losslessness/default rules can be regression-tested directly.
|
|
53
|
+
function gatewayConfigToModelCatalog(config) {
|
|
54
|
+
config = config || {};
|
|
55
|
+
var topModels = Array.isArray(config.models) ? config.models : [];
|
|
56
|
+
var claudeModels = Array.isArray(config.claudeModels) ? config.claudeModels : [];
|
|
57
|
+
var sentinel = topModels.find(function (model) {
|
|
58
|
+
return model.id === 'claude' || model.provider === 'claude-cli';
|
|
59
|
+
}) || { id: 'claude', label: 'Claude (CLI)', provider: 'claude-cli' };
|
|
60
|
+
var globalDefault = config.model || (topModels[0] && topModels[0].id) || 'claude';
|
|
61
|
+
var explicitClaudeDefault = claudeModels.find(function (model) {
|
|
62
|
+
return !!model.default;
|
|
63
|
+
});
|
|
64
|
+
var claudeDefaultId = explicitClaudeDefault
|
|
65
|
+
? explicitClaudeDefault.id
|
|
66
|
+
: claudeModels[0] && claudeModels[0].id;
|
|
67
|
+
var catalog = [];
|
|
68
|
+
|
|
69
|
+
claudeModels.forEach(function (model) {
|
|
70
|
+
catalog.push({
|
|
71
|
+
id: model.id,
|
|
72
|
+
label: model.label || model.id,
|
|
73
|
+
provider: 'anthropic',
|
|
74
|
+
gatewayDefault: globalDefault === 'claude' && model.id === claudeDefaultId,
|
|
75
|
+
providerDefault: model.id === claudeDefaultId,
|
|
76
|
+
source: Object.assign({}, model),
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
topModels.forEach(function (model) {
|
|
80
|
+
if (model === sentinel || model.id === 'claude' || model.provider === 'claude-cli') return;
|
|
81
|
+
catalog.push({
|
|
82
|
+
id: model.id,
|
|
83
|
+
label: model.label || model.name || model.id,
|
|
84
|
+
provider: model.provider === 'openai' ? 'openai' : 'huggingface',
|
|
85
|
+
contextWindow: typeof model.contextWindow === 'number' ? model.contextWindow : undefined,
|
|
86
|
+
gatewayDefault: globalDefault === model.id,
|
|
87
|
+
providerDefault: false,
|
|
88
|
+
source: Object.assign({}, model),
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
if (
|
|
92
|
+
!catalog.some(function (model) {
|
|
93
|
+
return model.gatewayDefault;
|
|
94
|
+
}) &&
|
|
95
|
+
catalog.length
|
|
96
|
+
) {
|
|
97
|
+
catalog[0].gatewayDefault = true;
|
|
98
|
+
}
|
|
99
|
+
return { catalog: catalog, sentinel: Object.assign({}, sentinel) };
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function modelCatalogToGatewayConfig(state) {
|
|
103
|
+
state = state || {};
|
|
104
|
+
var catalog = Array.isArray(state.catalog) ? state.catalog : [];
|
|
105
|
+
var selected =
|
|
106
|
+
catalog.find(function (model) {
|
|
107
|
+
return !!model.gatewayDefault;
|
|
108
|
+
}) || catalog[0];
|
|
109
|
+
var anthropic = catalog.filter(function (model) {
|
|
110
|
+
return model.provider === 'anthropic';
|
|
111
|
+
});
|
|
112
|
+
var claudeDefault =
|
|
113
|
+
anthropic.find(function (model) {
|
|
114
|
+
return !!model.providerDefault;
|
|
115
|
+
}) || anthropic[0];
|
|
116
|
+
var sentinel = Object.assign(
|
|
117
|
+
{ id: 'claude', label: 'Claude (CLI)', provider: 'claude-cli' },
|
|
118
|
+
state.sentinel || {}
|
|
119
|
+
);
|
|
120
|
+
sentinel.id = 'claude';
|
|
121
|
+
sentinel.provider = 'claude-cli';
|
|
122
|
+
delete sentinel.default;
|
|
123
|
+
|
|
124
|
+
var claudeModels = anthropic.map(function (model) {
|
|
125
|
+
var entry = Object.assign({}, model.source || {});
|
|
126
|
+
entry.id = model.id;
|
|
127
|
+
entry.label = model.label || model.id;
|
|
128
|
+
if (claudeDefault && claudeDefault.id === model.id) entry.default = true;
|
|
129
|
+
else delete entry.default;
|
|
130
|
+
return entry;
|
|
131
|
+
});
|
|
132
|
+
var directModels = catalog
|
|
133
|
+
.filter(function (model) {
|
|
134
|
+
return model.provider !== 'anthropic';
|
|
135
|
+
})
|
|
136
|
+
.map(function (model) {
|
|
137
|
+
var entry = Object.assign({}, model.source || {});
|
|
138
|
+
entry.id = model.id;
|
|
139
|
+
entry.label = model.label || model.id;
|
|
140
|
+
entry.provider = model.provider === 'openai' ? 'openai' : 'huggingface';
|
|
141
|
+
delete entry.default;
|
|
142
|
+
if (typeof model.contextWindow === 'number' && model.contextWindow > 0) {
|
|
143
|
+
entry.contextWindow = model.contextWindow;
|
|
144
|
+
} else {
|
|
145
|
+
delete entry.contextWindow;
|
|
146
|
+
}
|
|
147
|
+
return entry;
|
|
148
|
+
});
|
|
149
|
+
return {
|
|
150
|
+
models: [sentinel].concat(directModels),
|
|
151
|
+
claudeModels: claudeModels,
|
|
152
|
+
model: selected && selected.provider !== 'anthropic' ? selected.id : 'claude',
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function validateModelCatalog(catalog) {
|
|
157
|
+
var seen = { claude: true };
|
|
158
|
+
for (var i = 0; i < catalog.length; i++) {
|
|
159
|
+
var model = catalog[i];
|
|
160
|
+
model.id = String(model.id || '').trim();
|
|
161
|
+
model.label = String(model.label || model.id).trim() || model.id;
|
|
162
|
+
if (!model.id) return 'Every model needs an ID';
|
|
163
|
+
if (seen[model.id]) return 'Duplicate or reserved model ID: ' + model.id;
|
|
164
|
+
seen[model.id] = true;
|
|
165
|
+
if (
|
|
166
|
+
model.provider !== 'anthropic' &&
|
|
167
|
+
model.contextWindow !== undefined &&
|
|
168
|
+
(!Number.isInteger(model.contextWindow) || model.contextWindow <= 0)
|
|
169
|
+
) {
|
|
170
|
+
return 'Context window must be a positive whole number for ' + model.id;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return '';
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function addCredentialPatch(payload, credentials) {
|
|
177
|
+
[
|
|
178
|
+
{ provider: 'openai', key: 'openaiApiKey' },
|
|
179
|
+
{ provider: 'huggingface', key: 'hfApiKey' },
|
|
180
|
+
].forEach(function (entry) {
|
|
181
|
+
var credential = credentials[entry.provider] || {};
|
|
182
|
+
var value = String(credential.value || '').trim();
|
|
183
|
+
if (credential.clear) payload[entry.key] = null;
|
|
184
|
+
else if (value && value.indexOf('•') === -1) payload[entry.key] = value;
|
|
185
|
+
});
|
|
186
|
+
return payload;
|
|
187
|
+
}
|
|
188
|
+
|
|
49
189
|
// ─── Styles ─────────────────────────────────────────────────────────────────
|
|
50
190
|
var STYLES = [
|
|
51
191
|
'.cumulus-widget * { box-sizing: border-box; margin: 0; padding: 0; }',
|
|
@@ -1174,14 +1314,14 @@
|
|
|
1174
1314
|
'}',
|
|
1175
1315
|
'.cumulus-model-popover select { max-width: 152px; margin: 0; }',
|
|
1176
1316
|
|
|
1177
|
-
/* ── Settings modal (
|
|
1317
|
+
/* ── Settings modal (provider-organized model catalog + credentials) ── */
|
|
1178
1318
|
'.cumulus-settings-backdrop {',
|
|
1179
1319
|
' position: fixed; inset: 0; z-index: 1000; background: rgba(0,0,0,0.55);',
|
|
1180
1320
|
' display: flex; align-items: center; justify-content: center; padding: 20px;',
|
|
1181
1321
|
'}',
|
|
1182
1322
|
'.cumulus-settings-modal {',
|
|
1183
1323
|
' background: #232323; border: 1px solid #3d3d3d; border-radius: 10px;',
|
|
1184
|
-
' width: min(
|
|
1324
|
+
' width: min(720px, 100%); max-height: 86vh; display: flex; flex-direction: column;',
|
|
1185
1325
|
' box-shadow: 0 16px 48px rgba(0,0,0,0.6); overflow: hidden;',
|
|
1186
1326
|
'}',
|
|
1187
1327
|
'.cumulus-settings-header {',
|
|
@@ -1201,9 +1341,13 @@
|
|
|
1201
1341
|
'}',
|
|
1202
1342
|
'.cumulus-settings-body > .cumulus-settings-section-label:first-child { margin-top: 6px; }',
|
|
1203
1343
|
'.cumulus-settings-model-row {',
|
|
1204
|
-
' display:
|
|
1344
|
+
' display: grid; grid-template-columns: auto auto minmax(130px,1.2fr) minmax(110px,1fr) 105px auto;',
|
|
1345
|
+
' align-items: center; gap: 8px; padding: 9px 11px;',
|
|
1205
1346
|
' border: 1px solid #333; border-radius: 8px; margin-bottom: 7px; background: #1d1d1d;',
|
|
1206
1347
|
'}',
|
|
1348
|
+
'.cumulus-settings-model-row.anthropic { grid-template-columns: auto auto minmax(140px,1.2fr) minmax(120px,1fr) auto; }',
|
|
1349
|
+
'.cumulus-settings-radio-label { color: #777; font-size: 9px; text-align: center; line-height: 1.15; }',
|
|
1350
|
+
'.cumulus-settings-row-input { min-width: 0; width: 100%; }',
|
|
1207
1351
|
'.cumulus-settings-model-row.is-default { border-color: #3b5b8c; background: rgba(59,91,140,0.12); }',
|
|
1208
1352
|
'.cumulus-settings-default-toggle { display: flex; align-items: center; cursor: pointer; flex-shrink: 0; }',
|
|
1209
1353
|
'.cumulus-settings-default-toggle input { cursor: pointer; accent-color: #3b82f6; margin: 0; }',
|
|
@@ -1226,7 +1370,47 @@
|
|
|
1226
1370
|
' line-height: 1; padding: 0 2px; flex-shrink: 0;',
|
|
1227
1371
|
'}',
|
|
1228
1372
|
'.cumulus-settings-model-remove:hover { color: #ef4444; }',
|
|
1229
|
-
'.cumulus-settings-
|
|
1373
|
+
'.cumulus-settings-provider-card {',
|
|
1374
|
+
' border: 1px solid #363636; border-radius: 10px; background: #1d1d1d; margin: 10px 0;',
|
|
1375
|
+
' overflow: hidden;',
|
|
1376
|
+
'}',
|
|
1377
|
+
'.cumulus-settings-provider-head {',
|
|
1378
|
+
' display: flex; align-items: center; justify-content: space-between; gap: 14px;',
|
|
1379
|
+
' padding: 12px 13px; background: #202020; border-bottom: 1px solid #323232;',
|
|
1380
|
+
'}',
|
|
1381
|
+
'.cumulus-settings-provider-title { color: #ededed; font-size: 14px; font-weight: 650; }',
|
|
1382
|
+
'.cumulus-settings-provider-desc { color: #777; font-size: 11px; margin-top: 2px; }',
|
|
1383
|
+
'.cumulus-settings-provider-count {',
|
|
1384
|
+
' color: #999; font-size: 10px; border: 1px solid #3c3c3c; border-radius: 999px;',
|
|
1385
|
+
' padding: 2px 8px; white-space: nowrap;',
|
|
1386
|
+
'}',
|
|
1387
|
+
'.cumulus-settings-provider-models { padding: 10px 10px 3px; }',
|
|
1388
|
+
'.cumulus-settings-provider-models .cumulus-settings-model-row { margin-bottom: 7px; }',
|
|
1389
|
+
'.cumulus-settings-provider-empty { color: #666; font-size: 12px; padding: 8px 3px 15px; }',
|
|
1390
|
+
'.cumulus-settings-provider-credential {',
|
|
1391
|
+
' display: grid; grid-template-columns: 120px minmax(0,1fr) auto; align-items: center; gap: 10px;',
|
|
1392
|
+
' padding: 0 10px 11px;',
|
|
1393
|
+
'}',
|
|
1394
|
+
'.cumulus-settings-credential-note { color: #777; font-size: 11px; padding: 0 10px 12px; }',
|
|
1395
|
+
'.cumulus-settings-clear-btn {',
|
|
1396
|
+
' background: none; border: 1px solid #454545; color: #aaa; cursor: pointer;',
|
|
1397
|
+
' padding: 6px 9px; border-radius: 6px; font-size: 11px;',
|
|
1398
|
+
'}',
|
|
1399
|
+
'.cumulus-settings-clear-btn:hover { color: #ef7777; border-color: #744; }',
|
|
1400
|
+
'.cumulus-settings-provider-credential label { color: #aaa; font-size: 11px; }',
|
|
1401
|
+
'.cumulus-settings-add-card {',
|
|
1402
|
+
' border: 1px dashed #454545; border-radius: 10px; padding: 12px; margin: 12px 0 8px;',
|
|
1403
|
+
' background: rgba(255,255,255,0.015);',
|
|
1404
|
+
'}',
|
|
1405
|
+
'.cumulus-settings-add-title { color: #ddd; font-size: 12px; font-weight: 650; margin-bottom: 9px; }',
|
|
1406
|
+
'.cumulus-settings-add-row {',
|
|
1407
|
+
' display: grid; grid-template-columns: 130px minmax(150px,1.4fr) minmax(120px,1fr) 110px auto;',
|
|
1408
|
+
' gap: 7px; align-items: center;',
|
|
1409
|
+
'}',
|
|
1410
|
+
'.cumulus-settings-select {',
|
|
1411
|
+
' background: #1a1a1a; border: 1px solid #3a3a3a; color: #e0e0e0;',
|
|
1412
|
+
' padding: 7px 9px; border-radius: 6px; font-size: 12px; font-family: inherit; outline: none;',
|
|
1413
|
+
'}',
|
|
1230
1414
|
'.cumulus-settings-input {',
|
|
1231
1415
|
' background: #1a1a1a; border: 1px solid #3a3a3a; color: #e0e0e0;',
|
|
1232
1416
|
' padding: 7px 9px; border-radius: 6px; font-size: 12px; font-family: inherit; outline: none;',
|
|
@@ -1250,6 +1434,19 @@
|
|
|
1250
1434
|
'.cumulus-settings-status { font-size: 12px; color: #999; }',
|
|
1251
1435
|
'.cumulus-settings-status.success { color: #22c55e; }',
|
|
1252
1436
|
'.cumulus-settings-status.error { color: #ef4444; }',
|
|
1437
|
+
'@media (max-width: 720px) {',
|
|
1438
|
+
' .cumulus-settings-backdrop { padding: 8px; align-items: stretch; }',
|
|
1439
|
+
' .cumulus-settings-modal { max-height: 100%; border-radius: 8px; }',
|
|
1440
|
+
' .cumulus-settings-add-row { grid-template-columns: 1fr 1fr; }',
|
|
1441
|
+
' .cumulus-settings-add-row .cumulus-settings-add-btn { grid-column: 1 / -1; }',
|
|
1442
|
+
' .cumulus-settings-provider-credential { grid-template-columns: 1fr auto; gap: 5px; }',
|
|
1443
|
+
' .cumulus-settings-provider-credential label { grid-column: 1 / -1; }',
|
|
1444
|
+
' .cumulus-settings-model-row, .cumulus-settings-model-row.anthropic {',
|
|
1445
|
+
' grid-template-columns: auto auto 1fr auto;',
|
|
1446
|
+
' }',
|
|
1447
|
+
' .cumulus-settings-model-row .cumulus-settings-row-input { grid-column: 3 / 4; }',
|
|
1448
|
+
' .cumulus-settings-model-row .cumulus-settings-model-remove { grid-column: 4; grid-row: 1 / 3; }',
|
|
1449
|
+
'}',
|
|
1253
1450
|
|
|
1254
1451
|
/* ── Context menu (right-click on thread) ── */
|
|
1255
1452
|
'.cumulus-context-menu {',
|
|
@@ -5767,6 +5964,63 @@
|
|
|
5767
5964
|
});
|
|
5768
5965
|
}
|
|
5769
5966
|
|
|
5967
|
+
function selectHasValue(select, value) {
|
|
5968
|
+
for (var i = 0; i < select.options.length; i++) {
|
|
5969
|
+
if (select.options[i].value === value) return true;
|
|
5970
|
+
}
|
|
5971
|
+
return false;
|
|
5972
|
+
}
|
|
5973
|
+
|
|
5974
|
+
function applyModelCatalogResponse(response, preserveSelection) {
|
|
5975
|
+
response = response || {};
|
|
5976
|
+
var previousModel = preserveSelection ? modelSelect.value : '';
|
|
5977
|
+
var previousClaudeModel = preserveSelection ? claudeModelSelect.value : '';
|
|
5978
|
+
modelProviders = {};
|
|
5979
|
+
modelSelect.innerHTML = '';
|
|
5980
|
+
(response.models || []).forEach(function (model) {
|
|
5981
|
+
var option = document.createElement('option');
|
|
5982
|
+
option.value = model.id;
|
|
5983
|
+
option.textContent = model.label || model.id;
|
|
5984
|
+
modelSelect.appendChild(option);
|
|
5985
|
+
if (model.provider) modelProviders[model.id] = model.provider;
|
|
5986
|
+
});
|
|
5987
|
+
populateClaudeModels(response.claudeModels);
|
|
5988
|
+
var previousClaudeStillValid =
|
|
5989
|
+
previousClaudeModel && selectHasValue(claudeModelSelect, previousClaudeModel);
|
|
5990
|
+
if (previousClaudeStillValid) claudeModelSelect.value = previousClaudeModel;
|
|
5991
|
+
var defaultModel = (response.models || []).find(function (model) {
|
|
5992
|
+
return model.default;
|
|
5993
|
+
});
|
|
5994
|
+
var defaultModelId = defaultModel
|
|
5995
|
+
? defaultModel.id
|
|
5996
|
+
: response.models && response.models[0] && response.models[0].id;
|
|
5997
|
+
var previousModelStillValid = previousModel && selectHasValue(modelSelect, previousModel);
|
|
5998
|
+
var nextModel = previousModelStillValid ? previousModel : defaultModelId;
|
|
5999
|
+
if (nextModel) {
|
|
6000
|
+
modelSelect.value = nextModel;
|
|
6001
|
+
getThreadState(threadName).model = nextModel;
|
|
6002
|
+
}
|
|
6003
|
+
if (
|
|
6004
|
+
preserveSelection &&
|
|
6005
|
+
((!previousModelStillValid && previousModel) ||
|
|
6006
|
+
(!previousClaudeStillValid && previousClaudeModel))
|
|
6007
|
+
) {
|
|
6008
|
+
var fallbackPatch = {};
|
|
6009
|
+
if (!previousModelStillValid && previousModel && nextModel)
|
|
6010
|
+
fallbackPatch.model = nextModel;
|
|
6011
|
+
if (!previousClaudeStillValid && previousClaudeModel && claudeModelSelect.value) {
|
|
6012
|
+
fallbackPatch.claudeModel = claudeModelSelect.value;
|
|
6013
|
+
}
|
|
6014
|
+
var fallbackSave = new XMLHttpRequest();
|
|
6015
|
+
fallbackSave.open('PUT', '/api/thread/' + encodeURIComponent(threadName) + '/config');
|
|
6016
|
+
fallbackSave.setRequestHeader('Content-Type', 'application/json');
|
|
6017
|
+
fallbackSave.setRequestHeader('X-API-Key', activeApiKey);
|
|
6018
|
+
fallbackSave.send(JSON.stringify(fallbackPatch));
|
|
6019
|
+
}
|
|
6020
|
+
updateEffortVisibility();
|
|
6021
|
+
return defaultModelId;
|
|
6022
|
+
}
|
|
6023
|
+
|
|
5770
6024
|
function updateEffortVisibility() {
|
|
5771
6025
|
var isClaude = modelSelect.value === 'claude';
|
|
5772
6026
|
effortSelect.style.display = isClaude ? '' : 'none';
|
|
@@ -5788,30 +6042,7 @@
|
|
|
5788
6042
|
if (xhr.status === 200) {
|
|
5789
6043
|
try {
|
|
5790
6044
|
var resp = JSON.parse(xhr.responseText);
|
|
5791
|
-
|
|
5792
|
-
(resp.models || []).forEach(function (m) {
|
|
5793
|
-
var opt = document.createElement('option');
|
|
5794
|
-
opt.value = m.id;
|
|
5795
|
-
opt.textContent = m.label || m.id;
|
|
5796
|
-
modelSelect.appendChild(opt);
|
|
5797
|
-
if (m.provider) modelProviders[m.id] = m.provider;
|
|
5798
|
-
});
|
|
5799
|
-
// Config-driven Claude sub-model list (Opus/Sonnet/...)
|
|
5800
|
-
populateClaudeModels(resp.claudeModels);
|
|
5801
|
-
// Find the default model from the API response (global config default)
|
|
5802
|
-
var defaultModel = resp.models.find(function (m) {
|
|
5803
|
-
return m.default;
|
|
5804
|
-
});
|
|
5805
|
-
var defaultModelId = defaultModel
|
|
5806
|
-
? defaultModel.id
|
|
5807
|
-
: resp.models[0] && resp.models[0].id;
|
|
5808
|
-
|
|
5809
|
-
// Set initial dropdown to the global default (for new threads)
|
|
5810
|
-
if (defaultModelId) {
|
|
5811
|
-
modelSelect.value = defaultModelId;
|
|
5812
|
-
var ts = getThreadState(threadName);
|
|
5813
|
-
ts.model = defaultModelId;
|
|
5814
|
-
}
|
|
6045
|
+
var defaultModelId = applyModelCatalogResponse(resp, false);
|
|
5815
6046
|
|
|
5816
6047
|
// Fetch the thread's saved config to override the default
|
|
5817
6048
|
var cfgXhr = new XMLHttpRequest();
|
|
@@ -5866,6 +6097,14 @@
|
|
|
5866
6097
|
};
|
|
5867
6098
|
xhr.send();
|
|
5868
6099
|
})();
|
|
6100
|
+
function handleModelCatalogUpdate(event) {
|
|
6101
|
+
if (!panel.isConnected) {
|
|
6102
|
+
window.removeEventListener('cumulus-model-catalog-updated', handleModelCatalogUpdate);
|
|
6103
|
+
return;
|
|
6104
|
+
}
|
|
6105
|
+
applyModelCatalogResponse(event.detail, true);
|
|
6106
|
+
}
|
|
6107
|
+
window.addEventListener('cumulus-model-catalog-updated', handleModelCatalogUpdate);
|
|
5869
6108
|
modelSelect.addEventListener('change', function () {
|
|
5870
6109
|
var newModel = modelSelect.value;
|
|
5871
6110
|
var ts = getThreadState(threadName);
|
|
@@ -5946,7 +6185,7 @@
|
|
|
5946
6185
|
modelPicker.appendChild(configBreadcrumb);
|
|
5947
6186
|
modelPicker.appendChild(modelPopover);
|
|
5948
6187
|
|
|
5949
|
-
// ── Settings modal (
|
|
6188
|
+
// ── Settings modal (provider-organized model catalog + credentials) ──
|
|
5950
6189
|
// Live-editable via PUT /api/config (task 104) — takes effect on the NEXT turn
|
|
5951
6190
|
// with no restart, no JSON edit, no republish. Any valid gateway key.
|
|
5952
6191
|
function openSettingsModal() {
|
|
@@ -5965,7 +6204,7 @@
|
|
|
5965
6204
|
var mSub = document.createElement('div');
|
|
5966
6205
|
mSub.className = 'cumulus-settings-subtitle';
|
|
5967
6206
|
mSub.textContent =
|
|
5968
|
-
'
|
|
6207
|
+
'Manage Anthropic, OpenAI, and HuggingFace models — changes apply to new turns instantly';
|
|
5969
6208
|
mHeaderText.appendChild(mTitle);
|
|
5970
6209
|
mHeaderText.appendChild(mSub);
|
|
5971
6210
|
var mClose = document.createElement('button');
|
|
@@ -5984,69 +6223,63 @@
|
|
|
5984
6223
|
|
|
5985
6224
|
var modelsLabel = document.createElement('div');
|
|
5986
6225
|
modelsLabel.className = 'cumulus-settings-section-label';
|
|
5987
|
-
modelsLabel.textContent = '
|
|
6226
|
+
modelsLabel.textContent = 'Models by provider';
|
|
5988
6227
|
body.appendChild(modelsLabel);
|
|
5989
6228
|
|
|
5990
6229
|
var gwList = document.createElement('div');
|
|
5991
6230
|
gwList.setAttribute('data-testid', 'webchat-gateway-models');
|
|
5992
6231
|
body.appendChild(gwList);
|
|
5993
6232
|
|
|
6233
|
+
var addCard = document.createElement('div');
|
|
6234
|
+
addCard.className = 'cumulus-settings-add-card';
|
|
6235
|
+
var addTitle = document.createElement('div');
|
|
6236
|
+
addTitle.className = 'cumulus-settings-add-title';
|
|
6237
|
+
addTitle.textContent = 'Add a model';
|
|
6238
|
+
addCard.appendChild(addTitle);
|
|
5994
6239
|
var addWrap = document.createElement('div');
|
|
5995
6240
|
addWrap.className = 'cumulus-settings-add-row';
|
|
6241
|
+
var addProvider = document.createElement('select');
|
|
6242
|
+
addProvider.className = 'cumulus-settings-select';
|
|
6243
|
+
addProvider.setAttribute('data-testid', 'webchat-gw-add-provider');
|
|
6244
|
+
[
|
|
6245
|
+
{ value: 'anthropic', label: 'Anthropic' },
|
|
6246
|
+
{ value: 'openai', label: 'OpenAI' },
|
|
6247
|
+
{ value: 'huggingface', label: 'HuggingFace' },
|
|
6248
|
+
].forEach(function (provider) {
|
|
6249
|
+
var option = document.createElement('option');
|
|
6250
|
+
option.value = provider.value;
|
|
6251
|
+
option.textContent = provider.label;
|
|
6252
|
+
addProvider.appendChild(option);
|
|
6253
|
+
});
|
|
5996
6254
|
var addId = document.createElement('input');
|
|
5997
6255
|
addId.type = 'text';
|
|
5998
6256
|
addId.className = 'cumulus-settings-input';
|
|
5999
|
-
addId.placeholder = '
|
|
6257
|
+
addId.placeholder = 'Model ID / name';
|
|
6000
6258
|
addId.setAttribute('data-testid', 'webchat-gw-add-id');
|
|
6001
|
-
addId.style.cssText = 'flex:1;min-width:0;';
|
|
6002
6259
|
var addLabel = document.createElement('input');
|
|
6003
6260
|
addLabel.type = 'text';
|
|
6004
6261
|
addLabel.className = 'cumulus-settings-input';
|
|
6005
|
-
addLabel.placeholder = 'label';
|
|
6262
|
+
addLabel.placeholder = 'Display label (optional)';
|
|
6006
6263
|
addLabel.setAttribute('data-testid', 'webchat-gw-add-label');
|
|
6007
|
-
|
|
6264
|
+
var addContext = document.createElement('input');
|
|
6265
|
+
addContext.type = 'number';
|
|
6266
|
+
addContext.min = '1';
|
|
6267
|
+
addContext.step = '1';
|
|
6268
|
+
addContext.className = 'cumulus-settings-input';
|
|
6269
|
+
addContext.placeholder = 'Context tokens';
|
|
6270
|
+
addContext.setAttribute('data-testid', 'webchat-gw-add-context');
|
|
6008
6271
|
var addBtn = document.createElement('button');
|
|
6272
|
+
addBtn.type = 'button';
|
|
6009
6273
|
addBtn.textContent = '+ Add';
|
|
6010
6274
|
addBtn.className = 'cumulus-settings-add-btn';
|
|
6011
6275
|
addBtn.setAttribute('data-testid', 'webchat-gw-add-btn');
|
|
6276
|
+
addWrap.appendChild(addProvider);
|
|
6012
6277
|
addWrap.appendChild(addId);
|
|
6013
6278
|
addWrap.appendChild(addLabel);
|
|
6279
|
+
addWrap.appendChild(addContext);
|
|
6014
6280
|
addWrap.appendChild(addBtn);
|
|
6015
|
-
|
|
6016
|
-
|
|
6017
|
-
var credLabel = document.createElement('div');
|
|
6018
|
-
credLabel.className = 'cumulus-settings-section-label';
|
|
6019
|
-
credLabel.textContent = 'Provider credentials';
|
|
6020
|
-
body.appendChild(credLabel);
|
|
6021
|
-
|
|
6022
|
-
var credRow = document.createElement('div');
|
|
6023
|
-
credRow.className = 'cumulus-settings-cred-row';
|
|
6024
|
-
var credLab = document.createElement('label');
|
|
6025
|
-
credLab.textContent = 'HuggingFace key';
|
|
6026
|
-
var credInput = document.createElement('input');
|
|
6027
|
-
credInput.type = 'text';
|
|
6028
|
-
credInput.className = 'cumulus-settings-input';
|
|
6029
|
-
credInput.placeholder = '(unset)';
|
|
6030
|
-
credInput.setAttribute('data-testid', 'webchat-gw-hfkey');
|
|
6031
|
-
credInput.style.cssText = 'flex:1;min-width:0;';
|
|
6032
|
-
credRow.appendChild(credLab);
|
|
6033
|
-
credRow.appendChild(credInput);
|
|
6034
|
-
body.appendChild(credRow);
|
|
6035
|
-
|
|
6036
|
-
var oaiRow = document.createElement('div');
|
|
6037
|
-
oaiRow.className = 'cumulus-settings-cred-row';
|
|
6038
|
-
var oaiLab = document.createElement('label');
|
|
6039
|
-
oaiLab.textContent = 'OpenAI key';
|
|
6040
|
-
var oaiInput = document.createElement('input');
|
|
6041
|
-
oaiInput.type = 'text';
|
|
6042
|
-
oaiInput.className = 'cumulus-settings-input';
|
|
6043
|
-
oaiInput.placeholder = '(unset)';
|
|
6044
|
-
oaiInput.setAttribute('data-testid', 'webchat-gw-openaikey');
|
|
6045
|
-
oaiInput.style.cssText = 'flex:1;min-width:0;';
|
|
6046
|
-
oaiRow.appendChild(oaiLab);
|
|
6047
|
-
oaiRow.appendChild(oaiInput);
|
|
6048
|
-
body.appendChild(oaiRow);
|
|
6049
|
-
|
|
6281
|
+
addCard.appendChild(addWrap);
|
|
6282
|
+
body.appendChild(addCard);
|
|
6050
6283
|
modal.appendChild(body);
|
|
6051
6284
|
|
|
6052
6285
|
var footer = document.createElement('div');
|
|
@@ -6067,164 +6300,414 @@
|
|
|
6067
6300
|
});
|
|
6068
6301
|
document.body.appendChild(backdrop);
|
|
6069
6302
|
|
|
6070
|
-
var
|
|
6071
|
-
|
|
6072
|
-
|
|
6073
|
-
|
|
6074
|
-
|
|
6075
|
-
|
|
6076
|
-
|
|
6077
|
-
|
|
6078
|
-
|
|
6079
|
-
}
|
|
6080
|
-
|
|
6081
|
-
|
|
6082
|
-
|
|
6083
|
-
|
|
6084
|
-
|
|
6085
|
-
|
|
6086
|
-
|
|
6087
|
-
|
|
6088
|
-
|
|
6089
|
-
|
|
6090
|
-
|
|
6091
|
-
|
|
6092
|
-
|
|
6093
|
-
|
|
6094
|
-
|
|
6095
|
-
|
|
6303
|
+
var gwState = { catalog: [], sentinel: null };
|
|
6304
|
+
var credentialInputs = {};
|
|
6305
|
+
var credentialValues = { openai: '', huggingface: '' };
|
|
6306
|
+
var credentialClears = { openai: false, huggingface: false };
|
|
6307
|
+
var providerDefs = [
|
|
6308
|
+
{
|
|
6309
|
+
id: 'anthropic',
|
|
6310
|
+
title: 'Anthropic',
|
|
6311
|
+
description: 'Claude CLI models · authentication is managed by the Claude CLI',
|
|
6312
|
+
},
|
|
6313
|
+
{
|
|
6314
|
+
id: 'openai',
|
|
6315
|
+
title: 'OpenAI',
|
|
6316
|
+
description: 'Responses API models with direct tool use',
|
|
6317
|
+
credential: 'openaiApiKey',
|
|
6318
|
+
credentialTestId: 'webchat-gw-openaikey',
|
|
6319
|
+
},
|
|
6320
|
+
{
|
|
6321
|
+
id: 'huggingface',
|
|
6322
|
+
title: 'HuggingFace',
|
|
6323
|
+
description: 'OpenAI-compatible models served through the HuggingFace router',
|
|
6324
|
+
credential: 'hfApiKey',
|
|
6325
|
+
credentialTestId: 'webchat-gw-hfkey',
|
|
6326
|
+
},
|
|
6327
|
+
];
|
|
6328
|
+
|
|
6329
|
+
function setSettingsStatus(message, kind) {
|
|
6330
|
+
gwStatus.textContent = message || '';
|
|
6331
|
+
gwStatus.className = 'cumulus-settings-status' + (kind ? ' ' + kind : '');
|
|
6332
|
+
}
|
|
6333
|
+
|
|
6334
|
+
function makeRadioLabel(text, input) {
|
|
6335
|
+
var wrap = document.createElement('label');
|
|
6336
|
+
wrap.className = 'cumulus-settings-radio-label';
|
|
6337
|
+
wrap.appendChild(input);
|
|
6338
|
+
wrap.appendChild(document.createElement('br'));
|
|
6339
|
+
wrap.appendChild(document.createTextNode(text));
|
|
6340
|
+
return wrap;
|
|
6341
|
+
}
|
|
6342
|
+
|
|
6343
|
+
function renderModelRow(model, providerModels, index) {
|
|
6344
|
+
var row = document.createElement('div');
|
|
6345
|
+
row.className =
|
|
6346
|
+
'cumulus-settings-model-row ' +
|
|
6347
|
+
model.provider +
|
|
6348
|
+
(model.gatewayDefault ? ' is-default' : '');
|
|
6349
|
+
row.setAttribute('data-gw-model', model.id);
|
|
6350
|
+
row.setAttribute('data-testid', 'webchat-gw-row-' + model.provider + '-' + index);
|
|
6351
|
+
|
|
6352
|
+
var gatewayRadio = document.createElement('input');
|
|
6353
|
+
gatewayRadio.type = 'radio';
|
|
6354
|
+
gatewayRadio.name = 'gw-default';
|
|
6355
|
+
gatewayRadio.checked = !!model.gatewayDefault;
|
|
6356
|
+
gatewayRadio.setAttribute(
|
|
6357
|
+
'data-testid',
|
|
6358
|
+
'webchat-gw-default-' + model.provider + '-' + index
|
|
6359
|
+
);
|
|
6360
|
+
gatewayRadio.addEventListener('change', function () {
|
|
6361
|
+
gwState.catalog.forEach(function (item) {
|
|
6362
|
+
item.gatewayDefault = false;
|
|
6363
|
+
});
|
|
6364
|
+
model.gatewayDefault = true;
|
|
6365
|
+
if (model.provider === 'anthropic') {
|
|
6366
|
+
gwState.catalog.forEach(function (item) {
|
|
6367
|
+
if (item.provider === 'anthropic') item.providerDefault = false;
|
|
6368
|
+
});
|
|
6369
|
+
model.providerDefault = true;
|
|
6370
|
+
}
|
|
6371
|
+
renderGwModels();
|
|
6372
|
+
});
|
|
6373
|
+
row.appendChild(makeRadioLabel('gateway', gatewayRadio));
|
|
6374
|
+
|
|
6375
|
+
if (model.provider === 'anthropic') {
|
|
6376
|
+
var providerRadio = document.createElement('input');
|
|
6377
|
+
providerRadio.type = 'radio';
|
|
6378
|
+
providerRadio.name = 'gw-anthropic-default';
|
|
6379
|
+
providerRadio.checked = !!model.providerDefault;
|
|
6380
|
+
providerRadio.setAttribute(
|
|
6381
|
+
'data-testid',
|
|
6382
|
+
'webchat-gw-provider-default-anthropic-' + index
|
|
6383
|
+
);
|
|
6384
|
+
providerRadio.addEventListener('change', function () {
|
|
6385
|
+
gwState.catalog.forEach(function (item) {
|
|
6386
|
+
if (item.provider === 'anthropic') item.providerDefault = false;
|
|
6096
6387
|
});
|
|
6097
|
-
|
|
6388
|
+
model.providerDefault = true;
|
|
6389
|
+
if (
|
|
6390
|
+
gwState.catalog.some(function (item) {
|
|
6391
|
+
return item.provider === 'anthropic' && item.gatewayDefault;
|
|
6392
|
+
})
|
|
6393
|
+
) {
|
|
6394
|
+
gwState.catalog.forEach(function (item) {
|
|
6395
|
+
item.gatewayDefault = false;
|
|
6396
|
+
});
|
|
6397
|
+
model.gatewayDefault = true;
|
|
6398
|
+
}
|
|
6098
6399
|
renderGwModels();
|
|
6099
6400
|
});
|
|
6100
|
-
|
|
6101
|
-
|
|
6102
|
-
var
|
|
6103
|
-
|
|
6104
|
-
|
|
6105
|
-
|
|
6106
|
-
|
|
6107
|
-
|
|
6108
|
-
|
|
6109
|
-
|
|
6110
|
-
|
|
6111
|
-
|
|
6112
|
-
|
|
6113
|
-
|
|
6114
|
-
|
|
6115
|
-
|
|
6116
|
-
|
|
6117
|
-
|
|
6118
|
-
|
|
6119
|
-
|
|
6120
|
-
|
|
6121
|
-
|
|
6122
|
-
|
|
6123
|
-
|
|
6124
|
-
|
|
6125
|
-
|
|
6126
|
-
|
|
6401
|
+
row.appendChild(makeRadioLabel('Claude', providerRadio));
|
|
6402
|
+
} else {
|
|
6403
|
+
var spacer = document.createElement('span');
|
|
6404
|
+
row.appendChild(spacer);
|
|
6405
|
+
}
|
|
6406
|
+
|
|
6407
|
+
var idInput = document.createElement('input');
|
|
6408
|
+
idInput.type = 'text';
|
|
6409
|
+
idInput.className = 'cumulus-settings-input cumulus-settings-row-input';
|
|
6410
|
+
idInput.value = model.id;
|
|
6411
|
+
idInput.setAttribute('aria-label', providerModels.title + ' model ID');
|
|
6412
|
+
idInput.setAttribute('data-testid', 'webchat-gw-id-' + model.provider + '-' + index);
|
|
6413
|
+
idInput.addEventListener('input', function () {
|
|
6414
|
+
model.id = idInput.value;
|
|
6415
|
+
});
|
|
6416
|
+
row.appendChild(idInput);
|
|
6417
|
+
|
|
6418
|
+
var labelInput = document.createElement('input');
|
|
6419
|
+
labelInput.type = 'text';
|
|
6420
|
+
labelInput.className = 'cumulus-settings-input cumulus-settings-row-input';
|
|
6421
|
+
labelInput.value = model.label || model.id;
|
|
6422
|
+
labelInput.setAttribute('aria-label', providerModels.title + ' display label');
|
|
6423
|
+
labelInput.setAttribute(
|
|
6424
|
+
'data-testid',
|
|
6425
|
+
'webchat-gw-label-' + model.provider + '-' + index
|
|
6426
|
+
);
|
|
6427
|
+
labelInput.addEventListener('input', function () {
|
|
6428
|
+
model.label = labelInput.value;
|
|
6429
|
+
});
|
|
6430
|
+
row.appendChild(labelInput);
|
|
6431
|
+
|
|
6432
|
+
if (model.provider !== 'anthropic') {
|
|
6433
|
+
var contextInput = document.createElement('input');
|
|
6434
|
+
contextInput.type = 'number';
|
|
6435
|
+
contextInput.min = '1';
|
|
6436
|
+
contextInput.step = '1';
|
|
6437
|
+
contextInput.className = 'cumulus-settings-input cumulus-settings-row-input';
|
|
6438
|
+
contextInput.placeholder = 'Context';
|
|
6439
|
+
contextInput.value = model.contextWindow || '';
|
|
6440
|
+
contextInput.setAttribute('aria-label', providerModels.title + ' context window');
|
|
6441
|
+
contextInput.setAttribute(
|
|
6442
|
+
'data-testid',
|
|
6443
|
+
'webchat-gw-context-' + model.provider + '-' + index
|
|
6444
|
+
);
|
|
6445
|
+
contextInput.addEventListener('input', function () {
|
|
6446
|
+
model.contextWindow = contextInput.value ? Number(contextInput.value) : undefined;
|
|
6127
6447
|
});
|
|
6448
|
+
row.appendChild(contextInput);
|
|
6449
|
+
}
|
|
6450
|
+
|
|
6451
|
+
var remove = document.createElement('button');
|
|
6452
|
+
remove.type = 'button';
|
|
6453
|
+
remove.className = 'cumulus-settings-model-remove';
|
|
6454
|
+
remove.textContent = '\xD7';
|
|
6455
|
+
remove.title = 'Remove ' + model.id;
|
|
6456
|
+
remove.setAttribute('data-testid', 'webchat-gw-remove-' + model.provider + '-' + index);
|
|
6457
|
+
remove.addEventListener('click', function () {
|
|
6458
|
+
var absoluteIndex = gwState.catalog.indexOf(model);
|
|
6459
|
+
var wasGatewayDefault = model.gatewayDefault;
|
|
6460
|
+
var wasProviderDefault = model.providerDefault;
|
|
6461
|
+
if (absoluteIndex >= 0) gwState.catalog.splice(absoluteIndex, 1);
|
|
6462
|
+
if (wasGatewayDefault && gwState.catalog.length) {
|
|
6463
|
+
var nextGatewayDefault = gwState.catalog[0];
|
|
6464
|
+
nextGatewayDefault.gatewayDefault = true;
|
|
6465
|
+
if (nextGatewayDefault.provider === 'anthropic') {
|
|
6466
|
+
gwState.catalog.forEach(function (item) {
|
|
6467
|
+
if (item.provider === 'anthropic') item.providerDefault = false;
|
|
6468
|
+
});
|
|
6469
|
+
nextGatewayDefault.providerDefault = true;
|
|
6470
|
+
}
|
|
6471
|
+
}
|
|
6472
|
+
if (
|
|
6473
|
+
wasProviderDefault &&
|
|
6474
|
+
!gwState.catalog.some(function (item) {
|
|
6475
|
+
return item.provider === 'anthropic' && item.providerDefault;
|
|
6476
|
+
})
|
|
6477
|
+
) {
|
|
6478
|
+
var nextClaude = gwState.catalog.find(function (item) {
|
|
6479
|
+
return item.provider === 'anthropic';
|
|
6480
|
+
});
|
|
6481
|
+
if (nextClaude) nextClaude.providerDefault = true;
|
|
6482
|
+
}
|
|
6483
|
+
renderGwModels();
|
|
6484
|
+
});
|
|
6485
|
+
row.appendChild(remove);
|
|
6486
|
+
return row;
|
|
6487
|
+
}
|
|
6488
|
+
|
|
6489
|
+
function renderCredential(card, provider) {
|
|
6490
|
+
if (!provider.credential) {
|
|
6491
|
+
var note = document.createElement('div');
|
|
6492
|
+
note.className = 'cumulus-settings-credential-note';
|
|
6493
|
+
note.textContent = 'Authenticate with `claude login` on the gateway host.';
|
|
6494
|
+
card.appendChild(note);
|
|
6495
|
+
return;
|
|
6496
|
+
}
|
|
6497
|
+
var credentialRow = document.createElement('div');
|
|
6498
|
+
credentialRow.className = 'cumulus-settings-provider-credential';
|
|
6499
|
+
var credentialLabel = document.createElement('label');
|
|
6500
|
+
credentialLabel.textContent = 'API key';
|
|
6501
|
+
var credentialInput = document.createElement('input');
|
|
6502
|
+
credentialInput.type = 'password';
|
|
6503
|
+
credentialInput.autocomplete = 'off';
|
|
6504
|
+
credentialInput.className = 'cumulus-settings-input';
|
|
6505
|
+
credentialInput.placeholder = credentialClears[provider.id]
|
|
6506
|
+
? 'Will be cleared on save'
|
|
6507
|
+
: '(unset)';
|
|
6508
|
+
credentialInput.value = credentialValues[provider.id] || '';
|
|
6509
|
+
credentialInput.setAttribute('data-testid', provider.credentialTestId);
|
|
6510
|
+
credentialInput.addEventListener('input', function () {
|
|
6511
|
+
credentialValues[provider.id] = credentialInput.value;
|
|
6512
|
+
credentialClears[provider.id] = false;
|
|
6513
|
+
credentialInput.placeholder = '(unset)';
|
|
6514
|
+
});
|
|
6515
|
+
credentialInputs[provider.id] = credentialInput;
|
|
6516
|
+
var clear = document.createElement('button');
|
|
6517
|
+
clear.type = 'button';
|
|
6518
|
+
clear.className = 'cumulus-settings-clear-btn';
|
|
6519
|
+
clear.textContent = 'Clear';
|
|
6520
|
+
clear.setAttribute('data-testid', 'webchat-gw-clear-' + provider.id + '-key');
|
|
6521
|
+
clear.addEventListener('click', function () {
|
|
6522
|
+
credentialClears[provider.id] = true;
|
|
6523
|
+
credentialValues[provider.id] = '';
|
|
6524
|
+
credentialInput.value = '';
|
|
6525
|
+
credentialInput.placeholder = 'Will be cleared on save';
|
|
6526
|
+
setSettingsStatus('Credential marked for removal', '');
|
|
6527
|
+
});
|
|
6528
|
+
credentialRow.appendChild(credentialLabel);
|
|
6529
|
+
credentialRow.appendChild(credentialInput);
|
|
6530
|
+
credentialRow.appendChild(clear);
|
|
6531
|
+
card.appendChild(credentialRow);
|
|
6532
|
+
}
|
|
6128
6533
|
|
|
6129
|
-
|
|
6130
|
-
|
|
6131
|
-
|
|
6132
|
-
|
|
6133
|
-
|
|
6534
|
+
function renderGwModels() {
|
|
6535
|
+
gwList.innerHTML = '';
|
|
6536
|
+
credentialInputs = {};
|
|
6537
|
+
providerDefs.forEach(function (provider) {
|
|
6538
|
+
var providerModels = gwState.catalog.filter(function (model) {
|
|
6539
|
+
return model.provider === provider.id;
|
|
6540
|
+
});
|
|
6541
|
+
var card = document.createElement('section');
|
|
6542
|
+
card.className = 'cumulus-settings-provider-card';
|
|
6543
|
+
card.setAttribute('data-testid', 'webchat-gw-provider-' + provider.id);
|
|
6544
|
+
var head = document.createElement('div');
|
|
6545
|
+
head.className = 'cumulus-settings-provider-head';
|
|
6546
|
+
var heading = document.createElement('div');
|
|
6547
|
+
var title = document.createElement('div');
|
|
6548
|
+
title.className = 'cumulus-settings-provider-title';
|
|
6549
|
+
title.textContent = provider.title;
|
|
6550
|
+
var description = document.createElement('div');
|
|
6551
|
+
description.className = 'cumulus-settings-provider-desc';
|
|
6552
|
+
description.textContent = provider.description;
|
|
6553
|
+
heading.appendChild(title);
|
|
6554
|
+
heading.appendChild(description);
|
|
6555
|
+
var count = document.createElement('span');
|
|
6556
|
+
count.className = 'cumulus-settings-provider-count';
|
|
6557
|
+
count.textContent =
|
|
6558
|
+
providerModels.length + (providerModels.length === 1 ? ' model' : ' models');
|
|
6559
|
+
head.appendChild(heading);
|
|
6560
|
+
head.appendChild(count);
|
|
6561
|
+
card.appendChild(head);
|
|
6562
|
+
var list = document.createElement('div');
|
|
6563
|
+
list.className = 'cumulus-settings-provider-models';
|
|
6564
|
+
if (!providerModels.length) {
|
|
6565
|
+
var empty = document.createElement('div');
|
|
6566
|
+
empty.className = 'cumulus-settings-provider-empty';
|
|
6567
|
+
empty.textContent = 'No ' + provider.title + ' models configured.';
|
|
6568
|
+
list.appendChild(empty);
|
|
6569
|
+
} else {
|
|
6570
|
+
providerModels.forEach(function (model, index) {
|
|
6571
|
+
list.appendChild(renderModelRow(model, provider, index));
|
|
6572
|
+
});
|
|
6573
|
+
}
|
|
6574
|
+
card.appendChild(list);
|
|
6575
|
+
renderCredential(card, provider);
|
|
6576
|
+
gwList.appendChild(card);
|
|
6134
6577
|
});
|
|
6135
6578
|
}
|
|
6579
|
+
|
|
6580
|
+
addProvider.addEventListener('change', function () {
|
|
6581
|
+
addContext.disabled = addProvider.value === 'anthropic';
|
|
6582
|
+
if (addContext.disabled) addContext.value = '';
|
|
6583
|
+
});
|
|
6136
6584
|
addBtn.addEventListener('click', function () {
|
|
6137
6585
|
var id = (addId.value || '').trim();
|
|
6138
|
-
|
|
6139
|
-
var
|
|
6586
|
+
var provider = addProvider.value;
|
|
6587
|
+
var context = addContext.value ? Number(addContext.value) : undefined;
|
|
6588
|
+
if (!id) {
|
|
6589
|
+
setSettingsStatus('Model ID is required', 'error');
|
|
6590
|
+
return;
|
|
6591
|
+
}
|
|
6140
6592
|
if (
|
|
6141
|
-
|
|
6142
|
-
|
|
6593
|
+
id === 'claude' ||
|
|
6594
|
+
gwState.catalog.some(function (item) {
|
|
6595
|
+
return item.id === id;
|
|
6143
6596
|
})
|
|
6144
6597
|
) {
|
|
6145
|
-
|
|
6146
|
-
gwStatus.className = 'cumulus-settings-status error';
|
|
6598
|
+
setSettingsStatus('Duplicate or reserved model ID: ' + id, 'error');
|
|
6147
6599
|
return;
|
|
6148
6600
|
}
|
|
6149
|
-
|
|
6601
|
+
if (context !== undefined && (!Number.isInteger(context) || context <= 0)) {
|
|
6602
|
+
setSettingsStatus('Context window must be a positive whole number', 'error');
|
|
6603
|
+
return;
|
|
6604
|
+
}
|
|
6605
|
+
var model = {
|
|
6606
|
+
id: id,
|
|
6607
|
+
label: (addLabel.value || '').trim() || id,
|
|
6608
|
+
provider: provider,
|
|
6609
|
+
contextWindow: provider === 'anthropic' ? undefined : context,
|
|
6610
|
+
gatewayDefault: gwState.catalog.length === 0,
|
|
6611
|
+
providerDefault:
|
|
6612
|
+
provider === 'anthropic' &&
|
|
6613
|
+
!gwState.catalog.some(function (item) {
|
|
6614
|
+
return item.provider === 'anthropic';
|
|
6615
|
+
}),
|
|
6616
|
+
};
|
|
6617
|
+
gwState.catalog.push(model);
|
|
6150
6618
|
addId.value = '';
|
|
6151
6619
|
addLabel.value = '';
|
|
6152
|
-
|
|
6153
|
-
|
|
6620
|
+
addContext.value = '';
|
|
6621
|
+
setSettingsStatus('', '');
|
|
6154
6622
|
renderGwModels();
|
|
6155
6623
|
});
|
|
6624
|
+
|
|
6625
|
+
function refreshOpenModelCatalogs() {
|
|
6626
|
+
var refresh = new XMLHttpRequest();
|
|
6627
|
+
refresh.open('GET', '/api/models');
|
|
6628
|
+
refresh.setRequestHeader('X-API-Key', activeApiKey);
|
|
6629
|
+
refresh.onreadystatechange = function () {
|
|
6630
|
+
if (refresh.readyState !== 4 || refresh.status !== 200) return;
|
|
6631
|
+
try {
|
|
6632
|
+
window.dispatchEvent(
|
|
6633
|
+
new CustomEvent('cumulus-model-catalog-updated', {
|
|
6634
|
+
detail: JSON.parse(refresh.responseText),
|
|
6635
|
+
})
|
|
6636
|
+
);
|
|
6637
|
+
} catch (e) {
|
|
6638
|
+
/* keep the saved config even if a panel refresh fails */
|
|
6639
|
+
}
|
|
6640
|
+
};
|
|
6641
|
+
refresh.send();
|
|
6642
|
+
}
|
|
6643
|
+
|
|
6156
6644
|
saveBtn.addEventListener('click', function () {
|
|
6645
|
+
var validationError = validateModelCatalog(gwState.catalog);
|
|
6646
|
+
if (validationError) {
|
|
6647
|
+
setSettingsStatus(validationError, 'error');
|
|
6648
|
+
return;
|
|
6649
|
+
}
|
|
6157
6650
|
saveBtn.disabled = true;
|
|
6158
|
-
|
|
6159
|
-
|
|
6160
|
-
|
|
6161
|
-
|
|
6162
|
-
|
|
6163
|
-
}
|
|
6164
|
-
|
|
6165
|
-
|
|
6166
|
-
|
|
6167
|
-
|
|
6168
|
-
|
|
6169
|
-
|
|
6170
|
-
|
|
6171
|
-
|
|
6172
|
-
|
|
6173
|
-
|
|
6174
|
-
|
|
6175
|
-
if (sx.readyState !== 4) return;
|
|
6651
|
+
setSettingsStatus('Saving…', '');
|
|
6652
|
+
var payload = addCredentialPatch(modelCatalogToGatewayConfig(gwState), {
|
|
6653
|
+
openai: {
|
|
6654
|
+
value: credentialValues.openai,
|
|
6655
|
+
clear: credentialClears.openai,
|
|
6656
|
+
},
|
|
6657
|
+
huggingface: {
|
|
6658
|
+
value: credentialValues.huggingface,
|
|
6659
|
+
clear: credentialClears.huggingface,
|
|
6660
|
+
},
|
|
6661
|
+
});
|
|
6662
|
+
var save = new XMLHttpRequest();
|
|
6663
|
+
save.open('PUT', '/api/config');
|
|
6664
|
+
save.setRequestHeader('Content-Type', 'application/json');
|
|
6665
|
+
save.setRequestHeader('X-API-Key', activeApiKey);
|
|
6666
|
+
save.onreadystatechange = function () {
|
|
6667
|
+
if (save.readyState !== 4) return;
|
|
6176
6668
|
saveBtn.disabled = false;
|
|
6177
|
-
if (
|
|
6178
|
-
gwStatus.textContent = 'Saved — applies to new turns immediately';
|
|
6179
|
-
gwStatus.className = 'cumulus-settings-status success';
|
|
6669
|
+
if (save.status === 200) {
|
|
6180
6670
|
try {
|
|
6181
|
-
var
|
|
6182
|
-
|
|
6183
|
-
|
|
6671
|
+
var response = JSON.parse(save.responseText);
|
|
6672
|
+
gwState = gatewayConfigToModelCatalog(response);
|
|
6673
|
+
credentialClears.openai = false;
|
|
6674
|
+
credentialClears.huggingface = false;
|
|
6675
|
+
credentialValues.openai = response.openaiApiKey || '';
|
|
6676
|
+
credentialValues.huggingface = response.hfApiKey || '';
|
|
6677
|
+
renderGwModels();
|
|
6678
|
+
setSettingsStatus('Saved — applies to new turns immediately', 'success');
|
|
6679
|
+
refreshOpenModelCatalogs();
|
|
6184
6680
|
} catch (e) {
|
|
6185
|
-
|
|
6681
|
+
setSettingsStatus('Saved, but the response could not be rendered', 'error');
|
|
6186
6682
|
}
|
|
6187
|
-
// Live-refresh this thread's Claude model dropdown without a reload.
|
|
6188
|
-
var prevSel = claudeModelSelect.value;
|
|
6189
|
-
populateClaudeModels(gwModels);
|
|
6190
|
-
for (var pi = 0; pi < claudeModelSelect.options.length; pi++) {
|
|
6191
|
-
if (claudeModelSelect.options[pi].value === prevSel) {
|
|
6192
|
-
claudeModelSelect.value = prevSel;
|
|
6193
|
-
break;
|
|
6194
|
-
}
|
|
6195
|
-
}
|
|
6196
|
-
updateBreadcrumb();
|
|
6197
6683
|
} else {
|
|
6198
|
-
|
|
6199
|
-
gwStatus.className = 'cumulus-settings-status error';
|
|
6684
|
+
setSettingsStatus('Error ' + save.status, 'error');
|
|
6200
6685
|
}
|
|
6201
6686
|
};
|
|
6202
|
-
|
|
6687
|
+
save.send(JSON.stringify(payload));
|
|
6203
6688
|
});
|
|
6689
|
+
|
|
6204
6690
|
(function loadGatewayConfig() {
|
|
6205
|
-
var
|
|
6206
|
-
|
|
6207
|
-
|
|
6208
|
-
|
|
6209
|
-
if (
|
|
6210
|
-
if (
|
|
6691
|
+
var load = new XMLHttpRequest();
|
|
6692
|
+
load.open('GET', '/api/config');
|
|
6693
|
+
load.setRequestHeader('X-API-Key', activeApiKey);
|
|
6694
|
+
load.onreadystatechange = function () {
|
|
6695
|
+
if (load.readyState !== 4) return;
|
|
6696
|
+
if (load.status === 200) {
|
|
6211
6697
|
try {
|
|
6212
|
-
var
|
|
6213
|
-
|
|
6214
|
-
|
|
6215
|
-
|
|
6216
|
-
credInput.value = r.hfApiKey || '';
|
|
6217
|
-
oaiInput.value = r.openaiApiKey || '';
|
|
6698
|
+
var response = JSON.parse(load.responseText);
|
|
6699
|
+
gwState = gatewayConfigToModelCatalog(response);
|
|
6700
|
+
credentialValues.openai = response.openaiApiKey || '';
|
|
6701
|
+
credentialValues.huggingface = response.hfApiKey || '';
|
|
6218
6702
|
renderGwModels();
|
|
6219
6703
|
} catch (e) {
|
|
6220
|
-
|
|
6704
|
+
setSettingsStatus('Gateway settings response was invalid', 'error');
|
|
6221
6705
|
}
|
|
6222
6706
|
} else {
|
|
6223
|
-
|
|
6224
|
-
gwStatus.className = 'cumulus-settings-status error';
|
|
6707
|
+
setSettingsStatus('Load failed (' + load.status + ')', 'error');
|
|
6225
6708
|
}
|
|
6226
6709
|
};
|
|
6227
|
-
|
|
6710
|
+
load.send();
|
|
6228
6711
|
})();
|
|
6229
6712
|
}
|
|
6230
6713
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentic-loop.d.ts","sourceRoot":"","sources":["../../src/lib/agentic-loop.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agentic-loop.d.ts","sourceRoot":"","sources":["../../src/lib/agentic-loop.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/agentic-loop.js
CHANGED
|
@@ -151,11 +151,24 @@ export async function runAgenticLoop(options) {
|
|
|
151
151
|
onToken?.(text);
|
|
152
152
|
};
|
|
153
153
|
// ═══ THE LOOP ═══
|
|
154
|
+
let hitTurnCap = false;
|
|
154
155
|
while (turns < maxTurns) {
|
|
155
156
|
turns++;
|
|
156
157
|
if (signal?.aborted) {
|
|
157
158
|
throw new Error('Aborted');
|
|
158
159
|
}
|
|
160
|
+
// Anti-livelock (task 124): on the final turn of an all-tool-use chain (no
|
|
161
|
+
// committed text yet), tell the model to stop calling tools and answer now.
|
|
162
|
+
// A nudge, not a guarantee — the model may still tool_use and hit the cap,
|
|
163
|
+
// in which case the post-loop synthesis below fires.
|
|
164
|
+
const isLastTurn = turns === maxTurns;
|
|
165
|
+
if (isLastTurn && !fullResponse && !pendingContinuationText) {
|
|
166
|
+
messages.push({
|
|
167
|
+
role: 'user',
|
|
168
|
+
content: 'You are about to hit your turn limit. Stop calling tools and give your ' +
|
|
169
|
+
'final answer in plain text — even if incomplete.',
|
|
170
|
+
});
|
|
171
|
+
}
|
|
159
172
|
// Call the LLM — only eager tool defs sent (re-deferred each turn).
|
|
160
173
|
// Text is provisional until the stop reason is known: models commonly emit
|
|
161
174
|
// private planning prose beside tool calls as ordinary text, not <thinking>.
|
|
@@ -366,11 +379,35 @@ export async function runAgenticLoop(options) {
|
|
|
366
379
|
}));
|
|
367
380
|
// Add tool results as next user message
|
|
368
381
|
messages.push({ role: 'user', content: toolResults });
|
|
382
|
+
// If we just consumed the final turn, the while condition will exit the loop.
|
|
383
|
+
// Mark it so the post-loop handler can distinguish a cap exhaust from a break.
|
|
384
|
+
if (turns >= maxTurns) {
|
|
385
|
+
hitTurnCap = true;
|
|
386
|
+
}
|
|
369
387
|
}
|
|
370
388
|
// If the loop-level turn cap ended a pure-text continuation chain, return the
|
|
371
389
|
// best available answer rather than silently dropping all provisional text.
|
|
372
390
|
// Tool-bound prose never enters this buffer, so it remains hidden.
|
|
373
391
|
commitVisibleText(pendingContinuationText);
|
|
392
|
+
// Turn-cap exhaust with no committed text (task 124): every other exit path logs
|
|
393
|
+
// and commits, but the while-condition exhaust used to fall through with '' — the
|
|
394
|
+
// gateway then persisted nothing and the user saw silence. Log it and synthesize a
|
|
395
|
+
// terminal message. The text is loop-generated, so it carries no leaked planning.
|
|
396
|
+
if (hitTurnCap && !fullResponse) {
|
|
397
|
+
const toolCount = allToolCalls.length;
|
|
398
|
+
const toolNames = [...new Set(allToolCalls.map(c => c.name))];
|
|
399
|
+
const toolSummary = toolCount > 0
|
|
400
|
+
? `${toolCount} tool operation${toolCount === 1 ? '' : 's'}` +
|
|
401
|
+
(toolNames.length > 0
|
|
402
|
+
? ` (${toolNames.slice(0, 5).join(', ')}${toolNames.length > 5 ? ', …' : ''})`
|
|
403
|
+
: '')
|
|
404
|
+
: 'no completed tool operations';
|
|
405
|
+
console.log(`[AgenticLoop] EXIT: turn cap (maxTurns=${maxTurns}) exhausted after ${turns} turns — ` +
|
|
406
|
+
`${toolSummary}, no terminal answer`);
|
|
407
|
+
commitVisibleText(`I hit my turn limit (${maxTurns} turns) after ${toolSummary} without reaching a final answer. ` +
|
|
408
|
+
`I may be stuck in a tool loop. Please re-prompt me — telling me what to focus on, or to stop ` +
|
|
409
|
+
`and summarize what I have so far, will usually unstick it.`);
|
|
410
|
+
}
|
|
374
411
|
return {
|
|
375
412
|
status: 'done',
|
|
376
413
|
response: fullResponse,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentic-loop.js","sourceRoot":"","sources":["../../src/lib/agentic-loop.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agentic-loop.js","sourceRoot":"","sources":["../../src/lib/agentic-loop.ts"],"names":[],"mappings":"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"}
|