omnius 1.0.153 → 1.0.155

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/dist/index.js CHANGED
@@ -12170,6 +12170,298 @@ function _readJson(path, fallback) {
12170
12170
  function _writeJson(path, value) {
12171
12171
  try { writeFileSync(path, JSON.stringify(value, null, 2)); } catch {}
12172
12172
  }
12173
+ const cohereEndpointCatalogFile = join(nexusDir, 'cohere-endpoint-catalog.json');
12174
+ var _cohereEndpointCatalog = {
12175
+ source: 'ollama',
12176
+ passthrough: false,
12177
+ endpointUrl: process.env.OLLAMA_HOST || process.env.OLLAMA_URL || 'http://localhost:11434',
12178
+ endpointAuth: '',
12179
+ models: [],
12180
+ pricingMenu: [],
12181
+ updatedAt: 0,
12182
+ };
12183
+ function _cohereRedactUrl(url) {
12184
+ var raw = String(url || '').trim();
12185
+ if (!raw) return '';
12186
+ try {
12187
+ var u = new URL(raw);
12188
+ u.username = '';
12189
+ u.password = '';
12190
+ u.search = '';
12191
+ u.hash = '';
12192
+ return u.toString().replace(/\\/+$/, '');
12193
+ } catch {
12194
+ return raw.replace(/([?&](?:api[_-]?key|key|token|auth)=)[^&]+/ig, '$1***');
12195
+ }
12196
+ }
12197
+ function _cohereNormalizeBaseUrl(rawUrl, passthrough) {
12198
+ var raw = String(rawUrl || '').trim() || 'http://localhost:11434';
12199
+ if (!passthrough) return raw.replace(/\\/+$/, '');
12200
+ return raw
12201
+ .replace(/\\/+$/, '')
12202
+ .replace(/\\/chat\\/completions$/, '')
12203
+ .replace(/\\/completions$/, '')
12204
+ .replace(/\\/models(\\/.*)?$/, '')
12205
+ .replace(/\\/v1$/, '')
12206
+ .replace(/\\/+$/, '');
12207
+ }
12208
+ function _cohereNormalizeModelRecord(model, source, passthrough) {
12209
+ if (!model) return null;
12210
+ var name = String(model.name || model.model || model.id || '').trim();
12211
+ if (!name) return null;
12212
+ var details = model.details || {};
12213
+ return {
12214
+ name: name,
12215
+ size: Number(model.size || 0) || 0,
12216
+ family: String(model.family || details.family || model.owned_by || ''),
12217
+ parameterSize: String(model.parameterSize || details.parameter_size || ''),
12218
+ quantization: String(model.quantization || details.quantization_level || ''),
12219
+ source: source || (passthrough ? 'openai-compatible' : 'ollama'),
12220
+ passthrough: !!passthrough,
12221
+ };
12222
+ }
12223
+ function _cohereModelLooksChatCapable(model) {
12224
+ var name = String(model && model.name || '').toLowerCase();
12225
+ var family = String(model && model.family || '').toLowerCase();
12226
+ var text = name + ' ' + family;
12227
+ if (!name) return false;
12228
+ if (/embed|embedding|rerank|nomic-bert|bge-|e5-|clip|whisper|tts|audio/i.test(text)) return false;
12229
+ if (/image|flux|stable.?diffusion|sdxl|dall|midjourney|vision-encoder/i.test(text)) return false;
12230
+ return true;
12231
+ }
12232
+ function _cohereChatScore(model) {
12233
+ var name = String(model && model.name || '').toLowerCase();
12234
+ var family = String(model && model.family || '').toLowerCase();
12235
+ var score = 1;
12236
+ if (/qwen3\\.5|qwen35|qwen3/i.test(name + ' ' + family)) score = 10;
12237
+ else if (/gpt-|claude|gemini|deepseek|llama|mistral|mixtral|command-r|nemotron|gemma/i.test(name + ' ' + family)) score = 8;
12238
+ else if (/chat|instruct|turbo|sonnet|opus|haiku/i.test(name + ' ' + family)) score = 6;
12239
+ if (/^omnius-/i.test(name)) score += 3;
12240
+ if (model && model.passthrough) score += 1;
12241
+ return score;
12242
+ }
12243
+ function _cohereAnnotateModels(models, source, passthrough) {
12244
+ var out = [];
12245
+ var input = Array.isArray(models) ? models : [];
12246
+ for (var i = 0; i < input.length; i++) {
12247
+ var rec = _cohereNormalizeModelRecord(input[i], source, passthrough);
12248
+ if (!rec || !_cohereModelLooksChatCapable(rec)) continue;
12249
+ rec._chatScore = _cohereChatScore(rec);
12250
+ out.push(rec);
12251
+ }
12252
+ return out;
12253
+ }
12254
+ function _cohereApplyAllowlist(models) {
12255
+ if (!_cohereAllowedModels) return Array.isArray(models) ? models : [];
12256
+ return (Array.isArray(models) ? models : []).filter(function(m) { return _cohereAllowedModels.has(m.name); });
12257
+ }
12258
+ function _coherePersistEndpointCatalog() {
12259
+ var pub = _cohereEndpointSnapshot(_cohereEndpointCatalog);
12260
+ pub.models = (_cohereEndpointCatalog.models || []).map(function(m) {
12261
+ return {
12262
+ name: m.name,
12263
+ size: m.size || 0,
12264
+ family: m.family || '',
12265
+ parameterSize: m.parameterSize || '',
12266
+ quantization: m.quantization || '',
12267
+ source: m.source || _cohereEndpointCatalog.source,
12268
+ passthrough: !!m.passthrough,
12269
+ };
12270
+ });
12271
+ pub.pricingMenu = Array.isArray(_cohereEndpointCatalog.pricingMenu) ? _cohereEndpointCatalog.pricingMenu : [];
12272
+ _writeJson(cohereEndpointCatalogFile, pub);
12273
+ }
12274
+ function _cohereRememberEndpointCatalog(opts) {
12275
+ opts = opts || {};
12276
+ var passthrough = opts.passthrough === true;
12277
+ var source = String(opts.source || (passthrough ? 'openai-compatible' : 'ollama'));
12278
+ var endpointUrl = _cohereNormalizeBaseUrl(opts.endpointUrl || opts.ollamaUrl || process.env.OLLAMA_HOST || process.env.OLLAMA_URL || 'http://localhost:11434', passthrough);
12279
+ var models = _cohereAnnotateModels(opts.models || [], source, passthrough);
12280
+ _cohereEndpointCatalog = {
12281
+ source: source,
12282
+ passthrough: passthrough,
12283
+ endpointUrl: endpointUrl,
12284
+ endpointAuth: String(opts.endpointAuth || ''),
12285
+ models: models,
12286
+ pricingMenu: Array.isArray(opts.pricingMenu) ? opts.pricingMenu : [],
12287
+ updatedAt: Date.now(),
12288
+ };
12289
+ _coherePersistEndpointCatalog();
12290
+ dlog('COHERE endpoint catalog updated: source=' + source + ' passthrough=' + passthrough + ' models=' + models.length);
12291
+ return _cohereEndpointCatalog;
12292
+ }
12293
+ function _cohereLoadPersistedEndpointCatalog() {
12294
+ var stored = _readJson(cohereEndpointCatalogFile, null);
12295
+ if (!stored || !Array.isArray(stored.models)) return null;
12296
+ return {
12297
+ source: String(stored.source || 'cached'),
12298
+ passthrough: stored.passthrough === true,
12299
+ endpointUrl: String(stored.endpointUrl || ''),
12300
+ endpointAuth: '',
12301
+ models: _cohereAnnotateModels(stored.models, String(stored.source || 'cached'), stored.passthrough === true),
12302
+ pricingMenu: Array.isArray(stored.pricingMenu) ? stored.pricingMenu : [],
12303
+ updatedAt: Number(stored.updatedAt || 0) || 0,
12304
+ cachedOnly: true,
12305
+ };
12306
+ }
12307
+ async function _cohereFetchEndpointCatalog(baseUrl, endpointAuth, passthrough) {
12308
+ var endpointUrl = _cohereNormalizeBaseUrl(baseUrl, passthrough);
12309
+ if (passthrough) {
12310
+ var headers = { 'Content-Type': 'application/json' };
12311
+ if (endpointAuth) headers['Authorization'] = 'Bearer ' + endpointAuth;
12312
+ var resp = await fetch(endpointUrl + '/v1/models', { headers: headers, signal: AbortSignal.timeout(10000) });
12313
+ if (!resp.ok) throw new Error('/v1/models HTTP ' + resp.status);
12314
+ var data = await resp.json();
12315
+ var list = Array.isArray(data.data) ? data.data : (Array.isArray(data.models) ? data.models : []);
12316
+ return {
12317
+ source: 'openai-compatible',
12318
+ passthrough: true,
12319
+ endpointUrl: endpointUrl,
12320
+ endpointAuth: String(endpointAuth || ''),
12321
+ models: _cohereAnnotateModels(list.map(function(m) {
12322
+ return {
12323
+ name: m.id || m.name || m.model,
12324
+ family: m.owned_by || m.family || '',
12325
+ size: m.size || 0,
12326
+ };
12327
+ }), 'openai-compatible', true),
12328
+ pricingMenu: [],
12329
+ updatedAt: Date.now(),
12330
+ };
12331
+ }
12332
+ var tagsResp = await fetch(endpointUrl + '/api/tags', { signal: AbortSignal.timeout(10000) });
12333
+ if (!tagsResp.ok) throw new Error('/api/tags HTTP ' + tagsResp.status);
12334
+ var tags = await tagsResp.json();
12335
+ return {
12336
+ source: 'ollama',
12337
+ passthrough: false,
12338
+ endpointUrl: endpointUrl,
12339
+ endpointAuth: '',
12340
+ models: _cohereAnnotateModels(tags.models || [], 'ollama', false),
12341
+ pricingMenu: [],
12342
+ updatedAt: Date.now(),
12343
+ };
12344
+ }
12345
+ async function _cohereGetModelCatalog(opts) {
12346
+ opts = opts || {};
12347
+ var now = Date.now();
12348
+ var active = _cohereEndpointCatalog;
12349
+ if (!opts.forceRefresh && active && active.models && active.models.length > 0 && now - (active.updatedAt || 0) < 60000) {
12350
+ return active;
12351
+ }
12352
+ if (active && active.endpointUrl && (!active.cachedOnly || active.endpointAuth || !active.passthrough)) {
12353
+ try {
12354
+ var fresh = await _cohereFetchEndpointCatalog(active.endpointUrl, active.endpointAuth || '', !!active.passthrough);
12355
+ fresh.pricingMenu = Array.isArray(active.pricingMenu) ? active.pricingMenu : [];
12356
+ _cohereEndpointCatalog = fresh;
12357
+ _coherePersistEndpointCatalog();
12358
+ return _cohereEndpointCatalog;
12359
+ } catch (err) {
12360
+ dlog('COHERE endpoint catalog refresh failed: ' + (err.message || err));
12361
+ if (active.models && active.models.length > 0) return active;
12362
+ }
12363
+ }
12364
+ var persisted = _cohereLoadPersistedEndpointCatalog();
12365
+ if (persisted && persisted.models && persisted.models.length > 0) return persisted;
12366
+ try {
12367
+ var fallback = await _cohereFetchEndpointCatalog(process.env.OLLAMA_HOST || process.env.OLLAMA_URL || 'http://localhost:11434', '', false);
12368
+ _cohereEndpointCatalog = fallback;
12369
+ _coherePersistEndpointCatalog();
12370
+ return _cohereEndpointCatalog;
12371
+ } catch (err2) {
12372
+ dlog('COHERE local Ollama catalog unavailable: ' + (err2.message || err2));
12373
+ }
12374
+ return Object.assign({}, active || {}, { models: [] });
12375
+ }
12376
+ function _cohereEndpointSnapshot(catalog) {
12377
+ var c = catalog || _cohereEndpointCatalog || {};
12378
+ return {
12379
+ source: String(c.source || 'unknown'),
12380
+ passthrough: c.passthrough === true,
12381
+ endpointUrl: _cohereRedactUrl(c.endpointUrl || ''),
12382
+ modelCount: Array.isArray(c.models) ? c.models.length : 0,
12383
+ updatedAt: Number(c.updatedAt || 0) || 0,
12384
+ cachedOnly: c.cachedOnly === true,
12385
+ };
12386
+ }
12387
+ function _cohereSelectModel(catalog, tier) {
12388
+ var models = _cohereApplyAllowlist(catalog && catalog.models || []);
12389
+ if (models.length === 0) return { model: '', models: [] };
12390
+ var passthrough = catalog && catalog.passthrough === true;
12391
+ var gb = 1024 * 1024 * 1024;
12392
+ var maxThresh = tier === 0 ? 8 * gb : tier === 1 ? 50 * gb : tier === 2 ? 100 * gb : Infinity;
12393
+ var minSize = tier === 0 ? 0 : tier === 1 ? 4 * gb : tier === 2 ? 12 * gb : 25 * gb;
12394
+ models.sort(function(a, b) {
12395
+ var sa = a._chatScore || 1, sb = b._chatScore || 1;
12396
+ if (sa !== sb) return sb - sa;
12397
+ return (a.size || 0) - (b.size || 0);
12398
+ });
12399
+ var selected = '';
12400
+ if (_cLastModel) {
12401
+ var warm = models.find(function(m) { return m.name === _cLastModel; });
12402
+ if (warm && (passthrough || ((warm.size || 0) >= minSize && (warm.size || 0) <= maxThresh))) selected = warm.name;
12403
+ }
12404
+ if (!selected) {
12405
+ var fit = passthrough
12406
+ ? models
12407
+ : models.filter(function(m) { return (m.size || 0) >= minSize && (m.size || 0) <= maxThresh; });
12408
+ selected = fit.length > 0 ? fit[0].name : '';
12409
+ }
12410
+ if (!selected && models.length > 0) selected = models[0].name;
12411
+ return { model: selected, models: models };
12412
+ }
12413
+ async function _cohereDirectEndpointFallback(catalog, model, requestData) {
12414
+ if (!catalog || catalog.passthrough !== true || !catalog.endpointUrl) {
12415
+ throw new Error('No passthrough endpoint is active for direct COHERE fallback');
12416
+ }
12417
+ var headers = { 'Content-Type': 'application/json' };
12418
+ if (catalog.endpointAuth) headers['Authorization'] = 'Bearer ' + catalog.endpointAuth;
12419
+ var messages = [];
12420
+ if (requestData && Array.isArray(requestData.messages) && requestData.messages.length > 0) {
12421
+ messages = requestData.messages;
12422
+ } else {
12423
+ messages = [{ role: 'user', content: String(requestData && requestData.query || '') }];
12424
+ }
12425
+ var maxTokens = Number(requestData && (requestData.maxTokens || requestData.max_tokens)) || 1024;
12426
+ var temperature = Number(requestData && requestData.temperature);
12427
+ var body = {
12428
+ model: model,
12429
+ messages: messages,
12430
+ stream: false,
12431
+ max_tokens: maxTokens > 0 ? maxTokens : 1024,
12432
+ temperature: Number.isFinite(temperature) ? temperature : 0.2,
12433
+ think: false,
12434
+ };
12435
+ var resp = await fetch(_cohereNormalizeBaseUrl(catalog.endpointUrl, true) + '/v1/chat/completions', {
12436
+ method: 'POST',
12437
+ headers: headers,
12438
+ body: JSON.stringify(body),
12439
+ signal: AbortSignal.timeout(120000),
12440
+ });
12441
+ if (!resp.ok) {
12442
+ var errText = '';
12443
+ try { errText = await resp.text(); } catch {}
12444
+ throw new Error('passthrough /v1/chat/completions HTTP ' + resp.status + ': ' + errText.slice(0, 200));
12445
+ }
12446
+ var data = await resp.json();
12447
+ var choices = data.choices || [];
12448
+ var first = choices[0] && choices[0].message ? choices[0].message : {};
12449
+ var content = String(first.content || first.reasoning || '').replace(/<think>[\\s\\S]*?<\\/think>/g, '').trim();
12450
+ var usage = data.usage || {};
12451
+ return {
12452
+ content: content,
12453
+ usage: {
12454
+ inputTokens: usage.prompt_tokens || usage.input_tokens || 0,
12455
+ outputTokens: usage.completion_tokens || usage.output_tokens || 0,
12456
+ },
12457
+ };
12458
+ }
12459
+ try {
12460
+ var _cohereStartupCatalog = _cohereLoadPersistedEndpointCatalog();
12461
+ if (_cohereStartupCatalog && _cohereStartupCatalog.models && _cohereStartupCatalog.models.length > 0) {
12462
+ _cohereEndpointCatalog = _cohereStartupCatalog;
12463
+ }
12464
+ } catch {}
12173
12465
  async function _dhtPutBounded(dht, key, value, label) {
12174
12466
  var op = (async function() {
12175
12467
  for await (var _ of dht.put(key, value)) {}
@@ -13556,7 +13848,20 @@ async function handleCmd(cmd) {
13556
13848
 
13557
13849
  // WO-1.5: Publish capacity announcement on enable
13558
13850
  if (typeof _publishCapacityAnnouncement === 'function') {
13559
- try { _publishCapacityAnnouncement(); } catch {}
13851
+ try { await _publishCapacityAnnouncement(); } catch {}
13852
+ }
13853
+ try {
13854
+ var _ceCatalog = await _cohereGetModelCatalog({});
13855
+ await _publishCapabilityRecord('cohere_inference', {
13856
+ description: 'COHERE distributed inference provider',
13857
+ pricing: 'free',
13858
+ rateLimit: _sponsorLimits ? String(_sponsorLimits.maxRequestsPerMinute) + '/min' : 'provider-policy',
13859
+ endpoint: _cohereEndpointSnapshot(_ceCatalog),
13860
+ models: (_ceCatalog.models || []).map(function(m) { return m.name; }),
13861
+ passthrough: _ceCatalog.passthrough === true,
13862
+ });
13863
+ } catch (_cePubErr) {
13864
+ dlog('COHERE capability publish failed: ' + (_cePubErr.message || _cePubErr));
13560
13865
  }
13561
13866
  writeResp(id, { ok: true, output: 'COHERE inference handler enabled' });
13562
13867
  break;
@@ -13589,7 +13894,8 @@ async function handleCmd(cmd) {
13589
13894
  bytesOut: _cohereStats.bytesOut,
13590
13895
  modelsUsed: _cohereStats.modelsUsed,
13591
13896
  peersServed: _cohereStats.peersServed,
13592
- allowedModels: _cohereAllowedModels ? [..._cohereAllowedModels] : null
13897
+ allowedModels: _cohereAllowedModels ? [..._cohereAllowedModels] : null,
13898
+ endpoint: _cohereEndpointSnapshot(),
13593
13899
  };
13594
13900
  if (args.format === 'json' || args.json === true || args.json === 'true' || args.json === '1') {
13595
13901
  writeResp(id, { ok: true, output: JSON.stringify(_csSnapshot) });
@@ -13627,9 +13933,15 @@ async function handleCmd(cmd) {
13627
13933
  _csLines.push(' ' + _csPeers[_cpi][0].slice(0, 20) + '...: ' + _csPeers[_cpi][1] + ' queries');
13628
13934
  }
13629
13935
  _csLines.push('');
13936
+ _csLines.push('── Endpoint ──');
13937
+ var _csEndpoint = _cohereEndpointSnapshot();
13938
+ _csLines.push(' Source: ' + _csEndpoint.source + (_csEndpoint.passthrough ? ' (passthrough)' : ''));
13939
+ _csLines.push(' URL: ' + (_csEndpoint.endpointUrl || '(not set)'));
13940
+ _csLines.push(' Models: ' + _csEndpoint.modelCount + (_csEndpoint.cachedOnly ? ' (cached)' : ''));
13941
+ _csLines.push('');
13630
13942
  _csLines.push('── Model Allowlist ──');
13631
13943
  if (!_cohereAllowedModels) {
13632
- _csLines.push(' All downloaded models exposed (no filter)');
13944
+ _csLines.push(' All endpoint models exposed (no filter)');
13633
13945
  } else {
13634
13946
  _csLines.push(' ' + [..._cohereAllowedModels].join(', '));
13635
13947
  }
@@ -13659,21 +13971,36 @@ async function handleCmd(cmd) {
13659
13971
  break;
13660
13972
  }
13661
13973
  case 'cohere_list_models': {
13662
- var _clmOllamaUrl = process.env.OLLAMA_HOST || 'http://localhost:11434';
13663
- var _clmModels = [];
13664
- try {
13665
- var _clmResp = await fetch(_clmOllamaUrl + '/api/tags');
13666
- var _clmData = await _clmResp.json();
13667
- _clmModels = (_clmData.models || []).map(function(m) { return { name: m.name, size: m.size || 0, family: m.details?.family || '' }; });
13668
- } catch {}
13669
- var _clmLines = ['── Downloaded Models ──'];
13974
+ var _clmCatalog = await _cohereGetModelCatalog({ forceRefresh: args.refresh === 'true' || args.refresh === true || args.refresh === '1' });
13975
+ var _clmModels = Array.isArray(_clmCatalog.models) ? _clmCatalog.models : [];
13976
+ var _clmPayload = {
13977
+ models: _clmModels.map(function(m) { return m.name; }),
13978
+ exposedModels: _cohereApplyAllowlist(_clmModels).map(function(m) { return m.name; }),
13979
+ modelDetails: _clmModels.map(function(m) {
13980
+ return Object.assign({}, m, { exposed: !_cohereAllowedModels || _cohereAllowedModels.has(m.name) });
13981
+ }),
13982
+ source: _clmCatalog.source || 'unknown',
13983
+ passthrough: _clmCatalog.passthrough === true,
13984
+ endpoint: _cohereEndpointSnapshot(_clmCatalog),
13985
+ allowedModels: _cohereAllowedModels ? [..._cohereAllowedModels] : null,
13986
+ };
13987
+ if (args.format === 'json' || args.json === true || args.json === 'true' || args.json === '1') {
13988
+ writeResp(id, { ok: true, output: JSON.stringify(_clmPayload) });
13989
+ break;
13990
+ }
13991
+ var _clmLines = ['── Endpoint Models ──'];
13992
+ var _clmEndpoint = _cohereEndpointSnapshot(_clmCatalog);
13993
+ _clmLines.push(' Source: ' + _clmEndpoint.source + (_clmEndpoint.passthrough ? ' (passthrough)' : ''));
13994
+ _clmLines.push(' URL: ' + (_clmEndpoint.endpointUrl || '(not set)'));
13995
+ _clmLines.push('');
13670
13996
  for (var _clmi = 0; _clmi < _clmModels.length; _clmi++) {
13671
13997
  var _clmM = _clmModels[_clmi];
13672
13998
  var _clmAllowed = !_cohereAllowedModels || _cohereAllowedModels.has(_clmM.name);
13673
13999
  var _clmSizeGB = (_clmM.size / (1024*1024*1024)).toFixed(1);
13674
- _clmLines.push(' ' + (_clmAllowed ? '[EXPOSED]' : '[HIDDEN] ') + ' ' + _clmM.name + ' (' + _clmSizeGB + 'GB' + (_clmM.family ? ', ' + _clmM.family : '') + ')');
14000
+ var _clmMeta = _clmM.size > 0 ? _clmSizeGB + 'GB' : (_clmM.passthrough ? 'external' : 'size unknown');
14001
+ _clmLines.push(' ' + (_clmAllowed ? '[EXPOSED]' : '[HIDDEN] ') + ' ' + _clmM.name + ' (' + _clmMeta + (_clmM.family ? ', ' + _clmM.family : '') + ')');
13675
14002
  }
13676
- if (_clmModels.length === 0) _clmLines.push(' (no models found — is Ollama running?)');
14003
+ if (_clmModels.length === 0) _clmLines.push(' (no endpoint models found — check /endpoint and /expose passthrough)');
13677
14004
  _clmLines.push('');
13678
14005
  _clmLines.push(_cohereAllowedModels ? 'Allowlist: ' + [..._cohereAllowedModels].join(', ') : 'Allowlist: ALL (no filter active)');
13679
14006
  writeResp(id, { ok: true, output: _clmLines.join('\\n') });
@@ -14392,6 +14719,32 @@ async function handleCmd(cmd) {
14392
14719
  }
14393
14720
  }
14394
14721
 
14722
+ var _exCohereCatalog = _cohereRememberEndpointCatalog({
14723
+ source: isPassthrough ? 'openai-compatible' : 'ollama',
14724
+ passthrough: isPassthrough,
14725
+ endpointUrl: ollamaUrl,
14726
+ endpointAuth: endpointAuth,
14727
+ models: models,
14728
+ pricingMenu: pricingMenu,
14729
+ });
14730
+ if (cohereActive) {
14731
+ try {
14732
+ await _publishCapabilityRecord('cohere_inference', {
14733
+ description: 'COHERE distributed inference provider',
14734
+ pricing: 'free',
14735
+ rateLimit: _sponsorLimits ? String(_sponsorLimits.maxRequestsPerMinute) + '/min' : 'provider-policy',
14736
+ endpoint: _cohereEndpointSnapshot(_exCohereCatalog),
14737
+ models: (_exCohereCatalog.models || []).map(function(m) { return m.name; }),
14738
+ passthrough: isPassthrough,
14739
+ });
14740
+ } catch (_exCoherePubErr) {
14741
+ dlog('COHERE expose capability publish failed: ' + (_exCoherePubErr.message || _exCoherePubErr));
14742
+ }
14743
+ if (typeof _publishCapacityAnnouncement === 'function') {
14744
+ try { await _publishCapacityAnnouncement(); } catch {}
14745
+ }
14746
+ }
14747
+
14395
14748
  for (var pci = 0; pci < pricingMenu.length; pci++) {
14396
14749
  var capPricing = pricingMenu[pci];
14397
14750
  await _publishCapabilityRecord('inference:' + capPricing.model.replace(/[^a-zA-Z0-9._-]/g, '_'), {
@@ -15340,13 +15693,12 @@ process.on('unhandledRejection', (reason) => {
15340
15693
  }
15341
15694
 
15342
15695
  // ── COHERE distributed inference handler ─────────────────────────
15343
- // ── COHERE distributed inference handler ─────────────────────────
15344
- // Subscribe to nexus.cohere.query, process through local Ollama,
15345
- // publish response to nexus.cohere.response.
15696
+ // Subscribe to nexus.cohere.query, process through the active Omnius
15697
+ // endpoint catalog, publish response to nexus.cohere.response.
15346
15698
  // SECURITY INVARIANTS:
15347
15699
  // 1. Handler constructs ISOLATED messages — no history, no system prompt
15348
- // 2. Only /api/tags (read model list) and /api/chat (inference) are called
15349
- // 3. NEVER calls /api/pull, /api/delete, /api/push, /api/create, /api/copy
15700
+ // 2. Model discovery is read-only: /api/tags or /v1/models
15701
+ // 3. Inference uses /v1/run first; direct fallback is passthrough-only
15350
15702
  // 4. Model allowlist filters which models are served to remote queries
15351
15703
  // 5. Inbound queries scanned for leaked secrets
15352
15704
  if (_natsConn && _natsCodec) {
@@ -15534,89 +15886,34 @@ process.on('unhandledRejection', (reason) => {
15534
15886
  dlog('COHERE query: ' + _cData.queryId + ' — ' + (_cData.query || '').slice(0, 80) + ' [elected, score=' + _cBidScore.toFixed(2) + ', bids=' + _cBids.size + ']');
15535
15887
  const _cStart = Date.now();
15536
15888
 
15537
- // OLLAMA SAFETY: Only two endpoints are ever called:
15538
- // GET /api/tags read available models (READ-ONLY)
15539
- // POST /api/chat — run inference on existing model (READ-ONLY)
15889
+ // Endpoint safety: COHERE model discovery is read-only.
15890
+ // Ollama providers: GET /api/tags only
15891
+ // Passthrough providers: GET /v1/models only
15892
+ // Remote COHERE queries never call Ollama model-management endpoints.
15540
15893
  // The following are NEVER called from remote requests:
15541
15894
  // POST /api/pull — download model (BLOCKED)
15542
15895
  // DELETE /api/delete — remove model (BLOCKED)
15543
15896
  // POST /api/push — upload model (BLOCKED)
15544
15897
  // POST /api/create — create model (BLOCKED)
15545
15898
  // POST /api/copy — copy model (BLOCKED)
15546
- const _cOllamaUrl = process.env.OLLAMA_HOST || 'http://localhost:11434';
15899
+ var _cCatalog = null;
15547
15900
  let _cModel = '';
15548
15901
  try {
15549
- const _cTags = await fetch(_cOllamaUrl + '/api/tags').then(function(r) { return r.json(); });
15550
- // Filter out non-chat models: embeddings, image generators, vision-only
15551
- // Use family/families from Ollama model cards for capability detection
15552
- var _cAllModels = (_cTags.models || []).filter(function(m) {
15553
- var name = (m.name || '').toLowerCase();
15554
- var family = ((m.details && m.details.family) || '').toLowerCase();
15555
- var families = (m.details && m.details.families) || [];
15556
- var famStr = families.join(' ').toLowerCase();
15557
- // Exclude embeddings
15558
- if (/embed|nomic-bert/i.test(name) || /embed|nomic-bert/i.test(family)) return false;
15559
- // Exclude image generation models (flux, sd, sdxl, image-turbo, etc.)
15560
- if (/image|flux|stable.?diffusion|sdxl|sd[0-9]|dall|turbo.*image|image.*turbo/i.test(name)) return false;
15561
- if (/flux|diffusion/i.test(family)) return false;
15562
- // Exclude pure vision models (keep multimodal like qwen3-vl that also do chat)
15563
- if (/^clip$|^vit$/i.test(family)) return false;
15564
- return true;
15565
- });
15566
- // Score models for chat/tool capability: prefer qwen, then tool-capable families
15567
- var _cChatFamilies = { qwen35: 10, qwen35moe: 10, qwen3: 9, qwen3moe: 9, qwen3next: 9, nemotron_h_moe: 8, mistral3: 7, llama: 6, gemma3: 6, seed_oss: 5, phi2: 3 };
15568
- for (var _cmi = 0; _cmi < _cAllModels.length; _cmi++) {
15569
- var _cmFam = ((_cAllModels[_cmi].details && _cAllModels[_cmi].details.family) || '').toLowerCase();
15570
- _cAllModels[_cmi]._chatScore = _cChatFamilies[_cmFam] || 1;
15571
- // Boost omnius- prefixed models (known good configs)
15572
- if (/^omnius-/i.test(_cAllModels[_cmi].name)) _cAllModels[_cmi]._chatScore += 3;
15573
- }
15574
- // Apply model allowlist — only serve allowed models to remote queries
15575
- var _cModels = _cohereAllowedModels
15576
- ? _cAllModels.filter(function(m) { return _cohereAllowedModels.has(m.name); })
15577
- : _cAllModels;
15902
+ _cCatalog = await _cohereGetModelCatalog({});
15903
+ var _cSelected = _cohereSelectModel(_cCatalog, _cTier);
15904
+ var _cModels = _cSelected.models || [];
15578
15905
  if (_cModels.length === 0 && _cohereAllowedModels) {
15579
- dlog('COHERE: no allowed models match downloaded models. Allowlist: ' + [..._cohereAllowedModels].join(', '));
15906
+ dlog('COHERE: no allowed models match endpoint catalog. Allowlist: ' + [..._cohereAllowedModels].join(', '));
15580
15907
  _cohereStats.queriesErrors++;
15581
15908
  _saveStats();
15582
15909
  continue;
15583
15910
  }
15584
- // CO-04/05: Model selection — tier determines minimum size, warm gets priority within tier
15585
- var _cGB = 1024 * 1024 * 1024;
15586
- // Tier thresholds: [max for trivial, max for moderate, max for complex, unlimited]
15587
- var _cMaxThresh = _cTier === 0 ? 8 * _cGB : _cTier === 1 ? 50 * _cGB : _cTier === 2 ? 100 * _cGB : Infinity;
15588
- // Minimum size: higher tiers REQUIRE bigger models
15589
- var _cMinSize = _cTier === 0 ? 0 : _cTier === 1 ? 4 * _cGB : _cTier === 2 ? 12 * _cGB : 25 * _cGB;
15590
-
15591
- // Sort by chat capability score (desc), then size within same score (asc)
15592
- _cModels.sort(function(a, b) {
15593
- var sa = a._chatScore || 1, sb = b._chatScore || 1;
15594
- if (sa !== sb) return sb - sa; // higher chat score first
15595
- return (a.size || 0) - (b.size || 0); // then smaller first within same score
15596
- });
15597
-
15598
- // Prefer warm model ONLY if it meets the minimum size for this tier
15599
- if (_cLastModel) {
15600
- var _cWarm = _cModels.find(function(m) { return m.name === _cLastModel; });
15601
- if (_cWarm && (_cWarm.size || 0) >= _cMinSize && (_cWarm.size || 0) <= _cMaxThresh) {
15602
- _cModel = _cWarm.name;
15603
- }
15604
- }
15605
- // Otherwise pick best-scored model that fits the tier range
15606
- // Models already sorted by chatScore desc, so first match is best
15607
- if (!_cModel) {
15608
- var _cFit = _cModels.filter(function(m) { return (m.size || 0) >= _cMinSize && (m.size || 0) <= _cMaxThresh; });
15609
- // Pick the one with highest chat score (already sorted)
15610
- _cModel = _cFit.length > 0 ? _cFit[0].name : '';
15611
- }
15612
- // Fallback: if no model fits the range, take the best-scored available
15613
- if (!_cModel && _cModels.length > 0) {
15614
- _cModel = _cModels[0].name; // first = highest chatScore
15615
- dlog('COHERE: no model fits tier ' + _cTier + ' range [' + (_cMinSize / _cGB).toFixed(0) + 'GB-' + (_cMaxThresh / _cGB).toFixed(0) + 'GB], using best-scored: ' + _cModel);
15616
- }
15617
- dlog('COHERE routing: tier=' + ['trivial','moderate','complex','expert'][_cTier] + ' model=' + _cModel + ' (chatScore=' + ((_cModels.find(function(m){return m.name===_cModel})||{})._chatScore||'?') + ')');
15618
- } catch {}
15619
- if (!_cModel) { dlog('COHERE: no Ollama models available'); _cohereStats.queriesErrors++; _saveStats(); continue; }
15911
+ _cModel = _cSelected.model || '';
15912
+ dlog('COHERE routing: source=' + ((_cCatalog && _cCatalog.source) || 'unknown') + ' passthrough=' + (!!(_cCatalog && _cCatalog.passthrough)) + ' tier=' + ['trivial','moderate','complex','expert'][_cTier] + ' model=' + _cModel + ' (chatScore=' + ((_cModels.find(function(m){return m.name===_cModel})||{})._chatScore||'?') + ')');
15913
+ } catch (_cCatalogErr) {
15914
+ dlog('COHERE catalog error: ' + (_cCatalogErr.message || _cCatalogErr));
15915
+ }
15916
+ if (!_cModel) { dlog('COHERE: no endpoint models available'); _cohereStats.queriesErrors++; _saveStats(); continue; }
15620
15917
  try {
15621
15918
  // Scan inbound query for leaked secrets (defense-in-depth)
15622
15919
  const _cSecretPatterns = [/sk-[a-zA-Z0-9]{20,}/g, /ghp_[a-zA-Z0-9]{36,}/g, /AKIA[0-9A-Z]{16}/g];
@@ -15652,6 +15949,10 @@ process.on('unhandledRejection', (reason) => {
15652
15949
  if (_cApiAvailable) {
15653
15950
  dlog('COHERE: routing through full AgenticRunner at ' + _cApiUrl + '/v1/run');
15654
15951
  try {
15952
+ var _cRunEnv = {};
15953
+ if (_cCatalog && _cCatalog.endpointUrl) _cRunEnv.OMNIUS_BACKEND_URL = _cCatalog.endpointUrl;
15954
+ if (_cCatalog && _cCatalog.endpointAuth) _cRunEnv.OMNIUS_API_KEY = _cCatalog.endpointAuth;
15955
+ if (_cModel) _cRunEnv.OMNIUS_MODEL = _cModel;
15655
15956
  var _cRunResp = await fetch(_cApiUrl + '/v1/run', {
15656
15957
  method: 'POST',
15657
15958
  headers: { 'Content-Type': 'application/json' },
@@ -15662,6 +15963,7 @@ process.on('unhandledRejection', (reason) => {
15662
15963
  timeout_s: 90,
15663
15964
  sandbox: 'none',
15664
15965
  profile: 'cohere-mesh',
15966
+ env: _cRunEnv,
15665
15967
  }),
15666
15968
  signal: AbortSignal.timeout(120000),
15667
15969
  });
@@ -15701,22 +16003,34 @@ process.on('unhandledRejection', (reason) => {
15701
16003
  if (_cContent) {
15702
16004
  dlog('COHERE: AgenticRunner responded (' + _cContent.length + ' chars)');
15703
16005
  } else {
15704
- dlog('COHERE: AgenticRunner returned empty — falling back to raw Ollama');
16006
+ dlog('COHERE: AgenticRunner returned empty');
15705
16007
  }
15706
16008
  } catch (_cRunErr) {
15707
- dlog('COHERE: AgenticRunner error: ' + (_cRunErr.message || _cRunErr) + ' — falling back');
16009
+ dlog('COHERE: AgenticRunner error: ' + (_cRunErr.message || _cRunErr));
15708
16010
  }
15709
16011
  } else {
15710
- dlog('COHERE: Omnius API not available at ' + _cApiUrl + ' — CANNOT process query (no raw Ollama fallback)');
15711
- _cContent = '[COHERE error] Omnius API server not running on this node. Start it with: omnius serve';
16012
+ dlog('COHERE: Omnius API not available at ' + _cApiUrl);
16013
+ }
16014
+
16015
+ // No raw local-Ollama fallback. If the user explicitly exposed an
16016
+ // OpenAI-compatible passthrough endpoint, use that endpoint directly
16017
+ // as a degraded fallback so COHERE still serves external providers.
16018
+ if (!_cContent && _cCatalog && _cCatalog.passthrough === true) {
16019
+ try {
16020
+ var _cDirect = await _cohereDirectEndpointFallback(_cCatalog, _cModel, _cData);
16021
+ _cContent = _cDirect.content || '';
16022
+ _cUsage = _cDirect.usage;
16023
+ if (_cContent) dlog('COHERE: direct passthrough fallback responded (' + _cContent.length + ' chars)');
16024
+ } catch (_cDirectErr) {
16025
+ dlog('COHERE: direct passthrough fallback failed: ' + (_cDirectErr.message || _cDirectErr));
16026
+ }
15712
16027
  }
15713
16028
 
15714
- // NO raw Ollama fallback — all queries MUST go through AgenticRunner
15715
- // If /v1/run failed or API unavailable, report the error instead of
15716
- // sending garbage responses without tools/context/system prompt.
15717
16029
  if (!_cContent) {
15718
- _cContent = '[COHERE error] AgenticRunner returned empty response. Check Omnius API server logs.';
15719
- dlog('COHERE: no content from AgenticRunner reporting error (no raw Ollama fallback)');
16030
+ _cContent = _cApiAvailable
16031
+ ? '[COHERE error] AgenticRunner returned empty response. Check Omnius API server logs.'
16032
+ : '[COHERE error] Omnius API server not running on this node. Start it with: omnius serve, or expose an OpenAI-compatible endpoint with /expose passthrough.';
16033
+ dlog('COHERE: no content from AgenticRunner or passthrough endpoint');
15720
16034
  }
15721
16035
 
15722
16036
  const _cLatency = Date.now() - _cStart;
@@ -16072,24 +16386,8 @@ process.on('unhandledRejection', (reason) => {
16072
16386
  async function _publishCapacityAnnouncement() {
16073
16387
  if (!cohereActive || !_natsConn || !_natsCodec) return;
16074
16388
  try {
16075
- var _capOllamaUrl = process.env.OLLAMA_HOST || 'http://localhost:11434';
16076
- var _capModels = [];
16077
- try {
16078
- var _capTags = await fetch(_capOllamaUrl + '/api/tags').then(function(r) { return r.json(); });
16079
- _capModels = (_capTags.models || []).map(function(m) {
16080
- return {
16081
- name: m.name,
16082
- size: m.size || 0,
16083
- family: m.details ? m.details.family || '' : '',
16084
- parameterSize: m.details ? m.details.parameter_size || '' : '',
16085
- quantization: m.details ? m.details.quantization_level || '' : '',
16086
- };
16087
- });
16088
- } catch {}
16089
- // Filter by allowlist
16090
- if (_cohereAllowedModels) {
16091
- _capModels = _capModels.filter(function(m) { return _cohereAllowedModels.has(m.name); });
16092
- }
16389
+ var _capCatalog = await _cohereGetModelCatalog({});
16390
+ var _capModels = _cohereApplyAllowlist(_capCatalog.models || []);
16093
16391
  var _capMetrics = await _collectSysMetrics();
16094
16392
  // CO-02: Enriched per-model capacity — warm/cold, specialty, estimated latency
16095
16393
  var _capEnriched = _capModels.map(function(m) {
@@ -16122,6 +16420,7 @@ process.on('unhandledRejection', (reason) => {
16122
16420
  agentName: agentName,
16123
16421
  agentType: agentType,
16124
16422
  cohereActive: cohereActive,
16423
+ endpoint: _cohereEndpointSnapshot(_capCatalog),
16125
16424
  models: _capEnriched,
16126
16425
  warmModel: _cLastModel || null,
16127
16426
  modelCount: _capEnriched.length,
@@ -16129,7 +16428,7 @@ process.on('unhandledRejection', (reason) => {
16129
16428
  totalVram: _capTotalVram,
16130
16429
  availableVram: _capAvailVram,
16131
16430
  specialties: _capSpecialties,
16132
- capabilities: ['inference'], // future: web_search, code_execution
16431
+ capabilities: ['inference', 'cohere_inference'],
16133
16432
  allowedModels: _cohereAllowedModels ? [..._cohereAllowedModels] : null,
16134
16433
  stats: {
16135
16434
  queriesAnswered: _cohereStats.queriesAnswered,
@@ -16198,6 +16497,7 @@ process.on('unhandledRejection', (reason) => {
16198
16497
  multiaddrs: [],
16199
16498
  timestamp: Date.now(),
16200
16499
  capabilities: _capModels.map(function(m) { return m.name; }),
16500
+ endpoint: _cohereEndpointSnapshot(_capCatalog),
16201
16501
  identityCid: _idCid || undefined,
16202
16502
  identityHash: _idHash || undefined,
16203
16503
  identityVersion: _idVersion || undefined,
@@ -17131,11 +17431,15 @@ process.on('SIGINT', () => process.emit('SIGTERM'));
17131
17431
  },
17132
17432
  format: {
17133
17433
  type: "string",
17134
- description: "For cohere_stats: set to 'json' for structured stats"
17434
+ description: "For cohere_stats/cohere_list_models: set to 'json' for structured output"
17135
17435
  },
17136
17436
  json: {
17137
17437
  type: "string",
17138
- description: "For cohere_stats: set to '1' for structured stats"
17438
+ description: "For cohere_stats/cohere_list_models: set to '1' for structured output"
17439
+ },
17440
+ refresh: {
17441
+ type: "string",
17442
+ description: "For cohere_list_models: set to '1' to refresh the active endpoint catalog"
17139
17443
  }
17140
17444
  },
17141
17445
  required: ["action"],
@@ -17282,7 +17586,7 @@ process.on('SIGINT', () => process.emit('SIGTERM'));
17282
17586
  result = await this.sendDaemonCmd("cohere_deny_model", { model: String(args.model ?? "") });
17283
17587
  break;
17284
17588
  case "cohere_list_models":
17285
- result = await this.sendDaemonCmd("cohere_list_models", {});
17589
+ result = await this.sendDaemonCmd("cohere_list_models", { format: String(args.format ?? ""), json: String(args.json ?? ""), refresh: String(args.refresh ?? "") });
17286
17590
  break;
17287
17591
  case "ipfs_add":
17288
17592
  result = await this.sendDaemonCmd("ipfs_add", { content: String(args.content ?? args.message ?? "") });
@@ -529185,11 +529489,11 @@ async function cleanupStaleOllamaProcesses(options2 = {}) {
529185
529489
  continue;
529186
529490
  }
529187
529491
  try {
529188
- system.kill(proc.pid, "SIGTERM");
529492
+ signalOllamaProcess(system, proc, "SIGTERM");
529189
529493
  await system.sleep(options2.graceMs ?? DEFAULT_GRACE_MS);
529190
529494
  let signal = "SIGTERM";
529191
529495
  if (system.isPidAlive(proc.pid)) {
529192
- system.kill(proc.pid, "SIGKILL");
529496
+ signalOllamaProcess(system, proc, "SIGKILL");
529193
529497
  signal = "SIGKILL";
529194
529498
  await system.sleep(250);
529195
529499
  }
@@ -529282,6 +529586,23 @@ function decision(proc, action, classification, protectedProc, eligible, source,
529282
529586
  reasons
529283
529587
  };
529284
529588
  }
529589
+ function signalOllamaProcess(system, proc, signal) {
529590
+ let delivered = false;
529591
+ if (proc.isOllamaServe) {
529592
+ try {
529593
+ system.kill(-proc.pid, signal);
529594
+ delivered = true;
529595
+ } catch {
529596
+ }
529597
+ }
529598
+ try {
529599
+ system.kill(proc.pid, signal);
529600
+ delivered = true;
529601
+ } catch (err) {
529602
+ if (!delivered)
529603
+ throw err;
529604
+ }
529605
+ }
529285
529606
  async function maybeApplyInference(scan, options2, system) {
529286
529607
  const mode = options2.useInference ?? "auto";
529287
529608
  if (mode === false || process.env["OMNIUS_OLLAMA_CLEANUP_INFERENCE"] === "0") {
@@ -582534,6 +582855,15 @@ ${CONTENT_BG_SEQ}`);
582534
582855
  return;
582535
582856
  }
582536
582857
  if (key?.name === "return" || key?.name === "enter") {
582858
+ if (key?.shift) {
582859
+ const currentLine2 = rl.line ?? "";
582860
+ const cursor = typeof rl.cursor === "number" ? rl.cursor : currentLine2.length;
582861
+ rl.line = currentLine2.slice(0, cursor) + "\n" + currentLine2.slice(cursor);
582862
+ rl.cursor = cursor + 1;
582863
+ self2.updateFooterHeight();
582864
+ self2.renderFooterAndPositionInput();
582865
+ return;
582866
+ }
582537
582867
  const currentLine = rl.line ?? "";
582538
582868
  rl.line = "";
582539
582869
  rl.cursor = 0;
@@ -604969,7 +605299,14 @@ function emptyCohereStats(isActive = false) {
604969
605299
  bytesOut: 0,
604970
605300
  modelsUsed: {},
604971
605301
  peersServed: {},
604972
- allowedModels: null
605302
+ allowedModels: null,
605303
+ endpoint: {
605304
+ source: "unknown",
605305
+ passthrough: false,
605306
+ endpointUrl: "",
605307
+ modelCount: 0,
605308
+ updatedAt: 0
605309
+ }
604973
605310
  };
604974
605311
  }
604975
605312
  function numberField(value2) {
@@ -604988,6 +605325,7 @@ function parseCohereStatsOutput(output, isActive = false) {
604988
605325
  try {
604989
605326
  const parsed = JSON.parse(output);
604990
605327
  const active = typeof parsed.active === "boolean" ? parsed.active : String(parsed.status ?? "").toLowerCase() === "active";
605328
+ const endpointRaw = parsed.endpoint && typeof parsed.endpoint === "object" ? parsed.endpoint : {};
604991
605329
  return {
604992
605330
  status: active ? "active" : "inactive",
604993
605331
  active,
@@ -605003,7 +605341,15 @@ function parseCohereStatsOutput(output, isActive = false) {
605003
605341
  bytesOut: numberField(parsed.bytesOut),
605004
605342
  modelsUsed: mapNumberRecord(parsed.modelsUsed),
605005
605343
  peersServed: mapNumberRecord(parsed.peersServed),
605006
- allowedModels: Array.isArray(parsed.allowedModels) ? parsed.allowedModels.map(String) : null
605344
+ allowedModels: Array.isArray(parsed.allowedModels) ? parsed.allowedModels.map(String) : null,
605345
+ endpoint: {
605346
+ source: String(endpointRaw.source ?? "unknown"),
605347
+ passthrough: endpointRaw.passthrough === true,
605348
+ endpointUrl: String(endpointRaw.endpointUrl ?? ""),
605349
+ modelCount: numberField(endpointRaw.modelCount),
605350
+ updatedAt: numberField(endpointRaw.updatedAt),
605351
+ cachedOnly: endpointRaw.cachedOnly === true
605352
+ }
605007
605353
  };
605008
605354
  } catch {
605009
605355
  return emptyCohereStats(isActive);
@@ -605028,10 +605374,11 @@ async function fetchCohereDashboardState(ctx3) {
605028
605374
  } catch {
605029
605375
  }
605030
605376
  try {
605031
- const r2 = await nexus.execute({ action: "cohere_list_models" });
605377
+ const r2 = await nexus.execute({ action: "cohere_list_models", format: "json" });
605032
605378
  if (r2.success) {
605033
605379
  try {
605034
- state.modelList = JSON.parse(r2.output).models || [];
605380
+ const parsed = JSON.parse(r2.output);
605381
+ state.modelList = Array.isArray(parsed.models) ? parsed.models.map(String) : [];
605035
605382
  } catch {
605036
605383
  state.modelList = r2.output.split("\n").map((l2) => l2.trim()).filter(Boolean);
605037
605384
  }
@@ -605057,8 +605404,9 @@ function cohereStatusLines(stats, modelList) {
605057
605404
  `Sent out: ${stats.queriesSent} · avg latency ${stats.avgLatencyMs}ms`,
605058
605405
  `Data: in ${formatFileSize(stats.bytesIn)} · out ${formatFileSize(stats.bytesOut)}`,
605059
605406
  "",
605060
- `Models exposed: ${modelList.length}`,
605061
- `Allowlist: ${stats.allowedModels ? stats.allowedModels.join(", ") || "(empty)" : "all downloaded models"}`,
605407
+ `Endpoint: ${stats.endpoint.source}${stats.endpoint.passthrough ? " passthrough" : ""}${stats.endpoint.endpointUrl ? ` · ${stats.endpoint.endpointUrl}` : ""}`,
605408
+ `Models available: ${modelList.length || stats.endpoint.modelCount}${stats.endpoint.cachedOnly ? " (cached)" : ""}`,
605409
+ `Allowlist: ${stats.allowedModels ? stats.allowedModels.join(", ") || "(empty)" : "all endpoint models"}`,
605062
605410
  `Top models: ${modelEntries.length ? modelEntries.slice(0, 5).map(([m2, n2]) => `${m2} (${n2})`).join(", ") : "none yet"}`,
605063
605411
  `Peers served: ${peerEntries.length ? peerEntries.slice(0, 5).map(([p2, n2]) => `${p2.slice(0, 20)} (${n2})`).join(", ") : "none yet"}`
605064
605412
  ];
@@ -605072,7 +605420,7 @@ async function showCohereDashboard(ctx3) {
605072
605420
  while (true) {
605073
605421
  const currentActive = ctx3.isCohere?.() ?? false;
605074
605422
  const toggleLabel = currentActive ? "Disable COHERE" : "Enable COHERE";
605075
- const toggleDetail = currentActive ? `Active — forwarding ${ctx3.config.model}` : "Join the distributed cognitive commons";
605423
+ const toggleDetail = currentActive ? `Active — forwarding ${ctx3.config.model} via current endpoint` : "Join the distributed cognitive commons";
605076
605424
  const items = [
605077
605425
  {
605078
605426
  key: "hdr-status",
@@ -634089,6 +634437,12 @@ var init_direct_input = __esm({
634089
634437
  }
634090
634438
  break;
634091
634439
  }
634440
+ if (remaining.length >= 2 && (remaining[1] === "\r" || remaining[1] === "\n")) {
634441
+ this._insertText("\n");
634442
+ i2 += 2;
634443
+ if (remaining[1] === "\r" && remaining[2] === "\n") i2++;
634444
+ continue;
634445
+ }
634092
634446
  if (remaining.length === 1) {
634093
634447
  break;
634094
634448
  }
@@ -634096,6 +634450,21 @@ var init_direct_input = __esm({
634096
634450
  continue;
634097
634451
  }
634098
634452
  if (code8 < 32 || code8 === 127) {
634453
+ if (code8 === 13) {
634454
+ if (this._preSubmit?.()) {
634455
+ i2++;
634456
+ continue;
634457
+ }
634458
+ this._submit();
634459
+ i2++;
634460
+ if (this._buffer[i2] === "\n") i2++;
634461
+ continue;
634462
+ }
634463
+ if (code8 === 10) {
634464
+ this._insertText("\n");
634465
+ i2++;
634466
+ continue;
634467
+ }
634099
634468
  this._handleControl(code8);
634100
634469
  i2++;
634101
634470
  continue;
@@ -634298,12 +634667,6 @@ var init_direct_input = __esm({
634298
634667
  /** Handle control characters (ASCII < 32 and DEL) */
634299
634668
  _handleControl(code8) {
634300
634669
  switch (code8) {
634301
- case 13:
634302
- // Enter (CR)
634303
- case 10:
634304
- if (this._preSubmit?.()) return;
634305
- this._submit();
634306
- return;
634307
634670
  case 127:
634308
634671
  // Backspace (DEL)
634309
634672
  case 8:
@@ -663716,7 +664079,7 @@ The user pasted a clipboard image saved at ${relPath}. Use the OCR, vision analy
663716
664079
  try {
663717
664080
  if (!commandCtx.isExposeActive?.()) {
663718
664081
  writeContent(
663719
- () => renderInfo("COHERE: exposing local inference to mesh...")
664082
+ () => renderInfo("COHERE: exposing current endpoint to mesh...")
663720
664083
  );
663721
664084
  await commandCtx.exposeStart?.("passthrough");
663722
664085
  }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.153",
3
+ "version": "1.0.155",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omnius",
9
- "version": "1.0.153",
9
+ "version": "1.0.155",
10
10
  "bundleDependencies": [
11
11
  "image-to-ascii"
12
12
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.153",
3
+ "version": "1.0.155",
4
4
  "description": "AI coding agent powered by open-source models (Ollama/vLLM) — interactive TUI with agentic tool-calling loop",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",