omnius 1.0.52 → 1.0.53

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
@@ -255441,7 +255441,7 @@ function videoGenerationSetupPlan(backend, repoRoot = ".", model) {
255441
255441
  `Default first-run model: ${DEFAULT_DIFFUSERS_VIDEO_MODEL} (Sana-Video 480p; T2V+I2V).`,
255442
255442
  "The venv, Hugging Face cache, Torch cache, and pip cache stay under .omnius/video-gen.",
255443
255443
  "The runner script is created automatically at .omnius/video-gen/diffusers_text2video.py.",
255444
- "HF gated repos (HunyuanVideo, LTX-Video, LTX-2.3) are auto-accepted on first download set HF_TOKEN to enable.",
255444
+ "HF gated repos (Sana-Video, HunyuanVideo, LTX-Video, LTX-2.3) require HF_TOKEN set it in your environment and accept the model license on huggingface.co before first download.",
255445
255445
  "Synchronized audio-video: pass with_audio=true (post-process mux) or use Lightricks/LTX-2.3 / Wan-AI/Wan2.2-S2V-14B for native sync.",
255446
255446
  "Video generation is slow — expect 2-10 minutes per clip on consumer GPUs."
255447
255447
  ]
@@ -255534,8 +255534,11 @@ function formatVideoFailure(stderrOrStdout) {
255534
255534
  if (lower.includes("autoencoderklwan") && (lower.includes("not found") || lower.includes("no module") || lower.includes("cannot import"))) {
255535
255535
  notes2.push("Diffusers is missing the AutoencoderKLWan symbol. Upgrade with: pip install -U 'diffusers>=0.32'.");
255536
255536
  }
255537
- if (lower.includes("hf_token") || lower.includes("gated repo") || lower.includes("401") || lower.includes("unauthorized")) {
255538
- notes2.push("This video model requires Hugging Face authentication or license acceptance. Set HF_TOKEN and accept the license on the model page, then re-run.");
255537
+ if (lower.includes("hf_token") || lower.includes("gated repo") || lower.includes("401") || lower.includes("unauthorized") || lower.includes("repository not found")) {
255538
+ notes2.push("This video model is gated on Hugging Face. You must: (1) visit the model page on huggingface.co and accept the license, and (2) set HF_TOKEN in your environment (export HF_TOKEN=your_token). Then re-run.");
255539
+ }
255540
+ if (lower.includes("sana-video") && (lower.includes("401") || lower.includes("unauthorized") || lower.includes("repository not found"))) {
255541
+ notes2.push("Sana-Video models require Hugging Face login. Run: huggingface-cli login, or set HF_TOKEN. Also accept the license at https://huggingface.co/NVlabs/Sana-Video-480p or https://huggingface.co/NVlabs/Sana-Video-720p");
255539
255542
  }
255540
255543
  if (lower.includes("ltx-video-open-weights")) {
255541
255544
  notes2.push("LTX-Video is licensed under the LTX Open-Weights non-commercial license; review the bundled license before commercial use.");
@@ -255562,7 +255565,10 @@ function videoGenerationPythonEnv(repoRoot) {
255562
255565
  DIFFUSERS_CACHE: join38(hf, "diffusers"),
255563
255566
  TORCH_HOME: join38(root, "torch"),
255564
255567
  XDG_CACHE_HOME: join38(root, "cache"),
255565
- PIP_CACHE_DIR: join38(root, "pip-cache")
255568
+ PIP_CACHE_DIR: join38(root, "pip-cache"),
255569
+ // Pass through HF_TOKEN if set — required for gated models like Sana-Video, HunyuanVideo, LTX-Video
255570
+ ...process.env.HF_TOKEN ? { HF_TOKEN: process.env.HF_TOKEN } : {},
255571
+ ...process.env.HUGGING_FACE_HUB_TOKEN ? { HUGGING_FACE_HUB_TOKEN: process.env.HUGGING_FACE_HUB_TOKEN } : {}
255566
255572
  };
255567
255573
  }
255568
255574
  async function ensureVideoGenerationCacheDirs(repoRoot) {
@@ -560097,6 +560103,7 @@ __export(render_exports, {
560097
560103
  renderTaskIncomplete: () => renderTaskIncomplete,
560098
560104
  renderThinking: () => renderThinking,
560099
560105
  renderToolCallStart: () => renderToolCallStart,
560106
+ renderToolLine: () => renderToolLine,
560100
560107
  renderToolResult: () => renderToolResult,
560101
560108
  renderUserInterrupt: () => renderUserInterrupt,
560102
560109
  renderUserMessage: () => renderUserMessage,
@@ -560272,12 +560279,18 @@ function renderToolCallStart(toolName, args, verbose) {
560272
560279
  const colorFn = _colorsEnabled ? TOOL_COLORS[toolName] ?? c3.dim : (t2) => t2;
560273
560280
  const emojiPrefix = _emojisEnabled ? `${icon} ` : "";
560274
560281
  process.stdout.write(`
560275
- ${c3.dim("⎿")} ${emojiPrefix}${colorFn(c3.bold(label))}${argsSummary ? c3.dim(": ") + argsSummary : ""}
560282
+ ${emojiPrefix}${colorFn(c3.bold(label))}${argsSummary ? c3.dim(": ") + argsSummary : ""}
560283
+ `);
560284
+ }
560285
+ function renderToolLine(content, isLast = false) {
560286
+ const connector = isLast ? "└" : "├";
560287
+ process.stdout.write(` ${c3.dim(connector)}─ ${content}
560276
560288
  `);
560277
560289
  }
560278
560290
  function renderToolResult(toolName, success, output, verbose) {
560291
+ const debug = loadConfig()?.debug ?? false;
560279
560292
  const maxW = verbose ? Math.max(getTermWidth() - 10, 200) : getTermWidth() - 10;
560280
- const prefix = ` ${c3.dim("")} `;
560293
+ const prefix = ` ${c3.dim("")} `;
560281
560294
  switch (toolName) {
560282
560295
  case "file_write": {
560283
560296
  const summary = extractFirstLine(output, maxW);
@@ -560327,7 +560340,12 @@ function renderToolResult(toolName, success, output, verbose) {
560327
560340
  default:
560328
560341
  break;
560329
560342
  }
560330
- const lines = output.split("\n").filter((l2) => l2.trim());
560343
+ const lines = output.split("\n").filter((l2) => {
560344
+ const trimmed = l2.trim();
560345
+ if (!trimmed) return false;
560346
+ if (!debug && (trimmed.startsWith("[trust_tier:") || trimmed.startsWith("[SYSTEM]:") || trimmed.includes("tool_output_untrusted"))) return false;
560347
+ return true;
560348
+ });
560331
560349
  if (lines.length === 0) {
560332
560350
  const icon = success ? _emojisEnabled ? c3.green("✔") : c3.green("+") : _emojisEnabled ? c3.red("✖") : c3.red("x");
560333
560351
  process.stdout.write(`${prefix}${icon} ${success ? c3.dim("Done") : c3.red("Failed")}
@@ -560381,7 +560399,7 @@ function renderToolResult(toolName, success, output, verbose) {
560381
560399
  }
560382
560400
  }
560383
560401
  function renderImageAsciiPreview(title, imagePath, ascii2, renderer) {
560384
- const prefix = ` ${c3.dim("")} `;
560402
+ const prefix = ` ${c3.dim("")} `;
560385
560403
  const maxW = Math.max(getTermWidth() - 10, 40);
560386
560404
  const header = `${title}: ${imagePath} (${renderer})`;
560387
560405
  process.stdout.write(`
@@ -560807,6 +560825,7 @@ var init_render = __esm({
560807
560825
  init_theme();
560808
560826
  init_layout2();
560809
560827
  init_command_registry();
560828
+ init_config();
560810
560829
  isTTY2 = process.stdout.isTTY ?? false;
560811
560830
  c3 = {
560812
560831
  bold: (t2) => ansi2("1", t2),
@@ -561767,11 +561786,11 @@ function renderVoiceSessionStart(tunnelUrl) {
561767
561786
  process.stdout.write(`
561768
561787
  ${c3.cyan("☁")} ${c3.bold("Live Voice Session")}
561769
561788
  `);
561770
- process.stdout.write(` ${c3.dim("")} ${c3.cyan(tunnelUrl)}
561789
+ process.stdout.write(` ${c3.dim("")} ${c3.cyan(tunnelUrl)}
561771
561790
  `);
561772
- process.stdout.write(` ${c3.dim("")} Bidirectional PCM audio + live transcription
561791
+ process.stdout.write(` ${c3.dim("")} Bidirectional PCM audio + live transcription
561773
561792
  `);
561774
- process.stdout.write(` ${c3.dim("")} /hangup to end session (auto-closes after 1 min idle)
561793
+ process.stdout.write(` ${c3.dim("")} /hangup to end session (auto-closes after 1 min idle)
561775
561794
 
561776
561795
  `);
561777
561796
  }
@@ -561785,13 +561804,13 @@ function renderVoiceSessionStop(runtime) {
561785
561804
  }
561786
561805
  function renderVoiceSessionUser(action, username) {
561787
561806
  const icon = action === "connected" ? c3.green("→") : c3.red("←");
561788
- process.stdout.write(` ${c3.dim("")} ${c3.cyan("☁")} ${icon} ${username} ${action}
561807
+ process.stdout.write(` ${c3.dim("")} ${c3.cyan("☁")} ${icon} ${username} ${action}
561789
561808
  `);
561790
561809
  }
561791
561810
  function renderVoiceSessionTranscript(speaker, text) {
561792
561811
  const label = speaker === "user" ? c3.yellow("user") : c3.cyan("agent");
561793
561812
  const preview = text.length > 80 ? text.slice(0, 77) + "..." : text;
561794
- process.stdout.write(` ${c3.dim("")} ${c3.cyan("☁")} [${label}] ${preview}
561813
+ process.stdout.write(` ${c3.dim("")} ${c3.cyan("☁")} [${label}] ${preview}
561795
561814
  `);
561796
561815
  }
561797
561816
  var VoiceSession;
@@ -600470,7 +600489,7 @@ var init_stream_renderer = __esm({
600470
600489
  /**
600471
600490
  * Track cursor's current column on the bottom-of-scroll row during partial
600472
600491
  * flushes so we can wrap when cumulative partials would exceed terminal
600473
- * width. Reset to 0 on \n, 5 when a new " " prefix line starts.
600492
+ * width. Reset to 0 on \n, 5 when a new " " prefix line starts.
600474
600493
  * Essential for the typing-effect: without this, successive partial
600475
600494
  * writes pile up on the bottom row past the right edge and the user
600476
600495
  * only sees proper placement once the stream ends and a full repaint
@@ -600517,11 +600536,11 @@ var init_stream_renderer = __esm({
600517
600536
  } else {
600518
600537
  if (!this.thinkingIndicatorShown) {
600519
600538
  this.thinkingIndicatorShown = true;
600520
- this.writeRaw(dimText(" ") + dimItalic("thinking...") + "\n");
600539
+ this.writeRaw(dimText(" ") + dimItalic("thinking...") + "\n");
600521
600540
  this.lineStarted = false;
600522
600541
  }
600523
600542
  if (this.thinkingTokenCount % 500 === 0) {
600524
- this.writeRaw(dimText(" ") + dimItalic(`thinking... (${this.thinkingTokenCount} tokens)`) + "\n");
600543
+ this.writeRaw(dimText(" ") + dimItalic(`thinking... (${this.thinkingTokenCount} tokens)`) + "\n");
600525
600544
  this.lineStarted = false;
600526
600545
  }
600527
600546
  return;
@@ -600529,7 +600548,7 @@ var init_stream_renderer = __esm({
600529
600548
  }
600530
600549
  if (this.thinkingIndicatorShown && kind === "content") {
600531
600550
  this.thinkingIndicatorShown = false;
600532
- this.writeRaw(dimText(" ") + dimItalic(`thought for ${this.thinkingTokenCount} tokens`) + "\n");
600551
+ this.writeRaw(dimText(" ") + dimItalic(`thought for ${this.thinkingTokenCount} tokens`) + "\n");
600533
600552
  this.thinkingTokenCount = 0;
600534
600553
  this.lineStarted = false;
600535
600554
  }
@@ -600602,13 +600621,13 @@ var init_stream_renderer = __esm({
600602
600621
  const trimmedLine = line.replace(/\n$/, "");
600603
600622
  if (trimmedLine.trimStart().startsWith("```")) {
600604
600623
  if (this.inCodeBlock) {
600605
- this.writeRaw(dimText(" ") + dimText("```") + "\n");
600624
+ this.writeRaw(dimText(" ") + dimText("```") + "\n");
600606
600625
  this.inCodeBlock = false;
600607
600626
  this.codeLang = "";
600608
600627
  this.lineStarted = false;
600609
600628
  } else {
600610
600629
  this.codeLang = trimmedLine.replace(/```/g, "").trim();
600611
- this.writeRaw(dimText(" ") + dimText("```" + this.codeLang) + "\n");
600630
+ this.writeRaw(dimText(" ") + dimText("```" + this.codeLang) + "\n");
600612
600631
  this.inCodeBlock = true;
600613
600632
  this.lineStarted = false;
600614
600633
  }
@@ -600649,7 +600668,7 @@ var init_stream_renderer = __esm({
600649
600668
  this.jsonBlobSuppressed = false;
600650
600669
  }
600651
600670
  }
600652
- const prefix = this.lineStarted ? "" : " ";
600671
+ const prefix = this.lineStarted ? "" : " ";
600653
600672
  const maxW = Math.max(10, termCols() - 6);
600654
600673
  let rendered;
600655
600674
  const emitWrapped = (text2, highlight, trailingNewline) => {
@@ -608254,26 +608273,26 @@ function renderTelegramSubAgentStart(username, text, isAdmin) {
608254
608273
  process.stdout.write(`
608255
608274
  ${c3.cyan("✈")} ${c3.bold(`Sub-agent`)} [${mode}] for @${username}
608256
608275
  `);
608257
- process.stdout.write(` ${c3.dim("")} ${preview}
608276
+ process.stdout.write(` ${c3.dim("")} ${preview}
608258
608277
  `);
608259
608278
  }
608260
608279
  function renderTelegramSubAgentEvent(username, detail) {
608261
- process.stdout.write(` ${c3.dim("")} ${c3.cyan("✈")} ${c3.dim(`@${username}:`)} ${detail}
608280
+ process.stdout.write(` ${c3.dim("")} ${c3.cyan("✈")} ${c3.dim(`@${username}:`)} ${detail}
608262
608281
  `);
608263
608282
  }
608264
608283
  function renderTelegramSubAgentToolCall(username, toolName, args) {
608265
608284
  const preview = args.length > 50 ? args.slice(0, 47) + "..." : args;
608266
- process.stdout.write(` ${c3.dim("")} ${c3.cyan("✈")} ${c3.dim(`@${username}`)} ${c3.bold(toolName)}(${c3.dim(preview)})
608285
+ process.stdout.write(` ${c3.dim("")} ${c3.cyan("✈")} ${c3.dim(`@${username}`)} ${c3.bold(toolName)}(${c3.dim(preview)})
608267
608286
  `);
608268
608287
  }
608269
608288
  function renderTelegramSubAgentComplete(username, summary) {
608270
608289
  const preview = summary.length > 80 ? summary.slice(0, 77) + "..." : summary;
608271
- process.stdout.write(` ${c3.dim("")} ${c3.green("✔")} @${username}: ${c3.dim(preview)}
608290
+ process.stdout.write(` ${c3.dim("")} ${c3.green("✔")} @${username}: ${c3.dim(preview)}
608272
608291
  `);
608273
608292
  }
608274
608293
  function renderTelegramSubAgentError(username, error) {
608275
608294
  const preview = error.length > 80 ? error.slice(0, 77) + "..." : error;
608276
- process.stdout.write(` ${c3.dim("")} ${c3.red("✘")} @${username}: ${c3.dim(preview)}
608295
+ process.stdout.write(` ${c3.dim("")} ${c3.red("✘")} @${username}: ${c3.dim(preview)}
608277
608296
  `);
608278
608297
  }
608279
608298
  var TELEGRAM_TOOL_ACTION_GROUPS, TELEGRAM_TOOL_ACTION_GROUP, TELEGRAM_TOOL_MUTATING_GROUPS, DEFAULT_TELEGRAM_TOOL_GROUP_POLICY, TELEGRAM_TOOL_BUTTON_LABELS, TELEGRAM_SAFETY_PROMPT, ADMIN_DM_PROMPT, ADMIN_GROUP_PROMPT, TELEGRAM_PUBLIC_SOUL_PROFILE, TELEGRAM_PUBLIC_ORCHESTRATOR_CONTRACT, TELEGRAM_PUBLIC_MEMORY_SCOPE_CONTRACT, TELEGRAM_PUBLIC_VISION_STACK_CONTRACT, GROUP_REPLY_DISCRETION_PROMPT, TELEGRAM_CHAT_MODE_PROMPT, ADMIN_CHAT_PROFILE_PROMPT, TELEGRAM_ACTION_RESPONSE_CONTRACT, TELEGRAM_EXTERNAL_ACQUISITION_CONTRACT, TELEGRAM_STUCK_SELF_TALK_PREFIXES, TELEGRAM_CHAT_HISTORY_LIMIT, TELEGRAM_CONTEXT_RECENT_DEFAULT, TELEGRAM_CONTEXT_LINE_LIMIT, TELEGRAM_CONTEXT_SAMPLE_LIMIT, TELEGRAM_MEMORY_CARD_LIMIT, TELEGRAM_MEMORY_NOTE_LIMIT, TELEGRAM_MEMORY_STOPWORDS, TELEGRAM_SUB_AGENT_BOUNDED_OPTIONS, TELEGRAM_PUBLIC_HELP_COMMANDS, TELEGRAM_REMINDER_SLASH_COMMANDS, TELEGRAM_REFLECTION_SLASH_COMMANDS, TELEGRAM_IMAGE_EXTENSIONS, MEDIA_CACHE_TTL_MS, TELEGRAM_CHANNEL_DMN_SWEEP_MS, TELEGRAM_CHANNEL_DMN_IDLE_AFTER_MS, TELEGRAM_CHANNEL_DMN_MIN_INTERVAL_MS, TELEGRAM_CHANNEL_DMN_MIN_MESSAGES, TELEGRAM_PUBLIC_TOOL_QUOTAS, TelegramBridge;
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.52",
3
+ "version": "1.0.53",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omnius",
9
- "version": "1.0.52",
9
+ "version": "1.0.53",
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.52",
3
+ "version": "1.0.53",
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",