jishushell 0.4.2 → 0.4.10

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.
Files changed (83) hide show
  1. package/Dockerfile.openclaw-slim +58 -0
  2. package/INSTALL-NOTICE +47 -0
  3. package/dist/auth.js +3 -3
  4. package/dist/auth.js.map +1 -1
  5. package/dist/cli.js +517 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/config.d.ts +21 -4
  8. package/dist/config.js +88 -54
  9. package/dist/config.js.map +1 -1
  10. package/dist/control.js +5 -5
  11. package/dist/control.js.map +1 -1
  12. package/dist/doctor.js +47 -14
  13. package/dist/doctor.js.map +1 -1
  14. package/dist/install.d.ts +1 -1
  15. package/dist/install.js +15 -29
  16. package/dist/install.js.map +1 -1
  17. package/dist/routes/backup.d.ts +2 -0
  18. package/dist/routes/backup.js +370 -0
  19. package/dist/routes/backup.js.map +1 -0
  20. package/dist/routes/instances.d.ts +1 -0
  21. package/dist/routes/instances.js +51 -11
  22. package/dist/routes/instances.js.map +1 -1
  23. package/dist/routes/setup.js +3 -5
  24. package/dist/routes/setup.js.map +1 -1
  25. package/dist/server.js +29 -1
  26. package/dist/server.js.map +1 -1
  27. package/dist/services/backup-manager.d.ts +253 -0
  28. package/dist/services/backup-manager.js +2014 -0
  29. package/dist/services/backup-manager.js.map +1 -0
  30. package/dist/services/backup-verify.d.ts +26 -0
  31. package/dist/services/backup-verify.js +240 -0
  32. package/dist/services/backup-verify.js.map +1 -0
  33. package/dist/services/instance-manager.d.ts +24 -4
  34. package/dist/services/instance-manager.js +218 -49
  35. package/dist/services/instance-manager.js.map +1 -1
  36. package/dist/services/nomad-manager.js +72 -131
  37. package/dist/services/nomad-manager.js.map +1 -1
  38. package/dist/services/process-manager.js +4 -3
  39. package/dist/services/process-manager.js.map +1 -1
  40. package/dist/services/setup-manager.d.ts +4 -2
  41. package/dist/services/setup-manager.js +268 -129
  42. package/dist/services/setup-manager.js.map +1 -1
  43. package/dist/services/telemetry/activation.js +10 -7
  44. package/dist/services/telemetry/activation.js.map +1 -1
  45. package/dist/services/telemetry/client.js +7 -18
  46. package/dist/services/telemetry/client.js.map +1 -1
  47. package/dist/services/telemetry/heartbeat.js +12 -6
  48. package/dist/services/telemetry/heartbeat.js.map +1 -1
  49. package/dist/utils/fs.d.ts +85 -0
  50. package/dist/utils/fs.js +111 -0
  51. package/dist/utils/fs.js.map +1 -0
  52. package/dist/utils/safe-json.d.ts +2 -0
  53. package/dist/utils/safe-json.js +22 -16
  54. package/dist/utils/safe-json.js.map +1 -1
  55. package/install/jishu-install-china.sh +3092 -0
  56. package/install/jishu-install.sh +310 -108
  57. package/install/jishu-uninstall.sh +276 -391
  58. package/install/post-install.sh +23 -0
  59. package/openclaw-entry.sh +15 -0
  60. package/package.json +7 -4
  61. package/public/assets/Dashboard-DhsrzJ4F.js +1 -0
  62. package/public/assets/{InitPassword-CkehIkJG.js → InitPassword-BjubiVdd.js} +1 -1
  63. package/public/assets/InstanceDetail-DMcywsof.js +17 -0
  64. package/public/assets/{Login-RkjzTNWg.js → Login-CUoEZOWR.js} +1 -1
  65. package/public/assets/NewInstance-Bk0G4EiJ.js +1 -0
  66. package/public/assets/Settings-D5tHL_h5.js +1 -0
  67. package/public/assets/Setup-4t6E3Rut.js +1 -0
  68. package/public/assets/index-BJ47MWpF.css +1 -0
  69. package/public/assets/index-DbX85irc.js +16 -0
  70. package/public/assets/logo-black-theme-DywLAtFy.png +0 -0
  71. package/public/assets/logo-white-theme-DXffFAWw.png +0 -0
  72. package/public/assets/{usePolling-CqQ8hrNc.js → usePolling-CK0DfI4h.js} +1 -1
  73. package/public/assets/{vendor-i18n-Bvxxh8Di.js → vendor-i18n-CfW0RvgE.js} +1 -1
  74. package/public/assets/vendor-react-B1-3Yrt-.js +59 -0
  75. package/public/index.html +4 -4
  76. package/public/assets/Dashboard-CAOQDYDR.js +0 -1
  77. package/public/assets/InstanceDetail-CzW2S95J.js +0 -14
  78. package/public/assets/NewInstance-DdbErdjA.js +0 -1
  79. package/public/assets/Settings-BUD7zwv9.js +0 -1
  80. package/public/assets/Setup-RRTIERGG.js +0 -1
  81. package/public/assets/index-77Ug7feY.css +0 -1
  82. package/public/assets/index-DfRnVUQR.js +0 -16
  83. package/public/assets/vendor-react-DONn7uBV.js +0 -59
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Semantic file-system primitives for JishuShell.
3
+ *
4
+ * Every file write in the codebase should go through one of these functions.
5
+ * The function name describes the *kind* of file being written; the correct
6
+ * permissions follow from that classification — callers never touch raw mode
7
+ * numbers.
8
+ *
9
+ * Classification:
10
+ *
11
+ * writeConfigFile 0o644 Config / state files (openclaw.json, instance.json, …)
12
+ * writeSecretFile 0o600 Cryptographic keys, tokens, hashes (jwt-secret, …)
13
+ * writeExecutableFile 0o755 Shell scripts and binary wrappers
14
+ * writeSystemTmpFile 0o600 Temp files for privileged hand-off (sudo cp)
15
+ *
16
+ * ensureDirHost 0o755 Host-only directories never bind-mounted into
17
+ * (Linux) containers (JISHUSHELL_HOME, bin/, nomad/,
18
+ * 0o755 packages/). 0o755 on both platforms: Linux
19
+ * (macOS) Docker daemon (root) bypasses DAC so tighter
20
+ * modes would only inconvenience the host user;
21
+ * on macOS, VirtioFS requires the execute bit on
22
+ * every ancestor of a bind-mount. The write bit
23
+ * is withheld from group/other on both platforms,
24
+ * so containers cannot create files in host dirs.
25
+ *
26
+ * ensureDirContainer 0o755 Directories bind-mounted into Docker containers.
27
+ * (Linux) Docker Desktop's VirtioFS uses virtiofsd in
28
+ * 0o755 passthrough mode: macOS host uid numbers are
29
+ * (macOS) exposed verbatim inside the Linux VM and the
30
+ * container, so a process running as --user 502
31
+ * sees files owned by host uid 502 as "owner".
32
+ * 0o755 therefore suffices on macOS just as on
33
+ * Linux — the container process hits owner bits,
34
+ * not "other" bits. (Confirmed by lima-vm/lima
35
+ * #4053: Docker Desktop correctly shows uid=501
36
+ * from host as uid=501 in the container, unlike
37
+ * Lima's VirtioFS which squashes to root.)
38
+ */
39
+ import { chmodSync, mkdirSync, writeFileSync } from "fs";
40
+ import { dirname } from "path";
41
+ // ── Directories ────────────────────────────────────────────────────────────
42
+ /**
43
+ * Create a host-only directory (never bind-mounted into containers).
44
+ * 0o755 on both Linux and macOS: on Linux the Docker daemon runs as root and
45
+ * bypasses DAC, so stricter modes only inconvenience the local user; on macOS,
46
+ * VirtioFS requires the execute bit on every ancestor of a bind-mounted path.
47
+ * Write is withheld from group/other on both platforms, so containers cannot
48
+ * create files inside host directories.
49
+ */
50
+ export function ensureDirHost(path) {
51
+ mkdirSync(path, { recursive: true, mode: 0o755 });
52
+ chmodSync(path, 0o755);
53
+ }
54
+ /**
55
+ * Create a directory bind-mounted into Docker containers.
56
+ *
57
+ * Docker Desktop's VirtioFS runs virtiofsd in passthrough mode: the macOS host
58
+ * uid is exposed verbatim inside the Linux VM, so a container process running
59
+ * as --user 502 sees bind-mounted files owned by host uid 502 as "owner" and
60
+ * gets owner-class permission bits. 0o755 (rwxr-xr-x) is therefore sufficient
61
+ * on macOS, same as on Linux.
62
+ *
63
+ * chmodSync is called after mkdirSync so that the mode is applied
64
+ * unconditionally regardless of the process umask (mkdirSync mode is masked by
65
+ * umask; chmodSync / chmod(2) is not). This is safe on already-existing
66
+ * directories — it only updates the mode bits, it does not fail.
67
+ */
68
+ export function ensureDirContainer(path) {
69
+ mkdirSync(path, { recursive: true, mode: 0o755 });
70
+ chmodSync(path, 0o755);
71
+ }
72
+ // ── Files ──────────────────────────────────────────────────────────────────
73
+ /**
74
+ * Write a config/state file with 0o644.
75
+ * Creates parent directories if they do not yet exist, but does NOT chmod an
76
+ * already-existing parent — the caller owns the directory lifecycle.
77
+ */
78
+ export function writeConfigFile(path, content) {
79
+ mkdirSync(dirname(path), { recursive: true });
80
+ writeFileSync(path, content, { mode: 0o644 });
81
+ chmodSync(path, 0o644);
82
+ }
83
+ /**
84
+ * Write a secret file with 0o600.
85
+ * Creates parent directories if they do not yet exist, but does NOT chmod an
86
+ * already-existing parent.
87
+ */
88
+ export function writeSecretFile(path, content) {
89
+ mkdirSync(dirname(path), { recursive: true });
90
+ writeFileSync(path, content, { mode: 0o600 });
91
+ chmodSync(path, 0o600);
92
+ }
93
+ /**
94
+ * Write an executable file (script or binary wrapper) with 0o755.
95
+ * Creates parent directories if they do not yet exist, but does NOT chmod an
96
+ * already-existing parent.
97
+ */
98
+ export function writeExecutableFile(path, content) {
99
+ mkdirSync(dirname(path), { recursive: true });
100
+ writeFileSync(path, content, { mode: 0o755 });
101
+ chmodSync(path, 0o755);
102
+ }
103
+ /**
104
+ * Write a temporary file to /tmp with 0o600 for privileged hand-off (sudo cp).
105
+ * /tmp already exists; no directory creation needed.
106
+ */
107
+ export function writeSystemTmpFile(path, content) {
108
+ writeFileSync(path, content, { mode: 0o600 });
109
+ chmodSync(path, 0o600);
110
+ }
111
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,OAAwB;IACpE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9C,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,OAAwB;IACpE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9C,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,OAAe;IAC/D,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9C,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,OAAe;IAC9D,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9C,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC"}
@@ -1,2 +1,4 @@
1
1
  export declare function safeReadJson<T = Record<string, any>>(path: string, label: string): T | null;
2
+ export declare function safeReadSecretJson<T = Record<string, any>>(path: string, label: string): T | null;
2
3
  export declare function safeWriteJson(path: string, data: any, fsync?: boolean): void;
4
+ export declare function safeWriteSecretJson(path: string, data: any, fsync?: boolean): void;
@@ -1,7 +1,7 @@
1
- import { existsSync, readFileSync, writeFileSync, mkdirSync, renameSync, copyFileSync, openSync, fdatasyncSync, closeSync } from "fs";
1
+ import { chmodSync, existsSync, readFileSync, writeFileSync, renameSync, copyFileSync, openSync, fdatasyncSync, closeSync, mkdirSync } from "fs";
2
2
  import { dirname } from "path";
3
3
  const BACKUP_SUFFIXES = [".bak", ".bak.1", ".bak.2"];
4
- export function safeReadJson(path, label) {
4
+ function recoverJson(path, label, mode) {
5
5
  for (const f of [path, ...BACKUP_SUFFIXES.map(s => path + s)]) {
6
6
  if (!existsSync(f))
7
7
  continue;
@@ -10,7 +10,8 @@ export function safeReadJson(path, label) {
10
10
  if (f !== path) {
11
11
  console.warn(`[${label}] ${path} corrupted, recovered from ${f}`);
12
12
  const tmp = path + ".tmp";
13
- writeFileSync(tmp, JSON.stringify(data), { mode: 0o600 });
13
+ writeFileSync(tmp, JSON.stringify(data), { mode });
14
+ chmodSync(tmp, mode);
14
15
  renameSync(tmp, path);
15
16
  }
16
17
  return data;
@@ -21,13 +22,16 @@ export function safeReadJson(path, label) {
21
22
  }
22
23
  return null;
23
24
  }
24
- // Per-path lock to detect concurrent writes (synchronous re-entrancy guard)
25
- // Stores start timestamp so stale entries from crashed writes can be detected
25
+ export function safeReadJson(path, label) {
26
+ return recoverJson(path, label, 0o644);
27
+ }
28
+ export function safeReadSecretJson(path, label) {
29
+ return recoverJson(path, label, 0o600);
30
+ }
26
31
  const _activeWrites = new Map();
27
- export function safeWriteJson(path, data, fsync = false) {
32
+ function withWriteLock(path, fn) {
28
33
  const existing = _activeWrites.get(path);
29
34
  if (existing !== undefined) {
30
- // If a write has been "active" for over 60s, it's stale from a previous crash
31
35
  if (Date.now() - existing > 60_000) {
32
36
  _activeWrites.delete(path);
33
37
  }
@@ -35,23 +39,21 @@ export function safeWriteJson(path, data, fsync = false) {
35
39
  console.warn(`[safe-json] Concurrent write detected for ${path}, serializing`);
36
40
  }
37
41
  }
38
- // In Node.js single-threaded model, synchronous code can't truly interleave,
39
- // but this guard catches programming errors where safeWriteJson is called
40
- // from within a safeWriteJson callback (re-entrancy).
41
42
  _activeWrites.set(path, Date.now());
42
43
  try {
43
- _safeWriteJsonImpl(path, data, fsync);
44
+ fn();
44
45
  }
45
46
  finally {
46
47
  _activeWrites.delete(path);
47
48
  }
48
49
  }
49
- function _safeWriteJsonImpl(path, data, fsync) {
50
+ function atomicWriteJson(path, data, fsync, mode) {
50
51
  mkdirSync(dirname(path), { recursive: true });
51
52
  const tmp = path + ".tmp";
52
53
  const json = typeof data === "string" ? data : JSON.stringify(data);
53
- writeFileSync(tmp, json, { mode: 0o600 });
54
- JSON.parse(readFileSync(tmp, "utf-8")); // validate before commit
54
+ writeFileSync(tmp, json, { mode });
55
+ chmodSync(tmp, mode);
56
+ JSON.parse(readFileSync(tmp, "utf-8"));
55
57
  if (fsync) {
56
58
  try {
57
59
  const fd = openSync(tmp, "r");
@@ -60,8 +62,6 @@ function _safeWriteJsonImpl(path, data, fsync) {
60
62
  }
61
63
  catch { }
62
64
  }
63
- // Rolling backup: rotate .bak → .bak.1 → .bak.2 (keep 3 versions)
64
- // Copy (not rename) so the original stays in place until the atomic rename below.
65
65
  if (existsSync(path)) {
66
66
  try {
67
67
  if (existsSync(path + ".bak.1"))
@@ -77,4 +77,10 @@ function _safeWriteJsonImpl(path, data, fsync) {
77
77
  }
78
78
  renameSync(tmp, path);
79
79
  }
80
+ export function safeWriteJson(path, data, fsync = false) {
81
+ withWriteLock(path, () => atomicWriteJson(path, data, fsync, 0o644));
82
+ }
83
+ export function safeWriteSecretJson(path, data, fsync = false) {
84
+ withWriteLock(path, () => atomicWriteJson(path, data, fsync, 0o600));
85
+ }
80
86
  //# sourceMappingURL=safe-json.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"safe-json.js","sourceRoot":"","sources":["../../src/utils/safe-json.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"safe-json.js","sourceRoot":"","sources":["../../src/utils/safe-json.ts"],"names":[],"mappings":"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"}