omnius 1.0.298 → 1.0.300
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 +218 -190
- 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) => {
|
|
@@ -607763,14 +607789,16 @@ var init_status_bar = __esm({
|
|
|
607763
607789
|
buf += `\x1B[${hdrRow};${w}H${BOX_FG}│${RESET4}${PANEL_BG_SEQ}`;
|
|
607764
607790
|
const scrollPct = this._contentScrollOffset > 0 ? `${Math.round(this._contentScrollOffset / this._contentMaxLines * 100)}%` : "live";
|
|
607765
607791
|
if (this._headerExpanded) {
|
|
607766
|
-
const
|
|
607792
|
+
const sepRow1 = hdrRow + 1;
|
|
607793
|
+
buf += `\x1B[${sepRow1};1H${BOX_FG}├${"─".repeat(w - 2)}${BOX_FG}┤${RESET4}${PANEL_BG_SEQ}`;
|
|
607794
|
+
const subRow = hdrRow + 2;
|
|
607767
607795
|
buf += `\x1B[${subRow};1H${PANEL_BG_SEQ}\x1B[2K`;
|
|
607768
607796
|
buf += `${BOX_FG}│${RESET4}${PANEL_BG_SEQ}`;
|
|
607769
607797
|
buf += `\x1B[38;5;${TEXT_DIM}m${PANEL_BG_SEQ}`;
|
|
607770
607798
|
const subAgents = this._agentViews.size > 1 ? Array.from(this._agentViews.values()).filter((v) => v.id !== "main").map(
|
|
607771
607799
|
(v) => `${v.status === "running" ? "●" : v.status === "completed" ? "✓" : "○"} ${v.label}`
|
|
607772
607800
|
).join(" ") : "no sub-agents";
|
|
607773
|
-
buf += subAgents.substring(0, w - 4)
|
|
607801
|
+
buf += ` ${subAgents.substring(0, w - 4)}`;
|
|
607774
607802
|
buf += `\x1B[${subRow};${w}H${BOX_FG}│${RESET4}${PANEL_BG_SEQ}`;
|
|
607775
607803
|
const sepRow = subRow + 1;
|
|
607776
607804
|
buf += `\x1B[${sepRow};1H${PANEL_BG_SEQ}\x1B[2K`;
|
|
@@ -608796,7 +608824,7 @@ var init_status_bar = __esm({
|
|
|
608796
608824
|
const wasExpanded = this._headerExpanded;
|
|
608797
608825
|
this._headerExpanded = !this._headerExpanded;
|
|
608798
608826
|
this.refreshHeaderAndFooter();
|
|
608799
|
-
this.scrollRegionTop += this._headerExpanded ?
|
|
608827
|
+
this.scrollRegionTop += this._headerExpanded ? 3 : -3;
|
|
608800
608828
|
if (this.active) {
|
|
608801
608829
|
this.applyScrollRegion();
|
|
608802
608830
|
this.renderFooterAndPositionInput();
|
|
@@ -609863,8 +609891,8 @@ ${CONTENT_BG_SEQ}`);
|
|
|
609863
609891
|
if (n2 < 1e6) return `${Math.round(n2 / 1e3)}K`;
|
|
609864
609892
|
return `${(n2 / 1e6).toFixed(1)}M`;
|
|
609865
609893
|
}
|
|
609866
|
-
/** Map digit 0-9 to ornamental digits
|
|
609867
|
-
static DIGIT_EMOJI =
|
|
609894
|
+
/** Map digit 0-9 to ornamental digits 🯰🯱🯲🯳🯴🯵🯶🯷🯸🯹 (or plain ASCII when font lacks them) */
|
|
609895
|
+
static DIGIT_EMOJI = digitBarSupported() ? [
|
|
609868
609896
|
"🯰",
|
|
609869
609897
|
// 0
|
|
609870
609898
|
"🯱",
|
|
@@ -609885,7 +609913,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
609885
609913
|
// 8
|
|
609886
609914
|
"🯹"
|
|
609887
609915
|
// 9
|
|
609888
|
-
];
|
|
609916
|
+
] : ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
|
|
609889
609917
|
/** Convert a number to a digit-bar string: 1234 → "🯱🯲🯳🯴" */
|
|
609890
609918
|
static digitBar(n2) {
|
|
609891
609919
|
if (n2 < 0) return this.DIGIT_EMOJI[0].repeat(4);
|
|
@@ -609965,9 +609993,9 @@ ${CONTENT_BG_SEQ}`);
|
|
|
609965
609993
|
);
|
|
609966
609994
|
const ctxColor = ctxPct > 50 ? c3.green : ctxPct > 20 ? c3.yellow : c3.red;
|
|
609967
609995
|
const ctxSizeStr = _StatusBar.digitBar(ctxTotal);
|
|
609968
|
-
ctxSuffix = " " + ctxColor(`${ctxPct}%`) + c3.dim(` ${ctxSizeStr}`);
|
|
609996
|
+
ctxSuffix = " " + ctxColor(`${_StatusBar.digitBar(ctxPct)}%`) + c3.dim(` ${ctxSizeStr}`);
|
|
609969
609997
|
ctxSuffixW = 1 + `${ctxPct}%`.length + 1 + ctxSizeStr.length;
|
|
609970
|
-
ctxCompSuffix = " " + ctxColor(`${ctxPct}%`);
|
|
609998
|
+
ctxCompSuffix = " " + ctxColor(`${_StatusBar.digitBar(ctxPct)}%`);
|
|
609971
609999
|
ctxCompSuffixW = 1 + `${ctxPct}%`.length;
|
|
609972
610000
|
}
|
|
609973
610001
|
const promptSizeStr = m2.lastPromptTokens > 0 ? _StatusBar.digitBar(m2.lastPromptTokens) : "";
|
|
@@ -610027,7 +610055,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
610027
610055
|
}
|
|
610028
610056
|
}
|
|
610029
610057
|
if (this._telegramStatus.active) {
|
|
610030
|
-
const suffix = this._telegramStatus.activeSubAgents > 0 ? ` ${this._telegramStatus.activeSubAgents}` : "";
|
|
610058
|
+
const suffix = this._telegramStatus.activeSubAgents > 0 ? ` ${_StatusBar.digitBar(this._telegramStatus.activeSubAgents)}` : "";
|
|
610031
610059
|
const label = `✈ tg${suffix}`;
|
|
610032
610060
|
const compact3 = `✈${suffix}`;
|
|
610033
610061
|
sections.push({
|
|
@@ -610101,8 +610129,8 @@ ${CONTENT_BG_SEQ}`);
|
|
|
610101
610129
|
});
|
|
610102
610130
|
const modelStr = modelParams.join(",");
|
|
610103
610131
|
const visibleReqs = Array.from(this._expose.modelUsage.entries()).filter(([m3]) => !INTERNAL_CAPS.has(m3)).reduce((sum, [, n2]) => sum + n2, 0);
|
|
610104
|
-
const reqStr = visibleReqs > 0 ? ` ${visibleReqs}req` : "";
|
|
610105
|
-
const connStr = this._expose.activeConnections > 0 ? ` ${this._expose.activeConnections}conn` : "";
|
|
610132
|
+
const reqStr = visibleReqs > 0 ? ` ${_StatusBar.digitBar(visibleReqs)}req` : "";
|
|
610133
|
+
const connStr = this._expose.activeConnections > 0 ? ` ${_StatusBar.digitBar(this._expose.activeConnections)}conn` : "";
|
|
610106
610134
|
const exposeExpanded = statusEmoji + pastel2(183, (modelStr ? " " + modelStr : "") + reqStr + connStr);
|
|
610107
610135
|
const exposeCompact = statusEmoji + (modelStr ? pastel2(183, " " + modelStr) : "");
|
|
610108
610136
|
const expFullStr = (modelStr ? " " + modelStr : "") + reqStr + connStr;
|
|
@@ -610128,41 +610156,41 @@ ${CONTENT_BG_SEQ}`);
|
|
|
610128
610156
|
let hwCompW = 0;
|
|
610129
610157
|
if (rm4.cpuUtil >= 0) {
|
|
610130
610158
|
const cpuColor = rm4.cpuUtil > 80 ? c3.red : rm4.cpuUtil > 50 ? c3.yellow : c3.green;
|
|
610131
|
-
const cpuCoresInfo = rm4.cpuCores > 0 ? ` (${rm4.cpuCores}c` + (rm4.cpuModel ? " " + rm4.cpuModel.replace(/\s+/g, " ").slice(0, 30) : "") + ")" : "";
|
|
610132
|
-
hwExpStr += `CPU ${cpuColor(rm4.cpuUtil + "%")}${c3.dim(cpuCoresInfo)}`;
|
|
610133
|
-
hwCompStr += `CPU ${cpuColor(rm4.cpuUtil + "%")}`;
|
|
610159
|
+
const cpuCoresInfo = rm4.cpuCores > 0 ? ` (${_StatusBar.digitBar(rm4.cpuCores)}c` + (rm4.cpuModel ? " " + rm4.cpuModel.replace(/\s+/g, " ").slice(0, 30) : "") + ")" : "";
|
|
610160
|
+
hwExpStr += `CPU ${cpuColor(_StatusBar.digitBar(rm4.cpuUtil) + "%")}${c3.dim(cpuCoresInfo)}`;
|
|
610161
|
+
hwCompStr += `CPU ${cpuColor(_StatusBar.digitBar(rm4.cpuUtil) + "%")}`;
|
|
610134
610162
|
hwExpW += 4 + `${rm4.cpuUtil}%`.length + cpuCoresInfo.length;
|
|
610135
610163
|
hwCompW += 4 + `${rm4.cpuUtil}%`.length;
|
|
610136
610164
|
}
|
|
610137
610165
|
if (rm4.memUtil >= 0) {
|
|
610138
610166
|
const memColor = rm4.memUtil > 80 ? c3.red : rm4.memUtil > 50 ? c3.yellow : c3.green;
|
|
610139
610167
|
const memDetail = rm4.memTotalGB > 0 ? ` (${rm4.memUsedGB}/${rm4.memTotalGB}GB)` : "";
|
|
610140
|
-
hwExpStr += ` RAM ${memColor(rm4.memUtil + "%")}${c3.dim(memDetail)}`;
|
|
610141
|
-
hwCompStr += ` RAM ${memColor(rm4.memUtil + "%")}`;
|
|
610168
|
+
hwExpStr += ` RAM ${memColor(_StatusBar.digitBar(rm4.memUtil) + "%")}${c3.dim(memDetail)}`;
|
|
610169
|
+
hwCompStr += ` RAM ${memColor(_StatusBar.digitBar(rm4.memUtil) + "%")}`;
|
|
610142
610170
|
hwExpW += 5 + `${rm4.memUtil}%`.length + memDetail.length;
|
|
610143
610171
|
hwCompW += 5 + `${rm4.memUtil}%`.length;
|
|
610144
610172
|
}
|
|
610145
610173
|
if (rm4.diskUtil >= 0) {
|
|
610146
610174
|
const diskColor = rm4.diskUtil > 90 ? c3.red : rm4.diskUtil > 75 ? c3.yellow : c3.green;
|
|
610147
610175
|
const diskDetail = rm4.diskTotalGB > 0 ? ` (${rm4.diskFreeGB.toFixed(rm4.diskFreeGB < 10 ? 1 : 0)}GB free)` : "";
|
|
610148
|
-
hwExpStr += ` DISK ${diskColor(rm4.diskUtil + "%")}${c3.dim(diskDetail)}`;
|
|
610149
|
-
hwCompStr += ` DISK ${diskColor(rm4.diskUtil + "%")}`;
|
|
610176
|
+
hwExpStr += ` DISK ${diskColor(_StatusBar.digitBar(rm4.diskUtil) + "%")}${c3.dim(diskDetail)}`;
|
|
610177
|
+
hwCompStr += ` DISK ${diskColor(_StatusBar.digitBar(rm4.diskUtil) + "%")}`;
|
|
610150
610178
|
hwExpW += 6 + `${rm4.diskUtil}%`.length + diskDetail.length;
|
|
610151
610179
|
hwCompW += 6 + `${rm4.diskUtil}%`.length;
|
|
610152
610180
|
}
|
|
610153
610181
|
if (rm4.gpuUtil >= 0) {
|
|
610154
610182
|
const gpuColor = rm4.gpuUtil > 80 ? c3.red : rm4.gpuUtil > 50 ? c3.yellow : c3.green;
|
|
610155
610183
|
const gpuNameShort = rm4.gpuName ? ` (${rm4.gpuName.slice(0, 20)})` : "";
|
|
610156
|
-
hwExpStr += ` GPU ${gpuColor(rm4.gpuUtil + "%")}${c3.dim(gpuNameShort)}`;
|
|
610157
|
-
hwCompStr += ` GPU ${gpuColor(rm4.gpuUtil + "%")}`;
|
|
610184
|
+
hwExpStr += ` GPU ${gpuColor(_StatusBar.digitBar(rm4.gpuUtil) + "%")}${c3.dim(gpuNameShort)}`;
|
|
610185
|
+
hwCompStr += ` GPU ${gpuColor(_StatusBar.digitBar(rm4.gpuUtil) + "%")}`;
|
|
610158
610186
|
hwExpW += 5 + `${rm4.gpuUtil}%`.length + gpuNameShort.length;
|
|
610159
610187
|
hwCompW += 5 + `${rm4.gpuUtil}%`.length;
|
|
610160
610188
|
}
|
|
610161
610189
|
if (rm4.vramUtil >= 0) {
|
|
610162
610190
|
const vramColor = rm4.vramUtil > 80 ? c3.red : rm4.vramUtil > 50 ? c3.yellow : c3.green;
|
|
610163
610191
|
const vramDetail = rm4.vramTotalMB > 0 ? ` (${rm4.vramUsedMB}/${rm4.vramTotalMB}MB)` : "";
|
|
610164
|
-
hwExpStr += ` VRAM ${vramColor(rm4.vramUtil + "%")}${c3.dim(vramDetail)}`;
|
|
610165
|
-
hwCompStr += ` VRAM ${vramColor(rm4.vramUtil + "%")}`;
|
|
610192
|
+
hwExpStr += ` VRAM ${vramColor(_StatusBar.digitBar(rm4.vramUtil) + "%")}${c3.dim(vramDetail)}`;
|
|
610193
|
+
hwCompStr += ` VRAM ${vramColor(_StatusBar.digitBar(rm4.vramUtil) + "%")}`;
|
|
610166
610194
|
hwExpW += 6 + `${rm4.vramUtil}%`.length + vramDetail.length;
|
|
610167
610195
|
hwCompW += 6 + `${rm4.vramUtil}%`.length;
|
|
610168
610196
|
}
|
|
@@ -610171,7 +610199,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
610171
610199
|
const ready = pool3.readyGpuInstances;
|
|
610172
610200
|
const target = pool3.targetGpuInstances;
|
|
610173
610201
|
const poolColor = pool3.mode === "constrained" ? c3.yellow : target > 0 && ready < target ? c3.yellow : c3.green;
|
|
610174
|
-
const poolDetail = pool3.mode === "constrained" ? "queue" : `${ready}/${target}`;
|
|
610202
|
+
const poolDetail = pool3.mode === "constrained" ? "queue" : `${_StatusBar.digitBar(ready)}/${_StatusBar.digitBar(target)}`;
|
|
610175
610203
|
const poolOwned = pool3.instances.filter((i2) => i2.poolOwned);
|
|
610176
610204
|
const pidSummary = poolOwned.length === 0 ? "" : ` PID[${poolOwned.map((i2) => `${i2.pid}@${i2.gpuIndex ?? "?"}`).slice(0, 3).join(",")}]`;
|
|
610177
610205
|
const oldestAgeMs = poolOwned.reduce(
|
|
@@ -610180,7 +610208,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
610180
610208
|
);
|
|
610181
610209
|
const ageSummary = oldestAgeMs > 0 ? ` age=${formatPoolAge(oldestAgeMs)}` : "";
|
|
610182
610210
|
const poolText = ` OLLAMA ${poolColor(`${pool3.mode}:${poolDetail}`)}${c3.dim(pidSummary)}${c3.dim(ageSummary)}`;
|
|
610183
|
-
const compactText3 = ` OLLAMA ${poolColor(pool3.mode === "constrained" ? "queue" : `${ready}/${target}`)}`;
|
|
610211
|
+
const compactText3 = ` OLLAMA ${poolColor(pool3.mode === "constrained" ? "queue" : `${_StatusBar.digitBar(ready)}/${_StatusBar.digitBar(target)}`)}`;
|
|
610184
610212
|
hwExpStr += poolText;
|
|
610185
610213
|
hwCompStr += compactText3;
|
|
610186
610214
|
hwExpW += 8 + `${pool3.mode}:${poolDetail}`.length + pidSummary.length + ageSummary.length;
|
|
@@ -610213,7 +610241,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
610213
610241
|
}
|
|
610214
610242
|
if (this._recording) {
|
|
610215
610243
|
const dot = this._recBlink ? pastel2(210, "●") : " ";
|
|
610216
|
-
const countdown = this._countdown > 0 ? c3.dim(` ${this._countdown}s`) : "";
|
|
610244
|
+
const countdown = this._countdown > 0 ? c3.dim(` ${_StatusBar.digitBar(this._countdown)}s`) : "";
|
|
610217
610245
|
const recStr = dot + pastel2(210, " REC") + countdown;
|
|
610218
610246
|
const recW = 1 + 4 + (this._countdown > 0 ? 1 + `${this._countdown}s`.length : 0);
|
|
610219
610247
|
sections.push({
|
|
@@ -611830,7 +611858,7 @@ __export(personaplex_exports, {
|
|
|
611830
611858
|
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";
|
|
611831
611859
|
import { join as join126, dirname as dirname40 } from "node:path";
|
|
611832
611860
|
import { homedir as homedir40 } from "node:os";
|
|
611833
|
-
import { execSync as
|
|
611861
|
+
import { execSync as execSync53, spawn as spawn28 } from "node:child_process";
|
|
611834
611862
|
import { fileURLToPath as fileURLToPath15 } from "node:url";
|
|
611835
611863
|
function personaplexPythonEnv(extra = {}) {
|
|
611836
611864
|
const env2 = { ...process.env, ...extra };
|
|
@@ -611868,7 +611896,7 @@ function detectJetson() {
|
|
|
611868
611896
|
try {
|
|
611869
611897
|
const model = readFileSync92("/proc/device-tree/model", "utf8").replace(/\0/g, "").trim();
|
|
611870
611898
|
if (/jetson|orin|tegra/i.test(model)) {
|
|
611871
|
-
const memInfo =
|
|
611899
|
+
const memInfo = execSync53("grep MemTotal /proc/meminfo", { encoding: "utf8", timeout: 3e3, stdio: "pipe" });
|
|
611872
611900
|
const memKB = parseInt(memInfo.match(/(\d+)/)?.[1] ?? "0", 10);
|
|
611873
611901
|
return { isJetson: true, model, totalMemGB: memKB / 1024 / 1024 };
|
|
611874
611902
|
}
|
|
@@ -611902,7 +611930,7 @@ function detectPersonaPlexCapability() {
|
|
|
611902
611930
|
};
|
|
611903
611931
|
}
|
|
611904
611932
|
try {
|
|
611905
|
-
const nvsmi =
|
|
611933
|
+
const nvsmi = execSync53("nvidia-smi --query-gpu=name,memory.total --format=csv,noheader,nounits", {
|
|
611906
611934
|
encoding: "utf8",
|
|
611907
611935
|
timeout: 5e3,
|
|
611908
611936
|
stdio: "pipe"
|
|
@@ -611914,7 +611942,7 @@ function detectPersonaPlexCapability() {
|
|
|
611914
611942
|
return { ...fail3(`GPU has ${vramGB.toFixed(1)}GB VRAM (need ≥8GB)`), gpuName: gpuName ?? "", vramGB };
|
|
611915
611943
|
}
|
|
611916
611944
|
try {
|
|
611917
|
-
|
|
611945
|
+
execSync53('python3 -c "import torch; assert torch.cuda.is_available()"', {
|
|
611918
611946
|
timeout: 1e4,
|
|
611919
611947
|
stdio: "pipe",
|
|
611920
611948
|
env: personaplexPythonEnv()
|
|
@@ -611988,7 +612016,7 @@ async function installPersonaPlex(onInfo, weightTier) {
|
|
|
611988
612016
|
mkdirSync66(PERSONAPLEX_DIR, { recursive: true });
|
|
611989
612017
|
let arch3 = "";
|
|
611990
612018
|
try {
|
|
611991
|
-
arch3 =
|
|
612019
|
+
arch3 = execSync53("uname -m", { encoding: "utf8", timeout: 3e3, stdio: "pipe" }).trim();
|
|
611992
612020
|
} catch {
|
|
611993
612021
|
}
|
|
611994
612022
|
const isAarch64 = arch3 === "aarch64" || arch3 === "arm64";
|
|
@@ -612009,16 +612037,16 @@ async function installPersonaPlex(onInfo, weightTier) {
|
|
|
612009
612037
|
log22("Checking system dependencies (libopus)...");
|
|
612010
612038
|
try {
|
|
612011
612039
|
if (process.platform === "linux") {
|
|
612012
|
-
|
|
612040
|
+
execSync53("dpkg -l libopus-dev 2>/dev/null || sudo apt-get install -y libopus-dev", { timeout: 3e4, stdio: "pipe" });
|
|
612013
612041
|
} else if (process.platform === "darwin") {
|
|
612014
|
-
|
|
612042
|
+
execSync53("brew list opus 2>/dev/null || brew install opus", { timeout: 6e4, stdio: "pipe" });
|
|
612015
612043
|
}
|
|
612016
612044
|
} catch {
|
|
612017
612045
|
}
|
|
612018
612046
|
if (isAarch64) {
|
|
612019
612047
|
log22("ARM64: Checking Rust toolchain for sphn build...");
|
|
612020
612048
|
try {
|
|
612021
|
-
|
|
612049
|
+
execSync53("rustc --version", { timeout: 5e3, stdio: "pipe" });
|
|
612022
612050
|
} catch {
|
|
612023
612051
|
log22("ARM64: Installing Rust toolchain (needed for sphn audio codec)...");
|
|
612024
612052
|
try {
|
|
@@ -612091,7 +612119,7 @@ async function installPersonaPlex(onInfo, weightTier) {
|
|
|
612091
612119
|
}
|
|
612092
612120
|
const serverPy = join126(venvDir, "lib", `python3.${process.versions.node ? "12" : "10"}`, "site-packages", "moshi", "server.py");
|
|
612093
612121
|
try {
|
|
612094
|
-
const sitePackages =
|
|
612122
|
+
const sitePackages = execSync53(`"${python}" -c "import moshi, os; print(os.path.dirname(moshi.__file__))"`, {
|
|
612095
612123
|
encoding: "utf8",
|
|
612096
612124
|
timeout: 5e3,
|
|
612097
612125
|
stdio: "pipe",
|
|
@@ -612109,7 +612137,7 @@ async function installPersonaPlex(onInfo, weightTier) {
|
|
|
612109
612137
|
} catch {
|
|
612110
612138
|
}
|
|
612111
612139
|
try {
|
|
612112
|
-
const sitePackages =
|
|
612140
|
+
const sitePackages = execSync53(`"${python}" -c "import moshi, os; print(os.path.dirname(moshi.__file__))"`, {
|
|
612113
612141
|
encoding: "utf8",
|
|
612114
612142
|
timeout: 5e3,
|
|
612115
612143
|
stdio: "pipe",
|
|
@@ -612214,7 +612242,7 @@ $2if filename.endswith(".safetensors"):`
|
|
|
612214
612242
|
} catch {
|
|
612215
612243
|
}
|
|
612216
612244
|
try {
|
|
612217
|
-
const sitePackages2 =
|
|
612245
|
+
const sitePackages2 = execSync53(`"${python}" -c "import moshi, os; print(os.path.dirname(moshi.__file__))"`, {
|
|
612218
612246
|
encoding: "utf8",
|
|
612219
612247
|
timeout: 5e3,
|
|
612220
612248
|
stdio: "pipe",
|
|
@@ -612350,14 +612378,14 @@ async function startPersonaPlexDaemon(onInfo) {
|
|
|
612350
612378
|
if (tier === "nf4-distilled") {
|
|
612351
612379
|
log22(`Weight tier: ${tier} — distilled NF4 (90% token match, ${repoInfo.sizeGB}GB)...`);
|
|
612352
612380
|
try {
|
|
612353
|
-
const weightPath =
|
|
612381
|
+
const weightPath = execSync53(
|
|
612354
612382
|
`"${venvPython2}" -c "from huggingface_hub import hf_hub_download; print(hf_hub_download('${repoInfo.repo}', '${repoInfo.file}', token=False))"`,
|
|
612355
612383
|
{ encoding: "utf8", timeout: 6e4, stdio: "pipe", env: personaplexPythonEnv() }
|
|
612356
612384
|
).trim();
|
|
612357
612385
|
if (existsSync111(weightPath)) {
|
|
612358
612386
|
if (!existsSync111(cachedBf16)) {
|
|
612359
612387
|
log22("Converting .pt checkpoint to safetensors (one-time)...");
|
|
612360
|
-
|
|
612388
|
+
execSync53(
|
|
612361
612389
|
`"${venvPython2}" -c "
|
|
612362
612390
|
import torch; from safetensors.torch import save_file
|
|
612363
612391
|
state = torch.load('${weightPath}', map_location='cpu', weights_only=True)
|
|
@@ -612389,13 +612417,13 @@ print('Converted')
|
|
|
612389
612417
|
}
|
|
612390
612418
|
}
|
|
612391
612419
|
try {
|
|
612392
|
-
const weightPath =
|
|
612420
|
+
const weightPath = execSync53(
|
|
612393
612421
|
`"${venvPython2}" -c "from huggingface_hub import hf_hub_download; print(hf_hub_download('${repoInfo.repo}', '${repoInfo.file}'${repoInfo.needsToken ? "" : ", token=False"}))"`,
|
|
612394
612422
|
{ encoding: "utf8", timeout: 3e4, stdio: "pipe", env: personaplexPythonEnv() }
|
|
612395
612423
|
).trim();
|
|
612396
612424
|
if (existsSync111(dequantScript) && existsSync111(weightPath)) {
|
|
612397
612425
|
try {
|
|
612398
|
-
|
|
612426
|
+
execSync53(
|
|
612399
612427
|
`"${venvPython2}" "${dequantScript}" --input "${weightPath}" --output "${cachedBf16}"`,
|
|
612400
612428
|
{ timeout: 3e5, stdio: "pipe", env: personaplexPythonEnv() }
|
|
612401
612429
|
);
|
|
@@ -612408,7 +612436,7 @@ print('Converted')
|
|
|
612408
612436
|
}
|
|
612409
612437
|
}
|
|
612410
612438
|
try {
|
|
612411
|
-
const mimiPath =
|
|
612439
|
+
const mimiPath = execSync53(
|
|
612412
612440
|
`"${venvPython2}" -c "from huggingface_hub import hf_hub_download; print(hf_hub_download('${repoInfo.repo}', 'tokenizer-e351c8d8-checkpoint125.safetensors', token=False))"`,
|
|
612413
612441
|
{ encoding: "utf8", timeout: 3e4, stdio: "pipe", env: personaplexPythonEnv() }
|
|
612414
612442
|
).trim();
|
|
@@ -612416,7 +612444,7 @@ print('Converted')
|
|
|
612416
612444
|
} catch {
|
|
612417
612445
|
}
|
|
612418
612446
|
try {
|
|
612419
|
-
const tokPath =
|
|
612447
|
+
const tokPath = execSync53(
|
|
612420
612448
|
`"${venvPython2}" -c "from huggingface_hub import hf_hub_download; print(hf_hub_download('${repoInfo.repo}', 'tokenizer_spm_32k_3.model', token=False))"`,
|
|
612421
612449
|
{ encoding: "utf8", timeout: 3e4, stdio: "pipe", env: personaplexPythonEnv() }
|
|
612422
612450
|
).trim();
|
|
@@ -612440,7 +612468,7 @@ print('Converted')
|
|
|
612440
612468
|
}
|
|
612441
612469
|
if (!ollamaModel) ollamaModel = "qwen3.5:4b";
|
|
612442
612470
|
try {
|
|
612443
|
-
const ollamaCheck =
|
|
612471
|
+
const ollamaCheck = execSync53("curl -s http://localhost:11434/api/tags", {
|
|
612444
612472
|
timeout: 3e3,
|
|
612445
612473
|
stdio: "pipe",
|
|
612446
612474
|
encoding: "utf8"
|
|
@@ -612514,7 +612542,7 @@ print('Converted')
|
|
|
612514
612542
|
return null;
|
|
612515
612543
|
}
|
|
612516
612544
|
try {
|
|
612517
|
-
|
|
612545
|
+
execSync53(`curl -sk -o /dev/null -w "%{http_code}" https://127.0.0.1:${PORT}/`, {
|
|
612518
612546
|
timeout: 3e3,
|
|
612519
612547
|
stdio: "pipe",
|
|
612520
612548
|
encoding: "utf8"
|
|
@@ -612537,7 +612565,7 @@ function stopPersonaPlex() {
|
|
|
612537
612565
|
if (isNaN(pid) || pid <= 0) return;
|
|
612538
612566
|
try {
|
|
612539
612567
|
if (process.platform === "win32") {
|
|
612540
|
-
|
|
612568
|
+
execSync53(`taskkill /F /PID ${pid}`, { timeout: 5e3, stdio: "ignore" });
|
|
612541
612569
|
} else {
|
|
612542
612570
|
process.kill(pid, "SIGTERM");
|
|
612543
612571
|
}
|
|
@@ -612848,7 +612876,7 @@ __export(setup_exports, {
|
|
|
612848
612876
|
updateOllama: () => updateOllama
|
|
612849
612877
|
});
|
|
612850
612878
|
import * as readline from "node:readline";
|
|
612851
|
-
import { execSync as
|
|
612879
|
+
import { execSync as execSync54, spawn as spawn29, exec as exec5 } from "node:child_process";
|
|
612852
612880
|
import { promisify as promisify6 } from "node:util";
|
|
612853
612881
|
import { existsSync as existsSync112, writeFileSync as writeFileSync58, readFileSync as readFileSync93, appendFileSync as appendFileSync10, mkdirSync as mkdirSync67 } from "node:fs";
|
|
612854
612882
|
import { join as join127 } from "node:path";
|
|
@@ -612971,7 +612999,7 @@ function detectSystemSpecs() {
|
|
|
612971
612999
|
let availableVramGB = 0;
|
|
612972
613000
|
let gpuName = "";
|
|
612973
613001
|
try {
|
|
612974
|
-
const memInfo =
|
|
613002
|
+
const memInfo = execSync54("free -b 2>/dev/null || sysctl -n hw.memsize 2>/dev/null", {
|
|
612975
613003
|
encoding: "utf8",
|
|
612976
613004
|
timeout: 5e3
|
|
612977
613005
|
});
|
|
@@ -612991,7 +613019,7 @@ function detectSystemSpecs() {
|
|
|
612991
613019
|
} catch {
|
|
612992
613020
|
}
|
|
612993
613021
|
try {
|
|
612994
|
-
const nvidiaSmi =
|
|
613022
|
+
const nvidiaSmi = execSync54(
|
|
612995
613023
|
"nvidia-smi --query-gpu=memory.total,memory.free,name --format=csv,noheader,nounits 2>/dev/null",
|
|
612996
613024
|
{ encoding: "utf8", timeout: 5e3 }
|
|
612997
613025
|
);
|
|
@@ -613003,7 +613031,7 @@ function detectSystemSpecs() {
|
|
|
613003
613031
|
}
|
|
613004
613032
|
if (gpuVramGB === 0) {
|
|
613005
613033
|
try {
|
|
613006
|
-
const rocmSmi =
|
|
613034
|
+
const rocmSmi = execSync54(
|
|
613007
613035
|
"rocm-smi --showmeminfo vram --csv 2>/dev/null",
|
|
613008
613036
|
{ encoding: "utf8", timeout: 5e3 }
|
|
613009
613037
|
);
|
|
@@ -613259,7 +613287,7 @@ function ensureCurl() {
|
|
|
613259
613287
|
for (const s2 of strategies) {
|
|
613260
613288
|
if (hasCmd(s2.check)) {
|
|
613261
613289
|
try {
|
|
613262
|
-
|
|
613290
|
+
execSync54(s2.install, { stdio: "inherit", timeout: 12e4 });
|
|
613263
613291
|
if (hasCmd("curl")) {
|
|
613264
613292
|
process.stdout.write(` ${c3.green("✔")} curl installed via ${s2.label}.
|
|
613265
613293
|
`);
|
|
@@ -613273,7 +613301,7 @@ function ensureCurl() {
|
|
|
613273
613301
|
}
|
|
613274
613302
|
if (plat === "darwin") {
|
|
613275
613303
|
try {
|
|
613276
|
-
|
|
613304
|
+
execSync54("xcode-select --install", { stdio: "inherit", timeout: 3e5 });
|
|
613277
613305
|
if (hasCmd("curl")) return true;
|
|
613278
613306
|
} catch {
|
|
613279
613307
|
}
|
|
@@ -613287,7 +613315,7 @@ function ensureZstd() {
|
|
|
613287
613315
|
if (process.platform === "darwin") {
|
|
613288
613316
|
if (!hasCmd("brew")) return false;
|
|
613289
613317
|
try {
|
|
613290
|
-
|
|
613318
|
+
execSync54("brew install zstd", { stdio: "inherit", timeout: 12e4 });
|
|
613291
613319
|
return hasCmd("zstd");
|
|
613292
613320
|
} catch {
|
|
613293
613321
|
return false;
|
|
@@ -613329,7 +613357,7 @@ function ensureZstd() {
|
|
|
613329
613357
|
candidates.push({ cmd: installCmd, env: process.env });
|
|
613330
613358
|
for (const cand of candidates) {
|
|
613331
613359
|
try {
|
|
613332
|
-
|
|
613360
|
+
execSync54(cand.cmd, {
|
|
613333
613361
|
stdio: cand.stdio ?? ["ignore", "inherit", "pipe"],
|
|
613334
613362
|
env: cand.env,
|
|
613335
613363
|
timeout: 18e4
|
|
@@ -613366,7 +613394,7 @@ function detectAskpassHelper() {
|
|
|
613366
613394
|
for (const name10 of ["ssh-askpass", "ksshaskpass", "x11-ssh-askpass"]) {
|
|
613367
613395
|
if (hasCmd(name10)) {
|
|
613368
613396
|
try {
|
|
613369
|
-
const p2 =
|
|
613397
|
+
const p2 = execSync54(`command -v ${name10}`, { encoding: "utf8" }).trim();
|
|
613370
613398
|
if (p2) return p2;
|
|
613371
613399
|
} catch {
|
|
613372
613400
|
}
|
|
@@ -613409,7 +613437,7 @@ osascript -e 'Tell application "System Events" to display dialog "Omnius needs a
|
|
|
613409
613437
|
}
|
|
613410
613438
|
try {
|
|
613411
613439
|
writeFileSync58(helperPath, body, { mode: 448 });
|
|
613412
|
-
|
|
613440
|
+
execSync54(`chmod 700 "${helperPath}"`, { stdio: "ignore" });
|
|
613413
613441
|
return helperPath;
|
|
613414
613442
|
} catch {
|
|
613415
613443
|
return null;
|
|
@@ -613478,7 +613506,7 @@ function runElevatedCommand(command, opts = {}) {
|
|
|
613478
613506
|
let lastErr = null;
|
|
613479
613507
|
for (const cand of candidates) {
|
|
613480
613508
|
try {
|
|
613481
|
-
|
|
613509
|
+
execSync54(cand.cmd, {
|
|
613482
613510
|
stdio: cand.stdio ?? ["ignore", "pipe", "pipe"],
|
|
613483
613511
|
env: cand.env,
|
|
613484
613512
|
timeout: timeout2
|
|
@@ -613515,7 +613543,7 @@ function runOllamaInstallScript() {
|
|
|
613515
613543
|
`);
|
|
613516
613544
|
}
|
|
613517
613545
|
const runOnce = () => {
|
|
613518
|
-
|
|
613546
|
+
execSync54(elevated.cmd, {
|
|
613519
613547
|
stdio: elevated.mode === "terminal" ? "inherit" : ["ignore", "inherit", "pipe"],
|
|
613520
613548
|
env: elevated.env,
|
|
613521
613549
|
timeout: 6e5
|
|
@@ -613594,7 +613622,7 @@ async function installOllamaMac(_rl) {
|
|
|
613594
613622
|
|
|
613595
613623
|
`);
|
|
613596
613624
|
try {
|
|
613597
|
-
|
|
613625
|
+
execSync54(
|
|
613598
613626
|
'/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"',
|
|
613599
613627
|
{ stdio: "inherit", timeout: 6e5 }
|
|
613600
613628
|
);
|
|
@@ -613630,7 +613658,7 @@ async function installOllamaMac(_rl) {
|
|
|
613630
613658
|
|
|
613631
613659
|
`);
|
|
613632
613660
|
try {
|
|
613633
|
-
|
|
613661
|
+
execSync54("brew install ollama", {
|
|
613634
613662
|
stdio: "inherit",
|
|
613635
613663
|
timeout: 3e5
|
|
613636
613664
|
});
|
|
@@ -613657,7 +613685,7 @@ function installOllamaWindows() {
|
|
|
613657
613685
|
|
|
613658
613686
|
`);
|
|
613659
613687
|
try {
|
|
613660
|
-
|
|
613688
|
+
execSync54('powershell -Command "irm https://ollama.com/install.ps1 | iex"', {
|
|
613661
613689
|
stdio: "inherit",
|
|
613662
613690
|
timeout: 3e5
|
|
613663
613691
|
});
|
|
@@ -613737,7 +613765,7 @@ async function ensureOllamaRunning(backendUrl2, rl) {
|
|
|
613737
613765
|
}
|
|
613738
613766
|
function getOllamaVersion() {
|
|
613739
613767
|
try {
|
|
613740
|
-
const out =
|
|
613768
|
+
const out = execSync54("ollama --version", { encoding: "utf8", timeout: 5e3 });
|
|
613741
613769
|
const match = out.match(/(\d+\.\d+\.\d+)/);
|
|
613742
613770
|
return match ? match[1] : null;
|
|
613743
613771
|
} catch {
|
|
@@ -613794,7 +613822,7 @@ function updateOllama() {
|
|
|
613794
613822
|
}
|
|
613795
613823
|
function pullModelWithAutoUpdate(tag) {
|
|
613796
613824
|
try {
|
|
613797
|
-
|
|
613825
|
+
execSync54(`ollama pull ${tag}`, {
|
|
613798
613826
|
stdio: "inherit",
|
|
613799
613827
|
timeout: 36e5
|
|
613800
613828
|
// 1 hour max
|
|
@@ -613821,7 +613849,7 @@ function pullModelWithAutoUpdate(tag) {
|
|
|
613821
613849
|
process.stdout.write(` ${c3.cyan("●")} Retrying pull of ${c3.bold(tag)}...
|
|
613822
613850
|
|
|
613823
613851
|
`);
|
|
613824
|
-
|
|
613852
|
+
execSync54(`ollama pull ${tag}`, {
|
|
613825
613853
|
stdio: "inherit",
|
|
613826
613854
|
timeout: 36e5
|
|
613827
613855
|
});
|
|
@@ -613910,7 +613938,7 @@ function ensurePython3() {
|
|
|
613910
613938
|
if (plat === "darwin") {
|
|
613911
613939
|
if (hasCmd("brew")) {
|
|
613912
613940
|
try {
|
|
613913
|
-
|
|
613941
|
+
execSync54("brew install python3", { stdio: "inherit", timeout: 3e5 });
|
|
613914
613942
|
if (hasCmd("python3")) {
|
|
613915
613943
|
process.stdout.write(` ${c3.green("✔")} Python3 installed via Homebrew.
|
|
613916
613944
|
`);
|
|
@@ -613923,7 +613951,7 @@ function ensurePython3() {
|
|
|
613923
613951
|
for (const s2 of strategies) {
|
|
613924
613952
|
if (hasCmd(s2.check)) {
|
|
613925
613953
|
try {
|
|
613926
|
-
|
|
613954
|
+
execSync54(s2.install, { stdio: "inherit", timeout: 12e4 });
|
|
613927
613955
|
if (hasCmd("python3") || hasCmd("python")) {
|
|
613928
613956
|
process.stdout.write(` ${c3.green("✔")} Python3 installed via ${s2.label}.
|
|
613929
613957
|
`);
|
|
@@ -613939,11 +613967,11 @@ function ensurePython3() {
|
|
|
613939
613967
|
}
|
|
613940
613968
|
function checkPythonVenv() {
|
|
613941
613969
|
try {
|
|
613942
|
-
|
|
613970
|
+
execSync54("python3 -m venv --help", { stdio: "pipe", timeout: 5e3 });
|
|
613943
613971
|
return true;
|
|
613944
613972
|
} catch {
|
|
613945
613973
|
try {
|
|
613946
|
-
|
|
613974
|
+
execSync54("python -m venv --help", { stdio: "pipe", timeout: 5e3 });
|
|
613947
613975
|
return true;
|
|
613948
613976
|
} catch {
|
|
613949
613977
|
return false;
|
|
@@ -613962,7 +613990,7 @@ function ensurePythonVenv() {
|
|
|
613962
613990
|
for (const s2 of strategies) {
|
|
613963
613991
|
if (hasCmd(s2.check)) {
|
|
613964
613992
|
try {
|
|
613965
|
-
|
|
613993
|
+
execSync54(s2.install, { stdio: "inherit", timeout: 12e4 });
|
|
613966
613994
|
if (checkPythonVenv()) {
|
|
613967
613995
|
process.stdout.write(` ${c3.green("✔")} python3-venv installed via ${s2.label}.
|
|
613968
613996
|
`);
|
|
@@ -614569,7 +614597,7 @@ ${c3.cyan(OMNIUS_FIRST_RUN_BANNER)}
|
|
|
614569
614597
|
for (let i2 = 0; i2 < modelfileCandidates.length; i2++) {
|
|
614570
614598
|
writeFileSync58(modelfilePath, modelfileCandidates[i2] + "\n", "utf8");
|
|
614571
614599
|
try {
|
|
614572
|
-
|
|
614600
|
+
execSync54(`ollama create ${customName} -f ${modelfilePath}`, {
|
|
614573
614601
|
stdio: "pipe",
|
|
614574
614602
|
timeout: 12e4
|
|
614575
614603
|
});
|
|
@@ -614631,7 +614659,7 @@ function isFirstRun() {
|
|
|
614631
614659
|
function hasCmd(cmd) {
|
|
614632
614660
|
try {
|
|
614633
614661
|
const whichCmd = process.platform === "win32" ? `where ${cmd}` : `which ${cmd}`;
|
|
614634
|
-
|
|
614662
|
+
execSync54(whichCmd, { stdio: "pipe", timeout: 3e3 });
|
|
614635
614663
|
return true;
|
|
614636
614664
|
} catch {
|
|
614637
614665
|
return false;
|
|
@@ -614643,7 +614671,7 @@ function detectPkgManager() {
|
|
|
614643
614671
|
if (hasCmd("choco")) return "choco";
|
|
614644
614672
|
if (hasCmd("winget")) return "winget";
|
|
614645
614673
|
try {
|
|
614646
|
-
|
|
614674
|
+
execSync54(
|
|
614647
614675
|
`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'))"`,
|
|
614648
614676
|
{ stdio: "pipe", timeout: 12e4 }
|
|
614649
614677
|
);
|
|
@@ -614655,7 +614683,7 @@ function detectPkgManager() {
|
|
|
614655
614683
|
if (plat === "darwin") {
|
|
614656
614684
|
if (hasCmd("brew")) return "brew";
|
|
614657
614685
|
try {
|
|
614658
|
-
|
|
614686
|
+
execSync54(
|
|
614659
614687
|
'/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"',
|
|
614660
614688
|
{ stdio: "pipe", timeout: 3e5, env: { ...process.env, NONINTERACTIVE: "1" } }
|
|
614661
614689
|
);
|
|
@@ -614675,7 +614703,7 @@ function getVenvDir2() {
|
|
|
614675
614703
|
}
|
|
614676
614704
|
function hasVenvModule() {
|
|
614677
614705
|
try {
|
|
614678
|
-
|
|
614706
|
+
execSync54('python3 -c "import ensurepip, venv"', {
|
|
614679
614707
|
stdio: "pipe",
|
|
614680
614708
|
timeout: 5e3
|
|
614681
614709
|
});
|
|
@@ -614692,17 +614720,17 @@ function ensureVenv2(log22) {
|
|
|
614692
614720
|
const pythonCmd = isWin2 ? "python" : "python3";
|
|
614693
614721
|
if (existsSync112(pipPath)) {
|
|
614694
614722
|
try {
|
|
614695
|
-
|
|
614723
|
+
execSync54(`"${venvPyPath}" -m pip --version`, { stdio: "pipe", timeout: 1e4 });
|
|
614696
614724
|
return venvDir;
|
|
614697
614725
|
} catch {
|
|
614698
614726
|
log22("Python venv pip is broken — repairing...");
|
|
614699
614727
|
try {
|
|
614700
|
-
|
|
614728
|
+
execSync54(`"${venvPyPath}" -m ensurepip --upgrade`, { stdio: "pipe", timeout: 3e4 });
|
|
614701
614729
|
log22("pip repaired via ensurepip.");
|
|
614702
614730
|
return venvDir;
|
|
614703
614731
|
} catch {
|
|
614704
614732
|
try {
|
|
614705
|
-
|
|
614733
|
+
execSync54(`curl -sS https://bootstrap.pypa.io/get-pip.py | "${venvPyPath}"`, { stdio: "pipe", timeout: 6e4 });
|
|
614706
614734
|
log22("pip repaired via get-pip.py.");
|
|
614707
614735
|
return venvDir;
|
|
614708
614736
|
} catch {
|
|
@@ -614723,17 +614751,17 @@ function ensureVenv2(log22) {
|
|
|
614723
614751
|
try {
|
|
614724
614752
|
mkdirSync67(join127(homedir41(), ".omnius"), { recursive: true });
|
|
614725
614753
|
const pyCmd = hasCmd(pythonCmd) ? pythonCmd : "python3";
|
|
614726
|
-
|
|
614754
|
+
execSync54(`${pyCmd} -m venv --clear "${venvDir}"`, { stdio: "pipe", timeout: 3e4 });
|
|
614727
614755
|
try {
|
|
614728
|
-
|
|
614756
|
+
execSync54(`"${venvPyPath}" -m pip --version`, { stdio: "pipe", timeout: 1e4 });
|
|
614729
614757
|
} catch {
|
|
614730
614758
|
try {
|
|
614731
|
-
|
|
614759
|
+
execSync54(`"${venvPyPath}" -m ensurepip --upgrade`, { stdio: "pipe", timeout: 3e4 });
|
|
614732
614760
|
} catch {
|
|
614733
|
-
|
|
614761
|
+
execSync54(`curl -sS https://bootstrap.pypa.io/get-pip.py | "${venvPyPath}"`, { stdio: "pipe", timeout: 6e4 });
|
|
614734
614762
|
}
|
|
614735
614763
|
}
|
|
614736
|
-
|
|
614764
|
+
execSync54(`"${venvPyPath}" -m pip install --upgrade pip`, {
|
|
614737
614765
|
stdio: "pipe",
|
|
614738
614766
|
timeout: 6e4
|
|
614739
614767
|
});
|
|
@@ -614746,7 +614774,7 @@ function ensureVenv2(log22) {
|
|
|
614746
614774
|
}
|
|
614747
614775
|
function trySudoPasswordless(cmd, timeoutMs = 12e4) {
|
|
614748
614776
|
try {
|
|
614749
|
-
|
|
614777
|
+
execSync54(`sudo -n ${cmd}`, {
|
|
614750
614778
|
stdio: "pipe",
|
|
614751
614779
|
timeout: timeoutMs,
|
|
614752
614780
|
env: { ...process.env, DEBIAN_FRONTEND: "noninteractive" }
|
|
@@ -614759,7 +614787,7 @@ function trySudoPasswordless(cmd, timeoutMs = 12e4) {
|
|
|
614759
614787
|
function runWithSudo(cmd, password, timeoutMs = 12e4) {
|
|
614760
614788
|
try {
|
|
614761
614789
|
const escaped = cmd.replace(/'/g, "'\\''");
|
|
614762
|
-
|
|
614790
|
+
execSync54(`sudo -S bash -c '${escaped}'`, {
|
|
614763
614791
|
input: password + "\n",
|
|
614764
614792
|
stdio: ["pipe", "pipe", "pipe"],
|
|
614765
614793
|
timeout: timeoutMs,
|
|
@@ -614801,7 +614829,7 @@ async function sudoInstall(cmd, getSudoPassword, log22, cachedPasswordRef, timeo
|
|
|
614801
614829
|
try {
|
|
614802
614830
|
const isRoot = typeof process.getuid === "function" && process.getuid() === 0;
|
|
614803
614831
|
const escaped = cmd.replace(/'/g, "'\\''");
|
|
614804
|
-
|
|
614832
|
+
execSync54(isRoot ? `bash -c '${escaped}'` : `sudo bash -c '${escaped}'`, {
|
|
614805
614833
|
stdio: "inherit",
|
|
614806
614834
|
timeout: timeoutMs,
|
|
614807
614835
|
env: { ...process.env, DEBIAN_FRONTEND: "noninteractive" }
|
|
@@ -614867,7 +614895,7 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
614867
614895
|
let winNeedsElevation = false;
|
|
614868
614896
|
if (process.platform === "win32") {
|
|
614869
614897
|
try {
|
|
614870
|
-
|
|
614898
|
+
execSync54("net session", { stdio: "pipe", timeout: 3e3 });
|
|
614871
614899
|
} catch {
|
|
614872
614900
|
winNeedsElevation = true;
|
|
614873
614901
|
log22(`Installing ${labels} via ${pm2} (requires admin — UAC prompt will appear)...`);
|
|
@@ -614914,12 +614942,12 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
614914
614942
|
if (needsSudo) {
|
|
614915
614943
|
await sudoInstall(installCmd, getPassword, log22, cachedPasswordRef, 18e4);
|
|
614916
614944
|
} else if (winNeedsElevation) {
|
|
614917
|
-
|
|
614945
|
+
execSync54(
|
|
614918
614946
|
`powershell -NoProfile -Command "Start-Process -FilePath 'cmd.exe' -ArgumentList '/c ${installCmd.replace(/'/g, "''")}' -Verb RunAs -Wait"`,
|
|
614919
614947
|
{ stdio: "pipe", timeout: 18e4 }
|
|
614920
614948
|
);
|
|
614921
614949
|
} else {
|
|
614922
|
-
|
|
614950
|
+
execSync54(installCmd, { stdio: "pipe", timeout: 18e4 });
|
|
614923
614951
|
}
|
|
614924
614952
|
} catch (e2) {
|
|
614925
614953
|
const stderr = e2.stderr?.toString?.()?.trim?.() ?? "";
|
|
@@ -614932,7 +614960,7 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
614932
614960
|
if (!hasCmd(d2.binary) && pipPkg) {
|
|
614933
614961
|
try {
|
|
614934
614962
|
const pipCmd = process.platform === "win32" ? `pip install ${pipPkg}` : `pip3 install ${pipPkg}`;
|
|
614935
|
-
|
|
614963
|
+
execSync54(pipCmd, { stdio: "pipe", timeout: 12e4 });
|
|
614936
614964
|
lastError = "";
|
|
614937
614965
|
} catch (e2) {
|
|
614938
614966
|
const stderr = e2.stderr?.toString?.()?.trim?.() ?? "";
|
|
@@ -614944,7 +614972,7 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
614944
614972
|
}
|
|
614945
614973
|
if (process.platform === "win32" && !hasCmd(d2.binary)) {
|
|
614946
614974
|
try {
|
|
614947
|
-
const freshPath =
|
|
614975
|
+
const freshPath = execSync54(
|
|
614948
614976
|
`powershell -NoProfile -Command "[System.Environment]::GetEnvironmentVariable('Path','Machine') + ';' + [System.Environment]::GetEnvironmentVariable('Path','User')"`,
|
|
614949
614977
|
{ encoding: "utf8", timeout: 5e3, stdio: "pipe" }
|
|
614950
614978
|
).trim();
|
|
@@ -614990,7 +615018,7 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
614990
615018
|
const venvCmds = {
|
|
614991
615019
|
apt: () => {
|
|
614992
615020
|
try {
|
|
614993
|
-
const pyVer =
|
|
615021
|
+
const pyVer = execSync54(
|
|
614994
615022
|
`python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')"`,
|
|
614995
615023
|
{ encoding: "utf8", stdio: "pipe", timeout: 5e3 }
|
|
614996
615024
|
).trim();
|
|
@@ -615022,12 +615050,12 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
615022
615050
|
const venvPip2 = join127(venvBin, "pip");
|
|
615023
615051
|
log22("Installing moondream-station in ~/.omnius/venv...");
|
|
615024
615052
|
try {
|
|
615025
|
-
|
|
615053
|
+
execSync54(`"${venvPip2}" install moondream-station`, { stdio: "pipe", timeout: 3e5 });
|
|
615026
615054
|
if (existsSync112(venvMoondream)) {
|
|
615027
615055
|
log22("moondream-station installed successfully.");
|
|
615028
615056
|
} else {
|
|
615029
615057
|
try {
|
|
615030
|
-
const check =
|
|
615058
|
+
const check = execSync54(`"${venvPip2}" show moondream-station`, { encoding: "utf8", stdio: "pipe", timeout: 5e3 });
|
|
615031
615059
|
if (check.includes("moondream")) {
|
|
615032
615060
|
log22("moondream-station package installed.");
|
|
615033
615061
|
}
|
|
@@ -615044,7 +615072,7 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
615044
615072
|
const venvPip2 = join127(venvBin, isWin2 ? "pip.exe" : "pip");
|
|
615045
615073
|
let ocrStackInstalled = false;
|
|
615046
615074
|
try {
|
|
615047
|
-
|
|
615075
|
+
execSync54(
|
|
615048
615076
|
`"${venvPython2}" -c "import cv2, pytesseract, numpy, PIL"`,
|
|
615049
615077
|
{ stdio: "pipe", timeout: 1e4 }
|
|
615050
615078
|
);
|
|
@@ -615055,12 +615083,12 @@ async function ensureVisionDeps(onInfo, getSudoPassword) {
|
|
|
615055
615083
|
const ocrPackages = "pytesseract Pillow opencv-python-headless numpy";
|
|
615056
615084
|
log22("Installing OCR Python stack (pytesseract, OpenCV, Pillow, numpy)...");
|
|
615057
615085
|
try {
|
|
615058
|
-
|
|
615086
|
+
execSync54(
|
|
615059
615087
|
`"${venvPip2}" install ${ocrPackages}`,
|
|
615060
615088
|
{ stdio: "pipe", timeout: 3e5 }
|
|
615061
615089
|
);
|
|
615062
615090
|
try {
|
|
615063
|
-
|
|
615091
|
+
execSync54(
|
|
615064
615092
|
`"${venvPython2}" -c "import cv2, pytesseract, numpy, PIL"`,
|
|
615065
615093
|
{ stdio: "pipe", timeout: 1e4 }
|
|
615066
615094
|
);
|
|
@@ -615096,7 +615124,7 @@ function ensureCloudflaredBackground(onInfo) {
|
|
|
615096
615124
|
const archMap = { x64: "amd64", arm64: "arm64", arm: "arm" };
|
|
615097
615125
|
const cfArch = archMap[arch3] ?? "amd64";
|
|
615098
615126
|
try {
|
|
615099
|
-
|
|
615127
|
+
execSync54(
|
|
615100
615128
|
`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"`,
|
|
615101
615129
|
{ stdio: "pipe", timeout: 6e4 }
|
|
615102
615130
|
);
|
|
@@ -615112,7 +615140,7 @@ function ensureCloudflaredBackground(onInfo) {
|
|
|
615112
615140
|
try {
|
|
615113
615141
|
const terminalElevation = process.env["OMNIUS_ELEVATION_MODE"] === "terminal" && process.stdin.isTTY && process.stdout.isTTY;
|
|
615114
615142
|
const sudoMove = terminalElevation ? `sudo mv /tmp/cloudflared /usr/local/bin/cloudflared` : `sudo mv /tmp/cloudflared /usr/local/bin/cloudflared 2>/dev/null`;
|
|
615115
|
-
|
|
615143
|
+
execSync54(
|
|
615116
615144
|
`curl -fsSL "https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-${cfArch}" -o /tmp/cloudflared && chmod +x /tmp/cloudflared && ` + sudoMove,
|
|
615117
615145
|
{ stdio: terminalElevation ? "inherit" : "pipe", timeout: 6e4 }
|
|
615118
615146
|
);
|
|
@@ -615124,7 +615152,7 @@ function ensureCloudflaredBackground(onInfo) {
|
|
|
615124
615152
|
}
|
|
615125
615153
|
} else if (os9 === "darwin") {
|
|
615126
615154
|
try {
|
|
615127
|
-
|
|
615155
|
+
execSync54("brew install cloudflared", { stdio: "pipe", timeout: 12e4 });
|
|
615128
615156
|
if (hasCmd("cloudflared")) {
|
|
615129
615157
|
log22("cloudflared installed via Homebrew.");
|
|
615130
615158
|
return true;
|
|
@@ -615321,7 +615349,7 @@ function createExpandedVariantNamed(targetModel, baseModel, specs, sizeGB, kvByt
|
|
|
615321
615349
|
for (let i2 = 0; i2 < modelfileCandidates.length; i2++) {
|
|
615322
615350
|
writeFileSync58(modelfilePath, modelfileCandidates[i2] + "\n", "utf8");
|
|
615323
615351
|
try {
|
|
615324
|
-
|
|
615352
|
+
execSync54(`ollama create ${targetModel} -f ${modelfilePath}`, {
|
|
615325
615353
|
stdio: "pipe",
|
|
615326
615354
|
timeout: 12e4
|
|
615327
615355
|
});
|
|
@@ -615607,7 +615635,7 @@ async function repairAllExpandedVariants(backendUrl2) {
|
|
|
615607
615635
|
}
|
|
615608
615636
|
async function ensureNeovim() {
|
|
615609
615637
|
try {
|
|
615610
|
-
const nvimPath =
|
|
615638
|
+
const nvimPath = execSync54("which nvim 2>/dev/null || where nvim 2>nul", {
|
|
615611
615639
|
encoding: "utf8",
|
|
615612
615640
|
stdio: "pipe",
|
|
615613
615641
|
timeout: 5e3
|
|
@@ -615628,14 +615656,14 @@ async function ensureNeovim() {
|
|
|
615628
615656
|
const url = `https://github.com/neovim/neovim/releases/latest/download/${appImageName}`;
|
|
615629
615657
|
console.log(` Downloading Neovim (${appImageName})...`);
|
|
615630
615658
|
try {
|
|
615631
|
-
|
|
615632
|
-
|
|
615659
|
+
execSync54(`curl -fsSL "${url}" -o "${nvimDest}"`, { stdio: "pipe", timeout: 6e4 });
|
|
615660
|
+
execSync54(`chmod +x "${nvimDest}"`, { stdio: "pipe", timeout: 3e3 });
|
|
615633
615661
|
} catch (err) {
|
|
615634
615662
|
console.log(` Failed to download Neovim: ${err instanceof Error ? err.message : String(err)}`);
|
|
615635
615663
|
return null;
|
|
615636
615664
|
}
|
|
615637
615665
|
try {
|
|
615638
|
-
const ver =
|
|
615666
|
+
const ver = execSync54(`"${nvimDest}" --version`, { encoding: "utf8", stdio: "pipe", timeout: 5e3 }).split("\n")[0];
|
|
615639
615667
|
console.log(` Installed: ${ver}`);
|
|
615640
615668
|
} catch {
|
|
615641
615669
|
console.log(" Warning: nvim binary downloaded but may not work (missing FUSE? Try: nvim --appimage-extract)");
|
|
@@ -615650,8 +615678,8 @@ async function ensureNeovim() {
|
|
|
615650
615678
|
if (hasCmd("brew")) {
|
|
615651
615679
|
console.log(" Installing Neovim via Homebrew...");
|
|
615652
615680
|
try {
|
|
615653
|
-
|
|
615654
|
-
const nvimPath =
|
|
615681
|
+
execSync54("brew install neovim", { stdio: "inherit", timeout: 12e4 });
|
|
615682
|
+
const nvimPath = execSync54("which nvim", { encoding: "utf8", stdio: "pipe", timeout: 3e3 }).trim();
|
|
615655
615683
|
return nvimPath || null;
|
|
615656
615684
|
} catch {
|
|
615657
615685
|
console.log(" brew install neovim failed.");
|
|
@@ -615665,7 +615693,7 @@ async function ensureNeovim() {
|
|
|
615665
615693
|
if (hasCmd("choco")) {
|
|
615666
615694
|
console.log(" Installing Neovim via Chocolatey...");
|
|
615667
615695
|
try {
|
|
615668
|
-
|
|
615696
|
+
execSync54("choco install neovim -y", { stdio: "inherit", timeout: 12e4 });
|
|
615669
615697
|
return "nvim";
|
|
615670
615698
|
} catch {
|
|
615671
615699
|
console.log(" choco install neovim failed.");
|
|
@@ -615674,7 +615702,7 @@ async function ensureNeovim() {
|
|
|
615674
615702
|
if (hasCmd("winget")) {
|
|
615675
615703
|
console.log(" Installing Neovim via winget...");
|
|
615676
615704
|
try {
|
|
615677
|
-
|
|
615705
|
+
execSync54("winget install Neovim.Neovim --accept-source-agreements --accept-package-agreements", {
|
|
615678
615706
|
stdio: "inherit",
|
|
615679
615707
|
timeout: 12e4
|
|
615680
615708
|
});
|
|
@@ -619743,7 +619771,7 @@ var init_audio_waveform = __esm({
|
|
|
619743
619771
|
import { existsSync as existsSync118, unlinkSync as unlinkSync23 } from "node:fs";
|
|
619744
619772
|
import { tmpdir as tmpdir20 } from "node:os";
|
|
619745
619773
|
import { join as join131 } from "node:path";
|
|
619746
|
-
import { execSync as
|
|
619774
|
+
import { execSync as execSync55 } from "node:child_process";
|
|
619747
619775
|
function isNeovimActive() {
|
|
619748
619776
|
return _state2 !== null && !_state2.cleanedUp;
|
|
619749
619777
|
}
|
|
@@ -619760,7 +619788,7 @@ async function startNeovimMode(opts) {
|
|
|
619760
619788
|
}
|
|
619761
619789
|
let nvimPath;
|
|
619762
619790
|
try {
|
|
619763
|
-
nvimPath =
|
|
619791
|
+
nvimPath = execSync55("which nvim 2>/dev/null", { encoding: "utf8" }).trim();
|
|
619764
619792
|
if (!nvimPath) throw new Error();
|
|
619765
619793
|
} catch {
|
|
619766
619794
|
const installed = await ensureNeovim();
|
|
@@ -620442,8 +620470,8 @@ async function forceKillDaemon(port) {
|
|
|
620442
620470
|
}
|
|
620443
620471
|
}
|
|
620444
620472
|
try {
|
|
620445
|
-
const { execSync:
|
|
620446
|
-
const out =
|
|
620473
|
+
const { execSync: execSync64 } = await import("node:child_process");
|
|
620474
|
+
const out = execSync64(
|
|
620447
620475
|
`lsof -ti :${p2} 2>/dev/null || fuser ${p2}/tcp 2>/dev/null || true`,
|
|
620448
620476
|
{ encoding: "utf8", timeout: 3e3 }
|
|
620449
620477
|
).trim();
|
|
@@ -623320,7 +623348,7 @@ import {
|
|
|
623320
623348
|
import { join as join137, dirname as dirname42, resolve as resolve57 } from "node:path";
|
|
623321
623349
|
import { homedir as homedir46, tmpdir as tmpdir21, platform as platform6 } from "node:os";
|
|
623322
623350
|
import {
|
|
623323
|
-
execSync as
|
|
623351
|
+
execSync as execSync56,
|
|
623324
623352
|
spawn as nodeSpawn
|
|
623325
623353
|
} from "node:child_process";
|
|
623326
623354
|
import { createRequire as createRequire6 } from "node:module";
|
|
@@ -625667,7 +625695,7 @@ except Exception as exc:
|
|
|
625667
625695
|
}
|
|
625668
625696
|
for (const player of ["paplay", "pw-play", "aplay"]) {
|
|
625669
625697
|
try {
|
|
625670
|
-
|
|
625698
|
+
execSync56(`which ${player}`, { stdio: "pipe" });
|
|
625671
625699
|
return [player, path12];
|
|
625672
625700
|
} catch {
|
|
625673
625701
|
}
|
|
@@ -625845,7 +625873,7 @@ except Exception as exc:
|
|
|
625845
625873
|
return false;
|
|
625846
625874
|
}
|
|
625847
625875
|
try {
|
|
625848
|
-
|
|
625876
|
+
execSync56(`${JSON.stringify(venvPy)} -c "import supertonic"`, {
|
|
625849
625877
|
stdio: "pipe",
|
|
625850
625878
|
timeout: 1e4
|
|
625851
625879
|
});
|
|
@@ -625977,7 +626005,7 @@ except Exception as exc:
|
|
|
625977
626005
|
if (this.python3Path) return this.python3Path;
|
|
625978
626006
|
for (const bin of ["python3", "python"]) {
|
|
625979
626007
|
try {
|
|
625980
|
-
const path12 =
|
|
626008
|
+
const path12 = execSync56(`which ${bin}`, { stdio: "pipe", timeout: 5e3 }).toString().trim();
|
|
625981
626009
|
if (path12) {
|
|
625982
626010
|
this.python3Path = path12;
|
|
625983
626011
|
return path12;
|
|
@@ -626041,7 +626069,7 @@ except Exception as exc:
|
|
|
626041
626069
|
return false;
|
|
626042
626070
|
}
|
|
626043
626071
|
try {
|
|
626044
|
-
|
|
626072
|
+
execSync56(`${py} -c "import mlx_audio"`, {
|
|
626045
626073
|
stdio: "pipe",
|
|
626046
626074
|
timeout: 1e4
|
|
626047
626075
|
});
|
|
@@ -626110,14 +626138,14 @@ Error: ${err2 instanceof Error ? err2.message : String(err2)}`
|
|
|
626110
626138
|
`tts_gen.main(["--model", ${JSON.stringify(mlxModelId)}, "--text", text, "--voice", ${JSON.stringify(mlxVoice)}, "--lang_code", ${JSON.stringify(mlxLangCode)}, "--audio_path", ${JSON.stringify(wavPath)}])`
|
|
626111
626139
|
].join("; ");
|
|
626112
626140
|
try {
|
|
626113
|
-
|
|
626141
|
+
execSync56(
|
|
626114
626142
|
`${py} -c ${JSON.stringify(pyScript)} ${JSON.stringify(JSON.stringify(cleaned))}`,
|
|
626115
626143
|
{ stdio: "pipe", timeout: 6e4, cwd: tmpdir21() }
|
|
626116
626144
|
);
|
|
626117
626145
|
} catch (err) {
|
|
626118
626146
|
try {
|
|
626119
626147
|
const safeText = cleaned.replace(/'/g, "'\\''");
|
|
626120
|
-
|
|
626148
|
+
execSync56(
|
|
626121
626149
|
`${py} -m mlx_audio.tts.generate --model ${mlxModelId} --text '${safeText}' --voice ${mlxVoice} --lang_code ${mlxLangCode} --audio_path ${JSON.stringify(wavPath)}`,
|
|
626122
626150
|
{ stdio: "pipe", timeout: 6e4, cwd: tmpdir21() }
|
|
626123
626151
|
);
|
|
@@ -626191,14 +626219,14 @@ Error: ${err2 instanceof Error ? err2.message : String(err2)}`
|
|
|
626191
626219
|
`tts_gen.main(["--model", ${JSON.stringify(mlxModelId)}, "--text", text, "--voice", ${JSON.stringify(mlxVoice)}, "--lang_code", ${JSON.stringify(mlxLangCode)}, "--audio_path", ${JSON.stringify(wavPath)}])`
|
|
626192
626220
|
].join("; ");
|
|
626193
626221
|
try {
|
|
626194
|
-
|
|
626222
|
+
execSync56(
|
|
626195
626223
|
`${py} -c ${JSON.stringify(pyScript)} ${JSON.stringify(JSON.stringify(cleaned))}`,
|
|
626196
626224
|
{ stdio: "pipe", timeout: 6e4, cwd: tmpdir21() }
|
|
626197
626225
|
);
|
|
626198
626226
|
} catch {
|
|
626199
626227
|
try {
|
|
626200
626228
|
const safeText = cleaned.replace(/'/g, "'\\''");
|
|
626201
|
-
|
|
626229
|
+
execSync56(
|
|
626202
626230
|
`${py} -m mlx_audio.tts.generate --model ${mlxModelId} --text '${safeText}' --voice ${mlxVoice} --lang_code ${mlxLangCode} --audio_path ${JSON.stringify(wavPath)}`,
|
|
626203
626231
|
{ stdio: "pipe", timeout: 6e4, cwd: tmpdir21() }
|
|
626204
626232
|
);
|
|
@@ -626494,11 +626522,11 @@ Error: ${err2 instanceof Error ? err2.message : String(err2)}`
|
|
|
626494
626522
|
...isJetson ? (() => {
|
|
626495
626523
|
let jpVer = "v60";
|
|
626496
626524
|
try {
|
|
626497
|
-
const tegra = existsSync125("/etc/nv_tegra_release") ?
|
|
626525
|
+
const tegra = existsSync125("/etc/nv_tegra_release") ? execSync56("cat /etc/nv_tegra_release 2>/dev/null", {
|
|
626498
626526
|
encoding: "utf8",
|
|
626499
626527
|
timeout: 3e3
|
|
626500
626528
|
}).trim() : "";
|
|
626501
|
-
const dpkg =
|
|
626529
|
+
const dpkg = execSync56(
|
|
626502
626530
|
"dpkg -l nvidia-jetpack 2>/dev/null | grep nvidia-jetpack | awk '{print $3}'",
|
|
626503
626531
|
{ encoding: "utf8", timeout: 5e3 }
|
|
626504
626532
|
).trim();
|
|
@@ -632034,10 +632062,10 @@ The session corrections MUST become hard rules in the SKILL.md Rules section.`;
|
|
|
632034
632062
|
"Requesting sudo to migrate daemon to current user and restart..."
|
|
632035
632063
|
);
|
|
632036
632064
|
const nodeBin = process.execPath;
|
|
632037
|
-
const { execSync:
|
|
632065
|
+
const { execSync: execSync64 } = await import("node:child_process");
|
|
632038
632066
|
let npmRoot = "";
|
|
632039
632067
|
try {
|
|
632040
|
-
npmRoot =
|
|
632068
|
+
npmRoot = execSync64("npm root -g", { encoding: "utf8" }).trim();
|
|
632041
632069
|
} catch {
|
|
632042
632070
|
}
|
|
632043
632071
|
const launcher = npmRoot ? `${npmRoot}/omnius/dist/launcher.cjs` : "";
|
|
@@ -640620,7 +640648,7 @@ async function handleBroker(arg, _ctx) {
|
|
|
640620
640648
|
);
|
|
640621
640649
|
}
|
|
640622
640650
|
async function handleParallel(arg, ctx3) {
|
|
640623
|
-
const { execSync:
|
|
640651
|
+
const { execSync: execSync64 } = await import("node:child_process");
|
|
640624
640652
|
const baseUrl = ctx3.config.backendUrl || "http://localhost:11434";
|
|
640625
640653
|
const isRemote = ctx3.config.backendType === "nexus";
|
|
640626
640654
|
if (isRemote) {
|
|
@@ -640652,7 +640680,7 @@ async function handleParallel(arg, ctx3) {
|
|
|
640652
640680
|
}
|
|
640653
640681
|
let systemdVal = "";
|
|
640654
640682
|
try {
|
|
640655
|
-
const out =
|
|
640683
|
+
const out = execSync64(
|
|
640656
640684
|
"systemctl show ollama.service -p Environment 2>/dev/null || true",
|
|
640657
640685
|
{ encoding: "utf8" }
|
|
640658
640686
|
);
|
|
@@ -640687,7 +640715,7 @@ async function handleParallel(arg, ctx3) {
|
|
|
640687
640715
|
}
|
|
640688
640716
|
const isSystemd = (() => {
|
|
640689
640717
|
try {
|
|
640690
|
-
const out =
|
|
640718
|
+
const out = execSync64("systemctl is-active ollama.service 2>/dev/null", {
|
|
640691
640719
|
encoding: "utf8"
|
|
640692
640720
|
}).trim();
|
|
640693
640721
|
return out === "active" || out === "inactive";
|
|
@@ -642988,13 +643016,13 @@ async function showExposeDashboard(gateway, rl, ctx3) {
|
|
|
642988
643016
|
const cmd = `/endpoint ${id} --auth ${gateway.authKey ?? ""}`;
|
|
642989
643017
|
let copied = false;
|
|
642990
643018
|
try {
|
|
642991
|
-
const { execSync:
|
|
643019
|
+
const { execSync: execSync64 } = __require("node:child_process");
|
|
642992
643020
|
const platform7 = process.platform;
|
|
642993
643021
|
if (platform7 === "darwin") {
|
|
642994
|
-
|
|
643022
|
+
execSync64("pbcopy", { input: cmd, timeout: 3e3 });
|
|
642995
643023
|
copied = true;
|
|
642996
643024
|
} else if (platform7 === "win32") {
|
|
642997
|
-
|
|
643025
|
+
execSync64("clip", { input: cmd, timeout: 3e3 });
|
|
642998
643026
|
copied = true;
|
|
642999
643027
|
} else {
|
|
643000
643028
|
for (const tool of [
|
|
@@ -643003,7 +643031,7 @@ async function showExposeDashboard(gateway, rl, ctx3) {
|
|
|
643003
643031
|
"wl-copy"
|
|
643004
643032
|
]) {
|
|
643005
643033
|
try {
|
|
643006
|
-
|
|
643034
|
+
execSync64(tool, {
|
|
643007
643035
|
input: cmd,
|
|
643008
643036
|
timeout: 3e3,
|
|
643009
643037
|
stdio: ["pipe", "pipe", "pipe"]
|
|
@@ -643393,7 +643421,7 @@ var init_commands = __esm({
|
|
|
643393
643421
|
// packages/cli/src/tui/project-context.ts
|
|
643394
643422
|
import { existsSync as existsSync127, readFileSync as readFileSync104, readdirSync as readdirSync43, mkdirSync as mkdirSync74, writeFileSync as writeFileSync65 } from "node:fs";
|
|
643395
643423
|
import { join as join139, basename as basename26 } from "node:path";
|
|
643396
|
-
import { execSync as
|
|
643424
|
+
import { execSync as execSync57 } from "node:child_process";
|
|
643397
643425
|
import { homedir as homedir48 } from "node:os";
|
|
643398
643426
|
function projectContextUrlSpanAt(text2, index) {
|
|
643399
643427
|
PROJECT_CONTEXT_URL_RE.lastIndex = 0;
|
|
@@ -643452,18 +643480,18 @@ function loadProjectMap(repoRoot) {
|
|
|
643452
643480
|
}
|
|
643453
643481
|
function getGitInfo(repoRoot) {
|
|
643454
643482
|
try {
|
|
643455
|
-
|
|
643483
|
+
execSync57("git rev-parse --is-inside-work-tree", { cwd: repoRoot, stdio: "pipe" });
|
|
643456
643484
|
} catch {
|
|
643457
643485
|
return "";
|
|
643458
643486
|
}
|
|
643459
643487
|
const lines = [];
|
|
643460
643488
|
try {
|
|
643461
|
-
const branch =
|
|
643489
|
+
const branch = execSync57("git branch --show-current", { cwd: repoRoot, encoding: "utf-8", stdio: "pipe" }).trim();
|
|
643462
643490
|
if (branch) lines.push(`Branch: ${branch}`);
|
|
643463
643491
|
} catch {
|
|
643464
643492
|
}
|
|
643465
643493
|
try {
|
|
643466
|
-
const status =
|
|
643494
|
+
const status = execSync57("git status --porcelain", { cwd: repoRoot, encoding: "utf-8", stdio: "pipe" }).trim();
|
|
643467
643495
|
if (status) {
|
|
643468
643496
|
const changed = status.split("\n").length;
|
|
643469
643497
|
lines.push(`Working tree: ${changed} changed file(s)`);
|
|
@@ -643473,7 +643501,7 @@ function getGitInfo(repoRoot) {
|
|
|
643473
643501
|
} catch {
|
|
643474
643502
|
}
|
|
643475
643503
|
try {
|
|
643476
|
-
const log22 =
|
|
643504
|
+
const log22 = execSync57("git log --oneline -5 --no-decorate", { cwd: repoRoot, encoding: "utf-8", stdio: "pipe" }).trim();
|
|
643477
643505
|
if (log22) lines.push(`Recent commits:
|
|
643478
643506
|
${log22}`);
|
|
643479
643507
|
} catch {
|
|
@@ -647793,7 +647821,7 @@ var init_promptLoader3 = __esm({
|
|
|
647793
647821
|
// packages/cli/src/tui/dream-engine.ts
|
|
647794
647822
|
import { mkdirSync as mkdirSync80, writeFileSync as writeFileSync69, readFileSync as readFileSync110, existsSync as existsSync134, readdirSync as readdirSync47 } from "node:fs";
|
|
647795
647823
|
import { join as join147, basename as basename32 } from "node:path";
|
|
647796
|
-
import { execSync as
|
|
647824
|
+
import { execSync as execSync58 } from "node:child_process";
|
|
647797
647825
|
function setDreamWriteContent(fn) {
|
|
647798
647826
|
_dreamWriteContent = fn;
|
|
647799
647827
|
}
|
|
@@ -648166,7 +648194,7 @@ var init_dream_engine = __esm({
|
|
|
648166
648194
|
}
|
|
648167
648195
|
}
|
|
648168
648196
|
try {
|
|
648169
|
-
const output =
|
|
648197
|
+
const output = execSync58(cmd, {
|
|
648170
648198
|
cwd: this.repoRoot,
|
|
648171
648199
|
timeout: 3e4,
|
|
648172
648200
|
encoding: "utf-8",
|
|
@@ -649143,17 +649171,17 @@ ${summary}` };
|
|
|
649143
649171
|
try {
|
|
649144
649172
|
mkdirSync80(checkpointDir3, { recursive: true });
|
|
649145
649173
|
try {
|
|
649146
|
-
const gitStatus =
|
|
649174
|
+
const gitStatus = execSync58("git status --porcelain", {
|
|
649147
649175
|
cwd: this.repoRoot,
|
|
649148
649176
|
encoding: "utf-8",
|
|
649149
649177
|
timeout: 1e4
|
|
649150
649178
|
});
|
|
649151
|
-
const gitDiff =
|
|
649179
|
+
const gitDiff = execSync58("git diff", {
|
|
649152
649180
|
cwd: this.repoRoot,
|
|
649153
649181
|
encoding: "utf-8",
|
|
649154
649182
|
timeout: 1e4
|
|
649155
649183
|
});
|
|
649156
|
-
const gitHash =
|
|
649184
|
+
const gitHash = execSync58("git rev-parse HEAD 2>/dev/null || echo 'no-git'", {
|
|
649157
649185
|
cwd: this.repoRoot,
|
|
649158
649186
|
encoding: "utf-8",
|
|
649159
649187
|
timeout: 5e3
|
|
@@ -677526,7 +677554,7 @@ __export(aiwg_exports, {
|
|
|
677526
677554
|
import { existsSync as existsSync145, readFileSync as readFileSync120, readdirSync as readdirSync52, statSync as statSync52 } from "node:fs";
|
|
677527
677555
|
import { join as join157 } from "node:path";
|
|
677528
677556
|
import { homedir as homedir53 } from "node:os";
|
|
677529
|
-
import { execSync as
|
|
677557
|
+
import { execSync as execSync59 } from "node:child_process";
|
|
677530
677558
|
function resolveAiwgRoot() {
|
|
677531
677559
|
if (_cachedAiwgRoot !== void 0) return _cachedAiwgRoot;
|
|
677532
677560
|
const envRoot = process.env["OMNIUS_AIWG_ROOT"];
|
|
@@ -677540,7 +677568,7 @@ function resolveAiwgRoot() {
|
|
|
677540
677568
|
return shareDir;
|
|
677541
677569
|
}
|
|
677542
677570
|
try {
|
|
677543
|
-
const globalRoot =
|
|
677571
|
+
const globalRoot = execSync59("npm root -g", {
|
|
677544
677572
|
encoding: "utf-8",
|
|
677545
677573
|
timeout: 5e3,
|
|
677546
677574
|
stdio: ["pipe", "pipe", "pipe"]
|
|
@@ -677582,7 +677610,7 @@ function resolveAiwgRoot() {
|
|
|
677582
677610
|
}
|
|
677583
677611
|
}
|
|
677584
677612
|
try {
|
|
677585
|
-
const whichAiwg =
|
|
677613
|
+
const whichAiwg = execSync59("which aiwg 2>/dev/null || where aiwg 2>nul", {
|
|
677586
677614
|
encoding: "utf-8",
|
|
677587
677615
|
timeout: 3e3,
|
|
677588
677616
|
stdio: ["pipe", "pipe", "pipe"]
|
|
@@ -680470,9 +680498,9 @@ function resolveLocalPeerId() {
|
|
|
680470
680498
|
}
|
|
680471
680499
|
let scanResult = null;
|
|
680472
680500
|
try {
|
|
680473
|
-
const { execSync:
|
|
680501
|
+
const { execSync: execSync64 } = __require("node:child_process");
|
|
680474
680502
|
const cmd = `find "${homedir56()}" -maxdepth 4 -path '*/.omnius/nexus/status.json' -type f 2>/dev/null | head -50`;
|
|
680475
|
-
const out =
|
|
680503
|
+
const out = execSync64(cmd, { encoding: "utf-8", timeout: 2e3 }).trim();
|
|
680476
680504
|
for (const line of out.split("\n")) {
|
|
680477
680505
|
const f2 = line.trim();
|
|
680478
680506
|
if (!f2) continue;
|
|
@@ -680502,8 +680530,8 @@ function locateTorScript(filename) {
|
|
|
680502
680530
|
if (existsSync149(p2)) return p2;
|
|
680503
680531
|
}
|
|
680504
680532
|
try {
|
|
680505
|
-
const { execSync:
|
|
680506
|
-
const root =
|
|
680533
|
+
const { execSync: execSync64 } = __require("node:child_process");
|
|
680534
|
+
const root = execSync64("npm root -g", { encoding: "utf-8", timeout: 5e3 }).trim();
|
|
680507
680535
|
const p2 = join161(root, "omnius", "dist", "scripts", "tor", filename);
|
|
680508
680536
|
if (existsSync149(p2)) return p2;
|
|
680509
680537
|
} catch {
|
|
@@ -691725,7 +691753,7 @@ var init_usage_tracker = __esm({
|
|
|
691725
691753
|
});
|
|
691726
691754
|
|
|
691727
691755
|
// packages/cli/src/docker.ts
|
|
691728
|
-
import { execSync as
|
|
691756
|
+
import { execSync as execSync60, spawn as spawn32 } from "node:child_process";
|
|
691729
691757
|
import { existsSync as existsSync151, mkdirSync as mkdirSync94, writeFileSync as writeFileSync81 } from "node:fs";
|
|
691730
691758
|
import { join as join163, resolve as resolve64, dirname as dirname48 } from "node:path";
|
|
691731
691759
|
import { homedir as homedir57 } from "node:os";
|
|
@@ -691746,7 +691774,7 @@ function getDockerDir() {
|
|
|
691746
691774
|
}
|
|
691747
691775
|
function isDockerAvailable() {
|
|
691748
691776
|
try {
|
|
691749
|
-
|
|
691777
|
+
execSync60("docker info", { stdio: "pipe", timeout: 1e4 });
|
|
691750
691778
|
return true;
|
|
691751
691779
|
} catch {
|
|
691752
691780
|
return false;
|
|
@@ -691754,7 +691782,7 @@ function isDockerAvailable() {
|
|
|
691754
691782
|
}
|
|
691755
691783
|
function isDockerInstalled() {
|
|
691756
691784
|
try {
|
|
691757
|
-
|
|
691785
|
+
execSync60("docker --version", { stdio: "pipe", timeout: 5e3 });
|
|
691758
691786
|
return true;
|
|
691759
691787
|
} catch {
|
|
691760
691788
|
return false;
|
|
@@ -691779,31 +691807,31 @@ async function ensureDocker() {
|
|
|
691779
691807
|
}
|
|
691780
691808
|
try {
|
|
691781
691809
|
console.log("[omnius-docker] Docker not found. Installing via get.docker.com...");
|
|
691782
|
-
|
|
691810
|
+
execSync60("curl -fsSL https://get.docker.com | sh", {
|
|
691783
691811
|
stdio: "inherit",
|
|
691784
691812
|
timeout: 3e5
|
|
691785
691813
|
});
|
|
691786
691814
|
const user = process.env["USER"] || process.env["LOGNAME"];
|
|
691787
691815
|
if (user) {
|
|
691788
691816
|
try {
|
|
691789
|
-
|
|
691817
|
+
execSync60(`sudo usermod -aG docker ${user}`, { stdio: "pipe" });
|
|
691790
691818
|
} catch {
|
|
691791
691819
|
}
|
|
691792
691820
|
}
|
|
691793
691821
|
try {
|
|
691794
|
-
|
|
691822
|
+
execSync60("sudo systemctl start docker", { stdio: "pipe", timeout: 15e3 });
|
|
691795
691823
|
} catch {
|
|
691796
691824
|
}
|
|
691797
691825
|
try {
|
|
691798
|
-
|
|
691799
|
-
const runtimes =
|
|
691826
|
+
execSync60("nvidia-smi", { stdio: "pipe", timeout: 5e3 });
|
|
691827
|
+
const runtimes = execSync60("docker info --format '{{json .Runtimes}}'", {
|
|
691800
691828
|
stdio: "pipe",
|
|
691801
691829
|
timeout: 5e3
|
|
691802
691830
|
}).toString();
|
|
691803
691831
|
if (!runtimes.includes("nvidia")) {
|
|
691804
691832
|
console.log("[omnius-docker] NVIDIA GPU detected. Installing nvidia-container-toolkit...");
|
|
691805
691833
|
try {
|
|
691806
|
-
|
|
691834
|
+
execSync60(`
|
|
691807
691835
|
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg 2>/dev/null
|
|
691808
691836
|
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
|
|
691809
691837
|
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 )
|
|
@@ -691833,7 +691861,7 @@ async function ensureDocker() {
|
|
|
691833
691861
|
}
|
|
691834
691862
|
async function ensureNvidiaToolkit() {
|
|
691835
691863
|
try {
|
|
691836
|
-
|
|
691864
|
+
execSync60("nvidia-smi --query-gpu=name --format=csv,noheader", { stdio: "pipe", timeout: 5e3 });
|
|
691837
691865
|
} catch {
|
|
691838
691866
|
return { ok: false, message: "No NVIDIA GPU detected (nvidia-smi not found)" };
|
|
691839
691867
|
}
|
|
@@ -691844,7 +691872,7 @@ async function ensureNvidiaToolkit() {
|
|
|
691844
691872
|
return { ok: false, message: "Auto-install only supported on Linux. Install manually: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html" };
|
|
691845
691873
|
}
|
|
691846
691874
|
try {
|
|
691847
|
-
|
|
691875
|
+
execSync60(`
|
|
691848
691876
|
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg 2>/dev/null
|
|
691849
691877
|
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
|
|
691850
691878
|
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 )
|
|
@@ -691858,7 +691886,7 @@ async function ensureNvidiaToolkit() {
|
|
|
691858
691886
|
}
|
|
691859
691887
|
function isOmniusImageBuilt() {
|
|
691860
691888
|
try {
|
|
691861
|
-
const out =
|
|
691889
|
+
const out = execSync60(`docker images -q ${OMNIUS_IMAGE}:${OMNIUS_IMAGE_TAG}`, {
|
|
691862
691890
|
stdio: "pipe",
|
|
691863
691891
|
timeout: 5e3
|
|
691864
691892
|
}).toString().trim();
|
|
@@ -691882,7 +691910,7 @@ async function ensureOmniusImage(force = false) {
|
|
|
691882
691910
|
}
|
|
691883
691911
|
try {
|
|
691884
691912
|
console.log(`[omnius-docker] Building image ${OMNIUS_IMAGE}:${OMNIUS_IMAGE_TAG}...`);
|
|
691885
|
-
|
|
691913
|
+
execSync60(`docker build -t ${OMNIUS_IMAGE}:${OMNIUS_IMAGE_TAG} ${buildContext}`, {
|
|
691886
691914
|
stdio: "inherit",
|
|
691887
691915
|
timeout: 6e5
|
|
691888
691916
|
// 10 min
|
|
@@ -691956,11 +691984,11 @@ exec "$@"
|
|
|
691956
691984
|
}
|
|
691957
691985
|
function hasNvidiaGpu() {
|
|
691958
691986
|
try {
|
|
691959
|
-
|
|
691987
|
+
execSync60("nvidia-smi --query-gpu=name --format=csv,noheader", {
|
|
691960
691988
|
stdio: "pipe",
|
|
691961
691989
|
timeout: 5e3
|
|
691962
691990
|
});
|
|
691963
|
-
const runtimes =
|
|
691991
|
+
const runtimes = execSync60("docker info --format '{{json .Runtimes}}'", {
|
|
691964
691992
|
stdio: "pipe",
|
|
691965
691993
|
timeout: 5e3
|
|
691966
691994
|
}).toString();
|
|
@@ -692209,7 +692237,7 @@ import { createRequire as createRequire7 } from "node:module";
|
|
|
692209
692237
|
import { fileURLToPath as fileURLToPath19 } from "node:url";
|
|
692210
692238
|
import { dirname as dirname49, join as join165, resolve as resolve65 } from "node:path";
|
|
692211
692239
|
import { homedir as homedir58 } from "node:os";
|
|
692212
|
-
import { spawn as spawn33, execSync as
|
|
692240
|
+
import { spawn as spawn33, execSync as execSync61 } from "node:child_process";
|
|
692213
692241
|
import {
|
|
692214
692242
|
mkdirSync as mkdirSync95,
|
|
692215
692243
|
writeFileSync as writeFileSync82,
|
|
@@ -696530,7 +696558,7 @@ function handleV1RunsDelete(res, id) {
|
|
|
696530
696558
|
const containerName = `omnius-${id}`;
|
|
696531
696559
|
if (job.sandbox === "container") {
|
|
696532
696560
|
try {
|
|
696533
|
-
|
|
696561
|
+
execSync61(`docker stop ${containerName}`, {
|
|
696534
696562
|
timeout: 5e3,
|
|
696535
696563
|
stdio: "ignore"
|
|
696536
696564
|
});
|
|
@@ -698859,8 +698887,8 @@ data: ${JSON.stringify(data)}
|
|
|
698859
698887
|
}
|
|
698860
698888
|
setImmediate(() => {
|
|
698861
698889
|
try {
|
|
698862
|
-
const { execSync:
|
|
698863
|
-
|
|
698890
|
+
const { execSync: execSync64 } = require4("node:child_process");
|
|
698891
|
+
execSync64("npm update -g omnius 2>/dev/null || true", {
|
|
698864
698892
|
stdio: "pipe"
|
|
698865
698893
|
});
|
|
698866
698894
|
} catch {
|
|
@@ -698903,7 +698931,7 @@ data: ${JSON.stringify(data)}
|
|
|
698903
698931
|
return;
|
|
698904
698932
|
}
|
|
698905
698933
|
try {
|
|
698906
|
-
const { execSync:
|
|
698934
|
+
const { execSync: execSync64 } = require4("node:child_process");
|
|
698907
698935
|
let audioPath = null;
|
|
698908
698936
|
const ttsCmds = [
|
|
698909
698937
|
`espeak "${text2}" -w /tmp/tts_${Date.now()}.wav 2>/dev/null`,
|
|
@@ -698912,7 +698940,7 @@ data: ${JSON.stringify(data)}
|
|
|
698912
698940
|
];
|
|
698913
698941
|
for (const cmd of ttsCmds) {
|
|
698914
698942
|
try {
|
|
698915
|
-
|
|
698943
|
+
execSync64(cmd, { stdio: "pipe" });
|
|
698916
698944
|
audioPath = "/tmp/tts_" + Date.now() + ".wav";
|
|
698917
698945
|
break;
|
|
698918
698946
|
} catch {
|
|
@@ -702336,7 +702364,7 @@ var clipboard_media_exports = {};
|
|
|
702336
702364
|
__export(clipboard_media_exports, {
|
|
702337
702365
|
pasteClipboardImageToFile: () => pasteClipboardImageToFile
|
|
702338
702366
|
});
|
|
702339
|
-
import { execFileSync as execFileSync10, execSync as
|
|
702367
|
+
import { execFileSync as execFileSync10, execSync as execSync62 } from "node:child_process";
|
|
702340
702368
|
import { mkdirSync as mkdirSync96, readFileSync as readFileSync126, rmSync as rmSync12, writeFileSync as writeFileSync83 } from "node:fs";
|
|
702341
702369
|
import { join as join166 } from "node:path";
|
|
702342
702370
|
function pasteClipboardImageToFile(repoRoot) {
|
|
@@ -702351,7 +702379,7 @@ function pasteClipboardImageToFile(repoRoot) {
|
|
|
702351
702379
|
function readClipboardImage() {
|
|
702352
702380
|
if (process.platform === "darwin") {
|
|
702353
702381
|
try {
|
|
702354
|
-
|
|
702382
|
+
execSync62("command -v pngpaste", { stdio: "ignore", timeout: 1e3 });
|
|
702355
702383
|
const tmp = `/tmp/omnius-clipboard-${Date.now()}.png`;
|
|
702356
702384
|
execFileSync10("pngpaste", [tmp], { timeout: 3e3 });
|
|
702357
702385
|
const buffer2 = readFileSync126(tmp);
|
|
@@ -702422,7 +702450,7 @@ import {
|
|
|
702422
702450
|
mkdirSync as mkdirSync97
|
|
702423
702451
|
} from "node:fs";
|
|
702424
702452
|
import { existsSync as existsSync153 } from "node:fs";
|
|
702425
|
-
import { execSync as
|
|
702453
|
+
import { execSync as execSync63 } from "node:child_process";
|
|
702426
702454
|
import { homedir as homedir59 } from "node:os";
|
|
702427
702455
|
function formatTimeAgo2(date) {
|
|
702428
702456
|
const seconds = Math.floor((Date.now() - date.getTime()) / 1e3);
|
|
@@ -702589,9 +702617,9 @@ ${incompleteList}${more}
|
|
|
702589
702617
|
const scripts = pkg.scripts || {};
|
|
702590
702618
|
const checkScript = scripts["typecheck"] ? "typecheck" : scripts["build"] ? "build" : null;
|
|
702591
702619
|
if (checkScript) {
|
|
702592
|
-
const { execSync:
|
|
702620
|
+
const { execSync: execSync64 } = await import("node:child_process");
|
|
702593
702621
|
try {
|
|
702594
|
-
|
|
702622
|
+
execSync64(`npm run ${checkScript} --silent 2>&1`, {
|
|
702595
702623
|
cwd: cwd4,
|
|
702596
702624
|
stdio: "pipe",
|
|
702597
702625
|
timeout: 12e4,
|
|
@@ -710353,7 +710381,7 @@ Respond concisely and safely. Remember: you are talking to the general public.`;
|
|
|
710353
710381
|
try {
|
|
710354
710382
|
if (process.platform === "win32") {
|
|
710355
710383
|
try {
|
|
710356
|
-
|
|
710384
|
+
execSync63(`taskkill /F /PID ${pid}`, {
|
|
710357
710385
|
timeout: 5e3,
|
|
710358
710386
|
stdio: "ignore"
|
|
710359
710387
|
});
|
|
@@ -710385,7 +710413,7 @@ Respond concisely and safely. Remember: you are talking to the general public.`;
|
|
|
710385
710413
|
if (pid > 0) {
|
|
710386
710414
|
if (process.platform === "win32") {
|
|
710387
710415
|
try {
|
|
710388
|
-
|
|
710416
|
+
execSync63(`taskkill /F /PID ${pid}`, {
|
|
710389
710417
|
timeout: 5e3,
|
|
710390
710418
|
stdio: "ignore"
|
|
710391
710419
|
});
|
|
@@ -710405,7 +710433,7 @@ Respond concisely and safely. Remember: you are talking to the general public.`;
|
|
|
710405
710433
|
} catch {
|
|
710406
710434
|
}
|
|
710407
710435
|
try {
|
|
710408
|
-
|
|
710436
|
+
execSync63(
|
|
710409
710437
|
process.platform === "win32" ? "timeout /t 1 /nobreak >nul" : "sleep 0.5",
|
|
710410
710438
|
{ timeout: 3e3, stdio: "ignore" }
|
|
710411
710439
|
);
|
|
@@ -710422,7 +710450,7 @@ Respond concisely and safely. Remember: you are talking to the general public.`;
|
|
|
710422
710450
|
} catch (err) {
|
|
710423
710451
|
if (attempt < 2) {
|
|
710424
710452
|
try {
|
|
710425
|
-
|
|
710453
|
+
execSync63(
|
|
710426
710454
|
process.platform === "win32" ? "timeout /t 1 /nobreak >nul" : "sleep 0.3",
|
|
710427
710455
|
{ timeout: 3e3, stdio: "ignore" }
|
|
710428
710456
|
);
|
|
@@ -710436,7 +710464,7 @@ Respond concisely and safely. Remember: you are talking to the general public.`;
|
|
|
710436
710464
|
);
|
|
710437
710465
|
if (process.platform === "win32") {
|
|
710438
710466
|
try {
|
|
710439
|
-
|
|
710467
|
+
execSync63(`rd /s /q "${omniusPath}"`, {
|
|
710440
710468
|
timeout: 1e4,
|
|
710441
710469
|
stdio: "ignore"
|
|
710442
710470
|
});
|