omnius 1.0.683 → 1.0.685

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
@@ -102981,8 +102981,8 @@ var init_safe_python = __esm({
102981
102981
  if (!math.unsupported) {
102982
102982
  return { success: false, output: "", error: `math error: ${math.error}`, durationMs: dur() };
102983
102983
  }
102984
- const disabled = process.env["OMNIUS_DISABLE_SANDBOXED_PYTHON"] === "1";
102985
- if (!this.allowSandboxed || disabled) {
102984
+ const disabled2 = process.env["OMNIUS_DISABLE_SANDBOXED_PYTHON"] === "1";
102985
+ if (!this.allowSandboxed || disabled2) {
102986
102986
  return {
102987
102987
  success: false,
102988
102988
  output: "",
@@ -697287,7 +697287,7 @@ import {
697287
697287
  import { fileURLToPath as fileURLToPath24 } from "node:url";
697288
697288
  import { join as join143 } from "node:path";
697289
697289
  function startIdleMemoryMaintenance(options2) {
697290
- const disabled = process.env["OMNIUS_DISABLE_IDLE_MEMORY_MAINTENANCE"] === "1";
697290
+ const disabled2 = process.env["OMNIUS_DISABLE_IDLE_MEMORY_MAINTENANCE"] === "1";
697291
697291
  let lastActivity = Date.now();
697292
697292
  let worker2 = null;
697293
697293
  let cancelledRunId = null;
@@ -697355,7 +697355,7 @@ function startIdleMemoryMaintenance(options2) {
697355
697355
  }
697356
697356
  };
697357
697357
  const maybeStart = () => {
697358
- if (disabled || worker2) return;
697358
+ if (disabled2 || worker2) return;
697359
697359
  if (options2.isBusy()) {
697360
697360
  lastActivity = Date.now();
697361
697361
  stopWorker();
@@ -697374,7 +697374,7 @@ function startIdleMemoryMaintenance(options2) {
697374
697374
  if (options2.isBusy()) stopWorker();
697375
697375
  },
697376
697376
  triggerAfterTask() {
697377
- if (disabled) return;
697377
+ if (disabled2) return;
697378
697378
  markDirty(options2.repoRoot);
697379
697379
  lastActivity = Date.now();
697380
697380
  },
@@ -700101,8 +700101,8 @@ function defaultConsensusModel(primaryModel) {
700101
700101
  return "base";
700102
700102
  }
700103
700103
  function resolveAsrConsensusModel(primaryModel) {
700104
- const disabled = String(process.env["OMNIUS_ASR_DISABLE_CONSENSUS"] ?? "").trim().toLowerCase();
700105
- if (disabled === "1" || disabled === "true" || disabled === "yes" || disabled === "on") {
700104
+ const disabled2 = String(process.env["OMNIUS_ASR_DISABLE_CONSENSUS"] ?? "").trim().toLowerCase();
700105
+ if (disabled2 === "1" || disabled2 === "true" || disabled2 === "yes" || disabled2 === "on") {
700106
700106
  return "off";
700107
700107
  }
700108
700108
  const consensusEnv = String(
@@ -710771,6 +710771,12 @@ var init_command_registry = __esm({
710771
710771
  ["/endpoint <url> --auth <t>", "Set endpoint with Bearer auth"],
710772
710772
  ["/config", "Show current configuration"],
710773
710773
  ["/color", "Show or configure terminal colors/theme"],
710774
+ ["/color status", "Show TUI chrome effect settings"],
710775
+ ["/color frill on|off|toggle|status", "Control ornamental TUI button ends"],
710776
+ [
710777
+ "/color flow on|off|toggle|status",
710778
+ "Control animated and gradient-flowing box borders"
710779
+ ],
710774
710780
  ["/theme", "Alias for /color"],
710775
710781
  ["/setup", "Run the initial setup wizard again"],
710776
710782
  ["/wizard", "Alias for /setup"],
@@ -714213,6 +714219,78 @@ var init_terminal_links = __esm({
714213
714219
  }
714214
714220
  });
714215
714221
 
714222
+ // packages/cli/src/tui/terminal-capabilities.ts
714223
+ function enabled2(value2) {
714224
+ return /^(?:1|true|yes|on)$/i.test(value2?.trim() ?? "");
714225
+ }
714226
+ function disabled(value2) {
714227
+ return /^(?:0|false|no|off)$/i.test(value2?.trim() ?? "");
714228
+ }
714229
+ function isLimitedTerminal(env2) {
714230
+ const term = (env2["TERM"] ?? "").trim().toLowerCase();
714231
+ return /^(?:dumb|linux|cons25|vt100|ansi|unknown)$/.test(term);
714232
+ }
714233
+ function profileEffect(env2) {
714234
+ const profile = (env2["OMNIUS_TUI_PROFILE"] ?? "").trim().toLowerCase();
714235
+ if (profile === "full") return true;
714236
+ if (profile === "compatible" || profile === "static") return false;
714237
+ return void 0;
714238
+ }
714239
+ function environmentEffect(value2) {
714240
+ if (enabled2(value2)) return true;
714241
+ if (disabled(value2)) return false;
714242
+ return void 0;
714243
+ }
714244
+ function getTuiChromeEffects() {
714245
+ return { ..._effects };
714246
+ }
714247
+ function setTuiChromeEffects(patch) {
714248
+ if (typeof patch.buttonFrill === "boolean") {
714249
+ _effects.buttonFrill = patch.buttonFrill;
714250
+ }
714251
+ if (typeof patch.boxColorFlow === "boolean") {
714252
+ _effects.boxColorFlow = patch.boxColorFlow;
714253
+ }
714254
+ return getTuiChromeEffects();
714255
+ }
714256
+ function resolvedEffect(kind, options2) {
714257
+ if (typeof options2[kind] === "boolean") return options2[kind];
714258
+ const env2 = options2.env ?? process.env;
714259
+ const specific = environmentEffect(
714260
+ env2[kind === "buttonFrill" ? "OMNIUS_TUI_BUTTON_FRILL" : "OMNIUS_TUI_BOX_COLOR_FLOW"]
714261
+ );
714262
+ if (specific !== void 0) return specific;
714263
+ if (kind === "boxColorFlow") {
714264
+ if (enabled2(env2["OMNIUS_TUI_STATIC_CHROME"])) return false;
714265
+ if (enabled2(env2["OMNIUS_TUI_ANIMATED_CHROME"])) return true;
714266
+ }
714267
+ return profileEffect(env2) ?? _effects[kind];
714268
+ }
714269
+ function prefersStaticTuiChrome(options2 = {}) {
714270
+ const env2 = options2.env ?? process.env;
714271
+ if (!resolvedEffect("boxColorFlow", options2)) return true;
714272
+ if (isLimitedTerminal(env2)) return true;
714273
+ return false;
714274
+ }
714275
+ function supportsOrnamentalTuiButtonEdges(options2 = {}) {
714276
+ const env2 = options2.env ?? process.env;
714277
+ if (!resolvedEffect("buttonFrill", options2) || isLimitedTerminal(env2)) {
714278
+ return false;
714279
+ }
714280
+ const locale = (env2["LC_ALL"] || env2["LC_CTYPE"] || env2["LANG"] || "").trim();
714281
+ if (locale && !/utf-?8/i.test(locale)) return false;
714282
+ return true;
714283
+ }
714284
+ var _effects;
714285
+ var init_terminal_capabilities = __esm({
714286
+ "packages/cli/src/tui/terminal-capabilities.ts"() {
714287
+ _effects = {
714288
+ buttonFrill: false,
714289
+ boxColorFlow: false
714290
+ };
714291
+ }
714292
+ });
714293
+
714216
714294
  // packages/cli/src/tui/render.ts
714217
714295
  function stdoutIsTTY() {
714218
714296
  return process.stdout.isTTY ?? false;
@@ -714462,7 +714540,9 @@ function xterm256ToRgb(idx) {
714462
714540
  }
714463
714541
  function toolGradSeq(colorCode, frac) {
714464
714542
  if (!_colorsEnabled || !stdoutIsTTY()) return "";
714465
- if (!truecolorOk()) return toolColorSeq(colorCode);
714543
+ if (!truecolorOk() || prefersStaticTuiChrome()) {
714544
+ return toolColorSeq(colorCode);
714545
+ }
714466
714546
  const [r2, g, b] = xterm256ToRgb(colorCode);
714467
714547
  const f2 = Math.max(0, Math.min(1, frac));
714468
714548
  const scale = 0.78 + 0.36 * f2;
@@ -714471,7 +714551,7 @@ function toolGradSeq(colorCode, frac) {
714471
714551
  }
714472
714552
  function paintToolBorder(glyphs, startCol, totalWidth, colorCode) {
714473
714553
  if (glyphs.length === 0) return "";
714474
- if (!_colorsEnabled || !stdoutIsTTY() || !truecolorOk()) {
714554
+ if (!_colorsEnabled || !stdoutIsTTY() || !truecolorOk() || prefersStaticTuiChrome()) {
714475
714555
  return `${toolColorSeq(colorCode)}${glyphs}`;
714476
714556
  }
714477
714557
  const SEG = 6;
@@ -716027,6 +716107,7 @@ var init_render = __esm({
716027
716107
  init_tool_collapse_store();
716028
716108
  init_internal_output();
716029
716109
  init_terminal_links();
716110
+ init_terminal_capabilities();
716030
716111
  c3 = {
716031
716112
  bold: (t2) => ansi2("1", t2),
716032
716113
  dim: (t2) => stdoutIsTTY() ? `${dimFg()}${t2}\x1B[0m` : t2,
@@ -724847,35 +724928,6 @@ var init_dist9 = __esm({
724847
724928
  }
724848
724929
  });
724849
724930
 
724850
- // packages/cli/src/tui/terminal-capabilities.ts
724851
- function enabled2(value2) {
724852
- return /^(?:1|true|yes|on)$/i.test(value2?.trim() ?? "");
724853
- }
724854
- function hasNoColor(env2) {
724855
- return env2["NO_COLOR"] !== void 0 && env2["NO_COLOR"] !== "";
724856
- }
724857
- function isLimitedTerminal(env2) {
724858
- const term = (env2["TERM"] ?? "").trim().toLowerCase();
724859
- return /^(?:dumb|linux|cons25|vt100|ansi|unknown)$/.test(term);
724860
- }
724861
- function isRemoteTerminalSession(env2 = process.env) {
724862
- return Boolean(env2["SSH_TTY"] || env2["SSH_CONNECTION"] || env2["SSH_CLIENT"]);
724863
- }
724864
- function prefersStaticTuiChrome(options2 = {}) {
724865
- const platform13 = options2.platform ?? process.platform;
724866
- const env2 = options2.env ?? process.env;
724867
- if (platform13 === "darwin" || platform13 === "win32") return true;
724868
- if (enabled2(env2["OMNIUS_TUI_STATIC_CHROME"])) return true;
724869
- if (enabled2(env2["OMNIUS_TUI_ANIMATED_CHROME"])) return false;
724870
- if (isRemoteTerminalSession(env2)) return true;
724871
- if (hasNoColor(env2) || isLimitedTerminal(env2)) return true;
724872
- return false;
724873
- }
724874
- var init_terminal_capabilities = __esm({
724875
- "packages/cli/src/tui/terminal-capabilities.ts"() {
724876
- }
724877
- });
724878
-
724879
724931
  // packages/cli/src/tui/stageIndicator.ts
724880
724932
  function stageForToolName(toolName) {
724881
724933
  const name10 = String(toolName ?? "").trim().toLowerCase();
@@ -727991,6 +728043,10 @@ __export(status_bar_exports, {
727991
728043
  });
727992
728044
  import { basename as basename35, dirname as dirname63 } from "node:path";
727993
728045
  import { readFile as readFileAsync } from "node:fs/promises";
728046
+ function headerButtonGlyphFg() {
728047
+ const a2 = tuiAccent();
728048
+ return a2 < 0 ? "\x1B[39m" : `\x1B[38;5;${a2}m`;
728049
+ }
727994
728050
  function headerButtonBg() {
727995
728051
  const a2 = tuiAccent();
727996
728052
  return a2 < 0 ? "\x1B[7m" : `\x1B[48;5;${a2}m`;
@@ -728062,6 +728118,7 @@ function refreshThemeVars() {
728062
728118
  BOX_FG = tuiBoxFg();
728063
728119
  TEXT_PRIMARY = tuiTextPrimary() < 0 ? 252 : tuiTextPrimary();
728064
728120
  TEXT_DIM = tuiTextDim();
728121
+ HEADER_BUTTON_GLYPH_FG = headerButtonGlyphFg();
728065
728122
  HEADER_BUTTON_BG = headerButtonBg();
728066
728123
  HEADER_BUTTON_FG = headerButtonFg();
728067
728124
  HEADER_ACCENT_BOLD_FG = headerAccentBoldFg();
@@ -728100,7 +728157,7 @@ function setTerminalTitle(task, version5) {
728100
728157
  process.stdout.write(data);
728101
728158
  }
728102
728159
  }
728103
- var EXPERT_TOOL_BASELINES, CONTEXT_SWITCH_OVERHEAD, TURN_PLANNING_OVERHEAD, DEFAULT_TOOL_BASELINE, CODE_READ_CHARS_PER_SEC, PROSE_READ_CHARS_PER_SEC, MIN_CONTENT_FOR_READING, CODE_CONTENT_TOOLS, PROSE_CONTENT_TOOLS, HumanSpeedTracker, PANEL_BG_SEQ, CONTENT_BG_SEQ, BOX_FG, TEXT_PRIMARY, TEXT_DIM, NO_SUB_AGENTS_HEADER_LABEL, HEADER_BUTTON_BG, HEADER_BUTTON_FG, HEADER_ACCENT_BOLD_FG, HEADER_TELEGRAM_FG, BOX_TL3, BOX_TR3, BOX_BL3, BOX_BR3, BOX_H3, BOX_V3, BOX_BJ, BOX_TJ, ENHANCE_SEG_INNER, ENHANCE_SPIN_FRAMES, _globalFooterLock, RESET4, CURSOR_BLINK_BLOCK, HEADER_BUTTON_LEFT, HEADER_BUTTON_RIGHT, SPONSOR_HEADER_LABEL_MAX, _termTitleWriter, StatusBar;
728160
+ var EXPERT_TOOL_BASELINES, CONTEXT_SWITCH_OVERHEAD, TURN_PLANNING_OVERHEAD, DEFAULT_TOOL_BASELINE, CODE_READ_CHARS_PER_SEC, PROSE_READ_CHARS_PER_SEC, MIN_CONTENT_FOR_READING, CODE_CONTENT_TOOLS, PROSE_CONTENT_TOOLS, HumanSpeedTracker, PANEL_BG_SEQ, CONTENT_BG_SEQ, BOX_FG, TEXT_PRIMARY, TEXT_DIM, NO_SUB_AGENTS_HEADER_LABEL, HEADER_BUTTON_GLYPH_FG, HEADER_BUTTON_BG, HEADER_BUTTON_FG, HEADER_ACCENT_BOLD_FG, HEADER_TELEGRAM_FG, BOX_TL3, BOX_TR3, BOX_BL3, BOX_BR3, BOX_H3, BOX_V3, BOX_BJ, BOX_TJ, ENHANCE_SEG_INNER, ENHANCE_SPIN_FRAMES, _globalFooterLock, RESET4, CURSOR_BLINK_BLOCK, HEADER_BUTTON_LEFT, HEADER_BUTTON_RIGHT, HEADER_BUTTON_SQUARE_PAD, SPONSOR_HEADER_LABEL_MAX, _termTitleWriter, StatusBar;
728104
728161
  var init_status_bar = __esm({
728105
728162
  "packages/cli/src/tui/status-bar.ts"() {
728106
728163
  init_render();
@@ -728115,6 +728172,7 @@ var init_status_bar = __esm({
728115
728172
  init_text_selection();
728116
728173
  init_overlay_lock();
728117
728174
  init_dist5();
728175
+ init_terminal_capabilities();
728118
728176
  init_theme();
728119
728177
  init_tool_collapse_store();
728120
728178
  init_layout2();
@@ -728285,6 +728343,7 @@ var init_status_bar = __esm({
728285
728343
  TEXT_PRIMARY = tuiTextPrimary() < 0 ? 252 : tuiTextPrimary();
728286
728344
  TEXT_DIM = tuiTextDim();
728287
728345
  NO_SUB_AGENTS_HEADER_LABEL = " no sub-agents ";
728346
+ HEADER_BUTTON_GLYPH_FG = headerButtonGlyphFg();
728288
728347
  HEADER_BUTTON_BG = headerButtonBg();
728289
728348
  HEADER_BUTTON_FG = headerButtonFg();
728290
728349
  HEADER_ACCENT_BOLD_FG = headerAccentBoldFg();
@@ -728302,8 +728361,9 @@ var init_status_bar = __esm({
728302
728361
  _globalFooterLock = false;
728303
728362
  RESET4 = "\x1B[0m";
728304
728363
  CURSOR_BLINK_BLOCK = "\x1B[1 q";
728305
- HEADER_BUTTON_LEFT = " ";
728306
- HEADER_BUTTON_RIGHT = " ";
728364
+ HEADER_BUTTON_LEFT = "🭁";
728365
+ HEADER_BUTTON_RIGHT = "🭝";
728366
+ HEADER_BUTTON_SQUARE_PAD = " ";
728307
728367
  SPONSOR_HEADER_LABEL_MAX = 48;
728308
728368
  _termTitleWriter = null;
728309
728369
  StatusBar = class _StatusBar {
@@ -729056,7 +729116,10 @@ var init_status_bar = __esm({
729056
729116
  /** Filled header button whose hue band follows the child agent's current action. */
729057
729117
  paintAgentButton(content, stage2, active) {
729058
729118
  const useTruecolor = supportsAnimatedTuiChrome();
729059
- const chars = Array.from(`${HEADER_BUTTON_LEFT}${content}${HEADER_BUTTON_RIGHT}`);
729119
+ const ornamentalEdges = supportsOrnamentalTuiButtonEdges();
729120
+ const chars = Array.from(
729121
+ ornamentalEdges ? content : `${HEADER_BUTTON_SQUARE_PAD}${content}${HEADER_BUTTON_SQUARE_PAD}`
729122
+ );
729060
729123
  let body = "";
729061
729124
  for (let i2 = 0; i2 < chars.length; i2++) {
729062
729125
  const char = chars[i2];
@@ -729070,7 +729133,16 @@ var init_status_bar = __esm({
729070
729133
  body += `${active ? "\x1B[1m" : ""}\x1B[38;5;${contrastTextColor(fallback)}m\x1B[48;5;${fallback}m${char}\x1B[0m`;
729071
729134
  }
729072
729135
  }
729073
- return `${body}${RESET4}${PANEL_BG_SEQ}`;
729136
+ if (!ornamentalEdges) return `${body}${RESET4}${PANEL_BG_SEQ}`;
729137
+ const [lr, lg, lb] = stageGradientRgb(stage2, 0, this._stagePhase);
729138
+ const leftBorder = useTruecolor ? `\x1B[38;2;${lr};${lg};${lb}m` : `\x1B[38;5;${stageFallbackColor(stage2)}m`;
729139
+ const [rr, rg, rb] = stageGradientRgb(
729140
+ stage2,
729141
+ Math.max(0, chars.length - 1),
729142
+ this._stagePhase
729143
+ );
729144
+ const rightBorder = useTruecolor ? `\x1B[38;2;${rr};${rg};${rb}m` : `\x1B[38;5;${stageFallbackColor(stage2)}m`;
729145
+ return `${leftBorder}${HEADER_BUTTON_LEFT}${RESET4}` + body + `${RESET4}${PANEL_BG_SEQ}${rightBorder}${HEADER_BUTTON_RIGHT}${RESET4}${PANEL_BG_SEQ}`;
729074
729146
  }
729075
729147
  paintAgentText(value2, stage2, offset = 0) {
729076
729148
  const chars = Array.from(value2);
@@ -729094,7 +729166,10 @@ var init_status_bar = __esm({
729094
729166
  return `\x1B]8;;${cmdPrefix}\x07${label}\x1B]8;;\x07`;
729095
729167
  };
729096
729168
  const decorateMenuButton = (cmd, label) => {
729097
- return `${HEADER_BUTTON_BG}${HEADER_BUTTON_FG}${HEADER_BUTTON_LEFT}${label}${HEADER_BUTTON_RIGHT}\x1B[0m${PANEL_BG_SEQ}`;
729169
+ if (!supportsOrnamentalTuiButtonEdges()) {
729170
+ return `${HEADER_BUTTON_BG}${HEADER_BUTTON_FG}${HEADER_BUTTON_SQUARE_PAD}${label}${HEADER_BUTTON_SQUARE_PAD}\x1B[0m${PANEL_BG_SEQ}`;
729171
+ }
729172
+ return `${HEADER_BUTTON_GLYPH_FG}${HEADER_BUTTON_LEFT}\x1B[0m${HEADER_BUTTON_BG}${HEADER_BUTTON_FG}${label}\x1B[0m${PANEL_BG_SEQ}${HEADER_BUTTON_GLYPH_FG}${HEADER_BUTTON_RIGHT}\x1B[0m${PANEL_BG_SEQ}`;
729098
729173
  };
729099
729174
  const renderBtn = (cmd, label) => {
729100
729175
  return linkify(cmd, decorateMenuButton(cmd, label));
@@ -732299,7 +732374,7 @@ ${CONTENT_BG_SEQ}`);
732299
732374
  const reserved = clampGradientWidth(
732300
732375
  Math.max(12, Math.min(needed, maxWidth))
732301
732376
  );
732302
- const truecolor = supportsTruecolor();
732377
+ const truecolor = supportsAnimatedTuiChrome();
732303
732378
  const block = renderStageBlock(
732304
732379
  stage2,
732305
732380
  detail,
@@ -752862,6 +752937,41 @@ async function handleSlashCommand(input, ctx3) {
752862
752937
  case "colors":
752863
752938
  case "theme": {
752864
752939
  const colorAction = arg.toLowerCase();
752940
+ const colorParts = colorAction.split(/\s+/).filter(Boolean);
752941
+ const effectName = colorParts[0];
752942
+ const effectKey = effectName === "frill" || effectName === "button-frill" ? "buttonFrill" : effectName === "flow" || effectName === "box-flow" ? "boxColorFlow" : null;
752943
+ if (effectName === "effects" || effectName === "status") {
752944
+ const effects = getTuiChromeEffects();
752945
+ renderInfo(
752946
+ `TUI chrome: button frill ${effects.buttonFrill ? "on" : "off"}; box color flow ${effects.boxColorFlow ? "on" : "off"}.`
752947
+ );
752948
+ return "handled";
752949
+ }
752950
+ if (effectKey) {
752951
+ const action = colorParts[1] ?? "toggle";
752952
+ const current = getTuiChromeEffects()[effectKey];
752953
+ if (action === "status") {
752954
+ renderInfo(
752955
+ `${effectKey === "buttonFrill" ? "Button frill" : "Box color flow"}: ${current ? "on" : "off"}.`
752956
+ );
752957
+ return "handled";
752958
+ }
752959
+ if (!["toggle", "on", "off", "enable", "disable"].includes(action)) {
752960
+ renderWarning(
752961
+ `Usage: /color ${effectKey === "buttonFrill" ? "frill" : "flow"} on|off|toggle|status`
752962
+ );
752963
+ return "handled";
752964
+ }
752965
+ const next = action === "on" || action === "enable" ? true : action === "off" || action === "disable" ? false : !current;
752966
+ setTuiChromeEffects({ [effectKey]: next });
752967
+ const save3 = hasLocal ? ctx3.saveLocalSettings.bind(ctx3) : ctx3.saveSettings.bind(ctx3);
752968
+ save3({ [effectKey]: next });
752969
+ await refreshColorSurfaces(ctx3, false);
752970
+ renderInfo(
752971
+ `${effectKey === "buttonFrill" ? "Button frill" : "Box color flow"}: ${next ? "on" : "off"}.${hasLocal ? " (project-local)" : ""}`
752972
+ );
752973
+ return "handled";
752974
+ }
752865
752975
  if (cmd !== "theme" && ["toggle", "on", "off", "enable", "disable"].includes(colorAction)) {
752866
752976
  const current = ctx3.getColors?.() ?? true;
752867
752977
  const next = colorAction === "on" || colorAction === "enable" ? true : colorAction === "off" || colorAction === "disable" ? false : !current;
@@ -752875,14 +752985,7 @@ async function handleSlashCommand(input, ctx3) {
752875
752985
  }
752876
752986
  if (["system", "branding", "custom"].includes(colorAction)) {
752877
752987
  setThemeMode(colorAction);
752878
- refreshThemeVars();
752879
- try {
752880
- const tasksRenderer = await Promise.resolve().then(() => (init_tui_tasks_renderer(), tui_tasks_renderer_exports));
752881
- tasksRenderer.refreshTuiTasksThemeVars?.();
752882
- tasksRenderer.refreshTuiTasks?.();
752883
- } catch {
752884
- }
752885
- ctx3.refreshBanner?.();
752988
+ await refreshColorSurfaces(ctx3, true);
752886
752989
  const settings = { colorTheme: colorAction };
752887
752990
  const save3 = hasLocal ? ctx3.saveLocalSettings.bind(ctx3) : ctx3.saveSettings.bind(ctx3);
752888
752991
  save3(settings);
@@ -752891,7 +752994,7 @@ async function handleSlashCommand(input, ctx3) {
752891
752994
  );
752892
752995
  return "handled";
752893
752996
  }
752894
- await showColorMenu(ctx3);
752997
+ await showColorMenu(ctx3, hasLocal);
752895
752998
  return "handled";
752896
752999
  }
752897
753000
  case "apikey":
@@ -758870,8 +758973,20 @@ async function restoreNamedSession(ctx3, query) {
758870
758973
  ctx3.clearScreen();
758871
758974
  await replaySession(ctx3, session.id);
758872
758975
  }
758873
- async function showColorMenu(ctx3) {
758976
+ async function refreshColorSurfaces(ctx3, themeChanged) {
758977
+ if (themeChanged) refreshThemeVars();
758978
+ try {
758979
+ const tasksRenderer = await Promise.resolve().then(() => (init_tui_tasks_renderer(), tui_tasks_renderer_exports));
758980
+ if (themeChanged) tasksRenderer.refreshTuiTasksThemeVars?.();
758981
+ tasksRenderer.refreshTuiTasks?.();
758982
+ } catch {
758983
+ }
758984
+ ctx3.refreshBanner?.();
758985
+ ctx3.refreshDisplay?.();
758986
+ }
758987
+ async function showColorMenu(ctx3, hasLocal = false) {
758874
758988
  const currentConfig = getThemeConfig();
758989
+ const effects = getTuiChromeEffects();
758875
758990
  const items = [
758876
758991
  {
758877
758992
  key: "system",
@@ -758887,29 +759002,40 @@ async function showColorMenu(ctx3) {
758887
759002
  key: "custom",
758888
759003
  label: `Custom${currentConfig.mode === "custom" ? " (active)" : ""}`,
758889
759004
  detail: "User-defined overrides"
759005
+ },
759006
+ {
759007
+ key: "__button_frill__",
759008
+ label: `Button frill: ${effects.buttonFrill ? "on" : "off"}`,
759009
+ detail: "Toggle ornamental Unicode button ends"
759010
+ },
759011
+ {
759012
+ key: "__box_color_flow__",
759013
+ label: `Box color flow: ${effects.boxColorFlow ? "on" : "off"}`,
759014
+ detail: "Toggle animated and gradient-flowing box borders"
758890
759015
  }
758891
759016
  ];
758892
759017
  const result = await tuiSelect({
758893
759018
  items,
758894
- title: "Color Theme"
759019
+ title: "Color and Chrome"
758895
759020
  });
758896
759021
  if (!result || result.key === "cancel") return;
758897
- setThemeMode(result.key);
758898
- refreshThemeVars();
758899
- try {
758900
- const tasksRenderer = await Promise.resolve().then(() => (init_tui_tasks_renderer(), tui_tasks_renderer_exports));
758901
- tasksRenderer.refreshTuiTasksThemeVars?.();
758902
- tasksRenderer.refreshTuiTasks?.();
758903
- } catch {
759022
+ if (result.key === "__button_frill__" || result.key === "__box_color_flow__") {
759023
+ const effectKey = result.key === "__button_frill__" ? "buttonFrill" : "boxColorFlow";
759024
+ const next = !getTuiChromeEffects()[effectKey];
759025
+ setTuiChromeEffects({ [effectKey]: next });
759026
+ const save4 = hasLocal ? ctx3.saveLocalSettings.bind(ctx3) : ctx3.saveSettings.bind(ctx3);
759027
+ save4({ [effectKey]: next });
759028
+ await refreshColorSurfaces(ctx3, false);
759029
+ renderInfo(
759030
+ `${effectKey === "buttonFrill" ? "Button frill" : "Box color flow"}: ${next ? "on" : "off"}.${hasLocal ? " (project-local)" : ""}`
759031
+ );
759032
+ return;
758904
759033
  }
758905
- ctx3.refreshBanner?.();
759034
+ setThemeMode(result.key);
759035
+ await refreshColorSurfaces(ctx3, true);
758906
759036
  renderInfo(`Theme set to: ${result.key}`);
758907
- try {
758908
- const settings = loadGlobalSettings();
758909
- settings.colorTheme = result.key;
758910
- saveGlobalSettings(settings);
758911
- } catch {
758912
- }
759037
+ const save3 = hasLocal ? ctx3.saveLocalSettings.bind(ctx3) : ctx3.saveSettings.bind(ctx3);
759038
+ save3({ colorTheme: result.key });
758913
759039
  }
758914
759040
  async function showConfigEditor(ctx3) {
758915
759041
  const merged = {
@@ -768796,6 +768922,7 @@ var init_commands = __esm({
768796
768922
  init_updater();
768797
768923
  init_omnius_directory();
768798
768924
  init_theme();
768925
+ init_terminal_capabilities();
768799
768926
  init_status_bar();
768800
768927
  init_layout2();
768801
768928
  init_setup();
@@ -821281,6 +821408,10 @@ async function startInteractive(config, repoPath2) {
821281
821408
  setEmojisEnabled(savedSettings.emojis);
821282
821409
  if (savedSettings.colors !== void 0)
821283
821410
  setColorsEnabled(savedSettings.colors);
821411
+ setTuiChromeEffects({
821412
+ buttonFrill: savedSettings.buttonFrill === true,
821413
+ boxColorFlow: savedSettings.boxColorFlow === true
821414
+ });
821284
821415
  if (savedSettings.colorTheme) {
821285
821416
  try {
821286
821417
  const { setThemeMode: setThemeMode2 } = await Promise.resolve().then(() => (init_theme(), theme_exports));
@@ -827890,6 +828021,7 @@ var init_interactive = __esm({
827890
828021
  init_omnius_directory();
827891
828022
  init_render();
827892
828023
  init_internal_output();
828024
+ init_terminal_capabilities();
827893
828025
  init_task_complete_box();
827894
828026
  init_audio_waveform();
827895
828027
  init_carousel();
@@ -863964,7 +864096,7 @@ function removeCronByDirectory(dir) {
863964
864096
  return 0;
863965
864097
  }
863966
864098
  function disableAllOmniusTimers() {
863967
- let disabled = 0;
864099
+ let disabled2 = 0;
863968
864100
  try {
863969
864101
  const { execSync: es } = require4("node:child_process");
863970
864102
  const home3 = process.env.HOME || require4("node:os").homedir();
@@ -863981,7 +864113,7 @@ function disableAllOmniusTimers() {
863981
864113
  }
863982
864114
  try {
863983
864115
  userServiceAction(`${t2.name}.timer`, "disable");
863984
- disabled++;
864116
+ disabled2++;
863985
864117
  } catch {
863986
864118
  }
863987
864119
  try {
@@ -864001,7 +864133,7 @@ function disableAllOmniusTimers() {
864001
864133
  }
864002
864134
  } catch {
864003
864135
  }
864004
- return disabled;
864136
+ return disabled2;
864005
864137
  }
864006
864138
  function removeAllOmniusCrons() {
864007
864139
  try {
@@ -20245,7 +20245,10 @@
20245
20245
  "keywords": [
20246
20246
  "command",
20247
20247
  "ui",
20248
- "color"
20248
+ "color",
20249
+ "status",
20250
+ "frill",
20251
+ "flow"
20249
20252
  ],
20250
20253
  "maturity": "stable",
20251
20254
  "layer": "interface",
@@ -20284,12 +20287,28 @@
20284
20287
  "signature": "/color",
20285
20288
  "description": "Show or configure terminal colors/theme"
20286
20289
  },
20290
+ {
20291
+ "signature": "/color status",
20292
+ "description": "Show TUI chrome effect settings"
20293
+ },
20294
+ {
20295
+ "signature": "/color frill on|off|toggle|status",
20296
+ "description": "Control ornamental TUI button ends"
20297
+ },
20298
+ {
20299
+ "signature": "/color flow on|off|toggle|status",
20300
+ "description": "Control animated and gradient-flowing box borders"
20301
+ },
20287
20302
  {
20288
20303
  "signature": "/theme",
20289
20304
  "description": "Alias for /color"
20290
20305
  }
20291
20306
  ],
20292
- "subcommands": [],
20307
+ "subcommands": [
20308
+ "status",
20309
+ "frill",
20310
+ "flow"
20311
+ ],
20293
20312
  "implementation_status": "implemented",
20294
20313
  "surfaces": {
20295
20314
  "tui": true,
@@ -27,9 +27,9 @@ The input box should preserve Unicode line boundaries and avoid overwriting prev
27
27
 
28
28
  ## Terminal Compatibility
29
29
 
30
- Header controls use background-filled square padding instead of rare ornamental Unicode edge glyphs. This prevents replacement-character boxes when the client font lacks Symbols for Legacy Computing coverage.
30
+ Header controls use background-filled square padding by default. Run `/color frill on` to enable ornamental Unicode ends when the terminal font includes Symbols for Legacy Computing glyphs.
31
31
 
32
- Animated border colors are disabled on macOS, Windows, limited terminals, and SSH sessions. An SSH host cannot reliably detect the client operating system or font. A known-good Linux or Unix SSH client can opt back in with `OMNIUS_TUI_ANIMATED_CHROME=1`. Set `OMNIUS_TUI_STATIC_CHROME=1` to force stable single-color borders on any platform.
32
+ Box-border color animation and gradient flow are disabled by default. Run `/color flow on` to enable them. `/color`, `/color status`, `/color frill status`, and `/color flow status` expose the current state. Both preferences persist in project/global Omnius settings, and `--local` stores only the current project override.
33
33
 
34
34
  ## Shell Output
35
35
 
@@ -1937,11 +1937,14 @@ Show or configure terminal colors/theme
1937
1937
  | Safety | none |
1938
1938
  | Aliases | /colors, /theme |
1939
1939
  | Args | - |
1940
- | Subcommands | - |
1940
+ | Subcommands | status, frill, flow |
1941
1941
 
1942
1942
  Signatures:
1943
1943
 
1944
1944
  - `/color` - Show or configure terminal colors/theme
1945
+ - `/color status` - Show TUI chrome effect settings
1946
+ - `/color frill on\|off\|toggle\|status` - Control ornamental TUI button ends
1947
+ - `/color flow on\|off\|toggle\|status` - Control animated and gradient-flowing box borders
1945
1948
  - `/theme` - Alias for /color
1946
1949
 
1947
1950
  ### /emojis
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.683",
3
+ "version": "1.0.685",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omnius",
9
- "version": "1.0.683",
9
+ "version": "1.0.685",
10
10
  "bundleDependencies": [
11
11
  "image-to-ascii"
12
12
  ],
@@ -1053,6 +1053,72 @@
1053
1053
  "uint8arrays": "^5.1.0"
1054
1054
  }
1055
1055
  },
1056
+ "node_modules/@libp2p/noise": {
1057
+ "version": "17.0.2",
1058
+ "resolved": "https://registry.npmjs.org/@libp2p/noise/-/noise-17.0.2.tgz",
1059
+ "integrity": "sha512-FY83yQf4/aqqiJHY6XB5aO7vtst6mMoy0r/vGsnTaosaYQ6g9xwkNbTq/juzTXjRbz9pBVkp62zXKJrXmm9G3w==",
1060
+ "license": "Apache-2.0 OR MIT",
1061
+ "dependencies": {
1062
+ "@chainsafe/as-chacha20poly1305": "^0.1.0",
1063
+ "@chainsafe/as-sha256": "^1.2.0",
1064
+ "@libp2p/crypto": "^5.1.23",
1065
+ "@libp2p/interface": "^3.3.0",
1066
+ "@libp2p/peer-id": "^6.0.15",
1067
+ "@libp2p/utils": "^7.4.1",
1068
+ "@noble/ciphers": "^2.0.1",
1069
+ "@noble/curves": "^2.0.1",
1070
+ "@noble/hashes": "^2.0.1",
1071
+ "protons-runtime": "^7.0.0",
1072
+ "uint8arraylist": "^3.0.2",
1073
+ "uint8arrays": "^6.1.1",
1074
+ "wherearewe": "^2.0.1"
1075
+ }
1076
+ },
1077
+ "node_modules/@libp2p/noise/node_modules/multiformats": {
1078
+ "version": "14.0.5",
1079
+ "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-14.0.5.tgz",
1080
+ "integrity": "sha512-vbIm83F2yZ1pWJGS0yl0ysracIvv56LtbrIyiIQHoLdYDJOMoLfVFsXhh9DUH4SFdkdkFhucyWniihsNzVEjkQ==",
1081
+ "license": "Apache-2.0 OR MIT"
1082
+ },
1083
+ "node_modules/@libp2p/noise/node_modules/protons-runtime": {
1084
+ "version": "7.0.0",
1085
+ "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-7.0.0.tgz",
1086
+ "integrity": "sha512-r/e72006xoVND4Uvf1aIs4OQOkJaASBU3ip4DzOWAktoKAkTiOYqKoS3TYMBm8HnnYU8+h0uEzr5gIRwk/pmTg==",
1087
+ "license": "Apache-2.0 OR MIT",
1088
+ "dependencies": {
1089
+ "uint8-varint": "^3.0.0",
1090
+ "uint8arraylist": "^3.0.0",
1091
+ "uint8arrays": "^6.0.0"
1092
+ }
1093
+ },
1094
+ "node_modules/@libp2p/noise/node_modules/uint8-varint": {
1095
+ "version": "3.0.0",
1096
+ "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-3.0.0.tgz",
1097
+ "integrity": "sha512-S4DdpXBaLwKcFo7f0bWzWfHjbZ/i3QhM842qn+ZvHjxqFCfUcEB9SQNcmI69S+zMlcmIcKxsk9Iyw77S2Kxv6Q==",
1098
+ "license": "Apache-2.0 OR MIT",
1099
+ "dependencies": {
1100
+ "uint8arraylist": "^3.0.1",
1101
+ "uint8arrays": "^6.1.0"
1102
+ }
1103
+ },
1104
+ "node_modules/@libp2p/noise/node_modules/uint8arraylist": {
1105
+ "version": "3.0.2",
1106
+ "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-3.0.2.tgz",
1107
+ "integrity": "sha512-LDVoq9BQaGJzGDUovEnoX6rpKCvnY/Jbtws4ikwnBzjRbq5qBAFpBZevUEbSmMM87aO0Sp+wOZy2ZXf5yODmXQ==",
1108
+ "license": "Apache-2.0 OR MIT",
1109
+ "dependencies": {
1110
+ "uint8arrays": "^6.0.0"
1111
+ }
1112
+ },
1113
+ "node_modules/@libp2p/noise/node_modules/uint8arrays": {
1114
+ "version": "6.1.1",
1115
+ "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-6.1.1.tgz",
1116
+ "integrity": "sha512-iz7JN0XCSZYA111lhFG2Ui9EhFvTNekqSRHw3lvMHq+dzwWy1OQftxFQREEh4rffU0oSoXdQHsk2TiHKVm4fsA==",
1117
+ "license": "Apache-2.0 OR MIT",
1118
+ "dependencies": {
1119
+ "multiformats": "^14.0.0"
1120
+ }
1121
+ },
1056
1122
  "node_modules/@libp2p/peer-collections": {
1057
1123
  "version": "7.0.13",
1058
1124
  "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-7.0.13.tgz",
@@ -1359,17 +1425,17 @@
1359
1425
  }
1360
1426
  },
1361
1427
  "node_modules/@libp2p/webrtc": {
1362
- "version": "6.0.31",
1363
- "resolved": "https://registry.npmjs.org/@libp2p/webrtc/-/webrtc-6.0.31.tgz",
1364
- "integrity": "sha512-LUv8264U2TyKNrPBuFKg1euOJytUmpNuBWmJxLnNKbMGqB59i6bdmw8GzoblY6gf2XI0FghyZcH8Q0zxlOud0g==",
1428
+ "version": "6.0.32",
1429
+ "resolved": "https://registry.npmjs.org/@libp2p/webrtc/-/webrtc-6.0.32.tgz",
1430
+ "integrity": "sha512-XJTKNlsVh6v0LqbvBUFQqlwxHEQRA8KW8W2aLEZrjf8NtIww6BYozsaYVe+0W6ujjZWHjTkVjUwPgVqbIPzNFA==",
1365
1431
  "license": "Apache-2.0 OR MIT",
1366
1432
  "dependencies": {
1367
1433
  "@chainsafe/is-ip": "^2.1.0",
1368
- "@chainsafe/libp2p-noise": "^17.0.0",
1369
1434
  "@libp2p/crypto": "^5.1.23",
1370
1435
  "@libp2p/interface": "^3.3.0",
1371
1436
  "@libp2p/interface-internal": "^3.1.13",
1372
1437
  "@libp2p/keychain": "^6.1.7",
1438
+ "@libp2p/noise": "^17.0.2",
1373
1439
  "@libp2p/peer-id": "^6.0.15",
1374
1440
  "@libp2p/utils": "^7.4.1",
1375
1441
  "@multiformats/multiaddr": "^13.0.3",
@@ -2327,9 +2393,9 @@
2327
2393
  }
2328
2394
  },
2329
2395
  "node_modules/@types/node": {
2330
- "version": "26.4.0",
2331
- "resolved": "https://registry.npmjs.org/@types/node/-/node-26.4.0.tgz",
2332
- "integrity": "sha512-faiGnoIrLH/V8cibOMEAZ8pMw6oXqSukl29ra4mN8GdaB2ZewzeaLj+INpV5N+Z1eKWzY+IzaIZH2EIR6YZRNQ==",
2396
+ "version": "26.4.1",
2397
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-26.4.1.tgz",
2398
+ "integrity": "sha512-k97ENvZWtvA6yqz5/FS6a7duDgOPEeOQOc2iKS/nY6mX6qJUKtLnWzQS+Xj6tXweyj6ZcTAK2Qecetnvi9nCLA==",
2333
2399
  "license": "MIT",
2334
2400
  "dependencies": {
2335
2401
  "undici-types": "~8.3.0"
@@ -2759,9 +2825,9 @@
2759
2825
  }
2760
2826
  },
2761
2827
  "node_modules/bare-url": {
2762
- "version": "2.5.3",
2763
- "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.5.3.tgz",
2764
- "integrity": "sha512-3absfEzoyFosWT8v83ZcJgbTJxv+S/sI7jBfeCMlUVatSaefRmwweqBhFpMllQv+HTxs/FbbToVOw1c05NORkQ==",
2828
+ "version": "2.5.4",
2829
+ "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.5.4.tgz",
2830
+ "integrity": "sha512-Gxa7UVWBr0/edU1b+TJhn/AZvMQUj9OGspvYsaTYQrAbZA4BOTZGL3LiZxvD+CeMlDH4juwD84+eTAp/bLYW5g==",
2765
2831
  "license": "Apache-2.0",
2766
2832
  "optional": true,
2767
2833
  "dependencies": {
@@ -3769,9 +3835,9 @@
3769
3835
  }
3770
3836
  },
3771
3837
  "node_modules/fast-uri": {
3772
- "version": "3.1.6",
3773
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.6.tgz",
3774
- "integrity": "sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==",
3838
+ "version": "3.1.7",
3839
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.7.tgz",
3840
+ "integrity": "sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg==",
3775
3841
  "funding": [
3776
3842
  {
3777
3843
  "type": "github",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.683",
3
+ "version": "1.0.685",
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/library.js",