@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,375 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { spawn } from 'node:child_process';
3
+ import { constants } from 'node:fs';
4
+ import { chmod, lstat, mkdir, mkdtemp, open, readdir, realpath, rename, rm, stat } from 'node:fs/promises';
5
+ import { isAbsolute, join, resolve } from 'node:path';
6
+ const OFFICIAL = 'https://github.com/22-ai-00/dsh-enhanced.git';
7
+ const PROFILE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u;
8
+ const VERSION = /^[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z]+(?:[.-][0-9A-Za-z]+)*)?$/u;
9
+ const COMMIT = /^[a-f0-9]{40}$/u;
10
+ const ZERO = '0'.repeat(40);
11
+ const MAX_OUTPUT = 65_536;
12
+ const GIT_FLAGS = ['-c', 'core.hooksPath=/dev/null', '-c', 'core.fsmonitor=false', '-c', 'protocol.allow=never',
13
+ '-c', 'protocol.https.allow=always', '-c', 'protocol.file.allow=always',
14
+ '-c', 'credential.helper=', '-c', 'gc.auto=0'];
15
+ function fail(message) { throw new Error(`rsi source: ${message}`); }
16
+ function digest(value) { return createHash('sha256').update(JSON.stringify(value)).digest('hex'); }
17
+ function canonicalPath(value, label) {
18
+ if (!isAbsolute(value) || resolve(value) !== value || value.includes('\0'))
19
+ fail(`${label} must be canonical absolute`);
20
+ }
21
+ async function privateDirectory(path) {
22
+ const metadata = await lstat(path);
23
+ if (!metadata.isDirectory() || metadata.isSymbolicLink() || metadata.mode & 0o077
24
+ || process.getuid && metadata.uid !== process.getuid() || await realpath(path) !== path)
25
+ fail(`unsafe private directory: ${path}`);
26
+ }
27
+ async function safeHome(path) {
28
+ const metadata = await lstat(path);
29
+ if (!metadata.isDirectory() || metadata.isSymbolicLink() || metadata.mode & 0o022
30
+ || process.getuid && metadata.uid !== process.getuid() || await realpath(path) !== path)
31
+ fail(`unsafe DSH_HOME: ${path}`);
32
+ }
33
+ async function syncDirectory(path) {
34
+ const fd = await open(path, constants.O_RDONLY | constants.O_DIRECTORY | constants.O_NOFOLLOW);
35
+ try {
36
+ await fd.sync();
37
+ }
38
+ finally {
39
+ await fd.close();
40
+ }
41
+ }
42
+ async function writeExclusive(path, bytes) {
43
+ const fd = await open(path, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
44
+ try {
45
+ await fd.writeFile(bytes);
46
+ await fd.sync();
47
+ }
48
+ finally {
49
+ await fd.close();
50
+ }
51
+ }
52
+ async function readStable(path, maximum, ownerPrivate) {
53
+ const fd = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW);
54
+ try {
55
+ const before = await fd.stat();
56
+ if (!before.isFile() || before.size > maximum || ownerPrivate && (before.mode & 0o077)
57
+ || process.getuid && before.uid !== process.getuid())
58
+ fail(`unsafe source file: ${path}`);
59
+ const bytes = await fd.readFile();
60
+ const after = await fd.stat(), name = await lstat(path);
61
+ if (bytes.length !== before.size || after.dev !== before.dev || after.ino !== before.ino
62
+ || after.size !== before.size || after.mtimeMs !== before.mtimeMs
63
+ || name.dev !== before.dev || name.ino !== before.ino || name.isSymbolicLink())
64
+ fail(`source file changed during read: ${path}`);
65
+ return bytes;
66
+ }
67
+ finally {
68
+ await fd.close();
69
+ }
70
+ }
71
+ async function fileDigest(path) {
72
+ return createHash('sha256').update(await readStable(path, 65_536, true)).digest('hex');
73
+ }
74
+ async function staticFiles(repository, remote) {
75
+ return { checkoutConfig: await fileDigest(join(repository, '.git', 'config')),
76
+ checkoutHead: await fileDigest(join(repository, '.git', 'HEAD')),
77
+ bareConfig: await fileDigest(join(remote, 'config')),
78
+ bareHead: await fileDigest(join(remote, 'HEAD')) };
79
+ }
80
+ function gitEnvironment() {
81
+ const environment = { PATH: '/usr/bin:/bin', LANG: 'C', LC_ALL: 'C', HOME: '/nonexistent',
82
+ GIT_CONFIG_NOSYSTEM: '1', GIT_CONFIG_GLOBAL: '/dev/null', GIT_CONFIG_SYSTEM: '/dev/null',
83
+ GIT_CONFIG_COUNT: '0', GIT_ALLOW_PROTOCOL: 'https:file', GIT_NO_REPLACE_OBJECTS: '1',
84
+ GIT_TERMINAL_PROMPT: '0', GIT_ASKPASS: '/bin/false', GCM_INTERACTIVE: 'never',
85
+ GIT_LFS_SKIP_SMUDGE: '1', GIT_NO_LAZY_FETCH: '1' };
86
+ // A fixed HTTPS upstream still needs the caller's ordinary corporate proxy
87
+ // and CA routing. Do not pass arbitrary Git configuration or credential hooks.
88
+ for (const key of ['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy', 'ALL_PROXY', 'all_proxy',
89
+ 'NO_PROXY', 'no_proxy', 'GIT_SSL_CAINFO', 'GIT_SSL_CAPATH', 'SSL_CERT_FILE', 'SSL_CERT_DIR', 'CURL_CA_BUNDLE']) {
90
+ const value = process.env[key];
91
+ if (value !== undefined)
92
+ environment[key] = value;
93
+ }
94
+ return environment;
95
+ }
96
+ /** Every Git invocation is bounded and receives only fixed argv and a minimal environment. */
97
+ async function git(cwd, args, signal) {
98
+ signal.throwIfAborted();
99
+ const bounded = AbortSignal.any([signal, AbortSignal.timeout(60_000)]);
100
+ return new Promise((resolvePromise, reject) => {
101
+ let child;
102
+ try {
103
+ child = spawn('/usr/bin/git', [...GIT_FLAGS, ...args], { cwd, env: gitEnvironment(),
104
+ stdio: ['ignore', 'pipe', 'pipe'], detached: process.platform !== 'win32', windowsHide: true });
105
+ }
106
+ catch {
107
+ reject(new Error('rsi source: Git invocation failed'));
108
+ return;
109
+ }
110
+ const chunks = [];
111
+ let size = 0, overLimit = false, spawnError = false;
112
+ const terminate = () => {
113
+ if (!child.pid)
114
+ return;
115
+ try {
116
+ if (process.platform === 'win32')
117
+ child.kill('SIGKILL');
118
+ else
119
+ process.kill(-child.pid, 'SIGKILL');
120
+ }
121
+ catch (error) {
122
+ if (error.code !== 'ESRCH')
123
+ child.kill('SIGKILL');
124
+ }
125
+ };
126
+ const abort = () => terminate();
127
+ bounded.addEventListener('abort', abort, { once: true });
128
+ if (bounded.aborted)
129
+ terminate();
130
+ const collect = (data) => {
131
+ size += data.length;
132
+ if (size > MAX_OUTPUT) {
133
+ overLimit = true;
134
+ terminate();
135
+ return;
136
+ }
137
+ chunks.push(data);
138
+ };
139
+ child.stdout.on('data', collect);
140
+ child.stderr.on('data', collect);
141
+ child.once('error', () => { spawnError = true; terminate(); });
142
+ child.once('close', (code, killed) => {
143
+ bounded.removeEventListener('abort', abort);
144
+ if (spawnError || overLimit || code !== 0 || killed !== null || bounded.aborted)
145
+ reject(new Error('rsi source: Git command failed, timed out, or exceeded output limit'));
146
+ else
147
+ resolvePromise(Buffer.concat(chunks).toString('utf8').trim());
148
+ });
149
+ });
150
+ }
151
+ async function ref(repository, name, signal) {
152
+ const output = await git(repository, ['for-each-ref', '--format=%(refname)%00%(objectname)%00%(symref)', name], signal);
153
+ if (output === '')
154
+ return undefined;
155
+ const fields = output.split('\0');
156
+ if (fields.length !== 3 || fields[0] !== name || !COMMIT.test(fields[1]) || fields[2] !== '')
157
+ fail(`malformed or symbolic Git ref ${name}`);
158
+ return fields[1];
159
+ }
160
+ async function validateSource(repository, version, commit, signal) {
161
+ if (!COMMIT.test(commit) || await git(repository, ['cat-file', '-t', commit], signal) !== 'commit')
162
+ fail('source is not a SHA-1 commit');
163
+ const file = join(repository, 'package.json');
164
+ const value = JSON.parse((await readStable(file, 1_048_576, false)).toString('utf8'));
165
+ if (value.name !== 'dsh-enhanced' || value.version !== version)
166
+ fail('source package name/version differs from installed cohort');
167
+ }
168
+ async function inspectWorkspace(value, signal) {
169
+ const repository = value.repository, remote = value.baseline.remote, commit = value.sourceCommit;
170
+ await privateDirectory(repository);
171
+ await privateDirectory(remote);
172
+ const gitDir = await lstat(join(repository, '.git'));
173
+ if (!gitDir.isDirectory() || gitDir.isSymbolicLink() || gitDir.mode & 0o022
174
+ || await realpath(join(repository, '.git')) !== join(repository, '.git'))
175
+ fail('checkout Git directory changed identity');
176
+ if (await git(repository, ['rev-parse', '--show-toplevel'], signal) !== repository
177
+ || await git(repository, ['rev-parse', '--is-bare-repository'], signal) !== 'false'
178
+ || await git(repository, ['rev-parse', '--show-object-format=storage'], signal) !== 'sha1'
179
+ || await git(repository, ['rev-parse', 'HEAD'], signal) !== commit
180
+ || await git(repository, ['symbolic-ref', 'HEAD'], signal) !== 'refs/heads/repairs'
181
+ || await ref(repository, 'refs/heads/repairs', signal) !== commit
182
+ || await git(repository, ['status', '--porcelain=v1', '--untracked-files=all'], signal) !== '')
183
+ fail('checkout provenance or cleanliness changed');
184
+ await validateSource(repository, value.version, commit, signal);
185
+ if (await git(remote, ['rev-parse', '--is-bare-repository'], signal) !== 'true'
186
+ || await git(remote, ['rev-parse', '--show-object-format=storage'], signal) !== 'sha1'
187
+ || await git(remote, ['symbolic-ref', 'HEAD'], signal) !== 'refs/heads/repairs')
188
+ fail('release repository changed identity');
189
+ for (const path of [join(repository, '.git', 'objects', 'info', 'alternates'), join(remote, 'objects', 'info', 'alternates')]) {
190
+ try {
191
+ await lstat(path);
192
+ fail('external Git object alternates are forbidden');
193
+ }
194
+ catch (error) {
195
+ if (error.code !== 'ENOENT')
196
+ throw error;
197
+ }
198
+ }
199
+ for (const [location, name] of [[repository, value.baseline.ref], [remote, 'refs/heads/repairs']]) {
200
+ const current = await ref(location, name, signal);
201
+ if (!current || await git(location, ['cat-file', '-t', current], signal) !== 'commit')
202
+ fail('managed release ref is missing');
203
+ await git(location, ['merge-base', '--is-ancestor', commit, current], signal);
204
+ }
205
+ }
206
+ async function existing(path, expected, signal) {
207
+ await privateDirectory(path);
208
+ const names = (await readdir(path)).sort();
209
+ if (JSON.stringify(names) !== JSON.stringify(['bootstrap.json', 'checkout', 'release.git']))
210
+ fail('workspace has unexpected or incomplete contents');
211
+ const receiptPath = join(path, 'bootstrap.json');
212
+ const value = JSON.parse((await readStable(receiptPath, 16_384, true)).toString('utf8'));
213
+ const { receiptDigest, ...content } = value;
214
+ if (Object.keys(value).sort().join('\0') !== ['schemaVersion', 'version', 'origin', 'sourceCommit', 'repository', 'baseline', 'dshHome', 'profile', 'staticFiles', 'receiptDigest'].sort().join('\0')
215
+ || value.schemaVersion !== 1 || !COMMIT.test(value.sourceCommit) || digest(content) !== receiptDigest
216
+ || value.dshHome !== expected.dshHome || value.profile !== expected.profile || value.version !== expected.version
217
+ || JSON.stringify(value.origin) !== JSON.stringify(expected.origin)
218
+ || value.repository !== expected.repository || value.baseline?.ref !== expected.baseline.ref
219
+ || value.baseline?.remote !== expected.baseline.remote || value.baseline?.targetBranch !== expected.baseline.targetBranch
220
+ || value.baseline?.initialCommit !== value.sourceCommit)
221
+ fail('workspace receipt provenance differs from requested source');
222
+ if (JSON.stringify(await staticFiles(value.repository, value.baseline.remote)) !== JSON.stringify(value.staticFiles))
223
+ fail('workspace static Git files changed');
224
+ await inspectWorkspace(value, signal);
225
+ const { dshHome: _home, profile: _profile, staticFiles: _files, receiptDigest: _digest, ...result } = value;
226
+ return result;
227
+ }
228
+ /** Read the registered source without creating or repairing any workspace. */
229
+ export async function readRsiSourceWorkspace(input) {
230
+ canonicalPath(input.dshHome, 'DSH_HOME');
231
+ if (!PROFILE.test(input.profile) || input.version !== undefined && !VERSION.test(input.version))
232
+ fail('invalid profile or exact version');
233
+ await safeHome(input.dshHome);
234
+ const final = join(input.dshHome, 'rsi-sources', input.profile);
235
+ await privateDirectory(join(input.dshHome, 'rsi-sources'));
236
+ await privateDirectory(final);
237
+ const receipt = JSON.parse((await readStable(join(final, 'bootstrap.json'), 16_384, true)).toString('utf8'));
238
+ if (!VERSION.test(receipt.version) || !receipt.origin || !['local-head', 'official-tag'].includes(receipt.origin.kind))
239
+ fail('source bootstrap identity is invalid');
240
+ if (input.sourceRepository !== undefined)
241
+ canonicalPath(input.sourceRepository, 'source repository');
242
+ const origin = input.sourceRepository === undefined ? receipt.origin
243
+ : { kind: 'local-head', locator: input.sourceRepository, ref: 'HEAD' };
244
+ if (origin.kind === 'local-head')
245
+ canonicalPath(origin.locator, 'source repository');
246
+ else if (origin.locator !== OFFICIAL || origin.ref !== `refs/tags/v${receipt.version}`)
247
+ fail('official source identity differs');
248
+ const signal = AbortSignal.any([input.signal ?? new AbortController().signal, AbortSignal.timeout(180_000)]);
249
+ const expected = { schemaVersion: 1, version: receipt.version, origin,
250
+ repository: join(final, 'checkout'), dshHome: input.dshHome, profile: input.profile,
251
+ baseline: { ref: 'refs/dsh-source/repairs', remote: join(final, 'release.git'), targetBranch: 'repairs' } };
252
+ let maintained = false;
253
+ try {
254
+ await lstat(join(final, 'maintenance.json'));
255
+ maintained = true;
256
+ }
257
+ catch (error) {
258
+ if (error.code !== 'ENOENT')
259
+ throw error;
260
+ }
261
+ const result = maintained
262
+ ? (await (await import('./rsi-source-maintenance.js')).readRsiSourceMaintenance({
263
+ logicalHome: input.dshHome, physicalHome: input.dshHome, profile: input.profile, signal
264
+ })).workspace
265
+ : await existing(final, expected, signal);
266
+ if (JSON.stringify(result.origin) !== JSON.stringify(origin)
267
+ || input.version !== undefined && result.version !== input.version)
268
+ fail('effective source identity differs');
269
+ return result;
270
+ }
271
+ /** Caller must hold the DSH_HOME lifecycle lock across this operation and setup. */
272
+ export async function prepareRsiSourceWorkspace(input) {
273
+ canonicalPath(input.dshHome, 'DSH_HOME');
274
+ if (!PROFILE.test(input.profile) || !VERSION.test(input.version))
275
+ fail('invalid profile or exact version');
276
+ await safeHome(input.dshHome);
277
+ const signal = AbortSignal.any([input.signal ?? new AbortController().signal, AbortSignal.timeout(180_000)]);
278
+ let local;
279
+ if (input.sourceRepository !== undefined) {
280
+ canonicalPath(input.sourceRepository, 'source repository');
281
+ local = await realpath(input.sourceRepository);
282
+ if (local !== input.sourceRepository || await git(local, ['rev-parse', '--show-toplevel'], signal) !== local
283
+ || await git(local, ['rev-parse', '--is-bare-repository'], signal) !== 'false'
284
+ || await git(local, ['rev-parse', '--show-object-format=storage'], signal) !== 'sha1')
285
+ fail('local source is not a canonical SHA-1 checkout');
286
+ }
287
+ const parent = join(input.dshHome, 'rsi-sources');
288
+ try {
289
+ await mkdir(parent, { mode: 0o700 });
290
+ }
291
+ catch (error) {
292
+ if (error.code !== 'EEXIST')
293
+ throw error;
294
+ }
295
+ await privateDirectory(parent);
296
+ const final = join(parent, input.profile), repository = join(final, 'checkout'), remote = join(final, 'release.git');
297
+ const origin = local
298
+ ? { kind: 'local-head', locator: local, ref: 'HEAD' }
299
+ : { kind: 'official-tag', locator: OFFICIAL, ref: `refs/tags/v${input.version}` };
300
+ const expected = { schemaVersion: 1, version: input.version, origin, repository,
301
+ dshHome: input.dshHome, profile: input.profile,
302
+ baseline: { ref: 'refs/dsh-source/repairs', remote, targetBranch: 'repairs' } };
303
+ try {
304
+ await lstat(final);
305
+ return readRsiSourceWorkspace({ ...input, signal });
306
+ }
307
+ catch (error) {
308
+ if (error.code !== 'ENOENT')
309
+ throw error;
310
+ }
311
+ const stage = await mkdtemp(join(parent, `.${input.profile}-stage-`));
312
+ await chmod(stage, 0o700);
313
+ let claimed = false, claimIdentity;
314
+ try {
315
+ const checkout = join(stage, 'checkout'), bare = join(stage, 'release.git');
316
+ await mkdir(checkout, { mode: 0o700 });
317
+ await git(checkout, ['init', '--object-format=sha1', '--initial-branch=repairs', '.'], signal);
318
+ let commit;
319
+ if (local) {
320
+ commit = await git(local, ['rev-parse', 'HEAD'], signal);
321
+ if (!COMMIT.test(commit))
322
+ fail('local source HEAD is not SHA-1');
323
+ await git(checkout, ['fetch', '--no-tags', '--no-write-fetch-head', '--no-recurse-submodules', local,
324
+ `+${commit}:refs/dsh-bootstrap/source`], signal);
325
+ }
326
+ else {
327
+ await git(checkout, ['fetch', '--no-tags', '--no-write-fetch-head', '--no-recurse-submodules', OFFICIAL,
328
+ `+refs/tags/v${input.version}:refs/dsh-bootstrap/source`], signal);
329
+ commit = await git(checkout, ['rev-parse', 'refs/dsh-bootstrap/source^{commit}'], signal);
330
+ }
331
+ await git(checkout, ['switch', '--create', 'repairs', commit], signal);
332
+ await git(checkout, ['update-ref', '--no-deref', 'refs/dsh-source/repairs', commit, ZERO], signal);
333
+ await git(checkout, ['update-ref', '-d', 'refs/dsh-bootstrap/source'], signal);
334
+ await validateSource(checkout, input.version, commit, signal);
335
+ await git(stage, ['init', '--bare', '--object-format=sha1', '--initial-branch=repairs', bare], signal);
336
+ await chmod(bare, 0o700);
337
+ await git(bare, ['fetch', '--no-tags', '--no-write-fetch-head', '--no-recurse-submodules', checkout,
338
+ `+${commit}:refs/heads/repairs`], signal);
339
+ for (const path of [join(checkout, '.git', 'config'), join(checkout, '.git', 'HEAD'),
340
+ join(bare, 'config'), join(bare, 'HEAD')])
341
+ await chmod(path, 0o600);
342
+ const value = { schemaVersion: 1, version: input.version, origin, sourceCommit: commit,
343
+ repository, baseline: { ...expected.baseline, initialCommit: commit } };
344
+ await mkdir(final, { mode: 0o700 }); // O_EXCL-like directory claim: never replace another owner's tree.
345
+ claimed = true;
346
+ const identity = await stat(final);
347
+ claimIdentity = { dev: identity.dev, ino: identity.ino };
348
+ await rename(checkout, repository);
349
+ await rename(bare, remote);
350
+ await inspectWorkspace(value, signal);
351
+ await syncDirectory(final);
352
+ const content = { ...value, dshHome: input.dshHome, profile: input.profile,
353
+ staticFiles: await staticFiles(repository, remote) };
354
+ await writeExclusive(join(final, 'bootstrap.json'), JSON.stringify({ ...content, receiptDigest: digest(content) }));
355
+ await syncDirectory(final);
356
+ await syncDirectory(parent);
357
+ return value;
358
+ }
359
+ catch (error) {
360
+ if (claimed && claimIdentity) {
361
+ const current = await lstat(final).catch(() => undefined);
362
+ if (current?.isDirectory() && current.dev === claimIdentity.dev && current.ino === claimIdentity.ino) {
363
+ const names = await readdir(final).catch(() => []);
364
+ if (names.every(name => ['checkout', 'release.git', 'bootstrap.json'].includes(name)))
365
+ await rm(final, { recursive: true, force: true });
366
+ }
367
+ }
368
+ throw error;
369
+ }
370
+ finally {
371
+ await rm(stage, { recursive: true, force: true });
372
+ await syncDirectory(parent);
373
+ }
374
+ }
375
+ //# sourceMappingURL=rsi-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-source.js","sourceRoot":"","sources":["../src/rsi-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { SystemdHostAuthorityConfig } from '@dsh-enhanced/plugin-control-plane';
2
+ import type { Pin } from './rsi-authority-runtime.js';
3
+ import type { RsiServiceEnvironment } from './rsi-service-environment.js';
4
+ import { type SystemdInstallOptions } from './systemd.js';
5
+ declare const statusKeys: readonly ["Id", "LoadState", "ActiveState", "SubState", "MainPID", "ControlPID", "ControlGroup", "Job"];
6
+ type UnitProperties = SystemdHostAuthorityConfig['template']['unitProperties'];
7
+ export type RsiSystemdStatus = Record<typeof statusKeys[number], string>;
8
+ export interface RsiSystemdCommand {
9
+ command: string;
10
+ fd: number;
11
+ args: readonly string[];
12
+ env: NodeJS.ProcessEnv;
13
+ timeoutMs: number;
14
+ signal?: AbortSignal;
15
+ }
16
+ export interface RsiSystemdResult {
17
+ status: number | null;
18
+ stdout: string;
19
+ stderr: string;
20
+ error?: Error;
21
+ }
22
+ export type RsiSystemdRunner = (request: RsiSystemdCommand) => RsiSystemdResult | Promise<RsiSystemdResult>;
23
+ export interface RsiSystemdCaptureOptions extends Pick<SystemdInstallOptions, 'home' | 'nodePath' | 'dshPath' | 'path'> {
24
+ environment?: RsiServiceEnvironment;
25
+ systemctl: Pin & {
26
+ interpreter: null;
27
+ };
28
+ timeoutMs?: number;
29
+ signal?: AbortSignal;
30
+ run?: RsiSystemdRunner;
31
+ }
32
+ export declare function parseRsiSystemdShow(source: string, keys?: readonly string[]): Record<string, string>;
33
+ export declare function assertRsiSystemdUnitStopped(status: RsiSystemdStatus, unitName: string): void;
34
+ export declare function readRsiSystemdUnitStatus(unitName: string, options: RsiSystemdCaptureOptions): Promise<RsiSystemdStatus>;
35
+ /** Reads the currently loaded service for post-install and post-start comparison with the frozen Host grant. */
36
+ export declare function readRsiSystemdUnitProperties(input: {
37
+ dshHome: string;
38
+ profile: string;
39
+ }, options: RsiSystemdCaptureOptions): Promise<UnitProperties>;
40
+ /** Caller owns the DSH_HOME lifecycle lock and has stopped the target service. No command here can start it. */
41
+ export declare function captureRsiSystemdUnitProperties(input: {
42
+ dshHome: string;
43
+ profile: string;
44
+ }, options: RsiSystemdCaptureOptions): Promise<UnitProperties>;
45
+ export {};
46
+ //# sourceMappingURL=rsi-systemd-bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-systemd-bootstrap.d.ts","sourceRoot":"","sources":["../src/rsi-systemd-bootstrap.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAA;AACpF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,EAAgD,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAGvG,QAAA,MAAM,UAAU,yGAA0G,CAAA;AAE1H,KAAK,cAAc,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAC,gBAAgB,CAAC,CAAA;AAC9E,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;AACxE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IACvB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AACD,MAAM,WAAW,gBAAgB;IAAG,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE;AAC1G,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,iBAAiB,KAAK,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;AAC3G,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IACrH,WAAW,CAAC,EAAE,qBAAqB,CAAA;IACnC,SAAS,EAAE,GAAG,GAAG;QAAE,WAAW,EAAE,IAAI,CAAA;KAAE,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,GAAG,CAAC,EAAE,gBAAgB,CAAA;CACvB;AAsDD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,SAAS,MAAM,EAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU7G;AAMD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAK5F;AACD,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAG7H;AACD,gHAAgH;AAChH,wBAAsB,4BAA4B,CAChD,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,wBAAwB,GAC7E,OAAO,CAAC,cAAc,CAAC,CAUzB;AAoDD,gHAAgH;AAChH,wBAAsB,+BAA+B,CACnD,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,wBAAwB,GAC7E,OAAO,CAAC,cAAc,CAAC,CAiDzB"}