@dsh-enhanced/lark-channel 0.1.47 → 0.1.49

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 (173) hide show
  1. package/README.md +19 -8
  2. package/docs/rsi-setup.md +123 -11
  3. package/docs/setup.md +27 -14
  4. package/docs/supervised-growth.md +2 -0
  5. package/lib/adapter.d.ts +6 -0
  6. package/lib/adapter.d.ts.map +1 -1
  7. package/lib/adapter.js +79 -8
  8. package/lib/adapter.js.map +1 -1
  9. package/lib/business-cli-install.d.ts +9 -0
  10. package/lib/business-cli-install.d.ts.map +1 -0
  11. package/lib/business-cli-install.js +367 -0
  12. package/lib/business-cli-install.js.map +1 -0
  13. package/lib/business-environment.d.ts +2 -0
  14. package/lib/business-environment.d.ts.map +1 -0
  15. package/lib/business-environment.js +16 -0
  16. package/lib/business-environment.js.map +1 -0
  17. package/lib/business-skill.d.ts +32 -0
  18. package/lib/business-skill.d.ts.map +1 -0
  19. package/lib/business-skill.js +202 -0
  20. package/lib/business-skill.js.map +1 -0
  21. package/lib/rsi-authority-config.d.ts +29 -0
  22. package/lib/rsi-authority-config.d.ts.map +1 -0
  23. package/lib/rsi-authority-config.js +233 -0
  24. package/lib/rsi-authority-config.js.map +1 -0
  25. package/lib/rsi-authority-resources.d.ts +36 -0
  26. package/lib/rsi-authority-resources.d.ts.map +1 -0
  27. package/lib/rsi-authority-resources.js +139 -0
  28. package/lib/rsi-authority-resources.js.map +1 -0
  29. package/lib/rsi-authority-runtime.d.ts +50 -0
  30. package/lib/rsi-authority-runtime.d.ts.map +1 -0
  31. package/lib/rsi-authority-runtime.js +393 -0
  32. package/lib/rsi-authority-runtime.js.map +1 -0
  33. package/lib/rsi-bootstrap-manifest.d.ts +39 -0
  34. package/lib/rsi-bootstrap-manifest.d.ts.map +1 -0
  35. package/lib/rsi-bootstrap-manifest.js +366 -0
  36. package/lib/rsi-bootstrap-manifest.js.map +1 -0
  37. package/lib/rsi-bootstrap.d.ts +30 -0
  38. package/lib/rsi-bootstrap.d.ts.map +1 -0
  39. package/lib/rsi-bootstrap.js +363 -0
  40. package/lib/rsi-bootstrap.js.map +1 -0
  41. package/lib/rsi-build.d.ts +45 -0
  42. package/lib/rsi-build.d.ts.map +1 -0
  43. package/lib/rsi-build.js +404 -0
  44. package/lib/rsi-build.js.map +1 -0
  45. package/lib/rsi-creation-build.d.ts +47 -0
  46. package/lib/rsi-creation-build.d.ts.map +1 -0
  47. package/lib/rsi-creation-build.js +333 -0
  48. package/lib/rsi-creation-build.js.map +1 -0
  49. package/lib/rsi-host-authorities.d.ts +18 -0
  50. package/lib/rsi-host-authorities.d.ts.map +1 -0
  51. package/lib/rsi-host-authorities.js +129 -0
  52. package/lib/rsi-host-authorities.js.map +1 -0
  53. package/lib/rsi-host-update.d.ts +113 -0
  54. package/lib/rsi-host-update.d.ts.map +1 -0
  55. package/lib/rsi-host-update.js +316 -0
  56. package/lib/rsi-host-update.js.map +1 -0
  57. package/lib/rsi-install-inputs.d.ts +43 -0
  58. package/lib/rsi-install-inputs.d.ts.map +1 -0
  59. package/lib/rsi-install-inputs.js +342 -0
  60. package/lib/rsi-install-inputs.js.map +1 -0
  61. package/lib/rsi-install.d.ts +54 -0
  62. package/lib/rsi-install.d.ts.map +1 -0
  63. package/lib/rsi-install.js +404 -0
  64. package/lib/rsi-install.js.map +1 -0
  65. package/lib/rsi-local-activation.d.ts +78 -0
  66. package/lib/rsi-local-activation.d.ts.map +1 -0
  67. package/lib/rsi-local-activation.js +485 -0
  68. package/lib/rsi-local-activation.js.map +1 -0
  69. package/lib/rsi-local-cohort.d.ts +70 -0
  70. package/lib/rsi-local-cohort.d.ts.map +1 -0
  71. package/lib/rsi-local-cohort.js +781 -0
  72. package/lib/rsi-local-cohort.js.map +1 -0
  73. package/lib/rsi-local-install.d.ts +40 -0
  74. package/lib/rsi-local-install.d.ts.map +1 -0
  75. package/lib/rsi-local-install.js +221 -0
  76. package/lib/rsi-local-install.js.map +1 -0
  77. package/lib/rsi-local-pair-install.d.ts +38 -0
  78. package/lib/rsi-local-pair-install.d.ts.map +1 -0
  79. package/lib/rsi-local-pair-install.js +200 -0
  80. package/lib/rsi-local-pair-install.js.map +1 -0
  81. package/lib/rsi-local-profile-update.d.ts +25 -0
  82. package/lib/rsi-local-profile-update.d.ts.map +1 -0
  83. package/lib/rsi-local-profile-update.js +226 -0
  84. package/lib/rsi-local-profile-update.js.map +1 -0
  85. package/lib/rsi-local-resources.d.ts +37 -0
  86. package/lib/rsi-local-resources.d.ts.map +1 -0
  87. package/lib/rsi-local-resources.js +184 -0
  88. package/lib/rsi-local-resources.js.map +1 -0
  89. package/lib/rsi-local-roots-extension.d.ts +11 -0
  90. package/lib/rsi-local-roots-extension.d.ts.map +1 -0
  91. package/lib/rsi-local-roots-extension.js +31 -0
  92. package/lib/rsi-local-roots-extension.js.map +1 -0
  93. package/lib/rsi-local-update-build.d.ts +18 -0
  94. package/lib/rsi-local-update-build.d.ts.map +1 -0
  95. package/lib/rsi-local-update-build.js +37 -0
  96. package/lib/rsi-local-update-build.js.map +1 -0
  97. package/lib/rsi-local-update.d.ts +39 -0
  98. package/lib/rsi-local-update.d.ts.map +1 -0
  99. package/lib/rsi-local-update.js +205 -0
  100. package/lib/rsi-local-update.js.map +1 -0
  101. package/lib/rsi-memory-learning.d.ts +22 -0
  102. package/lib/rsi-memory-learning.d.ts.map +1 -0
  103. package/lib/rsi-memory-learning.js +76 -0
  104. package/lib/rsi-memory-learning.js.map +1 -0
  105. package/lib/rsi-owner-profile.d.ts +37 -0
  106. package/lib/rsi-owner-profile.d.ts.map +1 -0
  107. package/lib/rsi-owner-profile.js +178 -0
  108. package/lib/rsi-owner-profile.js.map +1 -0
  109. package/lib/rsi-plugin-creation.d.ts +31 -0
  110. package/lib/rsi-plugin-creation.d.ts.map +1 -0
  111. package/lib/rsi-plugin-creation.js +179 -0
  112. package/lib/rsi-plugin-creation.js.map +1 -0
  113. package/lib/rsi-profile.d.ts +23 -0
  114. package/lib/rsi-profile.d.ts.map +1 -1
  115. package/lib/rsi-profile.js +154 -43
  116. package/lib/rsi-profile.js.map +1 -1
  117. package/lib/rsi-release-build.d.ts +41 -0
  118. package/lib/rsi-release-build.d.ts.map +1 -0
  119. package/lib/rsi-release-build.js +223 -0
  120. package/lib/rsi-release-build.js.map +1 -0
  121. package/lib/rsi-service-environment.d.ts +6 -0
  122. package/lib/rsi-service-environment.d.ts.map +1 -0
  123. package/lib/rsi-service-environment.js +113 -0
  124. package/lib/rsi-service-environment.js.map +1 -0
  125. package/lib/rsi-service-setup.d.ts +10 -0
  126. package/lib/rsi-service-setup.d.ts.map +1 -0
  127. package/lib/rsi-service-setup.js +34 -0
  128. package/lib/rsi-service-setup.js.map +1 -0
  129. package/lib/rsi-setup.d.ts +35 -2
  130. package/lib/rsi-setup.d.ts.map +1 -1
  131. package/lib/rsi-setup.js +459 -32
  132. package/lib/rsi-setup.js.map +1 -1
  133. package/lib/rsi-source-maintenance.d.ts +25 -0
  134. package/lib/rsi-source-maintenance.d.ts.map +1 -0
  135. package/lib/rsi-source-maintenance.js +348 -0
  136. package/lib/rsi-source-maintenance.js.map +1 -0
  137. package/lib/rsi-source-update.d.ts +26 -0
  138. package/lib/rsi-source-update.d.ts.map +1 -0
  139. package/lib/rsi-source-update.js +276 -0
  140. package/lib/rsi-source-update.js.map +1 -0
  141. package/lib/rsi-source.d.ts +34 -0
  142. package/lib/rsi-source.d.ts.map +1 -0
  143. package/lib/rsi-source.js +375 -0
  144. package/lib/rsi-source.js.map +1 -0
  145. package/lib/rsi-systemd-bootstrap.d.ts +46 -0
  146. package/lib/rsi-systemd-bootstrap.d.ts.map +1 -0
  147. package/lib/rsi-systemd-bootstrap.js +271 -0
  148. package/lib/rsi-systemd-bootstrap.js.map +1 -0
  149. package/lib/sdk.d.ts.map +1 -1
  150. package/lib/sdk.js +26 -1
  151. package/lib/sdk.js.map +1 -1
  152. package/lib/setup-business.d.ts +49 -0
  153. package/lib/setup-business.d.ts.map +1 -0
  154. package/lib/setup-business.js +335 -0
  155. package/lib/setup-business.js.map +1 -0
  156. package/lib/setup-profile.d.ts +1 -1
  157. package/lib/setup-profile.d.ts.map +1 -1
  158. package/lib/setup-profile.js +25 -2
  159. package/lib/setup-profile.js.map +1 -1
  160. package/lib/setup.d.ts +12 -1
  161. package/lib/setup.d.ts.map +1 -1
  162. package/lib/setup.js +138 -34
  163. package/lib/setup.js.map +1 -1
  164. package/lib/systemd.d.ts +10 -0
  165. package/lib/systemd.d.ts.map +1 -1
  166. package/lib/systemd.js +23 -6
  167. package/lib/systemd.js.map +1 -1
  168. package/lib/types.d.ts +7 -0
  169. package/lib/types.d.ts.map +1 -1
  170. package/lib/types.js.map +1 -1
  171. package/lib/version.d.ts +1 -1
  172. package/lib/version.js +1 -1
  173. package/package.json +32 -20
