@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.
Files changed (116) hide show
  1. package/README.md +287 -9
  2. package/lib/audit-archive.d.ts +1 -1
  3. package/lib/audit-archive.d.ts.map +1 -1
  4. package/lib/audit-archive.js +31 -13
  5. package/lib/audit-archive.js.map +1 -1
  6. package/lib/cli.d.ts +7 -3
  7. package/lib/cli.d.ts.map +1 -1
  8. package/lib/cli.js +104 -23
  9. package/lib/cli.js.map +1 -1
  10. package/lib/config.d.ts +15 -2
  11. package/lib/config.d.ts.map +1 -1
  12. package/lib/config.js +49 -9
  13. package/lib/config.js.map +1 -1
  14. package/lib/diagnostics.js +2 -2
  15. package/lib/diagnostics.js.map +1 -1
  16. package/lib/index.d.ts +17 -1
  17. package/lib/index.d.ts.map +1 -1
  18. package/lib/index.js +17 -1
  19. package/lib/index.js.map +1 -1
  20. package/lib/ledger.d.ts +19 -2
  21. package/lib/ledger.d.ts.map +1 -1
  22. package/lib/ledger.js +371 -44
  23. package/lib/ledger.js.map +1 -1
  24. package/lib/linux-cgroups.d.ts +75 -0
  25. package/lib/linux-cgroups.d.ts.map +1 -0
  26. package/lib/linux-cgroups.js +517 -0
  27. package/lib/linux-cgroups.js.map +1 -0
  28. package/lib/linux-execution-contract.d.ts +123 -0
  29. package/lib/linux-execution-contract.d.ts.map +1 -0
  30. package/lib/linux-execution-contract.js +279 -0
  31. package/lib/linux-execution-contract.js.map +1 -0
  32. package/lib/linux-execution.d.ts +123 -0
  33. package/lib/linux-execution.d.ts.map +1 -0
  34. package/lib/linux-execution.js +1264 -0
  35. package/lib/linux-execution.js.map +1 -0
  36. package/lib/linux-job-recovery.d.ts +5 -0
  37. package/lib/linux-job-recovery.d.ts.map +1 -0
  38. package/lib/linux-job-recovery.js +63 -0
  39. package/lib/linux-job-recovery.js.map +1 -0
  40. package/lib/linux-namespace.d.ts +80 -0
  41. package/lib/linux-namespace.d.ts.map +1 -0
  42. package/lib/linux-namespace.js +471 -0
  43. package/lib/linux-namespace.js.map +1 -0
  44. package/lib/linux-repository-admission.d.ts +26 -0
  45. package/lib/linux-repository-admission.d.ts.map +1 -0
  46. package/lib/linux-repository-admission.js +64 -0
  47. package/lib/linux-repository-admission.js.map +1 -0
  48. package/lib/linux-repository-runner.d.ts +54 -0
  49. package/lib/linux-repository-runner.d.ts.map +1 -0
  50. package/lib/linux-repository-runner.js +614 -0
  51. package/lib/linux-repository-runner.js.map +1 -0
  52. package/lib/linux-runner-state-migration.d.ts +94 -0
  53. package/lib/linux-runner-state-migration.d.ts.map +1 -0
  54. package/lib/linux-runner-state-migration.js +463 -0
  55. package/lib/linux-runner-state-migration.js.map +1 -0
  56. package/lib/linux-runner-state.d.ts +53 -0
  57. package/lib/linux-runner-state.d.ts.map +1 -0
  58. package/lib/linux-runner-state.js +332 -0
  59. package/lib/linux-runner-state.js.map +1 -0
  60. package/lib/linux-runtime-source.d.ts +28 -0
  61. package/lib/linux-runtime-source.d.ts.map +1 -0
  62. package/lib/linux-runtime-source.js +237 -0
  63. package/lib/linux-runtime-source.js.map +1 -0
  64. package/lib/linux-runtime.d.ts +37 -0
  65. package/lib/linux-runtime.d.ts.map +1 -0
  66. package/lib/linux-runtime.js +192 -0
  67. package/lib/linux-runtime.js.map +1 -0
  68. package/lib/linux-system-snapshot.d.ts +47 -0
  69. package/lib/linux-system-snapshot.d.ts.map +1 -0
  70. package/lib/linux-system-snapshot.js +704 -0
  71. package/lib/linux-system-snapshot.js.map +1 -0
  72. package/lib/linux-user-namespace.d.ts +79 -0
  73. package/lib/linux-user-namespace.d.ts.map +1 -0
  74. package/lib/linux-user-namespace.js +234 -0
  75. package/lib/linux-user-namespace.js.map +1 -0
  76. package/lib/linux-verifier-runner.d.ts +27 -0
  77. package/lib/linux-verifier-runner.d.ts.map +1 -0
  78. package/lib/linux-verifier-runner.js +346 -0
  79. package/lib/linux-verifier-runner.js.map +1 -0
  80. package/lib/native-cgroup-roots.d.ts +20 -0
  81. package/lib/native-cgroup-roots.d.ts.map +1 -0
  82. package/lib/native-cgroup-roots.js +121 -0
  83. package/lib/native-cgroup-roots.js.map +1 -0
  84. package/lib/native-resources.d.ts +44 -0
  85. package/lib/native-resources.d.ts.map +1 -0
  86. package/lib/native-resources.js +354 -0
  87. package/lib/native-resources.js.map +1 -0
  88. package/lib/probe.d.ts +10 -0
  89. package/lib/probe.d.ts.map +1 -1
  90. package/lib/probe.js +52 -2
  91. package/lib/probe.js.map +1 -1
  92. package/lib/service.d.ts +1 -1
  93. package/lib/service.d.ts.map +1 -1
  94. package/lib/service.js +122 -9
  95. package/lib/service.js.map +1 -1
  96. package/lib/storage.d.ts.map +1 -1
  97. package/lib/storage.js +36 -6
  98. package/lib/storage.js.map +1 -1
  99. package/lib/tools.js +1 -1
  100. package/lib/tools.js.map +1 -1
  101. package/lib/types.d.ts +5 -1
  102. package/lib/types.d.ts.map +1 -1
  103. package/lib/verifier-runner.d.ts +4 -2
  104. package/lib/verifier-runner.d.ts.map +1 -1
  105. package/lib/verifier-runner.js +22 -1
  106. package/lib/verifier-runner.js.map +1 -1
  107. package/lib/version.d.ts +1 -1
  108. package/lib/version.js +1 -1
  109. package/package.json +15 -10
  110. package/runtime/linux-candidate-entry.py +82 -0
  111. package/runtime/linux-namespace-worker.mjs +561 -0
  112. package/runtime/linux-seccomp-policy.LICENSE +202 -0
  113. package/runtime/linux-seccomp-policy.json +886 -0
  114. package/runtime/linux-seccomp.py +106 -0
  115. package/runtime/linux-userns-launcher.py +149 -0
  116. package/runtime/linux-userns-proof.py +299 -0
