omnius 1.0.325 → 1.0.327
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 +197 -18
- package/npm-shrinkwrap.json +28 -89
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -294217,7 +294217,7 @@ var init_codebase_indexer = __esm({
|
|
|
294217
294217
|
};
|
|
294218
294218
|
}
|
|
294219
294219
|
async index() {
|
|
294220
|
-
const ig = ignore
|
|
294220
|
+
const ig = ignore();
|
|
294221
294221
|
if (this.config.respectGitignore) {
|
|
294222
294222
|
try {
|
|
294223
294223
|
const gitignoreContent = await readFile22(join69(this.config.rootDir, ".gitignore"), "utf-8");
|
|
@@ -552312,7 +552312,10 @@ function detectProvider(url) {
|
|
|
552312
552312
|
modelsPath: isLocal ? "/v1/models" : "/v1/models"
|
|
552313
552313
|
};
|
|
552314
552314
|
}
|
|
552315
|
-
|
|
552315
|
+
function listProviderPresets() {
|
|
552316
|
+
return PROVIDER_PRESETS.map((p2) => ({ ...p2 }));
|
|
552317
|
+
}
|
|
552318
|
+
var PROVIDERS, PROVIDER_PRESETS;
|
|
552316
552319
|
var init_normalizeUrl = __esm({
|
|
552317
552320
|
"packages/backend-vllm/dist/normalizeUrl.js"() {
|
|
552318
552321
|
"use strict";
|
|
@@ -552384,6 +552387,28 @@ var init_normalizeUrl = __esm({
|
|
|
552384
552387
|
info: { id: "vllm", label: "vLLM (local)", local: true, authRequired: false, modelsPath: "/v1/models" }
|
|
552385
552388
|
}
|
|
552386
552389
|
];
|
|
552390
|
+
PROVIDER_PRESETS = [
|
|
552391
|
+
// --- Local runtimes ---
|
|
552392
|
+
{ id: "ollama", label: "Ollama (local)", local: true, authRequired: false, modelsPath: "/api/tags", defaultUrl: "http://127.0.0.1:11434", description: "Local Ollama runtime on port 11434." },
|
|
552393
|
+
{ id: "lmstudio", label: "LM Studio (local)", local: true, authRequired: false, modelsPath: "/v1/models", defaultUrl: "http://127.0.0.1:1234/v1", description: "Local OpenAI-compatible server on port 1234." },
|
|
552394
|
+
{ id: "vllm", label: "vLLM (local)", local: true, authRequired: false, modelsPath: "/v1/models", defaultUrl: "http://127.0.0.1:8000/v1", description: "Self-hosted OpenAI-compatible vLLM endpoint." },
|
|
552395
|
+
// --- Cloud providers ---
|
|
552396
|
+
{ id: "openai", label: "OpenAI", local: false, authRequired: true, keyPrefix: "sk-", modelsPath: "/v1/models", defaultUrl: "https://api.openai.com/v1", apiKeyUrl: "https://platform.openai.com/api-keys", description: "OpenAI API models." },
|
|
552397
|
+
{ id: "anthropic", label: "Anthropic (Claude)", local: false, authRequired: true, keyPrefix: "sk-ant-", modelsPath: "/v1/models", defaultUrl: "https://api.anthropic.com/v1", apiKeyUrl: "https://console.anthropic.com/settings/keys", description: "Claude via the Anthropic API." },
|
|
552398
|
+
{ id: "openrouter", label: "OpenRouter", local: false, authRequired: true, keyPrefix: "sk-or-", modelsPath: "/v1/models", defaultUrl: "https://openrouter.ai/api/v1", apiKeyUrl: "https://openrouter.ai/keys", description: "Routing across many hosted models." },
|
|
552399
|
+
{ id: "groq", label: "Groq", local: false, authRequired: true, keyPrefix: "gsk_", modelsPath: "/v1/models", defaultUrl: "https://api.groq.com/openai/v1", apiKeyUrl: "https://console.groq.com/keys", description: "Groq OpenAI-compatible inference." },
|
|
552400
|
+
{ id: "chutes", label: "Chutes AI", local: false, authRequired: true, keyPrefix: "cpk_", modelsPath: "/v1/models", defaultUrl: "https://llm.chutes.ai/v1", apiKeyUrl: "https://chutes.ai/app/api", description: "Chutes OpenAI-compatible endpoint." },
|
|
552401
|
+
{ id: "deepinfra", label: "DeepInfra", local: false, authRequired: true, modelsPath: "/v1/models", defaultUrl: "https://api.deepinfra.com/v1/openai", apiKeyUrl: "https://deepinfra.com/dash/api_keys", description: "DeepInfra hosted models." },
|
|
552402
|
+
{ id: "together", label: "Together AI", local: false, authRequired: true, modelsPath: "/v1/models", defaultUrl: "https://api.together.xyz/v1", apiKeyUrl: "https://api.together.xyz/settings/api-keys", description: "Together OpenAI-compatible inference." },
|
|
552403
|
+
{ id: "fireworks", label: "Fireworks AI", local: false, authRequired: true, keyPrefix: "fw_", modelsPath: "/v1/models", defaultUrl: "https://api.fireworks.ai/inference/v1", apiKeyUrl: "https://fireworks.ai/account/api-keys", description: "Fireworks OpenAI-compatible inference." },
|
|
552404
|
+
{ id: "mistral", label: "Mistral AI", local: false, authRequired: true, modelsPath: "/v1/models", defaultUrl: "https://api.mistral.ai/v1", apiKeyUrl: "https://console.mistral.ai/api-keys", description: "Mistral hosted models." },
|
|
552405
|
+
{ id: "cerebras", label: "Cerebras", local: false, authRequired: true, keyPrefix: "csk-", modelsPath: "/v1/models", defaultUrl: "https://api.cerebras.ai/v1", apiKeyUrl: "https://cloud.cerebras.ai/platform", description: "Cerebras OpenAI-compatible inference." },
|
|
552406
|
+
{ id: "sambanova", label: "SambaNova", local: false, authRequired: true, modelsPath: "/v1/models", defaultUrl: "https://api.sambanova.ai/v1", apiKeyUrl: "https://cloud.sambanova.ai/apis", description: "SambaNova OpenAI-compatible inference." },
|
|
552407
|
+
{ id: "nvidia", label: "NVIDIA NIM", local: false, authRequired: true, keyPrefix: "nvapi-", modelsPath: "/v1/models", defaultUrl: "https://integrate.api.nvidia.com/v1", apiKeyUrl: "https://build.nvidia.com", description: "NVIDIA-hosted NIM models." },
|
|
552408
|
+
{ id: "hyperbolic", label: "Hyperbolic", local: false, authRequired: true, modelsPath: "/v1/models", defaultUrl: "https://api.hyperbolic.xyz/v1", apiKeyUrl: "https://app.hyperbolic.xyz/settings", description: "Hyperbolic OpenAI-compatible inference." },
|
|
552409
|
+
// --- Catch-all ---
|
|
552410
|
+
{ id: "custom", label: "Custom endpoint", local: false, authRequired: false, modelsPath: "/v1/models", description: "Any OpenAI-compatible endpoint — enter a URL." }
|
|
552411
|
+
];
|
|
552387
552412
|
}
|
|
552388
552413
|
});
|
|
552389
552414
|
|
|
@@ -554045,7 +554070,7 @@ var init_messages = __esm({
|
|
|
554045
554070
|
role: z2.enum(["user", "assistant", "system", "tool"]),
|
|
554046
554071
|
content: z2.string(),
|
|
554047
554072
|
timestamp: z2.string().datetime(),
|
|
554048
|
-
metadata: z2.record(z2.unknown()).optional()
|
|
554073
|
+
metadata: z2.record(z2.string(), z2.unknown()).optional()
|
|
554049
554074
|
});
|
|
554050
554075
|
}
|
|
554051
554076
|
});
|
|
@@ -554059,7 +554084,7 @@ var init_tools = __esm({
|
|
|
554059
554084
|
ToolCallSchema = z3.object({
|
|
554060
554085
|
id: z3.string().uuid(),
|
|
554061
554086
|
name: z3.string(),
|
|
554062
|
-
arguments: z3.record(z3.unknown()),
|
|
554087
|
+
arguments: z3.record(z3.string(), z3.unknown()),
|
|
554063
554088
|
result: z3.unknown().optional(),
|
|
554064
554089
|
status: z3.enum(["pending", "running", "completed", "failed"]),
|
|
554065
554090
|
startedAt: z3.string().datetime().optional(),
|
|
@@ -554081,7 +554106,7 @@ var init_session3 = __esm({
|
|
|
554081
554106
|
createdAt: z4.string().datetime(),
|
|
554082
554107
|
updatedAt: z4.string().datetime(),
|
|
554083
554108
|
status: z4.enum(["active", "paused", "completed", "error"]),
|
|
554084
|
-
config: z4.record(z4.unknown()).optional()
|
|
554109
|
+
config: z4.record(z4.string(), z4.unknown()).optional()
|
|
554085
554110
|
});
|
|
554086
554111
|
}
|
|
554087
554112
|
});
|
|
@@ -554612,25 +554637,25 @@ var init_config5 = __esm({
|
|
|
554612
554637
|
* Maximum context length for the model.
|
|
554613
554638
|
* Should be discovered by startup probing rather than hard-coded.
|
|
554614
554639
|
*/
|
|
554615
|
-
AGENT_MAX_MODEL_LEN: z14.string().transform((v) => parseInt(v, 10)).pipe(z14.number().int().positive()).default(
|
|
554640
|
+
AGENT_MAX_MODEL_LEN: z14.string().transform((v) => parseInt(v, 10)).pipe(z14.number().int().positive()).default(65536),
|
|
554616
554641
|
/** Enable vLLM automatic prefix caching (1 = enabled) */
|
|
554617
|
-
AGENT_ENABLE_PREFIX_CACHING: z14.string().transform((v) => v === "1" || v.toLowerCase() === "true").pipe(z14.boolean()).default(
|
|
554642
|
+
AGENT_ENABLE_PREFIX_CACHING: z14.string().transform((v) => v === "1" || v.toLowerCase() === "true").pipe(z14.boolean()).default(true),
|
|
554618
554643
|
/** Enable vLLM sleep mode when idle (1 = enabled) */
|
|
554619
|
-
AGENT_ENABLE_SLEEP_MODE: z14.string().transform((v) => v === "1" || v.toLowerCase() === "true").pipe(z14.boolean()).default(
|
|
554644
|
+
AGENT_ENABLE_SLEEP_MODE: z14.string().transform((v) => v === "1" || v.toLowerCase() === "true").pipe(z14.boolean()).default(true),
|
|
554620
554645
|
// -----------------------------------------------------------------------
|
|
554621
554646
|
// Agent behaviour
|
|
554622
554647
|
// -----------------------------------------------------------------------
|
|
554623
554648
|
/** Maximum retry cycles per subtask */
|
|
554624
|
-
AGENT_MAX_RETRIES: z14.string().transform((v) => parseInt(v, 10)).pipe(z14.number().int().nonnegative()).default(
|
|
554649
|
+
AGENT_MAX_RETRIES: z14.string().transform((v) => parseInt(v, 10)).pipe(z14.number().int().nonnegative()).default(3),
|
|
554625
554650
|
/** Maximum number of parallel subagents that may run simultaneously */
|
|
554626
|
-
AGENT_MAX_PARALLEL_SUBAGENTS: z14.string().transform((v) => parseInt(v, 10)).pipe(z14.number().int().positive()).default(
|
|
554651
|
+
AGENT_MAX_PARALLEL_SUBAGENTS: z14.string().transform((v) => parseInt(v, 10)).pipe(z14.number().int().positive()).default(4),
|
|
554627
554652
|
// -----------------------------------------------------------------------
|
|
554628
554653
|
// Retrieval limits
|
|
554629
554654
|
// -----------------------------------------------------------------------
|
|
554630
554655
|
/** Maximum files included in a single retrieval packet */
|
|
554631
|
-
AGENT_RETRIEVAL_MAX_FILES: z14.string().transform((v) => parseInt(v, 10)).pipe(z14.number().int().positive()).default(
|
|
554656
|
+
AGENT_RETRIEVAL_MAX_FILES: z14.string().transform((v) => parseInt(v, 10)).pipe(z14.number().int().positive()).default(8),
|
|
554632
554657
|
/** Maximum snippets included in a single retrieval packet */
|
|
554633
|
-
AGENT_RETRIEVAL_MAX_SNIPPETS: z14.string().transform((v) => parseInt(v, 10)).pipe(z14.number().int().positive()).default(
|
|
554658
|
+
AGENT_RETRIEVAL_MAX_SNIPPETS: z14.string().transform((v) => parseInt(v, 10)).pipe(z14.number().int().positive()).default(16),
|
|
554634
554659
|
// -----------------------------------------------------------------------
|
|
554635
554660
|
// File paths
|
|
554636
554661
|
// -----------------------------------------------------------------------
|
|
@@ -609699,7 +609724,9 @@ var init_status_bar = __esm({
|
|
|
609699
609724
|
} else {
|
|
609700
609725
|
return false;
|
|
609701
609726
|
}
|
|
609702
|
-
this.
|
|
609727
|
+
if (this.active && !isOverlayActive() && !this._suspendContentLayer) {
|
|
609728
|
+
this.repaintContent();
|
|
609729
|
+
}
|
|
609703
609730
|
return true;
|
|
609704
609731
|
}
|
|
609705
609732
|
/**
|
|
@@ -628928,7 +628955,7 @@ __export(commands_exports, {
|
|
|
628928
628955
|
registerSlashCommand: () => registerSlashCommand
|
|
628929
628956
|
});
|
|
628930
628957
|
import * as nodeOs from "node:os";
|
|
628931
|
-
import { execSync as nodeExecSync } from "node:child_process";
|
|
628958
|
+
import { execSync as nodeExecSync, spawn as nodeSpawn2 } from "node:child_process";
|
|
628932
628959
|
import { createHash as createHash35 } from "node:crypto";
|
|
628933
628960
|
import {
|
|
628934
628961
|
existsSync as existsSync127,
|
|
@@ -640039,6 +640066,87 @@ async function handleVoiceList(ctx3, focusFilename) {
|
|
|
640039
640066
|
if (msg) renderInfo(msg);
|
|
640040
640067
|
}
|
|
640041
640068
|
}
|
|
640069
|
+
function openUrlInBrowser(url) {
|
|
640070
|
+
if (process.env["OMNIUS_NO_BROWSER"] === "1") return false;
|
|
640071
|
+
if (!/^https?:\/\//i.test(url)) return false;
|
|
640072
|
+
const cmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "cmd" : "xdg-open";
|
|
640073
|
+
const args = process.platform === "win32" ? ["/c", "start", "", url] : [url];
|
|
640074
|
+
try {
|
|
640075
|
+
const child = nodeSpawn2(cmd, args, { stdio: "ignore", detached: true });
|
|
640076
|
+
child.on("error", () => {
|
|
640077
|
+
});
|
|
640078
|
+
child.unref();
|
|
640079
|
+
return true;
|
|
640080
|
+
} catch {
|
|
640081
|
+
return false;
|
|
640082
|
+
}
|
|
640083
|
+
}
|
|
640084
|
+
function clickableLink(url, text2 = url) {
|
|
640085
|
+
if (!process.stdout.isTTY) return text2;
|
|
640086
|
+
return `\x1B]8;;${url}\x07${text2}\x1B]8;;\x07`;
|
|
640087
|
+
}
|
|
640088
|
+
async function browseProviderPresets(ctx3, local) {
|
|
640089
|
+
const presets = listProviderPresets();
|
|
640090
|
+
const byKey = new Map(presets.map((p2) => [p2.id, p2]));
|
|
640091
|
+
const items = presets.map((p2) => ({
|
|
640092
|
+
key: p2.id,
|
|
640093
|
+
label: p2.local ? `${c3.green("●")} ${p2.label}` : p2.label,
|
|
640094
|
+
detail: [
|
|
640095
|
+
p2.defaultUrl || "enter a custom URL",
|
|
640096
|
+
p2.authRequired ? "API key required" : p2.local ? "local · no key" : "no key",
|
|
640097
|
+
p2.description || ""
|
|
640098
|
+
].filter(Boolean).join(" · ")
|
|
640099
|
+
}));
|
|
640100
|
+
let pending2 = null;
|
|
640101
|
+
const result = await tuiSelect({
|
|
640102
|
+
items,
|
|
640103
|
+
title: "Add inference provider",
|
|
640104
|
+
rl: ctx3.rl,
|
|
640105
|
+
availableRows: ctx3.availableContentRows?.(),
|
|
640106
|
+
onEnter: (item, { getInput, resolve: resolve71 }) => {
|
|
640107
|
+
const preset = byKey.get(item.key);
|
|
640108
|
+
if (!preset) return false;
|
|
640109
|
+
void (async () => {
|
|
640110
|
+
let url2 = preset.defaultUrl ?? "";
|
|
640111
|
+
if (!url2) {
|
|
640112
|
+
const typed = await getInput("Endpoint URL", "https://");
|
|
640113
|
+
if (!typed || !typed.trim()) {
|
|
640114
|
+
resolve71({ confirmed: false, key: item.key, index: -1 });
|
|
640115
|
+
return;
|
|
640116
|
+
}
|
|
640117
|
+
url2 = typed.trim();
|
|
640118
|
+
}
|
|
640119
|
+
let key2 = "";
|
|
640120
|
+
if (preset.authRequired || !preset.local) {
|
|
640121
|
+
let promptLabel = "API key";
|
|
640122
|
+
if (preset.apiKeyUrl) {
|
|
640123
|
+
const opened = openUrlInBrowser(preset.apiKeyUrl);
|
|
640124
|
+
promptLabel = opened ? `API key (opened ${preset.apiKeyUrl} in browser)` : `API key (get one: ${preset.apiKeyUrl})`;
|
|
640125
|
+
}
|
|
640126
|
+
const entered = await getInput(
|
|
640127
|
+
preset.authRequired ? promptLabel : `${promptLabel} (optional)`,
|
|
640128
|
+
""
|
|
640129
|
+
);
|
|
640130
|
+
key2 = (entered ?? "").trim();
|
|
640131
|
+
}
|
|
640132
|
+
pending2 = { url: url2, key: key2 };
|
|
640133
|
+
resolve71({ confirmed: true, key: "__apply__", index: -1 });
|
|
640134
|
+
})();
|
|
640135
|
+
return true;
|
|
640136
|
+
}
|
|
640137
|
+
});
|
|
640138
|
+
if (!result.confirmed || result.key !== "__apply__" || !pending2) {
|
|
640139
|
+
renderInfo("Provider selection cancelled.");
|
|
640140
|
+
return;
|
|
640141
|
+
}
|
|
640142
|
+
const { url, key } = pending2;
|
|
640143
|
+
const keyUrl = presets.find((p2) => p2.defaultUrl === url)?.apiKeyUrl;
|
|
640144
|
+
if (keyUrl) {
|
|
640145
|
+
process.stdout.write(` ${c3.dim("API key page:")} ${clickableLink(keyUrl)}
|
|
640146
|
+
`);
|
|
640147
|
+
}
|
|
640148
|
+
await handleEndpoint(key ? `${url} --auth ${key}` : url, ctx3, local);
|
|
640149
|
+
}
|
|
640042
640150
|
async function handleEndpoint(arg, ctx3, local = false) {
|
|
640043
640151
|
if (!arg) {
|
|
640044
640152
|
const history = loadUsageHistory("endpoint", ctx3.repoRoot);
|
|
@@ -640053,6 +640161,11 @@ async function handleEndpoint(arg, ctx3, local = false) {
|
|
|
640053
640161
|
detail: `${provider2} ${uses}${auth}`
|
|
640054
640162
|
};
|
|
640055
640163
|
});
|
|
640164
|
+
items.push({
|
|
640165
|
+
key: "__providers__",
|
|
640166
|
+
label: `${c3.cyan("◈")} Add from provider list`,
|
|
640167
|
+
detail: "Pick OpenAI, Anthropic, Groq, Ollama… and enter a key"
|
|
640168
|
+
});
|
|
640056
640169
|
items.push({
|
|
640057
640170
|
key: "__add__",
|
|
640058
640171
|
label: `${c3.green("+")} Add endpoint`,
|
|
@@ -640094,9 +640207,17 @@ async function handleEndpoint(arg, ctx3, local = false) {
|
|
|
640094
640207
|
resolve71({ confirmed: true, key: "__sponsor__", index: -1 });
|
|
640095
640208
|
return true;
|
|
640096
640209
|
}
|
|
640210
|
+
if (item.key === "__providers__") {
|
|
640211
|
+
resolve71({ confirmed: true, key: "__providers__", index: -1 });
|
|
640212
|
+
return true;
|
|
640213
|
+
}
|
|
640097
640214
|
return false;
|
|
640098
640215
|
}
|
|
640099
640216
|
});
|
|
640217
|
+
if (result.confirmed && result.key === "__providers__") {
|
|
640218
|
+
await browseProviderPresets(ctx3, local);
|
|
640219
|
+
return;
|
|
640220
|
+
}
|
|
640100
640221
|
if (result.confirmed && result.key === "__add__" && addedEndpoint) {
|
|
640101
640222
|
await handleEndpoint(addedEndpoint, ctx3, local);
|
|
640102
640223
|
return;
|
|
@@ -640122,6 +640243,11 @@ async function handleEndpoint(arg, ctx3, local = false) {
|
|
|
640122
640243
|
label: `${currentProvider.label} — ${ctx3.config.backendUrl}`,
|
|
640123
640244
|
detail: `${ctx3.config.backendType} ${ctx3.config.apiKey ? "Auth: Bearer token set" : "No auth"}`
|
|
640124
640245
|
},
|
|
640246
|
+
{
|
|
640247
|
+
key: "__providers__",
|
|
640248
|
+
label: `${c3.cyan("◈")} Add from provider list`,
|
|
640249
|
+
detail: "Pick OpenAI, Anthropic, Groq, Ollama… and enter a key"
|
|
640250
|
+
},
|
|
640125
640251
|
{
|
|
640126
640252
|
key: "__add__",
|
|
640127
640253
|
label: `${c3.green("+")} Add endpoint`,
|
|
@@ -640154,10 +640280,16 @@ async function handleEndpoint(arg, ctx3, local = false) {
|
|
|
640154
640280
|
resolve71({ confirmed: true, key: "__sponsor__", index: -1 });
|
|
640155
640281
|
return true;
|
|
640156
640282
|
}
|
|
640283
|
+
if (item.key === "__providers__") {
|
|
640284
|
+
resolve71({ confirmed: true, key: "__providers__", index: -1 });
|
|
640285
|
+
return true;
|
|
640286
|
+
}
|
|
640157
640287
|
return false;
|
|
640158
640288
|
}
|
|
640159
640289
|
});
|
|
640160
|
-
if (noHistResult.confirmed && noHistResult.key === "
|
|
640290
|
+
if (noHistResult.confirmed && noHistResult.key === "__providers__") {
|
|
640291
|
+
await browseProviderPresets(ctx3, local);
|
|
640292
|
+
} else if (noHistResult.confirmed && noHistResult.key === "__add__" && addedUrl) {
|
|
640161
640293
|
await handleEndpoint(addedUrl, ctx3, local);
|
|
640162
640294
|
} else if (noHistResult.confirmed && noHistResult.key === "__sponsor__") {
|
|
640163
640295
|
await handleSponsoredEndpoint(ctx3, local);
|
|
@@ -640207,6 +640339,10 @@ async function handleEndpoint(arg, ctx3, local = false) {
|
|
|
640207
640339
|
await handleSponsoredEndpoint(ctx3, local);
|
|
640208
640340
|
return;
|
|
640209
640341
|
}
|
|
640342
|
+
if (arg === "providers" || arg === "list" || arg === "browse") {
|
|
640343
|
+
await browseProviderPresets(ctx3, local);
|
|
640344
|
+
return;
|
|
640345
|
+
}
|
|
640210
640346
|
if (arg.startsWith("add ")) {
|
|
640211
640347
|
const addArg = arg.slice(4).replace(/\u2014/g, "--").replace(/\u2013/g, "--");
|
|
640212
640348
|
const addParts = addArg.split(/\s+/);
|
|
@@ -685420,6 +685556,8 @@ body { display:flex; flex-direction:column; height:100vh; margin:0; overflow:hid
|
|
|
685420
685556
|
</div>
|
|
685421
685557
|
<h3 style="color:var(--color-brand);font-size:0.7rem;margin:16px 0 8px">Inference Provider</h3>
|
|
685422
685558
|
<div id="config-endpoint" style="font-size:0.78rem;color:var(--color-fg-muted);margin-bottom:8px"></div>
|
|
685559
|
+
<div style="font-size:0.66rem;color:var(--color-fg-faint);margin-bottom:6px">Pick a provider to pre-fill the endpoint, then add your key and press <strong>set</strong>.</div>
|
|
685560
|
+
<div id="config-provider-modules" style="margin-bottom:10px"></div>
|
|
685423
685561
|
<form onsubmit="event.preventDefault(); switchEndpoint();" autocomplete="off" style="display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:4px">
|
|
685424
685562
|
<input id="config-ep-url" placeholder="https://api.example.com/v1" autocomplete="off" style="flex:1;min-width:200px;background:var(--color-bg-input);border:1px solid var(--color-border);border-radius:3px;padding:4px 8px;color:var(--color-fg);font-family:inherit;font-size:0.7rem;outline:none">
|
|
685425
685563
|
<input id="config-ep-key" placeholder="Bearer key (optional)" type="password" autocomplete="new-password" style="flex:1;min-width:150px;background:var(--color-bg-input);border:1px solid var(--color-border);border-radius:3px;padding:4px 8px;color:var(--color-fg);font-family:inherit;font-size:0.7rem;outline:none">
|
|
@@ -688758,6 +688896,12 @@ async function loadConfig() {
|
|
|
688758
688896
|
'<td style="padding:4px;color:var(--color-fg)">' + (v === '[redacted]' ? '<span style="color:var(--color-fg-faint)">[redacted]</span>' : String(v)) + '</td></tr>'
|
|
688759
688897
|
).join('') + '</table>';
|
|
688760
688898
|
document.getElementById('config-endpoint').textContent = ep.url + ' (' + (ep.backendType || 'unknown') + ')';
|
|
688899
|
+
// Provider module grid (same cards as the Settings modal) wired to the
|
|
688900
|
+
// config-tab endpoint form. Pre-selects the provider matching the active URL.
|
|
688901
|
+
try {
|
|
688902
|
+
const pm = document.getElementById('config-provider-modules');
|
|
688903
|
+
if (pm) pm.innerHTML = renderSettingsProviderModules(settingsProviderIdForUrl(ep.url), ep.url, 'selectConfigProviderModule');
|
|
688904
|
+
} catch {}
|
|
688761
688905
|
// Populate model switcher
|
|
688762
688906
|
const sel = document.getElementById('config-model-select');
|
|
688763
688907
|
sel.innerHTML = '';
|
|
@@ -688797,6 +688941,38 @@ async function switchEndpoint() {
|
|
|
688797
688941
|
} catch {}
|
|
688798
688942
|
}
|
|
688799
688943
|
|
|
688944
|
+
// Provider-module click handler for the /settings (config tab) endpoint form.
|
|
688945
|
+
// Fills the URL + backend-type fields, highlights the active card, and for
|
|
688946
|
+
// cloud providers opens the API-key page and focuses the key input so the user
|
|
688947
|
+
// just pastes their key and presses "set".
|
|
688948
|
+
function selectConfigProviderModule(providerId) {
|
|
688949
|
+
const provider = settingsProviderById(providerId);
|
|
688950
|
+
if (!provider) return;
|
|
688951
|
+
const urlInput = document.getElementById('config-ep-url');
|
|
688952
|
+
const typeSel = document.getElementById('config-ep-type');
|
|
688953
|
+
const keyInput = document.getElementById('config-ep-key');
|
|
688954
|
+
if (urlInput) urlInput.value = provider.url || '';
|
|
688955
|
+
if (typeSel && provider.backendType) {
|
|
688956
|
+
if (!Array.from(typeSel.options).some(o => o.value === provider.backendType)) {
|
|
688957
|
+
const opt = document.createElement('option');
|
|
688958
|
+
opt.value = provider.backendType; opt.textContent = provider.backendType;
|
|
688959
|
+
typeSel.appendChild(opt);
|
|
688960
|
+
}
|
|
688961
|
+
typeSel.value = provider.backendType;
|
|
688962
|
+
}
|
|
688963
|
+
// Highlight the chosen card.
|
|
688964
|
+
document.querySelectorAll('#config-provider-modules .settings-provider-module').forEach(btn => {
|
|
688965
|
+
btn.classList.toggle('active', btn.getAttribute('data-provider-id') === providerId);
|
|
688966
|
+
});
|
|
688967
|
+
// Cloud providers: open the key page and focus the key field.
|
|
688968
|
+
if (provider.requiresAuth && provider.apiKeyUrl) {
|
|
688969
|
+
try { window.open(provider.apiKeyUrl, '_blank', 'noopener'); } catch {}
|
|
688970
|
+
}
|
|
688971
|
+
if (keyInput) { try { keyInput.focus(); } catch {} }
|
|
688972
|
+
else if (!provider.url && urlInput) { try { urlInput.focus(); } catch {} }
|
|
688973
|
+
}
|
|
688974
|
+
window.selectConfigProviderModule = selectConfigProviderModule;
|
|
688975
|
+
|
|
688800
688976
|
async function switchModel() {
|
|
688801
688977
|
const model = document.getElementById('config-model-select').value;
|
|
688802
688978
|
if (!model) return;
|
|
@@ -692661,15 +692837,18 @@ function settingsProviderIcon(provider) {
|
|
|
692661
692837
|
return '<span class="settings-provider-brand"><img src="' + escapeHtml(src) + '" alt="" onerror="this.hidden=true;this.nextElementSibling.hidden=false"><span hidden>' + initial + '</span></span>';
|
|
692662
692838
|
}
|
|
692663
692839
|
|
|
692664
|
-
function renderSettingsProviderModules(selectedId, currentUrl) {
|
|
692840
|
+
function renderSettingsProviderModules(selectedId, currentUrl, handler) {
|
|
692665
692841
|
const activeId = settingsProviderIdForUrl(currentUrl);
|
|
692842
|
+
// handler is the click function name so the same grid can drive either the
|
|
692843
|
+
// Settings modal Connections pane or the /settings (config tab) form.
|
|
692844
|
+
const fn = handler || 'selectSettingsProviderModule';
|
|
692666
692845
|
return '<div class="settings-provider-module-grid">' + _OMNIUS_ENDPOINT_PROVIDERS.map(provider => {
|
|
692667
692846
|
const selected = provider.id === selectedId;
|
|
692668
692847
|
const active = provider.id === activeId;
|
|
692669
692848
|
const cls = 'settings-provider-module' + (selected ? ' active' : '');
|
|
692670
692849
|
const safeId = escapeHtml(provider.id);
|
|
692671
692850
|
const meta = provider.group + (active ? ' - active' : (provider.requiresAuth ? ' - API key' : ''));
|
|
692672
|
-
return '<button type="button" class="' + cls + '" data-provider-id="' + safeId + '" onclick="
|
|
692851
|
+
return '<button type="button" class="' + cls + '" data-provider-id="' + safeId + '" onclick="' + fn + '(\\'' + safeId + '\\', false)">' +
|
|
692673
692852
|
settingsProviderIcon(provider) +
|
|
692674
692853
|
'<strong>' + escapeHtml(provider.label) + '</strong>' +
|
|
692675
692854
|
'<small>' + escapeHtml(meta) + '</small>' +
|
|
@@ -700140,7 +700319,7 @@ async function handleRequest(req3, res, ollamaUrl, verbose, runtimeDefaults = {}
|
|
|
700140
700319
|
return;
|
|
700141
700320
|
}
|
|
700142
700321
|
if (pathname === "/favicon.ico" && method === "GET") {
|
|
700143
|
-
const svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><rect width="16" height="16"
|
|
700322
|
+
const svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><rect width="16" height="16" fill="#000"/><rect x="3" y="3" width="10" height="10" fill="#fff"/><rect x="6" y="6" width="4" height="4" fill="#000"/></svg>';
|
|
700144
700323
|
res.writeHead(200, {
|
|
700145
700324
|
"Content-Type": "image/svg+xml",
|
|
700146
700325
|
"Cache-Control": "public, max-age=86400"
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omnius",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.327",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "omnius",
|
|
9
|
-
"version": "1.0.
|
|
9
|
+
"version": "1.0.327",
|
|
10
10
|
"bundleDependencies": [
|
|
11
11
|
"image-to-ascii"
|
|
12
12
|
],
|
|
13
13
|
"hasInstallScript": true,
|
|
14
14
|
"license": "CC-BY-NC-4.0",
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"aiwg": "2026.
|
|
17
|
-
"glob": "^
|
|
18
|
-
"ignore": "^
|
|
16
|
+
"aiwg": "2026.6.2",
|
|
17
|
+
"glob": "^13.0.6",
|
|
18
|
+
"ignore": "^7.0.5",
|
|
19
19
|
"image-to-ascii": "file:vendor/image-to-ascii",
|
|
20
20
|
"nats.ws": "1.30.3",
|
|
21
21
|
"omnius-fabric": "^0.12.8",
|
|
22
22
|
"open-agents-nexus": "1.17.3",
|
|
23
23
|
"ws": "^8.20.0",
|
|
24
|
-
"zod": "^
|
|
24
|
+
"zod": "^4.4.3"
|
|
25
25
|
},
|
|
26
26
|
"bin": {
|
|
27
27
|
"omnius": "dist/launcher.cjs"
|
|
@@ -543,15 +543,6 @@
|
|
|
543
543
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
544
544
|
}
|
|
545
545
|
},
|
|
546
|
-
"node_modules/@isaacs/cliui": {
|
|
547
|
-
"version": "9.0.0",
|
|
548
|
-
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz",
|
|
549
|
-
"integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==",
|
|
550
|
-
"license": "BlueOak-1.0.0",
|
|
551
|
-
"engines": {
|
|
552
|
-
"node": ">=18"
|
|
553
|
-
}
|
|
554
|
-
},
|
|
555
546
|
"node_modules/@leichtgewicht/ip-codec": {
|
|
556
547
|
"version": "2.0.5",
|
|
557
548
|
"resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
|
|
@@ -2214,9 +2205,9 @@
|
|
|
2214
2205
|
}
|
|
2215
2206
|
},
|
|
2216
2207
|
"node_modules/aiwg": {
|
|
2217
|
-
"version": "2026.
|
|
2218
|
-
"resolved": "https://registry.npmjs.org/aiwg/-/aiwg-2026.
|
|
2219
|
-
"integrity": "sha512-
|
|
2208
|
+
"version": "2026.6.2",
|
|
2209
|
+
"resolved": "https://registry.npmjs.org/aiwg/-/aiwg-2026.6.2.tgz",
|
|
2210
|
+
"integrity": "sha512-DlZwilKJajAoQldBadYmo5EqSSYGsn/mBnhIpzJVuQkarMR1h8w1szLTiBcL7kDJ3sGM3DPIt0fUVGZhvRa7tQ==",
|
|
2220
2211
|
"license": "MIT",
|
|
2221
2212
|
"dependencies": {
|
|
2222
2213
|
"@modelcontextprotocol/sdk": "^1.24.0",
|
|
@@ -2261,21 +2252,13 @@
|
|
|
2261
2252
|
}
|
|
2262
2253
|
}
|
|
2263
2254
|
},
|
|
2264
|
-
"node_modules/aiwg/node_modules/
|
|
2265
|
-
"version": "
|
|
2266
|
-
"resolved": "https://registry.npmjs.org/
|
|
2267
|
-
"integrity": "sha512-
|
|
2268
|
-
"license": "
|
|
2269
|
-
"dependencies": {
|
|
2270
|
-
"minimatch": "^10.2.2",
|
|
2271
|
-
"minipass": "^7.1.3",
|
|
2272
|
-
"path-scurry": "^2.0.2"
|
|
2273
|
-
},
|
|
2274
|
-
"engines": {
|
|
2275
|
-
"node": "18 || 20 || >=22"
|
|
2276
|
-
},
|
|
2255
|
+
"node_modules/aiwg/node_modules/zod": {
|
|
2256
|
+
"version": "3.25.76",
|
|
2257
|
+
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
|
|
2258
|
+
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
|
|
2259
|
+
"license": "MIT",
|
|
2277
2260
|
"funding": {
|
|
2278
|
-
"url": "https://github.com/sponsors/
|
|
2261
|
+
"url": "https://github.com/sponsors/colinhacks"
|
|
2279
2262
|
}
|
|
2280
2263
|
},
|
|
2281
2264
|
"node_modules/ajv": {
|
|
@@ -3632,22 +3615,6 @@
|
|
|
3632
3615
|
}
|
|
3633
3616
|
}
|
|
3634
3617
|
},
|
|
3635
|
-
"node_modules/foreground-child": {
|
|
3636
|
-
"version": "3.3.1",
|
|
3637
|
-
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
|
|
3638
|
-
"integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
|
|
3639
|
-
"license": "ISC",
|
|
3640
|
-
"dependencies": {
|
|
3641
|
-
"cross-spawn": "^7.0.6",
|
|
3642
|
-
"signal-exit": "^4.0.1"
|
|
3643
|
-
},
|
|
3644
|
-
"engines": {
|
|
3645
|
-
"node": ">=14"
|
|
3646
|
-
},
|
|
3647
|
-
"funding": {
|
|
3648
|
-
"url": "https://github.com/sponsors/isaacs"
|
|
3649
|
-
}
|
|
3650
|
-
},
|
|
3651
3618
|
"node_modules/form-data": {
|
|
3652
3619
|
"version": "4.0.6",
|
|
3653
3620
|
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz",
|
|
@@ -3828,24 +3795,17 @@
|
|
|
3828
3795
|
"license": "MIT"
|
|
3829
3796
|
},
|
|
3830
3797
|
"node_modules/glob": {
|
|
3831
|
-
"version": "
|
|
3832
|
-
"resolved": "https://registry.npmjs.org/glob/-/glob-
|
|
3833
|
-
"integrity": "sha512-
|
|
3834
|
-
"deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
|
|
3798
|
+
"version": "13.0.6",
|
|
3799
|
+
"resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz",
|
|
3800
|
+
"integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==",
|
|
3835
3801
|
"license": "BlueOak-1.0.0",
|
|
3836
3802
|
"dependencies": {
|
|
3837
|
-
"
|
|
3838
|
-
"
|
|
3839
|
-
"
|
|
3840
|
-
"minipass": "^7.1.2",
|
|
3841
|
-
"package-json-from-dist": "^1.0.0",
|
|
3842
|
-
"path-scurry": "^2.0.0"
|
|
3843
|
-
},
|
|
3844
|
-
"bin": {
|
|
3845
|
-
"glob": "dist/esm/bin.mjs"
|
|
3803
|
+
"minimatch": "^10.2.2",
|
|
3804
|
+
"minipass": "^7.1.3",
|
|
3805
|
+
"path-scurry": "^2.0.2"
|
|
3846
3806
|
},
|
|
3847
3807
|
"engines": {
|
|
3848
|
-
"node": "20 || >=22"
|
|
3808
|
+
"node": "18 || 20 || >=22"
|
|
3849
3809
|
},
|
|
3850
3810
|
"funding": {
|
|
3851
3811
|
"url": "https://github.com/sponsors/isaacs"
|
|
@@ -4104,9 +4064,9 @@
|
|
|
4104
4064
|
"license": "BSD-3-Clause"
|
|
4105
4065
|
},
|
|
4106
4066
|
"node_modules/ignore": {
|
|
4107
|
-
"version": "
|
|
4108
|
-
"resolved": "https://registry.npmjs.org/ignore/-/ignore-
|
|
4109
|
-
"integrity": "sha512-
|
|
4067
|
+
"version": "7.0.5",
|
|
4068
|
+
"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
|
|
4069
|
+
"integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
|
|
4110
4070
|
"license": "MIT",
|
|
4111
4071
|
"engines": {
|
|
4112
4072
|
"node": ">= 4"
|
|
@@ -4773,21 +4733,6 @@
|
|
|
4773
4733
|
"uint8arrays": "^5.1.0"
|
|
4774
4734
|
}
|
|
4775
4735
|
},
|
|
4776
|
-
"node_modules/jackspeak": {
|
|
4777
|
-
"version": "4.2.3",
|
|
4778
|
-
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz",
|
|
4779
|
-
"integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==",
|
|
4780
|
-
"license": "BlueOak-1.0.0",
|
|
4781
|
-
"dependencies": {
|
|
4782
|
-
"@isaacs/cliui": "^9.0.0"
|
|
4783
|
-
},
|
|
4784
|
-
"engines": {
|
|
4785
|
-
"node": "20 || >=22"
|
|
4786
|
-
},
|
|
4787
|
-
"funding": {
|
|
4788
|
-
"url": "https://github.com/sponsors/isaacs"
|
|
4789
|
-
}
|
|
4790
|
-
},
|
|
4791
4736
|
"node_modules/jose": {
|
|
4792
4737
|
"version": "6.2.3",
|
|
4793
4738
|
"resolved": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz",
|
|
@@ -5881,12 +5826,6 @@
|
|
|
5881
5826
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
5882
5827
|
}
|
|
5883
5828
|
},
|
|
5884
|
-
"node_modules/package-json-from-dist": {
|
|
5885
|
-
"version": "1.0.1",
|
|
5886
|
-
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
|
|
5887
|
-
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
|
|
5888
|
-
"license": "BlueOak-1.0.0"
|
|
5889
|
-
},
|
|
5890
5829
|
"node_modules/pako": {
|
|
5891
5830
|
"version": "1.0.11",
|
|
5892
5831
|
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
|
|
@@ -7593,9 +7532,9 @@
|
|
|
7593
7532
|
}
|
|
7594
7533
|
},
|
|
7595
7534
|
"node_modules/zod": {
|
|
7596
|
-
"version": "
|
|
7597
|
-
"resolved": "https://registry.npmjs.org/zod/-/zod-
|
|
7598
|
-
"integrity": "sha512-
|
|
7535
|
+
"version": "4.4.3",
|
|
7536
|
+
"resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
|
|
7537
|
+
"integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==",
|
|
7599
7538
|
"license": "MIT",
|
|
7600
7539
|
"funding": {
|
|
7601
7540
|
"url": "https://github.com/sponsors/colinhacks"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omnius",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.327",
|
|
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",
|
|
@@ -80,15 +80,15 @@
|
|
|
80
80
|
"node": ">=22.0.0"
|
|
81
81
|
},
|
|
82
82
|
"dependencies": {
|
|
83
|
-
"aiwg": "2026.
|
|
83
|
+
"aiwg": "2026.6.2",
|
|
84
84
|
"omnius-fabric": "^0.12.8",
|
|
85
|
-
"glob": "^
|
|
86
|
-
"ignore": "^
|
|
85
|
+
"glob": "^13.0.6",
|
|
86
|
+
"ignore": "^7.0.5",
|
|
87
87
|
"image-to-ascii": "file:vendor/image-to-ascii",
|
|
88
88
|
"nats.ws": "1.30.3",
|
|
89
89
|
"open-agents-nexus": "1.17.3",
|
|
90
90
|
"ws": "^8.20.0",
|
|
91
|
-
"zod": "^
|
|
91
|
+
"zod": "^4.4.3"
|
|
92
92
|
},
|
|
93
93
|
"bundledDependencies": [
|
|
94
94
|
"image-to-ascii"
|