@dsh-enhanced/lark-channel 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 (184) hide show
  1. package/README.md +25 -7
  2. package/cordis.patch.yml +1 -0
  3. package/docs/operations.md +1 -1
  4. package/docs/progress-security.md +3 -0
  5. package/docs/rsi-setup.md +13 -7
  6. package/docs/setup.md +2 -1
  7. package/lib/adapter.d.ts +8 -0
  8. package/lib/adapter.d.ts.map +1 -1
  9. package/lib/adapter.js +44 -7
  10. package/lib/adapter.js.map +1 -1
  11. package/lib/config.d.ts +6 -0
  12. package/lib/config.d.ts.map +1 -1
  13. package/lib/config.js +54 -8
  14. package/lib/config.js.map +1 -1
  15. package/lib/group-thread.d.ts +9 -0
  16. package/lib/group-thread.d.ts.map +1 -1
  17. package/lib/group-thread.js +16 -2
  18. package/lib/group-thread.js.map +1 -1
  19. package/lib/index.d.ts +5 -0
  20. package/lib/index.d.ts.map +1 -1
  21. package/lib/index.js +24 -1
  22. package/lib/index.js.map +1 -1
  23. package/lib/normalize.d.ts.map +1 -1
  24. package/lib/normalize.js +7 -4
  25. package/lib/normalize.js.map +1 -1
  26. package/lib/progress.d.ts +11 -1
  27. package/lib/progress.d.ts.map +1 -1
  28. package/lib/progress.js +13 -1
  29. package/lib/progress.js.map +1 -1
  30. package/lib/rsi-authority-runtime.d.ts +1 -0
  31. package/lib/rsi-authority-runtime.d.ts.map +1 -1
  32. package/lib/rsi-authority-runtime.js +17 -7
  33. package/lib/rsi-authority-runtime.js.map +1 -1
  34. package/lib/rsi-bootstrap-manifest.d.ts +17 -5
  35. package/lib/rsi-bootstrap-manifest.d.ts.map +1 -1
  36. package/lib/rsi-bootstrap-manifest.js +160 -10
  37. package/lib/rsi-bootstrap-manifest.js.map +1 -1
  38. package/lib/rsi-bootstrap.js +3 -3
  39. package/lib/rsi-bootstrap.js.map +1 -1
  40. package/lib/rsi-build.d.ts +12 -0
  41. package/lib/rsi-build.d.ts.map +1 -1
  42. package/lib/rsi-build.js +55 -5
  43. package/lib/rsi-build.js.map +1 -1
  44. package/lib/rsi-creation-build.d.ts +3 -0
  45. package/lib/rsi-creation-build.d.ts.map +1 -1
  46. package/lib/rsi-creation-build.js +45 -0
  47. package/lib/rsi-creation-build.js.map +1 -1
  48. package/lib/rsi-host-update.d.ts +51 -0
  49. package/lib/rsi-host-update.d.ts.map +1 -1
  50. package/lib/rsi-host-update.js +61 -1
  51. package/lib/rsi-host-update.js.map +1 -1
  52. package/lib/rsi-install.d.ts +15 -3
  53. package/lib/rsi-install.d.ts.map +1 -1
  54. package/lib/rsi-install.js +80 -15
  55. package/lib/rsi-install.js.map +1 -1
  56. package/lib/rsi-linux-cgroup-roots.d.ts +3 -0
  57. package/lib/rsi-linux-cgroup-roots.d.ts.map +1 -0
  58. package/lib/rsi-linux-cgroup-roots.js +3 -0
  59. package/lib/rsi-linux-cgroup-roots.js.map +1 -0
  60. package/lib/rsi-linux-creation-build.d.ts +36 -0
  61. package/lib/rsi-linux-creation-build.d.ts.map +1 -0
  62. package/lib/rsi-linux-creation-build.js +213 -0
  63. package/lib/rsi-linux-creation-build.js.map +1 -0
  64. package/lib/rsi-linux-native-materialize.d.ts +31 -0
  65. package/lib/rsi-linux-native-materialize.d.ts.map +1 -0
  66. package/lib/rsi-linux-native-materialize.js +162 -0
  67. package/lib/rsi-linux-native-materialize.js.map +1 -0
  68. package/lib/rsi-linux-native-relocation.d.ts +120 -0
  69. package/lib/rsi-linux-native-relocation.d.ts.map +1 -0
  70. package/lib/rsi-linux-native-relocation.js +1555 -0
  71. package/lib/rsi-linux-native-relocation.js.map +1 -0
  72. package/lib/rsi-linux-native-resources.d.ts +97 -0
  73. package/lib/rsi-linux-native-resources.d.ts.map +1 -0
  74. package/lib/rsi-linux-native-resources.js +521 -0
  75. package/lib/rsi-linux-native-resources.js.map +1 -0
  76. package/lib/rsi-linux-repository-bootstrap.d.ts +17 -0
  77. package/lib/rsi-linux-repository-bootstrap.d.ts.map +1 -0
  78. package/lib/rsi-linux-repository-bootstrap.js +317 -0
  79. package/lib/rsi-linux-repository-bootstrap.js.map +1 -0
  80. package/lib/rsi-linux-runner-states.d.ts +20 -0
  81. package/lib/rsi-linux-runner-states.d.ts.map +1 -0
  82. package/lib/rsi-linux-runner-states.js +70 -0
  83. package/lib/rsi-linux-runner-states.js.map +1 -0
  84. package/lib/rsi-linux-runtime-bootstrap.d.ts +10 -0
  85. package/lib/rsi-linux-runtime-bootstrap.d.ts.map +1 -0
  86. package/lib/rsi-linux-runtime-bootstrap.js +38 -0
  87. package/lib/rsi-linux-runtime-bootstrap.js.map +1 -0
  88. package/lib/rsi-linux-source-build.d.ts +28 -0
  89. package/lib/rsi-linux-source-build.d.ts.map +1 -0
  90. package/lib/rsi-linux-source-build.js +43 -0
  91. package/lib/rsi-linux-source-build.js.map +1 -0
  92. package/lib/rsi-local-install.d.ts +2 -0
  93. package/lib/rsi-local-install.d.ts.map +1 -1
  94. package/lib/rsi-local-install.js +42 -1
  95. package/lib/rsi-local-install.js.map +1 -1
  96. package/lib/rsi-local-pair-install.d.ts +15 -0
  97. package/lib/rsi-local-pair-install.d.ts.map +1 -1
  98. package/lib/rsi-local-pair-install.js +21 -6
  99. package/lib/rsi-local-pair-install.js.map +1 -1
  100. package/lib/rsi-local-resources.d.ts +2 -2
  101. package/lib/rsi-local-resources.d.ts.map +1 -1
  102. package/lib/rsi-local-resources.js +5 -0
  103. package/lib/rsi-local-resources.js.map +1 -1
  104. package/lib/rsi-local-update-build.d.ts +25 -6
  105. package/lib/rsi-local-update-build.d.ts.map +1 -1
  106. package/lib/rsi-local-update-build.js +46 -7
  107. package/lib/rsi-local-update-build.js.map +1 -1
  108. package/lib/rsi-local-update.d.ts +5 -2
  109. package/lib/rsi-local-update.d.ts.map +1 -1
  110. package/lib/rsi-local-update.js +6 -5
  111. package/lib/rsi-local-update.js.map +1 -1
  112. package/lib/rsi-memory-learning.d.ts +7 -1
  113. package/lib/rsi-memory-learning.d.ts.map +1 -1
  114. package/lib/rsi-memory-learning.js +11 -4
  115. package/lib/rsi-memory-learning.js.map +1 -1
  116. package/lib/rsi-native-install.d.ts.map +1 -1
  117. package/lib/rsi-native-install.js +12 -1
  118. package/lib/rsi-native-install.js.map +1 -1
  119. package/lib/rsi-native-profile.d.ts +8 -0
  120. package/lib/rsi-native-profile.d.ts.map +1 -1
  121. package/lib/rsi-native-profile.js +102 -4
  122. package/lib/rsi-native-profile.js.map +1 -1
  123. package/lib/rsi-ordinary-use-learning.d.ts +60 -0
  124. package/lib/rsi-ordinary-use-learning.d.ts.map +1 -0
  125. package/lib/rsi-ordinary-use-learning.js +103 -0
  126. package/lib/rsi-ordinary-use-learning.js.map +1 -0
  127. package/lib/rsi-plugin-creation.d.ts +16 -1
  128. package/lib/rsi-plugin-creation.d.ts.map +1 -1
  129. package/lib/rsi-plugin-creation.js +60 -14
  130. package/lib/rsi-plugin-creation.js.map +1 -1
  131. package/lib/rsi-plugin-revision.d.ts +35 -0
  132. package/lib/rsi-plugin-revision.d.ts.map +1 -0
  133. package/lib/rsi-plugin-revision.js +200 -0
  134. package/lib/rsi-plugin-revision.js.map +1 -0
  135. package/lib/rsi-profile.d.ts +11 -0
  136. package/lib/rsi-profile.d.ts.map +1 -1
  137. package/lib/rsi-profile.js +109 -3
  138. package/lib/rsi-profile.js.map +1 -1
  139. package/lib/rsi-release-build.d.ts +24 -8
  140. package/lib/rsi-release-build.d.ts.map +1 -1
  141. package/lib/rsi-release-build.js +89 -37
  142. package/lib/rsi-release-build.js.map +1 -1
  143. package/lib/rsi-scanner-retirement-config.d.ts +34 -0
  144. package/lib/rsi-scanner-retirement-config.d.ts.map +1 -0
  145. package/lib/rsi-scanner-retirement-config.js +272 -0
  146. package/lib/rsi-scanner-retirement-config.js.map +1 -0
  147. package/lib/rsi-scanner-retirement-runtime.d.ts +23 -0
  148. package/lib/rsi-scanner-retirement-runtime.d.ts.map +1 -0
  149. package/lib/rsi-scanner-retirement-runtime.js +98 -0
  150. package/lib/rsi-scanner-retirement-runtime.js.map +1 -0
  151. package/lib/rsi-scanner-retirement-stage.d.ts +55 -0
  152. package/lib/rsi-scanner-retirement-stage.d.ts.map +1 -0
  153. package/lib/rsi-scanner-retirement-stage.js +183 -0
  154. package/lib/rsi-scanner-retirement-stage.js.map +1 -0
  155. package/lib/rsi-scanner-retirement-transition.d.ts +57 -0
  156. package/lib/rsi-scanner-retirement-transition.d.ts.map +1 -0
  157. package/lib/rsi-scanner-retirement-transition.js +320 -0
  158. package/lib/rsi-scanner-retirement-transition.js.map +1 -0
  159. package/lib/rsi-setup.d.ts +24 -0
  160. package/lib/rsi-setup.d.ts.map +1 -1
  161. package/lib/rsi-setup.js +122 -7
  162. package/lib/rsi-setup.js.map +1 -1
  163. package/lib/rsi-source-maintenance.d.ts +9 -1
  164. package/lib/rsi-source-maintenance.d.ts.map +1 -1
  165. package/lib/rsi-source-maintenance.js +64 -5
  166. package/lib/rsi-source-maintenance.js.map +1 -1
  167. package/lib/rsi-source-update.js +2 -2
  168. package/lib/rsi-source-update.js.map +1 -1
  169. package/lib/sdk.d.ts +3 -1
  170. package/lib/sdk.d.ts.map +1 -1
  171. package/lib/sdk.js +8 -2
  172. package/lib/sdk.js.map +1 -1
  173. package/lib/service.d.ts.map +1 -1
  174. package/lib/service.js +2 -0
  175. package/lib/service.js.map +1 -1
  176. package/lib/setup-profile.d.ts.map +1 -1
  177. package/lib/setup-profile.js +1 -0
  178. package/lib/setup-profile.js.map +1 -1
  179. package/lib/types.d.ts +4 -0
  180. package/lib/types.d.ts.map +1 -1
  181. package/lib/types.js.map +1 -1
  182. package/lib/version.d.ts +1 -1
  183. package/lib/version.js +1 -1
  184. package/package.json +21 -21
