omnius 1.0.318 → 1.0.320

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
@@ -687143,23 +687143,23 @@ async function scanProjects() {
687143
687143
  alert('No Omnius instances found under ' + data.base);
687144
687144
  return;
687145
687145
  }
687146
- const unregistered = data.projects.filter((p: any) => !p.registered);
687147
- const registered = data.projects.filter((p: any) => p.registered);
687146
+ const unregistered = data.projects.filter((p) => !p.registered);
687147
+ const registered = data.projects.filter((p) => p.registered);
687148
687148
  let html = '<div style="margin-bottom:8px;font-size:0.65rem;color:var(--color-fg-subtle)">Found ' + data.count + ' Omnius instance(s) under <code>' + data.base + '</code></div>';
687149
687149
  if (registered.length > 0) {
687150
687150
  html += '<div style="font-size:0.65rem;color:var(--color-fg-subtle);margin-bottom:4px">Already registered:</div>';
687151
- registered.forEach((p: any) => {
687151
+ registered.forEach((p) => {
687152
687152
  html += '<div style="padding:4px 8px;margin:2px 0;font-size:0.65rem;color:var(--color-fg-subtle)">✓ ' + p.name + ' — ' + p.root + '</div>';
687153
687153
  });
687154
687154
  }
687155
687155
  if (unregistered.length > 0) {
687156
687156
  html += '<div style="font-size:0.65rem;color:var(--color-fg-subtle);margin:8px 0 4px">Not registered — click to add:</div>';
687157
- unregistered.forEach((p: any) => {
687157
+ unregistered.forEach((p) => {
687158
687158
  html += '<div class="scan-row" data-root="' + encodeURIComponent(p.root) + '" data-name="' + encodeURIComponent(p.name) + '" style="padding:4px 8px;margin:2px 0;font-size:0.65rem;color:var(--color-brand);cursor:pointer;border:1px dashed var(--color-border);border-radius:3px">' +
687159
687159
  p.name + ' <span style="color:var(--color-fg-faint)">(' + p.root + ')</span>' +
687160
687160
  ' <span style="color:var(--color-success);font-size:0.6rem">[click to register]</span></div>';
687161
687161
  });
687162
- document.querySelectorAll('.scan-row').forEach((el: any) => {
687162
+ document.querySelectorAll('.scan-row').forEach((el) => {
687163
687163
  el.addEventListener('click', async () => {
687164
687164
  const root = decodeURIComponent(el.getAttribute('data-root') || '');
687165
687165
  const name = decodeURIComponent(el.getAttribute('data-name') || '');
@@ -687238,8 +687238,9 @@ window.addProject = addProject;
687238
687238
 
687239
687239
  // ─── Filter projects by search text ───
687240
687240
  function filterProjects() {
687241
- const query = (document.getElementById('project-search') as HTMLInputElement)?.value.toLowerCase() || '';
687242
- document.querySelectorAll('.proj-row').forEach((el: any) => {
687241
+ const search = document.getElementById('project-search');
687242
+ const query = String((search && search.value) || '').toLowerCase();
687243
+ document.querySelectorAll('.proj-row').forEach((el) => {
687243
687244
  const root = (el.getAttribute('data-root') || '').toLowerCase();
687244
687245
  const name = (el.textContent || '').toLowerCase();
687245
687246
  el.style.display = (!query || root.includes(query) || name.includes(query)) ? '' : 'none';
@@ -694342,6 +694343,29 @@ function tokensMatch(a2, b) {
694342
694343
  return false;
694343
694344
  }
694344
694345
  }
694346
+ function cookieValue(req3, name10) {
694347
+ const raw = req3.headers["cookie"];
694348
+ if (typeof raw !== "string" || !raw) return null;
694349
+ for (const part of raw.split(";")) {
694350
+ const idx = part.indexOf("=");
694351
+ if (idx <= 0) continue;
694352
+ const k = part.slice(0, idx).trim();
694353
+ if (k !== name10) continue;
694354
+ try {
694355
+ return decodeURIComponent(part.slice(idx + 1).trim());
694356
+ } catch {
694357
+ return part.slice(idx + 1).trim();
694358
+ }
694359
+ }
694360
+ return null;
694361
+ }
694362
+ function isLoopbackRequest(req3) {
694363
+ const remoteIp = (req3.socket?.remoteAddress || "").replace(/^::ffff:/, "");
694364
+ return isLoopbackIP(remoteIp);
694365
+ }
694366
+ function hasLocalUiSession(req3) {
694367
+ return isLoopbackRequest(req3) && tokensMatch(cookieValue(req3, LOCAL_UI_SESSION_COOKIE), LOCAL_UI_SESSION_TOKEN);
694368
+ }
694345
694369
  function scopedEnvKeySources() {
694346
694370
  const pick = (...names) => {
694347
694371
  for (const n2 of names) {
@@ -694441,6 +694465,9 @@ function resolveAuth(req3) {
694441
694465
  } catch {
694442
694466
  }
694443
694467
  }
694468
+ if (hasLocalUiSession(req3)) {
694469
+ return { authenticated: true, scope: "admin", user: "local-ui" };
694470
+ }
694444
694471
  if (!anyEnvAuthKeyConfigured()) {
694445
694472
  const insecureLoopbackAdmin = process.env["OMNIUS_INSECURE_LOOPBACK_ADMIN"] === "1";
694446
694473
  const remoteIp = (req3.socket?.remoteAddress || "").replace(/^::ffff:/, "");
@@ -697893,12 +697920,16 @@ async function handleRequest(req3, res, ollamaUrl, verbose, runtimeDefaults = {}
697893
697920
  "/config"
697894
697921
  ]);
697895
697922
  if (guiRoutes.has(pathname) && method === "GET" && req3.headers.accept?.includes("text/html")) {
697896
- res.writeHead(200, {
697923
+ const htmlHeaders = {
697897
697924
  "Content-Type": "text/html; charset=utf-8",
697898
697925
  "Cache-Control": "no-cache, no-store, must-revalidate, max-age=0",
697899
697926
  Pragma: "no-cache",
697900
697927
  Expires: "0"
697901
- });
697928
+ };
697929
+ if (isLoopbackRequest(req3)) {
697930
+ htmlHeaders["Set-Cookie"] = LOCAL_UI_SESSION_COOKIE + "=" + encodeURIComponent(LOCAL_UI_SESSION_TOKEN) + "; Path=/; HttpOnly; SameSite=Strict; Max-Age=86400" + (req3.socket.encrypted ? "; Secure" : "");
697931
+ }
697932
+ res.writeHead(200, htmlHeaders);
697902
697933
  res.end(getWebUI());
697903
697934
  return;
697904
697935
  }
@@ -702818,7 +702849,7 @@ function setTimerEnabled(name10, enabled2) {
702818
702849
  return false;
702819
702850
  }
702820
702851
  }
702821
- var require4, NEXUS_DIRECTORY_ORIGIN2, NEXUS_SPONSORS_URL2, endpointRegistry, modelRouteMap, endpointUsage, _lastEndpointDiagnostics, BACKEND_TIMEOUT_DEFAULT_MS, BACKEND_TIMEOUT_MAX_MS, MODEL_LIST_TIMEOUT_DEFAULT_MS, metrics, startedAt, realtimeOllamaFallbackCache, runningProcesses, perKeyUsage, CRON_MARKER2;
702852
+ var require4, NEXUS_DIRECTORY_ORIGIN2, NEXUS_SPONSORS_URL2, endpointRegistry, modelRouteMap, endpointUsage, _lastEndpointDiagnostics, BACKEND_TIMEOUT_DEFAULT_MS, BACKEND_TIMEOUT_MAX_MS, MODEL_LIST_TIMEOUT_DEFAULT_MS, metrics, startedAt, realtimeOllamaFallbackCache, runningProcesses, LOCAL_UI_SESSION_COOKIE, LOCAL_UI_SESSION_TOKEN, perKeyUsage, CRON_MARKER2;
702822
702853
  var init_serve = __esm({
702823
702854
  "packages/cli/src/api/serve.ts"() {
702824
702855
  "use strict";
@@ -702869,6 +702900,8 @@ var init_serve = __esm({
702869
702900
  startedAt = Date.now();
702870
702901
  realtimeOllamaFallbackCache = /* @__PURE__ */ new Map();
702871
702902
  runningProcesses = /* @__PURE__ */ new Map();
702903
+ LOCAL_UI_SESSION_COOKIE = "omnius_ui_session";
702904
+ LOCAL_UI_SESSION_TOKEN = randomBytes28(32).toString("base64url");
702872
702905
  perKeyUsage = /* @__PURE__ */ new Map();
702873
702906
  CRON_MARKER2 = "# OMNIUS-SCHEDULED:";
702874
702907
  }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.318",
3
+ "version": "1.0.320",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omnius",
9
- "version": "1.0.318",
9
+ "version": "1.0.320",
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.318",
3
+ "version": "1.0.320",
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",