jishushell 0.4.2 → 0.4.17
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.openclaw-slim +58 -0
- package/INSTALL-NOTICE +45 -0
- package/dist/auth.js +3 -3
- package/dist/auth.js.map +1 -1
- package/dist/cli/app.d.ts +3 -0
- package/dist/cli/app.js +156 -0
- package/dist/cli/app.js.map +1 -0
- package/dist/{doctor.d.ts → cli/doctor.d.ts} +6 -1
- package/dist/{doctor.js → cli/doctor.js} +389 -27
- 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 +3 -0
- package/dist/cli/job.js +260 -0
- package/dist/cli/job.js.map +1 -0
- package/dist/cli/llm.d.ts +24 -0
- package/dist/cli/llm.js +593 -0
- package/dist/cli/llm.js.map +1 -0
- package/dist/cli/openclaw.d.ts +12 -0
- package/dist/cli/openclaw.js +156 -0
- package/dist/cli/openclaw.js.map +1 -0
- package/dist/cli/panel.d.ts +25 -0
- package/dist/cli/panel.js +734 -0
- package/dist/cli/panel.js.map +1 -0
- package/dist/cli.js +476 -219
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +22 -4
- package/dist/config.js +96 -55
- package/dist/config.js.map +1 -1
- package/dist/control.d.ts +13 -41
- package/dist/control.js +12 -1355
- package/dist/control.js.map +1 -1
- package/dist/install.d.ts +1 -1
- package/dist/install.js +15 -29
- package/dist/install.js.map +1 -1
- package/dist/routes/apps.d.ts +3 -0
- package/dist/routes/apps.js +99 -0
- package/dist/routes/apps.js.map +1 -0
- package/dist/routes/backup.d.ts +2 -0
- package/dist/routes/backup.js +370 -0
- package/dist/routes/backup.js.map +1 -0
- package/dist/routes/instances.d.ts +1 -0
- package/dist/routes/instances.js +61 -15
- package/dist/routes/instances.js.map +1 -1
- package/dist/routes/llm.d.ts +15 -0
- package/dist/routes/llm.js +246 -0
- package/dist/routes/llm.js.map +1 -0
- package/dist/routes/setup.js +32 -7
- package/dist/routes/setup.js.map +1 -1
- package/dist/routes/system.js +31 -6
- package/dist/routes/system.js.map +1 -1
- package/dist/server.js +69 -5
- package/dist/server.js.map +1 -1
- package/dist/services/app-compiler.d.ts +15 -0
- package/dist/services/app-compiler.js +169 -0
- package/dist/services/app-compiler.js.map +1 -0
- package/dist/services/app-manager.d.ts +17 -0
- package/dist/services/app-manager.js +168 -0
- package/dist/services/app-manager.js.map +1 -0
- package/dist/services/backup-manager.d.ts +253 -0
- package/dist/services/backup-manager.js +2014 -0
- package/dist/services/backup-manager.js.map +1 -0
- package/dist/services/backup-verify.d.ts +26 -0
- package/dist/services/backup-verify.js +240 -0
- package/dist/services/backup-verify.js.map +1 -0
- package/dist/services/instance-manager.d.ts +73 -5
- package/dist/services/instance-manager.js +446 -74
- package/dist/services/instance-manager.js.map +1 -1
- package/dist/services/job-manager.d.ts +22 -0
- package/dist/services/job-manager.js +102 -0
- package/dist/services/job-manager.js.map +1 -0
- package/dist/services/llm-proxy/adapters.js +5 -1
- package/dist/services/llm-proxy/adapters.js.map +1 -1
- package/dist/services/llm-proxy/index.d.ts +30 -0
- package/dist/services/llm-proxy/index.js +71 -1
- 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.js +263 -159
- package/dist/services/nomad-manager.js.map +1 -1
- package/dist/services/panel-manager.d.ts +40 -0
- package/dist/services/panel-manager.js +346 -0
- package/dist/services/panel-manager.js.map +1 -0
- package/dist/services/process-manager.js +24 -10
- package/dist/services/process-manager.js.map +1 -1
- package/dist/services/setup-manager.d.ts +4 -2
- package/dist/services/setup-manager.js +578 -154
- package/dist/services/setup-manager.js.map +1 -1
- package/dist/services/telemetry/activation.js +10 -7
- package/dist/services/telemetry/activation.js.map +1 -1
- package/dist/services/telemetry/client.js +7 -18
- package/dist/services/telemetry/client.js.map +1 -1
- package/dist/services/telemetry/heartbeat.js +12 -6
- 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 +62 -0
- package/dist/utils/fs.d.ts +85 -0
- package/dist/utils/fs.js +111 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/safe-json.d.ts +2 -0
- package/dist/utils/safe-json.js +22 -16
- package/dist/utils/safe-json.js.map +1 -1
- package/install/jishu-install.sh +582 -138
- package/install/jishu-uninstall.sh +276 -391
- package/install/post-install.sh +85 -3
- package/openclaw-entry.sh +15 -0
- package/package.json +12 -5
- package/public/assets/Dashboard-CQsp1Mr9.js +1 -0
- package/public/assets/InitPassword-BEC8SE4A.js +1 -0
- package/public/assets/InstanceDetail-B5wTgNEg.js +17 -0
- package/public/assets/{Login-RkjzTNWg.js → Login-D1Bt-Lyk.js} +1 -1
- package/public/assets/NewInstance-GQzm3K9D.js +1 -0
- package/public/assets/Settings-ByjGlqhP.js +1 -0
- package/public/assets/Setup-cMF21Y-8.js +1 -0
- package/public/assets/index-B6qQP4mH.css +1 -0
- package/public/assets/index-BuTQtuNy.js +16 -0
- package/public/assets/logo-black-theme-DywLAtFy.png +0 -0
- package/public/assets/logo-white-theme-DXffFAWw.png +0 -0
- package/public/assets/{providers-lBSOjUWy.js → providers-V-vwrExZ.js} +1 -1
- package/public/assets/{usePolling-CqQ8hrNc.js → usePolling-CK0DfI4h.js} +1 -1
- package/public/assets/{vendor-i18n-Bvxxh8Di.js → vendor-i18n-CfW0RvgE.js} +1 -1
- package/public/assets/vendor-react-B1-3Yrt-.js +59 -0
- package/public/index.html +4 -4
- package/dist/doctor.js.map +0 -1
- package/public/assets/Dashboard-CAOQDYDR.js +0 -1
- package/public/assets/InitPassword-CkehIkJG.js +0 -1
- package/public/assets/InstanceDetail-CzW2S95J.js +0 -14
- package/public/assets/NewInstance-DdbErdjA.js +0 -1
- package/public/assets/Settings-BUD7zwv9.js +0 -1
- package/public/assets/Setup-RRTIERGG.js +0 -1
- package/public/assets/index-77Ug7feY.css +0 -1
- package/public/assets/index-DfRnVUQR.js +0 -16
- package/public/assets/vendor-react-DONn7uBV.js +0 -59
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# syntax=docker/dockerfile:1
|
|
2
|
+
# Self-contained OpenClaw runtime image with entrypoint version-switch.
|
|
3
|
+
# Build: docker build -f Dockerfile.openclaw-slim -t jishushell-openclaw:slim .
|
|
4
|
+
ARG NODE_IMAGE=node:22-bookworm-slim
|
|
5
|
+
|
|
6
|
+
# ── Stage 1: install ──
|
|
7
|
+
FROM ${NODE_IMAGE} AS builder
|
|
8
|
+
ARG OPENCLAW_VERSION=latest
|
|
9
|
+
WORKDIR /app
|
|
10
|
+
RUN apt-get update && apt-get install -y --no-install-recommends python3 make g++ git ca-certificates && \
|
|
11
|
+
rm -rf /var/lib/apt/lists/*
|
|
12
|
+
|
|
13
|
+
# Install the requested OpenClaw version. The build arg becomes part of the
|
|
14
|
+
# layer cache key so a new upstream release cannot silently reuse an older install.
|
|
15
|
+
RUN npm install -g --prefix /app "openclaw@${OPENCLAW_VERSION}" \
|
|
16
|
+
--omit=dev --no-audit --no-fund
|
|
17
|
+
|
|
18
|
+
# OpenClaw's postinstall script installs bundled plugin runtime deps
|
|
19
|
+
# (e.g. @buape/carbon for Discord) into the top-level node_modules.
|
|
20
|
+
# npm runs it automatically but it may fail silently (non-fatal).
|
|
21
|
+
# Re-run it explicitly to ensure all deps are installed.
|
|
22
|
+
# Requires git (some deps use git+ssh: protocol — rewrite to https).
|
|
23
|
+
RUN git config --global url."https://github.com/".insteadOf "ssh://git@github.com/" && \
|
|
24
|
+
cd /app/lib/node_modules/openclaw && \
|
|
25
|
+
node scripts/postinstall-bundled-plugins.mjs 2>&1 || true
|
|
26
|
+
|
|
27
|
+
# ── Stage 2: final runtime image ──
|
|
28
|
+
FROM ${NODE_IMAGE}
|
|
29
|
+
# Re-declare the ARG so it's available in this stage (Docker ARG scope is
|
|
30
|
+
# per-stage). Inject it as an OCI label so `docker inspect` reports the real
|
|
31
|
+
# bundled OpenClaw version for both CI and local-fallback builds.
|
|
32
|
+
ARG OPENCLAW_VERSION=latest
|
|
33
|
+
LABEL org.opencontainers.image.title="OpenClaw Runtime"
|
|
34
|
+
LABEL org.opencontainers.image.description="Self-contained OpenClaw runtime with Python and version-switch entrypoint"
|
|
35
|
+
LABEL org.opencontainers.image.version="${OPENCLAW_VERSION}"
|
|
36
|
+
LABEL org.opencontainers.image.source="https://github.com/x-aijishu/jishushell"
|
|
37
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
38
|
+
procps hostname curl git lsof openssl \
|
|
39
|
+
python3 python3-pip python3-venv && \
|
|
40
|
+
ln -sf /usr/bin/python3 /usr/local/bin/python && \
|
|
41
|
+
rm -rf /var/lib/apt/lists/* && \
|
|
42
|
+
rm -f /usr/lib/python*/EXTERNALLY-MANAGED
|
|
43
|
+
|
|
44
|
+
# Copy OpenClaw from builder
|
|
45
|
+
COPY --from=builder /app/lib/node_modules/ /app/node_modules/
|
|
46
|
+
RUN ln -sf /app/node_modules/openclaw/openclaw.mjs /app/openclaw.mjs && \
|
|
47
|
+
# Backward-compat: old code references /usr/local/bin/openclaw
|
|
48
|
+
ln -sf /usr/local/bin/openclaw-entry.sh /usr/local/bin/openclaw && \
|
|
49
|
+
cp /app/node_modules/openclaw/package.json /app/package.json 2>/dev/null || true
|
|
50
|
+
|
|
51
|
+
# Entrypoint wrapper
|
|
52
|
+
COPY openclaw-entry.sh /usr/local/bin/openclaw-entry.sh
|
|
53
|
+
RUN chmod +x /usr/local/bin/openclaw-entry.sh
|
|
54
|
+
|
|
55
|
+
WORKDIR /app
|
|
56
|
+
USER node
|
|
57
|
+
ENTRYPOINT ["/usr/local/bin/openclaw-entry.sh"]
|
|
58
|
+
CMD ["gateway", "--allow-unconfigured"]
|
package/INSTALL-NOTICE
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
JishuShell
|
|
2
|
+
Copyright (c) 2026 JishuShell Contributors
|
|
3
|
+
Licensed under the Apache License, Version 2.0.
|
|
4
|
+
|
|
5
|
+
This NOTICE file is provided in accordance with Section 4(d) of the
|
|
6
|
+
Apache License, Version 2.0, and as a general disclosure of third-party
|
|
7
|
+
software bundled with or installed by this product.
|
|
8
|
+
|
|
9
|
+
┌─────────────────────────────────────────────────────────┐
|
|
10
|
+
│ THIRD-PARTY SOFTWARE NOTICE │
|
|
11
|
+
└─────────────────────────────────────────────────────────┘
|
|
12
|
+
|
|
13
|
+
JishuShell assists in downloading and configuring the following
|
|
14
|
+
third-party software packages for personal and internal use only.
|
|
15
|
+
Each package is governed solely by its own license. JishuShell
|
|
16
|
+
does not modify, relicense, or assert ownership over any of them.
|
|
17
|
+
|
|
18
|
+
You are the end user of these packages. You are solely
|
|
19
|
+
responsible for ensuring that your use of each package complies
|
|
20
|
+
with its respective license terms, including any restrictions on
|
|
21
|
+
commercial use, competitive offerings, or redistribution.
|
|
22
|
+
|
|
23
|
+
Docker Engine
|
|
24
|
+
URL : https://github.com/moby/moby
|
|
25
|
+
License : Apache License, Version 2.0
|
|
26
|
+
https://github.com/moby/moby/blob/master/LICENSE
|
|
27
|
+
Author : Docker, Inc.
|
|
28
|
+
|
|
29
|
+
Colima
|
|
30
|
+
URL : https://github.com/abiosoft/colima
|
|
31
|
+
License : MIT License
|
|
32
|
+
https://github.com/abiosoft/colima/blob/main/LICENSE
|
|
33
|
+
Author : Abiola Ibrahim
|
|
34
|
+
|
|
35
|
+
Nomad v1.6.5 (last MPL 2.0 release in the 1.6.x line)
|
|
36
|
+
URL : https://github.com/hashicorp/nomad/tree/v1.6.5
|
|
37
|
+
License : Mozilla Public License 2.0
|
|
38
|
+
https://github.com/hashicorp/nomad/blob/v1.6.5/LICENSE
|
|
39
|
+
Author : HashiCorp, Inc.
|
|
40
|
+
|
|
41
|
+
JishuShell pins Nomad to v1.6.5, the final release in the 1.6.x series
|
|
42
|
+
distributed under MPL 2.0. Nomad 1.6.6 and later (including 1.7.0+) are
|
|
43
|
+
licensed under the Business Source License 1.1 (BSL 1.1) and are not
|
|
44
|
+
used by JishuShell.
|
|
45
|
+
|
package/dist/auth.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AUTH_FILE, getJwtSecret, JWT_ALGORITHM, JWT_EXPIRE_HOURS } from "./config.js";
|
|
2
|
-
import {
|
|
2
|
+
import { safeReadSecretJson, safeWriteSecretJson } from "./utils/safe-json.js";
|
|
3
3
|
import bcrypt from "bcryptjs";
|
|
4
4
|
import jwt from "jsonwebtoken";
|
|
5
5
|
const AUTH_CACHE_TTL = 60_000;
|
|
@@ -9,10 +9,10 @@ let _authCache = null;
|
|
|
9
9
|
let _initInProgress = false;
|
|
10
10
|
function invalidateAuthCache() { _authCache = null; }
|
|
11
11
|
function readAuthData() {
|
|
12
|
-
return
|
|
12
|
+
return safeReadSecretJson(AUTH_FILE, "auth");
|
|
13
13
|
}
|
|
14
14
|
function writeAuthData(data) {
|
|
15
|
-
|
|
15
|
+
safeWriteSecretJson(AUTH_FILE, data, true);
|
|
16
16
|
}
|
|
17
17
|
export function isInitialized() {
|
|
18
18
|
return readAuthData() !== null;
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/app.js
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "fs";
|
|
2
|
+
// ── ANSI colour helpers ───────────────────────────────────────────────────
|
|
3
|
+
const isTTY = process.stdout.isTTY ?? false;
|
|
4
|
+
const c = {
|
|
5
|
+
bold: (s) => isTTY ? `\x1b[1m${s}\x1b[0m` : s,
|
|
6
|
+
green: (s) => isTTY ? `\x1b[32m${s}\x1b[0m` : s,
|
|
7
|
+
red: (s) => isTTY ? `\x1b[31m${s}\x1b[0m` : s,
|
|
8
|
+
cyan: (s) => isTTY ? `\x1b[36m${s}\x1b[0m` : s,
|
|
9
|
+
dim: (s) => isTTY ? `\x1b[2m${s}\x1b[0m` : s,
|
|
10
|
+
};
|
|
11
|
+
function log(msg) { process.stdout.write(msg + "\n"); }
|
|
12
|
+
// ── Command implementations ───────────────────────────────────────────────
|
|
13
|
+
async function cmdList(args) {
|
|
14
|
+
const { listApps } = await import("../services/app-manager.js");
|
|
15
|
+
const apps = listApps();
|
|
16
|
+
if (args.includes("--json")) {
|
|
17
|
+
console.log(JSON.stringify(apps.map(a => ({
|
|
18
|
+
id: a.spec.id, name: a.spec.name, version: a.spec.version,
|
|
19
|
+
task_count: a.spec.tasks.length, installed_at: a.manifest.installed_at,
|
|
20
|
+
})), null, 2));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
log("");
|
|
24
|
+
log(c.bold(" Installed Apps"));
|
|
25
|
+
log(c.dim(" ─────────────────────────────────────────────────────"));
|
|
26
|
+
if (apps.length === 0) {
|
|
27
|
+
log(c.dim(" (no apps installed)"));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
for (const a of apps) {
|
|
31
|
+
log(` ${c.cyan(a.spec.id.padEnd(30))} ${(a.spec.version || "").padEnd(10)} ${c.dim(a.spec.name || "")}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
log("");
|
|
35
|
+
}
|
|
36
|
+
async function cmdShow(id) {
|
|
37
|
+
const { getApp } = await import("../services/app-manager.js");
|
|
38
|
+
const app = getApp(id);
|
|
39
|
+
if (!app) {
|
|
40
|
+
log(c.red(` ✗ App "${id}" not found.`));
|
|
41
|
+
process.exitCode = 1;
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
console.log(JSON.stringify(app, null, 2));
|
|
45
|
+
}
|
|
46
|
+
async function cmdInstall(yamlPath) {
|
|
47
|
+
if (!existsSync(yamlPath)) {
|
|
48
|
+
log(c.red(` ✗ File not found: ${yamlPath}`));
|
|
49
|
+
process.exitCode = 1;
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const yamlText = readFileSync(yamlPath, "utf-8");
|
|
53
|
+
const { installApp } = await import("../services/app-manager.js");
|
|
54
|
+
const result = await installApp(yamlText);
|
|
55
|
+
log(c.green(` ✓ Installed app: ${result.spec.id} (${result.spec.name || ""} v${result.spec.version || "?"})`));
|
|
56
|
+
}
|
|
57
|
+
async function cmdUninstall(id) {
|
|
58
|
+
const { uninstallApp, getApp } = await import("../services/app-manager.js");
|
|
59
|
+
if (!getApp(id)) {
|
|
60
|
+
log(c.red(` ✗ App "${id}" not found.`));
|
|
61
|
+
process.exitCode = 1;
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
uninstallApp(id);
|
|
65
|
+
log(c.green(` ✓ Uninstalled app: ${id}`));
|
|
66
|
+
}
|
|
67
|
+
async function cmdCreateInstance(appId, instanceId, name) {
|
|
68
|
+
const { getApp, resolveRequires } = await import("../services/app-manager.js");
|
|
69
|
+
const { createInstance } = await import("../services/instance-manager.js");
|
|
70
|
+
const appData = getApp(appId);
|
|
71
|
+
if (!appData) {
|
|
72
|
+
log(c.red(` ✗ App "${appId}" not found.`));
|
|
73
|
+
process.exitCode = 1;
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
let resolvedEnv = {};
|
|
77
|
+
try {
|
|
78
|
+
resolvedEnv = resolveRequires(appData.spec);
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
log(c.red(` ✗ ${e.message}`));
|
|
82
|
+
process.exitCode = 1;
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const specWithEnv = Object.keys(resolvedEnv).length > 0
|
|
86
|
+
? {
|
|
87
|
+
...appData.spec,
|
|
88
|
+
tasks: appData.spec.tasks.map((t) => t.role === "service" ? { ...t, env: { ...t.env, ...resolvedEnv } } : t),
|
|
89
|
+
}
|
|
90
|
+
: appData.spec;
|
|
91
|
+
await createInstance(instanceId, name, "", undefined, undefined, specWithEnv);
|
|
92
|
+
log(c.green(` ✓ Created instance "${instanceId}" from app "${appId}"`));
|
|
93
|
+
}
|
|
94
|
+
// ── Entry point ───────────────────────────────────────────────────────────
|
|
95
|
+
export async function run(rest) {
|
|
96
|
+
const appCmd = rest[0];
|
|
97
|
+
try {
|
|
98
|
+
if (appCmd === "list") {
|
|
99
|
+
await cmdList(rest.slice(1));
|
|
100
|
+
}
|
|
101
|
+
else if (appCmd === "show" && rest[1]) {
|
|
102
|
+
await cmdShow(rest[1]);
|
|
103
|
+
}
|
|
104
|
+
else if (appCmd === "install" && rest[1]) {
|
|
105
|
+
await cmdInstall(rest[1]);
|
|
106
|
+
}
|
|
107
|
+
else if (appCmd === "uninstall" && rest[1]) {
|
|
108
|
+
await cmdUninstall(rest[1]);
|
|
109
|
+
}
|
|
110
|
+
else if (appCmd === "create-instance" && rest[1]) {
|
|
111
|
+
const appId = rest[1];
|
|
112
|
+
const instanceId = rest[2];
|
|
113
|
+
const name = rest[3] || instanceId;
|
|
114
|
+
if (!instanceId) {
|
|
115
|
+
console.error("Usage: jishushell app create-instance <app-id> <instance-id> [name]");
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
await cmdCreateInstance(appId, instanceId, name);
|
|
119
|
+
}
|
|
120
|
+
else if (appCmd === "help" || appCmd === "--help" || appCmd === "-h") {
|
|
121
|
+
printHelp();
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
printHelp();
|
|
125
|
+
if (appCmd)
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
log(c.red(` ✗ ${err.message}`));
|
|
131
|
+
process.exitCode = 1;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
export function brief() {
|
|
135
|
+
return " app <install|list|show|uninstall|create-instance> App Spec 管理";
|
|
136
|
+
}
|
|
137
|
+
export function printHelp() {
|
|
138
|
+
console.log(`
|
|
139
|
+
Usage: jishushell app <command> [options]
|
|
140
|
+
|
|
141
|
+
Commands:
|
|
142
|
+
list [--json] 列出已安装的 App
|
|
143
|
+
show <app-id> 查看 App 详情(JSON)
|
|
144
|
+
install <yaml-file> 从 YAML 文件安装 App
|
|
145
|
+
uninstall <app-id> 卸载 App
|
|
146
|
+
create-instance <app-id> <inst-id> [name] 从 App 创建实例
|
|
147
|
+
help 显示此帮助
|
|
148
|
+
|
|
149
|
+
Examples:
|
|
150
|
+
jishushell app install ./my-app.yaml
|
|
151
|
+
jishushell app create-instance my-app inst1 "My Instance"
|
|
152
|
+
jishushell app list
|
|
153
|
+
jishushell app show my-app
|
|
154
|
+
`);
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* jishushell doctor --fix 检查并尝试自动修复
|
|
7
7
|
*
|
|
8
8
|
* Nomad 检查依据 install/jishu-install.sh 及 src/services/setup-manager.ts:
|
|
9
|
-
* - 二进制路径: ~/.jishushell/bin/nomad (v1.
|
|
9
|
+
* - 二进制路径: ~/.jishushell/bin/nomad (v1.6.5)
|
|
10
10
|
* - 配置文件: ~/.jishushell/nomad/nomad.hcl
|
|
11
11
|
* - 数据目录: ~/.jishushell/nomad/data/
|
|
12
12
|
* - Alloc 目录: ~/.jishushell/nomad/data/alloc/
|
|
@@ -38,9 +38,14 @@ export interface DoctorCheck {
|
|
|
38
38
|
}
|
|
39
39
|
export interface DoctorOptions {
|
|
40
40
|
fix?: boolean;
|
|
41
|
+
ai?: boolean;
|
|
41
42
|
}
|
|
42
43
|
export declare const ALL_CHECKS: DoctorCheck[];
|
|
43
44
|
/**
|
|
44
45
|
* 运行所有诊断检查,返回是否全部 error 级别检查通过。
|
|
45
46
|
*/
|
|
46
47
|
export declare function runDoctorChecks(opts?: DoctorOptions): Promise<boolean>;
|
|
48
|
+
export declare function brief(): string;
|
|
49
|
+
export declare function printHelp(): void;
|
|
50
|
+
export declare function runAiDiagnosis(): Promise<void>;
|
|
51
|
+
export declare function run(rest: string[]): Promise<void>;
|