typescript-virtual-container 1.2.9 → 1.3.0

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 (281) hide show
  1. package/.vscode/settings.json +0 -1
  2. package/README.md +141 -50
  3. package/biome.json +7 -0
  4. package/dist/SSHMimic/exec.d.ts.map +1 -1
  5. package/dist/SSHMimic/executor.d.ts.map +1 -1
  6. package/dist/SSHMimic/executor.js +32 -16
  7. package/dist/SSHMimic/index.d.ts.map +1 -1
  8. package/dist/SSHMimic/index.js +20 -6
  9. package/dist/VirtualFileSystem/binaryPack.d.ts.map +1 -1
  10. package/dist/VirtualFileSystem/binaryPack.js +29 -6
  11. package/dist/VirtualFileSystem/index.d.ts.map +1 -1
  12. package/dist/VirtualFileSystem/index.js +36 -13
  13. package/dist/VirtualPackageManager/index.d.ts.map +1 -1
  14. package/dist/VirtualPackageManager/index.js +192 -43
  15. package/dist/VirtualShell/index.d.ts +10 -4
  16. package/dist/VirtualShell/index.d.ts.map +1 -1
  17. package/dist/VirtualShell/index.js +18 -7
  18. package/dist/VirtualShell/shell.d.ts.map +1 -1
  19. package/dist/VirtualShell/shell.js +3 -1
  20. package/dist/VirtualShell/shellParser.d.ts.map +1 -1
  21. package/dist/VirtualUserManager/index.d.ts.map +1 -1
  22. package/dist/commands/adduser.d.ts +6 -0
  23. package/dist/commands/adduser.d.ts.map +1 -1
  24. package/dist/commands/adduser.js +6 -0
  25. package/dist/commands/alias.d.ts +5 -0
  26. package/dist/commands/alias.d.ts.map +1 -1
  27. package/dist/commands/alias.js +5 -0
  28. package/dist/commands/apt.d.ts +5 -0
  29. package/dist/commands/apt.d.ts.map +1 -1
  30. package/dist/commands/apt.js +32 -9
  31. package/dist/commands/awk.d.ts +11 -0
  32. package/dist/commands/awk.d.ts.map +1 -1
  33. package/dist/commands/awk.js +15 -2
  34. package/dist/commands/base64.d.ts +5 -0
  35. package/dist/commands/base64.d.ts.map +1 -1
  36. package/dist/commands/base64.js +9 -1
  37. package/dist/commands/cat.d.ts +5 -0
  38. package/dist/commands/cat.d.ts.map +1 -1
  39. package/dist/commands/cat.js +10 -2
  40. package/dist/commands/cd.d.ts +5 -0
  41. package/dist/commands/cd.d.ts.map +1 -1
  42. package/dist/commands/cd.js +5 -0
  43. package/dist/commands/chmod.d.ts +5 -0
  44. package/dist/commands/chmod.d.ts.map +1 -1
  45. package/dist/commands/chmod.js +5 -0
  46. package/dist/commands/cp.d.ts +5 -0
  47. package/dist/commands/cp.d.ts.map +1 -1
  48. package/dist/commands/cp.js +5 -0
  49. package/dist/commands/curl.d.ts +5 -0
  50. package/dist/commands/curl.d.ts.map +1 -1
  51. package/dist/commands/curl.js +34 -6
  52. package/dist/commands/cut.d.ts +5 -0
  53. package/dist/commands/cut.d.ts.map +1 -1
  54. package/dist/commands/cut.js +8 -1
  55. package/dist/commands/date.d.ts +5 -0
  56. package/dist/commands/date.d.ts.map +1 -1
  57. package/dist/commands/date.js +7 -1
  58. package/dist/commands/declare.d.ts +3 -0
  59. package/dist/commands/declare.d.ts.map +1 -0
  60. package/dist/commands/declare.js +39 -0
  61. package/dist/commands/diff.d.ts +5 -0
  62. package/dist/commands/diff.d.ts.map +1 -1
  63. package/dist/commands/diff.js +5 -0
  64. package/dist/commands/dpkg.d.ts +5 -0
  65. package/dist/commands/dpkg.d.ts.map +1 -1
  66. package/dist/commands/dpkg.js +24 -7
  67. package/dist/commands/du.d.ts.map +1 -1
  68. package/dist/commands/du.js +8 -2
  69. package/dist/commands/echo.d.ts +5 -0
  70. package/dist/commands/echo.d.ts.map +1 -1
  71. package/dist/commands/echo.js +13 -4
  72. package/dist/commands/env.d.ts +5 -0
  73. package/dist/commands/env.d.ts.map +1 -1
  74. package/dist/commands/env.js +11 -1
  75. package/dist/commands/exit.d.ts +5 -0
  76. package/dist/commands/exit.d.ts.map +1 -1
  77. package/dist/commands/exit.js +12 -2
  78. package/dist/commands/export.d.ts.map +1 -1
  79. package/dist/commands/export.js +3 -1
  80. package/dist/commands/find.d.ts +5 -0
  81. package/dist/commands/find.d.ts.map +1 -1
  82. package/dist/commands/find.js +5 -0
  83. package/dist/commands/free.d.ts +5 -0
  84. package/dist/commands/free.d.ts.map +1 -1
  85. package/dist/commands/free.js +5 -0
  86. package/dist/commands/grep.d.ts +5 -0
  87. package/dist/commands/grep.d.ts.map +1 -1
  88. package/dist/commands/grep.js +12 -2
  89. package/dist/commands/gzip.d.ts +5 -0
  90. package/dist/commands/gzip.d.ts.map +1 -1
  91. package/dist/commands/gzip.js +18 -2
  92. package/dist/commands/head.d.ts +5 -0
  93. package/dist/commands/head.d.ts.map +1 -1
  94. package/dist/commands/head.js +5 -0
  95. package/dist/commands/help.d.ts.map +1 -1
  96. package/dist/commands/help.js +98 -45
  97. package/dist/commands/history.d.ts +5 -0
  98. package/dist/commands/history.d.ts.map +1 -1
  99. package/dist/commands/history.js +5 -0
  100. package/dist/commands/hostname.d.ts +5 -0
  101. package/dist/commands/hostname.d.ts.map +1 -1
  102. package/dist/commands/hostname.js +5 -0
  103. package/dist/commands/id.d.ts.map +1 -1
  104. package/dist/commands/id.js +4 -1
  105. package/dist/commands/index.d.ts +2 -17
  106. package/dist/commands/index.d.ts.map +1 -1
  107. package/dist/commands/index.js +2 -340
  108. package/dist/commands/ls.d.ts.map +1 -1
  109. package/dist/commands/ls.js +3 -1
  110. package/dist/commands/lsb-release.d.ts.map +1 -1
  111. package/dist/commands/lsb-release.js +8 -2
  112. package/dist/commands/nano.js +1 -1
  113. package/dist/commands/neofetch.js +1 -1
  114. package/dist/commands/node.d.ts +9 -0
  115. package/dist/commands/node.d.ts.map +1 -0
  116. package/dist/commands/node.js +316 -0
  117. package/dist/commands/npm.d.ts +19 -0
  118. package/dist/commands/npm.d.ts.map +1 -0
  119. package/dist/commands/npm.js +109 -0
  120. package/dist/commands/ping.d.ts.map +1 -1
  121. package/dist/commands/ping.js +3 -1
  122. package/dist/commands/printf.d.ts +3 -0
  123. package/dist/commands/printf.d.ts.map +1 -0
  124. package/dist/commands/printf.js +113 -0
  125. package/dist/commands/ps.d.ts.map +1 -1
  126. package/dist/commands/ps.js +4 -1
  127. package/dist/commands/python.d.ts +30 -0
  128. package/dist/commands/python.d.ts.map +1 -0
  129. package/dist/commands/python.js +2058 -0
  130. package/dist/commands/read.d.ts +3 -0
  131. package/dist/commands/read.d.ts.map +1 -0
  132. package/dist/commands/read.js +34 -0
  133. package/dist/commands/registry.d.ts +8 -0
  134. package/dist/commands/registry.d.ts.map +1 -0
  135. package/dist/commands/registry.js +229 -0
  136. package/dist/commands/runtime.d.ts +6 -0
  137. package/dist/commands/runtime.d.ts.map +1 -0
  138. package/dist/commands/runtime.js +280 -0
  139. package/dist/commands/sed.d.ts.map +1 -1
  140. package/dist/commands/sed.js +11 -3
  141. package/dist/commands/set.d.ts.map +1 -1
  142. package/dist/commands/set.js +9 -3
  143. package/dist/commands/sh.d.ts.map +1 -1
  144. package/dist/commands/sh.js +57 -36
  145. package/dist/commands/shift.d.ts +5 -0
  146. package/dist/commands/shift.d.ts.map +1 -0
  147. package/dist/commands/shift.js +52 -0
  148. package/dist/commands/sleep.d.ts.map +1 -1
  149. package/dist/commands/sort.d.ts.map +1 -1
  150. package/dist/commands/sort.js +4 -2
  151. package/dist/commands/source.d.ts.map +1 -1
  152. package/dist/commands/source.js +5 -2
  153. package/dist/commands/sudo.js +1 -1
  154. package/dist/commands/tar.d.ts.map +1 -1
  155. package/dist/commands/tar.js +11 -3
  156. package/dist/commands/tee.d.ts.map +1 -1
  157. package/dist/commands/tee.js +8 -6
  158. package/dist/commands/test.d.ts.map +1 -1
  159. package/dist/commands/test.js +46 -24
  160. package/dist/commands/tr.d.ts.map +1 -1
  161. package/dist/commands/tr.js +3 -1
  162. package/dist/commands/true.d.ts +4 -0
  163. package/dist/commands/true.d.ts.map +1 -0
  164. package/dist/commands/true.js +14 -0
  165. package/dist/commands/type.d.ts.map +1 -1
  166. package/dist/commands/type.js +1 -1
  167. package/dist/commands/uname.d.ts.map +1 -1
  168. package/dist/commands/uname.js +4 -1
  169. package/dist/commands/uniq.d.ts.map +1 -1
  170. package/dist/commands/uptime.d.ts.map +1 -1
  171. package/dist/commands/uptime.js +4 -1
  172. package/dist/commands/wget.d.ts.map +1 -1
  173. package/dist/commands/wget.js +32 -7
  174. package/dist/commands/which.d.ts.map +1 -1
  175. package/dist/commands/xargs.d.ts.map +1 -1
  176. package/dist/commands/xargs.js +1 -1
  177. package/dist/index.d.ts +15 -14
  178. package/dist/index.d.ts.map +1 -1
  179. package/dist/index.js +9 -9
  180. package/dist/modules/linuxRootfs.d.ts +18 -1
  181. package/dist/modules/linuxRootfs.d.ts.map +1 -1
  182. package/dist/modules/linuxRootfs.js +160 -17
  183. package/dist/standalone-wo-sftp.d.ts +2 -0
  184. package/dist/standalone-wo-sftp.d.ts.map +1 -0
  185. package/dist/standalone-wo-sftp.js +30 -0
  186. package/dist/utils/expand.d.ts +50 -0
  187. package/dist/utils/expand.d.ts.map +1 -0
  188. package/dist/utils/expand.js +183 -0
  189. package/dist/utils/vfsDiff.d.ts +90 -0
  190. package/dist/utils/vfsDiff.d.ts.map +1 -0
  191. package/dist/utils/vfsDiff.js +177 -0
  192. package/package.json +2 -1
  193. package/src/SSHMimic/exec.ts +10 -1
  194. package/src/SSHMimic/executor.ts +104 -18
  195. package/src/SSHMimic/index.ts +49 -15
  196. package/src/VirtualFileSystem/binaryPack.ts +35 -8
  197. package/src/VirtualFileSystem/index.ts +78 -28
  198. package/src/VirtualPackageManager/index.ts +208 -49
  199. package/src/VirtualShell/index.ts +35 -7
  200. package/src/VirtualShell/shell.ts +23 -3
  201. package/src/VirtualShell/shellParser.ts +134 -36
  202. package/src/VirtualUserManager/index.ts +7 -2
  203. package/src/commands/adduser.ts +6 -0
  204. package/src/commands/alias.ts +5 -1
  205. package/src/commands/apt.ts +47 -17
  206. package/src/commands/awk.ts +20 -6
  207. package/src/commands/base64.ts +13 -2
  208. package/src/commands/cat.ts +13 -5
  209. package/src/commands/cd.ts +5 -0
  210. package/src/commands/chmod.ts +5 -0
  211. package/src/commands/cp.ts +5 -0
  212. package/src/commands/curl.ts +56 -12
  213. package/src/commands/cut.ts +8 -1
  214. package/src/commands/date.ts +7 -1
  215. package/src/commands/declare.ts +44 -0
  216. package/src/commands/diff.ts +17 -3
  217. package/src/commands/dpkg.ts +33 -11
  218. package/src/commands/du.ts +17 -5
  219. package/src/commands/echo.ts +22 -9
  220. package/src/commands/env.ts +11 -1
  221. package/src/commands/exit.ts +12 -2
  222. package/src/commands/export.ts +3 -1
  223. package/src/commands/find.ts +5 -0
  224. package/src/commands/free.ts +9 -2
  225. package/src/commands/grep.ts +12 -2
  226. package/src/commands/gzip.ts +28 -4
  227. package/src/commands/head.ts +5 -0
  228. package/src/commands/help.ts +121 -47
  229. package/src/commands/history.ts +7 -2
  230. package/src/commands/hostname.ts +5 -0
  231. package/src/commands/id.ts +4 -1
  232. package/src/commands/index.ts +9 -360
  233. package/src/commands/ls.ts +5 -3
  234. package/src/commands/lsb-release.ts +8 -2
  235. package/src/commands/nano.ts +1 -1
  236. package/src/commands/neofetch.ts +1 -1
  237. package/src/commands/node.ts +341 -0
  238. package/src/commands/npm.ts +132 -0
  239. package/src/commands/ping.ts +6 -2
  240. package/src/commands/printf.ts +112 -0
  241. package/src/commands/ps.ts +21 -9
  242. package/src/commands/python.ts +2229 -0
  243. package/src/commands/read.ts +41 -0
  244. package/src/commands/registry.ts +244 -0
  245. package/src/commands/runtime.ts +353 -0
  246. package/src/commands/sed.ts +27 -9
  247. package/src/commands/set.ts +9 -3
  248. package/src/commands/sh.ts +159 -55
  249. package/src/commands/shift.ts +53 -0
  250. package/src/commands/sleep.ts +2 -1
  251. package/src/commands/sort.ts +10 -6
  252. package/src/commands/source.ts +15 -3
  253. package/src/commands/sudo.ts +1 -1
  254. package/src/commands/tar.ts +28 -7
  255. package/src/commands/tee.ts +7 -1
  256. package/src/commands/test.ts +61 -26
  257. package/src/commands/tr.ts +3 -1
  258. package/src/commands/true.ts +17 -0
  259. package/src/commands/type.ts +6 -3
  260. package/src/commands/uname.ts +5 -1
  261. package/src/commands/uniq.ts +8 -2
  262. package/src/commands/uptime.ts +4 -1
  263. package/src/commands/wget.ts +51 -12
  264. package/src/commands/which.ts +5 -2
  265. package/src/commands/xargs.ts +11 -2
  266. package/src/index.ts +23 -24
  267. package/src/modules/linuxRootfs.ts +233 -30
  268. package/src/standalone-wo-sftp.ts +38 -0
  269. package/src/utils/expand.ts +238 -0
  270. package/src/utils/vfsDiff.ts +275 -0
  271. package/standalone-wo-sftp.js +507 -0
  272. package/standalone-wo-sftp.js.map +7 -0
  273. package/standalone.js +253 -191
  274. package/standalone.js.map +4 -4
  275. package/tests/bun-test-shim.ts +9 -1
  276. package/tests/command-helpers.test.ts +1 -5
  277. package/tests/new-features.test.ts +415 -5
  278. package/tests/parser-executor.test.ts +27 -27
  279. package/tests/sftp.test.ts +122 -42
  280. package/tests/users.test.ts +23 -5
  281. package/CHANGELOG.md +0 -150
