@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.
- package/README.md +19 -8
- package/docs/rsi-setup.md +123 -11
- package/docs/setup.md +27 -14
- package/docs/supervised-growth.md +2 -0
- package/lib/adapter.d.ts +6 -0
- package/lib/adapter.d.ts.map +1 -1
- package/lib/adapter.js +79 -8
- package/lib/adapter.js.map +1 -1
- package/lib/business-cli-install.d.ts +9 -0
- package/lib/business-cli-install.d.ts.map +1 -0
- package/lib/business-cli-install.js +367 -0
- package/lib/business-cli-install.js.map +1 -0
- package/lib/business-environment.d.ts +2 -0
- package/lib/business-environment.d.ts.map +1 -0
- package/lib/business-environment.js +16 -0
- package/lib/business-environment.js.map +1 -0
- package/lib/business-skill.d.ts +32 -0
- package/lib/business-skill.d.ts.map +1 -0
- package/lib/business-skill.js +202 -0
- package/lib/business-skill.js.map +1 -0
- package/lib/rsi-authority-config.d.ts +29 -0
- package/lib/rsi-authority-config.d.ts.map +1 -0
- package/lib/rsi-authority-config.js +233 -0
- package/lib/rsi-authority-config.js.map +1 -0
- package/lib/rsi-authority-resources.d.ts +36 -0
- package/lib/rsi-authority-resources.d.ts.map +1 -0
- package/lib/rsi-authority-resources.js +139 -0
- package/lib/rsi-authority-resources.js.map +1 -0
- package/lib/rsi-authority-runtime.d.ts +50 -0
- package/lib/rsi-authority-runtime.d.ts.map +1 -0
- package/lib/rsi-authority-runtime.js +393 -0
- package/lib/rsi-authority-runtime.js.map +1 -0
- package/lib/rsi-bootstrap-manifest.d.ts +39 -0
- package/lib/rsi-bootstrap-manifest.d.ts.map +1 -0
- package/lib/rsi-bootstrap-manifest.js +366 -0
- package/lib/rsi-bootstrap-manifest.js.map +1 -0
- package/lib/rsi-bootstrap.d.ts +30 -0
- package/lib/rsi-bootstrap.d.ts.map +1 -0
- package/lib/rsi-bootstrap.js +363 -0
- package/lib/rsi-bootstrap.js.map +1 -0
- package/lib/rsi-build.d.ts +45 -0
- package/lib/rsi-build.d.ts.map +1 -0
- package/lib/rsi-build.js +404 -0
- package/lib/rsi-build.js.map +1 -0
- package/lib/rsi-creation-build.d.ts +47 -0
- package/lib/rsi-creation-build.d.ts.map +1 -0
- package/lib/rsi-creation-build.js +333 -0
- package/lib/rsi-creation-build.js.map +1 -0
- package/lib/rsi-host-authorities.d.ts +18 -0
- package/lib/rsi-host-authorities.d.ts.map +1 -0
- package/lib/rsi-host-authorities.js +129 -0
- package/lib/rsi-host-authorities.js.map +1 -0
- package/lib/rsi-host-update.d.ts +113 -0
- package/lib/rsi-host-update.d.ts.map +1 -0
- package/lib/rsi-host-update.js +316 -0
- package/lib/rsi-host-update.js.map +1 -0
- package/lib/rsi-install-inputs.d.ts +43 -0
- package/lib/rsi-install-inputs.d.ts.map +1 -0
- package/lib/rsi-install-inputs.js +342 -0
- package/lib/rsi-install-inputs.js.map +1 -0
- package/lib/rsi-install.d.ts +54 -0
- package/lib/rsi-install.d.ts.map +1 -0
- package/lib/rsi-install.js +404 -0
- package/lib/rsi-install.js.map +1 -0
- package/lib/rsi-local-activation.d.ts +78 -0
- package/lib/rsi-local-activation.d.ts.map +1 -0
- package/lib/rsi-local-activation.js +485 -0
- package/lib/rsi-local-activation.js.map +1 -0
- package/lib/rsi-local-cohort.d.ts +70 -0
- package/lib/rsi-local-cohort.d.ts.map +1 -0
- package/lib/rsi-local-cohort.js +781 -0
- package/lib/rsi-local-cohort.js.map +1 -0
- package/lib/rsi-local-install.d.ts +40 -0
- package/lib/rsi-local-install.d.ts.map +1 -0
- package/lib/rsi-local-install.js +221 -0
- package/lib/rsi-local-install.js.map +1 -0
- package/lib/rsi-local-pair-install.d.ts +38 -0
- package/lib/rsi-local-pair-install.d.ts.map +1 -0
- package/lib/rsi-local-pair-install.js +200 -0
- package/lib/rsi-local-pair-install.js.map +1 -0
- package/lib/rsi-local-profile-update.d.ts +25 -0
- package/lib/rsi-local-profile-update.d.ts.map +1 -0
- package/lib/rsi-local-profile-update.js +226 -0
- package/lib/rsi-local-profile-update.js.map +1 -0
- package/lib/rsi-local-resources.d.ts +37 -0
- package/lib/rsi-local-resources.d.ts.map +1 -0
- package/lib/rsi-local-resources.js +184 -0
- package/lib/rsi-local-resources.js.map +1 -0
- package/lib/rsi-local-roots-extension.d.ts +11 -0
- package/lib/rsi-local-roots-extension.d.ts.map +1 -0
- package/lib/rsi-local-roots-extension.js +31 -0
- package/lib/rsi-local-roots-extension.js.map +1 -0
- package/lib/rsi-local-update-build.d.ts +18 -0
- package/lib/rsi-local-update-build.d.ts.map +1 -0
- package/lib/rsi-local-update-build.js +37 -0
- package/lib/rsi-local-update-build.js.map +1 -0
- package/lib/rsi-local-update.d.ts +39 -0
- package/lib/rsi-local-update.d.ts.map +1 -0
- package/lib/rsi-local-update.js +205 -0
- package/lib/rsi-local-update.js.map +1 -0
- package/lib/rsi-memory-learning.d.ts +22 -0
- package/lib/rsi-memory-learning.d.ts.map +1 -0
- package/lib/rsi-memory-learning.js +76 -0
- package/lib/rsi-memory-learning.js.map +1 -0
- package/lib/rsi-owner-profile.d.ts +37 -0
- package/lib/rsi-owner-profile.d.ts.map +1 -0
- package/lib/rsi-owner-profile.js +178 -0
- package/lib/rsi-owner-profile.js.map +1 -0
- package/lib/rsi-plugin-creation.d.ts +31 -0
- package/lib/rsi-plugin-creation.d.ts.map +1 -0
- package/lib/rsi-plugin-creation.js +179 -0
- package/lib/rsi-plugin-creation.js.map +1 -0
- package/lib/rsi-profile.d.ts +23 -0
- package/lib/rsi-profile.d.ts.map +1 -1
- package/lib/rsi-profile.js +154 -43
- package/lib/rsi-profile.js.map +1 -1
- package/lib/rsi-release-build.d.ts +41 -0
- package/lib/rsi-release-build.d.ts.map +1 -0
- package/lib/rsi-release-build.js +223 -0
- package/lib/rsi-release-build.js.map +1 -0
- package/lib/rsi-service-environment.d.ts +6 -0
- package/lib/rsi-service-environment.d.ts.map +1 -0
- package/lib/rsi-service-environment.js +113 -0
- package/lib/rsi-service-environment.js.map +1 -0
- package/lib/rsi-service-setup.d.ts +10 -0
- package/lib/rsi-service-setup.d.ts.map +1 -0
- package/lib/rsi-service-setup.js +34 -0
- package/lib/rsi-service-setup.js.map +1 -0
- package/lib/rsi-setup.d.ts +35 -2
- package/lib/rsi-setup.d.ts.map +1 -1
- package/lib/rsi-setup.js +459 -32
- package/lib/rsi-setup.js.map +1 -1
- package/lib/rsi-source-maintenance.d.ts +25 -0
- package/lib/rsi-source-maintenance.d.ts.map +1 -0
- package/lib/rsi-source-maintenance.js +348 -0
- package/lib/rsi-source-maintenance.js.map +1 -0
- package/lib/rsi-source-update.d.ts +26 -0
- package/lib/rsi-source-update.d.ts.map +1 -0
- package/lib/rsi-source-update.js +276 -0
- package/lib/rsi-source-update.js.map +1 -0
- package/lib/rsi-source.d.ts +34 -0
- package/lib/rsi-source.d.ts.map +1 -0
- package/lib/rsi-source.js +375 -0
- package/lib/rsi-source.js.map +1 -0
- package/lib/rsi-systemd-bootstrap.d.ts +46 -0
- package/lib/rsi-systemd-bootstrap.d.ts.map +1 -0
- package/lib/rsi-systemd-bootstrap.js +271 -0
- package/lib/rsi-systemd-bootstrap.js.map +1 -0
- package/lib/sdk.d.ts.map +1 -1
- package/lib/sdk.js +26 -1
- package/lib/sdk.js.map +1 -1
- package/lib/setup-business.d.ts +49 -0
- package/lib/setup-business.d.ts.map +1 -0
- package/lib/setup-business.js +335 -0
- package/lib/setup-business.js.map +1 -0
- package/lib/setup-profile.d.ts +1 -1
- package/lib/setup-profile.d.ts.map +1 -1
- package/lib/setup-profile.js +25 -2
- package/lib/setup-profile.js.map +1 -1
- package/lib/setup.d.ts +12 -1
- package/lib/setup.d.ts.map +1 -1
- package/lib/setup.js +138 -34
- package/lib/setup.js.map +1 -1
- package/lib/systemd.d.ts +10 -0
- package/lib/systemd.d.ts.map +1 -1
- package/lib/systemd.js +23 -6
- package/lib/systemd.js.map +1 -1
- package/lib/types.d.ts +7 -0
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +32 -20
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { constants } from 'node:fs';
|
|
3
|
+
import { lstat, open, realpath } from 'node:fs/promises';
|
|
4
|
+
import { createRequire } from 'node:module';
|
|
5
|
+
import { delimiter, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
6
|
+
import { PROTECTED_PLUGIN_DENYLIST, resolveLocalExecutable, runtimeConfigDigest, validateHostDeploymentInputs } from '@dsh-enhanced/plugin-control-plane';
|
|
7
|
+
import { isMap, isSeq, parseDocument } from 'yaml';
|
|
8
|
+
import { rawLoaderConfig } from './rsi-bootstrap-manifest.js';
|
|
9
|
+
import { readRsiLocalCohort, verifyRsiLocalInstalledPackages } from './rsi-local-cohort.js';
|
|
10
|
+
const pluginPattern = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u;
|
|
11
|
+
const profilePattern = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u;
|
|
12
|
+
const versionPattern = /^[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z]+(?:[.-][0-9A-Za-z]+)*)?$/u;
|
|
13
|
+
const stableObserverRows = [
|
|
14
|
+
{ entryId: 'dsh-enhanced-assistant-delivery', module: '@dsh-enhanced/assistant-delivery', services: ['assistantDelivery'] },
|
|
15
|
+
{ entryId: 'dsh-enhanced-lark-channel', module: '@dsh-enhanced/lark-channel', services: ['larkChannel'] },
|
|
16
|
+
];
|
|
17
|
+
function fail(message) { throw new Error(`rsi installed inputs: ${message}`); }
|
|
18
|
+
export class RsiInstalledInputsUnavailableError extends Error {
|
|
19
|
+
constructor(message) { super(`rsi installed inputs unavailable: ${message}`); }
|
|
20
|
+
}
|
|
21
|
+
function canonical(value, label) {
|
|
22
|
+
if (typeof value !== 'string' || !isAbsolute(value) || resolve(value) !== value
|
|
23
|
+
|| value.includes('\0') || /[\r\n]/u.test(value))
|
|
24
|
+
fail(`${label} must be canonical absolute`);
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
function within(root, path, label) {
|
|
28
|
+
const child = relative(root, path);
|
|
29
|
+
if (!child || child === '..' || child.startsWith(`..${sep}`) || isAbsolute(child))
|
|
30
|
+
fail(`${label} escapes installed root`);
|
|
31
|
+
}
|
|
32
|
+
function relativeJs(value, label, requireLib) {
|
|
33
|
+
if (typeof value !== 'string' || !/^\.\/[A-Za-z0-9._/-]+\.js$/u.test(value)
|
|
34
|
+
|| requireLib && !value.startsWith('./lib/')
|
|
35
|
+
|| value.slice(2).split('/').some(part => !part || part === '.' || part === '..')) {
|
|
36
|
+
fail(`${label} must be a package-local ${requireLib ? 'lib ' : ''}JS entry`);
|
|
37
|
+
}
|
|
38
|
+
return value.slice(2);
|
|
39
|
+
}
|
|
40
|
+
async function bytes(path, limit, label) {
|
|
41
|
+
const file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
42
|
+
try {
|
|
43
|
+
const before = await file.stat({ bigint: true }), named = await lstat(path, { bigint: true });
|
|
44
|
+
if (!before.isFile() || before.size > BigInt(limit) || before.size < 1n
|
|
45
|
+
|| before.dev !== named.dev || before.ino !== named.ino || (before.mode & 18n) !== 0n
|
|
46
|
+
|| (before.mode & 3584n) !== 0n
|
|
47
|
+
|| process.getuid && before.uid !== 0n && before.uid !== BigInt(process.getuid()))
|
|
48
|
+
fail(`${label} is not a trusted regular file`);
|
|
49
|
+
const value = await file.readFile(), after = await file.stat({ bigint: true });
|
|
50
|
+
if (BigInt(value.length) !== before.size || before.dev !== after.dev || before.ino !== after.ino
|
|
51
|
+
|| before.mtimeNs !== after.mtimeNs || before.ctimeNs !== after.ctimeNs)
|
|
52
|
+
fail(`${label} changed during read`);
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
await file.close();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function json(path, label) {
|
|
60
|
+
let value;
|
|
61
|
+
try {
|
|
62
|
+
value = JSON.parse((await bytes(path, 1_048_576, label)).toString('utf8'));
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
fail(`${label} is invalid: ${String(error)}`);
|
|
66
|
+
}
|
|
67
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
68
|
+
fail(`${label} must be an object`);
|
|
69
|
+
return value;
|
|
70
|
+
}
|
|
71
|
+
async function pin(path, label) {
|
|
72
|
+
canonical(path, label);
|
|
73
|
+
if (await realpath(path) !== path)
|
|
74
|
+
fail(`${label} path changed`);
|
|
75
|
+
const data = await bytes(path, 64 * 1024 * 1024, label);
|
|
76
|
+
const metadata = await lstat(path);
|
|
77
|
+
if ((metadata.mode & 0o111) === 0)
|
|
78
|
+
fail(`${label} is not executable`);
|
|
79
|
+
return { path, sha256: createHash('sha256').update(data).digest('hex') };
|
|
80
|
+
}
|
|
81
|
+
function executableCandidates(command, environment) {
|
|
82
|
+
return (environment.PATH ?? '').split(delimiter).filter(isAbsolute).map(directory => join(directory, command));
|
|
83
|
+
}
|
|
84
|
+
function assertPackagePatch(bytes, plugin) {
|
|
85
|
+
const document = parseDocument(bytes.toString('utf8'), { uniqueKeys: true });
|
|
86
|
+
if (document.errors.length || !isSeq(document.contents))
|
|
87
|
+
fail(`${plugin} package patch is invalid`);
|
|
88
|
+
let matches = 0;
|
|
89
|
+
for (const operation of document.contents.items) {
|
|
90
|
+
if (!isMap(operation))
|
|
91
|
+
fail(`${plugin} package patch operation is invalid`);
|
|
92
|
+
const insert = operation.get('insert', true);
|
|
93
|
+
const entries = isSeq(insert) ? insert.items : [operation];
|
|
94
|
+
for (const value of entries) {
|
|
95
|
+
if (!isMap(value))
|
|
96
|
+
continue;
|
|
97
|
+
if (value.get('id') === `dsh-enhanced-${plugin}`) {
|
|
98
|
+
if (value.get('name') !== `@dsh-enhanced/${plugin}`)
|
|
99
|
+
fail(`${plugin} package patch mounts the wrong package`);
|
|
100
|
+
matches++;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (matches !== 1)
|
|
105
|
+
fail(`${plugin} package patch has no unique mounted entry`);
|
|
106
|
+
}
|
|
107
|
+
async function locateDsh(environment) {
|
|
108
|
+
for (const candidate of executableCandidates('dsh', environment)) {
|
|
109
|
+
try {
|
|
110
|
+
return await realpath(candidate);
|
|
111
|
+
}
|
|
112
|
+
catch { /* try next PATH entry */ }
|
|
113
|
+
}
|
|
114
|
+
fail('dsh executable is absent from PATH');
|
|
115
|
+
}
|
|
116
|
+
/** Inspect only the installed CLI package and its exact bin target. */
|
|
117
|
+
export async function resolveInstalledRsiDsh(environment = process.env, installedDshRoot) {
|
|
118
|
+
const executable = installedDshRoot === undefined ? await locateDsh(environment) : undefined;
|
|
119
|
+
let root;
|
|
120
|
+
if (installedDshRoot !== undefined) {
|
|
121
|
+
root = canonical(installedDshRoot, 'DSH package root');
|
|
122
|
+
if (await realpath(root) !== root)
|
|
123
|
+
fail('DSH package root is not physical');
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
let directory = dirname(executable);
|
|
127
|
+
for (let depth = 0; depth < 5; depth++, directory = dirname(directory)) {
|
|
128
|
+
try {
|
|
129
|
+
const manifest = await json(join(directory, 'package.json'), 'DSH manifest');
|
|
130
|
+
if (manifest.name === '@deepseek-ai/dsh') {
|
|
131
|
+
root = directory;
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch { /* bounded ancestor search */ }
|
|
136
|
+
if (dirname(directory) === directory)
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (!root)
|
|
141
|
+
fail('dsh executable has no installed @deepseek-ai/dsh package');
|
|
142
|
+
const manifest = await json(join(root, 'package.json'), 'DSH manifest');
|
|
143
|
+
const bin = manifest.bin;
|
|
144
|
+
if (manifest.name !== '@deepseek-ai/dsh' || typeof manifest.version !== 'string'
|
|
145
|
+
|| !versionPattern.test(manifest.version) || !bin || typeof bin !== 'object' || Array.isArray(bin)
|
|
146
|
+
|| Object.keys(bin).length !== 1 || typeof bin.dsh !== 'string')
|
|
147
|
+
fail('DSH package identity is invalid');
|
|
148
|
+
const main = relativeJs(`./${bin.dsh.replace(/^\.\//u, '')}`, 'DSH bin', false);
|
|
149
|
+
const path = join(root, main);
|
|
150
|
+
if (await realpath(path) !== path || executable !== undefined && executable !== path)
|
|
151
|
+
fail('dsh PATH entry differs from installed package bin');
|
|
152
|
+
return { root, path, version: manifest.version, pin: await pin(path, 'DSH executable') };
|
|
153
|
+
}
|
|
154
|
+
/** Caller holds the installation lifecycle lock and supplies one pre-mutation
|
|
155
|
+
* dump. These are declared Host disk inputs, not a claim of complete transitive
|
|
156
|
+
* JavaScript module coverage. */
|
|
157
|
+
export async function collectRsiInstalledInputs(input) {
|
|
158
|
+
canonical(input.dshHome, 'DSH_HOME');
|
|
159
|
+
if (!profilePattern.test(input.targetProfile) || typeof input.targetEffective !== 'string'
|
|
160
|
+
|| Buffer.byteLength(input.targetEffective) > 2_097_152)
|
|
161
|
+
fail('invalid target profile or effective dump');
|
|
162
|
+
const profile = join(input.dshHome, 'profiles', input.targetProfile);
|
|
163
|
+
if (await realpath(profile) !== profile)
|
|
164
|
+
fail('installed profile is not physical');
|
|
165
|
+
const dsh = await resolveInstalledRsiDsh(input.environment, input.installedDshRoot);
|
|
166
|
+
const document = parseDocument(input.targetEffective, { uniqueKeys: true });
|
|
167
|
+
if (document.errors.length || !isSeq(document.contents))
|
|
168
|
+
fail('effective dump is not an entry list');
|
|
169
|
+
const rows = new Map();
|
|
170
|
+
const plugins = [];
|
|
171
|
+
const activeBundles = [];
|
|
172
|
+
const learnerId = 'dsh-enhanced-assistant-memory-learning';
|
|
173
|
+
for (const value of document.contents.items) {
|
|
174
|
+
if (!isMap(value))
|
|
175
|
+
fail('effective entry is not a mapping');
|
|
176
|
+
const row = value;
|
|
177
|
+
const id = row.get('id'), name = row.get('name');
|
|
178
|
+
if (typeof id !== 'string' || !id || rows.has(id))
|
|
179
|
+
fail('effective entry identity is duplicate or invalid');
|
|
180
|
+
rows.set(id, row);
|
|
181
|
+
// The learning bundle ships disabled without configuration. Owner setup
|
|
182
|
+
// enables this one exact installed row after its grants are frozen.
|
|
183
|
+
if (row.get('disabled') === true && id !== learnerId)
|
|
184
|
+
continue;
|
|
185
|
+
if (typeof name !== 'string' || !name.startsWith('@dsh-enhanced/')) {
|
|
186
|
+
if (id.startsWith('dsh-enhanced-'))
|
|
187
|
+
fail(`installed ${id} has no package name`);
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
const plugin = name.slice('@dsh-enhanced/'.length);
|
|
191
|
+
if (!pluginPattern.test(plugin) || id !== `dsh-enhanced-${plugin}`)
|
|
192
|
+
fail(`installed ${id} has inconsistent package identity`);
|
|
193
|
+
activeBundles.push(plugin);
|
|
194
|
+
if (!PROTECTED_PLUGIN_DENYLIST.has(plugin))
|
|
195
|
+
plugins.push(plugin);
|
|
196
|
+
}
|
|
197
|
+
const permission = rows.get('permission');
|
|
198
|
+
if (permission?.get('name') === '@deepseek-ai/dsh-permission-presets' && permission.get('disabled') !== true) {
|
|
199
|
+
const config = permission.get('config', true);
|
|
200
|
+
if (isMap(config)) {
|
|
201
|
+
const defaultPreset = config.get('defaultPreset');
|
|
202
|
+
const presets = config.get('presets', true);
|
|
203
|
+
if (typeof defaultPreset === 'string') {
|
|
204
|
+
const configured = isMap(presets) ? presets.has(defaultPreset)
|
|
205
|
+
: ['workspace-write', 'danger-full-access'].includes(defaultPreset);
|
|
206
|
+
if (defaultPreset === 'auto' || !configured) {
|
|
207
|
+
throw new RsiInstalledInputsUnavailableError(`permission.defaultPreset=${defaultPreset} is not a persistent configured preset`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
const learner = rows.get(learnerId);
|
|
213
|
+
if (!learner || learner.get('name') !== '@dsh-enhanced/assistant-memory-learning'
|
|
214
|
+
|| learner.get('disabled') === true && learner.has('config'))
|
|
215
|
+
fail('installed memory learning row must be the unconfigured bundle entry');
|
|
216
|
+
const personal = rows.get('dsh-enhanced-personal-assistant');
|
|
217
|
+
const personalConfig = personal?.get('config', true);
|
|
218
|
+
if (!personal || personal.get('disabled') === true || personal.get('name') !== '@dsh-enhanced/personal-assistant'
|
|
219
|
+
|| !isMap(personalConfig) || !isMap(personalConfig.get('personalMemory', true))) {
|
|
220
|
+
fail('enabled embedded Personal Memory is required');
|
|
221
|
+
}
|
|
222
|
+
if (!plugins.length || plugins.length > 32)
|
|
223
|
+
fail('repairable installed plugin scope is empty or too large');
|
|
224
|
+
const observerTargets = stableObserverRows.map(expected => {
|
|
225
|
+
const row = rows.get(expected.entryId);
|
|
226
|
+
if (!row || row.get('disabled') === true || row.get('name') !== expected.module)
|
|
227
|
+
fail(`required ${expected.entryId} is unavailable`);
|
|
228
|
+
const raw = rawLoaderConfig(row.get('config', true), expected.entryId);
|
|
229
|
+
if (expected.entryId === 'dsh-enhanced-lark-channel'
|
|
230
|
+
&& (!raw || typeof raw !== 'object' || Array.isArray(raw) || raw.enabled !== true)) {
|
|
231
|
+
fail('installed Lark channel is not enabled');
|
|
232
|
+
}
|
|
233
|
+
return { entryId: expected.entryId, module: expected.module,
|
|
234
|
+
configDigest: runtimeConfigDigest(raw),
|
|
235
|
+
services: [...expected.services] };
|
|
236
|
+
});
|
|
237
|
+
const hostDeploymentInputs = ['package.json', 'pnpm-lock.yaml', 'cordis.patch.yml'];
|
|
238
|
+
for (const entry of hostDeploymentInputs) {
|
|
239
|
+
const path = await realpath(join(profile, entry));
|
|
240
|
+
within(profile, path, entry);
|
|
241
|
+
await bytes(path, 64 * 1024 * 1024, entry);
|
|
242
|
+
}
|
|
243
|
+
for (const plugin of plugins) {
|
|
244
|
+
const prefix = `node_modules/@dsh-enhanced/${plugin}/`, packageRoot = join(profile, 'node_modules', '@dsh-enhanced', plugin);
|
|
245
|
+
const physical = await realpath(packageRoot);
|
|
246
|
+
const child = relative(profile, physical);
|
|
247
|
+
if (!child || child === '..' || child.startsWith(`..${sep}`) || isAbsolute(child)) {
|
|
248
|
+
throw new RsiInstalledInputsUnavailableError(`${plugin} is linked outside the profile; automatic RSI requires profile-local installed packages`);
|
|
249
|
+
}
|
|
250
|
+
const manifestFile = await realpath(join(packageRoot, 'package.json'));
|
|
251
|
+
within(profile, manifestFile, `${plugin} manifest`);
|
|
252
|
+
const manifest = await json(manifestFile, `${plugin} manifest`);
|
|
253
|
+
const exported = manifest.exports && typeof manifest.exports === 'object' && !Array.isArray(manifest.exports)
|
|
254
|
+
? manifest.exports['.'] : undefined;
|
|
255
|
+
const exportMain = exported && typeof exported === 'object' && !Array.isArray(exported)
|
|
256
|
+
? exported.default : undefined;
|
|
257
|
+
const main = relativeJs(manifest.main, `${plugin} main`, true);
|
|
258
|
+
if (manifest.name !== `@dsh-enhanced/${plugin}` || manifest.version !== input.source.version
|
|
259
|
+
|| exportMain !== manifest.main || manifest.dsh?.bundle?.patch !== './cordis.patch.yml') {
|
|
260
|
+
fail(`${plugin} installed package identity or entry differs from source cohort`);
|
|
261
|
+
}
|
|
262
|
+
const declared = [`${prefix}package.json`, `${prefix}cordis.patch.yml`, `${prefix}${main}`];
|
|
263
|
+
for (const entry of declared.slice(1)) {
|
|
264
|
+
const path = await realpath(join(profile, entry));
|
|
265
|
+
within(profile, path, entry);
|
|
266
|
+
const content = await bytes(path, 64 * 1024 * 1024, entry);
|
|
267
|
+
if (entry.endsWith('/cordis.patch.yml'))
|
|
268
|
+
assertPackagePatch(content, plugin);
|
|
269
|
+
}
|
|
270
|
+
hostDeploymentInputs.push(...declared);
|
|
271
|
+
}
|
|
272
|
+
// Personal Assistant embeds Memory as a runtime dependency. Pin the package
|
|
273
|
+
// it actually resolves, and require the learner's peer to resolve to the same
|
|
274
|
+
// physical provider. The embedded package is not an independent Loader row.
|
|
275
|
+
const resolvedMemory = async (parent) => {
|
|
276
|
+
const parentManifest = await realpath(join(profile, 'node_modules', '@dsh-enhanced', parent, 'package.json'));
|
|
277
|
+
within(profile, parentManifest, `${parent} manifest`);
|
|
278
|
+
const resolved = createRequire(parentManifest).resolve('@dsh-enhanced/personal-memory/package.json');
|
|
279
|
+
const path = await realpath(resolved);
|
|
280
|
+
within(profile, path, `${parent} Personal Memory dependency`);
|
|
281
|
+
return path;
|
|
282
|
+
};
|
|
283
|
+
const memoryManifestPath = await resolvedMemory('personal-assistant');
|
|
284
|
+
if (await resolvedMemory('assistant-memory-learning') !== memoryManifestPath)
|
|
285
|
+
fail('learner and embedded Personal Memory resolve different providers');
|
|
286
|
+
const memoryManifest = await json(memoryManifestPath, 'embedded Personal Memory manifest');
|
|
287
|
+
const memoryExport = memoryManifest.exports && typeof memoryManifest.exports === 'object' && !Array.isArray(memoryManifest.exports)
|
|
288
|
+
? memoryManifest.exports['.'] : undefined;
|
|
289
|
+
const memoryMain = memoryExport && typeof memoryExport === 'object' && !Array.isArray(memoryExport)
|
|
290
|
+
? memoryExport.default : undefined;
|
|
291
|
+
const memoryEntry = relativeJs(memoryManifest.main, 'embedded Personal Memory main', true);
|
|
292
|
+
if (memoryManifest.name !== '@dsh-enhanced/personal-memory' || memoryManifest.version !== input.source.version
|
|
293
|
+
|| memoryMain !== memoryManifest.main
|
|
294
|
+
|| memoryManifest.dsh?.bundle?.patch !== './cordis.patch.yml') {
|
|
295
|
+
fail('embedded Personal Memory package identity or entry differs from source cohort');
|
|
296
|
+
}
|
|
297
|
+
const memoryRoot = dirname(memoryManifestPath);
|
|
298
|
+
for (const filename of ['package.json', 'cordis.patch.yml', memoryEntry]) {
|
|
299
|
+
const path = await realpath(join(memoryRoot, filename));
|
|
300
|
+
within(profile, path, `embedded Personal Memory ${filename}`);
|
|
301
|
+
const content = await bytes(path, 64 * 1024 * 1024, `embedded Personal Memory ${filename}`);
|
|
302
|
+
if (filename === 'cordis.patch.yml')
|
|
303
|
+
assertPackagePatch(content, 'personal-memory');
|
|
304
|
+
hostDeploymentInputs.push(relative(profile, path).split(sep).join('/'));
|
|
305
|
+
}
|
|
306
|
+
validateHostDeploymentInputs(hostDeploymentInputs);
|
|
307
|
+
if (input.source.origin?.kind === 'local-head') {
|
|
308
|
+
const cohort = await readRsiLocalCohort({ dshHome: input.dshHome, profile: input.targetProfile, source: input.source });
|
|
309
|
+
await verifyRsiLocalInstalledPackages({ cohort, profilePath: profile, bundles: [...new Set([...cohort.bundles, ...activeBundles])] });
|
|
310
|
+
}
|
|
311
|
+
if (input.resources.schemaVersion !== 1 || input.resources.root !== join(input.dshHome, 'rsi-authorities', input.targetProfile)
|
|
312
|
+
|| input.source.schemaVersion !== 1)
|
|
313
|
+
fail('authority resources or source cohort differs from installation');
|
|
314
|
+
const environment = input.environment ?? process.env;
|
|
315
|
+
const git = await pin(await resolveLocalExecutable('git', environment), 'Git');
|
|
316
|
+
let systemctlPath;
|
|
317
|
+
for (const candidate of executableCandidates('systemctl', environment)) {
|
|
318
|
+
try {
|
|
319
|
+
systemctlPath = await realpath(candidate);
|
|
320
|
+
break;
|
|
321
|
+
}
|
|
322
|
+
catch { /* next candidate */ }
|
|
323
|
+
}
|
|
324
|
+
if (!systemctlPath)
|
|
325
|
+
fail('systemctl executable is absent from PATH');
|
|
326
|
+
if (!(await bytes(systemctlPath, 64 * 1024 * 1024, 'systemctl')).subarray(0, 4).equals(Buffer.from([0x7f, 0x45, 0x4c, 0x46]))) {
|
|
327
|
+
fail('systemctl is not a native executable');
|
|
328
|
+
}
|
|
329
|
+
const systemctl = { ...await pin(systemctlPath, 'systemctl'), interpreter: null };
|
|
330
|
+
const policies = plugins.map(plugin => ({
|
|
331
|
+
targetBranch: input.source.baseline.targetBranch, candidateId: plugin,
|
|
332
|
+
packageName: `@dsh-enhanced/${plugin}`, packagePath: `plugins/${plugin}`,
|
|
333
|
+
dshBaseline: dsh.version, capabilities: ['owner-installed'], authorities: ['owner-installed'], requires: [],
|
|
334
|
+
registryId: input.resources.registry.id, registryLocator: input.resources.registry.locator,
|
|
335
|
+
catalogId: input.resources.catalog.id, catalogPath: input.resources.catalog.path,
|
|
336
|
+
minimumReproducibleBuilds: 2,
|
|
337
|
+
}));
|
|
338
|
+
return { dsh, plugins, hostDeploymentInputs, observerTargets,
|
|
339
|
+
executor: { id: 'dsh', version: dsh.version, path: dsh.path,
|
|
340
|
+
sha256: dsh.pin.sha256, environmentAllowlist: [] }, git, systemctl, policies };
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=rsi-install-inputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rsi-install-inputs.js","sourceRoot":"","sources":["../src/rsi-install-inputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { listActiveAutomationsLocally } from '@dsh-enhanced/assistant-automations';
|
|
2
|
+
import { type RsiCreationBuildEnvironment } from './rsi-creation-build.js';
|
|
3
|
+
import { prepareRsiOwnerConfiguration } from './rsi-bootstrap.js';
|
|
4
|
+
import { collectRsiInstalledInputs } from './rsi-install-inputs.js';
|
|
5
|
+
import { captureRsiSystemdUnitProperties, readRsiSystemdUnitProperties } from './rsi-systemd-bootstrap.js';
|
|
6
|
+
import { configureRsiSetupLocked, type RsiSetupPorts } from './rsi-setup.js';
|
|
7
|
+
import type { RsiSetupManifest } from './rsi-profile.js';
|
|
8
|
+
import type { RsiAuthorityConfigInput } from './rsi-authority-config.js';
|
|
9
|
+
export interface RsiInstallInput {
|
|
10
|
+
dshHome: string;
|
|
11
|
+
profile: string;
|
|
12
|
+
sourceRepository?: string | undefined;
|
|
13
|
+
signal?: AbortSignal;
|
|
14
|
+
ackExistingAutomations?: boolean | undefined;
|
|
15
|
+
}
|
|
16
|
+
export type RsiInstallResult = {
|
|
17
|
+
mode: 'not-ready';
|
|
18
|
+
reason: string;
|
|
19
|
+
} | {
|
|
20
|
+
mode: 'ready';
|
|
21
|
+
profiles: readonly string[];
|
|
22
|
+
manifestPath: string;
|
|
23
|
+
};
|
|
24
|
+
/** Stable per-target name, including for a maximum-length target profile. */
|
|
25
|
+
export declare function rsiCoordinatorProfile(profile: string): string;
|
|
26
|
+
declare function prepareResources(input: RsiInstallInput, signal: AbortSignal): Promise<{
|
|
27
|
+
creationBuild?: RsiCreationBuildEnvironment;
|
|
28
|
+
source: import("./rsi-source.js").RsiSourceWorkspace;
|
|
29
|
+
runtime: import("./rsi-authority-runtime.js").RsiAuthorityRuntime;
|
|
30
|
+
resources: import("./rsi-authority-resources.js").RsiAuthorityResources;
|
|
31
|
+
build: import("./rsi-build.js").RsiBuildEnvironment;
|
|
32
|
+
release: import("./rsi-release-build.js").RsiReleaseBuildEnvironment;
|
|
33
|
+
}>;
|
|
34
|
+
declare function ensureCoordinator(input: RsiInstallInput, coordinator: string, executor: RsiAuthorityConfigInput['executor'], signal: AbortSignal, systemctlPin: RsiAuthorityConfigInput['systemctl']): Promise<void>;
|
|
35
|
+
declare function stopManaged(input: RsiInstallInput, profile: string, pin: RsiAuthorityConfigInput['systemctl'], signal: AbortSignal): Promise<boolean>;
|
|
36
|
+
export declare function assertRsiMemoryScanActivation(manifest: RsiSetupManifest, records: ReturnType<typeof listActiveAutomationsLocally>): void;
|
|
37
|
+
declare function ready(manifest: RsiSetupManifest, pin: RsiAuthorityConfigInput['systemctl'], signal: AbortSignal, startedAt: number): Promise<void>;
|
|
38
|
+
export interface RsiInstallPorts {
|
|
39
|
+
prepare: typeof prepareResources;
|
|
40
|
+
collect: typeof collectRsiInstalledInputs;
|
|
41
|
+
coordinator: typeof ensureCoordinator;
|
|
42
|
+
setup: RsiSetupPorts;
|
|
43
|
+
capture: typeof captureRsiSystemdUnitProperties;
|
|
44
|
+
stop: typeof stopManaged;
|
|
45
|
+
readUnit: typeof readRsiSystemdUnitProperties;
|
|
46
|
+
ready: typeof ready;
|
|
47
|
+
configure: typeof configureRsiSetupLocked;
|
|
48
|
+
prepareOwner: typeof prepareRsiOwnerConfiguration;
|
|
49
|
+
}
|
|
50
|
+
export declare const rsiInstallPorts: RsiInstallPorts;
|
|
51
|
+
/** Installer-owned process, never invoked from the Host being restarted. */
|
|
52
|
+
export declare function installRsiOwnerDeployment(input: RsiInstallInput, ports?: RsiInstallPorts): Promise<RsiInstallResult>;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=rsi-install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rsi-install.d.ts","sourceRoot":"","sources":["../src/rsi-install.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAA;AAWlF,OAAO,EAAsC,KAAK,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAE9G,OAAO,EAAgC,4BAA4B,EAAE,MAAM,oBAAoB,CAAA;AAC/F,OAAO,EAAE,yBAAyB,EAAsC,MAAM,yBAAyB,CAAA;AACvG,OAAO,EAAE,+BAA+B,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAA;AAC1G,OAAO,EAAE,uBAAuB,EAAiB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAWxE,MAAM,WAAW,eAAe;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,sBAAsB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE;AAChL,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAA;AAI3I,6EAA6E;AAC7E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG7D;AACD,iBAAe,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW;;;;;;;GAqB1E;AACD,iBAAe,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAC1E,QAAQ,EAAE,uBAAuB,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,uBAAuB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCvI;AAaD,iBAAe,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,uBAAuB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAYpJ;AAYD,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,gBAAgB,EACtE,OAAO,EAAE,UAAU,CAAC,OAAO,4BAA4B,CAAC,GAAG,IAAI,CAoBhE;AACD,iBAAe,KAAK,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,EAAE,uBAAuB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCjJ;AACD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,gBAAgB,CAAA;IAChC,OAAO,EAAE,OAAO,yBAAyB,CAAA;IACzC,WAAW,EAAE,OAAO,iBAAiB,CAAA;IACrC,KAAK,EAAE,aAAa,CAAA;IACpB,OAAO,EAAE,OAAO,+BAA+B,CAAA;IAC/C,IAAI,EAAE,OAAO,WAAW,CAAA;IACxB,QAAQ,EAAE,OAAO,4BAA4B,CAAA;IAC7C,KAAK,EAAE,OAAO,KAAK,CAAA;IACnB,SAAS,EAAE,OAAO,uBAAuB,CAAA;IACzC,YAAY,EAAE,OAAO,4BAA4B,CAAA;CAClD;AACD,eAAO,MAAM,eAAe,EAAE,eAG7B,CAAA;AAED,4EAA4E;AAC5E,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,GAAE,eAAiC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiI3I"}
|