@dsh-enhanced/plugin-control-plane 0.1.65 → 0.1.66
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 +81 -5
- package/lib/attestation.d.ts.map +1 -1
- package/lib/attestation.js +33 -1
- package/lib/attestation.js.map +1 -1
- package/lib/creation-capability-empty-handoff.d.ts +57 -0
- package/lib/creation-capability-empty-handoff.d.ts.map +1 -0
- package/lib/creation-capability-empty-handoff.js +147 -0
- package/lib/creation-capability-empty-handoff.js.map +1 -0
- package/lib/creation-capability-execution.d.ts +9 -0
- package/lib/creation-capability-execution.d.ts.map +1 -0
- package/lib/creation-capability-execution.js +70 -0
- package/lib/creation-capability-execution.js.map +1 -0
- package/lib/creation-capability-feedback.d.ts +58 -1
- package/lib/creation-capability-feedback.d.ts.map +1 -1
- package/lib/creation-capability-feedback.js +532 -50
- package/lib/creation-capability-feedback.js.map +1 -1
- package/lib/creation-capability-handoff-common.d.ts +60 -0
- package/lib/creation-capability-handoff-common.d.ts.map +1 -0
- package/lib/creation-capability-handoff-common.js +195 -0
- package/lib/creation-capability-handoff-common.js.map +1 -0
- package/lib/creation-capability-journal.d.ts +19 -0
- package/lib/creation-capability-journal.d.ts.map +1 -1
- package/lib/creation-capability-journal.js +62 -21
- package/lib/creation-capability-journal.js.map +1 -1
- package/lib/creation-capability-runtime.d.ts +18 -0
- package/lib/creation-capability-runtime.d.ts.map +1 -1
- package/lib/creation-capability-runtime.js +76 -18
- package/lib/creation-capability-runtime.js.map +1 -1
- package/lib/creation-capability-sealed-audit.d.ts +19 -0
- package/lib/creation-capability-sealed-audit.d.ts.map +1 -0
- package/lib/creation-capability-sealed-audit.js +114 -0
- package/lib/creation-capability-sealed-audit.js.map +1 -0
- package/lib/creation-capability-sealed-handoff.d.ts +160 -0
- package/lib/creation-capability-sealed-handoff.d.ts.map +1 -0
- package/lib/creation-capability-sealed-handoff.js +695 -0
- package/lib/creation-capability-sealed-handoff.js.map +1 -0
- package/lib/creation-capability-trend-snapshot.d.ts +70 -0
- package/lib/creation-capability-trend-snapshot.d.ts.map +1 -0
- package/lib/creation-capability-trend-snapshot.js +117 -0
- package/lib/creation-capability-trend-snapshot.js.map +1 -0
- package/lib/creation-capability-types.d.ts +254 -4
- package/lib/creation-capability-types.d.ts.map +1 -1
- package/lib/in-process-reload.d.ts +191 -0
- package/lib/in-process-reload.d.ts.map +1 -0
- package/lib/in-process-reload.js +284 -0
- package/lib/in-process-reload.js.map +1 -0
- package/lib/index.d.ts +12 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +8 -2
- package/lib/index.js.map +1 -1
- package/lib/linux-source-build.d.ts +16 -0
- package/lib/linux-source-build.d.ts.map +1 -0
- package/lib/linux-source-build.js +268 -0
- package/lib/linux-source-build.js.map +1 -0
- package/lib/linux-source-preflight.d.ts +31 -0
- package/lib/linux-source-preflight.d.ts.map +1 -0
- package/lib/linux-source-preflight.js +101 -0
- package/lib/linux-source-preflight.js.map +1 -0
- package/lib/live-qualification-runtime.d.ts +6 -2
- package/lib/live-qualification-runtime.d.ts.map +1 -1
- package/lib/live-qualification-runtime.js +65 -11
- package/lib/live-qualification-runtime.js.map +1 -1
- package/lib/owner-task-gap-types.d.ts +23 -0
- package/lib/owner-task-gap-types.d.ts.map +1 -1
- package/lib/owner-task-gaps.d.ts +4 -0
- package/lib/owner-task-gaps.d.ts.map +1 -1
- package/lib/owner-task-gaps.js +35 -1
- package/lib/owner-task-gaps.js.map +1 -1
- package/lib/scanner-owner-runtime.d.ts +34 -0
- package/lib/scanner-owner-runtime.d.ts.map +1 -0
- package/lib/scanner-owner-runtime.js +99 -0
- package/lib/scanner-owner-runtime.js.map +1 -0
- package/lib/service.d.ts +82 -5
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +450 -45
- package/lib/service.js.map +1 -1
- package/lib/source-approval-authority.d.ts.map +1 -1
- package/lib/source-approval-authority.js +25 -7
- package/lib/source-approval-authority.js.map +1 -1
- package/lib/source-build-diagnostics.d.ts +31 -0
- package/lib/source-build-diagnostics.d.ts.map +1 -0
- package/lib/source-build-diagnostics.js +110 -0
- package/lib/source-build-diagnostics.js.map +1 -0
- package/lib/source-build.d.ts +25 -2
- package/lib/source-build.d.ts.map +1 -1
- package/lib/source-build.js +145 -26
- package/lib/source-build.js.map +1 -1
- package/lib/source-creation.d.ts +6 -2
- package/lib/source-creation.d.ts.map +1 -1
- package/lib/source-creation.js +11 -2
- package/lib/source-creation.js.map +1 -1
- package/lib/source-job-types.d.ts +3 -1
- package/lib/source-job-types.d.ts.map +1 -1
- package/lib/source-jobs.d.ts +28 -1
- package/lib/source-jobs.d.ts.map +1 -1
- package/lib/source-jobs.js +117 -26
- package/lib/source-jobs.js.map +1 -1
- package/lib/sqlite.d.ts +1 -1
- package/lib/sqlite.d.ts.map +1 -1
- package/lib/sqlite.js +36 -1
- package/lib/sqlite.js.map +1 -1
- package/lib/store.d.ts +21 -1
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +470 -174
- package/lib/store.js.map +1 -1
- package/lib/systemd-host-authority.d.ts.map +1 -1
- package/lib/systemd-host-authority.js +4 -0
- package/lib/systemd-host-authority.js.map +1 -1
- package/lib/task-observation-runtime.d.ts +6 -2
- package/lib/task-observation-runtime.d.ts.map +1 -1
- package/lib/task-observation-runtime.js +69 -11
- package/lib/task-observation-runtime.js.map +1 -1
- package/lib/types.d.ts +47 -1
- package/lib/types.d.ts.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/work-item-creation-contract.d.ts +17 -0
- package/lib/work-item-creation-contract.d.ts.map +1 -0
- package/lib/work-item-creation-contract.js +61 -0
- package/lib/work-item-creation-contract.js.map +1 -0
- package/package.json +10 -10
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { consumeLinuxRepositoryAdmissionRefusal, verifyLinuxRuntime, linuxRuntimeDigest } from '@dsh-enhanced/assistant-isolation';
|
|
5
|
+
import { ControlPlaneCliError } from './errors.js';
|
|
6
|
+
import { checkedSourceSnapshot, runLocalBuffer, runLocalCommand } from './source-workspace.js';
|
|
7
|
+
import { PREPARED_SOURCE_BUILD_SCRIPT, sourceTree, validateSourceBuildConfig, verifySourcePreparation } from './source-build.js';
|
|
8
|
+
import { consumeLinuxSourceBuildFailed, isLinuxSourceBuildFailed, linuxSourceBuildFailed, linuxSourceNotStarted } from './linux-source-preflight.js';
|
|
9
|
+
import { sourceBuildDiagnostics } from './source-build-diagnostics.js';
|
|
10
|
+
const sha = (bytes) => createHash('sha256').update(bytes).digest('hex');
|
|
11
|
+
const maximumArchiveBytes = 64 * 1024 ** 2;
|
|
12
|
+
export const LINUX_SOURCE_PACK_PATH = '.dsh-native-artifact/package.tgz';
|
|
13
|
+
const packMarker = /^DSH_PREPARED_PACK\t([^\t\n]+)\t([0-9]+)\t([a-f0-9]{64})\t([^\t\n]+)\t([^\t\n]+)$/u;
|
|
14
|
+
/** Retain the full repository command and both archive/pack integrity checks. */
|
|
15
|
+
export const LINUX_PREPARED_SOURCE_BUILD_SCRIPT = String.raw `set -eu
|
|
16
|
+
umask 077
|
|
17
|
+
mkdir -p /workspace/.dsh-pnpm-store /workspace/.dsh-pnpm-cache
|
|
18
|
+
cp -R /runtime/0/store/. /workspace/.dsh-pnpm-store/
|
|
19
|
+
cp -R /runtime/0/cache/. /workspace/.dsh-pnpm-cache/
|
|
20
|
+
chmod -R u+w /workspace/.dsh-pnpm-store /workspace/.dsh-pnpm-cache
|
|
21
|
+
` + PREPARED_SOURCE_BUILD_SCRIPT.replaceAll('/opt/dsh-source-baseline/pnpm-lock.yaml', '/runtime/0/pnpm-lock.yaml')
|
|
22
|
+
.replace("if (process.env.DSH_SOURCE_CAPTURE_PACK === 'true') process.stdout.write('DSH_PREPARED_PACK_BYTES_V1\\t' + packed.toString('base64') + '\\n')", '')
|
|
23
|
+
.replace('cd /workspace\nverify_input init', 'cd /workspace\ntest ! -e node_modules\nverify_input init')
|
|
24
|
+
+ '\nmkdir -p /workspace/.dsh-native-artifact\ncp -- "$pack" /workspace/.dsh-native-artifact/package.tgz\n';
|
|
25
|
+
const buildScriptSha256 = sha(LINUX_PREPARED_SOURCE_BUILD_SCRIPT);
|
|
26
|
+
function fail(message) { throw new ControlPlaneCliError('SOURCE_BOUNDARY', `Linux source build ${message}`); }
|
|
27
|
+
function archiveEnvironment(input) {
|
|
28
|
+
return { ...input.environment, GIT_ATTR_NOSYSTEM: '1', GIT_CONFIG_NOSYSTEM: '1',
|
|
29
|
+
GIT_CONFIG_SYSTEM: '/dev/null', GIT_CONFIG_GLOBAL: '/dev/null' };
|
|
30
|
+
}
|
|
31
|
+
/** Commit archives enable export-subst, unlike tree archives. Reject active
|
|
32
|
+
* substitutions through Git's parser so the archive retains exact tree bytes. */
|
|
33
|
+
async function rejectArchiveSubstitutions(input, temporary) {
|
|
34
|
+
const environment = { ...archiveEnvironment(input), GIT_INDEX_FILE: join(temporary, 'index') };
|
|
35
|
+
const paths = await runLocalBuffer('git', ['-c', 'core.attributesFile=/dev/null', 'ls-files', '-z'], input.worktree, environment, { maximumOutput: 8 * 1024 ** 2, signal: input.signal });
|
|
36
|
+
const git = spawn('/usr/bin/git', ['-c', 'core.attributesFile=/dev/null', 'check-attr', '--cached', '-z', 'export-subst', '--stdin'], { cwd: input.worktree, env: environment, stdio: ['pipe', 'pipe', 'pipe'], shell: false });
|
|
37
|
+
const closed = new Promise(resolve => {
|
|
38
|
+
git.once('error', () => resolve(null));
|
|
39
|
+
git.once('close', resolve);
|
|
40
|
+
});
|
|
41
|
+
const stop = () => { git.kill('SIGKILL'); };
|
|
42
|
+
git.stdin.on('error', stop);
|
|
43
|
+
git.stderr.resume();
|
|
44
|
+
input.signal.addEventListener('abort', stop, { once: true });
|
|
45
|
+
const timer = setTimeout(stop, 60_000), chunks = [];
|
|
46
|
+
let size = 0;
|
|
47
|
+
try {
|
|
48
|
+
git.stdin.end(paths);
|
|
49
|
+
for await (const chunk of git.stdout) {
|
|
50
|
+
input.signal.throwIfAborted();
|
|
51
|
+
const bytes = chunk;
|
|
52
|
+
if ((size += bytes.length) > 24 * 1024 ** 2)
|
|
53
|
+
fail('archive attributes exceed bound');
|
|
54
|
+
chunks.push(bytes);
|
|
55
|
+
}
|
|
56
|
+
if (await closed !== 0)
|
|
57
|
+
fail('archive attribute lookup failed');
|
|
58
|
+
input.signal.throwIfAborted();
|
|
59
|
+
const fields = Buffer.concat(chunks, size).toString('utf8').split('\0');
|
|
60
|
+
if (fields.pop() !== '' || fields.length !== (paths.toString('utf8').split('\0').length - 1) * 3)
|
|
61
|
+
fail('archive attribute output differs');
|
|
62
|
+
for (let index = 0; index < fields.length; index += 3) {
|
|
63
|
+
if (fields[index + 1] !== 'export-subst' || !['unset', 'unspecified'].includes(fields[index + 2])) {
|
|
64
|
+
fail(`export-subst cannot preserve exact source bytes: ${JSON.stringify(fields[index])}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
clearTimeout(timer);
|
|
70
|
+
input.signal.removeEventListener('abort', stop);
|
|
71
|
+
stop();
|
|
72
|
+
await closed;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** First pass keeps only a digest; only the admitted factory retains archive bytes. */
|
|
76
|
+
async function archive(input, commit, collect) {
|
|
77
|
+
input.signal.throwIfAborted();
|
|
78
|
+
const git = spawn('/usr/bin/git', ['-c', 'core.attributesFile=/dev/null', 'archive', '--format=tar', commit], {
|
|
79
|
+
cwd: input.worktree, env: archiveEnvironment(input), stdio: ['ignore', 'pipe', 'pipe'], shell: false,
|
|
80
|
+
});
|
|
81
|
+
let diagnostic = '';
|
|
82
|
+
git.stderr.on('data', bytes => { diagnostic = (diagnostic + String(bytes)).slice(-4096); });
|
|
83
|
+
const closed = new Promise(resolve => {
|
|
84
|
+
git.once('error', error => resolve({ code: null, error }));
|
|
85
|
+
git.once('close', code => resolve({ code }));
|
|
86
|
+
});
|
|
87
|
+
const stop = () => { git.kill('SIGKILL'); };
|
|
88
|
+
input.signal.addEventListener('abort', stop, { once: true });
|
|
89
|
+
const timer = setTimeout(stop, 60_000);
|
|
90
|
+
const hash = createHash('sha256'), chunks = [];
|
|
91
|
+
let sizeBytes = 0;
|
|
92
|
+
try {
|
|
93
|
+
for await (const chunk of git.stdout) {
|
|
94
|
+
input.signal.throwIfAborted();
|
|
95
|
+
const bytes = chunk;
|
|
96
|
+
sizeBytes += bytes.length;
|
|
97
|
+
if (sizeBytes > maximumArchiveBytes)
|
|
98
|
+
fail('archive exceeds 64MiB');
|
|
99
|
+
hash.update(bytes);
|
|
100
|
+
if (collect)
|
|
101
|
+
chunks.push(bytes);
|
|
102
|
+
}
|
|
103
|
+
const result = await closed;
|
|
104
|
+
input.signal.throwIfAborted();
|
|
105
|
+
if (result.code !== 0 || result.error || sizeBytes < 1)
|
|
106
|
+
fail(`archive failed: ${result.error?.message ?? diagnostic}`);
|
|
107
|
+
return { sizeBytes, sha256: hash.digest('hex'), ...(collect ? { bytes: Buffer.concat(chunks, sizeBytes) } : {}) };
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
clearTimeout(timer);
|
|
111
|
+
input.signal.removeEventListener('abort', stop);
|
|
112
|
+
stop();
|
|
113
|
+
await closed;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** Whole-repository Linux preparation. The runner owns authorization, budget and cgroup receipts. */
|
|
117
|
+
export async function runLinuxPreparedChecks(provided) {
|
|
118
|
+
const attempt = { cleanupFailed: false };
|
|
119
|
+
try {
|
|
120
|
+
return await runLinuxPreparedChecksOwned(provided, attempt);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
if (isLinuxSourceBuildFailed(error)) {
|
|
124
|
+
// A deterministic failure is only certified after private index cleanup succeeded.
|
|
125
|
+
if (!attempt.cleanupFailed)
|
|
126
|
+
throw error;
|
|
127
|
+
consumeLinuxSourceBuildFailed(error, { runner: provided.runner, key: provided.sourceJob.id });
|
|
128
|
+
throw new Error(error.message);
|
|
129
|
+
}
|
|
130
|
+
if (!attempt.cleanupFailed && /^source-job-[a-f0-9]{64}$/u.test(provided.sourceJob?.id)) {
|
|
131
|
+
const request = attempt.request;
|
|
132
|
+
throw linuxSourceNotStarted(error, { runner: provided.runner, key: provided.sourceJob.id,
|
|
133
|
+
consume: request === undefined ? () => true : () => consumeLinuxRepositoryAdmissionRefusal(error, provided.runner, provided.sourceJob.id, request) });
|
|
134
|
+
}
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async function runLinuxPreparedChecksOwned(provided, attempt) {
|
|
139
|
+
validateSourceBuildConfig(provided.config);
|
|
140
|
+
const input = { ...provided,
|
|
141
|
+
signal: AbortSignal.any([provided.signal, AbortSignal.timeout(provided.config.timeoutMs)]) };
|
|
142
|
+
input.signal.throwIfAborted();
|
|
143
|
+
if (process.platform !== 'linux' || !/^source-job-[a-f0-9]{64}$/u.test(input.sourceJob?.id)
|
|
144
|
+
|| !/^[a-z0-9][a-z0-9-]*$/u.test(input.name)
|
|
145
|
+
|| input.capturePack !== undefined && input.capturePack !== true || input.config.expiresAt <= Date.now())
|
|
146
|
+
fail('durable authority is invalid');
|
|
147
|
+
await input.assertCurrent();
|
|
148
|
+
await verifyLinuxRuntime(input.config.runtime);
|
|
149
|
+
input.signal.throwIfAborted();
|
|
150
|
+
const runtimeDigest = linuxRuntimeDigest(input.config.runtime);
|
|
151
|
+
if (runtimeDigest !== input.runner.runtimeDigest)
|
|
152
|
+
fail('runner runtime differs');
|
|
153
|
+
attempt.cleanupFailed = true;
|
|
154
|
+
await verifySourcePreparation(input);
|
|
155
|
+
attempt.cleanupFailed = false;
|
|
156
|
+
attempt.cleanupFailed = true;
|
|
157
|
+
const authorized = await checkedSourceSnapshot(input.worktree, input.baseCommit, input.scope, input.environment, undefined, input.signal);
|
|
158
|
+
attempt.cleanupFailed = false;
|
|
159
|
+
const baseLock = input.creation || input.revision ? await runLocalBuffer('git', ['show', `${input.baseCommit}:pnpm-lock.yaml`], input.worktree, input.environment, { maximumOutput: 8_388_608, signal: input.signal }) : undefined;
|
|
160
|
+
attempt.cleanupFailed = true;
|
|
161
|
+
const snapshot = await sourceTree(input.worktree, input.baseCommit, input.scope, input.environment, input.signal);
|
|
162
|
+
attempt.cleanupFailed = false;
|
|
163
|
+
try {
|
|
164
|
+
attempt.cleanupFailed = true;
|
|
165
|
+
const before = await checkedSourceSnapshot(input.worktree, input.baseCommit, input.scope, input.environment, snapshot.tree, input.signal);
|
|
166
|
+
attempt.cleanupFailed = false;
|
|
167
|
+
if (before.checkedTreeDigest !== authorized.checkedTreeDigest || before.checkedPatchDigest !== authorized.checkedPatchDigest)
|
|
168
|
+
fail('staged source differs from verified workspace');
|
|
169
|
+
attempt.cleanupFailed = true;
|
|
170
|
+
await verifySourcePreparation(input);
|
|
171
|
+
attempt.cleanupFailed = false;
|
|
172
|
+
const packageJson = JSON.parse(await runLocalCommand('git', ['show', `${snapshot.tree}:plugins/${input.name}/package.json`], input.worktree, input.environment, { capture: true, maximumOutput: 65536, signal: input.signal }));
|
|
173
|
+
if (typeof packageJson.version !== 'string' || !/^[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/u.test(packageJson.version))
|
|
174
|
+
fail('package version is invalid');
|
|
175
|
+
await rejectArchiveSubstitutions(input, snapshot.temporary);
|
|
176
|
+
// A tree archive otherwise uses the current time. A fixed, unreferenced
|
|
177
|
+
// commit gives both archive passes identical metadata without changing HEAD.
|
|
178
|
+
const commit = (await runLocalCommand('git', ['-c', 'commit.gpgSign=false', '-c', 'core.hooksPath=/dev/null',
|
|
179
|
+
'commit-tree', snapshot.tree, '-m', 'DSH immutable source archive'], input.worktree, { ...input.environment, GIT_AUTHOR_NAME: 'DSH', GIT_AUTHOR_EMAIL: 'source@dsh.invalid',
|
|
180
|
+
GIT_COMMITTER_NAME: 'DSH', GIT_COMMITTER_EMAIL: 'source@dsh.invalid',
|
|
181
|
+
GIT_AUTHOR_DATE: '2000-01-01T00:00:00Z', GIT_COMMITTER_DATE: '2000-01-01T00:00:00Z' }, { capture: true, maximumOutput: 128, signal: input.signal })).trim();
|
|
182
|
+
if (!/^[a-f0-9]{40}$/u.test(commit))
|
|
183
|
+
fail('archive commit is invalid');
|
|
184
|
+
const declared = await archive(input, commit, false);
|
|
185
|
+
const env = ['PATH=/runtime/0/bin:/runtime/0/pnpm-native:/usr/bin:/bin', 'HOME=/tmp', 'CI=true',
|
|
186
|
+
'TMPDIR=/tmp', 'LANG=C', 'LC_ALL=C', 'NODE_OPTIONS=', 'NODE_PATH=', 'npm_config_ignore_scripts=true',
|
|
187
|
+
'npm_config_userconfig=/dev/null', 'npm_config_globalconfig=/dev/null', 'COREPACK_ENABLE_PROJECT_SPEC=0',
|
|
188
|
+
'npm_config_store_dir=/workspace/.dsh-pnpm-store', 'pnpm_config_store_dir=/workspace/.dsh-pnpm-store', 'npm_config_cache_dir=/workspace/.dsh-pnpm-cache',
|
|
189
|
+
'pnpm_config_cache_dir=/workspace/.dsh-pnpm-cache', 'XDG_CACHE_HOME=/workspace/.dsh-pnpm-cache',
|
|
190
|
+
'XDG_DATA_HOME=/workspace/.dsh-pnpm-data', 'PNPM_HOME=/workspace/.dsh-pnpm-home',
|
|
191
|
+
'DSH_TEST_PNPM_ROOT=/runtime/0/pnpm-native', `PLUGIN_ROOT=plugins/${input.name}`,
|
|
192
|
+
`VITEST_MAX_WORKERS=${Math.max(1, Math.min(4, Math.floor(input.config.cpus)))}`,
|
|
193
|
+
...(baseLock === undefined ? [] : ['DSH_SOURCE_TRUST_LOCKFILE=true', `DSH_SOURCE_BASE_LOCK_SHA256=${sha(baseLock)}`])];
|
|
194
|
+
await input.assertCurrent();
|
|
195
|
+
attempt.cleanupFailed = true;
|
|
196
|
+
await verifySourcePreparation(input);
|
|
197
|
+
attempt.cleanupFailed = false;
|
|
198
|
+
const started = Date.now();
|
|
199
|
+
const request = {
|
|
200
|
+
argv: ['/bin/sh', '-c', 'exec /usr/bin/env -i "$@" < /input/source.tar', 'dsh-linux-source',
|
|
201
|
+
...env, '/bin/sh', '-ceu', LINUX_PREPARED_SOURCE_BUILD_SCRIPT],
|
|
202
|
+
archive: { bytes: declared.sizeBytes, sha256: declared.sha256 }, artifacts: [LINUX_SOURCE_PACK_PATH],
|
|
203
|
+
};
|
|
204
|
+
attempt.request = request;
|
|
205
|
+
const outcome = await input.runner.run(input.sourceJob.id, request, async (runnerSignal) => {
|
|
206
|
+
const admitted = { ...input, signal: AbortSignal.any([input.signal, runnerSignal]) };
|
|
207
|
+
admitted.signal.throwIfAborted();
|
|
208
|
+
await admitted.assertCurrent();
|
|
209
|
+
await verifySourcePreparation(admitted);
|
|
210
|
+
const loaded = await archive(admitted, commit, true);
|
|
211
|
+
if (loaded.sizeBytes !== declared.sizeBytes || loaded.sha256 !== declared.sha256 || !loaded.bytes)
|
|
212
|
+
fail('archive changed before admission');
|
|
213
|
+
return loaded.bytes;
|
|
214
|
+
}, input.signal);
|
|
215
|
+
const durationMs = Date.now() - started;
|
|
216
|
+
await input.assertCurrent();
|
|
217
|
+
input.signal.throwIfAborted();
|
|
218
|
+
if (outcome.runtimeDigest !== runtimeDigest || outcome.contractDigest !== input.runner.contractDigest)
|
|
219
|
+
fail('execution binding differs');
|
|
220
|
+
const exitCode = outcome.result.exitCode;
|
|
221
|
+
if (outcome.result.quiescent && outcome.result.status === 'failed' && typeof exitCode === 'number'
|
|
222
|
+
&& Number.isSafeInteger(exitCode) && exitCode !== 0) {
|
|
223
|
+
// Terminal, quiescent, non-zero exit under the exact runner contract: the
|
|
224
|
+
// candidate deterministically failed its native build/check. Interrupted,
|
|
225
|
+
// timed-out, cancelled or non-quiescent outcomes remain uncertain below.
|
|
226
|
+
const diagnostics = sourceBuildDiagnostics(outcome.result.stderr ?? '', exitCode);
|
|
227
|
+
throw linuxSourceBuildFailed(`Linux source build failed: phase ${diagnostics.phase} exited ${exitCode}`, { runner: input.runner, key: input.sourceJob.id, diagnostics });
|
|
228
|
+
}
|
|
229
|
+
if (!outcome.result.quiescent || outcome.result.status !== 'succeeded' || outcome.result.exitCode !== 0 || !outcome.receiptBinding) {
|
|
230
|
+
throw new ControlPlaneCliError('EXECUTOR_FAILED', `Linux source build ${outcome.result.status}: ${outcome.result.reason ?? ''}; ${outcome.result.stderr?.slice(-4096) ?? ''}`);
|
|
231
|
+
}
|
|
232
|
+
const stdout = outcome.result.stdout ?? '', stderr = outcome.result.stderr ?? '';
|
|
233
|
+
const match = packMarker.exec(stdout.trimEnd());
|
|
234
|
+
if (!match || stdout !== match[0] + '\n' || stderr !== '')
|
|
235
|
+
fail('pack evidence marker is invalid');
|
|
236
|
+
const bytes = outcome.artifacts[0]?.bytes;
|
|
237
|
+
if (outcome.artifacts.length !== 1 || outcome.artifacts[0]?.path !== LINUX_SOURCE_PACK_PATH || !bytes
|
|
238
|
+
|| bytes.length < 1 || bytes.length > 32 * 1024 ** 2 || bytes.length !== Number(match[2])
|
|
239
|
+
|| sha(bytes) !== match[3] || outcome.artifacts[0].sha256 !== match[3]
|
|
240
|
+
|| match[4] !== input.config.runtime.versions.node || match[5] !== input.config.runtime.versions.pnpm)
|
|
241
|
+
fail('binary pack differs from evidence');
|
|
242
|
+
await verifyLinuxRuntime(input.config.runtime);
|
|
243
|
+
attempt.cleanupFailed = true;
|
|
244
|
+
await verifySourcePreparation(input);
|
|
245
|
+
attempt.cleanupFailed = false;
|
|
246
|
+
const after = await checkedSourceSnapshot(input.worktree, input.baseCommit, input.scope, input.environment, undefined, input.signal);
|
|
247
|
+
if (after.checkedTreeDigest !== before.checkedTreeDigest || after.checkedPatchDigest !== before.checkedPatchDigest)
|
|
248
|
+
fail('source changed while isolated build ran');
|
|
249
|
+
return { treeDigest: after.checkedTreeDigest, patchDigest: after.checkedPatchDigest, checkedAt: Date.now(),
|
|
250
|
+
...(input.capturePack ? { packArtifact: Buffer.from(bytes) } : {}), evidence: Object.freeze({
|
|
251
|
+
schemaVersion: 3, kind: 'dsh-source-prepared-evidence', boundary: 'linux-native-repository-v1', runtimeDigest,
|
|
252
|
+
executionContractDigest: outcome.contractDigest, buildScriptSha256,
|
|
253
|
+
archive: Object.freeze({ sizeBytes: declared.sizeBytes, sha256: declared.sha256 }), receipt: Object.freeze({ ...outcome.receiptBinding }),
|
|
254
|
+
environment: Object.freeze({ npmConfigIgnoreScripts: true, frozenLockfile: true, offline: true,
|
|
255
|
+
nodeVersion: match[4], pnpmVersion: match[5] }),
|
|
256
|
+
checks: Object.freeze(['source-archive-integrity', 'frozen-offline-install', 'repository-pnpm-check', 'source-input-recheck', 'package-integrity']),
|
|
257
|
+
pack: Object.freeze({ name: match[1], version: packageJson.version, sizeBytes: bytes.length, sha256: match[3] }),
|
|
258
|
+
durationMs, logDigest: sha(stdout + '\0' + stderr), preparedAt: input.preparedAt,
|
|
259
|
+
}) };
|
|
260
|
+
}
|
|
261
|
+
finally {
|
|
262
|
+
const earlierCleanupUnproven = attempt.cleanupFailed;
|
|
263
|
+
attempt.cleanupFailed = true;
|
|
264
|
+
await snapshot.cleanup();
|
|
265
|
+
attempt.cleanupFailed = earlierCleanupUnproven;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=linux-source-build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linux-source-build.js","sourceRoot":"","sources":["../src/linux-source-build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { SourceJobRecord } from './source-job-types.js';
|
|
2
|
+
import type { SourceBuildDiagnostics } from './source-build-diagnostics.js';
|
|
3
|
+
interface NotStarted {
|
|
4
|
+
runner: object;
|
|
5
|
+
key: string;
|
|
6
|
+
consume: () => boolean;
|
|
7
|
+
}
|
|
8
|
+
/** Internal Host control flow: this build call did not reach execution admission. */
|
|
9
|
+
export declare function linuxSourceNotStarted(cause: unknown, binding: NotStarted): Error;
|
|
10
|
+
export declare function consumeLinuxSourceNotStarted(error: unknown, binding: Pick<NotStarted, 'runner' | 'key'>): boolean;
|
|
11
|
+
/** Only service-owned successful worktree cleanup may create the terminal proof. */
|
|
12
|
+
export declare function cleanedLinuxSourcePreflight(cause: unknown, job: SourceJobRecord, generation: object, consume?: () => boolean): Error;
|
|
13
|
+
export declare function consumeCleanedLinuxSourcePreflight(error: unknown, job: SourceJobRecord, generation: object): boolean;
|
|
14
|
+
interface BuildFailed {
|
|
15
|
+
runner: object;
|
|
16
|
+
key: string;
|
|
17
|
+
diagnostics: SourceBuildDiagnostics;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Internal Host control flow: the admitted isolated build reached a terminal,
|
|
21
|
+
* quiescent, non-zero exit under the exact runner contract. The candidate
|
|
22
|
+
* source is deterministically rejected; nothing remains running.
|
|
23
|
+
*/
|
|
24
|
+
export declare function linuxSourceBuildFailed(message: string, binding: BuildFailed): Error;
|
|
25
|
+
export declare function isLinuxSourceBuildFailed(error: unknown): boolean;
|
|
26
|
+
export declare function consumeLinuxSourceBuildFailed(error: unknown, binding: Pick<BuildFailed, 'runner' | 'key'>): SourceBuildDiagnostics | undefined;
|
|
27
|
+
/** Only service-owned successful worktree cleanup may certify a deterministic build failure. */
|
|
28
|
+
export declare function cleanedLinuxSourceBuildFailure(cause: unknown, job: SourceJobRecord, generation: object, consume: () => SourceBuildDiagnostics | undefined): Error;
|
|
29
|
+
export declare function consumeCleanedLinuxSourceBuildFailure(error: unknown, job: SourceJobRecord, generation: object): SourceBuildDiagnostics | undefined;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=linux-source-preflight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linux-source-preflight.d.ts","sourceRoot":"","sources":["../src/linux-source-preflight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAE3E,UAAU,UAAU;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,OAAO,CAAA;CAAE;AAE5E,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,GAAG,KAAK,CAIhF;AACD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,KAAK,CAAC,GAAG,OAAO,CAOjH;AAGD,oFAAoF;AACpF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,OAAoB,GAAG,KAAK,CAKhJ;AACD,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAQpH;AAED,UAAU,WAAW;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,sBAAsB,CAAA;CAAE;AAE1F;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,KAAK,CAInF;AACD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEhE;AACD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,KAAK,CAAC,GAAG,sBAAsB,GAAG,SAAS,CAM9I;AAGD,gGAAgG;AAChG,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EACrG,OAAO,EAAE,MAAM,sBAAsB,GAAG,SAAS,GAAG,KAAK,CAK1D;AACD,wBAAgB,qCAAqC,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAUlJ"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
const notStarted = new WeakMap();
|
|
2
|
+
/** Internal Host control flow: this build call did not reach execution admission. */
|
|
3
|
+
export function linuxSourceNotStarted(cause, binding) {
|
|
4
|
+
const error = new Error(cause instanceof Error ? cause.message : 'Linux source preparation did not start', { cause });
|
|
5
|
+
notStarted.set(error, binding);
|
|
6
|
+
return error;
|
|
7
|
+
}
|
|
8
|
+
export function consumeLinuxSourceNotStarted(error, binding) {
|
|
9
|
+
if (!error || typeof error !== 'object')
|
|
10
|
+
return false;
|
|
11
|
+
const proof = notStarted.get(error);
|
|
12
|
+
if (!proof || proof.runner !== binding.runner || proof.key !== binding.key)
|
|
13
|
+
return false;
|
|
14
|
+
try {
|
|
15
|
+
if (!proof.consume())
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
notStarted.delete(error);
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
const cleaned = new WeakMap();
|
|
25
|
+
/** Only service-owned successful worktree cleanup may create the terminal proof. */
|
|
26
|
+
export function cleanedLinuxSourcePreflight(cause, job, generation, consume = () => true) {
|
|
27
|
+
if (!job.occurrenceId || job.status !== 'running')
|
|
28
|
+
throw new Error('Linux preflight proof requires its original claimed job');
|
|
29
|
+
const error = new Error('Linux source preparation failed before execution admission', { cause });
|
|
30
|
+
cleaned.set(error, { id: job.id, intentDigest: job.intentDigest, revision: job.revision, occurrenceId: job.occurrenceId, generation, consume });
|
|
31
|
+
return error;
|
|
32
|
+
}
|
|
33
|
+
export function consumeCleanedLinuxSourcePreflight(error, job, generation) {
|
|
34
|
+
if (!error || typeof error !== 'object')
|
|
35
|
+
return false;
|
|
36
|
+
const proof = cleaned.get(error);
|
|
37
|
+
if (!proof || proof.generation !== generation || proof.id !== job.id || proof.intentDigest !== job.intentDigest
|
|
38
|
+
|| proof.revision !== job.revision || proof.occurrenceId !== job.occurrenceId || job.status !== 'running')
|
|
39
|
+
return false;
|
|
40
|
+
try {
|
|
41
|
+
if (!proof.consume())
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
cleaned.delete(error);
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
const buildFailed = new WeakMap();
|
|
51
|
+
/**
|
|
52
|
+
* Internal Host control flow: the admitted isolated build reached a terminal,
|
|
53
|
+
* quiescent, non-zero exit under the exact runner contract. The candidate
|
|
54
|
+
* source is deterministically rejected; nothing remains running.
|
|
55
|
+
*/
|
|
56
|
+
export function linuxSourceBuildFailed(message, binding) {
|
|
57
|
+
const error = new Error(message);
|
|
58
|
+
buildFailed.set(error, { runner: binding.runner, key: binding.key, diagnostics: binding.diagnostics });
|
|
59
|
+
return error;
|
|
60
|
+
}
|
|
61
|
+
export function isLinuxSourceBuildFailed(error) {
|
|
62
|
+
return !!error && typeof error === 'object' && buildFailed.has(error);
|
|
63
|
+
}
|
|
64
|
+
export function consumeLinuxSourceBuildFailed(error, binding) {
|
|
65
|
+
if (!error || typeof error !== 'object')
|
|
66
|
+
return undefined;
|
|
67
|
+
const proof = buildFailed.get(error);
|
|
68
|
+
if (!proof || proof.runner !== binding.runner || proof.key !== binding.key)
|
|
69
|
+
return undefined;
|
|
70
|
+
buildFailed.delete(error);
|
|
71
|
+
return proof.diagnostics;
|
|
72
|
+
}
|
|
73
|
+
const cleanedBuildFailures = new WeakMap();
|
|
74
|
+
/** Only service-owned successful worktree cleanup may certify a deterministic build failure. */
|
|
75
|
+
export function cleanedLinuxSourceBuildFailure(cause, job, generation, consume) {
|
|
76
|
+
if (!job.occurrenceId || job.status !== 'running')
|
|
77
|
+
throw new Error('Linux build failure proof requires its original claimed job');
|
|
78
|
+
const error = new Error('Linux source build failed deterministically', { cause });
|
|
79
|
+
cleanedBuildFailures.set(error, { id: job.id, intentDigest: job.intentDigest, revision: job.revision, occurrenceId: job.occurrenceId, generation, consume });
|
|
80
|
+
return error;
|
|
81
|
+
}
|
|
82
|
+
export function consumeCleanedLinuxSourceBuildFailure(error, job, generation) {
|
|
83
|
+
if (!error || typeof error !== 'object')
|
|
84
|
+
return undefined;
|
|
85
|
+
const proof = cleanedBuildFailures.get(error);
|
|
86
|
+
if (!proof || proof.generation !== generation || proof.id !== job.id || proof.intentDigest !== job.intentDigest
|
|
87
|
+
|| proof.revision !== job.revision || proof.occurrenceId !== job.occurrenceId || job.status !== 'running')
|
|
88
|
+
return undefined;
|
|
89
|
+
let diagnostics;
|
|
90
|
+
try {
|
|
91
|
+
diagnostics = proof.consume();
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
if (diagnostics === undefined)
|
|
97
|
+
return undefined;
|
|
98
|
+
cleanedBuildFailures.delete(error);
|
|
99
|
+
return diagnostics;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=linux-source-preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linux-source-preflight.js","sourceRoot":"","sources":["../src/linux-source-preflight.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,8 @@ import { type SourceApprovalClientConfig } from './source-approval-client.js';
|
|
|
6
6
|
import { type LiveQualificationBatch, type LiveQualificationReceipt } from './live-qualification.js';
|
|
7
7
|
import { type PluginControlTrustConfig } from './trust.js';
|
|
8
8
|
type Evaluation = Pick<AssistantEvaluationService, 'canonicalHostScope' | 'getTrustedForegroundLearningProjection' | 'withTrustedCanonicalTaskWriterFence' | 'onTrustedTaskChange'>;
|
|
9
|
-
type Delivery = Pick<AssistantDeliveryService, 'validateOwnerRoute' | 'inspectOwnerForegroundLearningTask'>;
|
|
10
|
-
type Automations = Pick<AssistantAutomationsService, 'registerHostExecutor' | 'reconcileSystem' | 'inspectSystemOwnedActivation'>;
|
|
9
|
+
type Delivery = Pick<AssistantDeliveryService, 'validateOwnerRoute' | 'inspectOwnerRouteState' | 'inspectOwnerForegroundLearningTask'>;
|
|
10
|
+
type Automations = Pick<AssistantAutomationsService, 'inspectSystemOwnedRetirement' | 'retireSystemOwned' | 'onSchedulerWake' | 'registerHostExecutor' | 'reconcileSystem' | 'inspectSystemOwned' | 'inspectSystemOwnedActivation'>;
|
|
11
11
|
export interface LiveQualificationConfig {
|
|
12
12
|
scope: {
|
|
13
13
|
ownerRouteId: string;
|
|
@@ -36,6 +36,9 @@ export declare class LiveQualificationRuntime {
|
|
|
36
36
|
private unregister?;
|
|
37
37
|
private unsubscribe?;
|
|
38
38
|
private closing?;
|
|
39
|
+
private readonly ownerGuard;
|
|
40
|
+
private unsubscribeWake;
|
|
41
|
+
private initialized;
|
|
39
42
|
private active;
|
|
40
43
|
private runtimeWasAvailable;
|
|
41
44
|
private scanning;
|
|
@@ -54,6 +57,7 @@ export declare class LiveQualificationRuntime {
|
|
|
54
57
|
request?: (batch: LiveQualificationBatch, signal: AbortSignal) => Promise<LiveQualificationReceipt>;
|
|
55
58
|
});
|
|
56
59
|
start(): void;
|
|
60
|
+
private initializeScanner;
|
|
57
61
|
close(): Promise<void>;
|
|
58
62
|
health: () => {
|
|
59
63
|
connected: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-qualification-runtime.d.ts","sourceRoot":"","sources":["../src/live-qualification-runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"live-qualification-runtime.d.ts","sourceRoot":"","sources":["../src/live-qualification-runtime.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,2BAA2B,EAAuF,MAAM,qCAAqC,CAAA;AAC3K,OAAO,KAAK,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAA;AAC7G,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAA;AACpF,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACvE,OAAO,EAAsC,KAAK,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;AAEjH,OAAO,EACL,KAAK,sBAAsB,EAAE,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAE7F,OAAO,EAAmB,KAAK,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAS3E,KAAK,UAAU,GAAG,IAAI,CAAC,0BAA0B,EAAE,oBAAoB,GAAG,wCAAwC,GAAG,qCAAqC,GAAG,qBAAqB,CAAC,CAAA;AACnL,KAAK,QAAQ,GAAG,IAAI,CAAC,wBAAwB,EAAE,oBAAoB,GAAG,wBAAwB,GAAG,oCAAoC,CAAC,CAAA;AACtI,KAAK,WAAW,GAAG,IAAI,CAAC,2BAA2B,EAAE,8BAA8B,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,sBAAsB,GAAG,iBAAiB,GAAG,oBAAoB,GAAG,8BAA8B,CAAC,CAAA;AAEnO,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACvF,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,0BAA0B,CAAA;CACtC;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAcrF;AAED,iGAAiG;AACjG,qBAAa,wBAAwB;IAoBvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAnBpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,UAAU,CAAC,CAAY;IAC/B,OAAO,CAAC,WAAW,CAAC,CAAY;IAChC,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,mBAAmB,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,SAAS,CAAsB;gBAEV,OAAO,EAAE;QACpC,MAAM,EAAE,uBAAuB,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAC;QAAC,KAAK,EAAE,wBAAwB,CAAA;QAC1F,UAAU,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAC;QAAC,WAAW,EAAE,WAAW,CAAA;QACpE,aAAa,IAAI,IAAI,CAAA;QACrB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;QACnC,gBAAgB,IAAI,OAAO,CAAA;QAC3B,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CAAA;QAChE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAA;KACpG;IAYD,KAAK,IAAI,IAAI;IAkCb,OAAO,CAAC,iBAAiB;IAUzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBtB,MAAM;;;MAA4F;IAElG,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,MAAM;IAsBd,OAAO,CAAC,IAAI;IAuCZ,OAAO,CAAC,KAAK;IAOb,2FAA2F;IAC3F,IAAI,QAAO,IAAI,CAyDd;IAED,2EAA2E;IAC3E,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC;IAU/D,OAAO,CAAC,UAAU;YAWJ,OAAO;CAmDtB"}
|