@@ -0,0 +1,521 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { chmod, cp, lstat, mkdir, readdir, readlink, realpath, rename, rm, writeFile } from 'node:fs/promises';
3
+ import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
4
+ import { isDeepStrictEqual } from 'node:util';
5
+ import { migrateLinuxVerifierRunnerState, prepareLinuxRepositoryHandoverState, prepareLinuxVerifierHandoverState, prepareLinuxVerifierStagingState, } from '@dsh-enhanced/assistant-isolation';
6
+ import { rsiBuildResources as io } from './rsi-build.js';
7
+ import { readRsiLocalUpdateSourceBuild } from './rsi-local-update-build.js';
8
+ import { readRsiSourceWorkspace } from './rsi-source.js';
9
+ import { readRsiReleaseBuildEnvironment } from './rsi-release-build.js';
10
+ import { readRsiLocalUpdateLocked } from './rsi-local-update.js';
11
+ import { openLinuxRsiNativeRelocatedFamily, openLinuxRsiNativeRelocatedFamilyAt, relocateLinuxRsiNativeFamily, openLinuxRsiNativeRelocatedBase, openLinuxRsiNativeRelocatedBaseAt, relocateLinuxRsiNativeBase, inspectLinuxRsiNativeBaseAt, } from './rsi-linux-native-relocation.js';
12
+ import { compileRsiLinuxSourceBuild } from './rsi-linux-source-build.js';
13
+ import { prepareRsiLinuxRunnerStates, validateRsiLinuxRunnerStates } from './rsi-linux-runner-states.js';
14
+ export {
15
+ // Reviewed installer seams of the linux-native owner program transaction,
16
+ // re-exported here so the installer allowlist only needs this module name.
17
+ compileRsiLinuxSourceBuild, migrateLinuxVerifierRunnerState, prepareLinuxRepositoryHandoverState, prepareLinuxVerifierHandoverState, prepareLinuxVerifierStagingState, prepareRsiLinuxRunnerStates, validateRsiLinuxRunnerStates, };
18
+ export { freezeLinuxRuntimeSource } from '@dsh-enhanced/assistant-isolation/native-resources';
19
+ export { openLinuxRsiNativeRelocatedBase, openLinuxRsiNativeRelocatedBaseAt, inspectLinuxRsiNativeBaseAt };
20
+ const PROFILE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u;
21
+ const HEX = /^[a-f0-9]{64}$/u;
22
+ const COMMIT = /^[a-f0-9]{40}$/u;
23
+ const COHORT = 'rsi-local-cohorts';
24
+ const DOCKER_KINDS = ['rsi-builds', 'rsi-release-builds', 'rsi-creation-builds'];
25
+ const MAX_ENTRIES = 150_000;
26
+ const MAX_FILE_BYTES = 268_435_456;
27
+ const MAX_TOTAL_BYTES = 4_294_967_296;
28
+ const MAX_RECEIPT_BYTES = 20_971_520;
29
+ function fail(message) { throw new Error(`rsi Linux native resources: ${message}`); }
30
+ const hash = (value) => createHash('sha256').update(value).digest('hex');
31
+ const exact = (path) => typeof path === 'string' && isAbsolute(path)
32
+ && resolve(path) === path && !path.includes('\0');
33
+ const inside = (root, path) => path === root || path.startsWith(root + sep);
34
+ /** Include modes and directories: matching file bytes alone cannot prove a
35
+ * copied toolchain has retained its executable and private-directory contract. */
36
+ async function inventory(root, signal) {
37
+ let size = 0;
38
+ const entries = [];
39
+ const visit = async (path) => {
40
+ signal.throwIfAborted();
41
+ const item = await lstat(path);
42
+ if (entries.length >= MAX_ENTRIES || item.isSymbolicLink() || (item.mode & 0o077) !== 0
43
+ || process.getuid && item.uid !== process.getuid())
44
+ fail(`unsafe resource entry: ${path}`);
45
+ if (item.isDirectory()) {
46
+ await io.directory(path);
47
+ entries.push({ path: relative(root, path), mode: item.mode & 0o777, sha256: null });
48
+ for (const name of (await readdir(path)).sort())
49
+ await visit(join(path, name));
50
+ }
51
+ else if (item.isFile() && item.nlink === 1) {
52
+ size += item.size;
53
+ if (item.size > MAX_FILE_BYTES || size > MAX_TOTAL_BYTES)
54
+ fail('resource tree exceeds size bound');
55
+ entries.push({ path: relative(root, path), mode: item.mode & 0o777,
56
+ sha256: hash(await io.readStable(path, MAX_FILE_BYTES, true)) });
57
+ }
58
+ else
59
+ fail(`resource is not a private regular file or directory: ${path}`);
60
+ };
61
+ await visit(root);
62
+ return entries;
63
+ }
64
+ function receipt(bytes) {
65
+ const value = JSON.parse(bytes.toString('utf8'));
66
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
67
+ fail('invalid native resource receipt');
68
+ const record = value;
69
+ const { receiptDigest, ...body } = record;
70
+ if (receiptDigest !== hash(JSON.stringify(body)))
71
+ fail('native resource receipt digest differs');
72
+ return record;
73
+ }
74
+ function encode(body) { return JSON.stringify({ ...body, receiptDigest: hash(JSON.stringify(body)) }); }
75
+ function nativeBuild(preparation) {
76
+ const build = preparation.build ?? fail('preparation has no candidate build evidence');
77
+ const sourceBuild = build.sourceBuild;
78
+ if (sourceBuild.schemaVersion !== 3 || sourceBuild.backend !== 'linux-native') {
79
+ fail('candidate build is not a Linux native runtime');
80
+ }
81
+ const releaseBuild = build.releaseBuild;
82
+ if (releaseBuild.schemaVersion !== 2 || releaseBuild.backend !== 'linux-native') {
83
+ fail('candidate release is not a Linux native release build');
84
+ }
85
+ if (releaseBuild.sourceCommit !== sourceBuild.sourceCommit)
86
+ fail('candidate release source differs');
87
+ return { sourceBuild, releaseBuild };
88
+ }
89
+ async function readPreparation(input) {
90
+ const { logicalHome, stagePhysicalHome, profile } = input;
91
+ if (!exact(logicalHome) || !exact(stagePhysicalHome) || !exact(input.preparationRoot) || !PROFILE.test(profile)
92
+ || stagePhysicalHome === logicalHome || inside(logicalHome, stagePhysicalHome)
93
+ || inside(stagePhysicalHome, logicalHome)
94
+ || await realpath(logicalHome) !== logicalHome || await realpath(stagePhysicalHome) !== stagePhysicalHome
95
+ || inside(input.preparationRoot, stagePhysicalHome) || inside(stagePhysicalHome, input.preparationRoot)) {
96
+ fail('stage must be a distinct canonical stopped Home outside the preparation root');
97
+ }
98
+ const signal = AbortSignal.any([input.signal ?? new AbortController().signal, AbortSignal.timeout(600_000)]);
99
+ await io.directory(stagePhysicalHome);
100
+ const prepared = await readRsiLocalUpdateLocked({ dshHome: logicalHome, profile, root: input.preparationRoot, signal });
101
+ nativeBuild(prepared);
102
+ return { prepared, signal };
103
+ }
104
+ /** Replace the stage Home's cohort tree with the prepared candidate cohort,
105
+ * rebased onto the logical Home so no receipt ever records a disposable path.
106
+ * Only `rsi-local-cohorts` changes; the live Home and the prepared candidate
107
+ * Home are verified unchanged immediately before the rename swap. */
108
+ async function stageCohort(input) {
109
+ const { prepared, logicalHome, stagePhysicalHome, profile, signal } = input;
110
+ await io.directory(join(logicalHome, COHORT));
111
+ await io.directory(join(stagePhysicalHome, COHORT));
112
+ await io.directory(join(prepared.candidateHome, COHORT));
113
+ const original = await inventory(join(logicalHome, COHORT, profile), signal);
114
+ if (!isDeepStrictEqual(original, await inventory(join(stagePhysicalHome, COHORT, profile), signal))) {
115
+ fail('copied original cohort differs');
116
+ }
117
+ const candidate = await inventory(join(prepared.candidateHome, COHORT, profile), signal);
118
+ const cohortRoot = join(logicalHome, COHORT, profile);
119
+ const originalCohort = receipt(await io.readStable(join(cohortRoot, 'receipt.json'), MAX_RECEIPT_BYTES, true));
120
+ if (originalCohort.receiptDigest !== prepared.originalCohortDigest
121
+ || typeof originalCohort.sourceRepository !== 'string' || !exact(originalCohort.sourceRepository)) {
122
+ fail('original cohort source differs');
123
+ }
124
+ if (inside(originalCohort.sourceRepository, stagePhysicalHome)
125
+ || inside(stagePhysicalHome, originalCohort.sourceRepository))
126
+ fail('stage overlaps upstream source repository');
127
+ const { receiptDigest: _oldDigest, ...cohortBody } = prepared.cohort;
128
+ const cohort = JSON.parse(encode({ ...cohortBody, root: cohortRoot,
129
+ sourceRepository: originalCohort.sourceRepository,
130
+ packages: prepared.cohort.packages.map(item => ({ ...item,
131
+ tarball: join(cohortRoot, 'artifacts', `${item.name.split('/')[1]}.tgz`) })) }));
132
+ const scratch = join(stagePhysicalHome, `.rsi-linux-native-cohort-${randomUUID()}`);
133
+ await mkdir(scratch, { mode: 0o700 });
134
+ let moved = false;
135
+ try {
136
+ const next = join(scratch, COHORT);
137
+ await cp(join(prepared.candidateHome, COHORT, profile), next, { recursive: true, dereference: false, verbatimSymlinks: true, errorOnExist: true, force: false });
138
+ if (!isDeepStrictEqual(await inventory(next, signal), candidate))
139
+ fail('cohort changed during copy');
140
+ const entry = candidate.find(item => item.path === 'receipt.json');
141
+ if (!entry || entry.sha256 === null)
142
+ fail('cohort receipt is missing from the inventory');
143
+ const bytes = JSON.stringify(cohort);
144
+ await writeFile(join(next, 'receipt.json'), bytes, { mode: entry.mode });
145
+ await chmod(join(next, 'receipt.json'), entry.mode);
146
+ const expected = candidate.map(item => item.path === 'receipt.json' ? { ...item, sha256: hash(bytes) } : item);
147
+ if (!isDeepStrictEqual(await inventory(next, signal), expected))
148
+ fail('rebased cohort differs');
149
+ if (!isDeepStrictEqual(await readRsiLocalUpdateLocked({ dshHome: logicalHome, profile,
150
+ root: input.preparationRoot, signal }), prepared))
151
+ fail('preparation changed during copy');
152
+ if (!isDeepStrictEqual(await inventory(join(logicalHome, COHORT, profile), signal), original)
153
+ || !isDeepStrictEqual(await inventory(join(stagePhysicalHome, COHORT, profile), signal), original)) {
154
+ fail('original cohort changed');
155
+ }
156
+ await rename(join(stagePhysicalHome, COHORT, profile), join(scratch, 'old'));
157
+ moved = true;
158
+ await rename(next, join(stagePhysicalHome, COHORT, profile));
159
+ await io.syncDirectory(join(stagePhysicalHome, COHORT));
160
+ await rm(scratch, { recursive: true });
161
+ return cohort;
162
+ }
163
+ catch (error) {
164
+ if (moved) {
165
+ await rm(join(stagePhysicalHome, COHORT, profile), { recursive: true });
166
+ await rename(join(scratch, 'old'), join(stagePhysicalHome, COHORT, profile));
167
+ await io.syncDirectory(join(stagePhysicalHome, COHORT));
168
+ }
169
+ await rm(scratch, { recursive: true });
170
+ throw error;
171
+ }
172
+ }
173
+ /** Remove one Docker-era build tree from the stopped stage Home. A linux-native
174
+ * stage must hold exactly one backend: `readRsiLocalUpdateSourceBuild` refuses a
175
+ * Home carrying both the Docker and the native receipts. */
176
+ async function dropDockerTree(stagePhysicalHome, profile, kind) {
177
+ const root = join(stagePhysicalHome, kind);
178
+ const missing = (error) => {
179
+ if (error.code === 'ENOENT')
180
+ return undefined;
181
+ throw error;
182
+ };
183
+ if (await lstat(root).catch(missing) === undefined)
184
+ return;
185
+ await io.directory(root);
186
+ const path = join(root, profile);
187
+ const item = await lstat(path).catch(missing);
188
+ if (item === undefined)
189
+ return;
190
+ if (!item.isDirectory() || item.isSymbolicLink() || (item.mode & 0o077) !== 0
191
+ || process.getuid && item.uid !== process.getuid())
192
+ fail(`unsafe staged ${kind} tree`);
193
+ await rm(path, { recursive: true });
194
+ await io.syncDirectory(root);
195
+ }
196
+ /** Preparation-phase handover for a linux-native candidate. The disposable Home
197
+ * only receives the rebased cohort that the profile preparation reads; the
198
+ * native families are relocated later, in the stopped stage Home, so a
199
+ * preparation failure can never publish a half-built runtime. */
200
+ export async function prepareLinuxRsiNativeResources(input) {
201
+ const { prepared, signal } = await readPreparation(input);
202
+ const cohort = await stageCohort({ prepared, logicalHome: input.logicalHome,
203
+ stagePhysicalHome: input.stagePhysicalHome, profile: input.profile,
204
+ preparationRoot: input.preparationRoot, signal });
205
+ return { cohort };
206
+ }
207
+ /** Stage-phase handover for a linux-native candidate: drop the Docker-era build
208
+ * trees, stage the rebased cohort, then relocate the independently verified
209
+ * native families into the stopped stage Home. The returned proof is the only
210
+ * record the cutover and every later verification read. */
211
+ export async function stageLinuxRsiNativeResources(input) {
212
+ const { prepared, signal } = await readPreparation(input);
213
+ const { logicalHome, stagePhysicalHome, profile } = input;
214
+ for (const kind of DOCKER_KINDS)
215
+ await dropDockerTree(stagePhysicalHome, profile, kind);
216
+ const cohort = await stageCohort({ prepared, logicalHome, stagePhysicalHome, profile,
217
+ preparationRoot: input.preparationRoot, signal });
218
+ const relocation = await relocateLinuxRsiNativeFamily({ sourceHome: prepared.candidateHome,
219
+ physicalHome: stagePhysicalHome, logicalHome, profile, existingLogicalHome: logicalHome, signal });
220
+ const family = await openLinuxRsiNativeRelocatedFamily(relocation);
221
+ if (family.runtime.sourceCommit !== prepared.source.sourceCommit)
222
+ fail('relocated runtime source differs');
223
+ if (family.creationBuild.sourceCommit !== prepared.source.sourceCommit)
224
+ fail('relocated creation build source differs');
225
+ const proof = { schemaVersion: 1, backend: 'linux-native', logicalHome,
226
+ physicalHome: stagePhysicalHome, profile, preparationDigest: prepared.receiptDigest,
227
+ cohortDigest: cohort.receiptDigest, relocation };
228
+ await auditNativeResources(proof, stagePhysicalHome, family);
229
+ return { cohort, family, proof };
230
+ }
231
+ /** Verify a staged or already-cut-over native resource proof. `physicalHome` may
232
+ * be the sealed stage Home or the logical Home the trees were renamed into: the
233
+ * rename preserves the sealed dev/ino and content identity, and the cohort
234
+ * receipt always records logical paths. */
235
+ export async function verifyLinuxRsiNativeResources(input) {
236
+ const { proof } = input;
237
+ if (!relocationProof(proof) || !exact(proof.logicalHome) || !exact(proof.physicalHome)
238
+ || !PROFILE.test(proof.profile) || !HEX.test(proof.preparationDigest) || !HEX.test(proof.cohortDigest)) {
239
+ fail('invalid native resource proof binding');
240
+ }
241
+ const physicalHome = input.physicalHome;
242
+ if (!exact(physicalHome) || await realpath(physicalHome) !== physicalHome) {
243
+ fail('invalid native resource physical Home');
244
+ }
245
+ if (physicalHome !== proof.physicalHome && physicalHome !== proof.logicalHome) {
246
+ fail('native resource proof does not describe this physical Home');
247
+ }
248
+ input.signal?.throwIfAborted();
249
+ // Re-hashes the relocated families from physical Home only; the logical Home is
250
+ // never read here, so post-cutover verification stays a pure stage/Home check.
251
+ const family = await openLinuxRsiNativeRelocatedFamilyAt(proof.relocation, physicalHome);
252
+ await auditNativeResources(proof, physicalHome, family);
253
+ }
254
+ function relocationProof(proof) {
255
+ const value = proof.relocation;
256
+ if (value === null || typeof value !== 'object')
257
+ return undefined;
258
+ const relocation = value;
259
+ if (relocation.schemaVersion !== 1 || relocation.backend !== 'linux-native'
260
+ || relocation.logicalHome !== proof.logicalHome || relocation.physicalHome !== proof.physicalHome
261
+ || relocation.profile !== proof.profile)
262
+ return undefined;
263
+ return relocation;
264
+ }
265
+ /** Cheap, non-family checks shared by the stage handover and every later
266
+ * verification: the rebased cohort receipt and its packaged tarballs. */
267
+ async function auditNativeResources(proof, physicalHome, family) {
268
+ const cohortRoot = join(proof.logicalHome, COHORT, proof.profile);
269
+ const stageRoot = join(physicalHome, COHORT, proof.profile);
270
+ if (physicalHome !== proof.physicalHome && physicalHome !== proof.logicalHome) {
271
+ fail('native resource proof does not describe this physical Home');
272
+ }
273
+ await io.directory(join(physicalHome, COHORT));
274
+ const cohort = receipt(await io.readStable(join(stageRoot, 'receipt.json'), MAX_RECEIPT_BYTES, true));
275
+ if (cohort.receiptDigest !== proof.cohortDigest)
276
+ fail('staged cohort receipt digest differs');
277
+ if (cohort.root !== cohortRoot || !Array.isArray(cohort.packages) || !COMMIT.test(String(cohort.sourceCommit))) {
278
+ fail('staged cohort receipt differs');
279
+ }
280
+ if (cohort.sourceCommit !== family.runtime.sourceCommit)
281
+ fail('staged cohort source differs');
282
+ for (const item of cohort.packages) {
283
+ if (item === null || typeof item !== 'object')
284
+ fail('staged cohort package differs');
285
+ const entry = item;
286
+ if (typeof entry.name !== 'string' || typeof entry.tarball !== 'string'
287
+ || typeof entry.sha256 !== 'string' || !HEX.test(entry.sha256))
288
+ fail('staged cohort package differs');
289
+ const expected = join(cohortRoot, 'artifacts', `${entry.name.split('/')[1]}.tgz`);
290
+ if (entry.tarball !== expected)
291
+ fail('staged cohort package path differs');
292
+ const digest = hash(await io.readStable(join(stageRoot, 'artifacts', basename(expected)), MAX_FILE_BYTES, true));
293
+ if (digest !== entry.sha256)
294
+ fail(`staged cohort package differs: ${entry.name}`);
295
+ }
296
+ }
297
+ const BASE_KINDS = ['rsi-linux-runtimes', 'rsi-release-builds', 'rsi-builds', COHORT];
298
+ const OWNER_KINDS = ['rsi-linux-repository-runtimes', 'rsi-linux-creation-builds', 'rsi-creation-builds'];
299
+ async function present(path) {
300
+ try {
301
+ await lstat(path);
302
+ return true;
303
+ }
304
+ catch (error) {
305
+ if (error.code === 'ENOENT')
306
+ return false;
307
+ throw error;
308
+ }
309
+ }
310
+ /** Content comparison deliberately excludes dev/ino: a copied stage has fresh
311
+ * inodes, while the live stock readers still verify the original native pins. */
312
+ async function baseInventory(root, signal) {
313
+ await io.directory(root);
314
+ const entries = [];
315
+ let bytes = 0;
316
+ const visit = async (path) => {
317
+ signal.throwIfAborted();
318
+ const item = await lstat(path);
319
+ if (entries.length >= MAX_ENTRIES || process.getuid && item.uid !== process.getuid()
320
+ || !item.isSymbolicLink() && item.mode & 0o022)
321
+ fail('unsafe pre-owner base entry');
322
+ const location = relative(root, path), mode = item.mode & 0o777;
323
+ if (item.isSymbolicLink()) {
324
+ if (item.nlink !== 1)
325
+ fail('pre-owner base link must be detached');
326
+ const link = await readlink(path);
327
+ if (isAbsolute(link) || !inside(root, resolve(dirname(path), link)) || !inside(root, await realpath(path))) {
328
+ fail('pre-owner base link escapes its tree');
329
+ }
330
+ const after = await lstat(path);
331
+ if (!after.isSymbolicLink() || !isDeepStrictEqual([item.dev, item.ino, item.uid, item.mode, item.nlink, item.size, item.mtimeMs, item.ctimeMs], [after.dev, after.ino, after.uid, after.mode, after.nlink, after.size, after.mtimeMs, after.ctimeMs])) {
332
+ fail('pre-owner base link identity changed during read');
333
+ }
334
+ entries.push({ path: location, mode, sha256: null, link });
335
+ }
336
+ else if (item.isDirectory()) {
337
+ entries.push({ path: location, mode, sha256: null });
338
+ for (const name of (await readdir(path)).sort())
339
+ await visit(join(path, name));
340
+ }
341
+ else if (item.isFile() && item.nlink === 1) {
342
+ bytes += item.size;
343
+ if (item.size > MAX_FILE_BYTES || bytes > MAX_TOTAL_BYTES)
344
+ fail('pre-owner base tree exceeds size bound');
345
+ entries.push({ path: location, mode, sha256: hash(await io.readStable(path, MAX_FILE_BYTES)) });
346
+ }
347
+ else
348
+ fail('pre-owner base entry is not a detached regular file/directory');
349
+ };
350
+ await visit(root);
351
+ return entries;
352
+ }
353
+ async function preOwnerFamilies(home, profile) {
354
+ for (const kind of OWNER_KINDS)
355
+ if (await present(join(home, kind, profile)))
356
+ fail('pre-owner Home contains an owner runtime family');
357
+ const authority = join(home, 'rsi-authorities', profile);
358
+ if (await present(authority)) {
359
+ await io.directory(authority);
360
+ for (const name of ['state', 'config', 'registry']) {
361
+ const path = join(authority, name);
362
+ if (await present(path)) {
363
+ await io.directory(path);
364
+ if ((await readdir(path)).length)
365
+ fail('pre-owner authority is not empty');
366
+ }
367
+ }
368
+ const catalogPath = join(authority, 'catalog.json');
369
+ if (await present(catalogPath)) {
370
+ const catalog = JSON.parse((await io.readStable(catalogPath, MAX_RECEIPT_BYTES, true)).toString('utf8'));
371
+ if (!isDeepStrictEqual(catalog, { schemaVersion: 1, entries: [] }))
372
+ fail('pre-owner catalog is not empty');
373
+ }
374
+ }
375
+ }
376
+ async function originalBase(input, signal) {
377
+ const { logicalHome, stagePhysicalHome, profile } = input;
378
+ await preOwnerFamilies(logicalHome, profile);
379
+ await preOwnerFamilies(stagePhysicalHome, profile);
380
+ const native = await present(join(logicalHome, 'rsi-linux-runtimes', profile)), docker = await present(join(logicalHome, 'rsi-builds', profile));
381
+ if (native === docker)
382
+ fail('pre-owner original must have exactly one build backend');
383
+ // readRsiSourceWorkspace follows an authenticated maintenance chain when one
384
+ // exists; it does not replay the older bootstrap commit after maintenance.
385
+ const source = await readRsiSourceWorkspace({ dshHome: logicalHome, profile, signal });
386
+ const sourceBuild = await readRsiLocalUpdateSourceBuild({ dshHome: logicalHome, profile, source, signal });
387
+ const backend = sourceBuild.schemaVersion === 3 && sourceBuild.backend === 'linux-native' ? 'linux-native' : 'docker';
388
+ if ((backend === 'linux-native') !== native)
389
+ fail('original backend reader differs from its tree');
390
+ const releaseBuild = await readRsiReleaseBuildEnvironment({ dshHome: logicalHome, profile, build: sourceBuild, signal });
391
+ const trees = new Map();
392
+ for (const kind of BASE_KINDS) {
393
+ const live = join(logicalHome, kind, profile), stage = join(stagePhysicalHome, kind, profile);
394
+ const exists = await present(live);
395
+ if (exists !== await present(stage))
396
+ fail('copied original base layout differs');
397
+ if (!exists) {
398
+ trees.set(kind, null);
399
+ continue;
400
+ }
401
+ const original = await baseInventory(live, signal);
402
+ if (!isDeepStrictEqual(original, await baseInventory(stage, signal)))
403
+ fail('copied original base content differs');
404
+ trees.set(kind, original);
405
+ }
406
+ return { backend, sourceBuild, releaseBuild, trees };
407
+ }
408
+ async function verifyPreOwnerOriginal(input, frozen, signal) {
409
+ await preOwnerFamilies(input.logicalHome, input.profile);
410
+ const source = await readRsiSourceWorkspace({ dshHome: input.logicalHome, profile: input.profile, signal });
411
+ const build = await readRsiLocalUpdateSourceBuild({ dshHome: input.logicalHome, profile: input.profile, source, signal });
412
+ const release = await readRsiReleaseBuildEnvironment({ dshHome: input.logicalHome, profile: input.profile, build, signal });
413
+ if (!isDeepStrictEqual(build, frozen.sourceBuild) || !isDeepStrictEqual(release, frozen.releaseBuild))
414
+ fail('original base receipts changed during staging');
415
+ for (const [kind, before] of frozen.trees) {
416
+ const path = join(input.logicalHome, kind, input.profile);
417
+ if (before === null ? await present(path) : !await present(path) || !isDeepStrictEqual(before, await baseInventory(path, signal))) {
418
+ fail('original base trees changed during staging');
419
+ }
420
+ }
421
+ }
422
+ /** All writes target the disposable stage. Old profile trees (including the
423
+ * original cohort inode) remain under a private scratch until the final audit;
424
+ * a later cohort or preparation failure restores them as one transaction. */
425
+ export async function stageLinuxRsiPreOwnerNativeResources(input) {
426
+ const { prepared, signal } = await readPreparation(input);
427
+ const { logicalHome, stagePhysicalHome, profile } = input;
428
+ const build = nativeBuild(prepared);
429
+ if (build.sourceBuild.sourceCommit !== prepared.source.sourceCommit)
430
+ fail('candidate runtime differs from preparation source');
431
+ await preOwnerFamilies(prepared.candidateHome, profile);
432
+ if (await present(join(prepared.candidateHome, 'rsi-builds', profile)))
433
+ fail('native candidate also contains Docker resources');
434
+ const original = await originalBase(input, signal);
435
+ const scratch = join(stagePhysicalHome, `.rsi-pre-owner-native-${randomUUID()}`);
436
+ await mkdir(scratch, { mode: 0o700 });
437
+ const moved = new Map(), missingParents = new Set();
438
+ let discarding = false;
439
+ try {
440
+ await writeFile(join(scratch, 'transaction.json'), JSON.stringify({ schemaVersion: 1, purpose: 'pre-owner-base-stage',
441
+ logicalHome, physicalHome: stagePhysicalHome, profile, preparationDigest: prepared.receiptDigest, originalBackend: original.backend,
442
+ trees: [...original.trees].map(([kind, entries]) => ({ kind, inventoryDigest: entries === null ? null : hash(JSON.stringify(entries)) })) }), { mode: 0o600, flag: 'wx' });
443
+ for (const kind of BASE_KINDS) {
444
+ const parent = join(stagePhysicalHome, kind), path = join(parent, profile), backup = join(scratch, kind);
445
+ if (!await present(parent))
446
+ missingParents.add(parent);
447
+ if (await present(path)) {
448
+ await io.directory(parent);
449
+ await rename(path, backup);
450
+ moved.set(path, backup);
451
+ }
452
+ else
453
+ moved.set(path, null);
454
+ }
455
+ // stageCohort owns its own swap; give it an old-content working copy while
456
+ // retaining the original stage tree/inode outside that helper's cleanup.
457
+ const oldCohort = moved.get(join(stagePhysicalHome, COHORT, profile));
458
+ if (!oldCohort)
459
+ fail('original staged cohort is missing');
460
+ await cp(oldCohort, join(stagePhysicalHome, COHORT, profile), { recursive: true, dereference: false, verbatimSymlinks: true, errorOnExist: true, force: false });
461
+ const relocation = await relocateLinuxRsiNativeBase({ sourceHome: prepared.candidateHome,
462
+ physicalHome: stagePhysicalHome, logicalHome, profile, existingLogicalHome: logicalHome, signal });
463
+ const family = await openLinuxRsiNativeRelocatedBase(relocation);
464
+ if (family.runtime.sourceCommit !== prepared.source.sourceCommit || family.release.sourceCommit !== prepared.source.sourceCommit)
465
+ fail('relocated base source differs');
466
+ const cohort = await stageCohort({ prepared, logicalHome, stagePhysicalHome, profile, preparationRoot: input.preparationRoot, signal });
467
+ const proof = { schemaVersion: 1, backend: 'linux-native', purpose: 'pre-owner-base', logicalHome,
468
+ physicalHome: stagePhysicalHome, profile, preparationDigest: prepared.receiptDigest, cohortDigest: cohort.receiptDigest,
469
+ originalBackend: original.backend, relocation };
470
+ await verifyLinuxRsiPreOwnerNativeResources({ proof, physicalHome: stagePhysicalHome, signal });
471
+ if (!isDeepStrictEqual(await readRsiLocalUpdateLocked({ dshHome: logicalHome, profile, root: input.preparationRoot, signal }), prepared))
472
+ fail('preparation changed after base staging');
473
+ await verifyPreOwnerOriginal(input, original, signal);
474
+ // Backups may disappear incrementally from this point. A cleanup failure
475
+ // must retain the verified candidate, never delete it and replay partial old trees.
476
+ discarding = true;
477
+ await rm(scratch, { recursive: true });
478
+ return { cohort, sourceBuild: family.runtime, releaseBuild: family.release, proof };
479
+ }
480
+ catch (error) {
481
+ if (discarding)
482
+ throw new Error(`rsi Linux native resources: pre-owner backup cleanup failed after candidate verification; preserved evidence: ${scratch}`, { cause: error });
483
+ try {
484
+ for (const [path, backup] of [...moved].reverse()) {
485
+ await rm(path, { recursive: true, force: true });
486
+ if (backup !== null)
487
+ await rename(backup, path);
488
+ if (await present(dirname(path)))
489
+ await io.syncDirectory(dirname(path));
490
+ }
491
+ for (const path of missingParents)
492
+ if (await present(path) && (await readdir(path)).length === 0)
493
+ await rm(path, { recursive: true });
494
+ await rm(scratch, { recursive: true });
495
+ }
496
+ catch (rollback) {
497
+ throw new Error(`rsi Linux native resources: pre-owner rollback incomplete; preserved evidence: ${scratch}`, { cause: new AggregateError([error, rollback]) });
498
+ }
499
+ throw error;
500
+ }
501
+ }
502
+ export async function verifyLinuxRsiPreOwnerNativeResources(input) {
503
+ const { proof, physicalHome } = input;
504
+ const relocation = proof?.relocation;
505
+ if (!proof || proof.schemaVersion !== 1 || proof.backend !== 'linux-native' || proof.purpose !== 'pre-owner-base'
506
+ || !['docker', 'linux-native'].includes(proof.originalBackend) || !exact(proof.logicalHome) || !exact(proof.physicalHome)
507
+ || !PROFILE.test(proof.profile) || !HEX.test(proof.preparationDigest) || !HEX.test(proof.cohortDigest)
508
+ || !relocation || relocation.purpose !== 'pre-owner-base' || relocation.logicalHome !== proof.logicalHome
509
+ || relocation.physicalHome !== proof.physicalHome || relocation.profile !== proof.profile
510
+ || !exact(physicalHome) || await realpath(physicalHome) !== physicalHome
511
+ || physicalHome !== proof.physicalHome && physicalHome !== proof.logicalHome)
512
+ fail('invalid pre-owner native resource proof binding');
513
+ input.signal?.throwIfAborted();
514
+ await preOwnerFamilies(physicalHome, proof.profile);
515
+ for (const kind of ['rsi-builds', 'rsi-creation-builds'])
516
+ if (await present(join(physicalHome, kind, proof.profile)))
517
+ fail('pre-owner native Home retains Docker resources');
518
+ const family = await openLinuxRsiNativeRelocatedBaseAt(relocation, physicalHome);
519
+ await auditNativeResources(proof, physicalHome, family);
520
+ }
521
+ //# sourceMappingURL=rsi-linux-native-resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-linux-native-resources.js","sourceRoot":"","sources":["../src/rsi-linux-native-resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type LinuxRuntime, type LinuxSystemSnapshot, type LinuxUserNamespaceMapping } from '@dsh-enhanced/assistant-isolation';
2
+ import { type LinuxRsiBootstrapInput } from './rsi-linux-runtime-bootstrap.js';
3
+ export interface LinuxRsiRepositoryBuildEnvironment {
4
+ schemaVersion: 4;
5
+ backend: 'linux-native';
6
+ sourceCommit: string;
7
+ lockSha256: string;
8
+ runtime: LinuxRuntime;
9
+ systemSnapshot: LinuxSystemSnapshot;
10
+ userNamespace: LinuxUserNamespaceMapping;
11
+ }
12
+ /** Separate schema4 capability; no schema3 runtime, owner, ledger or grant is rewritten. */
13
+ export declare function prepareLinuxRsiRepositoryRuntime(input: LinuxRsiBootstrapInput): Promise<LinuxRsiRepositoryBuildEnvironment>;
14
+ /** Reopen only the existing schema4 repository family. Missing or damaged
15
+ * receipts are errors; preparation and archive inputs are never consulted. */
16
+ export declare function readLinuxRsiRepositoryRuntime(input: LinuxRsiBootstrapInput): Promise<LinuxRsiRepositoryBuildEnvironment>;
17
+ //# sourceMappingURL=rsi-linux-repository-bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-linux-repository-bootstrap.d.ts","sourceRoot":"","sources":["../src/rsi-linux-repository-bootstrap.ts"],"names":[],"mappings":"AAMA,OAAO,EAC0E,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAC1H,KAAK,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC3E,OAAO,EACL,KAAK,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAEvE,MAAM,WAAW,kCAAkC;IACjD,aAAa,EAAE,CAAC,CAAA;IAChB,OAAO,EAAE,cAAc,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,YAAY,CAAA;IACrB,cAAc,EAAE,mBAAmB,CAAA;IACnC,aAAa,EAAE,yBAAyB,CAAA;CACzC;AA6LD,4FAA4F;AAC5F,wBAAsB,gCAAgC,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,kCAAkC,CAAC,CA0DjI;AAED;8EAC8E;AAC9E,wBAAsB,6BAA6B,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAU9H"}