@@ -0,0 +1,223 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { createHash, randomUUID } from 'node:crypto';
10
+ import { chmod, copyFile, lstat, mkdir, mkdtemp, readdir, rename, rm } from 'node:fs/promises';
11
+ import { createRequire } from 'node:module';
12
+ import { dirname, isAbsolute, join, resolve } from 'node:path';
13
+ import { pathToFileURL } from 'node:url';
14
+ import { isDeepStrictEqual } from 'node:util';
15
+ import { rsiBuildResources as io } from './rsi-build.js';
16
+ export class RsiReleaseBuildUnavailableError extends Error {
17
+ constructor(message) { super(`rsi release build unavailable: ${message}`); }
18
+ }
19
+ function fail(message) { throw new Error(`rsi release build: ${message}`); }
20
+ function digest(bytes) { return createHash('sha256').update(bytes).digest('hex'); }
21
+ async function inspect(root) {
22
+ const require = createRequire(import.meta.url);
23
+ const packageRoot = dirname(require.resolve('@dsh-enhanced/plugin-control-plane/package.json'));
24
+ const adapter = await import(__rewriteRelativeImportExtension(pathToFileURL(join(packageRoot, 'bin', 'dsh-local-release-adapter.js')).href));
25
+ if (typeof adapter.inspectLocalReleaseBuildEnvironment !== 'function')
26
+ fail('installed Control Plane lacks release environment inspection');
27
+ return adapter.inspectLocalReleaseBuildEnvironment({ pnpmRoot: join(root, 'toolchain'),
28
+ storeRoot: join(root, 'store'), cacheRoot: join(root, 'cache') });
29
+ }
30
+ /** Verify existing exported inputs only; never creates a container or repairs a
31
+ * missing export. The caller separately verifies the source image evidence. */
32
+ export async function readRsiReleaseBuildEnvironment(input) {
33
+ if (!isAbsolute(input.dshHome) || resolve(input.dshHome) !== input.dshHome
34
+ || !/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u.test(input.profile))
35
+ fail('invalid resource binding');
36
+ input.signal?.throwIfAborted();
37
+ await io.directory(input.dshHome, false);
38
+ const parent = join(input.dshHome, 'rsi-release-builds'), final = join(parent, input.profile);
39
+ await io.directory(parent);
40
+ await io.directory(final);
41
+ if (!isDeepStrictEqual((await readdir(final)).sort(), ['bootstrap.json', 'cache', 'store', 'toolchain']))
42
+ fail('existing release environment is incomplete');
43
+ const receipt = JSON.parse((await io.readStable(join(final, 'bootstrap.json'), 65_536, true)).toString('utf8'));
44
+ const { receiptDigest, ...content } = receipt;
45
+ if (receipt.schemaVersion !== 1 || receipt.dshHome !== input.dshHome || receipt.profile !== input.profile
46
+ || receipt.sourceCommit !== input.build.sourceCommit || receipt.image !== input.build.sourceBuild.image
47
+ || digest(JSON.stringify(content)) !== receiptDigest
48
+ || !isDeepStrictEqual(receipt.releaseBuild, await inspect(final)))
49
+ fail('release environment differs from its receipt');
50
+ input.signal?.throwIfAborted();
51
+ return { schemaVersion: 1, sourceCommit: receipt.sourceCommit, image: receipt.image, releaseBuild: receipt.releaseBuild };
52
+ }
53
+ // Docker cp preserves image mode bits. Make exported resources private, reject
54
+ // links/devices, and separate any hard links before the adapter pins the trees.
55
+ async function harden(root, signal) {
56
+ let entries = 0, bytes = 0;
57
+ const visit = async (path) => {
58
+ signal.throwIfAborted();
59
+ if (++entries > 100_000)
60
+ fail('export contains too many entries');
61
+ const item = await lstat(path);
62
+ if (item.isSymbolicLink() || process.getuid && item.uid !== process.getuid())
63
+ fail('export contains an unsafe entry');
64
+ if (item.isDirectory()) {
65
+ await chmod(path, 0o700);
66
+ for (const name of await readdir(path))
67
+ await visit(join(path, name));
68
+ }
69
+ else if (item.isFile()) {
70
+ bytes += item.size;
71
+ if (item.size > 268_435_456 || bytes > 2_147_483_648)
72
+ fail('export exceeds its size bound');
73
+ if (item.nlink !== 1) {
74
+ const temporary = `${path}.copy-${randomUUID()}`;
75
+ try {
76
+ await copyFile(path, temporary);
77
+ await rename(temporary, path);
78
+ }
79
+ finally {
80
+ await rm(temporary, { force: true });
81
+ }
82
+ }
83
+ await chmod(path, item.mode & 0o111 ? 0o700 : 0o600);
84
+ }
85
+ else
86
+ fail('export contains a nonregular entry');
87
+ };
88
+ await visit(root);
89
+ }
90
+ /** Caller holds the home lifecycle lock. Exports only fixed assets from the
91
+ * already prepared immutable image; the container is never started. */
92
+ export async function prepareRsiReleaseBuildEnvironment(input) {
93
+ if (!isAbsolute(input.dshHome) || resolve(input.dshHome) !== input.dshHome
94
+ || !/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u.test(input.profile)
95
+ || input.build.schemaVersion !== 1 || !/^[a-f0-9]{40}$/u.test(input.build.sourceCommit)
96
+ || !/^sha256:[a-f0-9]{64}$/u.test(input.build.sourceBuild.image))
97
+ fail('invalid resource binding');
98
+ if (process.platform !== 'linux' || process.arch !== 'x64')
99
+ throw new RsiReleaseBuildUnavailableError('Linux x64 is required');
100
+ await io.directory(input.dshHome, false);
101
+ for (const path of ['/usr/bin/bwrap', '/usr/bin/tar']) {
102
+ try {
103
+ await lstat(path);
104
+ }
105
+ catch (error) {
106
+ if (error.code === 'ENOENT')
107
+ throw new RsiReleaseBuildUnavailableError(`${path} is required`);
108
+ throw error;
109
+ }
110
+ }
111
+ const parent = join(input.dshHome, 'rsi-release-builds');
112
+ try {
113
+ await mkdir(parent, { mode: 0o700 });
114
+ }
115
+ catch (error) {
116
+ if (error.code !== 'EEXIST')
117
+ throw error;
118
+ }
119
+ await io.directory(parent);
120
+ const final = join(parent, input.profile), image = input.build.sourceBuild.image;
121
+ const signal = AbortSignal.any([input.signal ?? new AbortController().signal, AbortSignal.timeout(600_000)]);
122
+ try {
123
+ await lstat(final);
124
+ return await readRsiReleaseBuildEnvironment({ ...input, signal });
125
+ }
126
+ catch (error) {
127
+ // Only absence of the root permits creation. A missing child is drift.
128
+ if (error.code !== 'ENOENT')
129
+ throw error;
130
+ try {
131
+ await lstat(final);
132
+ fail('existing release environment is incomplete');
133
+ }
134
+ catch (missing) {
135
+ if (missing.code !== 'ENOENT')
136
+ throw missing;
137
+ }
138
+ }
139
+ const stage = await mkdtemp(join(parent, `.${input.profile}-stage-`));
140
+ await chmod(stage, 0o700);
141
+ const assets = join(stage, 'assets'), token = randomUUID(), container = `dsh-release-assets-${token}`;
142
+ const docker = input.build.sourceBuild.dockerPath;
143
+ let containerMayExist = false, claimed;
144
+ const run = (args, cleanup = false) => io.command(docker, args, io.isolatedEnvironment(stage), cleanup ? new AbortController().signal : signal, cleanup ? 30_000 : 180_000);
145
+ const cleanupContainer = async () => {
146
+ if (!containerMayExist)
147
+ return;
148
+ // Generated name and unguessable label bind cleanup even if create's reply
149
+ // was lost. Do not delete a replacement container with another label.
150
+ const ids = await run(['ps', '-a', '--filter', `name=^/${container}$`, '--format', '{{.ID}}'], true);
151
+ if (!ids) {
152
+ containerMayExist = false;
153
+ return;
154
+ }
155
+ const label = await run(['inspect', '--format', '{{index .Config.Labels "org.dsh.release-assets"}}', container], true);
156
+ if (label !== token)
157
+ fail('export container ownership changed');
158
+ await run(['rm', '-f', container], true);
159
+ containerMayExist = false;
160
+ };
161
+ try {
162
+ await mkdir(join(stage, 'docker-config'), { mode: 0o700 });
163
+ await mkdir(assets, { mode: 0o700 });
164
+ for (const name of ['toolchain', 'store', 'cache'])
165
+ await mkdir(join(assets, name), { mode: 0o700 });
166
+ await mkdir(join(assets, 'store', 'v11', 'files'), { recursive: true, mode: 0o700 });
167
+ containerMayExist = true;
168
+ await run(['create', '--name', container, '--label', `org.dsh.release-assets=${token}`,
169
+ '--network', 'none', '--read-only', '--entrypoint', '/bin/false', image]);
170
+ for (const [source, target] of [
171
+ ['/opt/pnpm-native/node_modules/@pnpm/exe/.', join(assets, 'toolchain')],
172
+ ['/usr/local/bin/node', join(assets, 'toolchain', 'node')],
173
+ // The image's projects registry points at its deleted /seed checkout.
174
+ // Each release uses a fresh writable registry, never those stale links.
175
+ ['/opt/pnpm-store/v11/files/.', join(assets, 'store', 'v11', 'files')],
176
+ ['/opt/pnpm-store/v11/index.db', join(assets, 'store', 'v11', 'index.db')],
177
+ ['/opt/pnpm-cache/.', join(assets, 'cache')],
178
+ ])
179
+ await run(['cp', `${container}:${source}`, target]);
180
+ await cleanupContainer();
181
+ await mkdir(join(assets, 'store', 'v11', 'projects'), { recursive: true, mode: 0o700 });
182
+ await harden(assets, signal);
183
+ const toolchain = join(assets, 'toolchain');
184
+ const environment = { PATH: `${toolchain}:/usr/bin:/bin`, HOME: stage, LANG: 'C', LC_ALL: 'C' };
185
+ const nodeVersion = await io.command(join(toolchain, 'node'), ['--version'], environment, signal, 10_000);
186
+ const pnpmVersion = await io.command(join(toolchain, 'pnpm'), ['--version'], environment, signal, 10_000);
187
+ if (nodeVersion !== 'v22.23.2' || pnpmVersion !== '11.7.0')
188
+ fail('image toolchain version differs from the approved runtime');
189
+ await inspect(assets);
190
+ signal.throwIfAborted();
191
+ await mkdir(final, { mode: 0o700 });
192
+ const identity = await lstat(final);
193
+ claimed = { dev: identity.dev, ino: identity.ino };
194
+ for (const name of ['toolchain', 'store', 'cache'])
195
+ await rename(join(assets, name), join(final, name));
196
+ const result = { schemaVersion: 1, sourceCommit: input.build.sourceCommit,
197
+ image, releaseBuild: await inspect(final) };
198
+ const content = { ...result, dshHome: input.dshHome, profile: input.profile };
199
+ await io.writeExclusive(join(final, 'bootstrap.json'), JSON.stringify({ ...content, receiptDigest: digest(JSON.stringify(content)) }));
200
+ await io.syncDirectory(final);
201
+ await io.syncDirectory(parent);
202
+ return result;
203
+ }
204
+ catch (error) {
205
+ if (claimed) {
206
+ const current = await lstat(final).catch(() => undefined);
207
+ if (current?.isDirectory() && current.dev === claimed.dev && current.ino === claimed.ino)
208
+ await rm(final, { recursive: true, force: true });
209
+ }
210
+ throw error;
211
+ }
212
+ finally {
213
+ // A cleanup failure is surfaced and leaves the labelled container visible.
214
+ try {
215
+ await cleanupContainer();
216
+ }
217
+ finally {
218
+ await rm(stage, { recursive: true, force: true });
219
+ await io.syncDirectory(parent);
220
+ }
221
+ }
222
+ }
223
+ //# sourceMappingURL=rsi-release-build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-release-build.js","sourceRoot":"","sources":["../src/rsi-release-build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type RsiServiceEnvironment = Readonly<Record<string, string>>;
2
+ export declare function isRsiServiceEnvironmentName(name: string): boolean;
3
+ export declare function rsiServiceEnvironmentPath(home: string, profile: string): string;
4
+ export declare function validateRsiServiceEnvironment(value: unknown, home: string, profile: string): Promise<RsiServiceEnvironment>;
5
+ export declare function readRsiServiceEnvironment(home: string, profile: string): Promise<RsiServiceEnvironment | undefined>;
6
+ //# sourceMappingURL=rsi-service-environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-service-environment.d.ts","sourceRoot":"","sources":["../src/rsi-service-environment.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AAuBpE,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAkC;AAEpG,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAG/E;AAuBD,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAC5C,OAAO,CAAC,qBAAqB,CAAC,CAoBhC;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAmBzH"}
@@ -0,0 +1,113 @@
1
+ import { constants } from 'node:fs';
2
+ import { lstat, open, realpath } from 'node:fs/promises';
3
+ import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
4
+ const profilePattern = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u;
5
+ const releaseStages = ['PR', 'REVIEW', 'MERGE', 'BUILD', 'SIGN', 'PUBLISH', 'REGISTRY_VERIFY', 'CATALOG_ADMISSION'];
6
+ const allowedNames = new Set([
7
+ 'DSH_SYSTEMD_HOST_ATTESTOR_CONFIG',
8
+ ...releaseStages.map(stage => `DSH_RELEASE_${stage}_CONFIG`),
9
+ ]);
10
+ const maximumBindingBytes = 65_536;
11
+ const maximumConfigBytes = 2_097_152;
12
+ function fail(message) { throw new Error(`rsi service environment: ${message}`); }
13
+ function canonicalPath(value, label) {
14
+ if (typeof value !== 'string' || !isAbsolute(value) || resolve(value) !== value || value.includes('\0')
15
+ || /[\r\n]/u.test(value))
16
+ fail(`${label} must be canonical absolute`);
17
+ }
18
+ function scope(home, profile) {
19
+ canonicalPath(home, 'DSH_HOME');
20
+ if (!profilePattern.test(profile))
21
+ fail('invalid profile');
22
+ }
23
+ export function isRsiServiceEnvironmentName(name) { return allowedNames.has(name); }
24
+ export function rsiServiceEnvironmentPath(home, profile) {
25
+ scope(home, profile);
26
+ return join(home, 'rsi-service-environments', `${profile}.json`);
27
+ }
28
+ async function ownedDirectory(path, privateDirectory) {
29
+ const entry = await lstat(path);
30
+ if (!entry.isDirectory() || entry.uid !== process.getuid?.() || (entry.mode & (privateDirectory ? 0o077 : 0o022)) !== 0
31
+ || await realpath(path) !== path)
32
+ fail(`unsafe directory: ${path}`);
33
+ }
34
+ async function ownedFile(path, maximum) {
35
+ let descriptor;
36
+ try {
37
+ descriptor = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW);
38
+ }
39
+ catch (error) {
40
+ if (error.code === 'ENOENT')
41
+ return undefined;
42
+ throw error;
43
+ }
44
+ try {
45
+ const entry = await descriptor.stat(), linked = await lstat(path);
46
+ if (!entry.isFile() || entry.nlink !== 1 || entry.uid !== process.getuid?.() || (entry.mode & 0o077) !== 0
47
+ || entry.size < 1 || entry.size > maximum || linked.dev !== entry.dev || linked.ino !== entry.ino
48
+ || await realpath(path) !== path)
49
+ fail(`unsafe file: ${path}`);
50
+ return await descriptor.readFile('utf8');
51
+ }
52
+ finally {
53
+ await descriptor.close();
54
+ }
55
+ }
56
+ export async function validateRsiServiceEnvironment(value, home, profile) {
57
+ scope(home, profile);
58
+ if (!value || typeof value !== 'object' || Array.isArray(value))
59
+ fail('environment must be an object');
60
+ const environment = value;
61
+ const result = {};
62
+ for (const name of Object.keys(environment).sort()) {
63
+ if (!isRsiServiceEnvironmentName(name))
64
+ fail(`unsupported environment name: ${name}`);
65
+ const path = environment[name];
66
+ canonicalPath(path, name);
67
+ const configPath = path;
68
+ const withinProfiles = relative(join(home, 'profiles'), configPath);
69
+ if (withinProfiles === '' || withinProfiles !== '..' && !withinProfiles.startsWith(`..${sep}`) && !isAbsolute(withinProfiles)) {
70
+ // The profile tree is candidate writable and cannot hold authority configuration.
71
+ fail(`configuration is inside profiles: ${name}`);
72
+ }
73
+ const content = await ownedFile(configPath, maximumConfigBytes);
74
+ if (content === undefined)
75
+ fail(`configuration is missing: ${name}`);
76
+ result[name] = configPath;
77
+ }
78
+ return result;
79
+ }
80
+ export async function readRsiServiceEnvironment(home, profile) {
81
+ const path = rsiServiceEnvironmentPath(home, profile);
82
+ let parent;
83
+ try {
84
+ parent = await lstat(dirname(path));
85
+ }
86
+ catch (error) {
87
+ if (error.code === 'ENOENT')
88
+ return undefined;
89
+ throw error;
90
+ }
91
+ if (!parent.isDirectory())
92
+ fail('unsafe environment directory');
93
+ await ownedDirectory(home, false);
94
+ await ownedDirectory(dirname(path), true);
95
+ const content = await ownedFile(path, maximumBindingBytes);
96
+ if (content === undefined)
97
+ return undefined;
98
+ let parsed;
99
+ try {
100
+ parsed = JSON.parse(content);
101
+ }
102
+ catch {
103
+ fail('invalid environment JSON');
104
+ }
105
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
106
+ fail('invalid environment binding');
107
+ const binding = parsed;
108
+ if (Object.keys(binding).sort().join(',') !== 'dshHome,environment,profile,schemaVersion'
109
+ || binding.schemaVersion !== 1 || binding.dshHome !== home || binding.profile !== profile)
110
+ fail('environment binding does not match profile');
111
+ return validateRsiServiceEnvironment(binding.environment, home, profile);
112
+ }
113
+ //# sourceMappingURL=rsi-service-environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-service-environment.js","sourceRoot":"","sources":["../src/rsi-service-environment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { RsiSetupManifest } from './rsi-profile.js';
2
+ import { type RsiServiceEnvironment } from './rsi-service-environment.js';
3
+ export interface RsiServiceEnvironments {
4
+ target: RsiServiceEnvironment;
5
+ coordinator: RsiServiceEnvironment;
6
+ }
7
+ /** Capture selected config paths once; a later shell cannot silently change a
8
+ * registered service. Explicit manifest values can replace a prior binding. */
9
+ export declare function resolveRsiServiceEnvironments(manifest: RsiSetupManifest, home: string, ambient?: NodeJS.ProcessEnv): Promise<RsiServiceEnvironments | undefined>;
10
+ //# sourceMappingURL=rsi-service-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-service-setup.d.ts","sourceRoot":"","sources":["../src/rsi-service-setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAA4D,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AAEnI,MAAM,WAAW,sBAAsB;IAAG,MAAM,EAAE,qBAAqB,CAAC;IAAC,WAAW,EAAE,qBAAqB,CAAA;CAAE;AAI7G;+EAC+E;AAC/E,wBAAsB,6BAA6B,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAC1F,OAAO,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAuBvF"}
@@ -0,0 +1,34 @@
1
+ import { readRsiServiceEnvironment, validateRsiServiceEnvironment } from './rsi-service-environment.js';
2
+ const hostVariable = 'DSH_SYSTEMD_HOST_ATTESTOR_CONFIG';
3
+ const phases = ['pr', 'review', 'merge', 'build', 'sign', 'publish', 'registry-verify', 'catalog-admission'];
4
+ /** Capture selected config paths once; a later shell cannot silently change a
5
+ * registered service. Explicit manifest values can replace a prior binding. */
6
+ export async function resolveRsiServiceEnvironments(manifest, home, ambient = process.env) {
7
+ const { loadTrustConfig } = await import('@dsh-enhanced/plugin-control-plane');
8
+ const trust = await loadTrustConfig(manifest.controlPlane.trustPath);
9
+ const targetNames = phases.flatMap(phase => {
10
+ const name = `DSH_RELEASE_${phase.toUpperCase().replaceAll('-', '_')}_CONFIG`;
11
+ return trust.releaseAdapters?.[phase]?.environmentAllowlist.includes(name) ? [name] : [];
12
+ });
13
+ const coordinatorNames = trust.hostAttestor?.environmentAllowlist.includes(hostVariable) ? [hostVariable] : [];
14
+ targetNames.push(...coordinatorNames);
15
+ const existing = await Promise.all([manifest.targetProfile, manifest.coordinatorProfile].map(profile => readRsiServiceEnvironment(home, profile)));
16
+ const explicit = manifest.serviceEnvironment;
17
+ if (explicit !== undefined && (!explicit || typeof explicit !== 'object' || Array.isArray(explicit)
18
+ || Object.keys(explicit).sort().join(',') !== 'coordinator,target'))
19
+ throw new Error('rsi setup: serviceEnvironment must contain target and coordinator');
20
+ if (!explicit && !existing.some(value => value !== undefined) && targetNames.length === 0)
21
+ return undefined;
22
+ const select = async (names, saved, declared, profile) => {
23
+ const selected = declared === undefined ? Object.fromEntries(names.map(name => [name, saved?.[name] ?? ambient[name]])) : declared;
24
+ if (Object.keys(selected).sort().join('\0') !== [...names].sort().join('\0'))
25
+ throw new Error('rsi setup: service environment differs from selected trust adapters');
26
+ return validateRsiServiceEnvironment(selected, home, profile);
27
+ };
28
+ const target = await select(targetNames, existing[0], explicit?.target, manifest.targetProfile);
29
+ const coordinator = await select(coordinatorNames, existing[1], explicit?.coordinator, manifest.coordinatorProfile);
30
+ if (target[hostVariable] !== coordinator[hostVariable])
31
+ throw new Error('rsi setup: both Hosts must use the same selected Host authority config');
32
+ return { target, coordinator };
33
+ }
34
+ //# sourceMappingURL=rsi-service-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-service-setup.js","sourceRoot":"","sources":["../src/rsi-service-setup.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  import type { ActiveLarkOwnerBindingsSnapshot } from '@dsh-enhanced/assistant-delivery';
2
2
  import { compileRsiProfiles, type RsiSetupManifest } from './rsi-profile.js';
