omnius 1.0.297 → 1.0.299
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 +228 -193
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -9724,9 +9724,9 @@ var init_vision = __esm({
|
|
|
9724
9724
|
if (ollamaResult)
|
|
9725
9725
|
return ollamaResult;
|
|
9726
9726
|
try {
|
|
9727
|
-
const { execSync:
|
|
9727
|
+
const { execSync: execSync64 } = await import("node:child_process");
|
|
9728
9728
|
try {
|
|
9729
|
-
|
|
9729
|
+
execSync64("pip3 install --user moondream 2>/dev/null || pip install --user moondream 2>/dev/null", {
|
|
9730
9730
|
timeout: 12e4,
|
|
9731
9731
|
stdio: "pipe"
|
|
9732
9732
|
});
|
|
@@ -9739,7 +9739,7 @@ var init_vision = __esm({
|
|
|
9739
9739
|
} catch {
|
|
9740
9740
|
}
|
|
9741
9741
|
try {
|
|
9742
|
-
|
|
9742
|
+
execSync64("ollama pull moondream", { timeout: 3e5, stdio: "pipe" });
|
|
9743
9743
|
const retryOllama = await this.tryOllamaVision(buffer2, filename, action, prompt, length4, start2, preferredModel);
|
|
9744
9744
|
if (retryOllama)
|
|
9745
9745
|
return retryOllama;
|
|
@@ -571242,8 +571242,8 @@ Respond with your assessment, then take action.`;
|
|
|
571242
571242
|
const memMod = await Promise.resolve().then(() => (init_dist(), dist_exports));
|
|
571243
571243
|
let commitSha = "no-commit";
|
|
571244
571244
|
try {
|
|
571245
|
-
const { execSync:
|
|
571246
|
-
commitSha =
|
|
571245
|
+
const { execSync: execSync64 } = await import("node:child_process");
|
|
571246
|
+
commitSha = execSync64("git rev-parse HEAD", {
|
|
571247
571247
|
cwd: this._workingDirectory,
|
|
571248
571248
|
stdio: ["ignore", "pipe", "ignore"]
|
|
571249
571249
|
}).toString().trim().slice(0, 12) || "no-commit";
|
|
@@ -580516,7 +580516,7 @@ ${result}`
|
|
|
580516
580516
|
const buffer2 = Buffer.from(rawBase64, "base64");
|
|
580517
580517
|
let resizedBase64 = null;
|
|
580518
580518
|
try {
|
|
580519
|
-
const { execSync:
|
|
580519
|
+
const { execSync: execSync64 } = await import("node:child_process");
|
|
580520
580520
|
const { writeFileSync: writeFileSync87, readFileSync: readFileSync129, unlinkSync: unlinkSync35 } = await import("node:fs");
|
|
580521
580521
|
const { join: join172 } = await import("node:path");
|
|
580522
580522
|
const { tmpdir: tmpdir24 } = await import("node:os");
|
|
@@ -580526,7 +580526,7 @@ ${result}`
|
|
|
580526
580526
|
const pyBin = process.platform === "win32" ? "python" : "python3";
|
|
580527
580527
|
const escapedIn = tmpIn.replace(/\\/g, "\\\\");
|
|
580528
580528
|
const escapedOut = tmpOut.replace(/\\/g, "\\\\");
|
|
580529
|
-
|
|
580529
|
+
execSync64(`${pyBin} -c "from PIL import Image; img = Image.open('${escapedIn}'); img.thumbnail((512, 512), Image.LANCZOS); img = img.convert('RGB'); img.save('${escapedOut}', 'JPEG', quality=75)"`, { timeout: 1e4, stdio: "pipe" });
|
|
580530
580530
|
const resizedBuf = readFileSync129(tmpOut);
|
|
580531
580531
|
resizedBase64 = `data:image/jpeg;base64,${resizedBuf.toString("base64")}`;
|
|
580532
580532
|
try {
|
|
@@ -580595,8 +580595,8 @@ ${result}`
|
|
|
580595
580595
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
580596
580596
|
});
|
|
580597
580597
|
try {
|
|
580598
|
-
const { execSync:
|
|
580599
|
-
|
|
580598
|
+
const { execSync: execSync64 } = await import("node:child_process");
|
|
580599
|
+
execSync64("ollama pull moondream", {
|
|
580600
580600
|
timeout: 3e5,
|
|
580601
580601
|
stdio: "pipe"
|
|
580602
580602
|
});
|
|
@@ -606740,6 +606740,7 @@ __export(status_bar_exports, {
|
|
|
606740
606740
|
setTerminalTitle: () => setTerminalTitle,
|
|
606741
606741
|
unlockFooterRedraws: () => unlockFooterRedraws
|
|
606742
606742
|
});
|
|
606743
|
+
import { execSync as execSync52 } from "child_process";
|
|
606743
606744
|
import { readFileSync as readFileSync91 } from "node:fs";
|
|
606744
606745
|
function formatPoolAge(ms) {
|
|
606745
606746
|
if (ms < 6e4) return `${Math.max(0, Math.floor(ms / 1e3))}s`;
|
|
@@ -606760,6 +606761,30 @@ function refreshThemeVars() {
|
|
|
606760
606761
|
TEXT_PRIMARY = tuiTextPrimary() < 0 ? 252 : tuiTextPrimary();
|
|
606761
606762
|
TEXT_DIM = tuiTextDim();
|
|
606762
606763
|
}
|
|
606764
|
+
function digitBarSupported() {
|
|
606765
|
+
if (_digitBarSupported !== null) return _digitBarSupported;
|
|
606766
|
+
if (_isWindows) {
|
|
606767
|
+
_digitBarSupported = false;
|
|
606768
|
+
return false;
|
|
606769
|
+
}
|
|
606770
|
+
const termProgram = process.env.TERM_PROGRAM || "";
|
|
606771
|
+
if (/^(iTerm2|WezTerm|Kitty|Alacritty|Ghostty|Warp|Hyper|Tabby)$/i.test(
|
|
606772
|
+
termProgram
|
|
606773
|
+
)) {
|
|
606774
|
+
_digitBarSupported = true;
|
|
606775
|
+
return true;
|
|
606776
|
+
}
|
|
606777
|
+
try {
|
|
606778
|
+
const result = execSync52(
|
|
606779
|
+
'fc-list ":charset=1fbf0-1fbf9" 2>/dev/null || true',
|
|
606780
|
+
{ encoding: "utf8", timeout: 3e3 }
|
|
606781
|
+
);
|
|
606782
|
+
_digitBarSupported = result.trim().length > 0;
|
|
606783
|
+
} catch {
|
|
606784
|
+
_digitBarSupported = true;
|
|
606785
|
+
}
|
|
606786
|
+
return _digitBarSupported;
|
|
606787
|
+
}
|
|
606763
606788
|
function sanitizeSponsorHeaderText(value2, max = SPONSOR_HEADER_LABEL_MAX) {
|
|
606764
606789
|
const cleaned = stripAnsi(String(value2 ?? "")).replace(/[\x00-\x1F\x7F]/g, " ").replace(/\s+/g, " ").trim();
|
|
606765
606790
|
if (cleaned.length <= max) return cleaned;
|
|
@@ -606793,7 +606818,7 @@ function setTerminalTitle(task, version4) {
|
|
|
606793
606818
|
process.stdout.write(data);
|
|
606794
606819
|
}
|
|
606795
606820
|
}
|
|
606796
|
-
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_ACCENT_GREEN, HEADER_ACCENT_BOLD_FG, HEADER_BUTTON_BG, HEADER_BUTTON_FG, BOX_TL3, BOX_TR3, BOX_BL3, BOX_BR3, BOX_H3, BOX_V3, _globalFooterLock, RESET4, CURSOR_BLINK_BLOCK, _isWindows, SPONSOR_HEADER_LABEL_MAX, _termTitleWriter, StatusBar;
|
|
606821
|
+
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_ACCENT_GREEN, HEADER_ACCENT_BOLD_FG, HEADER_BUTTON_BG, HEADER_BUTTON_FG, BOX_TL3, BOX_TR3, BOX_BL3, BOX_BR3, BOX_H3, BOX_V3, _globalFooterLock, RESET4, CURSOR_BLINK_BLOCK, _isWindows, _digitBarSupported, SPONSOR_HEADER_LABEL_MAX, _termTitleWriter, StatusBar;
|
|
606797
606822
|
var init_status_bar = __esm({
|
|
606798
606823
|
"packages/cli/src/tui/status-bar.ts"() {
|
|
606799
606824
|
"use strict";
|
|
@@ -606987,6 +607012,7 @@ var init_status_bar = __esm({
|
|
|
606987
607012
|
RESET4 = "\x1B[0m";
|
|
606988
607013
|
CURSOR_BLINK_BLOCK = "\x1B[1 q";
|
|
606989
607014
|
_isWindows = process.platform === "win32";
|
|
607015
|
+
_digitBarSupported = null;
|
|
606990
607016
|
SPONSOR_HEADER_LABEL_MAX = 48;
|
|
606991
607017
|
_termTitleWriter = null;
|
|
606992
607018
|
StatusBar = class _StatusBar {
|
|
@@ -607449,7 +607475,7 @@ var init_status_bar = __esm({
|
|
|
607449
607475
|
const decorateMenuButton = (cmd, label) => {
|
|
607450
607476
|
return linkify(
|
|
607451
607477
|
cmd,
|
|
607452
|
-
|
|
607478
|
+
`\x1B[38;5;${HEADER_ACCENT_GREEN}m🭁\x1B[0m${HEADER_BUTTON_FG}${HEADER_BUTTON_BG}${label}\x1B[0m${PANEL_BG_SEQ}\x1B[38;5;${HEADER_ACCENT_GREEN}m🭝\x1B[0m${PANEL_BG_SEQ}`
|
|
607453
607479
|
);
|
|
607454
607480
|
};
|
|
607455
607481
|
const renderBtn = (cmd, label) => {
|
|
@@ -607472,7 +607498,11 @@ var init_status_bar = __esm({
|
|
|
607472
607498
|
const menuBtns = [
|
|
607473
607499
|
{ cmd: "help", label: "help", w: "help".length + 2 },
|
|
607474
607500
|
// +2 for spaces
|
|
607475
|
-
{
|
|
607501
|
+
{
|
|
607502
|
+
cmd: "voice",
|
|
607503
|
+
label: this._voiceActive ? this._voiceModelId || "voice" : "voice",
|
|
607504
|
+
w: (this._voiceActive ? this._voiceModelId || "voice" : "voice").length + 2
|
|
607505
|
+
},
|
|
607476
607506
|
// +2 for spaces
|
|
607477
607507
|
{ cmd: "model", label: modelLabel, w: modelLabel.length + 2 },
|
|
607478
607508
|
// +2 for spaces
|
|
@@ -607763,7 +607793,9 @@ var init_status_bar = __esm({
|
|
|
607763
607793
|
buf += `\x1B[${subRow};1H${PANEL_BG_SEQ}\x1B[2K`;
|
|
607764
607794
|
buf += `${BOX_FG}│${RESET4}${PANEL_BG_SEQ}`;
|
|
607765
607795
|
buf += `\x1B[38;5;${TEXT_DIM}m${PANEL_BG_SEQ}`;
|
|
607766
|
-
const subAgents = this._agentViews.size > 1 ? Array.from(this._agentViews.values()).filter((v) => v.id !== "main").map(
|
|
607796
|
+
const subAgents = this._agentViews.size > 1 ? Array.from(this._agentViews.values()).filter((v) => v.id !== "main").map(
|
|
607797
|
+
(v) => `${v.status === "running" ? "●" : v.status === "completed" ? "✓" : "○"} ${v.label}`
|
|
607798
|
+
).join(" ") : "no sub-agents";
|
|
607767
607799
|
buf += subAgents.substring(0, w - 4);
|
|
607768
607800
|
buf += `\x1B[${subRow};${w}H${BOX_FG}│${RESET4}${PANEL_BG_SEQ}`;
|
|
607769
607801
|
const sepRow = subRow + 1;
|
|
@@ -607776,7 +607808,7 @@ var init_status_bar = __esm({
|
|
|
607776
607808
|
buf += `\x1B[38;5;${TEXT_DIM}m${PANEL_BG_SEQ}`;
|
|
607777
607809
|
buf += `scroll: ${scrollPct}`.substring(0, w - 4);
|
|
607778
607810
|
buf += `\x1B[${scrollRow};${w}H${BOX_FG}│${RESET4}${PANEL_BG_SEQ}`;
|
|
607779
|
-
buf += `\x1B[${scrollRow};1H${BOX_FG}
|
|
607811
|
+
buf += `\x1B[${scrollRow};1H${BOX_FG}╰${"─".repeat(w - 2)}${BOX_FG}╯${RESET4}${PANEL_BG_SEQ}`;
|
|
607780
607812
|
} else {
|
|
607781
607813
|
const scrollRow = hdrRow + 1;
|
|
607782
607814
|
buf += `\x1B[${scrollRow};1H${PANEL_BG_SEQ}\x1B[2K`;
|
|
@@ -607784,7 +607816,7 @@ var init_status_bar = __esm({
|
|
|
607784
607816
|
buf += `\x1B[38;5;${TEXT_DIM}m${PANEL_BG_SEQ}`;
|
|
607785
607817
|
buf += `scroll: ${scrollPct}`.substring(0, w - 4);
|
|
607786
607818
|
buf += `\x1B[${scrollRow};${w}H${BOX_FG}│${RESET4}${PANEL_BG_SEQ}`;
|
|
607787
|
-
buf += `\x1B[${scrollRow};1H${BOX_FG}
|
|
607819
|
+
buf += `\x1B[${scrollRow};1H${BOX_FG}╰${"─".repeat(w - 2)}${BOX_FG}╯${RESET4}${PANEL_BG_SEQ}`;
|
|
607788
607820
|
}
|
|
607789
607821
|
buf += "\x1B8";
|
|
607790
607822
|
this.termWrite(buf);
|
|
@@ -609857,8 +609889,8 @@ ${CONTENT_BG_SEQ}`);
|
|
|
609857
609889
|
if (n2 < 1e6) return `${Math.round(n2 / 1e3)}K`;
|
|
609858
609890
|
return `${(n2 / 1e6).toFixed(1)}M`;
|
|
609859
609891
|
}
|
|
609860
|
-
/** Map digit 0-9 to ornamental digits
|
|
609861
|
-
static DIGIT_EMOJI =
|
|
609892
|
+
/** Map digit 0-9 to ornamental digits 🯰🯱🯲🯳🯴🯵🯶🯷🯸🯹 (or plain ASCII when font lacks them) */
|
|
609893
|
+
static DIGIT_EMOJI = digitBarSupported() ? [
|
|
609862
609894
|
"🯰",
|
|
609863
609895
|
// 0
|
|
609864
609896
|
"🯱",
|
|
@@ -609879,7 +609911,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
609879
609911
|
// 8
|
|
609880
609912
|
"🯹"
|
|
609881
609913
|
// 9
|
|
609882
|
-
];
|
|
609914
|
+
] : ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
|
|
609883
609915
|
/** Convert a number to a digit-bar string: 1234 → "🯱🯲🯳🯴" */
|
|
609884
609916
|
static digitBar(n2) {
|
|
609885
609917
|
if (n2 < 0) return this.DIGIT_EMOJI[0].repeat(4);
|
|
@@ -609959,9 +609991,9 @@ ${CONTENT_BG_SEQ}`);
|
|
|
609959
609991
|
);
|
|
609960
609992
|
const ctxColor = ctxPct > 50 ? c3.green : ctxPct > 20 ? c3.yellow : c3.red;
|
|
609961
609993
|
const ctxSizeStr = _StatusBar.digitBar(ctxTotal);
|
|
609962
|
-
ctxSuffix = " " + ctxColor(`${ctxPct}%`) + c3.dim(` ${ctxSizeStr}`);
|
|
609994
|
+
ctxSuffix = " " + ctxColor(`${_StatusBar.digitBar(ctxPct)}%`) + c3.dim(` ${ctxSizeStr}`);
|
|
609963
609995
|
ctxSuffixW = 1 + `${ctxPct}%`.length + 1 + ctxSizeStr.length;
|
|
609964
|
-
ctxCompSuffix = " " + ctxColor(`${ctxPct}%`);
|
|
609996
|
+
ctxCompSuffix = " " + ctxColor(`${_StatusBar.digitBar(ctxPct)}%`);
|
|
609965
609997
|
ctxCompSuffixW = 1 + `${ctxPct}%`.length;
|
|
609966
609998
|
}
|
|
609967
609999
|
const promptSizeStr = m2.lastPromptTokens > 0 ? _StatusBar.digitBar(m2.lastPromptTokens) : "";
|
|
@@ -610021,7 +610053,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
610021
610053
|
}
|
|
610022
610054
|
}
|
|
610023
610055
|
if (this._telegramStatus.active) {
|
|
610024
|
-
const suffix = this._telegramStatus.activeSubAgents > 0 ? ` ${this._telegramStatus.activeSubAgents}` : "";
|
|
610056
|
+
const suffix = this._telegramStatus.activeSubAgents > 0 ? ` ${_StatusBar.digitBar(this._telegramStatus.activeSubAgents)}` : "";
|
|
610025
610057
|
const label = `✈ tg${suffix}`;
|
|
610026
610058
|
const compact3 = `✈${suffix}`;
|
|
610027
610059
|
sections.push({
|
|
@@ -610069,7 +610101,10 @@ ${CONTENT_BG_SEQ}`);
|
|
|
610069
610101
|
if (m2.hasPricing && m2.estimatedCost !== void 0) {
|
|
610070
610102
|
const costStr = m2.estimatedCost < 0.01 ? `$${m2.estimatedCost.toFixed(4)}` : m2.estimatedCost < 1 ? `$${m2.estimatedCost.toFixed(3)}` : `$${m2.estimatedCost.toFixed(2)}`;
|
|
610071
610103
|
const costExpanded = pastel2(222, "Cost ") + _StatusBar.digitBarAnsi(Math.round(m2.estimatedCost * 1e4), 222);
|
|
610072
|
-
const costCompact = _StatusBar.digitBarAnsi(
|
|
610104
|
+
const costCompact = _StatusBar.digitBarAnsi(
|
|
610105
|
+
Math.round(m2.estimatedCost * 1e4),
|
|
610106
|
+
222
|
|
610107
|
+
);
|
|
610073
610108
|
sections.push({
|
|
610074
610109
|
expanded: costExpanded,
|
|
610075
610110
|
compact: costCompact,
|
|
@@ -610092,8 +610127,8 @@ ${CONTENT_BG_SEQ}`);
|
|
|
610092
610127
|
});
|
|
610093
610128
|
const modelStr = modelParams.join(",");
|
|
610094
610129
|
const visibleReqs = Array.from(this._expose.modelUsage.entries()).filter(([m3]) => !INTERNAL_CAPS.has(m3)).reduce((sum, [, n2]) => sum + n2, 0);
|
|
610095
|
-
const reqStr = visibleReqs > 0 ? ` ${visibleReqs}req` : "";
|
|
610096
|
-
const connStr = this._expose.activeConnections > 0 ? ` ${this._expose.activeConnections}conn` : "";
|
|
610130
|
+
const reqStr = visibleReqs > 0 ? ` ${_StatusBar.digitBar(visibleReqs)}req` : "";
|
|
610131
|
+
const connStr = this._expose.activeConnections > 0 ? ` ${_StatusBar.digitBar(this._expose.activeConnections)}conn` : "";
|
|
610097
610132
|
const exposeExpanded = statusEmoji + pastel2(183, (modelStr ? " " + modelStr : "") + reqStr + connStr);
|
|
610098
610133
|
const exposeCompact = statusEmoji + (modelStr ? pastel2(183, " " + modelStr) : "");
|
|
610099
610134
|
const expFullStr = (modelStr ? " " + modelStr : "") + reqStr + connStr;
|
|
@@ -610119,41 +610154,41 @@ ${CONTENT_BG_SEQ}`);
|
|
|
610119
610154
|
let hwCompW = 0;
|
|
610120
610155
|
if (rm4.cpuUtil >= 0) {
|
|
610121
610156
|
const cpuColor = rm4.cpuUtil > 80 ? c3.red : rm4.cpuUtil > 50 ? c3.yellow : c3.green;
|
|
610122
|
-
const cpuCoresInfo = rm4.cpuCores > 0 ? ` (${rm4.cpuCores}c` + (rm4.cpuModel ? " " + rm4.cpuModel.replace(/\s+/g, " ").slice(0, 30) : "") + ")" : "";
|
|
610123
|
-
hwExpStr += `CPU ${cpuColor(rm4.cpuUtil + "%")}${c3.dim(cpuCoresInfo)}`;
|
|
610124
|
-
hwCompStr += `CPU ${cpuColor(rm4.cpuUtil + "%")}`;
|
|
610157
|
+
const cpuCoresInfo = rm4.cpuCores > 0 ? ` (${_StatusBar.digitBar(rm4.cpuCores)}c` + (rm4.cpuModel ? " " + rm4.cpuModel.replace(/\s+/g, " ").slice(0, 30) : "") + ")" : "";
|
|
610158
|
+
hwExpStr += `CPU ${cpuColor(_StatusBar.digitBar(rm4.cpuUtil) + "%")}${c3.dim(cpuCoresInfo)}`;
|
|
610159
|
+
hwCompStr += `CPU ${cpuColor(_StatusBar.digitBar(rm4.cpuUtil) + "%")}`;
|
|
610125
610160
|
hwExpW += 4 + `${rm4.cpuUtil}%`.length + cpuCoresInfo.length;
|
|
610126
610161
|
hwCompW += 4 + `${rm4.cpuUtil}%`.length;
|
|
610127
610162
|
}
|
|
610128
610163
|
if (rm4.memUtil >= 0) {
|
|
610129
610164
|
const memColor = rm4.memUtil > 80 ? c3.red : rm4.memUtil > 50 ? c3.yellow : c3.green;
|
|
610130
610165
|
const memDetail = rm4.memTotalGB > 0 ? ` (${rm4.memUsedGB}/${rm4.memTotalGB}GB)` : "";
|
|
610131
|
-
hwExpStr += ` RAM ${memColor(rm4.memUtil + "%")}${c3.dim(memDetail)}`;
|
|
610132
|
-
hwCompStr += ` RAM ${memColor(rm4.memUtil + "%")}`;
|
|
610166
|
+
hwExpStr += ` RAM ${memColor(_StatusBar.digitBar(rm4.memUtil) + "%")}${c3.dim(memDetail)}`;
|
|
610167
|
+
hwCompStr += ` RAM ${memColor(_StatusBar.digitBar(rm4.memUtil) + "%")}`;
|
|
610133
610168
|
hwExpW += 5 + `${rm4.memUtil}%`.length + memDetail.length;
|
|
610134
610169
|
hwCompW += 5 + `${rm4.memUtil}%`.length;
|
|
610135
610170
|
}
|
|
610136
610171
|
if (rm4.diskUtil >= 0) {
|
|
610137
610172
|
const diskColor = rm4.diskUtil > 90 ? c3.red : rm4.diskUtil > 75 ? c3.yellow : c3.green;
|
|
610138
610173
|
const diskDetail = rm4.diskTotalGB > 0 ? ` (${rm4.diskFreeGB.toFixed(rm4.diskFreeGB < 10 ? 1 : 0)}GB free)` : "";
|
|
610139
|
-
hwExpStr += ` DISK ${diskColor(rm4.diskUtil + "%")}${c3.dim(diskDetail)}`;
|
|
610140
|
-
hwCompStr += ` DISK ${diskColor(rm4.diskUtil + "%")}`;
|
|
610174
|
+
hwExpStr += ` DISK ${diskColor(_StatusBar.digitBar(rm4.diskUtil) + "%")}${c3.dim(diskDetail)}`;
|
|
610175
|
+
hwCompStr += ` DISK ${diskColor(_StatusBar.digitBar(rm4.diskUtil) + "%")}`;
|
|
610141
610176
|
hwExpW += 6 + `${rm4.diskUtil}%`.length + diskDetail.length;
|
|
610142
610177
|
hwCompW += 6 + `${rm4.diskUtil}%`.length;
|
|
610143
610178
|
}
|
|
610144
610179
|
if (rm4.gpuUtil >= 0) {
|
|
610145
610180
|
const gpuColor = rm4.gpuUtil > 80 ? c3.red : rm4.gpuUtil > 50 ? c3.yellow : c3.green;
|
|
610146
610181
|
const gpuNameShort = rm4.gpuName ? ` (${rm4.gpuName.slice(0, 20)})` : "";
|
|
610147
|
-
hwExpStr += ` GPU ${gpuColor(rm4.gpuUtil + "%")}${c3.dim(gpuNameShort)}`;
|
|
610148
|
-
hwCompStr += ` GPU ${gpuColor(rm4.gpuUtil + "%")}`;
|
|
610182
|
+
hwExpStr += ` GPU ${gpuColor(_StatusBar.digitBar(rm4.gpuUtil) + "%")}${c3.dim(gpuNameShort)}`;
|
|
610183
|
+
hwCompStr += ` GPU ${gpuColor(_StatusBar.digitBar(rm4.gpuUtil) + "%")}`;
|
|
610149
610184
|
hwExpW += 5 + `${rm4.gpuUtil}%`.length + gpuNameShort.length;
|
|
610150
610185
|
hwCompW += 5 + `${rm4.gpuUtil}%`.length;
|
|
610151
610186
|
}
|
|
610152
610187
|
if (rm4.vramUtil >= 0) {
|
|
610153
610188
|
const vramColor = rm4.vramUtil > 80 ? c3.red : rm4.vramUtil > 50 ? c3.yellow : c3.green;
|
|
610154
610189
|
const vramDetail = rm4.vramTotalMB > 0 ? ` (${rm4.vramUsedMB}/${rm4.vramTotalMB}MB)` : "";
|
|
610155
|
-
hwExpStr += ` VRAM ${vramColor(rm4.vramUtil + "%")}${c3.dim(vramDetail)}`;
|
|
610156
|
-
hwCompStr += ` VRAM ${vramColor(rm4.vramUtil + "%")}`;
|
|
610190
|
+
hwExpStr += ` VRAM ${vramColor(_StatusBar.digitBar(rm4.vramUtil) + "%")}${c3.dim(vramDetail)}`;
|
|
610191
|
+
hwCompStr += ` VRAM ${vramColor(_StatusBar.digitBar(rm4.vramUtil) + "%")}`;
|
|
610157
610192
|
hwExpW += 6 + `${rm4.vramUtil}%`.length + vramDetail.length;
|
|
610158
610193
|
hwCompW += 6 + `${rm4.vramUtil}%`.length;
|
|
610159
610194
|
}
|
|
@@ -610162,7 +610197,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
610162
610197
|
const ready = pool3.readyGpuInstances;
|
|
610163
610198
|
const target = pool3.targetGpuInstances;
|
|
610164
610199
|
const poolColor = pool3.mode === "constrained" ? c3.yellow : target > 0 && ready < target ? c3.yellow : c3.green;
|
|
610165
|
-
const poolDetail = pool3.mode === "constrained" ? "queue" : `${ready}/${target}`;
|
|
610200
|
+
const poolDetail = pool3.mode === "constrained" ? "queue" : `${_StatusBar.digitBar(ready)}/${_StatusBar.digitBar(target)}`;
|
|
610166
610201
|
const poolOwned = pool3.instances.filter((i2) => i2.poolOwned);
|
|
610167
610202
|
const pidSummary = poolOwned.length === 0 ? "" : ` PID[${poolOwned.map((i2) => `${i2.pid}@${i2.gpuIndex ?? "?"}`).slice(0, 3).join(",")}]`;
|
|
610168
610203
|
const oldestAgeMs = poolOwned.reduce(
|
|
@@ -610171,7 +610206,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
610171
610206
|
);
|
|
610172
610207
|
const ageSummary = oldestAgeMs > 0 ? ` age=${formatPoolAge(oldestAgeMs)}` : "";
|
|
610173
610208
|
const poolText = ` OLLAMA ${poolColor(`${pool3.mode}:${poolDetail}`)}${c3.dim(pidSummary)}${c3.dim(ageSummary)}`;
|
|
610174
|
-
const compactText3 = ` OLLAMA ${poolColor(pool3.mode === "constrained" ? "queue" : `${ready}/${target}`)}`;
|
|
610209
|
+
const compactText3 = ` OLLAMA ${poolColor(pool3.mode === "constrained" ? "queue" : `${_StatusBar.digitBar(ready)}/${_StatusBar.digitBar(target)}`)}`;
|
|
610175
610210
|
hwExpStr += poolText;
|
|
610176
610211
|
hwCompStr += compactText3;
|
|
610177
610212
|
hwExpW += 8 + `${pool3.mode}:${poolDetail}`.length + pidSummary.length + ageSummary.length;
|
|
@@ -610204,7 +610239,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
610204
610239
|
}
|
|
610205
610240
|
if (this._recording) {
|
|
610206
610241
|
const dot = this._recBlink ? pastel2(210, "●") : " ";
|
|
610207
|
-
const countdown = this._countdown > 0 ? c3.dim(` ${this._countdown}s`) : "";
|
|
610242
|
+
const countdown = this._countdown > 0 ? c3.dim(` ${_StatusBar.digitBar(this._countdown)}s`) : "";
|
|
610208
610243
|
const recStr = dot + pastel2(210, " REC") + countdown;
|
|
610209
610244
|
const recW = 1 + 4 + (this._countdown > 0 ? 1 + `${this._countdown}s`.length : 0);
|
|
610210
610245
|
sections.push({
|
|
@@ -610273,7 +610308,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
610273
610308
|
const sec = sections[idx];
|
|
610274
610309
|
const content = isCompact[idx] ? sec.compact : sec.expanded;
|
|
610275
610310
|
const color = sec.btnColor ?? 183;
|
|
610276
|
-
result += ` ${PANEL_BG_SEQ}\x1B[38;5;${
|
|
610311
|
+
result += ` ${PANEL_BG_SEQ}\x1B[38;5;${color}m${content}\x1B[0m `;
|
|
610277
610312
|
}
|
|
610278
610313
|
return result.replace(/\x1B\[0m/g, `\x1B[0m${PANEL_BG_SEQ}`);
|
|
610279
610314
|
}
|
|
@@ -611821,7 +611856,7 @@ __export(personaplex_exports, {
|
|
|
611821
611856
|
import { existsSync as existsSync111, writeFileSync as writeFileSync57, readFileSync as readFileSync92, mkdirSync as mkdirSync66, copyFileSync as copyFileSync4, readdirSync as readdirSync37, statSync as statSync42 } from "node:fs";
|
|
611822
611857
|
import { join as join126, dirname as dirname40 } from "node:path";
|
|
611823
611858
|
import { homedir as homedir40 } from "node:os";
|
|
611824
|
-
import { execSync as
|
|
611859
|
+
import { execSync as execSync53, spawn as spawn28 } from "node:child_process";
|
|
611825
611860
|
import { fileURLToPath as fileURLToPath15 } from "node:url";
|
|
611826
611861
|
function personaplexPythonEnv(extra = {}) {
|
|
611827
611862
|
const env2 = { ...process.env, ...extra };
|
|
@@ -611859,7 +611894,7 @@ function detectJetson() {
|
|
|
611859
611894
|
try {
|
|
611860
611895
|
const model = readFileSync92("/proc/device-tree/model", "utf8").replace(/\0/g, "").trim();
|
|
611861
611896
|
if (/jetson|orin|tegra/i.test(model)) {
|
|
611862
|
-
const memInfo =
|
|
611897
|
+
const memInfo = execSync53("grep MemTotal /proc/meminfo", { encoding: "utf8", timeout: 3e3, stdio: "pipe" });
|
|
611863
611898
|
const memKB = parseInt(memInfo.match(/(\d+)/)?.[1] ?? "0", 10);
|
|
611864
611899
|
return { isJetson: true, model, totalMemGB: memKB / 1024 / 1024 };
|
|
611865
611900
|
}
|
|
@@ -611893,7 +611928,7 @@ function detectPersonaPlexCapability() {
|
|
|
611893
611928
|
};
|
|
611894
611929
|
}
|
|
611895
611930
|
try {
|
|
611896
|
-
const nvsmi =
|
|
611931
|
+
const nvsmi = execSync53("nvidia-smi --query-gpu=name,memory.total --format=csv,noheader,nounits", {
|
|
611897
611932
|
encoding: "utf8",
|
|
611898
611933
|
timeout: 5e3,
|
|
611899
611934
|
stdio: "pipe"
|
|
@@ -611905,7 +611940,7 @@ function detectPersonaPlexCapability() {
|
|
|
611905
611940
|
return { ...fail3(`GPU has ${vramGB.toFixed(1)}GB VRAM (need ≥8GB)`), gpuName: gpuName ?? "", vramGB };
|
|
611906
611941
|
}
|
|
611907
611942
|
try {
|
|
611908
|
-
|
|
611943
|
+
execSync53('python3 -c "import torch; assert torch.cuda.is_available()"', {
|
|
611909
611944
|
timeout: 1e4,
|
|
611910
611945
|
stdio: "pipe",
|
|
611911
611946
|
env: personaplexPythonEnv()
|
|
@@ -611979,7 +612014,7 @@ async function installPersonaPlex(onInfo, weightTier) {
|
|
|
611979
612014
|
mkdirSync66(PERSONAPLEX_DIR, { recursive: true });
|
|
611980
612015
|
let arch3 = "";
|
|
611981
612016
|
try {
|
|
611982
|
-
arch3 =
|
|
612017
|
+
arch3 = execSync53("uname -m", { encoding: "utf8", timeout: 3e3, stdio: "pipe" }).trim();
|
|
611983
612018
|
} catch {
|
|
611984
612019
|
}
|
|
611985
612020
|
const isAarch64 = arch3 === "aarch64" || arch3 === "arm64";
|
|
@@ -612000,16 +612035,16 @@ async function installPersonaPlex(onInfo, weightTier) {
|
|
|
612000
612035
|
log22("Checking system dependencies (libopus)...");
|
|
612001
612036
|
try {
|
|
612002
612037
|
if (process.platform === "linux") {
|
|
612003
|
-
|
|
612038
|
+
execSync53("dpkg -l libopus-dev 2>/dev/null || sudo apt-get install -y libopus-dev", { timeout: 3e4, stdio: "pipe" });
|
|
612004
612039
|
} else if (process.platform === "darwin") {
|
|
612005
|
-
|
|
612040
|
+
execSync53("brew list opus 2>/dev/null || brew install opus", { timeout: 6e4, stdio: "pipe" });
|
|
612006
612041
|
}
|
|
612007
612042
|
} catch {
|
|
612008
612043
|
}
|
|
612009
612044
|
if (isAarch64) {
|
|
612010
612045
|
log22("ARM64: Checking Rust toolchain for sphn build...");
|
|
612011
612046
|
try {
|
|
612012
|
-
|
|
612047
|
+
execSync53("rustc --version", { timeout: 5e3, stdio: "pipe" });
|
|
612013
612048
|
} catch {
|
|
612014
612049
|
log22("ARM64: Installing Rust toolchain (needed for sphn audio codec)...");
|
|
612015
612050
|
try {
|
|
@@ -612082,7 +612117,7 @@ async function installPersonaPlex(onInfo, weightTier) {
|
|
|
612082
612117
|
}
|
|
612083
612118
|
const serverPy = join126(venvDir, "lib", `python3.${process.versions.node ? "12" : "10"}`, "site-packages", "moshi", "server.py");
|
|
612084
612119
|
try {
|
|
612085
|
-
const sitePackages =
|
|
612120
|
+
const sitePackages = execSync53(`"${python}" -c "import moshi, os; print(os.path.dirname(moshi.__file__))"`, {
|
|
612086
612121
|
encoding: "utf8",
|
|
612087
612122
|
timeout: 5e3,
|
|
612088
612123
|
stdio: "pipe",
|
|
@@ -612100,7 +612135,7 @@ async function installPersonaPlex(onInfo, weightTier) {
|
|
|
612100
612135
|
} catch {
|
|
612101
612136
|
}
|
|
612102
612137
|
try {
|
|
612103
|
-
const sitePackages =
|
|
612138
|
+
const sitePackages = execSync53(`"${python}" -c "import moshi, os; print(os.path.dirname(moshi.__file__))"`, {
|
|
612104
612139
|
encoding: "utf8",
|
|
612105
612140
|
timeout: 5e3,
|
|
612106
612141
|
stdio: "pipe",
|
|
@@ -612205,7 +612240,7 @@ $2if filename.endswith(".safetensors"):`
|
|
|
612205
612240
|
} catch {
|
|
612206
612241
|
}
|
|
612207
612242
|
try {
|
|
612208
|
-
const sitePackages2 =
|
|
612243
|
+
const sitePackages2 = execSync53(`"${python}" -c "import moshi, os; print(os.path.dirname(moshi.__file__))"`, {
|
|
612209
612244
|
encoding: "utf8",
|
|
612210
612245
|
timeout: 5e3,
|
|
612211
612246
|
stdio: "pipe",
|
|
@@ -612341,14 +612376,14 @@ async function startPersonaPlexDaemon(onInfo) {
|
|
|
612341
612376
|
if (tier === "nf4-distilled") {
|
|
612342
612377
|
log22(`Weight tier: ${tier} — distilled NF4 (90% token match, ${repoInfo.sizeGB}GB)...`);
|
|
612343
612378
|
try {
|
|
612344
|
-
const weightPath =
|
|
612379
|
+
const weightPath = execSync53(
|
|
612345
612380
|
`"${venvPython2}" -c "from huggingface_hub import hf_hub_download; print(hf_hub_download('${repoInfo.repo}', '${repoInfo.file}', token=False))"`,
|
|
612346
612381
|
{ encoding: "utf8", timeout: 6e4, stdio: "pipe", env: personaplexPythonEnv() }
|
|
612347
612382
|
).trim();
|
|
612348
612383
|
if (existsSync111(weightPath)) {
|
|
612349
612384
|
if (!existsSync111(cachedBf16)) {
|
|
612350
612385
|
log22("Converting .pt checkpoint to safetensors (one-time)...");
|
|
612351
|
-
|
|
612386
|
+
execSync53(
|
|
612352
612387
|
`"${venvPython2}" -c "
|
|
612353
612388
|
import torch; from safetensors.torch import save_file
|
|
612354
612389
|
state = torch.load('${weightPath}', map_location='cpu', weights_only=True)
|
|
@@ -612380,13 +612415,13 @@ print('Converted')
|
|
|
612380
612415
|
}
|
|
612381
612416
|
}
|
|
612382
612417
|
try {
|
|
612383
|
-
const weightPath =
|
|
612418
|
+
const weightPath = execSync53(
|
|
612384
612419
|
`"${venvPython2}" -c "from huggingface_hub import hf_hub_download; print(hf_hub_download('${repoInfo.repo}', '${repoInfo.file}'${repoInfo.needsToken ? "" : ", token=False"}))"`,
|
|
612385
612420
|
{ encoding: "utf8", timeout: 3e4, stdio: "pipe", env: personaplexPythonEnv() }
|
|
612386
612421
|
).trim();
|
|
612387
612422
|
if (existsSync111(dequantScript) && existsSync111(weightPath)) {
|
|
612388
612423
|
try {
|
|
612389
|
-
|
|
612424
|
+
execSync53(
|
|
612390
612425
|
`"${venvPython2}" "${dequantScript}" --input "${weightPath}" --output "${cachedBf16}"`,
|
|
612391
612426
|
{ timeout: 3e5, stdio: "pipe", env: personaplexPythonEnv() }
|
|
612392
612427
|
);
|
|
@@ -612399,7 +612434,7 @@ print('Converted')
|
|
|
612399
612434
|
}
|
|
612400
612435
|
}
|
|
612401
612436
|
try {
|
|
612402
|
-
const mimiPath =
|
|
612437
|
+
const mimiPath = execSync53(
|
|
612403
612438
|
`"${venvPython2}" -c "from huggingface_hub import hf_hub_download; print(hf_hub_download('${repoInfo.repo}', 'tokenizer-e351c8d8-checkpoint125.safetensors', token=False))"`,
|
|
612404
612439
|
{ encoding: "utf8", timeout: 3e4, stdio: "pipe", env: personaplexPythonEnv() }
|
|
612405
612440
|
).trim();
|
|
@@ -612407,7 +612442,7 @@ print('Converted')
|
|
|
612407
612442
|
} catch {
|
|
612408
612443
|
}
|
|
612409
612444
|
try {
|
|
612410
|
-
const tokPath =
|
|
612445
|
+
const tokPath = execSync53(
|
|
612411
612446
|
`"${venvPython2}" -c "from huggingface_hub import hf_hub_download; print(hf_hub_download('${repoInfo.repo}', 'tokenizer_spm_32k_3.model', token=False))"`,
|
|
612412
612447
|
{ encoding: "utf8", timeout: 3e4, stdio: "pipe", env: personaplexPythonEnv() }
|
|
612413
612448
|
).trim();
|
|
@@ -612431,7 +612466,7 @@ print('Converted')
|
|
|
612431
612466
|
}
|
|
612432
612467
|
if (!ollamaModel) ollamaModel = "qwen3.5:4b";
|
|
612433
612468
|
try {
|
|
612434
|
-
const ollamaCheck =
|
|
612469
|
+
const ollamaCheck = execSync53("curl -s http://localhost:11434/api/tags", {
|
|
612435
612470
|
timeout: 3e3,
|
|
612436
612471
|
stdio: "pipe",
|
|
612437
612472
|
encoding: "utf8"
|
|
@@ -612505,7 +612540,7 @@ print('Converted')
|
|
|
612505
612540
|
return null;
|
|
612506
612541
|
}
|
|
612507
612542
|
try {
|
|
612508
|
-
|
|
612543
|
+
execSync53(`curl -sk -o /dev/null -w "%{http_code}" https://127.0.0.1:${PORT}/`, {
|
|
612509
612544
|
timeout: 3e3,
|
|
612510
612545
|
stdio: "pipe",
|
|
612511
612546
|
encoding: "utf8"
|
|
@@ -612528,7 +612563,7 @@ function stopPersonaPlex() {
|
|
|
612528
612563
|
if (isNaN(pid) || pid <= 0) return;
|
|
612529
612564
|
try {
|
|
612530
612565
|
if (process.platform === "win32") {
|
|
612531
|
-
|
|
612566
|
+
execSync53(`taskkill /F /PID ${pid}`, { timeout: 5e3, stdio: "ignore" });
|
|
612532
612567
|
} else {
|
|
612533
612568
|
process.kill(pid, "SIGTERM");
|
|
612534
612569
|
}
|
|
@@ -612839,7 +612874,7 @@ __export(setup_exports, {
|
|
|
612839
612874
|
updateOllama: () => updateOllama
|
|
612840
612875
|
});
|
|
612841
612876
|
import * as readline from "node:readline";
|
|
612842
|
-
import { execSync as
|
|
612877
|
+
import { execSync as execSync54, spawn as spawn29, exec as exec5 } from "node:child_process";
|
|
612843
612878
|
import { promisify as promisify6 } from "node:util";
|
|
612844
612879
|
import { existsSync as existsSync112, writeFileSync as writeFileSync58, readFileSync as readFileSync93, appendFileSync as appendFileSync10, mkdirSync as mkdirSync67 } from "node:fs";
|
|
612845
612880
|
import { join as join127 } from "node:path";
|
|
@@ -612962,7 +612997,7 @@ function detectSystemSpecs() {
|
|
|
612962
612997
|
let availableVramGB = 0;
|
|
612963
612998
|
let gpuName = "";
|
|
612964
612999
|
try {
|
|
612965
|
-
const memInfo =
|
|
613000
|
+
const memInfo = execSync54("free -b 2>/dev/null || sysctl -n hw.memsize 2>/dev/null", {
|
|
612966
613001
|
encoding: "utf8",
|
|
612967
613002
|
timeout: 5e3
|
|
612968
613003
|
});
|
|
@@ -612982,7 +613017,7 @@ function detectSystemSpecs() {
|
|
|
612982
613017
|
} catch {
|
|
612983
613018
|
}
|
|
612984
613019
|
try {
|
|
612985
|
-
const nvidiaSmi =
|
|
613020
|
+
const nvidiaSmi = execSync54(
|
|
612986
613021
|
"nvidia-smi --query-gpu=memory.total,memory.free,name --format=csv,noheader,nounits 2>/dev/null",
|
|
612987
613022
|
{ encoding: "utf8", timeout: 5e3 }
|
|
612988
613023
|
);
|
|
@@ -612994,7 +613029,7 @@ function detectSystemSpecs() {
|
|
|
612994
613029
|
}
|
|
612995
613030
|
if (gpuVramGB === 0) {
|
|
612996
613031
|
try {
|
|
612997
|
-
const rocmSmi =
|
|
613032
|
+
const rocmSmi = execSync54(
|
|
612998
613033
|
"rocm-smi --showmeminfo vram --csv 2>/dev/null",
|
|
612999
613034
|
{ encoding: "utf8", timeout: 5e3 }
|
|
613000
613035
|
);
|
|
@@ -613250,7 +613285,7 @@ function ensureCurl() {
|
|
|
613250
613285
|
for (const s2 of strategies) {
|
|
613251
613286
|
if (hasCmd(s2.check)) {
|
|
613252
613287
|
try {
|
|
613253
|
-
|
|
613288
|
+
execSync54(s2.install, { stdio: "inherit", timeout: 12e4 });
|
|
613254
613289
|
if (hasCmd("curl")) {
|
|
613255
613290
|
process.stdout.write(` ${c3.green("✔")} curl installed via ${s2.label}.
|
|
613256
613291
|
`);
|
|
@@ -613264,7 +613299,7 @@ function ensureCurl() {
|
|
|
613264
613299
|
}
|
|
613265
613300
|
if (plat === "darwin") {
|
|
613266
613301
|
try {
|
|
613267
|
-
|
|
613302
|
+
execSync54("xcode-select --install", { stdio: "inherit", timeout: 3e5 });
|
|
613268
613303
|
if (hasCmd("curl")) return true;
|
|
613269
613304
|
} catch {
|
|
613270
613305
|
}
|
|
@@ -613278,7 +613313,7 @@ function ensureZstd() {
|
|
|
613278
613313
|
if (process.platform === "darwin") {
|
|
613279
613314
|
if (!hasCmd("brew")) return false;
|
|
613280
613315
|
try {
|
|
613281
|
-
|
|
613316
|
+
execSync54("brew install zstd", { stdio: "inherit", timeout: 12e4 });
|
|
613282
613317
|
return hasCmd("zstd");
|
|
613283
613318
|
} catch {
|
|
613284
613319
|
return false;
|
|
@@ -613320,7 +613355,7 @@ function ensureZstd() {
|
|
|
613320
613355
|
candidates.push({ cmd: installCmd, env: process.env });
|
|
613321
613356
|
for (const cand of candidates) {
|
|
613322
613357
|
try {
|
|
613323
|
-
|
|
613358
|
+
execSync54(cand.cmd, {
|
|
613324
613359
|
stdio: cand.stdio ?? ["ignore", "inherit", "pipe"],
|
|
613325
613360
|
env: cand.env,
|
|
613326
613361
|
timeout: 18e4
|
|
@@ -613357,7 +613392,7 @@ function detectAskpassHelper() {
|
|
|
613357
613392
|
for (const name10 of ["ssh-askpass", "ksshaskpass", "x11-ssh-askpass"]) {
|
|
613358
613393
|
if (hasCmd(name10)) {
|
|
613359
613394
|
try {
|
|
613360
|
-
const p2 =
|
|
613395
|
+
const p2 = execSync54(`command -v ${name10}`, { encoding: "utf8" }).trim();
|
|
613361
613396
|
if (p2) return p2;
|
|
613362
613397
|
} catch {
|
|
613363
613398
|
}
|
|
@@ -613400,7 +613435,7 @@ osascript -e 'Tell application "System Events" to display dialog "Omnius needs a
|
|
|
613400
613435
|
}
|
|
613401
613436
|
try {
|
|
613402
613437
|
writeFileSync58(helperPath, body, { mode: 448 });
|
|
613403
|
-
|
|
613438
|
+
execSync54(`chmod 700 "${helperPath}"`, { stdio: "ignore" });
|
|
613404
613439
|
return helperPath;
|
|
613405
613440
|
} catch {
|
|
613406
613441
|
return null;
|
|
@@ -613469,7 +613504,7 @@ function runElevatedCommand(command, opts = {}) {
|
|
|
613469
613504
|
let lastErr = null;
|
|
613470
613505
|
for (const cand of candidates) {
|
|
613471
613506
|
try {
|
|
613472
|
-
|
|
613507
|
+
execSync54(cand.cmd, {
|
|
613473
613508
|
stdio: cand.stdio ?? ["ignore", "pipe", "pipe"],
|
|
613474
613509
|
env: cand.env,
|
|
613475
613510
|
timeout: timeout2
|
|
@@ -613506,7 +613541,7 @@ function runOllamaInstallScript() {
|
|
|
613506
613541
|
`);
|
|
613507
613542
|
}
|
|
613508
613543
|
const runOnce = () => {
|
|
613509
|
-
|
|
613544
|
+
execSync54(elevated.cmd, {
|
|
613510
613545
|
stdio: elevated.mode === "terminal" ? "inherit" : ["ignore", "inherit", "pipe"],
|
|
613511
613546
|
env: elevated.env,
|
|
613512
613547
|
timeout: 6e5
|
|
@@ -613585,7 +613620,7 @@ async function installOllamaMac(_rl) {
|
|
|
613585
613620
|
|
|
613586
613621
|
`);
|
|
613587
613622
|
try {
|
|
613588
|
-
|
|
613623
|
+
execSync54(
|
|
613589
613624
|
'/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"',
|
|
613590
613625
|
{ stdio: "inherit", timeout: 6e5 }
|
|
613591
613626
|
);
|
|
@@ -613621,7 +613656,7 @@ async function installOllamaMac(_rl) {
|
|
|
613621
613656
|
|
|
613622
613657
|
`);
|
|
613623
613658
|
try {
|
|
613624
|
-
|
|
613659
|
+
execSync54("brew install ollama", {
|
|
613625
613660
|
stdio: "inherit",
|
|
613626
613661
|
timeout: 3e5
|
|
613627
613662
|
});
|
|
@@ -613648,7 +613683,7 @@ function installOllamaWindows() {
|
|
|
613648
613683
|
|
|
613649
613684
|
`);
|
|
613650
613685
|
try {
|
|
613651
|
-
|
|
613686
|
+
execSync54('powershell -Command "irm https://ollama.com/install.ps1 | iex"', {
|
|
613652
613687
|
stdio: "inherit",
|
|
613653
613688
|
timeout: 3e5
|
|
613654
613689
|
});
|
|
@@ -613728,7 +613763,7 @@ async function ensureOllamaRunning(backendUrl2, rl) {
|
|
|
613728
613763
|
}
|
|
613729
613764
|
function getOllamaVersion() {
|
|
613730
613765
|
try {
|
|
613731
|
-
const out =
|
|
613766
|
+
const out = execSync54("ollama --version", { encoding: "utf8", timeout: 5e3 });
|
|
613732
613767
|
const match = out.match(/(\d+\.\d+\.\d+)/);
|
|
613733
613768
|
return match ? match[1] : null;
|
|
613734
613769
|
} catch {
|
|
@@ -613785,7 +613820,7 @@ function updateOllama() {
|
|
|
613785
613820
|
}
|
|
613786
613821
|
function pullModelWithAutoUpdate(tag) {
|
|
613787
613822
|
try {
|
|
613788
|
-
|
|
613823
|
+
execSync54(`ollama pull ${tag}`, {
|
|
613789
613824
|
stdio: "inherit",
|
|
613790
613825
|
timeout: 36e5
|
|
613791
613826
|
// 1 hour max
|
|
@@ -613812,7 +613847,7 @@ function pullModelWithAutoUpdate(tag) {
|
|
|
613812
613847
|
process.stdout.write(` ${c3.cyan("●")} Retrying pull of ${c3.bold(tag)}...
|
|
613813
613848
|
|
|
613814
613849
|
`);
|
|
613815
|
-
|
|
613850
|
+
execSync54(`ollama pull ${tag}`, {
|
|
613816
613851
|
stdio: "inherit",
|
|
613817
613852
|
timeout: 36e5
|
|
613818
613853
|
});
|
|
@@ -613901,7 +613936,7 @@ function ensurePython3() {
|
|
|
613901
613936
|
if (plat === "darwin") {
|
|
613902
613937
|
if (hasCmd("brew")) {
|
|
613903
613938
|
try {
|
|
613904
|
-
|
|
613939
|
+
execSync54("brew install python3", { stdio: "inherit", timeout: 3e5 });
|
|
613905
613940
|
if (hasCmd("python3")) {
|
|
613906
613941
|
process.stdout.write(` ${c3.green("✔")} Python3 installed via Homebrew.
|
|
613907
613942
|
`);
|
|
@@ -613914,7 +613949,7 @@ function ensurePython3() {
|
|
|
613914
613949
|
for (const s2 of strategies) {
|
|
613915
613950
|
if (hasCmd(s2.check)) {
|
|
613916
613951
|
try {
|
|
613917
|
-
|
|
613952
|
+
execSync54(s2.install, { stdio: "inherit", timeout: 12e4 });
|
|
613918
613953
|
if (hasCmd("python3") || hasCmd("python")) {
|
|
613919
613954
|
process.stdout.write(` ${c3.green("✔")} Python3 installed via ${s2.label}.
|
|
613920
613955
|
`);
|
|
@@ -613930,11 +613965,11 @@ function ensurePython3() {
|
|
|
613930
613965
|
}
|
|
613931
613966
|
function checkPythonVenv() {
|
|
613932
613967
|
try {
|
|
613933
|
-
|
|
613968
|
+
execSync54("python3 -m venv --help", { stdio: "pipe", timeout: 5e3 });
|
|
613934
613969
|
return true;
|
|
613935
613970
|
} catch {
|
|
613936
613971
|
try {
|
|
613937
|
-
|
|
613972
|
+
execSync54("python -m venv --help", { stdio: "pipe", timeout: 5e3 });
|
|
613938
613973
|
return true;
|
|
613939
613974
|
} catch {
|
|
613940
613975
|
return false;
|
|
@@ -613953,7 +613988,7 @@ function ensurePythonVenv() {
|
|
|
613953
613988
|
for (const s2 of strategies) {
|
|
613954
613989
|
if (hasCmd(s2.check)) {
|
|
613955
613990
|
try {
|
|
613956
|
-
|
|
613991
|
+
execSync54(s2.install, { stdio: "inherit", timeout: 12e4 });
|
|
613957
613992
|
if (checkPythonVenv()) {
|
|
613958
613993
|
process.stdout.write(` ${c3.green("✔")} python3-venv installed via ${s2.label}.
|
|
613959
613994
|
`);
|
|
@@ -614560,7 +614595,7 @@ ${c3.cyan(OMNIUS_FIRST_RUN_BANNER)}
|
|
|
614560
614595
|
for (let i2 = 0; i2 < modelfileCandidates.length; i2++) {
|
|
614561
614596
|
writeFileSync58(modelfilePath, modelfileCandidates[i2] + "\n", "utf8");
|
|
614562
614597
|
try {
|
|
614563
|
-
|
|
614598
|
+
execSync54(`ollama create ${customName} -f ${modelfilePath}`, {
|
|
614564
614599
|
stdio: "pipe",
|
|
614565
614600
|
timeout: 12e4
|
|
614566
614601
|
});
|
|
@@ -614622,7 +614657,7 @@ function isFirstRun() {
|
|
|
614622
614657
|
function hasCmd(cmd) {
|
|
614623
614658
|
try {
|
|
614624
614659
|
const whichCmd = process.platform === "win32" ? `where ${cmd}` : `which ${cmd}`;
|
|
614625
|
-
|
|
614660
|
+
execSync54(whichCmd, { stdio: "pipe", timeout: 3e3 });
|
|
614626
614661
|
return true;
|
|
614627
614662
|
} catch {
|
|
614628
614663
|
return false;
|
|
@@ -614634,7 +614669,7 @@ function detectPkgManager() {
|
|
|
614634
614669
|
if (hasCmd("choco")) return "choco";
|
|
614635
614670
|
if (hasCmd("winget")) return "winget";
|
|
614636
614671
|
try {
|
|
614637
|
-
|
|
614672
|
+
execSync54(
|
|
614638
614673
|
`powershell -NoProfile -Command "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))"`,
|
|
614639
614674
|
{ stdio: "pipe", timeout: 12e4 }
|
|
614640
614675
|
);
|
|
@@ -614646,7 +614681,7 @@ function detectPkgManager() {
|
|
|
614646
614681
|
if (plat === "darwin") {
|
|
614647
614682
|
if (hasCmd("brew")) return "brew";
|
|
614648
614683
|
try {
|
|
614649
|
-
|
|
614684
|
+
execSync54(
|
|
614650
614685
|
'/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"',
|
|
614651
614686
|
{ stdio: "pipe", timeout: 3e5, env: { ...process.env, NONINTERACTIVE: "1" } }
|
|
614652
614687
|
);
|
|
@@ -614666,7 +614701,7 @@ function getVenvDir2() {
|
|
|
614666
614701
|
}
|
|
614667
614702
|
function hasVenvModule() {
|
|
614668
614703
|
try {
|
|
614669
|
-
|
|
614704
|
+
execSync54('python3 -c "import ensurepip, venv"', {
|
|
614670
614705
|
stdio: "pipe",
|
|
614671
614706
|
timeout: 5e3
|
|
614672
614707
|
});
|
|
@@ -614683,17 +614718,17 @@ function ensureVenv2(log22) {
|
|
|
614683
614718
|
const pythonCmd = isWin2 ? "python" : "python3";
|
|
614684
614719
|
if (existsSync112(pipPath)) {
|
|
614685
614720
|
try {
|
|
614686
|
-
|
|
614721
|
+
execSync54(`"${venvPyPath}" -m pip --version`, { stdio: "pipe", timeout: 1e4 });
|
|
614687
614722
|
return venvDir;
|
|
614688
614723
|
} catch {
|
|
614689
614724
|
log22("Python venv pip is broken — repairing...");
|
|
614690
614725
|
try {
|
|
614691
|
-
|
|
614726
|
+
execSync54(`"${venvPyPath}" -m ensurepip --upgrade`, { stdio: "pipe", timeout: 3e4 });
|
|
614692
614727
|
log22("pip repaired via ensurepip.");
|
|
614693
614728
|
return venvDir;
|
|
614694
614729
|
} catch {
|
|
614695
614730
|
try {
|
|
614696
|
-
|
|
614731
|
+
execSync54(`curl -sS https://bootstrap.pypa.io/get-pip.py | "${venvPyPath}"`, { stdio: "pipe", timeout: 6e4 });
|
|
614697
614732
|
log22("pip repaired via get-pip.py.");
|
|
614698
614733
|
return venvDir;
|
|
614699
614734
|
} catch {
|
|
@@ -614714,17 +614749,17 @@ function ensureVenv2(log22) {
|
|
|
614714
614749
|
try {
|
|
614715
614750
|
mkdirSync67(join127(homedir41(), ".omnius"), { recursive: true });
|
|
614716
614751
|
const pyCmd = hasCmd(pythonCmd) ? pythonCmd : "python3";
|
|
614717
|
-
|
|
614752
|
+
execSync54(`${pyCmd} -m venv --clear "${venvDir}"`, { stdio: "pipe", timeout: 3e4 });
|
|
614718
614753
|
try {
|
|
614719
|
-
|
|
614754
|
+
execSync54(`"${venvPyPath}" -m pip --version`, { stdio: "pipe", timeout: 1e4 });
|
|
614720
614755
|
} catch {
|
|
614721
614756
|
try {
|
|
614722
|
-
|
|
614757
|
+
execSync54(`"${venvPyPath}" -m ensurepip --upgrade`, { stdio: "pipe", timeout: 3e4 });
|
|
614723
614758
|
} catch {
|
|
614724
|
-
|
|
614759
|
+
execSync54(`curl -sS https://bootstrap.pypa.io/get-pip.py | "${venvPyPath}"`, { stdio: "pipe", timeout: 6e4 });
|
|
614725
614760
|
}
|
|
614726
614761
|
}
|
|
614727
|
-
|
|
614762
|
+
execSync54(`"${venvPyPath}" -m pip install --upgrade pip`, {
|
|
614728
614763
|
stdio: "pipe",
|
|
614729
614764
|
timeout: 6e4
|
|
614730
614765
|
});
|
|
@@ -614737,7 +614772,7 @@ function ensureVenv2(log22) {
|
|
|
614737
614772
|
}
|
|
614738
614773
|
function trySudoPasswordless(cmd, timeoutMs = 12e4) {
|
|
614739
614774
|
try {
|
|
614740
|
-
|
|
614775
|
+
execSync54(`sudo -n ${cmd}`, {
|
|
614741
614776
|
stdio: "pipe",
|
|
614742
614777
|
timeout: timeoutMs,
|
|
614743
614778
|
env: { ...process.env, DEBIAN_FRONTEND: "noninteractive" }
|
|
@@ -614750,7 +614785,7 @@ function trySudoPasswordless(cmd, timeoutMs = 12e4) {
|
|
|
614750
614785
|
function runWithSudo(cmd, password, timeoutMs = 12e4) {
|
|
614751
614786
|
try {
|
|
614752
614787
|
const escaped = cmd.replace(/'/g, "'\\''");
|
|
614753
|
-
|
|
614788
|
+
execSync54(`sudo -S bash -c '${escaped}'`, {
|
|
614754
614789
|
input: password + "\n",
|
|
614755
614790
|
stdio: ["pipe", "pipe", "pipe"],
|
|
614756
614791
|
timeout: timeoutMs,
|
|
@@ -614792,7 +614827,7 @@ async function sudoInstall(cmd, getSudoPassword, log22, cachedPasswordRef, timeo
|
|
|
614792
614827
|
try {
|
|
614793
614828
|
const isRoot = typeof process.getuid === "function" && process.getuid() === 0;
|
|
614794
614829
|
const escaped = cmd.replace(/'/g, "'\\''");
|
|
614795
|
-
|
|
614830
|
+
execSync54(isRoot ? `bash -c '${escaped}'` : `sudo bash -c '${escaped}'`, {
|
|
614796
614831
|
stdio: "inherit",
|
|
614797
614832
|
timeout: timeoutMs,
|
|
614798
614833
|
env: { ...process.env, DEBIAN_FRONTEND: "noninteractive" }
|
|
@@ -614858,7 +614893,7 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
614858
614893
|
let winNeedsElevation = false;
|
|
614859
614894
|
if (process.platform === "win32") {
|
|
614860
614895
|
try {
|
|
614861
|
-
|
|
614896
|
+
execSync54("net session", { stdio: "pipe", timeout: 3e3 });
|
|
614862
614897
|
} catch {
|
|
614863
614898
|
winNeedsElevation = true;
|
|
614864
614899
|
log22(`Installing ${labels} via ${pm2} (requires admin — UAC prompt will appear)...`);
|
|
@@ -614905,12 +614940,12 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
614905
614940
|
if (needsSudo) {
|
|
614906
614941
|
await sudoInstall(installCmd, getPassword, log22, cachedPasswordRef, 18e4);
|
|
614907
614942
|
} else if (winNeedsElevation) {
|
|
614908
|
-
|
|
614943
|
+
execSync54(
|
|
614909
614944
|
`powershell -NoProfile -Command "Start-Process -FilePath 'cmd.exe' -ArgumentList '/c ${installCmd.replace(/'/g, "''")}' -Verb RunAs -Wait"`,
|
|
614910
614945
|
{ stdio: "pipe", timeout: 18e4 }
|
|
614911
614946
|
);
|
|
614912
614947
|
} else {
|
|
614913
|
-
|
|
614948
|
+
execSync54(installCmd, { stdio: "pipe", timeout: 18e4 });
|
|
614914
614949
|
}
|
|
614915
614950
|
} catch (e2) {
|
|
614916
614951
|
const stderr = e2.stderr?.toString?.()?.trim?.() ?? "";
|
|
@@ -614923,7 +614958,7 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
614923
614958
|
if (!hasCmd(d2.binary) && pipPkg) {
|
|
614924
614959
|
try {
|
|
614925
614960
|
const pipCmd = process.platform === "win32" ? `pip install ${pipPkg}` : `pip3 install ${pipPkg}`;
|
|
614926
|
-
|
|
614961
|
+
execSync54(pipCmd, { stdio: "pipe", timeout: 12e4 });
|
|
614927
614962
|
lastError = "";
|
|
614928
614963
|
} catch (e2) {
|
|
614929
614964
|
const stderr = e2.stderr?.toString?.()?.trim?.() ?? "";
|
|
@@ -614935,7 +614970,7 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
614935
614970
|
}
|
|
614936
614971
|
if (process.platform === "win32" && !hasCmd(d2.binary)) {
|
|
614937
614972
|
try {
|
|
614938
|
-
const freshPath =
|
|
614973
|
+
const freshPath = execSync54(
|
|
614939
614974
|
`powershell -NoProfile -Command "[System.Environment]::GetEnvironmentVariable('Path','Machine') + ';' + [System.Environment]::GetEnvironmentVariable('Path','User')"`,
|
|
614940
614975
|
{ encoding: "utf8", timeout: 5e3, stdio: "pipe" }
|
|
614941
614976
|
).trim();
|
|
@@ -614981,7 +615016,7 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
614981
615016
|
const venvCmds = {
|
|
614982
615017
|
apt: () => {
|
|
614983
615018
|
try {
|
|
614984
|
-
const pyVer =
|
|
615019
|
+
const pyVer = execSync54(
|
|
614985
615020
|
`python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')"`,
|
|
614986
615021
|
{ encoding: "utf8", stdio: "pipe", timeout: 5e3 }
|
|
614987
615022
|
).trim();
|
|
@@ -615013,12 +615048,12 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
615013
615048
|
const venvPip2 = join127(venvBin, "pip");
|
|
615014
615049
|
log22("Installing moondream-station in ~/.omnius/venv...");
|
|
615015
615050
|
try {
|
|
615016
|
-
|
|
615051
|
+
execSync54(`"${venvPip2}" install moondream-station`, { stdio: "pipe", timeout: 3e5 });
|
|
615017
615052
|
if (existsSync112(venvMoondream)) {
|
|
615018
615053
|
log22("moondream-station installed successfully.");
|
|
615019
615054
|
} else {
|
|
615020
615055
|
try {
|
|
615021
|
-
const check =
|
|
615056
|
+
const check = execSync54(`"${venvPip2}" show moondream-station`, { encoding: "utf8", stdio: "pipe", timeout: 5e3 });
|
|
615022
615057
|
if (check.includes("moondream")) {
|
|
615023
615058
|
log22("moondream-station package installed.");
|
|
615024
615059
|
}
|
|
@@ -615035,7 +615070,7 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
615035
615070
|
const venvPip2 = join127(venvBin, isWin2 ? "pip.exe" : "pip");
|
|
615036
615071
|
let ocrStackInstalled = false;
|
|
615037
615072
|
try {
|
|
615038
|
-
|
|
615073
|
+
execSync54(
|
|
615039
615074
|
`"${venvPython2}" -c "import cv2, pytesseract, numpy, PIL"`,
|
|
615040
615075
|
{ stdio: "pipe", timeout: 1e4 }
|
|
615041
615076
|
);
|
|
@@ -615046,12 +615081,12 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
615046
615081
|
const ocrPackages = "pytesseract Pillow opencv-python-headless numpy";
|
|
615047
615082
|
log22("Installing OCR Python stack (pytesseract, OpenCV, Pillow, numpy)...");
|
|
615048
615083
|
try {
|
|
615049
|
-
|
|
615084
|
+
execSync54(
|
|
615050
615085
|
`"${venvPip2}" install ${ocrPackages}`,
|
|
615051
615086
|
{ stdio: "pipe", timeout: 3e5 }
|
|
615052
615087
|
);
|
|
615053
615088
|
try {
|
|
615054
|
-
|
|
615089
|
+
execSync54(
|
|
615055
615090
|
`"${venvPython2}" -c "import cv2, pytesseract, numpy, PIL"`,
|
|
615056
615091
|
{ stdio: "pipe", timeout: 1e4 }
|
|
615057
615092
|
);
|
|
@@ -615087,7 +615122,7 @@ function ensureCloudflaredBackground(onInfo) {
|
|
|
615087
615122
|
const archMap = { x64: "amd64", arm64: "arm64", arm: "arm" };
|
|
615088
615123
|
const cfArch = archMap[arch3] ?? "amd64";
|
|
615089
615124
|
try {
|
|
615090
|
-
|
|
615125
|
+
execSync54(
|
|
615091
615126
|
`curl -fsSL "https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-${cfArch}" -o /tmp/cloudflared && chmod +x /tmp/cloudflared && mkdir -p "${homedir41()}/.local/bin" && mv /tmp/cloudflared "${homedir41()}/.local/bin/cloudflared"`,
|
|
615092
615127
|
{ stdio: "pipe", timeout: 6e4 }
|
|
615093
615128
|
);
|
|
@@ -615103,7 +615138,7 @@ function ensureCloudflaredBackground(onInfo) {
|
|
|
615103
615138
|
try {
|
|
615104
615139
|
const terminalElevation = process.env["OMNIUS_ELEVATION_MODE"] === "terminal" && process.stdin.isTTY && process.stdout.isTTY;
|
|
615105
615140
|
const sudoMove = terminalElevation ? `sudo mv /tmp/cloudflared /usr/local/bin/cloudflared` : `sudo mv /tmp/cloudflared /usr/local/bin/cloudflared 2>/dev/null`;
|
|
615106
|
-
|
|
615141
|
+
execSync54(
|
|
615107
615142
|
`curl -fsSL "https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-${cfArch}" -o /tmp/cloudflared && chmod +x /tmp/cloudflared && ` + sudoMove,
|
|
615108
615143
|
{ stdio: terminalElevation ? "inherit" : "pipe", timeout: 6e4 }
|
|
615109
615144
|
);
|
|
@@ -615115,7 +615150,7 @@ function ensureCloudflaredBackground(onInfo) {
|
|
|
615115
615150
|
}
|
|
615116
615151
|
} else if (os9 === "darwin") {
|
|
615117
615152
|
try {
|
|
615118
|
-
|
|
615153
|
+
execSync54("brew install cloudflared", { stdio: "pipe", timeout: 12e4 });
|
|
615119
615154
|
if (hasCmd("cloudflared")) {
|
|
615120
615155
|
log22("cloudflared installed via Homebrew.");
|
|
615121
615156
|
return true;
|
|
@@ -615312,7 +615347,7 @@ function createExpandedVariantNamed(targetModel, baseModel, specs, sizeGB, kvByt
|
|
|
615312
615347
|
for (let i2 = 0; i2 < modelfileCandidates.length; i2++) {
|
|
615313
615348
|
writeFileSync58(modelfilePath, modelfileCandidates[i2] + "\n", "utf8");
|
|
615314
615349
|
try {
|
|
615315
|
-
|
|
615350
|
+
execSync54(`ollama create ${targetModel} -f ${modelfilePath}`, {
|
|
615316
615351
|
stdio: "pipe",
|
|
615317
615352
|
timeout: 12e4
|
|
615318
615353
|
});
|
|
@@ -615598,7 +615633,7 @@ async function repairAllExpandedVariants(backendUrl2) {
|
|
|
615598
615633
|
}
|
|
615599
615634
|
async function ensureNeovim() {
|
|
615600
615635
|
try {
|
|
615601
|
-
const nvimPath =
|
|
615636
|
+
const nvimPath = execSync54("which nvim 2>/dev/null || where nvim 2>nul", {
|
|
615602
615637
|
encoding: "utf8",
|
|
615603
615638
|
stdio: "pipe",
|
|
615604
615639
|
timeout: 5e3
|
|
@@ -615619,14 +615654,14 @@ async function ensureNeovim() {
|
|
|
615619
615654
|
const url = `https://github.com/neovim/neovim/releases/latest/download/${appImageName}`;
|
|
615620
615655
|
console.log(` Downloading Neovim (${appImageName})...`);
|
|
615621
615656
|
try {
|
|
615622
|
-
|
|
615623
|
-
|
|
615657
|
+
execSync54(`curl -fsSL "${url}" -o "${nvimDest}"`, { stdio: "pipe", timeout: 6e4 });
|
|
615658
|
+
execSync54(`chmod +x "${nvimDest}"`, { stdio: "pipe", timeout: 3e3 });
|
|
615624
615659
|
} catch (err) {
|
|
615625
615660
|
console.log(` Failed to download Neovim: ${err instanceof Error ? err.message : String(err)}`);
|
|
615626
615661
|
return null;
|
|
615627
615662
|
}
|
|
615628
615663
|
try {
|
|
615629
|
-
const ver =
|
|
615664
|
+
const ver = execSync54(`"${nvimDest}" --version`, { encoding: "utf8", stdio: "pipe", timeout: 5e3 }).split("\n")[0];
|
|
615630
615665
|
console.log(` Installed: ${ver}`);
|
|
615631
615666
|
} catch {
|
|
615632
615667
|
console.log(" Warning: nvim binary downloaded but may not work (missing FUSE? Try: nvim --appimage-extract)");
|
|
@@ -615641,8 +615676,8 @@ async function ensureNeovim() {
|
|
|
615641
615676
|
if (hasCmd("brew")) {
|
|
615642
615677
|
console.log(" Installing Neovim via Homebrew...");
|
|
615643
615678
|
try {
|
|
615644
|
-
|
|
615645
|
-
const nvimPath =
|
|
615679
|
+
execSync54("brew install neovim", { stdio: "inherit", timeout: 12e4 });
|
|
615680
|
+
const nvimPath = execSync54("which nvim", { encoding: "utf8", stdio: "pipe", timeout: 3e3 }).trim();
|
|
615646
615681
|
return nvimPath || null;
|
|
615647
615682
|
} catch {
|
|
615648
615683
|
console.log(" brew install neovim failed.");
|
|
@@ -615656,7 +615691,7 @@ async function ensureNeovim() {
|
|
|
615656
615691
|
if (hasCmd("choco")) {
|
|
615657
615692
|
console.log(" Installing Neovim via Chocolatey...");
|
|
615658
615693
|
try {
|
|
615659
|
-
|
|
615694
|
+
execSync54("choco install neovim -y", { stdio: "inherit", timeout: 12e4 });
|
|
615660
615695
|
return "nvim";
|
|
615661
615696
|
} catch {
|
|
615662
615697
|
console.log(" choco install neovim failed.");
|
|
@@ -615665,7 +615700,7 @@ async function ensureNeovim() {
|
|
|
615665
615700
|
if (hasCmd("winget")) {
|
|
615666
615701
|
console.log(" Installing Neovim via winget...");
|
|
615667
615702
|
try {
|
|
615668
|
-
|
|
615703
|
+
execSync54("winget install Neovim.Neovim --accept-source-agreements --accept-package-agreements", {
|
|
615669
615704
|
stdio: "inherit",
|
|
615670
615705
|
timeout: 12e4
|
|
615671
615706
|
});
|
|
@@ -619734,7 +619769,7 @@ var init_audio_waveform = __esm({
|
|
|
619734
619769
|
import { existsSync as existsSync118, unlinkSync as unlinkSync23 } from "node:fs";
|
|
619735
619770
|
import { tmpdir as tmpdir20 } from "node:os";
|
|
619736
619771
|
import { join as join131 } from "node:path";
|
|
619737
|
-
import { execSync as
|
|
619772
|
+
import { execSync as execSync55 } from "node:child_process";
|
|
619738
619773
|
function isNeovimActive() {
|
|
619739
619774
|
return _state2 !== null && !_state2.cleanedUp;
|
|
619740
619775
|
}
|
|
@@ -619751,7 +619786,7 @@ async function startNeovimMode(opts) {
|
|
|
619751
619786
|
}
|
|
619752
619787
|
let nvimPath;
|
|
619753
619788
|
try {
|
|
619754
|
-
nvimPath =
|
|
619789
|
+
nvimPath = execSync55("which nvim 2>/dev/null", { encoding: "utf8" }).trim();
|
|
619755
619790
|
if (!nvimPath) throw new Error();
|
|
619756
619791
|
} catch {
|
|
619757
619792
|
const installed = await ensureNeovim();
|
|
@@ -620433,8 +620468,8 @@ async function forceKillDaemon(port) {
|
|
|
620433
620468
|
}
|
|
620434
620469
|
}
|
|
620435
620470
|
try {
|
|
620436
|
-
const { execSync:
|
|
620437
|
-
const out =
|
|
620471
|
+
const { execSync: execSync64 } = await import("node:child_process");
|
|
620472
|
+
const out = execSync64(
|
|
620438
620473
|
`lsof -ti :${p2} 2>/dev/null || fuser ${p2}/tcp 2>/dev/null || true`,
|
|
620439
620474
|
{ encoding: "utf8", timeout: 3e3 }
|
|
620440
620475
|
).trim();
|
|
@@ -623311,7 +623346,7 @@ import {
|
|
|
623311
623346
|
import { join as join137, dirname as dirname42, resolve as resolve57 } from "node:path";
|
|
623312
623347
|
import { homedir as homedir46, tmpdir as tmpdir21, platform as platform6 } from "node:os";
|
|
623313
623348
|
import {
|
|
623314
|
-
execSync as
|
|
623349
|
+
execSync as execSync56,
|
|
623315
623350
|
spawn as nodeSpawn
|
|
623316
623351
|
} from "node:child_process";
|
|
623317
623352
|
import { createRequire as createRequire6 } from "node:module";
|
|
@@ -625658,7 +625693,7 @@ except Exception as exc:
|
|
|
625658
625693
|
}
|
|
625659
625694
|
for (const player of ["paplay", "pw-play", "aplay"]) {
|
|
625660
625695
|
try {
|
|
625661
|
-
|
|
625696
|
+
execSync56(`which ${player}`, { stdio: "pipe" });
|
|
625662
625697
|
return [player, path12];
|
|
625663
625698
|
} catch {
|
|
625664
625699
|
}
|
|
@@ -625836,7 +625871,7 @@ except Exception as exc:
|
|
|
625836
625871
|
return false;
|
|
625837
625872
|
}
|
|
625838
625873
|
try {
|
|
625839
|
-
|
|
625874
|
+
execSync56(`${JSON.stringify(venvPy)} -c "import supertonic"`, {
|
|
625840
625875
|
stdio: "pipe",
|
|
625841
625876
|
timeout: 1e4
|
|
625842
625877
|
});
|
|
@@ -625968,7 +626003,7 @@ except Exception as exc:
|
|
|
625968
626003
|
if (this.python3Path) return this.python3Path;
|
|
625969
626004
|
for (const bin of ["python3", "python"]) {
|
|
625970
626005
|
try {
|
|
625971
|
-
const path12 =
|
|
626006
|
+
const path12 = execSync56(`which ${bin}`, { stdio: "pipe", timeout: 5e3 }).toString().trim();
|
|
625972
626007
|
if (path12) {
|
|
625973
626008
|
this.python3Path = path12;
|
|
625974
626009
|
return path12;
|
|
@@ -626032,7 +626067,7 @@ except Exception as exc:
|
|
|
626032
626067
|
return false;
|
|
626033
626068
|
}
|
|
626034
626069
|
try {
|
|
626035
|
-
|
|
626070
|
+
execSync56(`${py} -c "import mlx_audio"`, {
|
|
626036
626071
|
stdio: "pipe",
|
|
626037
626072
|
timeout: 1e4
|
|
626038
626073
|
});
|
|
@@ -626101,14 +626136,14 @@ Error: ${err2 instanceof Error ? err2.message : String(err2)}`
|
|
|
626101
626136
|
`tts_gen.main(["--model", ${JSON.stringify(mlxModelId)}, "--text", text, "--voice", ${JSON.stringify(mlxVoice)}, "--lang_code", ${JSON.stringify(mlxLangCode)}, "--audio_path", ${JSON.stringify(wavPath)}])`
|
|
626102
626137
|
].join("; ");
|
|
626103
626138
|
try {
|
|
626104
|
-
|
|
626139
|
+
execSync56(
|
|
626105
626140
|
`${py} -c ${JSON.stringify(pyScript)} ${JSON.stringify(JSON.stringify(cleaned))}`,
|
|
626106
626141
|
{ stdio: "pipe", timeout: 6e4, cwd: tmpdir21() }
|
|
626107
626142
|
);
|
|
626108
626143
|
} catch (err) {
|
|
626109
626144
|
try {
|
|
626110
626145
|
const safeText = cleaned.replace(/'/g, "'\\''");
|
|
626111
|
-
|
|
626146
|
+
execSync56(
|
|
626112
626147
|
`${py} -m mlx_audio.tts.generate --model ${mlxModelId} --text '${safeText}' --voice ${mlxVoice} --lang_code ${mlxLangCode} --audio_path ${JSON.stringify(wavPath)}`,
|
|
626113
626148
|
{ stdio: "pipe", timeout: 6e4, cwd: tmpdir21() }
|
|
626114
626149
|
);
|
|
@@ -626182,14 +626217,14 @@ Error: ${err2 instanceof Error ? err2.message : String(err2)}`
|
|
|
626182
626217
|
`tts_gen.main(["--model", ${JSON.stringify(mlxModelId)}, "--text", text, "--voice", ${JSON.stringify(mlxVoice)}, "--lang_code", ${JSON.stringify(mlxLangCode)}, "--audio_path", ${JSON.stringify(wavPath)}])`
|
|
626183
626218
|
].join("; ");
|
|
626184
626219
|
try {
|
|
626185
|
-
|
|
626220
|
+
execSync56(
|
|
626186
626221
|
`${py} -c ${JSON.stringify(pyScript)} ${JSON.stringify(JSON.stringify(cleaned))}`,
|
|
626187
626222
|
{ stdio: "pipe", timeout: 6e4, cwd: tmpdir21() }
|
|
626188
626223
|
);
|
|
626189
626224
|
} catch {
|
|
626190
626225
|
try {
|
|
626191
626226
|
const safeText = cleaned.replace(/'/g, "'\\''");
|
|
626192
|
-
|
|
626227
|
+
execSync56(
|
|
626193
626228
|
`${py} -m mlx_audio.tts.generate --model ${mlxModelId} --text '${safeText}' --voice ${mlxVoice} --lang_code ${mlxLangCode} --audio_path ${JSON.stringify(wavPath)}`,
|
|
626194
626229
|
{ stdio: "pipe", timeout: 6e4, cwd: tmpdir21() }
|
|
626195
626230
|
);
|
|
@@ -626485,11 +626520,11 @@ Error: ${err2 instanceof Error ? err2.message : String(err2)}`
|
|
|
626485
626520
|
...isJetson ? (() => {
|
|
626486
626521
|
let jpVer = "v60";
|
|
626487
626522
|
try {
|
|
626488
|
-
const tegra = existsSync125("/etc/nv_tegra_release") ?
|
|
626523
|
+
const tegra = existsSync125("/etc/nv_tegra_release") ? execSync56("cat /etc/nv_tegra_release 2>/dev/null", {
|
|
626489
626524
|
encoding: "utf8",
|
|
626490
626525
|
timeout: 3e3
|
|
626491
626526
|
}).trim() : "";
|
|
626492
|
-
const dpkg =
|
|
626527
|
+
const dpkg = execSync56(
|
|
626493
626528
|
"dpkg -l nvidia-jetpack 2>/dev/null | grep nvidia-jetpack | awk '{print $3}'",
|
|
626494
626529
|
{ encoding: "utf8", timeout: 5e3 }
|
|
626495
626530
|
).trim();
|
|
@@ -632025,10 +632060,10 @@ The session corrections MUST become hard rules in the SKILL.md Rules section.`;
|
|
|
632025
632060
|
"Requesting sudo to migrate daemon to current user and restart..."
|
|
632026
632061
|
);
|
|
632027
632062
|
const nodeBin = process.execPath;
|
|
632028
|
-
const { execSync:
|
|
632063
|
+
const { execSync: execSync64 } = await import("node:child_process");
|
|
632029
632064
|
let npmRoot = "";
|
|
632030
632065
|
try {
|
|
632031
|
-
npmRoot =
|
|
632066
|
+
npmRoot = execSync64("npm root -g", { encoding: "utf8" }).trim();
|
|
632032
632067
|
} catch {
|
|
632033
632068
|
}
|
|
632034
632069
|
const launcher = npmRoot ? `${npmRoot}/omnius/dist/launcher.cjs` : "";
|
|
@@ -640611,7 +640646,7 @@ async function handleBroker(arg, _ctx) {
|
|
|
640611
640646
|
);
|
|
640612
640647
|
}
|
|
640613
640648
|
async function handleParallel(arg, ctx3) {
|
|
640614
|
-
const { execSync:
|
|
640649
|
+
const { execSync: execSync64 } = await import("node:child_process");
|
|
640615
640650
|
const baseUrl = ctx3.config.backendUrl || "http://localhost:11434";
|
|
640616
640651
|
const isRemote = ctx3.config.backendType === "nexus";
|
|
640617
640652
|
if (isRemote) {
|
|
@@ -640643,7 +640678,7 @@ async function handleParallel(arg, ctx3) {
|
|
|
640643
640678
|
}
|
|
640644
640679
|
let systemdVal = "";
|
|
640645
640680
|
try {
|
|
640646
|
-
const out =
|
|
640681
|
+
const out = execSync64(
|
|
640647
640682
|
"systemctl show ollama.service -p Environment 2>/dev/null || true",
|
|
640648
640683
|
{ encoding: "utf8" }
|
|
640649
640684
|
);
|
|
@@ -640678,7 +640713,7 @@ async function handleParallel(arg, ctx3) {
|
|
|
640678
640713
|
}
|
|
640679
640714
|
const isSystemd = (() => {
|
|
640680
640715
|
try {
|
|
640681
|
-
const out =
|
|
640716
|
+
const out = execSync64("systemctl is-active ollama.service 2>/dev/null", {
|
|
640682
640717
|
encoding: "utf8"
|
|
640683
640718
|
}).trim();
|
|
640684
640719
|
return out === "active" || out === "inactive";
|
|
@@ -642979,13 +643014,13 @@ async function showExposeDashboard(gateway, rl, ctx3) {
|
|
|
642979
643014
|
const cmd = `/endpoint ${id} --auth ${gateway.authKey ?? ""}`;
|
|
642980
643015
|
let copied = false;
|
|
642981
643016
|
try {
|
|
642982
|
-
const { execSync:
|
|
643017
|
+
const { execSync: execSync64 } = __require("node:child_process");
|
|
642983
643018
|
const platform7 = process.platform;
|
|
642984
643019
|
if (platform7 === "darwin") {
|
|
642985
|
-
|
|
643020
|
+
execSync64("pbcopy", { input: cmd, timeout: 3e3 });
|
|
642986
643021
|
copied = true;
|
|
642987
643022
|
} else if (platform7 === "win32") {
|
|
642988
|
-
|
|
643023
|
+
execSync64("clip", { input: cmd, timeout: 3e3 });
|
|
642989
643024
|
copied = true;
|
|
642990
643025
|
} else {
|
|
642991
643026
|
for (const tool of [
|
|
@@ -642994,7 +643029,7 @@ async function showExposeDashboard(gateway, rl, ctx3) {
|
|
|
642994
643029
|
"wl-copy"
|
|
642995
643030
|
]) {
|
|
642996
643031
|
try {
|
|
642997
|
-
|
|
643032
|
+
execSync64(tool, {
|
|
642998
643033
|
input: cmd,
|
|
642999
643034
|
timeout: 3e3,
|
|
643000
643035
|
stdio: ["pipe", "pipe", "pipe"]
|
|
@@ -643384,7 +643419,7 @@ var init_commands = __esm({
|
|
|
643384
643419
|
// packages/cli/src/tui/project-context.ts
|
|
643385
643420
|
import { existsSync as existsSync127, readFileSync as readFileSync104, readdirSync as readdirSync43, mkdirSync as mkdirSync74, writeFileSync as writeFileSync65 } from "node:fs";
|
|
643386
643421
|
import { join as join139, basename as basename26 } from "node:path";
|
|
643387
|
-
import { execSync as
|
|
643422
|
+
import { execSync as execSync57 } from "node:child_process";
|
|
643388
643423
|
import { homedir as homedir48 } from "node:os";
|
|
643389
643424
|
function projectContextUrlSpanAt(text2, index) {
|
|
643390
643425
|
PROJECT_CONTEXT_URL_RE.lastIndex = 0;
|
|
@@ -643443,18 +643478,18 @@ function loadProjectMap(repoRoot) {
|
|
|
643443
643478
|
}
|
|
643444
643479
|
function getGitInfo(repoRoot) {
|
|
643445
643480
|
try {
|
|
643446
|
-
|
|
643481
|
+
execSync57("git rev-parse --is-inside-work-tree", { cwd: repoRoot, stdio: "pipe" });
|
|
643447
643482
|
} catch {
|
|
643448
643483
|
return "";
|
|
643449
643484
|
}
|
|
643450
643485
|
const lines = [];
|
|
643451
643486
|
try {
|
|
643452
|
-
const branch =
|
|
643487
|
+
const branch = execSync57("git branch --show-current", { cwd: repoRoot, encoding: "utf-8", stdio: "pipe" }).trim();
|
|
643453
643488
|
if (branch) lines.push(`Branch: ${branch}`);
|
|
643454
643489
|
} catch {
|
|
643455
643490
|
}
|
|
643456
643491
|
try {
|
|
643457
|
-
const status =
|
|
643492
|
+
const status = execSync57("git status --porcelain", { cwd: repoRoot, encoding: "utf-8", stdio: "pipe" }).trim();
|
|
643458
643493
|
if (status) {
|
|
643459
643494
|
const changed = status.split("\n").length;
|
|
643460
643495
|
lines.push(`Working tree: ${changed} changed file(s)`);
|
|
@@ -643464,7 +643499,7 @@ function getGitInfo(repoRoot) {
|
|
|
643464
643499
|
} catch {
|
|
643465
643500
|
}
|
|
643466
643501
|
try {
|
|
643467
|
-
const log22 =
|
|
643502
|
+
const log22 = execSync57("git log --oneline -5 --no-decorate", { cwd: repoRoot, encoding: "utf-8", stdio: "pipe" }).trim();
|
|
643468
643503
|
if (log22) lines.push(`Recent commits:
|
|
643469
643504
|
${log22}`);
|
|
643470
643505
|
} catch {
|
|
@@ -647784,7 +647819,7 @@ var init_promptLoader3 = __esm({
|
|
|
647784
647819
|
// packages/cli/src/tui/dream-engine.ts
|
|
647785
647820
|
import { mkdirSync as mkdirSync80, writeFileSync as writeFileSync69, readFileSync as readFileSync110, existsSync as existsSync134, readdirSync as readdirSync47 } from "node:fs";
|
|
647786
647821
|
import { join as join147, basename as basename32 } from "node:path";
|
|
647787
|
-
import { execSync as
|
|
647822
|
+
import { execSync as execSync58 } from "node:child_process";
|
|
647788
647823
|
function setDreamWriteContent(fn) {
|
|
647789
647824
|
_dreamWriteContent = fn;
|
|
647790
647825
|
}
|
|
@@ -648157,7 +648192,7 @@ var init_dream_engine = __esm({
|
|
|
648157
648192
|
}
|
|
648158
648193
|
}
|
|
648159
648194
|
try {
|
|
648160
|
-
const output =
|
|
648195
|
+
const output = execSync58(cmd, {
|
|
648161
648196
|
cwd: this.repoRoot,
|
|
648162
648197
|
timeout: 3e4,
|
|
648163
648198
|
encoding: "utf-8",
|
|
@@ -649134,17 +649169,17 @@ ${summary}` };
|
|
|
649134
649169
|
try {
|
|
649135
649170
|
mkdirSync80(checkpointDir3, { recursive: true });
|
|
649136
649171
|
try {
|
|
649137
|
-
const gitStatus =
|
|
649172
|
+
const gitStatus = execSync58("git status --porcelain", {
|
|
649138
649173
|
cwd: this.repoRoot,
|
|
649139
649174
|
encoding: "utf-8",
|
|
649140
649175
|
timeout: 1e4
|
|
649141
649176
|
});
|
|
649142
|
-
const gitDiff =
|
|
649177
|
+
const gitDiff = execSync58("git diff", {
|
|
649143
649178
|
cwd: this.repoRoot,
|
|
649144
649179
|
encoding: "utf-8",
|
|
649145
649180
|
timeout: 1e4
|
|
649146
649181
|
});
|
|
649147
|
-
const gitHash =
|
|
649182
|
+
const gitHash = execSync58("git rev-parse HEAD 2>/dev/null || echo 'no-git'", {
|
|
649148
649183
|
cwd: this.repoRoot,
|
|
649149
649184
|
encoding: "utf-8",
|
|
649150
649185
|
timeout: 5e3
|
|
@@ -677517,7 +677552,7 @@ __export(aiwg_exports, {
|
|
|
677517
677552
|
import { existsSync as existsSync145, readFileSync as readFileSync120, readdirSync as readdirSync52, statSync as statSync52 } from "node:fs";
|
|
677518
677553
|
import { join as join157 } from "node:path";
|
|
677519
677554
|
import { homedir as homedir53 } from "node:os";
|
|
677520
|
-
import { execSync as
|
|
677555
|
+
import { execSync as execSync59 } from "node:child_process";
|
|
677521
677556
|
function resolveAiwgRoot() {
|
|
677522
677557
|
if (_cachedAiwgRoot !== void 0) return _cachedAiwgRoot;
|
|
677523
677558
|
const envRoot = process.env["OMNIUS_AIWG_ROOT"];
|
|
@@ -677531,7 +677566,7 @@ function resolveAiwgRoot() {
|
|
|
677531
677566
|
return shareDir;
|
|
677532
677567
|
}
|
|
677533
677568
|
try {
|
|
677534
|
-
const globalRoot =
|
|
677569
|
+
const globalRoot = execSync59("npm root -g", {
|
|
677535
677570
|
encoding: "utf-8",
|
|
677536
677571
|
timeout: 5e3,
|
|
677537
677572
|
stdio: ["pipe", "pipe", "pipe"]
|
|
@@ -677573,7 +677608,7 @@ function resolveAiwgRoot() {
|
|
|
677573
677608
|
}
|
|
677574
677609
|
}
|
|
677575
677610
|
try {
|
|
677576
|
-
const whichAiwg =
|
|
677611
|
+
const whichAiwg = execSync59("which aiwg 2>/dev/null || where aiwg 2>nul", {
|
|
677577
677612
|
encoding: "utf-8",
|
|
677578
677613
|
timeout: 3e3,
|
|
677579
677614
|
stdio: ["pipe", "pipe", "pipe"]
|
|
@@ -680461,9 +680496,9 @@ function resolveLocalPeerId() {
|
|
|
680461
680496
|
}
|
|
680462
680497
|
let scanResult = null;
|
|
680463
680498
|
try {
|
|
680464
|
-
const { execSync:
|
|
680499
|
+
const { execSync: execSync64 } = __require("node:child_process");
|
|
680465
680500
|
const cmd = `find "${homedir56()}" -maxdepth 4 -path '*/.omnius/nexus/status.json' -type f 2>/dev/null | head -50`;
|
|
680466
|
-
const out =
|
|
680501
|
+
const out = execSync64(cmd, { encoding: "utf-8", timeout: 2e3 }).trim();
|
|
680467
680502
|
for (const line of out.split("\n")) {
|
|
680468
680503
|
const f2 = line.trim();
|
|
680469
680504
|
if (!f2) continue;
|
|
@@ -680493,8 +680528,8 @@ function locateTorScript(filename) {
|
|
|
680493
680528
|
if (existsSync149(p2)) return p2;
|
|
680494
680529
|
}
|
|
680495
680530
|
try {
|
|
680496
|
-
const { execSync:
|
|
680497
|
-
const root =
|
|
680531
|
+
const { execSync: execSync64 } = __require("node:child_process");
|
|
680532
|
+
const root = execSync64("npm root -g", { encoding: "utf-8", timeout: 5e3 }).trim();
|
|
680498
680533
|
const p2 = join161(root, "omnius", "dist", "scripts", "tor", filename);
|
|
680499
680534
|
if (existsSync149(p2)) return p2;
|
|
680500
680535
|
} catch {
|
|
@@ -691716,7 +691751,7 @@ var init_usage_tracker = __esm({
|
|
|
691716
691751
|
});
|
|
691717
691752
|
|
|
691718
691753
|
// packages/cli/src/docker.ts
|
|
691719
|
-
import { execSync as
|
|
691754
|
+
import { execSync as execSync60, spawn as spawn32 } from "node:child_process";
|
|
691720
691755
|
import { existsSync as existsSync151, mkdirSync as mkdirSync94, writeFileSync as writeFileSync81 } from "node:fs";
|
|
691721
691756
|
import { join as join163, resolve as resolve64, dirname as dirname48 } from "node:path";
|
|
691722
691757
|
import { homedir as homedir57 } from "node:os";
|
|
@@ -691737,7 +691772,7 @@ function getDockerDir() {
|
|
|
691737
691772
|
}
|
|
691738
691773
|
function isDockerAvailable() {
|
|
691739
691774
|
try {
|
|
691740
|
-
|
|
691775
|
+
execSync60("docker info", { stdio: "pipe", timeout: 1e4 });
|
|
691741
691776
|
return true;
|
|
691742
691777
|
} catch {
|
|
691743
691778
|
return false;
|
|
@@ -691745,7 +691780,7 @@ function isDockerAvailable() {
|
|
|
691745
691780
|
}
|
|
691746
691781
|
function isDockerInstalled() {
|
|
691747
691782
|
try {
|
|
691748
|
-
|
|
691783
|
+
execSync60("docker --version", { stdio: "pipe", timeout: 5e3 });
|
|
691749
691784
|
return true;
|
|
691750
691785
|
} catch {
|
|
691751
691786
|
return false;
|
|
@@ -691770,31 +691805,31 @@ async function ensureDocker() {
|
|
|
691770
691805
|
}
|
|
691771
691806
|
try {
|
|
691772
691807
|
console.log("[omnius-docker] Docker not found. Installing via get.docker.com...");
|
|
691773
|
-
|
|
691808
|
+
execSync60("curl -fsSL https://get.docker.com | sh", {
|
|
691774
691809
|
stdio: "inherit",
|
|
691775
691810
|
timeout: 3e5
|
|
691776
691811
|
});
|
|
691777
691812
|
const user = process.env["USER"] || process.env["LOGNAME"];
|
|
691778
691813
|
if (user) {
|
|
691779
691814
|
try {
|
|
691780
|
-
|
|
691815
|
+
execSync60(`sudo usermod -aG docker ${user}`, { stdio: "pipe" });
|
|
691781
691816
|
} catch {
|
|
691782
691817
|
}
|
|
691783
691818
|
}
|
|
691784
691819
|
try {
|
|
691785
|
-
|
|
691820
|
+
execSync60("sudo systemctl start docker", { stdio: "pipe", timeout: 15e3 });
|
|
691786
691821
|
} catch {
|
|
691787
691822
|
}
|
|
691788
691823
|
try {
|
|
691789
|
-
|
|
691790
|
-
const runtimes =
|
|
691824
|
+
execSync60("nvidia-smi", { stdio: "pipe", timeout: 5e3 });
|
|
691825
|
+
const runtimes = execSync60("docker info --format '{{json .Runtimes}}'", {
|
|
691791
691826
|
stdio: "pipe",
|
|
691792
691827
|
timeout: 5e3
|
|
691793
691828
|
}).toString();
|
|
691794
691829
|
if (!runtimes.includes("nvidia")) {
|
|
691795
691830
|
console.log("[omnius-docker] NVIDIA GPU detected. Installing nvidia-container-toolkit...");
|
|
691796
691831
|
try {
|
|
691797
|
-
|
|
691832
|
+
execSync60(`
|
|
691798
691833
|
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg 2>/dev/null
|
|
691799
691834
|
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list > /dev/null 2>&1
|
|
691800
691835
|
sudo apt-get update -qq 2>/dev/null && sudo apt-get install -y -qq nvidia-container-toolkit 2>/dev/null || ( sudo dnf install -y nvidia-container-toolkit 2>/dev/null || sudo yum install -y nvidia-container-toolkit 2>/dev/null || true )
|
|
@@ -691824,7 +691859,7 @@ async function ensureDocker() {
|
|
|
691824
691859
|
}
|
|
691825
691860
|
async function ensureNvidiaToolkit() {
|
|
691826
691861
|
try {
|
|
691827
|
-
|
|
691862
|
+
execSync60("nvidia-smi --query-gpu=name --format=csv,noheader", { stdio: "pipe", timeout: 5e3 });
|
|
691828
691863
|
} catch {
|
|
691829
691864
|
return { ok: false, message: "No NVIDIA GPU detected (nvidia-smi not found)" };
|
|
691830
691865
|
}
|
|
@@ -691835,7 +691870,7 @@ async function ensureNvidiaToolkit() {
|
|
|
691835
691870
|
return { ok: false, message: "Auto-install only supported on Linux. Install manually: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html" };
|
|
691836
691871
|
}
|
|
691837
691872
|
try {
|
|
691838
|
-
|
|
691873
|
+
execSync60(`
|
|
691839
691874
|
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg 2>/dev/null
|
|
691840
691875
|
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list > /dev/null 2>&1
|
|
691841
691876
|
sudo apt-get update -qq 2>/dev/null && sudo apt-get install -y -qq nvidia-container-toolkit 2>/dev/null || ( sudo dnf install -y nvidia-container-toolkit 2>/dev/null || sudo yum install -y nvidia-container-toolkit 2>/dev/null || true )
|
|
@@ -691849,7 +691884,7 @@ async function ensureNvidiaToolkit() {
|
|
|
691849
691884
|
}
|
|
691850
691885
|
function isOmniusImageBuilt() {
|
|
691851
691886
|
try {
|
|
691852
|
-
const out =
|
|
691887
|
+
const out = execSync60(`docker images -q ${OMNIUS_IMAGE}:${OMNIUS_IMAGE_TAG}`, {
|
|
691853
691888
|
stdio: "pipe",
|
|
691854
691889
|
timeout: 5e3
|
|
691855
691890
|
}).toString().trim();
|
|
@@ -691873,7 +691908,7 @@ async function ensureOmniusImage(force = false) {
|
|
|
691873
691908
|
}
|
|
691874
691909
|
try {
|
|
691875
691910
|
console.log(`[omnius-docker] Building image ${OMNIUS_IMAGE}:${OMNIUS_IMAGE_TAG}...`);
|
|
691876
|
-
|
|
691911
|
+
execSync60(`docker build -t ${OMNIUS_IMAGE}:${OMNIUS_IMAGE_TAG} ${buildContext}`, {
|
|
691877
691912
|
stdio: "inherit",
|
|
691878
691913
|
timeout: 6e5
|
|
691879
691914
|
// 10 min
|
|
@@ -691947,11 +691982,11 @@ exec "$@"
|
|
|
691947
691982
|
}
|
|
691948
691983
|
function hasNvidiaGpu() {
|
|
691949
691984
|
try {
|
|
691950
|
-
|
|
691985
|
+
execSync60("nvidia-smi --query-gpu=name --format=csv,noheader", {
|
|
691951
691986
|
stdio: "pipe",
|
|
691952
691987
|
timeout: 5e3
|
|
691953
691988
|
});
|
|
691954
|
-
const runtimes =
|
|
691989
|
+
const runtimes = execSync60("docker info --format '{{json .Runtimes}}'", {
|
|
691955
691990
|
stdio: "pipe",
|
|
691956
691991
|
timeout: 5e3
|
|
691957
691992
|
}).toString();
|
|
@@ -692200,7 +692235,7 @@ import { createRequire as createRequire7 } from "node:module";
|
|
|
692200
692235
|
import { fileURLToPath as fileURLToPath19 } from "node:url";
|
|
692201
692236
|
import { dirname as dirname49, join as join165, resolve as resolve65 } from "node:path";
|
|
692202
692237
|
import { homedir as homedir58 } from "node:os";
|
|
692203
|
-
import { spawn as spawn33, execSync as
|
|
692238
|
+
import { spawn as spawn33, execSync as execSync61 } from "node:child_process";
|
|
692204
692239
|
import {
|
|
692205
692240
|
mkdirSync as mkdirSync95,
|
|
692206
692241
|
writeFileSync as writeFileSync82,
|
|
@@ -696521,7 +696556,7 @@ function handleV1RunsDelete(res, id) {
|
|
|
696521
696556
|
const containerName = `omnius-${id}`;
|
|
696522
696557
|
if (job.sandbox === "container") {
|
|
696523
696558
|
try {
|
|
696524
|
-
|
|
696559
|
+
execSync61(`docker stop ${containerName}`, {
|
|
696525
696560
|
timeout: 5e3,
|
|
696526
696561
|
stdio: "ignore"
|
|
696527
696562
|
});
|
|
@@ -698850,8 +698885,8 @@ data: ${JSON.stringify(data)}
|
|
|
698850
698885
|
}
|
|
698851
698886
|
setImmediate(() => {
|
|
698852
698887
|
try {
|
|
698853
|
-
const { execSync:
|
|
698854
|
-
|
|
698888
|
+
const { execSync: execSync64 } = require4("node:child_process");
|
|
698889
|
+
execSync64("npm update -g omnius 2>/dev/null || true", {
|
|
698855
698890
|
stdio: "pipe"
|
|
698856
698891
|
});
|
|
698857
698892
|
} catch {
|
|
@@ -698894,7 +698929,7 @@ data: ${JSON.stringify(data)}
|
|
|
698894
698929
|
return;
|
|
698895
698930
|
}
|
|
698896
698931
|
try {
|
|
698897
|
-
const { execSync:
|
|
698932
|
+
const { execSync: execSync64 } = require4("node:child_process");
|
|
698898
698933
|
let audioPath = null;
|
|
698899
698934
|
const ttsCmds = [
|
|
698900
698935
|
`espeak "${text2}" -w /tmp/tts_${Date.now()}.wav 2>/dev/null`,
|
|
@@ -698903,7 +698938,7 @@ data: ${JSON.stringify(data)}
|
|
|
698903
698938
|
];
|
|
698904
698939
|
for (const cmd of ttsCmds) {
|
|
698905
698940
|
try {
|
|
698906
|
-
|
|
698941
|
+
execSync64(cmd, { stdio: "pipe" });
|
|
698907
698942
|
audioPath = "/tmp/tts_" + Date.now() + ".wav";
|
|
698908
698943
|
break;
|
|
698909
698944
|
} catch {
|
|
@@ -702327,7 +702362,7 @@ var clipboard_media_exports = {};
|
|
|
702327
702362
|
__export(clipboard_media_exports, {
|
|
702328
702363
|
pasteClipboardImageToFile: () => pasteClipboardImageToFile
|
|
702329
702364
|
});
|
|
702330
|
-
import { execFileSync as execFileSync10, execSync as
|
|
702365
|
+
import { execFileSync as execFileSync10, execSync as execSync62 } from "node:child_process";
|
|
702331
702366
|
import { mkdirSync as mkdirSync96, readFileSync as readFileSync126, rmSync as rmSync12, writeFileSync as writeFileSync83 } from "node:fs";
|
|
702332
702367
|
import { join as join166 } from "node:path";
|
|
702333
702368
|
function pasteClipboardImageToFile(repoRoot) {
|
|
@@ -702342,7 +702377,7 @@ function pasteClipboardImageToFile(repoRoot) {
|
|
|
702342
702377
|
function readClipboardImage() {
|
|
702343
702378
|
if (process.platform === "darwin") {
|
|
702344
702379
|
try {
|
|
702345
|
-
|
|
702380
|
+
execSync62("command -v pngpaste", { stdio: "ignore", timeout: 1e3 });
|
|
702346
702381
|
const tmp = `/tmp/omnius-clipboard-${Date.now()}.png`;
|
|
702347
702382
|
execFileSync10("pngpaste", [tmp], { timeout: 3e3 });
|
|
702348
702383
|
const buffer2 = readFileSync126(tmp);
|
|
@@ -702413,7 +702448,7 @@ import {
|
|
|
702413
702448
|
mkdirSync as mkdirSync97
|
|
702414
702449
|
} from "node:fs";
|
|
702415
702450
|
import { existsSync as existsSync153 } from "node:fs";
|
|
702416
|
-
import { execSync as
|
|
702451
|
+
import { execSync as execSync63 } from "node:child_process";
|
|
702417
702452
|
import { homedir as homedir59 } from "node:os";
|
|
702418
702453
|
function formatTimeAgo2(date) {
|
|
702419
702454
|
const seconds = Math.floor((Date.now() - date.getTime()) / 1e3);
|
|
@@ -702580,9 +702615,9 @@ ${incompleteList}${more}
|
|
|
702580
702615
|
const scripts = pkg.scripts || {};
|
|
702581
702616
|
const checkScript = scripts["typecheck"] ? "typecheck" : scripts["build"] ? "build" : null;
|
|
702582
702617
|
if (checkScript) {
|
|
702583
|
-
const { execSync:
|
|
702618
|
+
const { execSync: execSync64 } = await import("node:child_process");
|
|
702584
702619
|
try {
|
|
702585
|
-
|
|
702620
|
+
execSync64(`npm run ${checkScript} --silent 2>&1`, {
|
|
702586
702621
|
cwd: cwd4,
|
|
702587
702622
|
stdio: "pipe",
|
|
702588
702623
|
timeout: 12e4,
|
|
@@ -710344,7 +710379,7 @@ Respond concisely and safely. Remember: you are talking to the general public.`;
|
|
|
710344
710379
|
try {
|
|
710345
710380
|
if (process.platform === "win32") {
|
|
710346
710381
|
try {
|
|
710347
|
-
|
|
710382
|
+
execSync63(`taskkill /F /PID ${pid}`, {
|
|
710348
710383
|
timeout: 5e3,
|
|
710349
710384
|
stdio: "ignore"
|
|
710350
710385
|
});
|
|
@@ -710376,7 +710411,7 @@ Respond concisely and safely. Remember: you are talking to the general public.`;
|
|
|
710376
710411
|
if (pid > 0) {
|
|
710377
710412
|
if (process.platform === "win32") {
|
|
710378
710413
|
try {
|
|
710379
|
-
|
|
710414
|
+
execSync63(`taskkill /F /PID ${pid}`, {
|
|
710380
710415
|
timeout: 5e3,
|
|
710381
710416
|
stdio: "ignore"
|
|
710382
710417
|
});
|
|
@@ -710396,7 +710431,7 @@ Respond concisely and safely. Remember: you are talking to the general public.`;
|
|
|
710396
710431
|
} catch {
|
|
710397
710432
|
}
|
|
710398
710433
|
try {
|
|
710399
|
-
|
|
710434
|
+
execSync63(
|
|
710400
710435
|
process.platform === "win32" ? "timeout /t 1 /nobreak >nul" : "sleep 0.5",
|
|
710401
710436
|
{ timeout: 3e3, stdio: "ignore" }
|
|
710402
710437
|
);
|
|
@@ -710413,7 +710448,7 @@ Respond concisely and safely. Remember: you are talking to the general public.`;
|
|
|
710413
710448
|
} catch (err) {
|
|
710414
710449
|
if (attempt < 2) {
|
|
710415
710450
|
try {
|
|
710416
|
-
|
|
710451
|
+
execSync63(
|
|
710417
710452
|
process.platform === "win32" ? "timeout /t 1 /nobreak >nul" : "sleep 0.3",
|
|
710418
710453
|
{ timeout: 3e3, stdio: "ignore" }
|
|
710419
710454
|
);
|
|
@@ -710427,7 +710462,7 @@ Respond concisely and safely. Remember: you are talking to the general public.`;
|
|
|
710427
710462
|
);
|
|
710428
710463
|
if (process.platform === "win32") {
|
|
710429
710464
|
try {
|
|
710430
|
-
|
|
710465
|
+
execSync63(`rd /s /q "${omniusPath}"`, {
|
|
710431
710466
|
timeout: 1e4,
|
|
710432
710467
|
stdio: "ignore"
|
|
710433
710468
|
});
|