jishushell 0.4.10 → 0.4.24-beta.2
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/Dockerfile.hermes-slim +193 -0
- package/INSTALL-NOTICE +10 -12
- package/apps/hermes-container.yaml +35 -0
- package/apps/ollama-binary.yaml +164 -0
- package/apps/ollama-cpu-container.yaml +37 -0
- package/apps/ollama-with-hollama-binary.yaml +159 -0
- package/apps/openclaw-binary.yaml +69 -0
- package/apps/openclaw-container.yaml +37 -0
- package/apps/openclaw-with-ollama-container.yaml +42 -0
- package/apps/openclaw-with-searxng-container.yaml +136 -0
- package/apps/openwebui-container.yaml +53 -0
- package/apps/playwright-container.yaml +120 -0
- package/apps/searxng-container.yaml +115 -0
- package/dist/auth.d.ts +1 -0
- package/dist/auth.js +15 -14
- package/dist/auth.js.map +1 -1
- package/dist/cli/app.d.ts +4 -0
- package/dist/cli/app.js +874 -0
- package/dist/cli/app.js.map +1 -0
- package/dist/cli/backup.d.ts +3 -0
- package/dist/cli/backup.js +434 -0
- package/dist/cli/backup.js.map +1 -0
- package/dist/{doctor.d.ts → cli/doctor.d.ts} +7 -1
- package/dist/{doctor.js → cli/doctor.js} +377 -22
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/helpers.d.ts +4 -0
- package/dist/cli/helpers.js +32 -0
- package/dist/cli/helpers.js.map +1 -0
- package/dist/cli/job.d.ts +4 -0
- package/dist/cli/job.js +198 -0
- package/dist/cli/job.js.map +1 -0
- package/dist/cli/llm.d.ts +25 -0
- package/dist/cli/llm.js +599 -0
- package/dist/cli/llm.js.map +1 -0
- package/dist/cli/managed-list.d.ts +30 -0
- package/dist/cli/managed-list.js +129 -0
- package/dist/cli/managed-list.js.map +1 -0
- package/dist/cli/panel.d.ts +26 -0
- package/dist/cli/panel.js +804 -0
- package/dist/cli/panel.js.map +1 -0
- package/dist/cli/version.d.ts +1 -0
- package/dist/cli/version.js +12 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/cli.js +48 -776
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +69 -0
- package/dist/config.js +268 -7
- package/dist/config.js.map +1 -1
- package/dist/control.d.ts +17 -41
- package/dist/control.js +61 -1323
- package/dist/control.js.map +1 -1
- package/dist/install.d.ts +16 -0
- package/dist/install.js +75 -26
- package/dist/install.js.map +1 -1
- package/dist/routes/agent-apps.d.ts +15 -0
- package/dist/routes/agent-apps.js +78 -0
- package/dist/routes/agent-apps.js.map +1 -0
- package/dist/routes/apps.d.ts +3 -0
- package/dist/routes/apps.js +278 -0
- package/dist/routes/apps.js.map +1 -0
- package/dist/routes/backup.js +3 -3
- package/dist/routes/backup.js.map +1 -1
- package/dist/routes/instances.d.ts +6 -0
- package/dist/routes/instances.js +863 -874
- package/dist/routes/instances.js.map +1 -1
- package/dist/routes/llm.d.ts +15 -0
- package/dist/routes/llm.js +247 -0
- package/dist/routes/llm.js.map +1 -0
- package/dist/routes/runtime.d.ts +15 -0
- package/dist/routes/runtime.js +69 -0
- package/dist/routes/runtime.js.map +1 -0
- package/dist/routes/setup.js +131 -9
- package/dist/routes/setup.js.map +1 -1
- package/dist/routes/system.js +56 -9
- package/dist/routes/system.js.map +1 -1
- package/dist/server.js +107 -7
- package/dist/server.js.map +1 -1
- package/dist/services/agent-apps/catalog.d.ts +30 -0
- package/dist/services/agent-apps/catalog.js +60 -0
- package/dist/services/agent-apps/catalog.js.map +1 -0
- package/dist/services/agent-apps/index.d.ts +36 -0
- package/dist/services/agent-apps/index.js +171 -0
- package/dist/services/agent-apps/index.js.map +1 -0
- package/dist/services/agent-apps/installers/adapter-probes.d.ts +49 -0
- package/dist/services/agent-apps/installers/adapter-probes.js +223 -0
- package/dist/services/agent-apps/installers/adapter-probes.js.map +1 -0
- package/dist/services/agent-apps/installers/adapter.d.ts +30 -0
- package/dist/services/agent-apps/installers/adapter.js +171 -0
- package/dist/services/agent-apps/installers/adapter.js.map +1 -0
- package/dist/services/agent-apps/installers/registry-probe.d.ts +38 -0
- package/dist/services/agent-apps/installers/registry-probe.js +183 -0
- package/dist/services/agent-apps/installers/registry-probe.js.map +1 -0
- package/dist/services/agent-apps/installers/shell-script.d.ts +47 -0
- package/dist/services/agent-apps/installers/shell-script.js +471 -0
- package/dist/services/agent-apps/installers/shell-script.js.map +1 -0
- package/dist/services/agent-apps/types.d.ts +125 -0
- package/dist/services/agent-apps/types.js +17 -0
- package/dist/services/agent-apps/types.js.map +1 -0
- package/dist/services/app/app-compiler.d.ts +15 -0
- package/dist/services/app/app-compiler.js +172 -0
- package/dist/services/app/app-compiler.js.map +1 -0
- package/dist/services/app/app-manager.d.ts +142 -0
- package/dist/services/app/app-manager.js +2148 -0
- package/dist/services/app/app-manager.js.map +1 -0
- package/dist/services/app/custom-manager.d.ts +27 -0
- package/dist/services/app/custom-manager.js +285 -0
- package/dist/services/app/custom-manager.js.map +1 -0
- package/dist/services/app/hermes-agent-manager.d.ts +20 -0
- package/dist/services/app/hermes-agent-manager.js +289 -0
- package/dist/services/app/hermes-agent-manager.js.map +1 -0
- package/dist/services/app/id-normalizer.d.ts +27 -0
- package/dist/services/app/id-normalizer.js +77 -0
- package/dist/services/app/id-normalizer.js.map +1 -0
- package/dist/services/app/ollama-manager.d.ts +18 -0
- package/dist/services/app/ollama-manager.js +207 -0
- package/dist/services/app/ollama-manager.js.map +1 -0
- package/dist/services/app/openclaw-manager.d.ts +63 -0
- package/dist/services/app/openclaw-manager.js +1178 -0
- package/dist/services/app/openclaw-manager.js.map +1 -0
- package/dist/services/app/paths.d.ts +47 -0
- package/dist/services/app/paths.js +68 -0
- package/dist/services/app/paths.js.map +1 -0
- package/dist/services/app/registry.d.ts +17 -0
- package/dist/services/app/registry.js +31 -0
- package/dist/services/app/registry.js.map +1 -0
- package/dist/services/app/remote-spec.d.ts +14 -0
- package/dist/services/app/remote-spec.js +58 -0
- package/dist/services/app/remote-spec.js.map +1 -0
- package/dist/services/app/terminal-session-manager.d.ts +27 -0
- package/dist/services/app/terminal-session-manager.js +157 -0
- package/dist/services/app/terminal-session-manager.js.map +1 -0
- package/dist/services/app/types.d.ts +72 -0
- package/dist/services/app/types.js +16 -0
- package/dist/services/app/types.js.map +1 -0
- package/dist/services/backup-manager.js +60 -22
- package/dist/services/backup-manager.js.map +1 -1
- package/dist/services/instance-manager.d.ts +125 -34
- package/dist/services/instance-manager.js +679 -1043
- package/dist/services/instance-manager.js.map +1 -1
- package/dist/services/llm-proxy/adapters.js +5 -1
- package/dist/services/llm-proxy/adapters.js.map +1 -1
- package/dist/services/llm-proxy/circuit-breaker.js +10 -2
- package/dist/services/llm-proxy/circuit-breaker.js.map +1 -1
- package/dist/services/llm-proxy/index.d.ts +43 -0
- package/dist/services/llm-proxy/index.js +120 -5
- package/dist/services/llm-proxy/index.js.map +1 -1
- package/dist/services/llm-proxy/ssrf.js +1 -1
- package/dist/services/llm-proxy/ssrf.js.map +1 -1
- package/dist/services/nomad-manager.d.ts +260 -3
- package/dist/services/nomad-manager.js +2921 -341
- package/dist/services/nomad-manager.js.map +1 -1
- package/dist/services/panel-manager.d.ts +50 -0
- package/dist/services/panel-manager.js +443 -0
- package/dist/services/panel-manager.js.map +1 -0
- package/dist/services/plugin-installer.js +28 -2
- package/dist/services/plugin-installer.js.map +1 -1
- package/dist/services/process-manager.js +42 -7
- package/dist/services/process-manager.js.map +1 -1
- package/dist/services/runtime/adapters/custom.d.ts +20 -0
- package/dist/services/runtime/adapters/custom.js +90 -0
- package/dist/services/runtime/adapters/custom.js.map +1 -0
- package/dist/services/runtime/adapters/hermes.d.ts +174 -0
- package/dist/services/runtime/adapters/hermes.js +1316 -0
- package/dist/services/runtime/adapters/hermes.js.map +1 -0
- package/dist/services/runtime/adapters/openclaw-routes.d.ts +17 -0
- package/dist/services/runtime/adapters/openclaw-routes.js +946 -0
- package/dist/services/runtime/adapters/openclaw-routes.js.map +1 -0
- package/dist/services/runtime/adapters/openclaw.d.ts +188 -0
- package/dist/services/runtime/adapters/openclaw.js +2195 -0
- package/dist/services/runtime/adapters/openclaw.js.map +1 -0
- package/dist/services/runtime/errors.d.ts +28 -0
- package/dist/services/runtime/errors.js +31 -0
- package/dist/services/runtime/errors.js.map +1 -0
- package/dist/services/runtime/index.d.ts +34 -0
- package/dist/services/runtime/index.js +51 -0
- package/dist/services/runtime/index.js.map +1 -0
- package/dist/services/runtime/instance.d.ts +24 -0
- package/dist/services/runtime/instance.js +143 -0
- package/dist/services/runtime/instance.js.map +1 -0
- package/dist/services/runtime/migrations.d.ts +15 -0
- package/dist/services/runtime/migrations.js +25 -0
- package/dist/services/runtime/migrations.js.map +1 -0
- package/dist/services/runtime/registry.d.ts +13 -0
- package/dist/services/runtime/registry.js +32 -0
- package/dist/services/runtime/registry.js.map +1 -0
- package/dist/services/runtime/types.d.ts +545 -0
- package/dist/services/runtime/types.js +14 -0
- package/dist/services/runtime/types.js.map +1 -0
- package/dist/services/setup-manager.d.ts +70 -29
- package/dist/services/setup-manager.js +591 -625
- package/dist/services/setup-manager.js.map +1 -1
- package/dist/services/task-registry.d.ts +44 -0
- package/dist/services/task-registry.js +74 -0
- package/dist/services/task-registry.js.map +1 -0
- package/dist/services/telemetry/heartbeat.d.ts +6 -6
- package/dist/services/telemetry/heartbeat.js +29 -30
- package/dist/services/telemetry/heartbeat.js.map +1 -1
- package/dist/services/update-manager.d.ts +47 -0
- package/dist/services/update-manager.js +305 -0
- package/dist/services/update-manager.js.map +1 -0
- package/dist/types.d.ts +224 -0
- package/dist/utils/docker-host.d.ts +15 -0
- package/dist/utils/docker-host.js +64 -0
- package/dist/utils/docker-host.js.map +1 -0
- package/install/jishu-install.sh +303 -38
- package/install/post-install.sh +64 -5
- package/package.json +19 -5
- package/public/assets/Dashboard-rh9qpYRR.js +1 -0
- package/public/assets/HermesChatPanel-D6JI6lLY.js +1 -0
- package/public/assets/HermesConfigForm-DcbSemaj.js +4 -0
- package/public/assets/InitPassword-CFTKsED4.js +1 -0
- package/public/assets/InstanceDetail-BhNIKA6Z.js +91 -0
- package/public/assets/{Login-CUoEZOWR.js → Login-KB9qrtM0.js} +1 -1
- package/public/assets/NewInstance-CxkO8Hlq.js +1 -0
- package/public/assets/Settings-BVWJvOkU.js +1 -0
- package/public/assets/Setup-X-lzuaUT.js +1 -0
- package/public/assets/WeixinLoginPanel-gca0QTic.js +9 -0
- package/public/assets/index-C8B0cFJM.js +19 -0
- package/public/assets/index-CPhVFEsx.css +1 -0
- package/public/assets/input-paste-CrNVAyOy.js +1 -0
- package/public/assets/{providers-lBSOjUWy.js → providers-V-vwrExZ.js} +1 -1
- package/public/assets/registry-fVUSujib.js +2 -0
- package/public/assets/{usePolling-CK0DfI4h.js → usePolling-Do5Erqm_.js} +1 -1
- package/public/assets/vendor-i18n-ucpM0OR0.js +9 -0
- package/public/assets/{vendor-react-B1-3Yrt-.js → vendor-react-Bk1hRGiY.js} +1 -1
- package/public/favicon.png +0 -0
- package/public/index.html +9 -4
- package/public/logos/hermes.png +0 -0
- package/public/logos/ollama.png +0 -0
- package/public/logos/openclaw.svg +60 -0
- package/scripts/build-hermes-image.sh +21 -0
- package/scripts/build-local.sh +54 -0
- package/scripts/check-adapter-isolation.ts +293 -0
- package/scripts/fixtures/instances/hermes-sample/instance.json +37 -0
- package/scripts/fixtures/instances/legacy-openclaw-sample/instance.json +7 -0
- package/scripts/smoke/hermes-bootstrap.sh +195 -0
- package/templates/hermes-entrypoint.sh +154 -0
- package/dist/doctor.js.map +0 -1
- package/install/jishu-install-china.sh +0 -3092
- package/public/assets/Dashboard-DhsrzJ4F.js +0 -1
- package/public/assets/InitPassword-BjubiVdd.js +0 -1
- package/public/assets/InstanceDetail-DMcywsof.js +0 -17
- package/public/assets/NewInstance-Bk0G4EiJ.js +0 -1
- package/public/assets/Settings-D5tHL_h5.js +0 -1
- package/public/assets/Setup-4t6E3Rut.js +0 -1
- package/public/assets/index-BJ47MWpF.css +0 -1
- package/public/assets/index-DbX85irc.js +0 -16
- package/public/assets/vendor-i18n-CfW0RvgE.js +0 -9
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/services/update-manager.ts
|
|
3
|
+
*
|
|
4
|
+
* Version checking and package upgrade — no console.log, returns data.
|
|
5
|
+
* Both the CLI and the HTTP API can safely call these functions.
|
|
6
|
+
*/
|
|
7
|
+
export interface UpdateInfo {
|
|
8
|
+
hasUpdate: boolean;
|
|
9
|
+
currentVersion: string;
|
|
10
|
+
latestVersion: string;
|
|
11
|
+
}
|
|
12
|
+
export type UpdateRuntimeState = "idle" | "running" | "restarting" | "completed" | "failed";
|
|
13
|
+
export interface UpdateStatusSnapshot {
|
|
14
|
+
status: UpdateRuntimeState;
|
|
15
|
+
currentVersion: string;
|
|
16
|
+
installedVersion: string;
|
|
17
|
+
targetVersion?: string;
|
|
18
|
+
startedAt?: number;
|
|
19
|
+
updatedAt?: number;
|
|
20
|
+
message?: string;
|
|
21
|
+
error?: string;
|
|
22
|
+
inProgress: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function compareVersions(a: string, b: string): number;
|
|
25
|
+
export declare function isVersionAtLeast(version: string, expected: string): boolean;
|
|
26
|
+
export declare function getInstalledGlobalVersion(): string;
|
|
27
|
+
export declare function markUpdateRestarting(targetVersion: string, currentVersion: string, installedVersion: string): void;
|
|
28
|
+
export declare function markUpdateFailed(error: string, currentVersion?: string): void;
|
|
29
|
+
export declare function startBackgroundUpgrade(info: UpdateInfo): UpdateStatusSnapshot;
|
|
30
|
+
export declare function getUpdateStatus(): UpdateStatusSnapshot;
|
|
31
|
+
/**
|
|
32
|
+
* Check for a newer jishushell version on npm.
|
|
33
|
+
* Caches for 30 s; safe to call from both CLI and HTTP routes.
|
|
34
|
+
*/
|
|
35
|
+
export declare function checkUpdate(): Promise<UpdateInfo>;
|
|
36
|
+
/**
|
|
37
|
+
* Run `npm install -g jishushell`.
|
|
38
|
+
* Throws on failure; returns trimmed npm stdout on success.
|
|
39
|
+
*/
|
|
40
|
+
export declare function upgradePackage(): Promise<{
|
|
41
|
+
output: string;
|
|
42
|
+
}>;
|
|
43
|
+
/**
|
|
44
|
+
* Spawn a detached `jishushell restart` after `delayMs` ms, then return.
|
|
45
|
+
* The spawned child outlives the current process (useful after upgrade).
|
|
46
|
+
*/
|
|
47
|
+
export declare function scheduleRestart(delayMs?: number): void;
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/services/update-manager.ts
|
|
3
|
+
*
|
|
4
|
+
* Version checking and package upgrade — no console.log, returns data.
|
|
5
|
+
* Both the CLI and the HTTP API can safely call these functions.
|
|
6
|
+
*/
|
|
7
|
+
import { execFileSync, spawn } from "child_process";
|
|
8
|
+
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
9
|
+
import { join, dirname } from "path";
|
|
10
|
+
import { fileURLToPath } from "url";
|
|
11
|
+
import * as http from "http";
|
|
12
|
+
import * as https from "https";
|
|
13
|
+
import { getPanelConfig, JISHUSHELL_HOME } from "../config.js";
|
|
14
|
+
import { checkAndReport, checkAndReportHeartbeat } from "./telemetry/index.js";
|
|
15
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
16
|
+
// services/ is one level below root; cli.js lives at ../../cli.js from dist/services/
|
|
17
|
+
const CLI_PATH = join(dirname(__filename), "../cli.js");
|
|
18
|
+
const UPDATE_STATE_FILE = join(JISHUSHELL_HOME, "update-state.json");
|
|
19
|
+
const UPDATE_RESTART_TIMEOUT_MS = 5 * 60_000;
|
|
20
|
+
// ── Internal helpers ───────────────────────────────────────────────────────
|
|
21
|
+
let _updateCache = null;
|
|
22
|
+
const UPDATE_CACHE_TTL = 30_000;
|
|
23
|
+
function getNpmBinPath() {
|
|
24
|
+
return join(dirname(process.execPath), "npm");
|
|
25
|
+
}
|
|
26
|
+
function getCurrentPackageVersion() {
|
|
27
|
+
try {
|
|
28
|
+
const pkgPath = join(dirname(fileURLToPath(import.meta.url)), "../../package.json");
|
|
29
|
+
return JSON.parse(readFileSync(pkgPath, "utf-8")).version ?? "0.0.0";
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return "0.0.0";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function parseVersion(version) {
|
|
36
|
+
const [major = 0, minor = 0, patch = 0] = version
|
|
37
|
+
.replace(/^v/, "")
|
|
38
|
+
.split(".")
|
|
39
|
+
.map((part) => parseInt(part, 10) || 0);
|
|
40
|
+
return [major, minor, patch];
|
|
41
|
+
}
|
|
42
|
+
export function compareVersions(a, b) {
|
|
43
|
+
const [aMaj, aMin, aPat] = parseVersion(a);
|
|
44
|
+
const [bMaj, bMin, bPat] = parseVersion(b);
|
|
45
|
+
if (aMaj !== bMaj)
|
|
46
|
+
return aMaj - bMaj;
|
|
47
|
+
if (aMin !== bMin)
|
|
48
|
+
return aMin - bMin;
|
|
49
|
+
return aPat - bPat;
|
|
50
|
+
}
|
|
51
|
+
export function isVersionAtLeast(version, expected) {
|
|
52
|
+
return compareVersions(version, expected) >= 0;
|
|
53
|
+
}
|
|
54
|
+
function readPersistedUpdateState() {
|
|
55
|
+
if (!existsSync(UPDATE_STATE_FILE))
|
|
56
|
+
return null;
|
|
57
|
+
try {
|
|
58
|
+
return JSON.parse(readFileSync(UPDATE_STATE_FILE, "utf-8"));
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function writePersistedUpdateState(state) {
|
|
65
|
+
writeFileSync(UPDATE_STATE_FILE, `${JSON.stringify(state, null, 2)}\n`, "utf-8");
|
|
66
|
+
}
|
|
67
|
+
export function getInstalledGlobalVersion() {
|
|
68
|
+
try {
|
|
69
|
+
const npmRoot = execFileSync(getNpmBinPath(), ["root", "-g"], {
|
|
70
|
+
encoding: "utf-8",
|
|
71
|
+
timeout: 5000,
|
|
72
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
73
|
+
}).trim();
|
|
74
|
+
if (!npmRoot)
|
|
75
|
+
return getCurrentPackageVersion();
|
|
76
|
+
const pkgPath = join(npmRoot, "jishushell", "package.json");
|
|
77
|
+
if (!existsSync(pkgPath))
|
|
78
|
+
return getCurrentPackageVersion();
|
|
79
|
+
return JSON.parse(readFileSync(pkgPath, "utf-8")).version ?? getCurrentPackageVersion();
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return getCurrentPackageVersion();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export function markUpdateRestarting(targetVersion, currentVersion, installedVersion) {
|
|
86
|
+
const previous = readPersistedUpdateState();
|
|
87
|
+
writePersistedUpdateState({
|
|
88
|
+
status: "restarting",
|
|
89
|
+
currentVersion,
|
|
90
|
+
targetVersion,
|
|
91
|
+
installedVersion,
|
|
92
|
+
startedAt: previous?.startedAt ?? Date.now(),
|
|
93
|
+
updatedAt: Date.now(),
|
|
94
|
+
message: `Updated to ${installedVersion}; waiting for panel restart`,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
export function markUpdateFailed(error, currentVersion = getCurrentPackageVersion()) {
|
|
98
|
+
const previous = readPersistedUpdateState();
|
|
99
|
+
writePersistedUpdateState({
|
|
100
|
+
status: "failed",
|
|
101
|
+
currentVersion,
|
|
102
|
+
targetVersion: previous?.targetVersion,
|
|
103
|
+
installedVersion: getInstalledGlobalVersion(),
|
|
104
|
+
startedAt: previous?.startedAt ?? Date.now(),
|
|
105
|
+
updatedAt: Date.now(),
|
|
106
|
+
message: "Update failed",
|
|
107
|
+
error,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
export function startBackgroundUpgrade(info) {
|
|
111
|
+
const status = getUpdateStatus();
|
|
112
|
+
if (status.inProgress) {
|
|
113
|
+
throw new Error("Update already in progress");
|
|
114
|
+
}
|
|
115
|
+
writePersistedUpdateState({
|
|
116
|
+
status: "running",
|
|
117
|
+
currentVersion: info.currentVersion,
|
|
118
|
+
targetVersion: info.latestVersion,
|
|
119
|
+
installedVersion: getInstalledGlobalVersion(),
|
|
120
|
+
startedAt: Date.now(),
|
|
121
|
+
updatedAt: Date.now(),
|
|
122
|
+
message: `Updating JishuShell to ${info.latestVersion}`,
|
|
123
|
+
});
|
|
124
|
+
const nodeBinDir = dirname(process.execPath);
|
|
125
|
+
const childEnv = {
|
|
126
|
+
...process.env,
|
|
127
|
+
PATH: `${nodeBinDir}${process.env.PATH ? `:${process.env.PATH}` : ""}`,
|
|
128
|
+
JISHUSHELL_WEB_UPDATE: "1",
|
|
129
|
+
JISHUSHELL_UPDATE_CURRENT_VERSION: info.currentVersion,
|
|
130
|
+
JISHUSHELL_UPDATE_TARGET_VERSION: info.latestVersion,
|
|
131
|
+
};
|
|
132
|
+
try {
|
|
133
|
+
const child = spawn(process.execPath, [CLI_PATH, "update"], {
|
|
134
|
+
detached: true,
|
|
135
|
+
stdio: "ignore",
|
|
136
|
+
env: childEnv,
|
|
137
|
+
});
|
|
138
|
+
child.unref();
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
markUpdateFailed(err.message || "Failed to start update worker", info.currentVersion);
|
|
142
|
+
throw err;
|
|
143
|
+
}
|
|
144
|
+
return getUpdateStatus();
|
|
145
|
+
}
|
|
146
|
+
export function getUpdateStatus() {
|
|
147
|
+
const currentVersion = getCurrentPackageVersion();
|
|
148
|
+
const installedVersion = getInstalledGlobalVersion();
|
|
149
|
+
let state = readPersistedUpdateState();
|
|
150
|
+
if (state?.status === "running" && state.targetVersion && isVersionAtLeast(installedVersion, state.targetVersion)) {
|
|
151
|
+
state = {
|
|
152
|
+
...state,
|
|
153
|
+
status: "restarting",
|
|
154
|
+
installedVersion,
|
|
155
|
+
updatedAt: Date.now(),
|
|
156
|
+
message: `Updated to ${installedVersion}; waiting for panel restart`,
|
|
157
|
+
};
|
|
158
|
+
writePersistedUpdateState(state);
|
|
159
|
+
}
|
|
160
|
+
if (state?.status === "restarting" && state.targetVersion) {
|
|
161
|
+
if (currentVersion === installedVersion && isVersionAtLeast(installedVersion, state.targetVersion)) {
|
|
162
|
+
state = {
|
|
163
|
+
...state,
|
|
164
|
+
status: "completed",
|
|
165
|
+
currentVersion,
|
|
166
|
+
installedVersion,
|
|
167
|
+
updatedAt: Date.now(),
|
|
168
|
+
message: `Update applied: ${installedVersion}`,
|
|
169
|
+
};
|
|
170
|
+
writePersistedUpdateState(state);
|
|
171
|
+
}
|
|
172
|
+
else if (Date.now() - (state.updatedAt || state.startedAt) > UPDATE_RESTART_TIMEOUT_MS) {
|
|
173
|
+
state = {
|
|
174
|
+
...state,
|
|
175
|
+
status: "failed",
|
|
176
|
+
currentVersion,
|
|
177
|
+
installedVersion,
|
|
178
|
+
updatedAt: Date.now(),
|
|
179
|
+
message: "Update failed",
|
|
180
|
+
error: `Panel did not restart into ${state.targetVersion}`,
|
|
181
|
+
};
|
|
182
|
+
writePersistedUpdateState(state);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (!state) {
|
|
186
|
+
return {
|
|
187
|
+
status: "idle",
|
|
188
|
+
currentVersion,
|
|
189
|
+
installedVersion,
|
|
190
|
+
inProgress: false,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
status: state.status,
|
|
195
|
+
currentVersion,
|
|
196
|
+
installedVersion,
|
|
197
|
+
targetVersion: state.targetVersion,
|
|
198
|
+
startedAt: state.startedAt,
|
|
199
|
+
updatedAt: state.updatedAt,
|
|
200
|
+
message: state.message,
|
|
201
|
+
error: state.error,
|
|
202
|
+
inProgress: state.status === "running" || state.status === "restarting",
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
function getNpmRegistryUrl() {
|
|
206
|
+
const panelReg = getPanelConfig().npm_registry;
|
|
207
|
+
if (typeof panelReg === "string" && panelReg.trim())
|
|
208
|
+
return panelReg.trim().replace(/\/+$/, "");
|
|
209
|
+
try {
|
|
210
|
+
const reg = execFileSync(getNpmBinPath(), ["config", "get", "registry"], {
|
|
211
|
+
encoding: "utf-8", timeout: 5000,
|
|
212
|
+
}).trim();
|
|
213
|
+
if (reg && reg !== "undefined")
|
|
214
|
+
return reg.replace(/\/+$/, "");
|
|
215
|
+
}
|
|
216
|
+
catch { /* fall through */ }
|
|
217
|
+
return "https://registry.npmjs.org";
|
|
218
|
+
}
|
|
219
|
+
// ── Public API ─────────────────────────────────────────────────────────────
|
|
220
|
+
/**
|
|
221
|
+
* Check for a newer jishushell version on npm.
|
|
222
|
+
* Caches for 30 s; safe to call from both CLI and HTTP routes.
|
|
223
|
+
*/
|
|
224
|
+
export async function checkUpdate() {
|
|
225
|
+
if (_updateCache && Date.now() - _updateCache.ts < UPDATE_CACHE_TTL) {
|
|
226
|
+
return _updateCache.info;
|
|
227
|
+
}
|
|
228
|
+
const currentVersion = getCurrentPackageVersion();
|
|
229
|
+
let latestVersion = currentVersion;
|
|
230
|
+
let hasUpdate = false;
|
|
231
|
+
try {
|
|
232
|
+
const registryUrl = getNpmRegistryUrl();
|
|
233
|
+
const metaUrl = new URL(`/jishushell/latest`, registryUrl);
|
|
234
|
+
const transport = metaUrl.protocol === "https:" ? https : http;
|
|
235
|
+
latestVersion = await new Promise((resolve, reject) => {
|
|
236
|
+
const req = transport.get(metaUrl, { headers: { accept: "application/json" }, timeout: 8000 }, (res) => {
|
|
237
|
+
let body = "";
|
|
238
|
+
res.on("data", (d) => (body += d));
|
|
239
|
+
res.on("end", () => {
|
|
240
|
+
try {
|
|
241
|
+
resolve(JSON.parse(body).version ?? currentVersion);
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
reject(new Error("parse error"));
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
req.on("error", reject);
|
|
249
|
+
req.on("timeout", () => { req.destroy(); reject(new Error("timeout")); });
|
|
250
|
+
});
|
|
251
|
+
hasUpdate = compareVersions(latestVersion, currentVersion) > 0;
|
|
252
|
+
}
|
|
253
|
+
catch { /* network unavailable — return no-update */ }
|
|
254
|
+
const info = { hasUpdate, currentVersion, latestVersion };
|
|
255
|
+
_updateCache = { ts: Date.now(), info };
|
|
256
|
+
// Piggyback telemetry on update checks (fire-and-forget)
|
|
257
|
+
checkAndReport();
|
|
258
|
+
checkAndReportHeartbeat();
|
|
259
|
+
return info;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Run `npm install -g jishushell`.
|
|
263
|
+
* Throws on failure; returns trimmed npm stdout on success.
|
|
264
|
+
*/
|
|
265
|
+
export async function upgradePackage() {
|
|
266
|
+
const nodeBinDir = dirname(process.execPath);
|
|
267
|
+
const npmBin = getNpmBinPath();
|
|
268
|
+
const childEnv = {
|
|
269
|
+
...process.env,
|
|
270
|
+
PATH: `${nodeBinDir}${process.env.PATH ? `:${process.env.PATH}` : ""}`,
|
|
271
|
+
};
|
|
272
|
+
// JISHU_RUNNING_IN_INSTALLER=1 tells post-install.sh it is managed by a
|
|
273
|
+
// parent installer and should skip the interactive sudo / TTY checks,
|
|
274
|
+
// do only the minimal wrapper+service update, then exit 0. This works
|
|
275
|
+
// with every published version of jishushell (the env-var guard predates
|
|
276
|
+
// the JISHUSHELL_WEB_UPDATE check added later).
|
|
277
|
+
const npmEnv = {
|
|
278
|
+
...childEnv,
|
|
279
|
+
JISHU_RUNNING_IN_INSTALLER: "1",
|
|
280
|
+
};
|
|
281
|
+
try {
|
|
282
|
+
const out = execFileSync(npmBin, ["install", "-g", "jishushell", "--registry", getNpmRegistryUrl() + "/"], { encoding: "utf-8", timeout: 120_000, stdio: ["ignore", "pipe", "pipe"], env: npmEnv });
|
|
283
|
+
_updateCache = null; // invalidate
|
|
284
|
+
return { output: out?.trim() ?? "" };
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
287
|
+
const detail = err.stderr ? err.stderr.trim() : err.message;
|
|
288
|
+
throw new Error(detail || err.message);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Spawn a detached `jishushell restart` after `delayMs` ms, then return.
|
|
293
|
+
* The spawned child outlives the current process (useful after upgrade).
|
|
294
|
+
*/
|
|
295
|
+
export function scheduleRestart(delayMs = 2000) {
|
|
296
|
+
const nodeBinDir = dirname(process.execPath);
|
|
297
|
+
const childEnv = {
|
|
298
|
+
...process.env,
|
|
299
|
+
PATH: `${nodeBinDir}${process.env.PATH ? `:${process.env.PATH}` : ""}`,
|
|
300
|
+
};
|
|
301
|
+
const delaySecs = Math.max(1, Math.round(delayMs / 1000));
|
|
302
|
+
const child = spawn("sh", ["-c", `sleep ${delaySecs} && exec ${JSON.stringify(process.execPath)} ${JSON.stringify(CLI_PATH)} restart`], { detached: true, stdio: "ignore", env: childEnv });
|
|
303
|
+
child.unref();
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=update-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-manager.js","sourceRoot":"","sources":["../../src/services/update-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -10,6 +10,22 @@ export interface ServiceResult {
|
|
|
10
10
|
error?: string;
|
|
11
11
|
warning?: string;
|
|
12
12
|
pid?: number;
|
|
13
|
+
/**
|
|
14
|
+
* startInstance-only: tag identifying which phase of the start pipeline
|
|
15
|
+
* produced the error. Present on every error result returned by
|
|
16
|
+
* nomad-manager.startInstance so callers (routes, tests, logs) can
|
|
17
|
+
* distinguish where the failure happened.
|
|
18
|
+
*/
|
|
19
|
+
phase?: "running_check" | "home_conflict" | "port_alloc" | "pre_start_hook" | "submit";
|
|
20
|
+
/** Adapter signaled an async background build; poll taskId for progress. */
|
|
21
|
+
building?: boolean;
|
|
22
|
+
taskId?: string;
|
|
23
|
+
/** Nomad alloc ID returned by waitForRunning / restartInstance. */
|
|
24
|
+
alloc_id?: string;
|
|
25
|
+
/** Nomad eval ID returned by submitJob. */
|
|
26
|
+
eval_id?: string;
|
|
27
|
+
/** Port allocation metadata from adapters (process-manager / nomad-manager). */
|
|
28
|
+
port_allocation?: unknown;
|
|
13
29
|
}
|
|
14
30
|
export interface ExecResult {
|
|
15
31
|
stdout: string;
|
|
@@ -25,12 +41,54 @@ export interface ServiceManager {
|
|
|
25
41
|
/** Run a command inside the running instance (docker exec or direct exec). */
|
|
26
42
|
exec(id: string, command: string[], timeoutMs?: number): Promise<ExecResult>;
|
|
27
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Runtime catalog entry stored in panel.json.runtime_catalog.<agentType>.
|
|
46
|
+
* See docs/multi-agent-runtime-generalization-plan.md §32.1 (digest pin) and §32.3 (MVP shape).
|
|
47
|
+
* Fields are camelCase per §8 naming convention.
|
|
48
|
+
*/
|
|
49
|
+
export interface RuntimeCatalogEntry {
|
|
50
|
+
defaultImage: string;
|
|
51
|
+
defaultImageDigest?: string;
|
|
52
|
+
shimPath?: string;
|
|
53
|
+
configFormat: "json" | "yaml+env" | "custom";
|
|
54
|
+
homeDirName: string;
|
|
55
|
+
resources: {
|
|
56
|
+
CPU: number;
|
|
57
|
+
MemoryMB: number;
|
|
58
|
+
MemoryMaxMB?: number;
|
|
59
|
+
};
|
|
60
|
+
allowDockerSock?: boolean;
|
|
61
|
+
}
|
|
62
|
+
export interface RuntimeCatalog {
|
|
63
|
+
openclaw?: RuntimeCatalogEntry;
|
|
64
|
+
hermes?: RuntimeCatalogEntry;
|
|
65
|
+
[agentType: string]: RuntimeCatalogEntry | undefined;
|
|
66
|
+
}
|
|
28
67
|
export interface PanelConfig {
|
|
29
68
|
service_manager?: "process" | "nomad";
|
|
30
69
|
nomad_driver?: "docker";
|
|
70
|
+
/**
|
|
71
|
+
* Legacy openclaw image field. Still written by {@link setOpenclawDockerImage}
|
|
72
|
+
* for compatibility with older panel.json consumers; the authoritative value
|
|
73
|
+
* now lives in `runtime_catalog.openclaw.defaultImage`. Drop after one release
|
|
74
|
+
* cycle, together with the legacy read fallback in {@link getOpenclawDockerImage}.
|
|
75
|
+
*/
|
|
31
76
|
openclaw_image?: string;
|
|
32
77
|
nomad_token?: string;
|
|
33
78
|
allowed_origins?: string[];
|
|
79
|
+
/**
|
|
80
|
+
* Per-runtime catalog. Openclaw and Hermes both live here; `openclaw_image`
|
|
81
|
+
* is kept as a legacy mirror until the next major release.
|
|
82
|
+
*/
|
|
83
|
+
runtime_catalog?: RuntimeCatalog;
|
|
84
|
+
/**
|
|
85
|
+
* Version of the `runtime_catalog` schema this panel.json was last written
|
|
86
|
+
* against. Panel code advertises the highest version it understands via
|
|
87
|
+
* `CURRENT_CATALOG_SCHEMA_VERSION`; a newer value here (written by a newer
|
|
88
|
+
* panel) triggers a startup warning and disables catalog mutations so a
|
|
89
|
+
* downgraded panel cannot silently corrupt structure it doesn't recognize.
|
|
90
|
+
*/
|
|
91
|
+
runtime_catalog_schema_version?: number;
|
|
34
92
|
default_provider?: {
|
|
35
93
|
providerId?: string;
|
|
36
94
|
baseUrl?: string;
|
|
@@ -49,3 +107,169 @@ export interface PanelConfig {
|
|
|
49
107
|
activation_reported?: boolean;
|
|
50
108
|
[key: string]: any;
|
|
51
109
|
}
|
|
110
|
+
export type AppTaskRuntime = "container" | "process" | "vm";
|
|
111
|
+
export type AppTaskRole = "service" | "init" | "sidecar" | "cleanup";
|
|
112
|
+
export type AppTaskPortVisibility = "external" | "internal" | "public";
|
|
113
|
+
export interface AppTaskResources {
|
|
114
|
+
cpu?: string;
|
|
115
|
+
memory?: string;
|
|
116
|
+
}
|
|
117
|
+
export interface AppTaskPort {
|
|
118
|
+
name: string;
|
|
119
|
+
port: number;
|
|
120
|
+
host_port?: number;
|
|
121
|
+
container_port?: number;
|
|
122
|
+
visibility?: AppTaskPortVisibility;
|
|
123
|
+
}
|
|
124
|
+
export interface AppTaskHealth {
|
|
125
|
+
http?: {
|
|
126
|
+
path: string;
|
|
127
|
+
port: number;
|
|
128
|
+
};
|
|
129
|
+
interval?: string;
|
|
130
|
+
timeout?: string;
|
|
131
|
+
retries?: number;
|
|
132
|
+
/** Grace period after start during which probe failures don't count. */
|
|
133
|
+
start_period?: string;
|
|
134
|
+
}
|
|
135
|
+
export interface AppDependsOnEntry {
|
|
136
|
+
/** Readiness condition: "started" | "completed" | "healthy" */
|
|
137
|
+
condition: "started" | "completed" | "healthy";
|
|
138
|
+
/** When true (default), dependency failure blocks this app. */
|
|
139
|
+
required?: boolean;
|
|
140
|
+
}
|
|
141
|
+
export interface AppTaskVolume {
|
|
142
|
+
source: string;
|
|
143
|
+
target: string;
|
|
144
|
+
readonly?: boolean;
|
|
145
|
+
}
|
|
146
|
+
export interface AppTask {
|
|
147
|
+
name: string;
|
|
148
|
+
role?: AppTaskRole;
|
|
149
|
+
runtime: AppTaskRuntime;
|
|
150
|
+
image?: string;
|
|
151
|
+
command?: string;
|
|
152
|
+
args?: string[];
|
|
153
|
+
env?: Record<string, string>;
|
|
154
|
+
resources?: AppTaskResources;
|
|
155
|
+
ports?: AppTaskPort[];
|
|
156
|
+
health?: AppTaskHealth;
|
|
157
|
+
after?: string[];
|
|
158
|
+
/** Volumes: string format "src:dest[:ro]" or object { source, target, readonly? } */
|
|
159
|
+
volumes?: Array<string | AppTaskVolume>;
|
|
160
|
+
}
|
|
161
|
+
export interface AppTerminalCommandPreset {
|
|
162
|
+
cmd: string;
|
|
163
|
+
label?: string;
|
|
164
|
+
description?: string;
|
|
165
|
+
}
|
|
166
|
+
export interface AppTerminalConfig {
|
|
167
|
+
/** Base argv prepended when the user enters only a sub-command. */
|
|
168
|
+
command: string[];
|
|
169
|
+
/** Optional task name for multi-task app specs; defaults to the first service task. */
|
|
170
|
+
task?: string;
|
|
171
|
+
prompt?: string;
|
|
172
|
+
welcome?: string;
|
|
173
|
+
timeout_ms?: number;
|
|
174
|
+
commands?: Record<string, Array<string | AppTerminalCommandPreset>>;
|
|
175
|
+
}
|
|
176
|
+
export interface AppProvide {
|
|
177
|
+
capability: string;
|
|
178
|
+
port?: number;
|
|
179
|
+
path?: string;
|
|
180
|
+
url?: string;
|
|
181
|
+
protocol?: "http" | "https" | "tcp" | "udp" | (string & {});
|
|
182
|
+
visibility?: string;
|
|
183
|
+
description?: string;
|
|
184
|
+
terminal?: AppTerminalConfig;
|
|
185
|
+
}
|
|
186
|
+
export interface AppRequire {
|
|
187
|
+
capability: string;
|
|
188
|
+
inject_as: string;
|
|
189
|
+
required?: boolean;
|
|
190
|
+
}
|
|
191
|
+
export type AppLifecycleStep = {
|
|
192
|
+
run: string;
|
|
193
|
+
timeout_ms?: number;
|
|
194
|
+
successIfCommandExists?: string;
|
|
195
|
+
sudo?: boolean;
|
|
196
|
+
ifFileExists?: string;
|
|
197
|
+
} | {
|
|
198
|
+
downloadImage: string;
|
|
199
|
+
timeout_ms?: number;
|
|
200
|
+
} | {
|
|
201
|
+
deleteImage: string;
|
|
202
|
+
} | {
|
|
203
|
+
downloadBinary: {
|
|
204
|
+
url: string;
|
|
205
|
+
dest: string;
|
|
206
|
+
chmod?: string;
|
|
207
|
+
};
|
|
208
|
+
} | {
|
|
209
|
+
deleteBinary: string;
|
|
210
|
+
} | {
|
|
211
|
+
mkdir: string;
|
|
212
|
+
} | {
|
|
213
|
+
deleteDir: string;
|
|
214
|
+
} | {
|
|
215
|
+
checkNotCommand: string;
|
|
216
|
+
message?: string;
|
|
217
|
+
};
|
|
218
|
+
export interface AppLifecycle {
|
|
219
|
+
pre_install?: AppLifecycleStep[];
|
|
220
|
+
/** Steps run during `app install`, before the job is created. */
|
|
221
|
+
install?: AppLifecycleStep[];
|
|
222
|
+
/** Steps run during `app uninstall`, before files are removed. */
|
|
223
|
+
uninstall?: AppLifecycleStep[];
|
|
224
|
+
/** Steps run after the Nomad job transitions to `running`. */
|
|
225
|
+
post_start?: AppLifecycleStep[];
|
|
226
|
+
}
|
|
227
|
+
export interface AppSpec {
|
|
228
|
+
id: string;
|
|
229
|
+
app_id?: string;
|
|
230
|
+
name?: string;
|
|
231
|
+
version?: string;
|
|
232
|
+
description?: string;
|
|
233
|
+
/** Minimum JishuShell version required to install this app spec. */
|
|
234
|
+
jishushell?: {
|
|
235
|
+
min_version?: string;
|
|
236
|
+
};
|
|
237
|
+
/** When true (default), only one instance can be installed. When false, multiple instances get -1, -2 suffix. */
|
|
238
|
+
singleInstance?: boolean;
|
|
239
|
+
/** Custom prefix inserted before the numeric suffix for multi-instance naming. e.g. "inst" → ollama-inst1, ollama-inst2 */
|
|
240
|
+
instancePrefix?: string;
|
|
241
|
+
tasks: AppTask[];
|
|
242
|
+
depends_on?: Record<string, AppDependsOnEntry>;
|
|
243
|
+
provides?: AppProvide[];
|
|
244
|
+
requires?: AppRequire[];
|
|
245
|
+
/**
|
|
246
|
+
* Target runtime for instances created from this spec. Drives the
|
|
247
|
+
* `adapter.createInstance()` dispatch in `routes/apps.ts`. When omitted,
|
|
248
|
+
* the app install flow defaults to `"openclaw"` for backward
|
|
249
|
+
* compatibility with specs authored before the multi-runtime contract
|
|
250
|
+
* (§32.2).
|
|
251
|
+
*/
|
|
252
|
+
agentType?: string;
|
|
253
|
+
/**
|
|
254
|
+
* Runtime-scoped overlays the adapter applies during `createInstance()`.
|
|
255
|
+
* Plan §17 shape: `{ agentType?, defaults?, capabilities?, ... }`.
|
|
256
|
+
* Adapters are free to read extra keys (e.g. OpenClaw reads `skills` here).
|
|
257
|
+
*/
|
|
258
|
+
runtime?: Record<string, any>;
|
|
259
|
+
lifecycle?: AppLifecycle;
|
|
260
|
+
/** @deprecated use `runtime` — kept as a legacy alias for pre-§17 specs. */
|
|
261
|
+
openclaw?: Record<string, any>;
|
|
262
|
+
_engine?: Record<string, any>;
|
|
263
|
+
}
|
|
264
|
+
export interface AppManifestArtifact {
|
|
265
|
+
type: "image" | "binary" | "dir";
|
|
266
|
+
path: string;
|
|
267
|
+
}
|
|
268
|
+
export interface AppManifest {
|
|
269
|
+
id: string;
|
|
270
|
+
installed_at: string;
|
|
271
|
+
source?: string;
|
|
272
|
+
spec_hash?: string;
|
|
273
|
+
install_mode?: "app-dir" | "instance-dir";
|
|
274
|
+
artifacts?: AppManifestArtifact[];
|
|
275
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type ExecFileSyncLike = (command: string, args?: readonly string[], options?: Record<string, any>) => string | Buffer;
|
|
2
|
+
type ExistsSyncLike = (path: string) => boolean;
|
|
3
|
+
export interface ResolveDockerHostOptions {
|
|
4
|
+
jishuHome: string;
|
|
5
|
+
colimaProfile?: string;
|
|
6
|
+
env?: NodeJS.ProcessEnv;
|
|
7
|
+
platform?: NodeJS.Platform | string;
|
|
8
|
+
execFileSyncImpl?: ExecFileSyncLike;
|
|
9
|
+
existsSyncImpl?: ExistsSyncLike;
|
|
10
|
+
}
|
|
11
|
+
export declare function managedColimaSocketPath(jishuHome: string, colimaProfile?: string): string;
|
|
12
|
+
export declare function managedColimaDockerHost(jishuHome: string, colimaProfile?: string): string;
|
|
13
|
+
export declare function resolveDockerHost(options: ResolveDockerHostOptions): string | undefined;
|
|
14
|
+
export declare function buildDockerClientEnv(options: ResolveDockerHostOptions): NodeJS.ProcessEnv;
|
|
15
|
+
export {};
|