@@ -0,0 +1,123 @@
1
+ import type { LinuxCgroupDirectory, LinuxCgroupLimits, LinuxCgroupRoots, LinuxCgroupSnapshot } from './linux-cgroups.js';
2
+ import type { IsolationLimits } from './types.js';
3
+ import type { LinuxSystemSnapshot } from './linux-system-snapshot.js';
4
+ import { type LinuxUserNamespaceMapping, type LinuxUserNamespaceWitness } from './linux-user-namespace.js';
5
+ export interface LinuxExecutionContractV1 {
6
+ schemaVersion: 1;
7
+ backend: 'linux-native';
8
+ runtimeDigest: string;
9
+ profile: 'ordinary' | 'repository';
10
+ limits: IsolationLimits;
11
+ keeperLimits: LinuxCgroupLimits;
12
+ cgroupRoots: LinuxCgroupRoots;
13
+ }
14
+ export interface LinuxExecutionIntentV1 {
15
+ schemaVersion: 1;
16
+ jobId: string;
17
+ requestDigest: string;
18
+ nativeResourceId: string;
19
+ nativeNonce: string;
20
+ contractDigest: string;
21
+ bootId: string;
22
+ uid: number;
23
+ deadline: number;
24
+ namespacePath: string;
25
+ workerNonce: string;
26
+ keeperNonce: string;
27
+ roots: Record<string, LinuxCgroupDirectory>;
28
+ }
29
+ /** Repository authority is explicit and cannot enter the ordinary text runner. */
30
+ export interface LinuxRepositoryExecutionContractV2 extends Omit<LinuxExecutionContractV1, 'schemaVersion' | 'profile' | 'limits'> {
31
+ schemaVersion: 2;
32
+ profile: 'repository';
33
+ limits: IsolationLimits & {
34
+ tmpMiB: number;
35
+ tmpInodes: number;
36
+ inputMiB: 65;
37
+ inputInodes: 16;
38
+ };
39
+ }
40
+ export interface LinuxRepositoryExecutionContractV3 extends Omit<LinuxRepositoryExecutionContractV2, 'schemaVersion'> {
41
+ schemaVersion: 3;
42
+ implementationDigest: string;
43
+ userNamespace: LinuxUserNamespaceMapping;
44
+ systemSnapshot: LinuxSystemSnapshot;
45
+ }
46
+ export type LinuxRepositoryExecutionContract = LinuxRepositoryExecutionContractV2 | LinuxRepositoryExecutionContractV3;
47
+ export type LinuxExecutionContract = LinuxExecutionContractV1 | LinuxRepositoryExecutionContract;
48
+ export interface LinuxRepositoryExecutionIntent extends Omit<LinuxExecutionIntentV1, 'schemaVersion'> {
49
+ schemaVersion: 2 | 3;
50
+ repository: {
51
+ archive: {
52
+ bytes: number;
53
+ sha256: string;
54
+ };
55
+ artifacts: string[];
56
+ executionDigest: string;
57
+ };
58
+ }
59
+ export type LinuxExecutionIntent = LinuxExecutionIntentV1 | LinuxRepositoryExecutionIntent;
60
+ /** Maximum local spool reservation: two 32 MiB artifact copies, three 14 MiB
61
+ * JSON records and 2 MiB metadata headroom. Archives use only memory/pipes here;
62
+ * a source-job ledger must add its own archive/pack staging budget before prepare. */
63
+ export declare const LINUX_REPOSITORY_STORAGE_BYTES: number;
64
+ export interface LinuxExecutionResourcesV1 {
65
+ schemaVersion: 1;
66
+ intentDigest: string;
67
+ worker: LinuxCgroupSnapshot;
68
+ keeper: LinuxCgroupSnapshot;
69
+ }
70
+ export interface LinuxExecutionResourcesV2 extends Omit<LinuxExecutionResourcesV1, 'schemaVersion'> {
71
+ schemaVersion: 2;
72
+ userNamespace: {
73
+ witness: LinuxUserNamespaceWitness;
74
+ keeperGate: {
75
+ pid: number;
76
+ startTicks: string;
77
+ bootId: string;
78
+ uid: number;
79
+ };
80
+ } | null;
81
+ }
82
+ export type LinuxExecutionResources = LinuxExecutionResourcesV1 | LinuxExecutionResourcesV2;
83
+ /** Host validates the private receipt and kernel evidence before presenting this binding. */
84
+ export interface LinuxReceiptBinding {
85
+ requestDigest: string;
86
+ nativeNonce: string;
87
+ nativeResourceId: string;
88
+ intentDigest: string;
89
+ resourcesDigest: string;
90
+ receiptDigest: string;
91
+ }
92
+ /** Host-owned evidence for a dispatched job that never reached start admission. */
93
+ export interface LinuxExecutionPartialCleanupProof {
94
+ schemaVersion: 1;
95
+ jobId: string;
96
+ requestDigest: string;
97
+ nativeResourceId: string;
98
+ nativeNonce: string;
99
+ intentDigest: string;
100
+ observedAt: number;
101
+ workerAbsent: true;
102
+ keeperAbsent: true;
103
+ namespaceAbsent: true;
104
+ proofDigest: string;
105
+ }
106
+ export declare function linuxExecutionPartialCleanupProofDigest(value: Omit<LinuxExecutionPartialCleanupProof, 'proofDigest'>): string;
107
+ export declare function validateLinuxExecutionPartialCleanupProof(value: unknown): LinuxExecutionPartialCleanupProof;
108
+ /** Pure static validation; no filesystem, cgroup creation or authority is acquired. */
109
+ export declare function validateLinuxCgroupRoots(value: unknown): LinuxCgroupRoots;
110
+ export declare function validateLinuxExecutionContract(value: unknown): LinuxExecutionContract;
111
+ export declare function linuxExecutionContractDigest(value: LinuxExecutionContract): string;
112
+ export declare function validateLinuxExecutionIntent(value: unknown, contract: LinuxExecutionContract): LinuxExecutionIntent;
113
+ export declare function linuxExecutionIntentDigest(value: LinuxExecutionIntent): string;
114
+ export declare function validateLinuxExecutionResources(value: unknown, intent: LinuxExecutionIntent, contract: LinuxExecutionContract): LinuxExecutionResources;
115
+ export declare function linuxExecutionResourcesDigest(value: LinuxExecutionResources): string;
116
+ export declare function validateLinuxReceiptBinding(value: unknown): LinuxReceiptBinding;
117
+ /** All tmpfs mounts, keeper capacity and durable staging are admitted together. */
118
+ export declare function linuxJobResourceReservation(contract: LinuxExecutionContract): {
119
+ memoryMiB: number;
120
+ workspaceInodes: number;
121
+ storageBytes: number;
122
+ };
123
+ //# sourceMappingURL=linux-execution-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linux-execution-contract.d.ts","sourceRoot":"","sources":["../src/linux-execution-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,279 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { posix } from 'node:path';
3
+ import { plannedStorageBytes } from './storage-policy.js';
4
+ import { validateLinuxUserNamespaceMapping, validateLinuxUserNamespaceWitness } from './linux-user-namespace.js';
5
+ /** Maximum local spool reservation: two 32 MiB artifact copies, three 14 MiB
6
+ * JSON records and 2 MiB metadata headroom. Archives use only memory/pipes here;
7
+ * a source-job ledger must add its own archive/pack staging budget before prepare. */
8
+ export const LINUX_REPOSITORY_STORAGE_BYTES = 108 * 1024 ** 2;
9
+ const HEX = /^[a-f0-9]{64}$/u;
10
+ const NONCE = /^[a-f0-9]{32}$/u;
11
+ const UUID = /^[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}$/u;
12
+ const controllers = ['cpu', 'memory', 'pids', 'freezer'];
13
+ function fail() { throw new Error('invalid Linux execution contract or binding'); }
14
+ const positive = (value) => Number.isSafeInteger(value) && value > 0;
15
+ const natural = (value) => Number.isSafeInteger(value) && value >= 0;
16
+ const matches = (value, pattern) => typeof value === 'string' && pattern.test(value);
17
+ const path = (value) => typeof value === 'string' && value.length <= 4096 && value !== '/' && posix.isAbsolute(value) && posix.normalize(value) === value && !/[\p{Cc}\\]/u.test(value);
18
+ function object(value, keys) {
19
+ if (!value || typeof value !== 'object' || Object.getPrototypeOf(value) !== Object.prototype
20
+ || Object.keys(value).length !== keys.length || keys.some(key => !Object.hasOwn(value, key)))
21
+ fail();
22
+ }
23
+ function freeze(value) {
24
+ if (value && typeof value === 'object') {
25
+ for (const entry of Object.values(value))
26
+ freeze(entry);
27
+ Object.freeze(value);
28
+ }
29
+ return value;
30
+ }
31
+ function clone(value) { return freeze(JSON.parse(JSON.stringify(value))); }
32
+ function canonical(value) {
33
+ if (Array.isArray(value))
34
+ return `[${value.map(canonical).join(',')}]`;
35
+ if (value && typeof value === 'object')
36
+ return `{${Object.keys(value).sort().map(key => `${JSON.stringify(key)}:${canonical(value[key])}`).join(',')}}`;
37
+ return JSON.stringify(value);
38
+ }
39
+ const digest = (value) => createHash('sha256').update(canonical(value)).digest('hex');
40
+ export function linuxExecutionPartialCleanupProofDigest(value) {
41
+ object(value, ['schemaVersion', 'jobId', 'requestDigest', 'nativeResourceId', 'nativeNonce', 'intentDigest', 'observedAt', 'workerAbsent', 'keeperAbsent', 'namespaceAbsent']);
42
+ if (value.schemaVersion !== 1 || !matches(value.jobId, UUID) || !matches(value.requestDigest, HEX)
43
+ || value.nativeResourceId !== `linux-${value.jobId}` || !matches(value.nativeNonce, NONCE)
44
+ || !matches(value.intentDigest, HEX) || !positive(value.observedAt)
45
+ || value.workerAbsent !== true || value.keeperAbsent !== true || value.namespaceAbsent !== true)
46
+ fail();
47
+ return digest(value);
48
+ }
49
+ export function validateLinuxExecutionPartialCleanupProof(value) {
50
+ object(value, ['schemaVersion', 'jobId', 'requestDigest', 'nativeResourceId', 'nativeNonce', 'intentDigest', 'observedAt', 'workerAbsent', 'keeperAbsent', 'namespaceAbsent', 'proofDigest']);
51
+ const { proofDigest, ...body } = value;
52
+ if (!matches(proofDigest, HEX) || proofDigest !== linuxExecutionPartialCleanupProofDigest(body))
53
+ fail();
54
+ return clone(value);
55
+ }
56
+ function limits(value) {
57
+ object(value, ['memoryMiB', 'pidsLimit', 'cpus']);
58
+ if (!positive(value.memoryMiB) || value.memoryMiB > 65_536 || !positive(value.pidsLimit) || value.pidsLimit > 4096
59
+ || typeof value.cpus !== 'number' || !Number.isFinite(value.cpus) || value.cpus < 0.1 || value.cpus > 64)
60
+ fail();
61
+ }
62
+ function rootEntries(value) {
63
+ return value.mode === 'v1' ? controllers.map(key => [key, value[key]]) : [['unified', value.unified]];
64
+ }
65
+ function directory(value, expected) {
66
+ object(value, ['path', 'dev', 'ino']);
67
+ if (value.path !== expected || !natural(value.dev) || !positive(value.ino))
68
+ fail();
69
+ }
70
+ /** Pure static validation; no filesystem, cgroup creation or authority is acquired. */
71
+ export function validateLinuxCgroupRoots(value) {
72
+ const roots = value;
73
+ if (!roots || !['v1', 'v2'].includes(roots.mode))
74
+ fail();
75
+ object(roots, roots.mode === 'v1' ? ['mode', ...controllers] : ['mode', 'unified']);
76
+ const entries = rootEntries(roots);
77
+ if (new Set(entries.map(([, root]) => root)).size !== entries.length)
78
+ fail();
79
+ for (const [, root] of entries)
80
+ if (!path(root) || !(roots.mode === 'v1'
81
+ ? /^\/sys\/fs\/cgroup\/[A-Za-z0-9_,]+\/dsh-native\/uid-[1-9][0-9]*$/u
82
+ : /^\/sys\/fs\/cgroup\/dsh-native\/uid-[1-9][0-9]*$/u).test(root))
83
+ fail();
84
+ return clone(roots);
85
+ }
86
+ export function validateLinuxExecutionContract(value) {
87
+ object(value, ['schemaVersion', 'backend', 'runtimeDigest', 'profile', 'limits', 'keeperLimits', 'cgroupRoots', ...(value?.schemaVersion === 3 ? ['implementationDigest', 'userNamespace', 'systemSnapshot'] : [])]);
88
+ if (![1, 2, 3].includes(value.schemaVersion) || value.backend !== 'linux-native' || !matches(value.runtimeDigest, HEX) || !['ordinary', 'repository'].includes(value.profile))
89
+ fail();
90
+ object(value.limits, ['maxDurationMs', 'maxInputBytes', 'maxOutputBytes', 'maxArtifactBytes', 'maxFiles', 'memoryMiB', 'workspaceMiB', 'workspaceInodes', 'pidsLimit', 'cpus', ...(value.schemaVersion !== 1 ? ['tmpMiB', 'tmpInodes', 'inputMiB', 'inputInodes'] : [])]);
91
+ for (const [key, item] of Object.entries(value.limits))
92
+ if (key !== 'cpus' && !positive(item))
93
+ fail();
94
+ limits({ memoryMiB: value.limits.memoryMiB, pidsLimit: value.limits.pidsLimit, cpus: value.limits.cpus });
95
+ if (value.schemaVersion !== 1 && (value.profile !== 'repository' || value.limits.inputMiB !== 65 || value.limits.inputInodes !== 16
96
+ || value.limits.tmpMiB > 4096 || value.limits.tmpInodes > 1_000_000 || value.limits.tmpInodes < 16
97
+ || value.limits.workspaceMiB > 8192 || value.limits.maxDurationMs > 1_800_000))
98
+ fail();
99
+ if (value.limits.maxInputBytes > (value.schemaVersion !== 1 ? 64 * 1024 ** 2 : 1_048_576) || value.limits.maxOutputBytes > 1_048_576
100
+ || value.limits.maxArtifactBytes > (value.schemaVersion !== 1 ? 32 * 1024 ** 2 : 1_048_576) || value.limits.maxFiles > 128
101
+ || value.limits.workspaceInodes < 16 || value.limits.workspaceInodes > 1_000_000
102
+ || value.limits.workspaceMiB > 65_536)
103
+ fail();
104
+ limits(value.keeperLimits);
105
+ if (value.schemaVersion !== 1 && (value.keeperLimits.memoryMiB < 256 || value.keeperLimits.pidsLimit < 64 || value.keeperLimits.cpus < 0.5))
106
+ fail();
107
+ if (value.schemaVersion === 3) {
108
+ if (!matches(value.implementationDigest, HEX))
109
+ fail();
110
+ validateLinuxUserNamespaceMapping(value.userNamespace);
111
+ object(value.systemSnapshot, ['schemaVersion', 'root', 'manifestSha256', 'bytes', 'entries']);
112
+ const snapshot = value.systemSnapshot;
113
+ object(snapshot.root, ['path', 'dev', 'ino', 'sha256']);
114
+ if (snapshot.schemaVersion !== 1 || !path(snapshot.root.path) || !natural(snapshot.root.dev) || !positive(snapshot.root.ino)
115
+ || !matches(snapshot.root.sha256, HEX) || !matches(snapshot.manifestSha256, HEX)
116
+ || !positive(snapshot.bytes) || snapshot.bytes > 640 * 1024 ** 2 || !positive(snapshot.entries) || snapshot.entries > 32768)
117
+ fail();
118
+ }
119
+ validateLinuxCgroupRoots(value.cgroupRoots);
120
+ return clone(value);
121
+ }
122
+ export function linuxExecutionContractDigest(value) { return digest(validateLinuxExecutionContract(value)); }
123
+ function intentValue(value) {
124
+ object(value, ['schemaVersion', 'jobId', 'requestDigest', 'nativeResourceId', 'nativeNonce', 'contractDigest', 'bootId', 'uid', 'deadline', 'namespacePath', 'workerNonce', 'keeperNonce', 'roots', ...([2, 3].includes(value?.schemaVersion) ? ['repository'] : [])]);
125
+ if (![1, 2, 3].includes(value.schemaVersion) || !matches(value.jobId, UUID) || !matches(value.requestDigest, HEX) || value.nativeResourceId !== `linux-${value.jobId}`
126
+ || !matches(value.nativeNonce, NONCE) || !matches(value.contractDigest, HEX) || !matches(value.bootId, UUID)
127
+ || !positive(value.uid) || value.uid > 0xffff_fffe || !positive(value.deadline) || !path(value.namespacePath)
128
+ || !matches(value.workerNonce, NONCE) || !matches(value.keeperNonce, NONCE) || value.workerNonce === value.keeperNonce)
129
+ fail();
130
+ if (value.schemaVersion !== 1) {
131
+ object(value.repository, ['archive', 'artifacts', 'executionDigest']);
132
+ object(value.repository.archive, ['bytes', 'sha256']);
133
+ if (!positive(value.repository.archive.bytes) || value.repository.archive.bytes > 64 * 1024 ** 2
134
+ || !matches(value.repository.archive.sha256, HEX) || !matches(value.repository.executionDigest, HEX)
135
+ || !Array.isArray(value.repository.artifacts) || value.repository.artifacts.length > 128
136
+ || value.repository.artifacts.some(item => typeof item !== 'string' || item.length < 1 || item.length > 4096
137
+ || posix.isAbsolute(item) || /[\p{Cc}\\]/u.test(item) || item.split('/').some(part => !part || part === '.' || part === '..'))
138
+ || new Set(value.repository.artifacts).size !== value.repository.artifacts.length)
139
+ fail();
140
+ }
141
+ const roots = value.roots;
142
+ const keys = roots && typeof roots === 'object' && Object.hasOwn(roots, 'unified') ? ['unified'] : controllers;
143
+ object(roots, keys);
144
+ for (const key of keys) {
145
+ const entry = roots[key];
146
+ if (!entry || typeof entry !== 'object')
147
+ fail();
148
+ const root = entry.path;
149
+ if (!path(root) || !(key === 'unified'
150
+ ? /^\/sys\/fs\/cgroup\/dsh-native\/uid-[1-9][0-9]*$/u
151
+ : /^\/sys\/fs\/cgroup\/[A-Za-z0-9_,]+\/dsh-native\/uid-[1-9][0-9]*$/u).test(root)
152
+ || !root.endsWith(`/uid-${value.uid}`))
153
+ fail();
154
+ directory(entry, root);
155
+ }
156
+ return value;
157
+ }
158
+ export function validateLinuxExecutionIntent(value, contract) {
159
+ const checked = validateLinuxExecutionContract(contract);
160
+ const intent = intentValue(value);
161
+ if (intent.contractDigest !== linuxExecutionContractDigest(checked) || intent.schemaVersion !== checked.schemaVersion
162
+ || intent.schemaVersion !== 1 && (intent.repository.archive.bytes > checked.limits.maxInputBytes
163
+ || intent.repository.artifacts.length > checked.limits.maxFiles))
164
+ fail();
165
+ if (checked.schemaVersion === 3 && checked.userNamespace.ownerUid !== intent.uid)
166
+ fail();
167
+ const entries = rootEntries(checked.cgroupRoots);
168
+ object(intent.roots, entries.map(([key]) => key));
169
+ for (const [key, root] of entries)
170
+ directory(intent.roots[key], root);
171
+ return clone(intent);
172
+ }
173
+ export function linuxExecutionIntentDigest(value) { return digest(intentValue(value)); }
174
+ function snapshotValue(value) {
175
+ object(value, ['schemaVersion', 'mode', 'bootId', 'jobId', 'nonce', 'uid', 'deadline', 'limits', 'directories']);
176
+ if (value.schemaVersion !== 1 || value.mode !== 'v1' && value.mode !== 'v2' || !matches(value.bootId, UUID)
177
+ || !matches(value.jobId, UUID) || !matches(value.nonce, NONCE) || !positive(value.uid) || value.uid > 0xffff_fffe || !positive(value.deadline))
178
+ fail();
179
+ limits(value.limits);
180
+ const keys = value.mode === 'v1' ? controllers : ['unified'];
181
+ object(value.directories, keys);
182
+ for (const key of keys) {
183
+ const entry = value.directories[key];
184
+ if (!entry || typeof entry !== 'object')
185
+ fail();
186
+ const child = entry.path;
187
+ if (!path(child) || !child.endsWith(`/uid-${value.uid}/job-${value.jobId}-${value.nonce}`))
188
+ fail();
189
+ directory(entry, child);
190
+ }
191
+ return value;
192
+ }
193
+ function resourcesValue(value) {
194
+ object(value, ['schemaVersion', 'intentDigest', 'worker', 'keeper', ...(value?.schemaVersion === 2 ? ['userNamespace'] : [])]);
195
+ if (![1, 2].includes(value.schemaVersion) || !matches(value.intentDigest, HEX))
196
+ fail();
197
+ const worker = snapshotValue(value.worker), keeper = snapshotValue(value.keeper);
198
+ if (worker.mode !== keeper.mode || worker.bootId !== keeper.bootId || worker.jobId !== keeper.jobId || worker.uid !== keeper.uid
199
+ || worker.deadline !== keeper.deadline || worker.nonce === keeper.nonce)
200
+ fail();
201
+ for (const key of Object.keys(worker.directories)) {
202
+ const left = worker.directories[key], right = keeper.directories[key];
203
+ if (posix.dirname(left.path) !== posix.dirname(right.path) || left.dev !== right.dev || left.ino === right.ino)
204
+ fail();
205
+ }
206
+ if (value.schemaVersion === 2 && value.userNamespace !== null) {
207
+ object(value.userNamespace, ['witness', 'keeperGate']);
208
+ const witness = validateLinuxUserNamespaceWitness(value.userNamespace.witness);
209
+ const gate = value.userNamespace.keeperGate;
210
+ object(gate, ['pid', 'startTicks', 'bootId', 'uid']);
211
+ if (witness.bootId !== worker.bootId || witness.ownerUid !== worker.uid || !positive(gate.pid)
212
+ || typeof gate.startTicks !== 'string' || !/^[1-9][0-9]{0,63}$/u.test(gate.startTicks)
213
+ || gate.bootId !== worker.bootId || gate.uid !== worker.uid)
214
+ fail();
215
+ }
216
+ return value;
217
+ }
218
+ export function validateLinuxExecutionResources(value, intent, contract) {
219
+ const checked = validateLinuxExecutionIntent(intent, contract);
220
+ resourcesValue(value);
221
+ object(value, ['schemaVersion', 'intentDigest', 'worker', 'keeper', ...(contract.schemaVersion === 3 ? ['userNamespace'] : [])]);
222
+ if (value.schemaVersion !== (contract.schemaVersion === 3 ? 2 : 1) || value.intentDigest !== linuxExecutionIntentDigest(checked))
223
+ fail();
224
+ if (contract.schemaVersion === 3) {
225
+ const bound = value.userNamespace;
226
+ if (bound && canonical(bound.witness.mapping) !== canonical(contract.userNamespace))
227
+ fail();
228
+ }
229
+ const entries = rootEntries(contract.cgroupRoots);
230
+ for (const kind of ['worker', 'keeper']) {
231
+ const item = value[kind];
232
+ object(item, ['schemaVersion', 'mode', 'bootId', 'jobId', 'nonce', 'uid', 'deadline', 'limits', 'directories']);
233
+ const nonce = checked[kind === 'worker' ? 'workerNonce' : 'keeperNonce'];
234
+ const expectedLimits = kind === 'worker' ? { memoryMiB: contract.limits.memoryMiB, pidsLimit: contract.limits.pidsLimit, cpus: contract.limits.cpus } : contract.keeperLimits;
235
+ limits(item.limits);
236
+ if (item.schemaVersion !== 1 || item.mode !== contract.cgroupRoots.mode || item.bootId !== checked.bootId || item.jobId !== checked.jobId
237
+ || item.nonce !== nonce || item.uid !== checked.uid || item.deadline !== checked.deadline || canonical(item.limits) !== canonical(expectedLimits))
238
+ fail();
239
+ object(item.directories, entries.map(([key]) => key));
240
+ for (const [key, root] of entries) {
241
+ directory(item.directories[key], `${root}/job-${checked.jobId}-${nonce}`);
242
+ const rootIdentity = checked.roots[key];
243
+ const child = item.directories[key];
244
+ if (child.dev !== rootIdentity.dev || child.ino === rootIdentity.ino)
245
+ fail();
246
+ }
247
+ }
248
+ const worker = value.worker, keeper = value.keeper;
249
+ for (const [key] of entries)
250
+ if (worker.directories[key].dev === keeper.directories[key].dev && worker.directories[key].ino === keeper.directories[key].ino)
251
+ fail();
252
+ return clone(value);
253
+ }
254
+ export function linuxExecutionResourcesDigest(value) {
255
+ return digest(resourcesValue(value));
256
+ }
257
+ export function validateLinuxReceiptBinding(value) {
258
+ object(value, ['requestDigest', 'nativeNonce', 'nativeResourceId', 'intentDigest', 'resourcesDigest', 'receiptDigest']);
259
+ if (!matches(value.requestDigest, HEX) || !matches(value.nativeNonce, NONCE) || typeof value.nativeResourceId !== 'string'
260
+ || !/^linux-[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}$/u.test(value.nativeResourceId)
261
+ || !matches(value.intentDigest, HEX) || !matches(value.resourcesDigest, HEX) || !matches(value.receiptDigest, HEX))
262
+ fail();
263
+ return clone(value);
264
+ }
265
+ /** All tmpfs mounts, keeper capacity and durable staging are admitted together. */
266
+ export function linuxJobResourceReservation(contract) {
267
+ const checked = validateLinuxExecutionContract(contract);
268
+ const { limits, keeperLimits } = checked;
269
+ if (checked.schemaVersion !== 1)
270
+ return {
271
+ memoryMiB: limits.memoryMiB + limits.workspaceMiB + checked.limits.tmpMiB + checked.limits.inputMiB + 1 + keeperLimits.memoryMiB + (checked.schemaVersion === 3 ? 8 : 0),
272
+ workspaceInodes: limits.workspaceInodes + checked.limits.tmpInodes + checked.limits.inputInodes + 4096 + 32 + (checked.schemaVersion === 3 ? 16_384 : 0),
273
+ storageBytes: 2 * limits.maxArtifactBytes + 44 * 1024 ** 2,
274
+ };
275
+ return { memoryMiB: limits.memoryMiB + limits.workspaceMiB
276
+ + Math.ceil(Math.max(1, Math.min(64, limits.memoryMiB / 4))) + 1 + keeperLimits.memoryMiB,
277
+ workspaceInodes: 2 * limits.workspaceInodes + 4096 + 32, storageBytes: 3 * plannedStorageBytes(limits) };
278
+ }
279
+ //# sourceMappingURL=linux-execution-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linux-execution-contract.js","sourceRoot":"","sources":["../src/linux-execution-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import { type LinuxExecutionContract, type LinuxExecutionIntent, type LinuxExecutionResources, type LinuxReceiptBinding, type LinuxExecutionPartialCleanupProof, type LinuxExecutionIntentV1, type LinuxRepositoryExecutionContract, type LinuxRepositoryExecutionIntent } from './linux-execution-contract.js';
2
+ import type { IsolationFile, IsolationResult } from './types.js';
3
+ export interface LinuxExecutionReceiptV1 {
4
+ schemaVersion: 1;
5
+ intent: LinuxExecutionIntentV1;
6
+ resources: LinuxExecutionResources;
7
+ result: IsolationResult;
8
+ completedAt: number;
9
+ receiptDigest: string;
10
+ }
11
+ export interface LinuxRepositoryArtifactSummary {
12
+ path: string;
13
+ bytes: number;
14
+ sha256: string;
15
+ }
16
+ export interface LinuxRepositoryArtifact {
17
+ path: string;
18
+ bytes: Buffer;
19
+ sha256: string;
20
+ }
21
+ export interface LinuxRepositoryExecutionReceipt extends Omit<LinuxExecutionReceiptV1, 'schemaVersion' | 'intent'> {
22
+ schemaVersion: 2 | 3;
23
+ intent: LinuxRepositoryExecutionIntent;
24
+ repositoryArtifacts: LinuxRepositoryArtifactSummary[];
25
+ }
26
+ export type LinuxExecutionReceipt = LinuxExecutionReceiptV1 | LinuxRepositoryExecutionReceipt;
27
+ export interface LinuxRepositoryExecutionContext {
28
+ stateRoot: string;
29
+ contract: LinuxRepositoryExecutionContract;
30
+ intent: LinuxRepositoryExecutionIntent;
31
+ }
32
+ export interface LinuxRepositoryExecutionRequest {
33
+ argv: readonly string[];
34
+ archive: {
35
+ bytes: Uint8Array;
36
+ sha256: string;
37
+ };
38
+ artifacts: readonly string[];
39
+ readOnlyRoots?: readonly string[];
40
+ }
41
+ interface Context {
42
+ stateRoot: string;
43
+ contract: LinuxExecutionContract;
44
+ intent: LinuxExecutionIntent;
45
+ }
46
+ /** Persists intent without creating cgroups or admitting a process. The Host must
47
+ * persist this value in its ledger and mark dispatch before calling run(). */
48
+ interface PrepareInput {
49
+ stateRoot: string;
50
+ contract: LinuxExecutionContract;
51
+ job: {
52
+ id: string;
53
+ requestDigest: string;
54
+ nativeResourceId: string;
55
+ nativeNonce: string;
56
+ deadline: number;
57
+ };
58
+ }
59
+ export declare function prepareLinuxExecutionIntent(input: PrepareInput): Promise<LinuxExecutionIntent>;
60
+ export declare function linuxExecutionReceiptBinding(receipt: LinuxExecutionReceipt): LinuxReceiptBinding;
61
+ /** A private receipt alone never proves cleanup: recheck roots, boot and actual absence. */
62
+ export declare function readLinuxExecutionReceipt(input: Context): Promise<LinuxExecutionReceipt | undefined>;
63
+ export declare function readLinuxExecutionPartialCleanupProof(input: Context): Promise<LinuxExecutionPartialCleanupProof | undefined>;
64
+ /** Host-only result retention. The synchronous callback must persist the ledger
65
+ * marker before either private evidence copy is replaced. A mixed pair after a
66
+ * crash is independently verifiable against that marker and can be retried. */
67
+ export declare function retainLinuxExecutionResult(input: Context & {
68
+ resources: LinuxExecutionResources;
69
+ result: IsolationResult;
70
+ fenced: () => boolean;
71
+ compact: () => IsolationResult | undefined;
72
+ }): Promise<number>;
73
+ type RunInput = Context & {
74
+ argv: readonly string[];
75
+ files: readonly IsolationFile[];
76
+ artifacts?: readonly string[];
77
+ readOnlyRoots?: readonly string[];
78
+ signal: AbortSignal;
79
+ recordResources: (value: LinuxExecutionResources) => Promise<void>;
80
+ authorizeStart: () => Promise<boolean> | boolean;
81
+ };
82
+ type RunOutcome = {
83
+ result: IsolationResult;
84
+ resources?: LinuxExecutionResources;
85
+ receipt?: LinuxExecutionReceipt;
86
+ partialProof?: LinuxExecutionPartialCleanupProof;
87
+ };
88
+ export declare function runLinuxExecution(input: RunInput): Promise<RunOutcome>;
89
+ /** Recovery never dispatches. A still-live creator may resume a pending create,
90
+ * irrespective of controller lease expiry, so it cannot be reclaimed here. */
91
+ export declare function reconcileLinuxExecution(input: Context): Promise<{
92
+ quiescent: boolean;
93
+ resources?: LinuxExecutionResources;
94
+ receipt?: LinuxExecutionReceipt;
95
+ partialProof?: LinuxExecutionPartialCleanupProof;
96
+ }>;
97
+ export declare function prepareLinuxRepositoryIntent(input: PrepareInput & LinuxRepositoryExecutionRequest & {
98
+ contract: LinuxRepositoryExecutionContract;
99
+ }): Promise<LinuxRepositoryExecutionIntent>;
100
+ /** Binary bytes are returned only after successful receipt validation and fresh
101
+ * kernel absence checks. Reopening a completed identity only reads its receipt. */
102
+ export declare function readLinuxRepositoryReceipt(input: LinuxRepositoryExecutionContext): Promise<{
103
+ receipt: LinuxRepositoryExecutionReceipt;
104
+ artifacts: LinuxRepositoryArtifact[];
105
+ } | undefined>;
106
+ export type LinuxRepositoryExecutionOutcome = Omit<RunOutcome, 'receipt'> & {
107
+ receipt?: LinuxRepositoryExecutionReceipt;
108
+ artifacts: LinuxRepositoryArtifact[];
109
+ };
110
+ export declare function runLinuxRepositoryExecution(input: LinuxRepositoryExecutionContext & LinuxRepositoryExecutionRequest & {
111
+ signal: AbortSignal;
112
+ recordResources: (value: LinuxExecutionResources) => Promise<void>;
113
+ authorizeStart: () => Promise<boolean> | boolean;
114
+ }): Promise<LinuxRepositoryExecutionOutcome>;
115
+ export declare function reconcileLinuxRepositoryExecution(input: LinuxRepositoryExecutionContext): Promise<{
116
+ quiescent: boolean;
117
+ resources?: LinuxExecutionResources;
118
+ receipt?: LinuxRepositoryExecutionReceipt;
119
+ partialProof?: LinuxExecutionPartialCleanupProof;
120
+ artifacts: LinuxRepositoryArtifact[];
121
+ }>;
122
+ export {};
123
+ //# sourceMappingURL=linux-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linux-execution.d.ts","sourceRoot":"","sources":["../src/linux-execution.ts"],"names":[],"mappings":"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"}