@lifo-sh/core 0.4.6 → 0.5.5

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 (202) hide show
  1. package/README.md +7 -3
  2. package/dist/{awk-BFrGImnt.js → awk-Bhywv7pU.js} +1 -1
  3. package/dist/base64-ncdb27yL.js +72 -0
  4. package/dist/{basename-MGz8cBxd.js → basename-D-_r1VN_.js} +1 -1
  5. package/dist/browser-Bymgnrli.js +35 -0
  6. package/dist/{cat-BnEyWWFr.js → cat-DSe6FHma.js} +1 -1
  7. package/dist/{chmod-CdrI3hZV.js → chmod-BZIlNR2-.js} +1 -1
  8. package/dist/{chown-7yY3iC6J.js → chown-BAOEOuMn.js} +1 -1
  9. package/dist/commands/net/curl.d.ts +2 -2
  10. package/dist/commands/net/curl.d.ts.map +1 -1
  11. package/dist/commands/net/forward.d.ts +14 -0
  12. package/dist/commands/net/forward.d.ts.map +1 -0
  13. package/dist/commands/net/host.d.ts +14 -0
  14. package/dist/commands/net/host.d.ts.map +1 -0
  15. package/dist/commands/net/ifconfig.d.ts +8 -0
  16. package/dist/commands/net/ifconfig.d.ts.map +1 -0
  17. package/dist/commands/net/ip.d.ts +14 -0
  18. package/dist/commands/net/ip.d.ts.map +1 -0
  19. package/dist/commands/net/netstat.d.ts +8 -0
  20. package/dist/commands/net/netstat.d.ts.map +1 -0
  21. package/dist/commands/net/ports.d.ts +8 -0
  22. package/dist/commands/net/ports.d.ts.map +1 -0
  23. package/dist/commands/net/route.d.ts +8 -0
  24. package/dist/commands/net/route.d.ts.map +1 -0
  25. package/dist/commands/net/test-registry.d.ts +8 -0
  26. package/dist/commands/net/test-registry.d.ts.map +1 -0
  27. package/dist/commands/net/tunnel-v2.d.ts +4 -0
  28. package/dist/commands/net/tunnel-v2.d.ts.map +1 -0
  29. package/dist/commands/net/tunnel.d.ts +6 -0
  30. package/dist/commands/net/tunnel.d.ts.map +1 -0
  31. package/dist/commands/registry.d.ts +1 -0
  32. package/dist/commands/registry.d.ts.map +1 -1
  33. package/dist/commands/system/fastfetch.d.ts +4 -0
  34. package/dist/commands/system/fastfetch.d.ts.map +1 -0
  35. package/dist/commands/system/kill.d.ts +2 -2
  36. package/dist/commands/system/kill.d.ts.map +1 -1
  37. package/dist/commands/system/lifo.d.ts +17 -0
  38. package/dist/commands/system/lifo.d.ts.map +1 -1
  39. package/dist/commands/system/logout.d.ts +5 -0
  40. package/dist/commands/system/logout.d.ts.map +1 -0
  41. package/dist/commands/system/man.d.ts.map +1 -1
  42. package/dist/commands/system/newtab.d.ts +8 -0
  43. package/dist/commands/system/newtab.d.ts.map +1 -0
  44. package/dist/commands/system/node.d.ts +2 -2
  45. package/dist/commands/system/node.d.ts.map +1 -1
  46. package/dist/commands/system/npm.d.ts +20 -7
  47. package/dist/commands/system/npm.d.ts.map +1 -1
  48. package/dist/commands/system/ps.d.ts +3 -2
  49. package/dist/commands/system/ps.d.ts.map +1 -1
  50. package/dist/commands/system/sha256sum.d.ts +4 -0
  51. package/dist/commands/system/sha256sum.d.ts.map +1 -0
  52. package/dist/commands/system/sl.d.ts +4 -0
  53. package/dist/commands/system/sl.d.ts.map +1 -0
  54. package/dist/commands/system/systemctl.d.ts +4 -0
  55. package/dist/commands/system/systemctl.d.ts.map +1 -0
  56. package/dist/commands/system/top.d.ts +2 -2
  57. package/dist/commands/system/top.d.ts.map +1 -1
  58. package/dist/commands/system/whoami.d.ts.map +1 -1
  59. package/dist/commands/text/base64.d.ts +4 -0
  60. package/dist/commands/text/base64.d.ts.map +1 -0
  61. package/dist/commands/text/less.d.ts +4 -0
  62. package/dist/commands/text/less.d.ts.map +1 -0
  63. package/dist/commands/text/nano.d.ts +4 -0
  64. package/dist/commands/text/nano.d.ts.map +1 -0
  65. package/dist/commands/text/seq.d.ts +4 -0
  66. package/dist/commands/text/seq.d.ts.map +1 -0
  67. package/dist/commands/text/strings.d.ts +4 -0
  68. package/dist/commands/text/strings.d.ts.map +1 -0
  69. package/dist/commands/text/tac.d.ts +4 -0
  70. package/dist/commands/text/tac.d.ts.map +1 -0
  71. package/dist/commands/types.d.ts +1 -0
  72. package/dist/commands/types.d.ts.map +1 -1
  73. package/dist/{cp-7dOXCu3Q.js → cp-DOXzF2_m.js} +1 -1
  74. package/dist/{cut-vn4vxL9L.js → cut-B4rQvMRc.js} +1 -1
  75. package/dist/{diff-DnKPewP-.js → diff-BndHU0Ne.js} +1 -1
  76. package/dist/{dirname-B3ciBZhS.js → dirname-wtPE8QZ6.js} +1 -1
  77. package/dist/{du-i2qiYYnL.js → du-BLkl3BkN.js} +1 -1
  78. package/dist/fastfetch-aPM9Z3ym.js +310 -0
  79. package/dist/{file-Dd6iLk05.js → file-DfmI5Gyk.js} +1 -1
  80. package/dist/{find-Cz4GdaPT.js → find-Wdkys9OU.js} +1 -1
  81. package/dist/{grep-DYSAPbxr.js → grep-xmx3I05f.js} +1 -1
  82. package/dist/{gunzip-BHAbNGHO.js → gunzip-Dbr2fm5t.js} +1 -1
  83. package/dist/{gzip-JLrrHn6u.js → gzip-D1GwSnNe.js} +1 -1
  84. package/dist/{head-bFamSv7p.js → head-DUXuKw3m.js} +1 -1
  85. package/dist/index-Djm2onjx.js +13915 -0
  86. package/dist/index.d.ts +28 -2
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +90 -65
  89. package/dist/kernel/ServiceManager.d.ts +51 -0
  90. package/dist/kernel/ServiceManager.d.ts.map +1 -0
  91. package/dist/kernel/index.d.ts +11 -0
  92. package/dist/kernel/index.d.ts.map +1 -1
  93. package/dist/kernel/network/Bridge.d.ts +110 -0
  94. package/dist/kernel/network/Bridge.d.ts.map +1 -0
  95. package/dist/kernel/network/DNSResolver.d.ts +55 -0
  96. package/dist/kernel/network/DNSResolver.d.ts.map +1 -0
  97. package/dist/kernel/network/NetworkInterface.d.ts +83 -0
  98. package/dist/kernel/network/NetworkInterface.d.ts.map +1 -0
  99. package/dist/kernel/network/NetworkNamespace.d.ts +98 -0
  100. package/dist/kernel/network/NetworkNamespace.d.ts.map +1 -0
  101. package/dist/kernel/network/NetworkStack.d.ts +178 -0
  102. package/dist/kernel/network/NetworkStack.d.ts.map +1 -0
  103. package/dist/kernel/network/NetworkStack.example.d.ts +8 -0
  104. package/dist/kernel/network/NetworkStack.example.d.ts.map +1 -0
  105. package/dist/kernel/network/NetworkStack.test.d.ts +2 -0
  106. package/dist/kernel/network/NetworkStack.test.d.ts.map +1 -0
  107. package/dist/kernel/network/PortBridge.d.ts +49 -0
  108. package/dist/kernel/network/PortBridge.d.ts.map +1 -0
  109. package/dist/kernel/network/RoutingTable.d.ts +55 -0
  110. package/dist/kernel/network/RoutingTable.d.ts.map +1 -0
  111. package/dist/kernel/network/Socket.d.ts +65 -0
  112. package/dist/kernel/network/Socket.d.ts.map +1 -0
  113. package/dist/kernel/network/index.d.ts +11 -0
  114. package/dist/kernel/network/index.d.ts.map +1 -0
  115. package/dist/kernel/network/tunnel/BaseTunnel.d.ts +55 -0
  116. package/dist/kernel/network/tunnel/BaseTunnel.d.ts.map +1 -0
  117. package/dist/kernel/network/tunnel/VETHPair.d.ts +71 -0
  118. package/dist/kernel/network/tunnel/VETHPair.d.ts.map +1 -0
  119. package/dist/kernel/network/tunnel/WebSocketTunnel.d.ts +89 -0
  120. package/dist/kernel/network/tunnel/WebSocketTunnel.d.ts.map +1 -0
  121. package/dist/kernel/network/types.d.ts +159 -0
  122. package/dist/kernel/network/types.d.ts.map +1 -0
  123. package/dist/kernel/storage/ContentStore.d.ts +3 -1
  124. package/dist/kernel/storage/ContentStore.d.ts.map +1 -1
  125. package/dist/kernel/unit-parser.d.ts +22 -0
  126. package/dist/kernel/unit-parser.d.ts.map +1 -0
  127. package/dist/less-VW-Lb-t9.js +230 -0
  128. package/dist/{ls-BSsn2qVd.js → ls-DjuSFYCA.js} +1 -1
  129. package/dist/{man-CJ5pI0_W.js → man-Dg26tZ-a.js} +19 -6
  130. package/dist/{mkdir-CF_ugDtu.js → mkdir-qMgrbMfK.js} +1 -1
  131. package/dist/{mktemp-CaEiJi87.js → mktemp-BNrdUgqA.js} +1 -1
  132. package/dist/{mv-BSS_QQM-.js → mv-DxovuvmA.js} +1 -1
  133. package/dist/nano-CVa6vpFX.js +304 -0
  134. package/dist/{nl-D30ka89P.js → nl-E4qmf3dZ.js} +1 -1
  135. package/dist/node-compat/crypto.d.ts +8 -1
  136. package/dist/node-compat/crypto.d.ts.map +1 -1
  137. package/dist/node-compat/dns.d.ts +117 -0
  138. package/dist/node-compat/dns.d.ts.map +1 -0
  139. package/dist/node-compat/esbuild.d.ts +10 -0
  140. package/dist/node-compat/esbuild.d.ts.map +1 -0
  141. package/dist/node-compat/fs.d.ts +25 -5
  142. package/dist/node-compat/fs.d.ts.map +1 -1
  143. package/dist/node-compat/http.d.ts +54 -9
  144. package/dist/node-compat/http.d.ts.map +1 -1
  145. package/dist/node-compat/index.d.ts.map +1 -1
  146. package/dist/node-compat/module.d.ts +55 -0
  147. package/dist/node-compat/module.d.ts.map +1 -0
  148. package/dist/node-compat/path.d.ts +28 -0
  149. package/dist/node-compat/path.d.ts.map +1 -1
  150. package/dist/node-compat/process.d.ts +67 -2
  151. package/dist/node-compat/process.d.ts.map +1 -1
  152. package/dist/node-compat/readline.d.ts +79 -0
  153. package/dist/node-compat/readline.d.ts.map +1 -0
  154. package/dist/node-compat/rimraf.d.ts +23 -0
  155. package/dist/node-compat/rimraf.d.ts.map +1 -0
  156. package/dist/node-compat/tty.d.ts +32 -0
  157. package/dist/node-compat/tty.d.ts.map +1 -0
  158. package/dist/node-compat/url.d.ts +4 -0
  159. package/dist/node-compat/url.d.ts.map +1 -1
  160. package/dist/node-compat/util.d.ts +21 -1
  161. package/dist/node-compat/util.d.ts.map +1 -1
  162. package/dist/{realpath-BWqrTa-J.js → realpath-BaYc6QSr.js} +1 -1
  163. package/dist/{rev-Cfja5xbl.js → rev-CtqOEUEH.js} +1 -1
  164. package/dist/{rm-DUR35EZn.js → rm-DtLSFhWn.js} +1 -1
  165. package/dist/{rmdir-DXjx17-Z.js → rmdir-k65U0Fef.js} +1 -1
  166. package/dist/sandbox/Sandbox.d.ts.map +1 -1
  167. package/dist/sandbox/types.d.ts +2 -2
  168. package/dist/sandbox/types.d.ts.map +1 -1
  169. package/dist/{sed-YKJ5wcuu.js → sed-BpypU_CO.js} +1 -1
  170. package/dist/seq-B01YKIbO.js +37 -0
  171. package/dist/sha256sum-x-mlDY9n.js +64 -0
  172. package/dist/shell/ProcessRegistry.d.ts +144 -0
  173. package/dist/shell/ProcessRegistry.d.ts.map +1 -0
  174. package/dist/shell/ProcessRegistry.example.d.ts +8 -0
  175. package/dist/shell/ProcessRegistry.example.d.ts.map +1 -0
  176. package/dist/shell/ProcessRegistry.test.d.ts +2 -0
  177. package/dist/shell/ProcessRegistry.test.d.ts.map +1 -0
  178. package/dist/shell/Shell.d.ts +10 -2
  179. package/dist/shell/Shell.d.ts.map +1 -1
  180. package/dist/shell/interpreter.d.ts +4 -0
  181. package/dist/shell/interpreter.d.ts.map +1 -1
  182. package/dist/shell/terminal-stdin.d.ts +4 -0
  183. package/dist/shell/terminal-stdin.d.ts.map +1 -1
  184. package/dist/sl-Dv4iPBN6.js +138 -0
  185. package/dist/{sort-C2sQ841N.js → sort-C1n7kWmJ.js} +1 -1
  186. package/dist/{stat-gLLpq3JZ.js → stat-Co_5pgto.js} +1 -1
  187. package/dist/strings-tFgYFAvp.js +42 -0
  188. package/dist/tac-BQvVvnoM.js +31 -0
  189. package/dist/{tail-FnC8M40k.js → tail-CLWVwfZD.js} +1 -1
  190. package/dist/{tar-tfiT1iFt.js → tar-wo7UUSK5.js} +1 -1
  191. package/dist/{tee-CoymtuKa.js → tee-DlyeS1Yd.js} +1 -1
  192. package/dist/{touch-C4pyouV6.js → touch-DVzPgqSy.js} +1 -1
  193. package/dist/{tree-DfPczgli.js → tree-DHBQhXD7.js} +1 -1
  194. package/dist/{uniq-Dhsoj7Lk.js → uniq-CmmP6k_t.js} +1 -1
  195. package/dist/{unzip-CqIKZ8NK.js → unzip-BIOvH2jT.js} +1 -1
  196. package/dist/{wc-DBPO6xRf.js → wc-DfI1Q3lo.js} +1 -1
  197. package/dist/{wget-CYImxeOz.js → wget-Dd25MxcO.js} +1 -1
  198. package/dist/whoami-C_q-p-Vo.js +25 -0
  199. package/dist/{zip-TPdwPkrA.js → zip-Cc3IoNSB.js} +1 -1
  200. package/package.json +6 -3
  201. package/dist/index-BVIfyOAv.js +0 -8578
  202. package/dist/whoami-B1237V5e.js +0 -8
