@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 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 (gateway Claude model catalog + provider creds) ── */
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(520px, 100%); max-height: 82vh; display: flex; flex-direction: column;',
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: flex; align-items: center; gap: 11px; padding: 9px 11px;',
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-add-row { display: flex; gap: 7px; align-items: center; margin-top: 4px; }',
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
- modelSelect.innerHTML = '';
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 (gateway Claude model catalog + provider credentials) ──
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
- 'Available Claude models & provider credentialsapplied instantly, no restart';
6207
+ 'Manage Anthropic, OpenAI, and HuggingFace modelschanges 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 = 'Claude models';
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 = 'model id (e.g. claude-opus-5[1m])';
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
- addLabel.style.cssText = 'width:96px;';
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
- body.appendChild(addWrap);
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 gwModels = []; // [{id,label,default}]
6071
- function renderGwModels() {
6072
- gwList.innerHTML = '';
6073
- if (!gwModels.length) {
6074
- var empty = document.createElement('div');
6075
- empty.className = 'cumulus-overlay-empty';
6076
- empty.textContent = 'No models configured — add one below.';
6077
- gwList.appendChild(empty);
6078
- return;
6079
- }
6080
- gwModels.forEach(function (m, idx) {
6081
- var row = document.createElement('div');
6082
- row.className = 'cumulus-settings-model-row' + (m.default ? ' is-default' : '');
6083
- row.setAttribute('data-gw-model', m.id);
6084
-
6085
- var defWrap = document.createElement('label');
6086
- defWrap.className = 'cumulus-settings-default-toggle';
6087
- defWrap.title = 'Set as default';
6088
- var def = document.createElement('input');
6089
- def.type = 'radio';
6090
- def.name = 'gw-default';
6091
- def.checked = !!m.default;
6092
- def.setAttribute('data-testid', 'webchat-gw-default-' + idx);
6093
- def.addEventListener('change', function () {
6094
- gwModels.forEach(function (x) {
6095
- x.default = false;
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
- m.default = true;
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
- defWrap.appendChild(def);
6101
-
6102
- var name = document.createElement('div');
6103
- name.className = 'cumulus-settings-model-name';
6104
- var nameLabel = document.createElement('div');
6105
- nameLabel.className = 'cumulus-settings-model-label';
6106
- nameLabel.textContent = m.label || m.id;
6107
- var nameId = document.createElement('div');
6108
- nameId.className = 'cumulus-settings-model-id';
6109
- nameId.textContent = m.id;
6110
- name.appendChild(nameLabel);
6111
- name.appendChild(nameId);
6112
-
6113
- var badge = document.createElement('span');
6114
- badge.className = 'cumulus-settings-default-badge';
6115
- badge.textContent = 'default';
6116
-
6117
- var rm = document.createElement('button');
6118
- rm.className = 'cumulus-settings-model-remove';
6119
- rm.textContent = '\xD7';
6120
- rm.title = 'Remove';
6121
- rm.setAttribute('data-testid', 'webchat-gw-remove-' + idx);
6122
- rm.addEventListener('click', function () {
6123
- var wasDefault = m.default;
6124
- gwModels.splice(idx, 1);
6125
- if (wasDefault && gwModels.length) gwModels[0].default = true;
6126
- renderGwModels();
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
- row.appendChild(defWrap);
6130
- row.appendChild(name);
6131
- row.appendChild(badge);
6132
- row.appendChild(rm);
6133
- gwList.appendChild(row);
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
- if (!id) return;
6139
- var label = (addLabel.value || '').trim() || id;
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
- gwModels.some(function (x) {
6142
- return x.id === id;
6593
+ id === 'claude' ||
6594
+ gwState.catalog.some(function (item) {
6595
+ return item.id === id;
6143
6596
  })
6144
6597
  ) {
6145
- gwStatus.textContent = 'Already in the list';
6146
- gwStatus.className = 'cumulus-settings-status error';
6598
+ setSettingsStatus('Duplicate or reserved model ID: ' + id, 'error');
6147
6599
  return;
6148
6600
  }
6149
- gwModels.push({ id: id, label: label, default: gwModels.length === 0 });
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
- gwStatus.textContent = '';
6153
- gwStatus.className = 'cumulus-settings-status';
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
- gwStatus.textContent = 'Saving…';
6159
- gwStatus.className = 'cumulus-settings-status';
6160
- var payload = {
6161
- claudeModels: gwModels.map(function (m) {
6162
- return { id: m.id, label: m.label, default: !!m.default };
6163
- }),
6164
- };
6165
- // Only send a REAL key — a masked value (bullets) means "unchanged".
6166
- var cred = (credInput.value || '').trim();
6167
- if (cred && cred.indexOf('•') === -1) payload.hfApiKey = cred;
6168
- var oaiCred = (oaiInput.value || '').trim();
6169
- if (oaiCred && oaiCred.indexOf('•') === -1) payload.openaiApiKey = oaiCred;
6170
- var sx = new XMLHttpRequest();
6171
- sx.open('PUT', '/api/config');
6172
- sx.setRequestHeader('Content-Type', 'application/json');
6173
- sx.setRequestHeader('X-API-Key', activeApiKey);
6174
- sx.onreadystatechange = function () {
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 (sx.status === 200) {
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 r = JSON.parse(sx.responseText);
6182
- if (r && r.hfApiKey !== undefined) credInput.value = r.hfApiKey;
6183
- if (r && r.openaiApiKey !== undefined) oaiInput.value = r.openaiApiKey;
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
- /* ignore */
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
- gwStatus.textContent = 'Error ' + sx.status;
6199
- gwStatus.className = 'cumulus-settings-status error';
6684
+ setSettingsStatus('Error ' + save.status, 'error');
6200
6685
  }
6201
6686
  };
6202
- sx.send(JSON.stringify(payload));
6687
+ save.send(JSON.stringify(payload));
6203
6688
  });
6689
+
6204
6690
  (function loadGatewayConfig() {
6205
- var gx = new XMLHttpRequest();
6206
- gx.open('GET', '/api/config');
6207
- gx.setRequestHeader('X-API-Key', activeApiKey);
6208
- gx.onreadystatechange = function () {
6209
- if (gx.readyState !== 4) return;
6210
- if (gx.status === 200) {
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 r = JSON.parse(gx.responseText);
6213
- gwModels = (r.claudeModels || []).map(function (m) {
6214
- return { id: m.id, label: m.label, default: !!m.default };
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
- /* ignore */
6704
+ setSettingsStatus('Gateway settings response was invalid', 'error');
6221
6705
  }
6222
6706
  } else {
6223
- gwStatus.textContent = 'Load failed (' + gx.status + ')';
6224
- gwStatus.className = 'cumulus-settings-status error';
6707
+ setSettingsStatus('Load failed (' + load.status + ')', 'error');
6225
6708
  }
6226
6709
  };
6227
- gx.send();
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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"}
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luckydraw/cumulus",
3
- "version": "0.31.62",
3
+ "version": "0.31.64",
4
4
  "description": "RLM-based CLI chat wrapper for Claude with external history context management",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",