@@ -244,15 +244,24 @@ class VirtualFileSystem extends EventEmitter {
244
244
  if (node.type === "file") {
245
245
  const f = node;
246
246
  return {
247
- type: "file", name, path: normalized, mode: f.mode,
248
- createdAt: f.createdAt, updatedAt: f.updatedAt,
249
- compressed: f.compressed, size: f.content.length,
247
+ type: "file",
248
+ name,
249
+ path: normalized,
250
+ mode: f.mode,
251
+ createdAt: f.createdAt,
252
+ updatedAt: f.updatedAt,
253
+ compressed: f.compressed,
254
+ size: f.content.length,
250
255
  };
251
256
  }
252
257
  const d = node;
253
258
  return {
254
- type: "directory", name, path: normalized, mode: d.mode,
255
- createdAt: d.createdAt, updatedAt: d.updatedAt,
259
+ type: "directory",
260
+ name,
261
+ path: normalized,
262
+ mode: d.mode,
263
+ createdAt: d.createdAt,
264
+ updatedAt: d.updatedAt,
256
265
  childrenCount: d.children.size,
257
266
  };
258
267
  }
@@ -287,7 +296,8 @@ class VirtualFileSystem extends EventEmitter {
287
296
  lines.push(`${connector}${name}`);
288
297
  if (child.type === "directory") {
289
298
  const sub = this.renderTreeLines(child, "")
290
- .split("\n").slice(1)
299
+ .split("\n")
300
+ .slice(1)
291
301
  .map((l) => `${nextPrefix}${l}`);
292
302
  lines.push(...sub);
293
303
  }
@@ -342,14 +352,19 @@ class VirtualFileSystem extends EventEmitter {
342
352
  : targetPath;
343
353
  const { parent, name } = getParentDirectory(this.root, normalizedLink, true, (p) => this.mkdirRecursive(p, 0o755));
344
354
  const symNode = {
345
- type: "file", name,
355
+ type: "file",
356
+ name,
346
357
  content: Buffer.from(normalizedTarget, "utf8"),
347
358
  mode: 0o120777,
348
359
  compressed: false,
349
- createdAt: new Date(), updatedAt: new Date(),
360
+ createdAt: new Date(),
361
+ updatedAt: new Date(),
350
362
  };
351
363
  parent.children.set(name, symNode);
352
- this.emit("symlink:create", { link: normalizedLink, target: normalizedTarget });
364
+ this.emit("symlink:create", {
365
+ link: normalizedLink,
366
+ target: normalizedTarget,
367
+ });
353
368
  }
354
369
  /** Returns true when the path is a symbolic link node. */
355
370
  isSymlink(targetPath) {
@@ -437,7 +452,9 @@ class VirtualFileSystem extends EventEmitter {
437
452
  : this.serializeDir(child));
438
453
  }
439
454
  return {
440
- type: "directory", name: dir.name, mode: dir.mode,
455
+ type: "directory",
456
+ name: dir.name,
457
+ mode: dir.mode,
441
458
  createdAt: dir.createdAt.toISOString(),
442
459
  updatedAt: dir.updatedAt.toISOString(),
443
460
  children,
@@ -445,7 +462,9 @@ class VirtualFileSystem extends EventEmitter {
445
462
  }
446
463
  serializeFile(file) {
447
464
  return {
448
- type: "file", name: file.name, mode: file.mode,
465
+ type: "file",
466
+ name: file.name,
467
+ mode: file.mode,
449
468
  createdAt: file.createdAt.toISOString(),
450
469
  updatedAt: file.updatedAt.toISOString(),
451
470
  compressed: file.compressed,
@@ -480,7 +499,9 @@ class VirtualFileSystem extends EventEmitter {
480
499
  }
481
500
  deserializeDir(snap, name) {
482
501
  const dir = {
483
- type: "directory", name, mode: snap.mode,
502
+ type: "directory",
503
+ name,
504
+ mode: snap.mode,
484
505
  createdAt: new Date(snap.createdAt),
485
506
  updatedAt: new Date(snap.updatedAt),
486
507
  children: new Map(),
@@ -489,7 +510,9 @@ class VirtualFileSystem extends EventEmitter {
489
510
  if (child.type === "file") {
490
511
  const f = child;
491
512
  dir.children.set(f.name, {
492
- type: "file", name: f.name, mode: f.mode,
513
+ type: "file",
514
+ name: f.name,
515
+ mode: f.mode,
493
516
  createdAt: new Date(f.createdAt),
494
517
  updatedAt: new Date(f.updatedAt),
495
518
  compressed: f.compressed,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/VirtualPackageManager/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/VirtualPackageManager/index.ts"],"names":[],"mappings":"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"}
@@ -8,9 +8,20 @@ const PACKAGE_REGISTRY = [
8
8
  shortDesc: "Vi IMproved",
9
9
  installedSizeKb: 3812,
10
10
  files: [
11
- { path: "/usr/bin/vim", content: "#!/bin/sh\necho 'vim: use nano for editing in this environment'\n", mode: 0o755 },
12
- { path: "/usr/bin/vi", content: "#!/bin/sh\nexec vim \"$@\"\n", mode: 0o755 },
13
- { path: "/usr/share/doc/vim/README", content: "Vim editor virtual package.\n" },
11
+ {
12
+ path: "/usr/bin/vim",
13
+ content: "#!/bin/sh\necho 'vim: use nano for editing in this environment'\n",
14
+ mode: 0o755,
15
+ },
16
+ {
17
+ path: "/usr/bin/vi",
18
+ content: '#!/bin/sh\nexec vim "$@"\n',
19
+ mode: 0o755,
20
+ },
21
+ {
22
+ path: "/usr/share/doc/vim/README",
23
+ content: "Vim editor — virtual package.\n",
24
+ },
14
25
  ],
15
26
  },
16
27
  {
@@ -21,8 +32,15 @@ const PACKAGE_REGISTRY = [
21
32
  shortDesc: "fast distributed version control system",
22
33
  installedSizeKb: 11240,
23
34
  files: [
24
- { path: "/usr/bin/git", content: "#!/bin/sh\necho 'git: virtual stub — no host access'\n", mode: 0o755 },
25
- { path: "/usr/share/doc/git/README.Debian", content: "Git virtual package for Fortune GNU/Linux.\n" },
35
+ {
36
+ path: "/usr/bin/git",
37
+ content: "#!/bin/sh\necho 'git: virtual stub — no host access'\n",
38
+ mode: 0o755,
39
+ },
40
+ {
41
+ path: "/usr/share/doc/git/README.Debian",
42
+ content: "Git virtual package for Fortune GNU/Linux.\n",
43
+ },
26
44
  ],
27
45
  },
28
46
  {
@@ -34,8 +52,16 @@ const PACKAGE_REGISTRY = [
34
52
  installedSizeKb: 512,
35
53
  depends: ["python3-minimal"],
36
54
  files: [
37
- { path: "/usr/bin/python3", content: "#!/bin/sh\necho 'Python 3.11.2 (virtual)'\n", mode: 0o755 },
38
- { path: "/usr/bin/python3.11", content: "#!/bin/sh\nexec python3 \"$@\"\n", mode: 0o755 },
55
+ {
56
+ path: "/usr/bin/python3",
57
+ content: "#!/bin/sh\necho 'Python 3.11.2 (virtual)'\n",
58
+ mode: 0o755,
59
+ },
60
+ {
61
+ path: "/usr/bin/python3.11",
62
+ content: '#!/bin/sh\nexec python3 "$@"\n',
63
+ mode: 0o755,
64
+ },
39
65
  { path: "/usr/lib/python3.11/.keep", content: "" },
40
66
  ],
41
67
  },
@@ -46,9 +72,7 @@ const PACKAGE_REGISTRY = [
46
72
  description: "Minimal subset of the Python language (version 3)",
47
73
  shortDesc: "minimal subset of Python language",
48
74
  installedSizeKb: 196,
49
- files: [
50
- { path: "/usr/lib/python3-minimal/.keep", content: "" },
51
- ],
75
+ files: [{ path: "/usr/lib/python3-minimal/.keep", content: "" }],
52
76
  },
53
77
  {
54
78
  name: "nodejs",
@@ -58,9 +82,20 @@ const PACKAGE_REGISTRY = [
58
82
  shortDesc: "Node.js JavaScript runtime",
59
83
  installedSizeKb: 15360,
60
84
  files: [
61
- { path: "/usr/bin/node", content: "#!/bin/sh\necho 'node v18.19.0 (virtual)'\n", mode: 0o755 },
62
- { path: "/usr/bin/nodejs", content: "#!/bin/sh\nexec node \"$@\"\n", mode: 0o755 },
63
- { path: "/usr/share/doc/nodejs/README", content: "Node.js virtual package.\n" },
85
+ {
86
+ path: "/usr/bin/node",
87
+ content: "#!/bin/sh\necho 'node v18.19.0 (virtual)'\n",
88
+ mode: 0o755,
89
+ },
90
+ {
91
+ path: "/usr/bin/nodejs",
92
+ content: '#!/bin/sh\nexec node "$@"\n',
93
+ mode: 0o755,
94
+ },
95
+ {
96
+ path: "/usr/share/doc/nodejs/README",
97
+ content: "Node.js virtual package.\n",
98
+ },
64
99
  ],
65
100
  },
66
101
  {
@@ -72,7 +107,16 @@ const PACKAGE_REGISTRY = [
72
107
  installedSizeKb: 9814,
73
108
  depends: ["nodejs"],
74
109
  files: [
75
- { path: "/usr/bin/npm", content: "#!/bin/sh\necho 'npm 9.2.0 (virtual)'\n", mode: 0o755 },
110
+ {
111
+ path: "/usr/bin/npm",
112
+ content: '#!/bin/sh\nexec builtin npm "$@"\n',
113
+ mode: 0o755,
114
+ },
115
+ {
116
+ path: "/usr/bin/npx",
117
+ content: '#!/bin/sh\nexec builtin npx "$@"\n',
118
+ mode: 0o755,
119
+ },
76
120
  ],
77
121
  },
78
122
  {
@@ -83,7 +127,11 @@ const PACKAGE_REGISTRY = [
83
127
  shortDesc: "command line tool for transferring data",
84
128
  installedSizeKb: 368,
85
129
  files: [
86
- { path: "/usr/bin/curl", content: "#!/bin/sh\nexec builtin curl \"$@\"\n", mode: 0o755 },
130
+ {
131
+ path: "/usr/bin/curl",
132
+ content: '#!/bin/sh\nexec builtin curl "$@"\n',
133
+ mode: 0o755,
134
+ },
87
135
  ],
88
136
  },
89
137
  {
@@ -94,7 +142,11 @@ const PACKAGE_REGISTRY = [
94
142
  shortDesc: "retrieves files from the web",
95
143
  installedSizeKb: 952,
96
144
  files: [
97
- { path: "/usr/bin/wget", content: "#!/bin/sh\nexec builtin wget \"$@\"\n", mode: 0o755 },
145
+ {
146
+ path: "/usr/bin/wget",
147
+ content: '#!/bin/sh\nexec builtin wget "$@"\n',
148
+ mode: 0o755,
149
+ },
98
150
  ],
99
151
  },
100
152
  {
@@ -105,7 +157,11 @@ const PACKAGE_REGISTRY = [
105
157
  shortDesc: "interactive process viewer",
106
158
  installedSizeKb: 412,
107
159
  files: [
108
- { path: "/usr/bin/htop", content: "#!/bin/sh\nexec builtin htop\n", mode: 0o755 },
160
+ {
161
+ path: "/usr/bin/htop",
162
+ content: "#!/bin/sh\nexec builtin htop\n",
163
+ mode: 0o755,
164
+ },
109
165
  ],
110
166
  },
111
167
  {
@@ -116,9 +172,20 @@ const PACKAGE_REGISTRY = [
116
172
  shortDesc: "secure shell (SSH) client",
117
173
  installedSizeKb: 4540,
118
174
  files: [
119
- { path: "/usr/bin/ssh", content: "#!/bin/sh\necho 'ssh: virtual stub'\n", mode: 0o755 },
120
- { path: "/usr/bin/ssh-keygen", content: "#!/bin/sh\necho 'ssh-keygen: virtual stub'\n", mode: 0o755 },
121
- { path: "/etc/ssh/ssh_config", content: "Host *\n StrictHostKeyChecking ask\n" },
175
+ {
176
+ path: "/usr/bin/ssh",
177
+ content: "#!/bin/sh\necho 'ssh: virtual stub'\n",
178
+ mode: 0o755,
179
+ },
180
+ {
181
+ path: "/usr/bin/ssh-keygen",
182
+ content: "#!/bin/sh\necho 'ssh-keygen: virtual stub'\n",
183
+ mode: 0o755,
184
+ },
185
+ {
186
+ path: "/etc/ssh/ssh_config",
187
+ content: "Host *\n StrictHostKeyChecking ask\n",
188
+ },
122
189
  ],
123
190
  },
124
191
  {
@@ -130,8 +197,15 @@ const PACKAGE_REGISTRY = [
130
197
  installedSizeKb: 1732,
131
198
  depends: ["openssh-client"],
132
199
  files: [
133
- { path: "/usr/sbin/sshd", content: "#!/bin/sh\necho 'sshd: virtual — server already running'\n", mode: 0o755 },
134
- { path: "/etc/ssh/sshd_config", content: "Port 22\nPermitRootLogin yes\nPasswordAuthentication yes\n" },
200
+ {
201
+ path: "/usr/sbin/sshd",
202
+ content: "#!/bin/sh\necho 'sshd: virtual — server already running'\n",
203
+ mode: 0o755,
204
+ },
205
+ {
206
+ path: "/etc/ssh/sshd_config",
207
+ content: "Port 22\nPermitRootLogin yes\nPasswordAuthentication yes\n",
208
+ },
135
209
  ],
136
210
  },
137
211
  {
@@ -142,9 +216,21 @@ const PACKAGE_REGISTRY = [
142
216
  shortDesc: "networking toolkit",
143
217
  installedSizeKb: 988,
144
218
  files: [
145
- { path: "/usr/bin/ifconfig", content: "#!/bin/sh\necho 'eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500'\necho ' inet 10.0.0.2 netmask 255.255.255.0 broadcast 10.0.0.255'\necho ' ether 02:42:0a:00:00:02 txqueuelen 0 (Ethernet)'\n", mode: 0o755 },
146
- { path: "/usr/bin/netstat", content: "#!/bin/sh\necho 'Active Internet connections (only servers)'\necho 'Proto Recv-Q Send-Q Local Address Foreign Address State'\n", mode: 0o755 },
147
- { path: "/usr/bin/route", content: "#!/bin/sh\necho 'Kernel IP routing table'\necho 'Destination Gateway Genmask Flags Metric Ref Use Iface'\necho '0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0'\n", mode: 0o755 },
219
+ {
220
+ path: "/usr/bin/ifconfig",
221
+ content: "#!/bin/sh\necho 'eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500'\necho ' inet 10.0.0.2 netmask 255.255.255.0 broadcast 10.0.0.255'\necho ' ether 02:42:0a:00:00:02 txqueuelen 0 (Ethernet)'\n",
222
+ mode: 0o755,
223
+ },
224
+ {
225
+ path: "/usr/bin/netstat",
226
+ content: "#!/bin/sh\necho 'Active Internet connections (only servers)'\necho 'Proto Recv-Q Send-Q Local Address Foreign Address State'\n",
227
+ mode: 0o755,
228
+ },
229
+ {
230
+ path: "/usr/bin/route",
231
+ content: "#!/bin/sh\necho 'Kernel IP routing table'\necho 'Destination Gateway Genmask Flags Metric Ref Use Iface'\necho '0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0'\n",
232
+ mode: 0o755,
233
+ },
148
234
  ],
149
235
  },
150
236
  {
@@ -155,7 +241,11 @@ const PACKAGE_REGISTRY = [
155
241
  shortDesc: "test reachability of network hosts",
156
242
  installedSizeKb: 164,
157
243
  files: [
158
- { path: "/usr/bin/ping", content: "#!/bin/sh\nexec builtin ping \"$@\"\n", mode: 0o755 },
244
+ {
245
+ path: "/usr/bin/ping",
246
+ content: '#!/bin/sh\nexec builtin ping "$@"\n',
247
+ mode: 0o755,
248
+ },
159
249
  ],
160
250
  },
161
251
  {
@@ -166,7 +256,11 @@ const PACKAGE_REGISTRY = [
166
256
  shortDesc: "command-line JSON processor",
167
257
  installedSizeKb: 296,
168
258
  files: [
169
- { path: "/usr/bin/jq", content: "#!/bin/sh\necho 'jq: virtual stub — pipe JSON here'\n", mode: 0o755 },
259
+ {
260
+ path: "/usr/bin/jq",
261
+ content: "#!/bin/sh\necho 'jq: virtual stub — pipe JSON here'\n",
262
+ mode: 0o755,
263
+ },
170
264
  ],
171
265
  },
172
266
  {
@@ -178,7 +272,10 @@ const PACKAGE_REGISTRY = [
178
272
  installedSizeKb: 12,
179
273
  depends: ["gcc", "g++", "make"],
180
274
  files: [
181
- { path: "/usr/share/doc/build-essential/README", content: "Build-essential virtual meta-package.\n" },
275
+ {
276
+ path: "/usr/share/doc/build-essential/README",
277
+ content: "Build-essential virtual meta-package.\n",
278
+ },
182
279
  ],
183
280
  },
184
281
  {
@@ -189,8 +286,16 @@ const PACKAGE_REGISTRY = [
189
286
  shortDesc: "GNU C compiler",
190
287
  installedSizeKb: 24448,
191
288
  files: [
192
- { path: "/usr/bin/gcc", content: "#!/bin/sh\necho 'gcc (Fortune GNU/Linux) 12.2.0 (virtual)'\n", mode: 0o755 },
193
- { path: "/usr/bin/gcc-12", content: "#!/bin/sh\nexec gcc \"$@\"\n", mode: 0o755 },
289
+ {
290
+ path: "/usr/bin/gcc",
291
+ content: "#!/bin/sh\necho 'gcc (Fortune GNU/Linux) 12.2.0 (virtual)'\n",
292
+ mode: 0o755,
293
+ },
294
+ {
295
+ path: "/usr/bin/gcc-12",
296
+ content: '#!/bin/sh\nexec gcc "$@"\n',
297
+ mode: 0o755,
298
+ },
194
299
  ],
195
300
  },
196
301
  {
@@ -202,7 +307,11 @@ const PACKAGE_REGISTRY = [
202
307
  installedSizeKb: 1024,
203
308
  depends: ["gcc"],
204
309
  files: [
205
- { path: "/usr/bin/g++", content: "#!/bin/sh\necho 'g++ (Fortune GNU/Linux) 12.2.0 (virtual)'\n", mode: 0o755 },
310
+ {
311
+ path: "/usr/bin/g++",
312
+ content: "#!/bin/sh\necho 'g++ (Fortune GNU/Linux) 12.2.0 (virtual)'\n",
313
+ mode: 0o755,
314
+ },
206
315
  ],
207
316
  },
208
317
  {
@@ -213,7 +322,11 @@ const PACKAGE_REGISTRY = [
213
322
  shortDesc: "build utility",
214
323
  installedSizeKb: 504,
215
324
  files: [
216
- { path: "/usr/bin/make", content: "#!/bin/sh\necho 'make: *** No targets specified and no makefile found. Stop.'\nexit 2\n", mode: 0o755 },
325
+ {
326
+ path: "/usr/bin/make",
327
+ content: "#!/bin/sh\necho 'make: *** No targets specified and no makefile found. Stop.'\nexit 2\n",
328
+ mode: 0o755,
329
+ },
217
330
  ],
218
331
  },
219
332
  {
@@ -224,7 +337,7 @@ const PACKAGE_REGISTRY = [
224
337
  shortDesc: "pager program",
225
338
  installedSizeKb: 328,
226
339
  files: [
227
- { path: "/usr/bin/less", content: "#!/bin/sh\ncat \"$@\"\n", mode: 0o755 },
340
+ { path: "/usr/bin/less", content: '#!/bin/sh\ncat "$@"\n', mode: 0o755 },
228
341
  ],
229
342
  },
230
343
  {
@@ -235,7 +348,11 @@ const PACKAGE_REGISTRY = [
235
348
  shortDesc: "de-archiver for .zip files",
236
349
  installedSizeKb: 464,
237
350
  files: [
238
- { path: "/usr/bin/unzip", content: "#!/bin/sh\necho 'unzip: virtual stub'\n", mode: 0o755 },
351
+ {
352
+ path: "/usr/bin/unzip",
353
+ content: "#!/bin/sh\necho 'unzip: virtual stub'\n",
354
+ mode: 0o755,
355
+ },
239
356
  ],
240
357
  },
241
358
  {
@@ -246,7 +363,11 @@ const PACKAGE_REGISTRY = [
246
363
  shortDesc: "fast remote file copy program",
247
364
  installedSizeKb: 716,
248
365
  files: [
249
- { path: "/usr/bin/rsync", content: "#!/bin/sh\necho 'rsync: virtual stub'\n", mode: 0o755 },
366
+ {
367
+ path: "/usr/bin/rsync",
368
+ content: "#!/bin/sh\necho 'rsync: virtual stub'\n",
369
+ mode: 0o755,
370
+ },
250
371
  ],
251
372
  },
252
373
  {
@@ -257,7 +378,11 @@ const PACKAGE_REGISTRY = [
257
378
  shortDesc: "terminal multiplexer",
258
379
  installedSizeKb: 812,
259
380
  files: [
260
- { path: "/usr/bin/tmux", content: "#!/bin/sh\necho 'tmux: terminal multiplexer (virtual stub)'\n", mode: 0o755 },
381
+ {
382
+ path: "/usr/bin/tmux",
383
+ content: "#!/bin/sh\necho 'tmux: terminal multiplexer (virtual stub)'\n",
384
+ mode: 0o755,
385
+ },
261
386
  ],
262
387
  },
263
388
  {
@@ -268,7 +393,11 @@ const PACKAGE_REGISTRY = [
268
393
  shortDesc: "list files in tree format",
269
394
  installedSizeKb: 108,
270
395
  files: [
271
- { path: "/usr/bin/tree", content: "#!/bin/sh\nexec builtin tree \"$@\"\n", mode: 0o755 },
396
+ {
397
+ path: "/usr/bin/tree",
398
+ content: '#!/bin/sh\nexec builtin tree "$@"\n',
399
+ mode: 0o755,
400
+ },
272
401
  ],
273
402
  },
274
403
  {
@@ -299,7 +428,10 @@ const PACKAGE_REGISTRY = [
299
428
  installedSizeKb: 16484,
300
429
  files: [
301
430
  { path: "/etc/locale.gen", content: "en_US.UTF-8 UTF-8\n" },
302
- { path: "/etc/default/locale", content: "LANG=en_US.UTF-8\nLANGUAGE=en_US:en\n" },
431
+ {
432
+ path: "/etc/default/locale",
433
+ content: "LANG=en_US.UTF-8\nLANGUAGE=en_US:en\n",
434
+ },
303
435
  ],
304
436
  },
305
437
  {
@@ -310,8 +442,15 @@ const PACKAGE_REGISTRY = [
310
442
  shortDesc: "super user privilege execution",
311
443
  installedSizeKb: 2304,
312
444
  files: [
313
- { path: "/usr/bin/sudo", content: "#!/bin/sh\nexec builtin sudo \"$@\"\n", mode: 0o755 },
314
- { path: "/etc/sudoers", content: "root ALL=(ALL:ALL) ALL\n%sudo ALL=(ALL:ALL) ALL\n" },
445
+ {
446
+ path: "/usr/bin/sudo",
447
+ content: '#!/bin/sh\nexec builtin sudo "$@"\n',
448
+ mode: 0o755,
449
+ },
450
+ {
451
+ path: "/etc/sudoers",
452
+ content: "root ALL=(ALL:ALL) ALL\n%sudo ALL=(ALL:ALL) ALL\n",
453
+ },
315
454
  ],
316
455
  },
317
456
  {
@@ -322,8 +461,16 @@ const PACKAGE_REGISTRY = [
322
461
  shortDesc: "system and service manager",
323
462
  installedSizeKb: 26624,
324
463
  files: [
325
- { path: "/usr/bin/systemctl", content: "#!/bin/sh\necho 'systemd is not running in this virtual container.'\nexit 1\n", mode: 0o755 },
326
- { path: "/usr/bin/journalctl", content: "#!/bin/sh\necho 'journalctl: virtual stub'\n", mode: 0o755 },
464
+ {
465
+ path: "/usr/bin/systemctl",
466
+ content: "#!/bin/sh\necho 'systemd is not running in this virtual container.'\nexit 1\n",
467
+ mode: 0o755,
468
+ },
469
+ {
470
+ path: "/usr/bin/journalctl",
471
+ content: "#!/bin/sh\necho 'journalctl: virtual stub'\n",
472
+ mode: 0o755,
473
+ },
327
474
  ],
328
475
  },
329
476
  ];
@@ -531,7 +678,9 @@ export class VirtualPackageManager {
531
678
  }
532
679
  if (toInstall.length === 0) {
533
680
  return {
534
- output: names.map((n) => `${n} is already the newest version.`).join("\n"),
681
+ output: names
682
+ .map((n) => `${n} is already the newest version.`)
683
+ .join("\n"),
535
684
  exitCode: 0,
536
685
  };
537
686
  }
@@ -2,8 +2,8 @@ import { EventEmitter } from "node:events";
2
2
  import type { CommandContext, CommandResult } from "../types/commands";
3
3
  import type { ShellStream } from "../types/streams";
4
4
  import VirtualFileSystem, { type VfsOptions } from "../VirtualFileSystem";
5
- import { VirtualUserManager } from "../VirtualUserManager";
6
5
  import { VirtualPackageManager } from "../VirtualPackageManager";
6
+ import { VirtualUserManager } from "../VirtualUserManager";
7
7
  /**
8
8
  * Virtual machine identity strings surfaced by system-info commands
9
9
  * (`uname`, `neofetch`, `lsb_release`, `/proc/version`, `/etc/os-release`).
@@ -120,13 +120,19 @@ declare class VirtualShell extends EventEmitter {
120
120
  * Refreshes the `/proc` virtual filesystem with current system state.
121
121
  *
122
122
  * Updates `/proc/uptime`, `/proc/meminfo`, `/proc/cpuinfo`,
123
- * `/proc/version`, and `/proc/loadavg` from live host data.
123
+ * `/proc/version`, `/proc/loadavg`, `/proc/self`, and per-session
124
+ * `/proc/<pid>` entries from live session and host data.
124
125
  *
125
126
  * Called automatically during `bootstrapLinuxRootfs`. Call again before
126
- * reading `/proc` files for up-to-date values (e.g. before `neofetch`
127
- * or `free` in long-running processes).
127
+ * reading `/proc` files for up-to-date values.
128
128
  */
129
129
  refreshProcFs(): void;
130
+ /**
131
+ * Updates only the session-dependent `/proc` entries (`/proc/<pid>`,
132
+ * `/proc/self`). Cheaper than a full `refreshProcFs()` — call this
133
+ * whenever a session is registered or unregistered.
134
+ */
135
+ refreshProcSessions(): void;
130
136
  /**
131
137
  * Syncs `/etc/passwd`, `/etc/group`, and `/etc/shadow` from the current
132
138
  * `VirtualUserManager` state.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/VirtualShell/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,iBAAiB,EAAE,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAIjE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,eAAe;IAC/B,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,EAAE,EAAE,MAAM,CAAC;IACX,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;CACb;AAmBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,cAAM,YAAa,SAAQ,YAAY;IACtC,mEAAmE;IACnE,GAAG,EAAE,iBAAiB,CAAC;IACvB,0EAA0E;IAC1E,KAAK,EAAE,kBAAkB,CAAC;IAC1B,wEAAwE;IACxE,cAAc,EAAE,qBAAqB,CAAC;IACtC,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,UAAU,EAAE,eAAe,CAAC;IAC5B,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,WAAW,CAAgB;IAEnC;;;;;;OAMG;gBAEF,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,eAAe,EAC5B,UAAU,CAAC,EAAE,UAAU;IA+BxB;;;OAGG;IACU,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/C;;;;;;OAMG;IACH,UAAU,CACT,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EAAE,EAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,GACvE,IAAI;IASP;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAMrE;;;;;;;;;;;;;OAaG;IACH,uBAAuB,CACtB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAC1C,IAAI;IAgBP;;;;;;;;;OASG;IACI,aAAa,IAAI,IAAI;IAI5B;;;;;;;OAOG;IACI,UAAU,IAAI,IAAI;IAIzB;;;;OAIG;IACI,MAAM,IAAI,iBAAiB,GAAG,IAAI;IAIzC;;;;OAIG;IACI,QAAQ,IAAI,kBAAkB,GAAG,IAAI;IAI5C;;;;OAIG;IACI,WAAW,IAAI,MAAM;IAI5B;;;;;;OAMG;IACI,eAAe,CACrB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GAAG,MAAM,GACtB,IAAI;CAKP;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/VirtualShell/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ3C,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,iBAAiB,EAAE,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,eAAe;IAC/B,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,EAAE,EAAE,MAAM,CAAC;IACX,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;CACb;AAmBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,cAAM,YAAa,SAAQ,YAAY;IACtC,mEAAmE;IACnE,GAAG,EAAE,iBAAiB,CAAC;IACvB,0EAA0E;IAC1E,KAAK,EAAE,kBAAkB,CAAC;IAC1B,wEAAwE;IACxE,cAAc,EAAE,qBAAqB,CAAC;IACtC,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,UAAU,EAAE,eAAe,CAAC;IAC5B,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,WAAW,CAAgB;IAEnC;;;;;;OAMG;gBAEF,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,eAAe,EAC5B,UAAU,CAAC,EAAE,UAAU;IA+BxB;;;OAGG;IACU,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/C;;;;;;OAMG;IACH,UAAU,CACT,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EAAE,EAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,GACvE,IAAI;IASP;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAMrE;;;;;;;;;;;;;OAaG;IACH,uBAAuB,CACtB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAC1C,IAAI;IAkBP;;;;;;;;;OASG;IACI,aAAa,IAAI,IAAI;IAU5B;;;;OAIG;IACI,mBAAmB,IAAI,IAAI;IAUlC;;;;;;;OAOG;IACI,UAAU,IAAI,IAAI;IAIzB;;;;OAIG;IACI,MAAM,IAAI,iBAAiB,GAAG,IAAI;IAIzC;;;;OAIG;IACI,QAAQ,IAAI,kBAAkB,GAAG,IAAI;IAI5C;;;;OAIG;IACI,WAAW,IAAI,MAAM;IAI5B;;;;;;OAMG;IACI,eAAe,CACrB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GAAG,MAAM,GACtB,IAAI;CAKP;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -1,10 +1,11 @@
1
1
  import { EventEmitter } from "node:events";
2
- import { createCustomCommand, registerCommand, runCommand } from "../commands";
2
+ import { createCustomCommand, registerCommand } from "../commands/registry";
3
+ import { runCommand } from "../commands/runtime";
4
+ import { bootstrapLinuxRootfs, refreshProc, syncEtcPasswd, } from "../modules/linuxRootfs";
3
5
  import { createPerfLogger } from "../utils/perfLogger";
4
6
  import VirtualFileSystem, {} from "../VirtualFileSystem";
5
- import { VirtualUserManager } from "../VirtualUserManager";
6
7
  import { VirtualPackageManager } from "../VirtualPackageManager";
7
- import { bootstrapLinuxRootfs, refreshProc, syncEtcPasswd } from "../modules/linuxRootfs";
8
+ import { VirtualUserManager } from "../VirtualUserManager";
8
9
  import { startShell } from "./shell";
9
10
  const defaultShellProperties = {
10
11
  kernel: "1.0.0+itsrealfortune+1-amd64",
@@ -147,19 +148,29 @@ class VirtualShell extends EventEmitter {
147
148
  // Interactive shell logic
148
149
  this.emit("session:start", { user: authUser, sessionId, remoteAddress });
149
150
  startShell(this.properties, stream, authUser, this.hostname, sessionId, remoteAddress, terminalSize, this);
151
+ // Refresh /proc/<pid> and /proc/self after session is registered
152
+ this.refreshProcSessions();
150
153
  }
151
154
  /**
152
155
  * Refreshes the `/proc` virtual filesystem with current system state.
153
156
  *
154
157
  * Updates `/proc/uptime`, `/proc/meminfo`, `/proc/cpuinfo`,
155
- * `/proc/version`, and `/proc/loadavg` from live host data.
158
+ * `/proc/version`, `/proc/loadavg`, `/proc/self`, and per-session
159
+ * `/proc/<pid>` entries from live session and host data.
156
160
  *
157
161
  * Called automatically during `bootstrapLinuxRootfs`. Call again before
158
- * reading `/proc` files for up-to-date values (e.g. before `neofetch`
159
- * or `free` in long-running processes).
162
+ * reading `/proc` files for up-to-date values.
160
163
  */
161
164
  refreshProcFs() {
162
- refreshProc(this.vfs, this.properties, this.hostname, this.startTime);
165
+ refreshProc(this.vfs, this.properties, this.hostname, this.startTime, this.users.listActiveSessions());
166
+ }
167
+ /**
168
+ * Updates only the session-dependent `/proc` entries (`/proc/<pid>`,
169
+ * `/proc/self`). Cheaper than a full `refreshProcFs()` — call this
170
+ * whenever a session is registered or unregistered.
171
+ */
172
+ refreshProcSessions() {
173
+ refreshProc(this.vfs, this.properties, this.hostname, this.startTime, this.users.listActiveSessions());
163
174
  }
164
175
  /**
165
176
  * Syncs `/etc/passwd`, `/etc/group`, and `/etc/shadow` from the current
@@ -1 +1 @@
1
- {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/VirtualShell/shell.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,GAAG,CAAC;AAOvD,OAAO,EAGN,KAAK,YAAY,EAEjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAmBpD,wBAAgB,UAAU,CACzB,UAAU,EAAE,eAAe,EAC3B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,aAAa,oBAAY,EACzB,YAAY,EAAE,YAAY,YAAyB,EACnD,KAAK,EAAE,YAAY,GACjB,IAAI,CA8mBN"}
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/VirtualShell/shell.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,GAAG,CAAC;AAOvD,OAAO,EAGN,KAAK,YAAY,EAEjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAmBpD,wBAAgB,UAAU,CACzB,UAAU,EAAE,eAAe,EAC3B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,aAAa,oBAAY,EACzB,YAAY,EAAE,YAAY,YAAyB,EACnD,KAAK,EAAE,YAAY,GACjB,IAAI,CAkoBN"}
@@ -35,7 +35,9 @@ export function startShell(properties, stream, authUser, hostname, sessionId, re
35
35
  await runCommand(l, authUser, hostname, "shell", cwd, shell, undefined, shellEnv);
36
36
  }
37
37
  }
38
- catch { /* ignore bashrc errors */ }
38
+ catch {
39
+ /* ignore bashrc errors */
40
+ }
39
41
  }
40
42
  })();
41
43
  function renderLine() {
@@ -1 +1 @@
1
- {"version":3,"file":"shellParser.d.ts","sourceRoot":"","sources":["../../src/VirtualShell/shellParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,EAAwB,MAAM,mBAAmB,CAAC;AAIjG;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUpD;AAED,0DAA0D;AAC1D,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAS7D;AAID;;;;;GAKG;AACH,wBAAgB,WAAW,CAC1B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,QAAQ,EAAE,MAAM,EAChB,YAAY,SAAI,GACd,MAAM,CA4BR;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAKvE"}
1
+ {"version":3,"file":"shellParser.d.ts","sourceRoot":"","sources":["../../src/VirtualShell/shellParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,QAAQ,EAER,MAAM,EAGN,MAAM,mBAAmB,CAAC;AAI3B;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUpD;AAED,0DAA0D;AAC1D,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAS7D;AAID;;;;;GAKG;AACH,wBAAgB,WAAW,CAC1B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,QAAQ,EAAE,MAAM,EAChB,YAAY,SAAI,GACd,MAAM,CA8BR;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAKvE"}