@@ -1,4 +1,4 @@
1
- import { r as c, i as g, c as h, V as m } from "./index-BVIfyOAv.js";
1
+ import { r as c, i as g, c as h, V as m } from "./index-Djm2onjx.js";
2
2
  function w(e) {
3
3
  if (e === "d")
4
4
  return { type: "d" };
@@ -0,0 +1,37 @@
1
+ const p = async (r) => {
2
+ const s = r.args;
3
+ if (s.length === 0)
4
+ return r.stderr.write(`Usage: seq [-s SEP] [FIRST [INCR]] LAST
5
+ `), r.stderr.write(`Print a sequence of numbers.
6
+ `), 1;
7
+ let i = 1, n = 1, a, o = `
8
+ `, f = !1;
9
+ const t = [];
10
+ for (let e = 0; e < s.length; e++)
11
+ s[e] === "-s" && e + 1 < s.length ? o = s[++e] : s[e] === "-w" ? f = !0 : t.push(s[e]);
12
+ if (t.length === 1 ? a = parseFloat(t[0]) : t.length === 2 ? (i = parseFloat(t[0]), a = parseFloat(t[1])) : (i = parseFloat(t[0]), n = parseFloat(t[1]), a = parseFloat(t[2])), isNaN(i) || isNaN(n) || isNaN(a))
13
+ return r.stderr.write(`seq: invalid argument
14
+ `), 1;
15
+ if (n === 0)
16
+ return r.stderr.write(`seq: zero increment
17
+ `), 1;
18
+ const l = [], u = Number.isInteger(i) && Number.isInteger(n) && Number.isInteger(a);
19
+ if (n > 0)
20
+ for (let e = i; e <= a + 1e-10; e += n)
21
+ l.push(String(u ? Math.round(e) : e));
22
+ else
23
+ for (let e = i; e >= a - 1e-10; e += n)
24
+ l.push(String(u ? Math.round(e) : e));
25
+ if (l.length > 0)
26
+ if (f && u) {
27
+ const e = Math.max(...l.map((g) => g.length));
28
+ r.stdout.write(l.map((g) => g.padStart(e, "0")).join(o) + `
29
+ `);
30
+ } else
31
+ r.stdout.write(l.join(o) + `
32
+ `);
33
+ return 0;
34
+ };
35
+ export {
36
+ p as default
37
+ };
@@ -0,0 +1,64 @@
1
+ import { r as f, V as h } from "./index-Djm2onjx.js";
2
+ async function l(t) {
3
+ const a = await crypto.subtle.digest("SHA-256", t), o = new Uint8Array(a);
4
+ let r = "";
5
+ for (let e = 0; e < o.length; e++)
6
+ r += o[e].toString(16).padStart(2, "0");
7
+ return r;
8
+ }
9
+ const p = async (t) => {
10
+ let a = 0, o = !1;
11
+ const r = [];
12
+ for (const e of t.args)
13
+ e === "-c" || e === "--check" ? o = !0 : r.push(e);
14
+ if (o && r.length > 0) {
15
+ const e = f(t.cwd, r[0]);
16
+ let n;
17
+ try {
18
+ n = t.vfs.readFileString(e);
19
+ } catch (s) {
20
+ if (s instanceof h)
21
+ return t.stderr.write(`sha256sum: ${r[0]}: ${s.message}
22
+ `), 1;
23
+ throw s;
24
+ }
25
+ for (const s of n.trim().split(`
26
+ `)) {
27
+ const i = s.match(/^([0-9a-f]{64})\s+(.+)$/);
28
+ if (!i) continue;
29
+ const [, d, c] = i, u = f(t.cwd, c);
30
+ try {
31
+ const w = t.vfs.readFile(u);
32
+ await l(w) === d ? t.stdout.write(`${c}: OK
33
+ `) : (t.stdout.write(`${c}: FAILED
34
+ `), a = 1);
35
+ } catch {
36
+ t.stdout.write(`${c}: FAILED open or read
37
+ `), a = 1;
38
+ }
39
+ }
40
+ return a;
41
+ }
42
+ if (r.length === 0)
43
+ return t.stderr.write(`Usage: sha256sum [-c FILE] FILE...
44
+ `), t.stderr.write(`Compute or verify SHA-256 checksums.
45
+ `), 1;
46
+ for (const e of r) {
47
+ const n = f(t.cwd, e);
48
+ try {
49
+ const s = t.vfs.readFile(n), i = await l(s);
50
+ t.stdout.write(`${i} ${e}
51
+ `);
52
+ } catch (s) {
53
+ if (s instanceof h)
54
+ t.stderr.write(`sha256sum: ${e}: ${s.message}
55
+ `), a = 1;
56
+ else
57
+ throw s;
58
+ }
59
+ }
60
+ return a;
61
+ };
62
+ export {
63
+ p as default
64
+ };
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Process information structure
3
+ * Mirrors Linux process model with PID, PPID, status, etc.
4
+ */
5
+ export interface Process {
6
+ /** Process ID (unique identifier) */
7
+ pid: number;
8
+ /** Parent Process ID */
9
+ ppid: number;
10
+ /** Command name (argv[0]) */
11
+ command: string;
12
+ /** Full command line arguments */
13
+ args: string[];
14
+ /** Working directory when process started */
15
+ cwd: string;
16
+ /** Environment variables */
17
+ env: Record<string, string>;
18
+ /** Process start time (milliseconds since epoch) */
19
+ startTime: number;
20
+ /** Current process status */
21
+ status: 'running' | 'sleeping' | 'stopped' | 'zombie';
22
+ /** Whether this is a foreground process */
23
+ isForeground: boolean;
24
+ /** Promise that resolves when process completes */
25
+ promise: Promise<number>;
26
+ /** Controller for aborting/killing the process */
27
+ abortController: AbortController;
28
+ /** Exit code (null if still running) */
29
+ exitCode: number | null;
30
+ /** Optional job ID for background jobs (for backwards compat with JobTable) */
31
+ jobId?: number;
32
+ }
33
+ /**
34
+ * Options for spawning a new process
35
+ */
36
+ export interface SpawnOptions {
37
+ /** Command name */
38
+ command: string;
39
+ /** Command arguments (including command itself as args[0]) */
40
+ args: string[];
41
+ /** Working directory */
42
+ cwd: string;
43
+ /** Environment variables */
44
+ env: Record<string, string>;
45
+ /** Whether this is a foreground process */
46
+ isForeground: boolean;
47
+ /** Promise that resolves with exit code */
48
+ promise: Promise<number>;
49
+ /** Abort controller for killing the process */
50
+ abortController: AbortController;
51
+ /** Parent PID (defaults to 1 - shell) */
52
+ ppid?: number;
53
+ }
54
+ /**
55
+ * Central process registry for tracking all running processes.
56
+ * Provides Linux-like process management with PIDs, status tracking,
57
+ * and process lifecycle management.
58
+ */
59
+ export declare class ProcessRegistry {
60
+ private processes;
61
+ private nextPid;
62
+ private nextJobId;
63
+ /**
64
+ * Register the shell as a process.
65
+ * @deprecated Use spawn() directly instead. Each shell gets its own PID.
66
+ * Kept for backwards compatibility.
67
+ */
68
+ registerShell(_cwd: string, _env: Record<string, string>): void;
69
+ /**
70
+ * Spawn a new process and register it in the process table.
71
+ * Returns the assigned PID.
72
+ */
73
+ spawn(opts: SpawnOptions): number;
74
+ /**
75
+ * Get process information by PID.
76
+ */
77
+ get(pid: number): Process | undefined;
78
+ /**
79
+ * Get process information by job ID.
80
+ */
81
+ getByJobId(jobId: number): Process | undefined;
82
+ /**
83
+ * Check if a process exists.
84
+ */
85
+ has(pid: number): boolean;
86
+ /**
87
+ * Get all PIDs in the system.
88
+ */
89
+ getAllPIDs(): number[];
90
+ /**
91
+ * Get all processes.
92
+ */
93
+ getAll(): Process[];
94
+ /**
95
+ * Get all running processes (excludes zombies and stopped).
96
+ */
97
+ getRunning(): Process[];
98
+ /**
99
+ * Get all background jobs (non-foreground processes, excluding shell).
100
+ */
101
+ getBackgroundJobs(): Process[];
102
+ /**
103
+ * Get all zombie processes (finished but not reaped).
104
+ */
105
+ getZombies(): Process[];
106
+ /**
107
+ * Kill a process by sending abort signal.
108
+ * Returns true if process was killed, false if not found or is a shell process.
109
+ */
110
+ kill(pid: number, signal?: string): boolean;
111
+ /**
112
+ * Reap a zombie process (remove from process table).
113
+ * This should be called after collecting exit code.
114
+ * Returns true if process was reaped, false if not found or not a zombie.
115
+ */
116
+ reap(pid: number): boolean;
117
+ /**
118
+ * Collect and reap all zombie processes.
119
+ * Returns array of reaped processes for display/logging.
120
+ */
121
+ collectZombies(): Process[];
122
+ /**
123
+ * Update process status.
124
+ * Useful for manual status changes (e.g., sleeping, stopped).
125
+ */
126
+ updateStatus(pid: number, status: Process['status']): boolean;
127
+ /**
128
+ * Get process uptime in milliseconds.
129
+ */
130
+ getUptime(pid: number): number | null;
131
+ /**
132
+ * Get formatted process info (for ps command).
133
+ */
134
+ getFormattedInfo(pid: number): string | null;
135
+ /**
136
+ * Get process count.
137
+ */
138
+ count(): number;
139
+ /**
140
+ * Clear all processes except shell (useful for testing).
141
+ */
142
+ reset(): void;
143
+ }
144
+ //# sourceMappingURL=ProcessRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessRegistry.d.ts","sourceRoot":"","sources":["../../src/shell/ProcessRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * ProcessRegistry Usage Examples
3
+ *
4
+ * This file demonstrates how to use the ProcessRegistry for Linux-like
5
+ * process management in lifo.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=ProcessRegistry.example.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessRegistry.example.d.ts","sourceRoot":"","sources":["../../src/shell/ProcessRegistry.example.ts"],"names":[],"mappings":"AACA;;;;;GAKG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ProcessRegistry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessRegistry.test.d.ts","sourceRoot":"","sources":["../../src/shell/ProcessRegistry.test.ts"],"names":[],"mappings":""}
@@ -2,6 +2,7 @@ import { ITerminal } from '../terminal/ITerminal.js';
2
2
  import { VFS } from '../kernel/vfs/index.js';
3
3
  import { CommandRegistry } from '../commands/registry.js';
4
4
  import { JobTable } from './jobs.js';
5
+ import { ProcessRegistry } from './ProcessRegistry.js';
5
6
  export interface ExecuteOptions {
6
7
  cwd?: string;
7
8
  env?: Record<string, string>;
@@ -18,6 +19,7 @@ export declare class Shell {
18
19
  private aliases;
19
20
  private lineBuffer;
20
21
  private cursorPos;
22
+ private screenCursorRow;
21
23
  private history;
22
24
  private historyIndex;
23
25
  private savedLine;
@@ -30,11 +32,14 @@ export declare class Shell {
30
32
  private interpreterConfig;
31
33
  private historyManager;
32
34
  private jobTable;
35
+ private processRegistry;
33
36
  private builtins;
34
37
  private tabCount;
35
- constructor(terminal: ITerminal, vfs: VFS, registry: CommandRegistry, env: Record<string, string>);
38
+ private pasteQueue;
39
+ constructor(terminal: ITerminal, vfs: VFS, registry: CommandRegistry, env: Record<string, string>, processRegistry: ProcessRegistry);
36
40
  private registerBuiltins;
37
41
  getJobTable(): JobTable;
42
+ getProcessRegistry(): ProcessRegistry;
38
43
  getCwd(): string;
39
44
  setCwd(cwd: string): void;
40
45
  getEnv(): Record<string, string>;
@@ -44,19 +49,22 @@ export declare class Shell {
44
49
  * Programmatic command execution with captured stdout/stderr.
45
50
  * Used by Sandbox.commands.run() for headless mode.
46
51
  */
52
+ private _executeDepth;
47
53
  execute(cmd: string, options?: ExecuteOptions): Promise<{
48
54
  stdout: string;
49
55
  stderr: string;
50
56
  exitCode: number;
51
57
  }>;
52
58
  start(): void;
59
+ private sourceRcFiles;
53
60
  private printPrompt;
54
61
  private handleInput;
55
62
  private handleTab;
56
63
  private handleStdinInput;
57
64
  private applyCompletion;
58
- private clearLine;
65
+ private getPromptWidth;
59
66
  private redrawLine;
67
+ private drainPasteQueue;
60
68
  private moveCursorLeft;
61
69
  private moveCursorRight;
62
70
  private moveCursorHome;
@@ -1 +1 @@
1
- {"version":3,"file":"Shell.d.ts","sourceRoot":"","sources":["../../src/shell/Shell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Shell.d.ts","sourceRoot":"","sources":["../../src/shell/Shell.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { VFS } from '../kernel/vfs/index.js';
3
3
  import { CommandRegistry } from '../commands/registry.js';
4
4
  import { CommandOutputStream, CommandInputStream } from '../commands/types.js';
5
5
  import { JobTable } from './jobs.js';
6
+ import { ProcessRegistry } from './ProcessRegistry.js';
6
7
  import { TerminalStdin } from './terminal-stdin.js';
7
8
  export declare class BreakSignal {
8
9
  levels: number;
@@ -25,6 +26,7 @@ export interface InterpreterConfig {
25
26
  registry: CommandRegistry;
26
27
  builtins: Map<string, BuiltinFn>;
27
28
  jobTable: JobTable;
29
+ processRegistry: ProcessRegistry;
28
30
  writeToTerminal: (text: string) => void;
29
31
  aliases?: Map<string, string>;
30
32
  /** Override default stdout for programmatic capture */
@@ -33,6 +35,8 @@ export interface InterpreterConfig {
33
35
  defaultStderr?: CommandOutputStream;
34
36
  /** Returns the current abort signal for foreground commands */
35
37
  getAbortSignal?: () => AbortSignal;
38
+ /** Internal flag: true when executing background job (don't register individual commands) */
39
+ isBackgroundContext?: boolean;
36
40
  }
37
41
  export declare class Interpreter {
38
42
  private config;
@@ -1 +1 @@
1
- {"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../../src/shell/interpreter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAYX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAEnB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,qBAAa,WAAW;IACH,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAClC;AAED,qBAAa,cAAc;IACN,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAClC;AAED,qBAAa,YAAY;IACJ,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM;CACpC;AAED,MAAM,MAAM,SAAS,GAAG,CACtB,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,mBAAmB,EAC3B,KAAK,CAAC,EAAE,kBAAkB,KACvB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,MAAM,CAAC;IACrB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,QAAQ,EAAE,QAAQ,CAAC;IACnB,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,uDAAuD;IACvD,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,uDAAuD;IACvD,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,WAAW,CAAC;CACpC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,SAAS,CAA0C;gBAE/C,MAAM,EAAE,iBAAiB;IAIrC,eAAe,IAAI,MAAM;IAInB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IASjF,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;YAiBlE,WAAW;IAezB,OAAO,CAAC,kBAAkB;YAWZ,kBAAkB;YAsBlB,eAAe;YAoBf,uBAAuB;YAiCvB,cAAc;YA0Bd,SAAS;YAoBT,UAAU;YAkCV,YAAY;YA0BZ,YAAY;YA0BZ,WAAW;YAoBX,kBAAkB;YAKlB,YAAY;YAMZ,mBAAmB;YAQnB,oBAAoB;YAwKpB,eAAe;IA2CvB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBpD,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,gBAAgB;CAYzB"}
1
+ {"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../../src/shell/interpreter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAYX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAEnB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,qBAAa,WAAW;IACH,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAClC;AAED,qBAAa,cAAc;IACN,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAClC;AAED,qBAAa,YAAY;IACJ,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM;CACpC;AAED,MAAM,MAAM,SAAS,GAAG,CACtB,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,mBAAmB,EAC3B,KAAK,CAAC,EAAE,kBAAkB,KACvB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,MAAM,CAAC;IACrB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,QAAQ,EAAE,QAAQ,CAAC;IACnB,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,uDAAuD;IACvD,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,uDAAuD;IACvD,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,WAAW,CAAC;IACnC,6FAA6F;IAC7F,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,SAAS,CAA0C;gBAE/C,MAAM,EAAE,iBAAiB;IAIrC,eAAe,IAAI,MAAM;IAInB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IASjF,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;YAiBlE,WAAW;IA0CzB,OAAO,CAAC,kBAAkB;YAWZ,kBAAkB;YAsBlB,eAAe;YAoBf,uBAAuB;YAiCvB,cAAc;YA0Bd,SAAS;YAoBT,UAAU;YAkCV,YAAY;YA0BZ,YAAY;YA0BZ,WAAW;YAoBX,kBAAkB;YAKlB,YAAY;YAMZ,mBAAmB;YAQnB,oBAAoB;YA8OpB,eAAe;IA2CvB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBpD,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,gBAAgB;CAYzB"}
@@ -8,8 +8,12 @@ export declare class TerminalStdin implements CommandInputStream {
8
8
  private closed;
9
9
  private resolver;
10
10
  private _waiting;
11
+ private _rawMode;
11
12
  /** True when a command has called read() and is waiting for input. */
12
13
  get isWaiting(): boolean;
14
+ /** When true, the shell should bypass line editing and feed raw keypresses. */
15
+ get rawMode(): boolean;
16
+ set rawMode(value: boolean);
13
17
  /** Shell calls this on Enter (with line + '\n'). */
14
18
  feed(text: string): void;
15
19
  /** Shell calls this on Ctrl+D to signal EOF. */
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-stdin.d.ts","sourceRoot":"","sources":["../../src/shell/terminal-stdin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D;;;GAGG;AACH,qBAAa,aAAc,YAAW,kBAAkB;IACtD,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAiD;IACjE,OAAO,CAAC,QAAQ,CAAS;IAEzB,sEAAsE;IACtE,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,oDAAoD;IACpD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAaxB,gDAAgD;IAChD,KAAK,IAAI,IAAI;IAYb,mDAAmD;IAC7C,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAapC,2DAA2D;IACrD,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CASjC"}
1
+ {"version":3,"file":"terminal-stdin.d.ts","sourceRoot":"","sources":["../../src/shell/terminal-stdin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D;;;GAGG;AACH,qBAAa,aAAc,YAAW,kBAAkB;IACtD,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAiD;IACjE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IAEzB,sEAAsE;IACtE,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,+EAA+E;IAC/E,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAEzB;IAED,oDAAoD;IACpD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAaxB,gDAAgD;IAChD,KAAK,IAAI,IAAI;IAYb,mDAAmD;IAC7C,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAapC,2DAA2D;IACrD,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CASjC"}
@@ -0,0 +1,138 @@
1
+ const N = "\x1B[?25l", Y = "\x1B[?25h", w = "\x1B[?1049h", M = "\x1B[?1049l", T = "\x1B[2J";
2
+ function h(n, e) {
3
+ return `\x1B[${n + 1};${e + 1}H`;
4
+ }
5
+ const k = [
6
+ " ==== ________ ___________ ",
7
+ " _D _| |_______/ \\__I_I_____===__|_________|",
8
+ " |(_)--- | H\\________/ | | =|___ ___| ",
9
+ " / | | H | | | | ||_| |_|| ",
10
+ " | | | H |__--------------------| [___] | ",
11
+ " | ________|___H__/__|_____/[][]~\\_______| | ",
12
+ " |/ | |-----------I_____I [][] [] D |=======|__"
13
+ ], y = [
14
+ [
15
+ "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__",
16
+ " |/-=|___|= || || || |_____/~\\___/ ",
17
+ " \\_/ \\O=====O=====O=====O_/ \\_/ "
18
+ ],
19
+ [
20
+ "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__",
21
+ " |/-=|___|=O=====O=====O=====O |_____/~\\___/ ",
22
+ " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
23
+ ],
24
+ [
25
+ "__/ =| o |=-O=====O=====O=====O \\ ____Y___________|__",
26
+ " |/-=|___|= || || || |_____/~\\___/ ",
27
+ " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
28
+ ],
29
+ [
30
+ "__/ =| o |=-~O=====O=====O=====O\\ ____Y___________|__",
31
+ " |/-=|___|= || || || |_____/~\\___/ ",
32
+ " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
33
+ ],
34
+ [
35
+ "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__",
36
+ " |/-=|___|= O=====O=====O=====O|_____/~\\___/ ",
37
+ " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
38
+ ],
39
+ [
40
+ "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__",
41
+ " |/-=|___|= || || || |_____/~\\___/ ",
42
+ " \\_/ \\_O=====O=====O=====O/ \\_/ "
43
+ ]
44
+ ], d = [
45
+ " ",
46
+ " ",
47
+ " _________________ ",
48
+ " _| \\_____A ",
49
+ " =| | ",
50
+ " -| | ",
51
+ "__|________________________|_ ",
52
+ "|__________________________|_ ",
53
+ " |_D__D__D_| |_D__D__D_| ",
54
+ " \\_/ \\_/ \\_/ \\_/ "
55
+ ], S = 10, u = 7, R = 53, $ = 30, L = 6, D = 8, b = [
56
+ "( )",
57
+ "( )",
58
+ "( )",
59
+ "( )",
60
+ "( )",
61
+ "()",
62
+ "O",
63
+ " "
64
+ ], A = [
65
+ "(@@@)",
66
+ "(@@@@)",
67
+ "(@@@)",
68
+ "(@@)",
69
+ "(@)",
70
+ "@@",
71
+ "@",
72
+ " "
73
+ ], x = [2, 1, 1, 1, 0, 0, 0, 0], F = [-2, -1, 0, 1, 1, 2, 2, 3];
74
+ function U(n) {
75
+ return new Promise((e) => setTimeout(e, n));
76
+ }
77
+ const X = async (n) => {
78
+ const e = parseInt(n.env.COLUMNS || "80", 10), l = parseInt(n.env.LINES || "24", 10), C = Math.max(0, Math.floor((l - S) / 2)), c = [];
79
+ let v = 0;
80
+ n.stdout.write(w + T + "\x1B[H" + N);
81
+ const E = R + 1 + $;
82
+ function I(o, a, f, O) {
83
+ const s = f - Math.floor(O / 2), i = Math.max(0, s), _ = Math.min(O + 1, e - i);
84
+ return a >= 0 && a < l && i < e && _ > 0 && (o += h(a, i) + " ".repeat(_)), o;
85
+ }
86
+ for (let o = e - 1; !(n.signal.aborted || o < -E && c.length === 0); o--) {
87
+ const a = ((e - o) % L + L) % L, f = [...k, ...y[a]], O = [];
88
+ for (let _ = 0; _ < S; _++) {
89
+ const t = _ < f.length ? f[_] : "", r = _ < d.length ? d[_] : "";
90
+ O.push(t + (r.length > 0 ? " " + r : ""));
91
+ }
92
+ let s = "";
93
+ for (let _ = 0; _ < S; _++) {
94
+ const t = C + _;
95
+ if (t < 0 || t >= l) continue;
96
+ const r = O[_];
97
+ let g = 0, p = r.length, m = o;
98
+ if (o < 0 && (g = -o, m = 0), o + p > e && (p = e - o), g >= p) continue;
99
+ const H = r.substring(g, p);
100
+ s += h(t, m) + H;
101
+ }
102
+ const i = o + E + 1;
103
+ if (i >= 0 && i < e)
104
+ for (let _ = 0; _ < S; _++) {
105
+ const t = C + _;
106
+ t >= 0 && t < l && (s += h(t, i) + " ");
107
+ }
108
+ if (o % 4 === 0 && o + u >= 0 && o + u < e) {
109
+ const _ = C - 1, t = o + u;
110
+ c.push({
111
+ y: _,
112
+ x: t,
113
+ prevY: _,
114
+ prevX: t,
115
+ prevLen: 0,
116
+ age: 0,
117
+ kind: v % 2
118
+ }), v++;
119
+ }
120
+ for (const _ of c)
121
+ _.prevLen > 0 && (s = I(s, _.prevY, _.prevX, _.prevLen));
122
+ for (const _ of c)
123
+ if (_.age < D) {
124
+ const t = _.kind === 0 ? b[_.age] : A[_.age], r = _.x - Math.floor(t.length / 2);
125
+ _.y >= 0 && _.y < l && r >= 0 && r + t.length <= e && (s += h(_.y, r) + t), _.prevY = _.y, _.prevX = _.x, _.prevLen = t.length, _.y -= x[_.age], _.x += F[_.age], _.age++;
126
+ }
127
+ for (let _ = c.length - 1; _ >= 0; _--)
128
+ if (c[_].age >= D) {
129
+ const t = c[_];
130
+ s = I(s, t.prevY, t.prevX, t.prevLen), c.splice(_, 1);
131
+ }
132
+ n.stdout.write(s), await U(40);
133
+ }
134
+ return n.stdout.write(Y + M), 0;
135
+ };
136
+ export {
137
+ X as default
138
+ };
@@ -1,4 +1,4 @@
1
- import { r as c, i as h, c as m, V as k } from "./index-BVIfyOAv.js";
1
+ import { r as c, i as h, c as m, V as k } from "./index-Djm2onjx.js";
2
2
  const y = async (s) => {
3
3
  let f = !1, u = !1, g = !1, a = 0;
4
4
  const l = [];
@@ -1,4 +1,4 @@
1
- import { r as n, V as d } from "./index-BVIfyOAv.js";
1
+ import { r as n, V as d } from "./index-Djm2onjx.js";
2
2
  const w = async (t) => {
3
3
  if (t.args.length === 0)
4
4
  return t.stderr.write(`stat: missing operand
@@ -0,0 +1,42 @@
1
+ import { r as f, V as l } from "./index-Djm2onjx.js";
2
+ function g(e, t) {
3
+ const i = [];
4
+ let n = "";
5
+ for (let r = 0; r < e.length; r++) {
6
+ const s = e[r];
7
+ s >= 32 && s <= 126 || s === 9 ? n += String.fromCharCode(s) : (n.length >= t && i.push(n), n = "");
8
+ }
9
+ return n.length >= t && i.push(n), i;
10
+ }
11
+ const c = async (e) => {
12
+ let t = 4;
13
+ const i = [];
14
+ for (let r = 0; r < e.args.length; r++) {
15
+ const s = e.args[r];
16
+ s === "-n" && r + 1 < e.args.length ? (t = parseInt(e.args[++r], 10), (isNaN(t) || t < 1) && (t = 4)) : s.startsWith("-") && s.length > 1 && !isNaN(parseInt(s.slice(1), 10)) ? (t = parseInt(s.slice(1), 10), t < 1 && (t = 4)) : i.push(s);
17
+ }
18
+ let n = 0;
19
+ if (i.length === 0)
20
+ return e.stderr.write(`Usage: strings [-n MIN] FILE...
21
+ `), e.stderr.write(`Print sequences of printable characters from files.
22
+ `), 1;
23
+ for (const r of i) {
24
+ const s = f(e.cwd, r);
25
+ try {
26
+ const o = e.vfs.readFile(s);
27
+ for (const a of g(o, t))
28
+ e.stdout.write(a + `
29
+ `);
30
+ } catch (o) {
31
+ if (o instanceof l)
32
+ e.stderr.write(`strings: ${r}: ${o.message}
33
+ `), n = 1;
34
+ else
35
+ throw o;
36
+ }
37
+ }
38
+ return n;
39
+ };
40
+ export {
41
+ c as default
42
+ };
@@ -0,0 +1,31 @@
1
+ import { r as a, V as i } from "./index-Djm2onjx.js";
2
+ const d = async (e) => {
3
+ let n = 0;
4
+ const o = (r) => {
5
+ const s = r.replace(/\n$/, "").split(`
6
+ `);
7
+ s.reverse(), e.stdout.write(s.join(`
8
+ `) + `
9
+ `);
10
+ };
11
+ if (e.args.length === 0)
12
+ return e.stderr.write(`Usage: tac FILE...
13
+ `), e.stderr.write(`Print files in reverse line order.
14
+ `), 1;
15
+ for (const r of e.args) {
16
+ const s = a(e.cwd, r);
17
+ try {
18
+ o(e.vfs.readFileString(s));
19
+ } catch (t) {
20
+ if (t instanceof i)
21
+ e.stderr.write(`tac: ${r}: ${t.message}
22
+ `), n = 1;
23
+ else
24
+ throw t;
25
+ }
26
+ }
27
+ return n;
28
+ };
29
+ export {
30
+ d as default
31
+ };
@@ -1,4 +1,4 @@
1
- import { r as o, i as f, c as d, V as g } from "./index-BVIfyOAv.js";
1
+ import { r as o, i as f, c as d, V as g } from "./index-Djm2onjx.js";
2
2
  const u = async (e) => {
3
3
  let n = 10;
4
4
  const r = [];
@@ -1,4 +1,4 @@
1
- import { r as p, d as b, f as F, h as z, j as y, p as m, k as $, V as C } from "./index-BVIfyOAv.js";
1
+ import { r as p, d as b, f as F, h as z, j as y, p as m, k as $, V as C } from "./index-Djm2onjx.js";
2
2
  const D = async (e) => {
3
3
  let f = !1, l = !1, c = !1, n = !1, d = !1, u = "", o = "";
4
4
  const h = [];
@@ -1,4 +1,4 @@
1
- import { r as f } from "./index-BVIfyOAv.js";
1
+ import { r as f } from "./index-Djm2onjx.js";
2
2
  const l = async (e) => {
3
3
  let a = !1;
4
4
  const o = [];
@@ -1,4 +1,4 @@
1
- import { r as a, V as n } from "./index-BVIfyOAv.js";
1
+ import { r as a, V as n } from "./index-Djm2onjx.js";
2
2
  const f = async (r) => {
3
3
  if (r.args.length === 0)
4
4
  return r.stderr.write(`touch: missing operand