@dsh-enhanced/assistant-isolation 0.1.65 → 0.1.67
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/README.md +287 -9
- package/lib/audit-archive.d.ts +1 -1
- package/lib/audit-archive.d.ts.map +1 -1
- package/lib/audit-archive.js +31 -13
- package/lib/audit-archive.js.map +1 -1
- package/lib/cli.d.ts +7 -3
- package/lib/cli.d.ts.map +1 -1
- package/lib/cli.js +104 -23
- package/lib/cli.js.map +1 -1
- package/lib/config.d.ts +15 -2
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +49 -9
- package/lib/config.js.map +1 -1
- package/lib/diagnostics.js +2 -2
- package/lib/diagnostics.js.map +1 -1
- package/lib/index.d.ts +17 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +17 -1
- package/lib/index.js.map +1 -1
- package/lib/ledger.d.ts +19 -2
- package/lib/ledger.d.ts.map +1 -1
- package/lib/ledger.js +371 -44
- package/lib/ledger.js.map +1 -1
- package/lib/linux-cgroups.d.ts +75 -0
- package/lib/linux-cgroups.d.ts.map +1 -0
- package/lib/linux-cgroups.js +517 -0
- package/lib/linux-cgroups.js.map +1 -0
- package/lib/linux-execution-contract.d.ts +123 -0
- package/lib/linux-execution-contract.d.ts.map +1 -0
- package/lib/linux-execution-contract.js +279 -0
- package/lib/linux-execution-contract.js.map +1 -0
- package/lib/linux-execution.d.ts +123 -0
- package/lib/linux-execution.d.ts.map +1 -0
- package/lib/linux-execution.js +1264 -0
- package/lib/linux-execution.js.map +1 -0
- package/lib/linux-job-recovery.d.ts +5 -0
- package/lib/linux-job-recovery.d.ts.map +1 -0
- package/lib/linux-job-recovery.js +63 -0
- package/lib/linux-job-recovery.js.map +1 -0
- package/lib/linux-namespace.d.ts +80 -0
- package/lib/linux-namespace.d.ts.map +1 -0
- package/lib/linux-namespace.js +471 -0
- package/lib/linux-namespace.js.map +1 -0
- package/lib/linux-repository-admission.d.ts +26 -0
- package/lib/linux-repository-admission.d.ts.map +1 -0
- package/lib/linux-repository-admission.js +64 -0
- package/lib/linux-repository-admission.js.map +1 -0
- package/lib/linux-repository-runner.d.ts +54 -0
- package/lib/linux-repository-runner.d.ts.map +1 -0
- package/lib/linux-repository-runner.js +614 -0
- package/lib/linux-repository-runner.js.map +1 -0
- package/lib/linux-runner-state-migration.d.ts +94 -0
- package/lib/linux-runner-state-migration.d.ts.map +1 -0
- package/lib/linux-runner-state-migration.js +463 -0
- package/lib/linux-runner-state-migration.js.map +1 -0
- package/lib/linux-runner-state.d.ts +53 -0
- package/lib/linux-runner-state.d.ts.map +1 -0
- package/lib/linux-runner-state.js +332 -0
- package/lib/linux-runner-state.js.map +1 -0
- package/lib/linux-runtime-source.d.ts +28 -0
- package/lib/linux-runtime-source.d.ts.map +1 -0
- package/lib/linux-runtime-source.js +237 -0
- package/lib/linux-runtime-source.js.map +1 -0
- package/lib/linux-runtime.d.ts +37 -0
- package/lib/linux-runtime.d.ts.map +1 -0
- package/lib/linux-runtime.js +192 -0
- package/lib/linux-runtime.js.map +1 -0
- package/lib/linux-system-snapshot.d.ts +47 -0
- package/lib/linux-system-snapshot.d.ts.map +1 -0
- package/lib/linux-system-snapshot.js +704 -0
- package/lib/linux-system-snapshot.js.map +1 -0
- package/lib/linux-user-namespace.d.ts +79 -0
- package/lib/linux-user-namespace.d.ts.map +1 -0
- package/lib/linux-user-namespace.js +234 -0
- package/lib/linux-user-namespace.js.map +1 -0
- package/lib/linux-verifier-runner.d.ts +27 -0
- package/lib/linux-verifier-runner.d.ts.map +1 -0
- package/lib/linux-verifier-runner.js +346 -0
- package/lib/linux-verifier-runner.js.map +1 -0
- package/lib/native-cgroup-roots.d.ts +20 -0
- package/lib/native-cgroup-roots.d.ts.map +1 -0
- package/lib/native-cgroup-roots.js +121 -0
- package/lib/native-cgroup-roots.js.map +1 -0
- package/lib/native-resources.d.ts +44 -0
- package/lib/native-resources.d.ts.map +1 -0
- package/lib/native-resources.js +354 -0
- package/lib/native-resources.js.map +1 -0
- package/lib/probe.d.ts +10 -0
- package/lib/probe.d.ts.map +1 -1
- package/lib/probe.js +52 -2
- package/lib/probe.js.map +1 -1
- package/lib/service.d.ts +1 -1
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +122 -9
- package/lib/service.js.map +1 -1
- package/lib/storage.d.ts.map +1 -1
- package/lib/storage.js +36 -6
- package/lib/storage.js.map +1 -1
- package/lib/tools.js +1 -1
- package/lib/tools.js.map +1 -1
- package/lib/types.d.ts +5 -1
- package/lib/types.d.ts.map +1 -1
- package/lib/verifier-runner.d.ts +4 -2
- package/lib/verifier-runner.d.ts.map +1 -1
- package/lib/verifier-runner.js +22 -1
- package/lib/verifier-runner.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +15 -10
- package/runtime/linux-candidate-entry.py +82 -0
- package/runtime/linux-namespace-worker.mjs +561 -0
- package/runtime/linux-seccomp-policy.LICENSE +202 -0
- package/runtime/linux-seccomp-policy.json +886 -0
- package/runtime/linux-seccomp.py +106 -0
- package/runtime/linux-userns-launcher.py +149 -0
- package/runtime/linux-userns-proof.py +299 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { mkdtemp, realpath, rm } from 'node:fs/promises';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { dirname, isAbsolute, join, resolve } from 'node:path';
|
|
5
|
+
import { TextDecoder } from 'node:util';
|
|
6
|
+
import { parse as parseYaml } from 'yaml';
|
|
7
|
+
const VERSION = /^[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z]+(?:[.-][0-9A-Za-z]+)*)?$/u;
|
|
8
|
+
const COMMIT = /^[a-f0-9]{40}$/u;
|
|
9
|
+
const ROOTS = ['package.json', 'pnpm-lock.yaml', 'pnpm-workspace.yaml'];
|
|
10
|
+
const MANIFEST = /^(?:plugins|packages)\/[a-z0-9-]+\/package\.json$/u;
|
|
11
|
+
const MAX_OUTPUT = 4_194_304;
|
|
12
|
+
const OFFICIAL = 'https://github.com/22-ai-00/dsh-enhanced.git';
|
|
13
|
+
function fail(reason) { throw new Error(`rsi Linux runtime: ${reason}`); }
|
|
14
|
+
const decode = (bytes) => new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bytes);
|
|
15
|
+
const record = (value) => !!value && typeof value === 'object' && !Array.isArray(value);
|
|
16
|
+
const PACKAGE = /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/u;
|
|
17
|
+
const EXACT_VERSION = /^[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z]+(?:[.-][0-9A-Za-z]+)*)?$/u;
|
|
18
|
+
function packageConfiguration(value) {
|
|
19
|
+
if (!record(value) || Object.hasOwn(value, 'pnpm') || Object.hasOwn(value, 'devEngines')
|
|
20
|
+
|| value.engines !== undefined && (!record(value.engines) || Object.hasOwn(value.engines, 'runtime'))) {
|
|
21
|
+
fail('frozen package configuration unsupported');
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/** Workspace YAML is executable pnpm configuration, even with ignore-scripts.
|
|
25
|
+
* Accept only the reviewed declarative fields, leaving every original byte intact. */
|
|
26
|
+
function workspaceConfiguration(value) {
|
|
27
|
+
const allowed = new Set(['packages', 'catalog', 'linkWorkspacePackages', 'allowBuilds', 'minimumReleaseAgeExclude']);
|
|
28
|
+
if (!record(value) || Object.keys(value).some(key => !allowed.has(key)))
|
|
29
|
+
fail('frozen workspace configuration unsupported');
|
|
30
|
+
if (value.catalog !== undefined && (!record(value.catalog) || Object.entries(value.catalog).some(([name, version]) => !PACKAGE.test(name) || typeof version !== 'string' || !EXACT_VERSION.test(version))))
|
|
31
|
+
fail('frozen workspace configuration catalog invalid');
|
|
32
|
+
if (value.linkWorkspacePackages !== undefined && typeof value.linkWorkspacePackages !== 'boolean')
|
|
33
|
+
fail('frozen workspace configuration links invalid');
|
|
34
|
+
if (value.allowBuilds !== undefined && (!record(value.allowBuilds) || Object.entries(value.allowBuilds).some(([name, enabled]) => !PACKAGE.test(name) || typeof enabled !== 'boolean')))
|
|
35
|
+
fail('frozen workspace configuration builds invalid');
|
|
36
|
+
if (value.minimumReleaseAgeExclude !== undefined && (!Array.isArray(value.minimumReleaseAgeExclude)
|
|
37
|
+
|| value.minimumReleaseAgeExclude.some(entry => {
|
|
38
|
+
if (typeof entry !== 'string')
|
|
39
|
+
return true;
|
|
40
|
+
const split = entry.lastIndexOf('@');
|
|
41
|
+
return split < 1 || !PACKAGE.test(entry.slice(0, split)) || !EXACT_VERSION.test(entry.slice(split + 1));
|
|
42
|
+
})))
|
|
43
|
+
fail('frozen workspace configuration release exclusions invalid');
|
|
44
|
+
}
|
|
45
|
+
/** Copy every caller-owned byte before any asynchronous boundary. No caller digest is trusted. */
|
|
46
|
+
export function copyLinuxRuntimeManifests(source) {
|
|
47
|
+
if (!source || !VERSION.test(source.version) || !COMMIT.test(source.sourceCommit)
|
|
48
|
+
|| !Array.isArray(source.manifests) || source.manifests.length < 3 || source.manifests.length > 256)
|
|
49
|
+
fail('frozen manifest inventory incomplete');
|
|
50
|
+
const files = new Map();
|
|
51
|
+
let size = 0;
|
|
52
|
+
for (const entry of source.manifests) {
|
|
53
|
+
if (!entry || typeof entry.path !== 'string' || (!ROOTS.includes(entry.path) && !MANIFEST.test(entry.path))
|
|
54
|
+
|| files.has(entry.path) || !(entry.bytes instanceof Uint8Array) || entry.bytes.byteLength > MAX_OUTPUT)
|
|
55
|
+
fail('frozen manifest inventory invalid');
|
|
56
|
+
const bytes = Buffer.from(entry.bytes);
|
|
57
|
+
size += bytes.length;
|
|
58
|
+
if (size > 8_388_608)
|
|
59
|
+
fail('frozen manifest bytes exceed bound');
|
|
60
|
+
files.set(entry.path, bytes);
|
|
61
|
+
}
|
|
62
|
+
if (!ROOTS.every(name => files.has(name)))
|
|
63
|
+
fail('frozen manifest inventory incomplete');
|
|
64
|
+
const sorted = new Map([...files].sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0));
|
|
65
|
+
let root;
|
|
66
|
+
try {
|
|
67
|
+
root = JSON.parse(decode(sorted.get('package.json')));
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return fail('frozen root manifest invalid');
|
|
71
|
+
}
|
|
72
|
+
if (root?.name !== 'dsh-enhanced' || root.version !== source.version || root.packageManager !== 'pnpm@11.7.0')
|
|
73
|
+
fail('frozen root manifest identity differs');
|
|
74
|
+
packageConfiguration(root);
|
|
75
|
+
const workspaces = new Set([...sorted.keys()].filter(name => MANIFEST.test(name)).map(dirname));
|
|
76
|
+
const packageNames = new Set();
|
|
77
|
+
for (const name of workspaces) {
|
|
78
|
+
try {
|
|
79
|
+
const manifest = JSON.parse(decode(sorted.get(`${name}/package.json`)));
|
|
80
|
+
if (!manifest || typeof manifest.name !== 'string' || !manifest.name || packageNames.has(manifest.name)
|
|
81
|
+
|| manifest.version !== source.version || manifest.packageManager !== undefined && manifest.packageManager !== 'pnpm@11.7.0')
|
|
82
|
+
fail('frozen workspace manifest identity differs');
|
|
83
|
+
packageConfiguration(manifest);
|
|
84
|
+
packageNames.add(manifest.name);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
if (error instanceof Error && error.message.includes('frozen package configuration'))
|
|
88
|
+
throw error;
|
|
89
|
+
fail('frozen workspace manifest invalid');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
let workspace;
|
|
93
|
+
try {
|
|
94
|
+
workspace = parseYaml(decode(sorted.get('pnpm-workspace.yaml')));
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return fail('frozen workspace inventory invalid');
|
|
98
|
+
}
|
|
99
|
+
workspaceConfiguration(workspace);
|
|
100
|
+
if (!workspace || !Array.isArray(workspace.packages)
|
|
101
|
+
|| workspace.packages.some((pattern) => !['plugins/*', 'packages/*'].includes(pattern))
|
|
102
|
+
|| new Set(workspace.packages).size !== workspace.packages.length
|
|
103
|
+
|| [...workspaces].some(name => !workspace.packages.includes(name.split('/')[0] + '/*')))
|
|
104
|
+
fail('frozen workspace inventory invalid');
|
|
105
|
+
const lock = decode(sorted.get('pnpm-lock.yaml'));
|
|
106
|
+
if (!lock.startsWith("lockfileVersion: '9.0'\n") || /(?:https?:\/\/(?!registry\.npmjs\.org\/)|git\+|\b(?:git|tarball):|(?:^|[\s'"])(?:file:))/imu.test(lock))
|
|
107
|
+
fail('frozen lockfile unsupported resolution');
|
|
108
|
+
let parsed;
|
|
109
|
+
try {
|
|
110
|
+
parsed = parseYaml(lock);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return fail('frozen lockfile invalid');
|
|
114
|
+
}
|
|
115
|
+
if (!record(parsed) || Object.keys(parsed).some(key => !['lockfileVersion', 'settings', 'catalogs', 'importers', 'packages', 'snapshots'].includes(key)))
|
|
116
|
+
fail('frozen lockfile configuration unsupported');
|
|
117
|
+
if (parsed.settings !== undefined && (!record(parsed.settings)
|
|
118
|
+
|| Object.entries(parsed.settings).some(([key, value]) => !['autoInstallPeers', 'excludeLinksFromLockfile'].includes(key) || typeof value !== 'boolean')))
|
|
119
|
+
fail('frozen lockfile configuration settings unsupported');
|
|
120
|
+
if (!parsed?.importers || typeof parsed.importers !== 'object' || !Object.hasOwn(parsed.importers, '.')
|
|
121
|
+
|| [...workspaces].some(name => !Object.hasOwn(parsed.importers, name)))
|
|
122
|
+
fail('frozen lockfile importers missing');
|
|
123
|
+
for (const [importer, groups] of Object.entries(parsed.importers)) {
|
|
124
|
+
if (importer !== '.' && !workspaces.has(importer))
|
|
125
|
+
fail('frozen importer outside manifest inventory');
|
|
126
|
+
if (!record(groups) || Object.keys(groups).some(key => !['dependencies', 'devDependencies', 'optionalDependencies'].includes(key)))
|
|
127
|
+
fail('frozen importer configuration unsupported');
|
|
128
|
+
for (const group of ['dependencies', 'devDependencies', 'optionalDependencies']) {
|
|
129
|
+
for (const value of Object.values(groups[group] ?? {})) {
|
|
130
|
+
if (typeof value?.specifier !== 'string' || typeof value.version !== 'string')
|
|
131
|
+
fail('frozen dependency invalid');
|
|
132
|
+
if (/^(?:file:|git\+|github:|https?:)/iu.test(value.specifier))
|
|
133
|
+
fail('frozen dependency source unsupported');
|
|
134
|
+
if (value.version.startsWith('link:')) {
|
|
135
|
+
const target = resolve('/frozen', importer === '.' ? '' : importer, value.version.slice(5));
|
|
136
|
+
if (!target.startsWith('/frozen/') || !workspaces.has(target.slice(8)))
|
|
137
|
+
fail('frozen workspace link escapes manifests');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return sorted;
|
|
143
|
+
}
|
|
144
|
+
async function git(repository, args, signal, network = false) {
|
|
145
|
+
signal?.throwIfAborted();
|
|
146
|
+
const env = { PATH: '/usr/bin:/bin', HOME: '/nonexistent', LANG: 'C', LC_ALL: 'C',
|
|
147
|
+
GIT_CONFIG_NOSYSTEM: '1', GIT_CONFIG_GLOBAL: '/dev/null', GIT_CONFIG_SYSTEM: '/dev/null', GIT_CONFIG_COUNT: '0',
|
|
148
|
+
GIT_TERMINAL_PROMPT: '0', GIT_NO_LAZY_FETCH: '1', GIT_NO_REPLACE_OBJECTS: '1', GIT_ALLOW_PROTOCOL: network ? 'https' : 'file' };
|
|
149
|
+
if (network)
|
|
150
|
+
for (const key of ['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy', 'ALL_PROXY', 'all_proxy', 'NO_PROXY', 'no_proxy', 'GIT_SSL_CAINFO', 'GIT_SSL_CAPATH', 'SSL_CERT_FILE', 'SSL_CERT_DIR', 'CURL_CA_BUNDLE'])
|
|
151
|
+
if (process.env[key] !== undefined)
|
|
152
|
+
env[key] = process.env[key];
|
|
153
|
+
const bounded = AbortSignal.any([signal ?? new AbortController().signal, AbortSignal.timeout(60_000)]);
|
|
154
|
+
return new Promise((resolveOutput, reject) => {
|
|
155
|
+
const child = spawn('/usr/bin/git', ['-c', 'core.hooksPath=/dev/null', '-c', 'core.fsmonitor=false',
|
|
156
|
+
'-c', 'credential.helper=', '-c', 'gc.auto=0', ...args], { cwd: repository, env,
|
|
157
|
+
stdio: ['ignore', 'pipe', 'pipe'], detached: process.platform !== 'win32' });
|
|
158
|
+
let size = 0, failed = false;
|
|
159
|
+
const chunks = [];
|
|
160
|
+
const stop = () => {
|
|
161
|
+
if (child.pid)
|
|
162
|
+
try {
|
|
163
|
+
process.kill(-child.pid, 'SIGKILL');
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
child.kill('SIGKILL');
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
bounded.addEventListener('abort', stop, { once: true });
|
|
170
|
+
if (bounded.aborted)
|
|
171
|
+
stop();
|
|
172
|
+
child.stdout.on('data', (data) => { size += data.length; if (size > MAX_OUTPUT)
|
|
173
|
+
stop();
|
|
174
|
+
else
|
|
175
|
+
chunks.push(data); });
|
|
176
|
+
child.stderr.on('data', (data) => { size += data.length; if (size > MAX_OUTPUT)
|
|
177
|
+
stop(); });
|
|
178
|
+
child.once('error', () => { failed = true; });
|
|
179
|
+
child.once('close', code => {
|
|
180
|
+
bounded.removeEventListener('abort', stop);
|
|
181
|
+
if (failed || code !== 0 || size > MAX_OUTPUT || bounded.aborted)
|
|
182
|
+
reject(new Error('rsi Linux runtime: frozen Git object unavailable'));
|
|
183
|
+
else
|
|
184
|
+
resolveOutput(Buffer.concat(chunks));
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/** Only fixed Git blobs are read. No checkout, package script, repair branch or RSI workspace is created. */
|
|
189
|
+
export async function freezeLinuxRuntimeSource(input) {
|
|
190
|
+
input.signal?.throwIfAborted();
|
|
191
|
+
if (!VERSION.test(input.version) || !['git-object', 'local-head', 'official-tag'].includes(input.kind))
|
|
192
|
+
fail('invalid source version or kind');
|
|
193
|
+
// Snapshot selection before asynchronous work; caller mutation never changes the selected object.
|
|
194
|
+
input = { ...input };
|
|
195
|
+
let temporary;
|
|
196
|
+
try {
|
|
197
|
+
let repository, commit;
|
|
198
|
+
if (input.kind === 'official-tag') {
|
|
199
|
+
temporary = await mkdtemp(join(await realpath(tmpdir()), 'dsh-native-source-'));
|
|
200
|
+
repository = temporary;
|
|
201
|
+
await git(repository, ['init', '--bare', '--object-format=sha1', '.'], input.signal);
|
|
202
|
+
await git(repository, ['fetch', '--depth=1', '--no-tags', '--no-write-fetch-head', '--no-recurse-submodules', OFFICIAL,
|
|
203
|
+
`+refs/tags/v${input.version}:refs/dsh-native/source`], input.signal, true);
|
|
204
|
+
commit = (await git(repository, ['rev-parse', 'refs/dsh-native/source^{commit}'], input.signal)).toString('utf8').trim();
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
repository = input.repository;
|
|
208
|
+
if (typeof repository !== 'string' || !isAbsolute(repository) || resolve(repository) !== repository
|
|
209
|
+
|| repository.includes('\r') || repository.includes('\n') || repository.includes('\0') || await realpath(repository) !== repository)
|
|
210
|
+
fail('source repository noncanonical');
|
|
211
|
+
commit = input.kind === 'local-head' ? (await git(repository, ['rev-parse', 'HEAD'], input.signal)).toString('utf8').trim() : input.commit;
|
|
212
|
+
}
|
|
213
|
+
if (!COMMIT.test(commit) || (await git(repository, ['cat-file', '-t', commit], input.signal)).toString('utf8').trim() !== 'commit')
|
|
214
|
+
fail('source is not a SHA-1 commit');
|
|
215
|
+
const listing = decode(await git(repository, ['ls-tree', '-r', '--name-only', '-z', commit], input.signal)).split('\0');
|
|
216
|
+
const names = listing.filter(path => ROOTS.includes(path) || MANIFEST.test(path));
|
|
217
|
+
if (names.length < 3 || names.length > 256)
|
|
218
|
+
fail('frozen manifest inventory incomplete');
|
|
219
|
+
const manifests = [];
|
|
220
|
+
let size = 0;
|
|
221
|
+
for (const path of names) {
|
|
222
|
+
const bytes = await git(repository, ['show', `${commit}:${path}`], input.signal);
|
|
223
|
+
size += bytes.length;
|
|
224
|
+
if (size > 8_388_608)
|
|
225
|
+
fail('frozen manifest bytes exceed bound');
|
|
226
|
+
manifests.push({ path, bytes });
|
|
227
|
+
}
|
|
228
|
+
const source = { version: input.version, sourceCommit: commit, manifests };
|
|
229
|
+
const checked = copyLinuxRuntimeManifests(source);
|
|
230
|
+
return { version: source.version, sourceCommit: commit, manifests: [...checked].map(([path, bytes]) => ({ path, bytes })) };
|
|
231
|
+
}
|
|
232
|
+
finally {
|
|
233
|
+
if (temporary)
|
|
234
|
+
await rm(temporary, { recursive: true, force: true });
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=linux-runtime-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linux-runtime-source.js","sourceRoot":"","sources":["../src/linux-runtime-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/** A frozen, owner-private Linux toolchain. No Docker identity is part of this contract. */
|
|
2
|
+
export interface LinuxRuntime {
|
|
3
|
+
schemaVersion: 1;
|
|
4
|
+
backend: 'linux-native';
|
|
5
|
+
platform: 'linux-x64' | 'linux-arm64';
|
|
6
|
+
sourceCommit: string;
|
|
7
|
+
lockSha256: string;
|
|
8
|
+
root: {
|
|
9
|
+
path: string;
|
|
10
|
+
dev: number;
|
|
11
|
+
ino: number;
|
|
12
|
+
sha256: string;
|
|
13
|
+
};
|
|
14
|
+
nodePath: string;
|
|
15
|
+
nodeSha256: string;
|
|
16
|
+
pnpmPath: string;
|
|
17
|
+
nativePnpmPath: string;
|
|
18
|
+
nativePnpmRoot: string;
|
|
19
|
+
modulesPath: string;
|
|
20
|
+
storePath: string;
|
|
21
|
+
cachePath: string;
|
|
22
|
+
versions: {
|
|
23
|
+
node: 'v22.23.2';
|
|
24
|
+
pnpm: '11.7.0';
|
|
25
|
+
typescript: string;
|
|
26
|
+
cordis: string;
|
|
27
|
+
tools: string;
|
|
28
|
+
systemPrompt: string;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export declare function validateLinuxRuntime(value: unknown): LinuxRuntime;
|
|
32
|
+
/** Hash paths, metadata and bytes; links are recorded but never followed during traversal. */
|
|
33
|
+
export declare function hashLinuxRuntimeTree(root: string, signal?: AbortSignal): Promise<string>;
|
|
34
|
+
export declare function linuxRuntimeDigest(value: LinuxRuntime): string;
|
|
35
|
+
/** Perform the full tree check before giving a candidate access to the toolchain. */
|
|
36
|
+
export declare function verifyLinuxRuntime(value: LinuxRuntime, signal?: AbortSignal): Promise<LinuxRuntime>;
|
|
37
|
+
//# sourceMappingURL=linux-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linux-runtime.d.ts","sourceRoot":"","sources":["../src/linux-runtime.ts"],"names":[],"mappings":"AAOA,4FAA4F;AAC5F,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,CAAC,CAAA;IAChB,OAAO,EAAE,cAAc,CAAA;IACvB,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAA;IACrC,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAChE,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAC/E,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;CACxC;AAaD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CA6BjE;AAED,8FAA8F;AAC9F,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAuD9F;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAE9D;AAED,qFAAqF;AACrF,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAuDzG"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { execFile } from 'node:child_process';
|
|
3
|
+
import { constants } from 'node:fs';
|
|
4
|
+
import { lstat, open, readFile, readdir, realpath } from 'node:fs/promises';
|
|
5
|
+
import { isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
6
|
+
import { promisify } from 'node:util';
|
|
7
|
+
const HEX = /^[a-f0-9]{64}$/u;
|
|
8
|
+
const COMMIT = /^[a-f0-9]{40}$/u;
|
|
9
|
+
const MAX_ENTRIES = 500_000;
|
|
10
|
+
const MAX_BYTES = 8 * 1024 * 1024 * 1024;
|
|
11
|
+
const execFileAsync = promisify(execFile);
|
|
12
|
+
const canonical = (value) => typeof value === 'string'
|
|
13
|
+
&& isAbsolute(value) && resolve(value) === value && !value.includes('\r')
|
|
14
|
+
&& !value.includes('\n') && !value.includes('\0');
|
|
15
|
+
const within = (path, root) => path === root || path.startsWith(root + sep);
|
|
16
|
+
const digest = (bytes) => createHash('sha256').update(bytes).digest('hex');
|
|
17
|
+
export function validateLinuxRuntime(value) {
|
|
18
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
19
|
+
throw new Error('invalid Linux runtime');
|
|
20
|
+
const item = value;
|
|
21
|
+
if (Object.keys(item).sort().join() !== 'backend,cachePath,lockSha256,modulesPath,nativePnpmPath,nativePnpmRoot,nodePath,nodeSha256,platform,pnpmPath,root,schemaVersion,sourceCommit,storePath,versions'
|
|
22
|
+
|| item.schemaVersion !== 1 || item.backend !== 'linux-native'
|
|
23
|
+
|| item.platform !== `linux-${process.arch}` || !COMMIT.test(item.sourceCommit)
|
|
24
|
+
|| item.sourceCommit === '0'.repeat(40)
|
|
25
|
+
|| !HEX.test(item.lockSha256) || !HEX.test(item.nodeSha256)
|
|
26
|
+
|| !item.root || Object.keys(item.root).sort().join() !== 'dev,ino,path,sha256'
|
|
27
|
+
|| !canonical(item.root.path) || item.root.path === '/'
|
|
28
|
+
|| !Number.isSafeInteger(item.root.dev) || item.root.dev < 0
|
|
29
|
+
|| !Number.isSafeInteger(item.root.ino) || item.root.ino < 0 || !HEX.test(item.root.sha256)
|
|
30
|
+
|| [item.nodePath, item.pnpmPath, item.nativePnpmPath, item.nativePnpmRoot,
|
|
31
|
+
item.modulesPath, item.storePath, item.cachePath]
|
|
32
|
+
.some(path => !canonical(path) || !within(path, item.root.path) || path === item.root.path)
|
|
33
|
+
|| item.nodePath !== join(item.root.path, 'bin', 'node')
|
|
34
|
+
|| item.pnpmPath !== join(item.root.path, 'pnpm', 'bin', 'pnpm.mjs')
|
|
35
|
+
|| item.nativePnpmRoot !== join(item.root.path, 'pnpm-native')
|
|
36
|
+
|| item.nativePnpmPath !== join(item.nativePnpmRoot, 'pnpm')
|
|
37
|
+
|| item.modulesPath !== join(item.root.path, 'node_modules')
|
|
38
|
+
|| item.storePath !== join(item.root.path, 'store')
|
|
39
|
+
|| item.cachePath !== join(item.root.path, 'cache')
|
|
40
|
+
|| !item.versions || Object.keys(item.versions).sort().join() !== 'cordis,node,pnpm,systemPrompt,tools,typescript'
|
|
41
|
+
|| item.versions.node !== 'v22.23.2' || item.versions.pnpm !== '11.7.0'
|
|
42
|
+
|| ['typescript', 'cordis', 'tools', 'systemPrompt'].some(key => {
|
|
43
|
+
const version = item.versions[key];
|
|
44
|
+
return typeof version !== 'string' || version.length < 1 || version.length > 128;
|
|
45
|
+
}))
|
|
46
|
+
throw new Error('invalid Linux runtime');
|
|
47
|
+
return Object.freeze({ ...item, root: Object.freeze({ ...item.root }), versions: Object.freeze({ ...item.versions }) });
|
|
48
|
+
}
|
|
49
|
+
/** Hash paths, metadata and bytes; links are recorded but never followed during traversal. */
|
|
50
|
+
export async function hashLinuxRuntimeTree(root, signal) {
|
|
51
|
+
signal?.throwIfAborted();
|
|
52
|
+
if (!canonical(root) || await realpath(root) !== root)
|
|
53
|
+
throw new Error('noncanonical Linux runtime root');
|
|
54
|
+
const base = await lstat(root);
|
|
55
|
+
if (!base.isDirectory() || base.isSymbolicLink() || base.uid !== process.getuid?.())
|
|
56
|
+
throw new Error('unsafe Linux runtime root');
|
|
57
|
+
let count = 0, bytes = 0;
|
|
58
|
+
const hash = createHash('sha256');
|
|
59
|
+
// Traversal is sequential, so one bounded buffer suffices for the whole tree.
|
|
60
|
+
const buffer = Buffer.allocUnsafe(64 * 1024);
|
|
61
|
+
const visit = async (path) => {
|
|
62
|
+
signal?.throwIfAborted();
|
|
63
|
+
if (++count > MAX_ENTRIES)
|
|
64
|
+
throw new Error('Linux runtime entry limit');
|
|
65
|
+
const item = await lstat(path);
|
|
66
|
+
if (item.uid !== process.getuid?.())
|
|
67
|
+
throw new Error('Linux runtime owner mismatch');
|
|
68
|
+
const name = relative(root, path).split(sep).join('/');
|
|
69
|
+
if (item.isSymbolicLink()) {
|
|
70
|
+
const target = await realpath(path);
|
|
71
|
+
if (!within(target, root))
|
|
72
|
+
throw new Error('Linux runtime link escaped root');
|
|
73
|
+
hash.update(JSON.stringify(['link', name, relative(root, target).split(sep).join('/')]) + '\n');
|
|
74
|
+
}
|
|
75
|
+
else if (item.isDirectory()) {
|
|
76
|
+
if (item.mode & 0o022)
|
|
77
|
+
throw new Error('Linux runtime writable directory');
|
|
78
|
+
hash.update(JSON.stringify(['dir', name, item.mode & 0o777]) + '\n');
|
|
79
|
+
for (const child of (await readdir(path)).sort())
|
|
80
|
+
await visit(join(path, child));
|
|
81
|
+
const after = await lstat(path);
|
|
82
|
+
if (after.dev !== item.dev || after.ino !== item.ino || !after.isDirectory())
|
|
83
|
+
throw new Error('Linux runtime directory changed');
|
|
84
|
+
}
|
|
85
|
+
else if (item.isFile() && item.nlink === 1) {
|
|
86
|
+
if (item.mode & 0o022 || (bytes += item.size) > MAX_BYTES)
|
|
87
|
+
throw new Error('Linux runtime file bound');
|
|
88
|
+
const descriptor = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
89
|
+
let fileDigest;
|
|
90
|
+
try {
|
|
91
|
+
const opened = await descriptor.stat();
|
|
92
|
+
if (!opened.isFile() || opened.dev !== item.dev || opened.ino !== item.ino || opened.size !== item.size)
|
|
93
|
+
throw new Error('Linux runtime file changed');
|
|
94
|
+
const fileHash = createHash('sha256');
|
|
95
|
+
// Keep the FileHandle as the sole descriptor owner. A signal can abort
|
|
96
|
+
// during the metadata awaits above; constructing a ReadStream with that
|
|
97
|
+
// already-aborted signal can emit an unhandled error before iteration.
|
|
98
|
+
while (true) {
|
|
99
|
+
signal?.throwIfAborted();
|
|
100
|
+
const { bytesRead } = await descriptor.read(buffer, 0, buffer.length, null);
|
|
101
|
+
signal?.throwIfAborted();
|
|
102
|
+
if (bytesRead === 0)
|
|
103
|
+
break;
|
|
104
|
+
fileHash.update(buffer.subarray(0, bytesRead));
|
|
105
|
+
}
|
|
106
|
+
const after = await descriptor.stat();
|
|
107
|
+
if (after.dev !== item.dev || after.ino !== item.ino || after.size !== item.size || after.mtimeMs !== item.mtimeMs)
|
|
108
|
+
throw new Error('Linux runtime file changed');
|
|
109
|
+
fileDigest = fileHash.digest('hex');
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
await descriptor.close();
|
|
113
|
+
}
|
|
114
|
+
const named = await lstat(path);
|
|
115
|
+
if (named.dev !== item.dev || named.ino !== item.ino || !named.isFile())
|
|
116
|
+
throw new Error('Linux runtime path changed');
|
|
117
|
+
hash.update(JSON.stringify(['file', name, item.mode & 0o777, item.size, fileDigest]) + '\n');
|
|
118
|
+
}
|
|
119
|
+
else
|
|
120
|
+
throw new Error('Linux runtime special or linked file');
|
|
121
|
+
};
|
|
122
|
+
await visit(root);
|
|
123
|
+
signal?.throwIfAborted();
|
|
124
|
+
return hash.digest('hex');
|
|
125
|
+
}
|
|
126
|
+
export function linuxRuntimeDigest(value) {
|
|
127
|
+
return digest(JSON.stringify(validateLinuxRuntime(value)));
|
|
128
|
+
}
|
|
129
|
+
/** Perform the full tree check before giving a candidate access to the toolchain. */
|
|
130
|
+
export async function verifyLinuxRuntime(value, signal) {
|
|
131
|
+
signal?.throwIfAborted();
|
|
132
|
+
const runtime = validateLinuxRuntime(value);
|
|
133
|
+
if (process.platform !== 'linux')
|
|
134
|
+
throw new Error('Linux runtime requires Linux');
|
|
135
|
+
if (await realpath(runtime.root.path) !== runtime.root.path)
|
|
136
|
+
throw new Error('Linux runtime root moved');
|
|
137
|
+
const root = await lstat(runtime.root.path);
|
|
138
|
+
if (!root.isDirectory() || root.isSymbolicLink() || root.uid !== process.getuid?.()
|
|
139
|
+
|| root.dev !== runtime.root.dev || root.ino !== runtime.root.ino
|
|
140
|
+
|| await hashLinuxRuntimeTree(runtime.root.path, signal) !== runtime.root.sha256)
|
|
141
|
+
throw new Error('Linux runtime root differs');
|
|
142
|
+
const node = await lstat(runtime.nodePath);
|
|
143
|
+
if (!node.isFile() || node.isSymbolicLink() || node.nlink !== 1 || node.mode & 0o022
|
|
144
|
+
|| await realpath(runtime.nodePath) !== runtime.nodePath
|
|
145
|
+
|| digest(await readFile(runtime.nodePath, { signal })) !== runtime.nodeSha256)
|
|
146
|
+
throw new Error('Linux runtime Node differs');
|
|
147
|
+
for (const [key, name] of [['typescript', 'typescript'], ['cordis', '@deepseek-ai/cordis'],
|
|
148
|
+
['tools', '@deepseek-ai/dsh-tools'], ['systemPrompt', '@deepseek-ai/dsh-system-prompt']]) {
|
|
149
|
+
signal?.throwIfAborted();
|
|
150
|
+
const path = join(runtime.modulesPath, name, 'package.json');
|
|
151
|
+
if (!within(await realpath(path), runtime.root.path))
|
|
152
|
+
throw new Error('Linux runtime package escaped root');
|
|
153
|
+
const manifest = JSON.parse(await readFile(path, { encoding: 'utf8', signal }));
|
|
154
|
+
if (manifest.version !== runtime.versions[key])
|
|
155
|
+
throw new Error('Linux runtime package version differs');
|
|
156
|
+
}
|
|
157
|
+
const nativePnpm = await lstat(runtime.nativePnpmPath);
|
|
158
|
+
if (!nativePnpm.isFile() || nativePnpm.isSymbolicLink() || nativePnpm.nlink !== 1
|
|
159
|
+
|| nativePnpm.mode & 0o022 || await realpath(runtime.nativePnpmPath) !== runtime.nativePnpmPath) {
|
|
160
|
+
throw new Error('Linux runtime native pnpm differs');
|
|
161
|
+
}
|
|
162
|
+
const releaseNodePath = join(runtime.nativePnpmRoot, 'node');
|
|
163
|
+
const releaseNode = await lstat(releaseNodePath);
|
|
164
|
+
if (!releaseNode.isFile() || releaseNode.isSymbolicLink() || releaseNode.nlink !== 1
|
|
165
|
+
|| releaseNode.mode & 0o022 || await realpath(releaseNodePath) !== releaseNodePath
|
|
166
|
+
|| digest(await readFile(releaseNodePath, { signal })) !== runtime.nodeSha256) {
|
|
167
|
+
throw new Error('Linux runtime release Node differs');
|
|
168
|
+
}
|
|
169
|
+
const nativeManifest = JSON.parse(await readFile(join(runtime.nativePnpmRoot, 'package.json'), { encoding: 'utf8', signal }));
|
|
170
|
+
if (nativeManifest.name !== '@pnpm/exe' || nativeManifest.version !== runtime.versions.pnpm) {
|
|
171
|
+
throw new Error('Linux runtime native pnpm package differs');
|
|
172
|
+
}
|
|
173
|
+
const lock = await readFile(join(runtime.root.path, 'pnpm-lock.yaml'), { signal });
|
|
174
|
+
if (digest(lock) !== runtime.lockSha256)
|
|
175
|
+
throw new Error('Linux runtime lock differs');
|
|
176
|
+
const env = { PATH: '/usr/bin:/bin', HOME: '/nonexistent', LANG: 'C', LC_ALL: 'C' };
|
|
177
|
+
const [observedNode, observedPnpm, observedNativePnpm, observedReleaseNode] = await Promise.all([
|
|
178
|
+
execFileAsync(runtime.nodePath, ['--version'], { timeout: 5_000, maxBuffer: 1024, env, signal, killSignal: 'SIGKILL' }),
|
|
179
|
+
execFileAsync(runtime.nodePath, [runtime.pnpmPath, '--version'], { timeout: 5_000, maxBuffer: 1024, env, signal, killSignal: 'SIGKILL' }),
|
|
180
|
+
execFileAsync(runtime.nativePnpmPath, ['--version'], { timeout: 5_000, maxBuffer: 1024, env, signal, killSignal: 'SIGKILL' }),
|
|
181
|
+
execFileAsync(releaseNodePath, ['--version'], { timeout: 5_000, maxBuffer: 1024, env, signal, killSignal: 'SIGKILL' }),
|
|
182
|
+
]);
|
|
183
|
+
if (observedNode.stdout.trim() !== runtime.versions.node
|
|
184
|
+
|| observedPnpm.stdout.trim() !== runtime.versions.pnpm
|
|
185
|
+
|| observedNativePnpm.stdout.trim() !== runtime.versions.pnpm
|
|
186
|
+
|| observedReleaseNode.stdout.trim() !== runtime.versions.node) {
|
|
187
|
+
throw new Error('Linux runtime executable version differs');
|
|
188
|
+
}
|
|
189
|
+
signal?.throwIfAborted();
|
|
190
|
+
return runtime;
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=linux-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linux-runtime.js","sourceRoot":"","sources":["../src/linux-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type Stats } from 'node:fs';
|
|
2
|
+
import { type LinuxRuntime } from './linux-runtime.js';
|
|
3
|
+
export interface LinuxSystemSnapshot {
|
|
4
|
+
schemaVersion: 1;
|
|
5
|
+
root: {
|
|
6
|
+
path: string;
|
|
7
|
+
dev: number;
|
|
8
|
+
ino: number;
|
|
9
|
+
sha256: string;
|
|
10
|
+
};
|
|
11
|
+
manifestSha256: string;
|
|
12
|
+
bytes: number;
|
|
13
|
+
entries: number;
|
|
14
|
+
}
|
|
15
|
+
export declare const linuxSystemSnapshotLimits: Readonly<{
|
|
16
|
+
bytes: number;
|
|
17
|
+
entries: 32768;
|
|
18
|
+
}>;
|
|
19
|
+
interface SourceLink {
|
|
20
|
+
path: string;
|
|
21
|
+
target: string;
|
|
22
|
+
info: Stats;
|
|
23
|
+
}
|
|
24
|
+
interface Source {
|
|
25
|
+
path: string;
|
|
26
|
+
info: Stats;
|
|
27
|
+
links: SourceLink[];
|
|
28
|
+
}
|
|
29
|
+
/** Resolve every component without trusting a user-owned intermediate or a mutable symlink. */
|
|
30
|
+
export declare function inspectTrustedLinuxSystemSource(path: string): Promise<Source>;
|
|
31
|
+
interface Elf {
|
|
32
|
+
interpreter?: string;
|
|
33
|
+
needed: string[];
|
|
34
|
+
search: string[];
|
|
35
|
+
inherit: boolean;
|
|
36
|
+
}
|
|
37
|
+
/** Metadata reads are bounded independently of ELF size; no loader or inspection executable runs. */
|
|
38
|
+
export declare function parseLinuxSystemElf(readAt: (offset: number, length: number) => Promise<Buffer>, size: number, path: string): Promise<Elf | undefined>;
|
|
39
|
+
/** The destination must be fresh, below a canonical owner-private directory. */
|
|
40
|
+
export declare function prepareLinuxSystemSnapshot(root: string, signal?: AbortSignal, runtime?: LinuxRuntime): Promise<LinuxSystemSnapshot>;
|
|
41
|
+
/** Verify actual modes, complete inventory and bytes, independently of live host sources. */
|
|
42
|
+
export declare function verifyLinuxSystemSnapshot(value: LinuxSystemSnapshot, signal?: AbortSignal): Promise<LinuxSystemSnapshot>;
|
|
43
|
+
/** Check the ABI closure of only the frozen runtime's selected Node/pnpm
|
|
44
|
+
* binaries. Host programs are never selected by caller-supplied arbitrary paths. */
|
|
45
|
+
export declare function verifyLinuxSystemSnapshotRuntimeDependencies(snapshot: LinuxSystemSnapshot, runtime: LinuxRuntime, signal?: AbortSignal): Promise<void>;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=linux-system-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linux-system-snapshot.d.ts","sourceRoot":"","sources":["../src/linux-system-snapshot.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,SAAS,CAAA;AAI/C,OAAO,EAAkE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtH,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,CAAC,CAAA;IAChB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAChE,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,yBAAyB;;;EAA8D,CAAA;AAWpG,UAAU,UAAU;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE;AAClE,UAAU,MAAM;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAA;CAAE;AAInE,+FAA+F;AAC/F,wBAAsB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBnF;AAkCD,UAAU,GAAG;IAAG,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE;AAC5F,qGAAqG;AACrG,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CA+E3J;AAsBD,gFAAgF;AAChF,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA2OzI;AAED,6FAA6F;AAC7F,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqD9H;AAaD;oFACoF;AACpF,wBAAsB,4CAA4C,CAAC,QAAQ,EAAE,mBAAmB,EAAE,OAAO,EAAE,YAAY,EACrH,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoErC"}
|