3
+ import { type RsiAutomationInventories, type RsiAutomationInventory } from './rsi-owner-profile.js';
4
+ import { type RsiServiceEnvironment } from './rsi-service-environment.js';
5
+ import { resolveRsiServiceEnvironments } from './rsi-service-setup.js';
3
6
  export declare function assertRsiEffectivePatch(patch: string, effective: string): void;
4
7
  export interface RsiSetupArgs {
5
8
  manifestPath: string;
@@ -9,22 +12,52 @@ export interface RsiSetupArgs {
9
12
  start: boolean;
10
13
  confirmStopped: boolean;
11
14
  help: boolean;
15
+ prepareSource?: boolean;
16
+ profile?: string;
17
+ sourceRepository?: string;
18
+ prepareBuild?: boolean;
19
+ optionalBuild?: boolean;
20
+ dockerPath?: string;
21
+ prepareAuthorities?: boolean;
22
+ installOwner?: boolean;
23
+ ackExistingAutomations?: boolean;
24
+ /** Installer's pre-stop source and destination inventories; never parsed from CLI. */
25
+ expectedAutomationInventories?: RsiAutomationInventories;
26
+ installLocalCohort?: boolean;
27
+ bundles?: string[];
28
+ prepareLocalUpdate?: boolean;
29
+ addMemoryLearning?: boolean;
12
30
  }
13
31
  export declare function parseRsiSetupArgs(argv: readonly string[]): RsiSetupArgs;
14
32
  export interface RsiSetupPorts {
15
33
  dump(profile: string, home: string): string;
16
34
  base(profile: string, home: string): Promise<string>;
17
35
  snapshot(effective: string, home: string): Promise<ActiveLarkOwnerBindingsSnapshot>;
36
+ automationInventory(effective: string, home: string): Promise<RsiAutomationInventory>;
18
37
  compile: typeof compileRsiProfiles;
19
- validateAuthorities(manifest: RsiSetupManifest, owner: ActiveLarkOwnerBindingsSnapshot['bindings'][number]): Promise<void>;
38
+ validateAuthorities(manifest: RsiSetupManifest, owner: ActiveLarkOwnerBindingsSnapshot['bindings'][number], environment?: RsiServiceEnvironment): Promise<void>;
39
+ resolveEnvironments: typeof resolveRsiServiceEnvironments;
40
+ serviceUnitPath(profile: string, home: string): string;
41
+ renderServiceUnit(profile: string, home: string, environment: RsiServiceEnvironment): Promise<string>;
42
+ reloadServices(): void;
43
+ validateServiceUnits(manifest: RsiSetupManifest, environment: RsiServiceEnvironment): Promise<void>;
20
44
  assertStopped(profile: string): void;
21
45
  start(profile: string, home: string): Promise<void>;
22
46
  }
47
+ export declare function readRsiInstalledBase(profile: string, home: string, environment?: NodeJS.ProcessEnv): Promise<string>;
48
+ export declare const rsiSetupPorts: RsiSetupPorts;
49
+ /** Read back the loaded unit after daemon-reload, before starting either Host. */
50
+ export declare function validateRsiServiceUnitEnvironment(manifest: Pick<RsiSetupManifest, 'targetProfile'>, environment: RsiServiceEnvironment): Promise<void>;
23
51
  /** Validate imported finite grants, without calling any signing/authorization method. */
24
- export declare function validateRsiAuthorities(manifest: RsiSetupManifest, binding: ActiveLarkOwnerBindingsSnapshot['bindings'][number]): Promise<void>;
52
+ export declare function validateRsiAuthorities(manifest: RsiSetupManifest, binding: ActiveLarkOwnerBindingsSnapshot['bindings'][number], environment?: RsiServiceEnvironment): Promise<void>;
25
53
  export declare function configureRsiSetup(args: RsiSetupArgs, ports?: RsiSetupPorts): Promise<{
26
54
  mode: string;
27
55
  profiles: readonly string[];
28
56
  }>;
57
+ /** Internal installer entry: caller already owns the DSH_HOME lifecycle lock. */
58
+ export declare function configureRsiSetupLocked(args: RsiSetupArgs, ports?: RsiSetupPorts): Promise<{
59
+ mode: string;
60
+ profiles: readonly string[];
61
+ }>;
29
62
  export declare function runRsiSetup(argv?: readonly string[]): Promise<void>;
30
63
  //# sourceMappingURL=rsi-setup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rsi-setup.d.ts","sourceRoot":"","sources":["../src/rsi-setup.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAA;AACvF,OAAO,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAmB5E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAU9E;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CACjI;AACD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,YAAY,CAyBvE;AAwDD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACpD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAA;IACnF,OAAO,EAAE,OAAO,kBAAkB,CAAA;IAClC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,+BAA+B,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1H,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpD;AA6BD,yFAAyF;AACzF,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,+BAA+B,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDpJ;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,GAAE,aAA4B,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC,CAkEvJ;AAED,wBAAsB,WAAW,CAAC,IAAI,GAAE,SAAS,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhG"}
1
+ {"version":3,"file":"rsi-setup.d.ts","sourceRoot":"","sources":["../src/rsi-setup.ts"],"names":[],"mappings":"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"}