@jini-ai/platform 0.1.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.
- package/LICENSE +201 -0
- package/dist/asset-cache.d.ts +80 -0
- package/dist/asset-cache.d.ts.map +1 -0
- package/dist/asset-cache.js +423 -0
- package/dist/asset-cache.js.map +1 -0
- package/dist/aws-sigv4.d.ts +51 -0
- package/dist/aws-sigv4.d.ts.map +1 -0
- package/dist/aws-sigv4.js +104 -0
- package/dist/aws-sigv4.js.map +1 -0
- package/dist/blob-storage.d.ts +89 -0
- package/dist/blob-storage.d.ts.map +1 -0
- package/dist/blob-storage.js +315 -0
- package/dist/blob-storage.js.map +1 -0
- package/dist/command.d.ts +32 -0
- package/dist/command.d.ts.map +1 -0
- package/dist/command.js +101 -0
- package/dist/command.js.map +1 -0
- package/dist/download.d.ts +92 -0
- package/dist/download.d.ts.map +1 -0
- package/dist/download.js +856 -0
- package/dist/download.js.map +1 -0
- package/dist/fs.d.ts +55 -0
- package/dist/fs.d.ts.map +1 -0
- package/dist/fs.js +124 -0
- package/dist/fs.js.map +1 -0
- package/dist/home-expansion.d.ts +18 -0
- package/dist/home-expansion.d.ts.map +1 -0
- package/dist/home-expansion.js +58 -0
- package/dist/home-expansion.js.map +1 -0
- package/dist/http.d.ts +14 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +39 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +59 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/process.d.ts +159 -0
- package/dist/process.d.ts.map +1 -0
- package/dist/process.js +362 -0
- package/dist/process.js.map +1 -0
- package/dist/proxy-env.d.ts +50 -0
- package/dist/proxy-env.d.ts.map +1 -0
- package/dist/proxy-env.js +373 -0
- package/dist/proxy-env.js.map +1 -0
- package/dist/resource-paths.d.ts +68 -0
- package/dist/resource-paths.d.ts.map +1 -0
- package/dist/resource-paths.js +137 -0
- package/dist/resource-paths.js.map +1 -0
- package/dist/sandbox-env.d.ts +86 -0
- package/dist/sandbox-env.d.ts.map +1 -0
- package/dist/sandbox-env.js +215 -0
- package/dist/sandbox-env.js.map +1 -0
- package/dist/shell.d.ts +46 -0
- package/dist/shell.d.ts.map +1 -0
- package/dist/shell.js +78 -0
- package/dist/shell.js.map +1 -0
- package/dist/terminal.d.ts +137 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +398 -0
- package/dist/terminal.js.map +1 -0
- package/dist/toolchain.d.ts +17 -0
- package/dist/toolchain.d.ts.map +1 -0
- package/dist/toolchain.js +251 -0
- package/dist/toolchain.js.map +1 -0
- package/package.json +47 -0
package/dist/terminal.js
ADDED
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module terminal
|
|
3
|
+
*
|
|
4
|
+
* In-memory interactive terminal (PTY) session manager. Each session keeps
|
|
5
|
+
* a bounded event ring-buffer so a reattaching client can replay recent
|
|
6
|
+
* scrollback after a last-seen event id, then fans out live output to every
|
|
7
|
+
* attached sink. Sessions are process-local and never persisted — shutting
|
|
8
|
+
* the host down kills every PTY (see {@link TerminalService.shutdownActive}).
|
|
9
|
+
*
|
|
10
|
+
* Generalized from OD's `apps/daemon/src/terminals.ts`: the origin imported
|
|
11
|
+
* `node-pty` directly and coupled `stream()` to an Express `req`/`res` pair.
|
|
12
|
+
* Both couplings are real ports here instead — {@link PtySpawn} (the caller
|
|
13
|
+
* supplies node-pty, or any PTY backend, or a fake for tests) and
|
|
14
|
+
* {@link TerminalSseSink} (a minimal push/end sink; no Express/HTTP types
|
|
15
|
+
* enter this package). This keeps the module transport- and PTY-backend-
|
|
16
|
+
* agnostic, which matters beyond OD: Zana and Open-Marketing both
|
|
17
|
+
* independently need a terminal/PTY port, so this shape is designed to be
|
|
18
|
+
* the shared foundation rather than scoped narrowly to one daemon's routes.
|
|
19
|
+
*/
|
|
20
|
+
import { randomUUID } from 'node:crypto';
|
|
21
|
+
import fs from 'node:fs';
|
|
22
|
+
import { createRequire } from 'node:module';
|
|
23
|
+
import os from 'node:os';
|
|
24
|
+
import path from 'node:path';
|
|
25
|
+
const require = createRequire(import.meta.url);
|
|
26
|
+
/**
|
|
27
|
+
* Resolves the candidate paths to node-pty's `spawn-helper` binary. On
|
|
28
|
+
* macOS/Linux, `pty.fork` shells out to this helper via `posix_spawn`;
|
|
29
|
+
* node-pty looks for the native artifacts under `build/Release` first and a
|
|
30
|
+
* platform-tagged `prebuilds/<platform>-<arch>` dir second. Returns both so
|
|
31
|
+
* {@link ensureSpawnHelperExecutable} covers whichever one a given install
|
|
32
|
+
* produced. Empty on win32 (ConPTY has no helper) or when node-pty can't be
|
|
33
|
+
* resolved at all (not installed, or a workspace that doesn't use it).
|
|
34
|
+
*
|
|
35
|
+
* @param options.platform - Defaults to `process.platform`; injectable for tests.
|
|
36
|
+
* @param options.resolve - Defaults to a `require.resolve`-shaped resolver for
|
|
37
|
+
* `'node-pty'`; injectable so this stays testable without the native module.
|
|
38
|
+
*/
|
|
39
|
+
export function spawnHelperCandidatePaths(options = {}) {
|
|
40
|
+
const platform = options.platform ?? process.platform;
|
|
41
|
+
if (platform === 'win32')
|
|
42
|
+
return [];
|
|
43
|
+
const resolve = options.resolve ?? resolveNodePtyEntryPoint;
|
|
44
|
+
let pkgRoot;
|
|
45
|
+
try {
|
|
46
|
+
// node-pty's "main" is `lib/index.js`, so the package root is two levels
|
|
47
|
+
// up from the resolved entry.
|
|
48
|
+
pkgRoot = path.dirname(path.dirname(resolve('node-pty')));
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
return [
|
|
54
|
+
path.join(pkgRoot, 'build', 'Release', 'spawn-helper'),
|
|
55
|
+
path.join(pkgRoot, 'prebuilds', `${platform}-${process.arch}`, 'spawn-helper'),
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
function resolveNodePtyEntryPoint(specifier) {
|
|
59
|
+
// A runtime `require.resolve` call (not a static `import`) avoids a
|
|
60
|
+
// module specifier TypeScript would try to resolve at compile time —
|
|
61
|
+
// node-pty is an optional peer a consumer brings, not a dependency of
|
|
62
|
+
// this package.
|
|
63
|
+
return require.resolve(specifier);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Restores the executable bit on node-pty's `spawn-helper`. pnpm unpacks
|
|
67
|
+
* node-pty's prebuilt binaries with mode 0644 — and node-pty's own
|
|
68
|
+
* post-install hook only chmods `build/Release`, which a prebuild-based
|
|
69
|
+
* install never creates. Re-adding +x before the first fork makes the
|
|
70
|
+
* terminal self-heal across reinstalls without depending on an install hook.
|
|
71
|
+
* Best-effort and idempotent: a missing file or a read-only filesystem is
|
|
72
|
+
* swallowed, and the subsequent spawn surfaces the real error instead.
|
|
73
|
+
*
|
|
74
|
+
* @param candidatePaths - Defaults to {@link spawnHelperCandidatePaths}'s result.
|
|
75
|
+
*/
|
|
76
|
+
export function ensureSpawnHelperExecutable(candidatePaths = spawnHelperCandidatePaths()) {
|
|
77
|
+
for (const file of candidatePaths) {
|
|
78
|
+
try {
|
|
79
|
+
const stat = fs.statSync(file);
|
|
80
|
+
if (stat.mode & 0o100)
|
|
81
|
+
continue;
|
|
82
|
+
fs.chmodSync(file, stat.mode | 0o111);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// Candidate not present on this install, or fs is read-only: ignore and
|
|
86
|
+
// let the spawn attempt report the underlying failure.
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Resolves the shell binary for a new PTY. Honors an explicit request
|
|
92
|
+
* override, then the user's environment (`SHELL` on posix, `ComSpec` on
|
|
93
|
+
* win32), and finally a per-platform default.
|
|
94
|
+
*/
|
|
95
|
+
export function resolveShell(requested, options = {}) {
|
|
96
|
+
const explicit = typeof requested === 'string' && requested.trim() ? requested.trim() : null;
|
|
97
|
+
if (explicit)
|
|
98
|
+
return explicit;
|
|
99
|
+
const platform = options.platform ?? process.platform;
|
|
100
|
+
const env = options.env ?? process.env;
|
|
101
|
+
if (platform === 'win32') {
|
|
102
|
+
return env.ComSpec || 'powershell.exe';
|
|
103
|
+
}
|
|
104
|
+
return env.SHELL || '/bin/bash';
|
|
105
|
+
}
|
|
106
|
+
function clampDimension(value, fallback) {
|
|
107
|
+
const n = Number(value);
|
|
108
|
+
if (!Number.isFinite(n))
|
|
109
|
+
return fallback;
|
|
110
|
+
return Math.min(Math.max(Math.trunc(n), 1), 1000);
|
|
111
|
+
}
|
|
112
|
+
const TERMINAL_STATUSES = new Set(['exited']);
|
|
113
|
+
const DEFAULT_COLS = 80;
|
|
114
|
+
const DEFAULT_ROWS = 24;
|
|
115
|
+
function toPublicSession(session) {
|
|
116
|
+
return {
|
|
117
|
+
id: session.id,
|
|
118
|
+
projectId: session.projectId,
|
|
119
|
+
cwd: session.cwd,
|
|
120
|
+
shell: session.shell,
|
|
121
|
+
cols: session.cols,
|
|
122
|
+
rows: session.rows,
|
|
123
|
+
status: session.status,
|
|
124
|
+
createdAt: session.createdAt,
|
|
125
|
+
updatedAt: session.updatedAt,
|
|
126
|
+
exitCode: session.exitCode,
|
|
127
|
+
signal: session.signal,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Builds an in-memory terminal session manager. See the module docblock for
|
|
132
|
+
* the design rationale; see {@link CreateTerminalServiceOptions} for tuning.
|
|
133
|
+
*/
|
|
134
|
+
export function createTerminalService(options) {
|
|
135
|
+
const { loadSpawnPty, maxEvents = 2_000, maxBufferBytes = 512 * 1024, exitTailBytes = 64 * 1024, flushIntervalMs = 16, flushThresholdBytes = 64 * 1024, ttlMs = 30 * 60 * 1000, shutdownGraceMs = 3_000, } = options;
|
|
136
|
+
const sessions = new Map();
|
|
137
|
+
let cachedSpawnPty = null;
|
|
138
|
+
const loadPty = async () => {
|
|
139
|
+
if (!cachedSpawnPty)
|
|
140
|
+
cachedSpawnPty = await loadSpawnPty();
|
|
141
|
+
return cachedSpawnPty;
|
|
142
|
+
};
|
|
143
|
+
const scheduleCleanup = (session) => {
|
|
144
|
+
setTimeout(() => {
|
|
145
|
+
if (TERMINAL_STATUSES.has(session.status))
|
|
146
|
+
sessions.delete(session.id);
|
|
147
|
+
}, ttlMs).unref?.();
|
|
148
|
+
};
|
|
149
|
+
const recordByteLength = (data) => ('data' in data ? data.data.length : 0);
|
|
150
|
+
const trimBuffer = (session) => {
|
|
151
|
+
if (session.bufferedBytes <= maxBufferBytes && session.events.length <= maxEvents)
|
|
152
|
+
return;
|
|
153
|
+
const targetBytes = Math.floor(maxBufferBytes * 0.75);
|
|
154
|
+
let dropCount = 0;
|
|
155
|
+
let freed = 0;
|
|
156
|
+
for (let i = 0; i < session.events.length - 1; i++) {
|
|
157
|
+
const overBytes = session.bufferedBytes - freed > targetBytes;
|
|
158
|
+
const overCount = session.events.length - dropCount > maxEvents;
|
|
159
|
+
if (!overBytes && !overCount)
|
|
160
|
+
break;
|
|
161
|
+
freed += session.events[i].byteLength;
|
|
162
|
+
dropCount++;
|
|
163
|
+
}
|
|
164
|
+
if (dropCount > 0) {
|
|
165
|
+
session.events.splice(0, dropCount);
|
|
166
|
+
session.bufferedBytes -= freed;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
const emit = (session, event, data) => {
|
|
170
|
+
const id = session.nextEventId++;
|
|
171
|
+
const byteLength = recordByteLength(data);
|
|
172
|
+
const record = { id, event, data, timestamp: Date.now(), byteLength };
|
|
173
|
+
session.events.push(record);
|
|
174
|
+
session.bufferedBytes += byteLength;
|
|
175
|
+
trimBuffer(session);
|
|
176
|
+
session.updatedAt = record.timestamp;
|
|
177
|
+
for (const sink of session.clients)
|
|
178
|
+
sink.send(event, data, id);
|
|
179
|
+
return record;
|
|
180
|
+
};
|
|
181
|
+
const flushData = (session) => {
|
|
182
|
+
if (session.flushTimer != null) {
|
|
183
|
+
clearTimeout(session.flushTimer);
|
|
184
|
+
session.flushTimer = null;
|
|
185
|
+
}
|
|
186
|
+
if (!session.pendingData)
|
|
187
|
+
return;
|
|
188
|
+
const chunk = session.pendingData;
|
|
189
|
+
session.pendingData = '';
|
|
190
|
+
emit(session, 'data', { data: chunk });
|
|
191
|
+
};
|
|
192
|
+
const finish = (session, code, signal) => {
|
|
193
|
+
if (TERMINAL_STATUSES.has(session.status))
|
|
194
|
+
return;
|
|
195
|
+
flushData(session);
|
|
196
|
+
session.status = 'exited';
|
|
197
|
+
session.exitCode = code;
|
|
198
|
+
session.signal = signal;
|
|
199
|
+
session.updatedAt = Date.now();
|
|
200
|
+
emit(session, 'exit', { code, signal });
|
|
201
|
+
// Bound the memory an exited-but-not-yet-reaped session pins: keep only
|
|
202
|
+
// the trailing scrollback (the exit event is last, so it's always kept).
|
|
203
|
+
let keptBytes = 0;
|
|
204
|
+
let firstKeep = session.events.length;
|
|
205
|
+
for (let i = session.events.length - 1; i >= 0; i--) {
|
|
206
|
+
firstKeep = i;
|
|
207
|
+
keptBytes += session.events[i].byteLength;
|
|
208
|
+
if (keptBytes >= exitTailBytes)
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
if (firstKeep > 0) {
|
|
212
|
+
const dropped = session.events.splice(0, firstKeep);
|
|
213
|
+
for (const r of dropped)
|
|
214
|
+
session.bufferedBytes -= r.byteLength;
|
|
215
|
+
}
|
|
216
|
+
for (const sink of session.clients)
|
|
217
|
+
sink.end();
|
|
218
|
+
session.clients.clear();
|
|
219
|
+
scheduleCleanup(session);
|
|
220
|
+
};
|
|
221
|
+
const create = async (createOptions) => {
|
|
222
|
+
const spawnPty = await loadPty();
|
|
223
|
+
const now = Date.now();
|
|
224
|
+
const id = randomUUID();
|
|
225
|
+
const cols = clampDimension(createOptions.cols, DEFAULT_COLS);
|
|
226
|
+
const rows = clampDimension(createOptions.rows, DEFAULT_ROWS);
|
|
227
|
+
const shell = resolveShell(createOptions.shell);
|
|
228
|
+
const pty = spawnPty(shell, [], {
|
|
229
|
+
name: 'xterm-color',
|
|
230
|
+
cols,
|
|
231
|
+
rows,
|
|
232
|
+
cwd: createOptions.cwd,
|
|
233
|
+
env: { ...process.env },
|
|
234
|
+
});
|
|
235
|
+
const session = {
|
|
236
|
+
id,
|
|
237
|
+
projectId: typeof createOptions.projectId === 'string' && createOptions.projectId ? createOptions.projectId : null,
|
|
238
|
+
cwd: createOptions.cwd,
|
|
239
|
+
shell,
|
|
240
|
+
cols,
|
|
241
|
+
rows,
|
|
242
|
+
status: 'running',
|
|
243
|
+
createdAt: now,
|
|
244
|
+
updatedAt: now,
|
|
245
|
+
exitCode: null,
|
|
246
|
+
signal: null,
|
|
247
|
+
events: [],
|
|
248
|
+
nextEventId: 1,
|
|
249
|
+
clients: new Set(),
|
|
250
|
+
pty,
|
|
251
|
+
bufferedBytes: 0,
|
|
252
|
+
pendingData: '',
|
|
253
|
+
flushTimer: null,
|
|
254
|
+
};
|
|
255
|
+
sessions.set(id, session);
|
|
256
|
+
pty.onData((chunk) => {
|
|
257
|
+
session.pendingData += chunk;
|
|
258
|
+
if (session.pendingData.length >= flushThresholdBytes) {
|
|
259
|
+
flushData(session);
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
if (session.flushTimer == null) {
|
|
263
|
+
session.flushTimer = setTimeout(() => flushData(session), flushIntervalMs);
|
|
264
|
+
session.flushTimer.unref?.();
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
pty.onExit(({ exitCode, signal }) => {
|
|
268
|
+
// `exitCode` is typed non-nullable on `PtyProcess.onExit` (matching
|
|
269
|
+
// node-pty's own exit-event shape), so no `?? null` fallback is
|
|
270
|
+
// reachable here — passed through directly rather than defensively
|
|
271
|
+
// re-guarded against a case the type already rules out.
|
|
272
|
+
finish(session, exitCode, signal ? signalName(signal) : null);
|
|
273
|
+
});
|
|
274
|
+
return toPublicSession(session);
|
|
275
|
+
};
|
|
276
|
+
const get = (id) => {
|
|
277
|
+
const session = sessions.get(id);
|
|
278
|
+
return session ? toPublicSession(session) : null;
|
|
279
|
+
};
|
|
280
|
+
const list = (filter = {}) => Array.from(sessions.values())
|
|
281
|
+
.filter((session) => {
|
|
282
|
+
if (typeof filter.projectId === 'string' && filter.projectId && session.projectId !== filter.projectId) {
|
|
283
|
+
return false;
|
|
284
|
+
}
|
|
285
|
+
return true;
|
|
286
|
+
})
|
|
287
|
+
.map(toPublicSession);
|
|
288
|
+
const attach = (id, lastEventId, sink) => {
|
|
289
|
+
const session = sessions.get(id);
|
|
290
|
+
if (!session)
|
|
291
|
+
return 'not-found';
|
|
292
|
+
let sent = 0;
|
|
293
|
+
for (const record of session.events) {
|
|
294
|
+
if (!Number.isFinite(lastEventId) || record.id > lastEventId) {
|
|
295
|
+
sink.send(record.event, record.data, record.id);
|
|
296
|
+
sent++;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
if (TERMINAL_STATUSES.has(session.status)) {
|
|
300
|
+
// Guarantee a reattaching client sees the terminal `exit` even if its
|
|
301
|
+
// cursor is already past the final event id.
|
|
302
|
+
if (sent === 0 && session.events.length > 0) {
|
|
303
|
+
const last = session.events[session.events.length - 1];
|
|
304
|
+
sink.send(last.event, last.data, last.id);
|
|
305
|
+
}
|
|
306
|
+
sink.end();
|
|
307
|
+
return 'ended';
|
|
308
|
+
}
|
|
309
|
+
session.clients.add(sink);
|
|
310
|
+
return 'attached';
|
|
311
|
+
};
|
|
312
|
+
const detach = (id, sink) => {
|
|
313
|
+
sessions.get(id)?.clients.delete(sink);
|
|
314
|
+
};
|
|
315
|
+
const write = (id, input) => {
|
|
316
|
+
const session = sessions.get(id);
|
|
317
|
+
if (!session || TERMINAL_STATUSES.has(session.status))
|
|
318
|
+
return false;
|
|
319
|
+
try {
|
|
320
|
+
session.pty.write(input);
|
|
321
|
+
return true;
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
};
|
|
327
|
+
const resize = (id, cols, rows) => {
|
|
328
|
+
const session = sessions.get(id);
|
|
329
|
+
if (!session || TERMINAL_STATUSES.has(session.status))
|
|
330
|
+
return false;
|
|
331
|
+
const nextCols = clampDimension(cols, session.cols);
|
|
332
|
+
const nextRows = clampDimension(rows, session.rows);
|
|
333
|
+
try {
|
|
334
|
+
session.pty.resize(nextCols, nextRows);
|
|
335
|
+
session.cols = nextCols;
|
|
336
|
+
session.rows = nextRows;
|
|
337
|
+
session.updatedAt = Date.now();
|
|
338
|
+
return true;
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
return false;
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
const kill = (id, signal = 'SIGTERM') => {
|
|
345
|
+
const session = sessions.get(id);
|
|
346
|
+
if (!session || TERMINAL_STATUSES.has(session.status))
|
|
347
|
+
return false;
|
|
348
|
+
try {
|
|
349
|
+
session.pty.kill(signal);
|
|
350
|
+
return true;
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
// If the kill throws, force the terminal state so clients unblock.
|
|
354
|
+
finish(session, null, signal);
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
};
|
|
358
|
+
const shutdownActive = async ({ graceMs = shutdownGraceMs } = {}) => {
|
|
359
|
+
const active = Array.from(sessions.values()).filter((session) => !TERMINAL_STATUSES.has(session.status));
|
|
360
|
+
for (const session of active) {
|
|
361
|
+
try {
|
|
362
|
+
session.pty.kill('SIGTERM');
|
|
363
|
+
}
|
|
364
|
+
catch {
|
|
365
|
+
// best-effort
|
|
366
|
+
}
|
|
367
|
+
finish(session, null, 'SIGTERM');
|
|
368
|
+
}
|
|
369
|
+
if (active.length > 0 && graceMs > 0) {
|
|
370
|
+
await new Promise((resolve) => {
|
|
371
|
+
const timer = setTimeout(resolve, Math.min(graceMs, 1000));
|
|
372
|
+
timer.unref?.();
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
return {
|
|
377
|
+
create,
|
|
378
|
+
get,
|
|
379
|
+
list,
|
|
380
|
+
write,
|
|
381
|
+
resize,
|
|
382
|
+
kill,
|
|
383
|
+
attach,
|
|
384
|
+
detach,
|
|
385
|
+
shutdownActive,
|
|
386
|
+
isTerminal(status) {
|
|
387
|
+
return TERMINAL_STATUSES.has(status);
|
|
388
|
+
},
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
// Map the numeric signal node-pty reports on exit back to a name. Only
|
|
392
|
+
// SIGTERM is ever sent by this module; anything else falls back to a
|
|
393
|
+
// generic label.
|
|
394
|
+
function signalName(signal) {
|
|
395
|
+
const entry = Object.entries(os.constants.signals).find(([, value]) => value === signal);
|
|
396
|
+
return entry ? entry[0] : `SIG${signal}`;
|
|
397
|
+
}
|
|
398
|
+
//# sourceMappingURL=terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type WellKnownUserToolchainOptions = {
|
|
2
|
+
home?: string;
|
|
3
|
+
includeSystemBins?: boolean;
|
|
4
|
+
env?: NodeJS.ProcessEnv;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Assemble the ordered list of user-level toolchain bin directories to prepend
|
|
8
|
+
* to PATH so a GUI-launched daemon can find CLIs installed under the user's own
|
|
9
|
+
* toolchain even when it inherits a stripped PATH. Entries are search-path
|
|
10
|
+
* candidates (existence is not required) except version-manager install roots,
|
|
11
|
+
* which are probed and version-sorted.
|
|
12
|
+
*
|
|
13
|
+
* @param options - Optional `home`, `includeSystemBins`, and `env` overrides (all default to real values).
|
|
14
|
+
* @returns The ordered list of candidate bin directories, most-specific first.
|
|
15
|
+
*/
|
|
16
|
+
export declare function wellKnownUserToolchainBins(options?: WellKnownUserToolchainOptions): string[];
|
|
17
|
+
//# sourceMappingURL=toolchain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolchain.d.ts","sourceRoot":"","sources":["../src/toolchain.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,6BAA6B,GAAG;IAG1C,IAAI,CAAC,EAAE,MAAM,CAAC;IAKd,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAK5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,CAAC;AAuBF;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,6BAAkC,GAC1C,MAAM,EAAE,CAgKV"}
|