@dsh-enhanced/lark-channel 0.1.65 → 0.1.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -7
- package/cordis.patch.yml +1 -0
- package/docs/operations.md +1 -1
- package/docs/progress-security.md +3 -0
- package/docs/rsi-setup.md +13 -7
- package/docs/setup.md +2 -1
- package/lib/adapter.d.ts +8 -0
- package/lib/adapter.d.ts.map +1 -1
- package/lib/adapter.js +44 -7
- package/lib/adapter.js.map +1 -1
- package/lib/config.d.ts +6 -0
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +54 -8
- package/lib/config.js.map +1 -1
- package/lib/group-thread.d.ts +9 -0
- package/lib/group-thread.d.ts.map +1 -1
- package/lib/group-thread.js +16 -2
- package/lib/group-thread.js.map +1 -1
- package/lib/index.d.ts +5 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +24 -1
- package/lib/index.js.map +1 -1
- package/lib/normalize.d.ts.map +1 -1
- package/lib/normalize.js +7 -4
- package/lib/normalize.js.map +1 -1
- package/lib/progress.d.ts +11 -1
- package/lib/progress.d.ts.map +1 -1
- package/lib/progress.js +13 -1
- package/lib/progress.js.map +1 -1
- package/lib/rsi-authority-runtime.d.ts +1 -0
- package/lib/rsi-authority-runtime.d.ts.map +1 -1
- package/lib/rsi-authority-runtime.js +17 -7
- package/lib/rsi-authority-runtime.js.map +1 -1
- package/lib/rsi-bootstrap-manifest.d.ts +17 -5
- package/lib/rsi-bootstrap-manifest.d.ts.map +1 -1
- package/lib/rsi-bootstrap-manifest.js +160 -10
- package/lib/rsi-bootstrap-manifest.js.map +1 -1
- package/lib/rsi-bootstrap.js +3 -3
- package/lib/rsi-bootstrap.js.map +1 -1
- package/lib/rsi-build.d.ts +12 -0
- package/lib/rsi-build.d.ts.map +1 -1
- package/lib/rsi-build.js +55 -5
- package/lib/rsi-build.js.map +1 -1
- package/lib/rsi-creation-build.d.ts +3 -0
- package/lib/rsi-creation-build.d.ts.map +1 -1
- package/lib/rsi-creation-build.js +45 -0
- package/lib/rsi-creation-build.js.map +1 -1
- package/lib/rsi-host-update.d.ts +51 -0
- package/lib/rsi-host-update.d.ts.map +1 -1
- package/lib/rsi-host-update.js +61 -1
- package/lib/rsi-host-update.js.map +1 -1
- package/lib/rsi-install.d.ts +15 -3
- package/lib/rsi-install.d.ts.map +1 -1
- package/lib/rsi-install.js +80 -15
- package/lib/rsi-install.js.map +1 -1
- package/lib/rsi-linux-cgroup-roots.d.ts +3 -0
- package/lib/rsi-linux-cgroup-roots.d.ts.map +1 -0
- package/lib/rsi-linux-cgroup-roots.js +3 -0
- package/lib/rsi-linux-cgroup-roots.js.map +1 -0
- package/lib/rsi-linux-creation-build.d.ts +36 -0
- package/lib/rsi-linux-creation-build.d.ts.map +1 -0
- package/lib/rsi-linux-creation-build.js +213 -0
- package/lib/rsi-linux-creation-build.js.map +1 -0
- package/lib/rsi-linux-native-materialize.d.ts +31 -0
- package/lib/rsi-linux-native-materialize.d.ts.map +1 -0
- package/lib/rsi-linux-native-materialize.js +162 -0
- package/lib/rsi-linux-native-materialize.js.map +1 -0
- package/lib/rsi-linux-native-relocation.d.ts +120 -0
- package/lib/rsi-linux-native-relocation.d.ts.map +1 -0
- package/lib/rsi-linux-native-relocation.js +1555 -0
- package/lib/rsi-linux-native-relocation.js.map +1 -0
- package/lib/rsi-linux-native-resources.d.ts +97 -0
- package/lib/rsi-linux-native-resources.d.ts.map +1 -0
- package/lib/rsi-linux-native-resources.js +521 -0
- package/lib/rsi-linux-native-resources.js.map +1 -0
- package/lib/rsi-linux-repository-bootstrap.d.ts +17 -0
- package/lib/rsi-linux-repository-bootstrap.d.ts.map +1 -0
- package/lib/rsi-linux-repository-bootstrap.js +317 -0
- package/lib/rsi-linux-repository-bootstrap.js.map +1 -0
- package/lib/rsi-linux-runner-states.d.ts +20 -0
- package/lib/rsi-linux-runner-states.d.ts.map +1 -0
- package/lib/rsi-linux-runner-states.js +70 -0
- package/lib/rsi-linux-runner-states.js.map +1 -0
- package/lib/rsi-linux-runtime-bootstrap.d.ts +10 -0
- package/lib/rsi-linux-runtime-bootstrap.d.ts.map +1 -0
- package/lib/rsi-linux-runtime-bootstrap.js +38 -0
- package/lib/rsi-linux-runtime-bootstrap.js.map +1 -0
- package/lib/rsi-linux-source-build.d.ts +28 -0
- package/lib/rsi-linux-source-build.d.ts.map +1 -0
- package/lib/rsi-linux-source-build.js +43 -0
- package/lib/rsi-linux-source-build.js.map +1 -0
- package/lib/rsi-local-install.d.ts +2 -0
- package/lib/rsi-local-install.d.ts.map +1 -1
- package/lib/rsi-local-install.js +42 -1
- package/lib/rsi-local-install.js.map +1 -1
- package/lib/rsi-local-pair-install.d.ts +15 -0
- package/lib/rsi-local-pair-install.d.ts.map +1 -1
- package/lib/rsi-local-pair-install.js +21 -6
- package/lib/rsi-local-pair-install.js.map +1 -1
- package/lib/rsi-local-resources.d.ts +2 -2
- package/lib/rsi-local-resources.d.ts.map +1 -1
- package/lib/rsi-local-resources.js +5 -0
- package/lib/rsi-local-resources.js.map +1 -1
- package/lib/rsi-local-update-build.d.ts +25 -6
- package/lib/rsi-local-update-build.d.ts.map +1 -1
- package/lib/rsi-local-update-build.js +46 -7
- package/lib/rsi-local-update-build.js.map +1 -1
- package/lib/rsi-local-update.d.ts +5 -2
- package/lib/rsi-local-update.d.ts.map +1 -1
- package/lib/rsi-local-update.js +6 -5
- package/lib/rsi-local-update.js.map +1 -1
- package/lib/rsi-memory-learning.d.ts +7 -1
- package/lib/rsi-memory-learning.d.ts.map +1 -1
- package/lib/rsi-memory-learning.js +11 -4
- package/lib/rsi-memory-learning.js.map +1 -1
- package/lib/rsi-native-install.d.ts.map +1 -1
- package/lib/rsi-native-install.js +12 -1
- package/lib/rsi-native-install.js.map +1 -1
- package/lib/rsi-native-profile.d.ts +8 -0
- package/lib/rsi-native-profile.d.ts.map +1 -1
- package/lib/rsi-native-profile.js +102 -4
- package/lib/rsi-native-profile.js.map +1 -1
- package/lib/rsi-ordinary-use-learning.d.ts +60 -0
- package/lib/rsi-ordinary-use-learning.d.ts.map +1 -0
- package/lib/rsi-ordinary-use-learning.js +103 -0
- package/lib/rsi-ordinary-use-learning.js.map +1 -0
- package/lib/rsi-plugin-creation.d.ts +16 -1
- package/lib/rsi-plugin-creation.d.ts.map +1 -1
- package/lib/rsi-plugin-creation.js +60 -14
- package/lib/rsi-plugin-creation.js.map +1 -1
- package/lib/rsi-plugin-revision.d.ts +35 -0
- package/lib/rsi-plugin-revision.d.ts.map +1 -0
- package/lib/rsi-plugin-revision.js +200 -0
- package/lib/rsi-plugin-revision.js.map +1 -0
- package/lib/rsi-profile.d.ts +11 -0
- package/lib/rsi-profile.d.ts.map +1 -1
- package/lib/rsi-profile.js +109 -3
- package/lib/rsi-profile.js.map +1 -1
- package/lib/rsi-release-build.d.ts +24 -8
- package/lib/rsi-release-build.d.ts.map +1 -1
- package/lib/rsi-release-build.js +89 -37
- package/lib/rsi-release-build.js.map +1 -1
- package/lib/rsi-scanner-retirement-config.d.ts +34 -0
- package/lib/rsi-scanner-retirement-config.d.ts.map +1 -0
- package/lib/rsi-scanner-retirement-config.js +272 -0
- package/lib/rsi-scanner-retirement-config.js.map +1 -0
- package/lib/rsi-scanner-retirement-runtime.d.ts +23 -0
- package/lib/rsi-scanner-retirement-runtime.d.ts.map +1 -0
- package/lib/rsi-scanner-retirement-runtime.js +98 -0
- package/lib/rsi-scanner-retirement-runtime.js.map +1 -0
- package/lib/rsi-scanner-retirement-stage.d.ts +55 -0
- package/lib/rsi-scanner-retirement-stage.d.ts.map +1 -0
- package/lib/rsi-scanner-retirement-stage.js +183 -0
- package/lib/rsi-scanner-retirement-stage.js.map +1 -0
- package/lib/rsi-scanner-retirement-transition.d.ts +57 -0
- package/lib/rsi-scanner-retirement-transition.d.ts.map +1 -0
- package/lib/rsi-scanner-retirement-transition.js +320 -0
- package/lib/rsi-scanner-retirement-transition.js.map +1 -0
- package/lib/rsi-setup.d.ts +24 -0
- package/lib/rsi-setup.d.ts.map +1 -1
- package/lib/rsi-setup.js +122 -7
- package/lib/rsi-setup.js.map +1 -1
- package/lib/rsi-source-maintenance.d.ts +9 -1
- package/lib/rsi-source-maintenance.d.ts.map +1 -1
- package/lib/rsi-source-maintenance.js +64 -5
- package/lib/rsi-source-maintenance.js.map +1 -1
- package/lib/rsi-source-update.js +2 -2
- package/lib/rsi-source-update.js.map +1 -1
- package/lib/sdk.d.ts +3 -1
- package/lib/sdk.d.ts.map +1 -1
- package/lib/sdk.js +8 -2
- package/lib/sdk.js.map +1 -1
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +2 -0
- package/lib/service.js.map +1 -1
- package/lib/setup-profile.d.ts.map +1 -1
- package/lib/setup-profile.js +1 -0
- package/lib/setup-profile.js.map +1 -1
- package/lib/types.d.ts +4 -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 +21 -21
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type RsiBuildEnvironment } from './rsi-build.js';
|
|
2
|
+
import type { LinuxRsiBuildEnvironment } from './rsi-linux-runtime-bootstrap.js';
|
|
2
3
|
interface Pin {
|
|
3
4
|
path: string;
|
|
4
5
|
sha256: string;
|
|
@@ -18,24 +19,39 @@ export interface RsiReleaseBuildEnvironment {
|
|
|
18
19
|
image: string;
|
|
19
20
|
releaseBuild: RsiReleaseBuildConfig;
|
|
20
21
|
}
|
|
22
|
+
/** Native replacement for the immutable Docker image export: the release trees
|
|
23
|
+
* are copied from the independently verified schema 3 Linux runtime, and the
|
|
24
|
+
* receipt binds that runtime's content digest instead of an image reference. */
|
|
25
|
+
export interface NativeRsiReleaseBuildEnvironment {
|
|
26
|
+
schemaVersion: 2;
|
|
27
|
+
backend: 'linux-native';
|
|
28
|
+
sourceCommit: string;
|
|
29
|
+
runtimeDigest: string;
|
|
30
|
+
releaseBuild: RsiReleaseBuildConfig;
|
|
31
|
+
}
|
|
32
|
+
export type PreparedReleaseBuildEnvironment = RsiReleaseBuildEnvironment | NativeRsiReleaseBuildEnvironment;
|
|
33
|
+
export type ReleaseBuildInput = RsiBuildEnvironment | LinuxRsiBuildEnvironment;
|
|
21
34
|
export declare class RsiReleaseBuildUnavailableError extends Error {
|
|
22
35
|
constructor(message: string);
|
|
23
36
|
}
|
|
24
|
-
/** Verify existing exported inputs only; never creates a container
|
|
25
|
-
* missing export. The caller separately verifies the source
|
|
37
|
+
/** Verify existing exported inputs only; never creates a container, copies
|
|
38
|
+
* assets or repairs a missing export. The caller separately verifies the source
|
|
39
|
+
* image evidence or the schema 3 Linux runtime. */
|
|
26
40
|
export declare function readRsiReleaseBuildEnvironment(input: {
|
|
27
41
|
dshHome: string;
|
|
28
42
|
profile: string;
|
|
29
|
-
build:
|
|
43
|
+
build: ReleaseBuildInput;
|
|
30
44
|
signal?: AbortSignal;
|
|
31
|
-
}): Promise<
|
|
32
|
-
/** Caller holds the home lifecycle lock.
|
|
33
|
-
* already prepared immutable image
|
|
45
|
+
}): Promise<PreparedReleaseBuildEnvironment>;
|
|
46
|
+
/** Caller holds the home lifecycle lock. A Docker build exports fixed assets
|
|
47
|
+
* from the already prepared immutable image (the container is never started);
|
|
48
|
+
* a schema 3 native build copies the same three trees from the verified Linux
|
|
49
|
+
* runtime. Neither path needs a Docker CLI, daemon, socket or image. */
|
|
34
50
|
export declare function prepareRsiReleaseBuildEnvironment(input: {
|
|
35
51
|
dshHome: string;
|
|
36
52
|
profile: string;
|
|
37
|
-
build:
|
|
53
|
+
build: ReleaseBuildInput;
|
|
38
54
|
signal?: AbortSignal;
|
|
39
|
-
}): Promise<
|
|
55
|
+
}): Promise<PreparedReleaseBuildEnvironment>;
|
|
40
56
|
export {};
|
|
41
57
|
//# sourceMappingURL=rsi-release-build.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsi-release-build.d.ts","sourceRoot":"","sources":["../src/rsi-release-build.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rsi-release-build.d.ts","sourceRoot":"","sources":["../src/rsi-release-build.ts"],"names":[],"mappings":"AAOA,OAAO,EAA2B,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAClF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAEhF,UAAU,GAAG;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAC9C,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,EAAE,GAAG,CAAC;IAAC,aAAa,EAAE,GAAG,CAAC;IAAC,cAAc,EAAE,GAAG,CAAC;IAAC,cAAc,EAAE,GAAG,CAAA;IACpF,QAAQ,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC;CAC/C;AACD,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,CAAC,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,qBAAqB,CAAA;CAC3F;AACD;;gFAEgF;AAChF,MAAM,WAAW,gCAAgC;IAC/C,aAAa,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;IAC/D,aAAa,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,qBAAqB,CAAA;CAC3D;AACD,MAAM,MAAM,+BAA+B,GAAG,0BAA0B,GAAG,gCAAgC,CAAA;AAC3G,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,wBAAwB,CAAA;AAK9E,qBAAa,+BAAgC,SAAQ,KAAK;gBAC5C,OAAO,EAAE,MAAM;CAC5B;AAmBD;;mDAEmD;AACnD,wBAAsB,8BAA8B,CAAC,KAAK,EAAE;IAC1D,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CACjF,GAAG,OAAO,CAAC,+BAA+B,CAAC,CA2B3C;AA6CD;;;wEAGwE;AACxE,wBAAsB,iCAAiC,CAAC,KAAK,EAAE;IAC7D,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CACjF,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAyG3C"}
|
package/lib/rsi-release-build.js
CHANGED
|
@@ -7,11 +7,12 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
7
7
|
return path;
|
|
8
8
|
};
|
|
9
9
|
import { createHash, randomUUID } from 'node:crypto';
|
|
10
|
-
import { chmod, copyFile, lstat, mkdir, mkdtemp, readdir, rename, rm } from 'node:fs/promises';
|
|
10
|
+
import { chmod, copyFile, cp, lstat, mkdir, mkdtemp, readdir, rename, rm } from 'node:fs/promises';
|
|
11
11
|
import { createRequire } from 'node:module';
|
|
12
12
|
import { dirname, isAbsolute, join, resolve } from 'node:path';
|
|
13
13
|
import { pathToFileURL } from 'node:url';
|
|
14
14
|
import { isDeepStrictEqual } from 'node:util';
|
|
15
|
+
import { linuxRuntimeDigest, validateLinuxRuntime, verifyLinuxRuntime } from '@dsh-enhanced/assistant-isolation';
|
|
15
16
|
import { rsiBuildResources as io } from './rsi-build.js';
|
|
16
17
|
export class RsiReleaseBuildUnavailableError extends Error {
|
|
17
18
|
constructor(message) { super(`rsi release build unavailable: ${message}`); }
|
|
@@ -27,8 +28,12 @@ async function inspect(root) {
|
|
|
27
28
|
return adapter.inspectLocalReleaseBuildEnvironment({ pnpmRoot: join(root, 'toolchain'),
|
|
28
29
|
storeRoot: join(root, 'store'), cacheRoot: join(root, 'cache') });
|
|
29
30
|
}
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
function nativeRuntime(build) {
|
|
32
|
+
return build.schemaVersion === 3 && build.backend === 'linux-native' ? build.runtime : undefined;
|
|
33
|
+
}
|
|
34
|
+
/** Verify existing exported inputs only; never creates a container, copies
|
|
35
|
+
* assets or repairs a missing export. The caller separately verifies the source
|
|
36
|
+
* image evidence or the schema 3 Linux runtime. */
|
|
32
37
|
export async function readRsiReleaseBuildEnvironment(input) {
|
|
33
38
|
if (!isAbsolute(input.dshHome) || resolve(input.dshHome) !== input.dshHome
|
|
34
39
|
|| !/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u.test(input.profile))
|
|
@@ -42,16 +47,28 @@ export async function readRsiReleaseBuildEnvironment(input) {
|
|
|
42
47
|
fail('existing release environment is incomplete');
|
|
43
48
|
const receipt = JSON.parse((await io.readStable(join(final, 'bootstrap.json'), 65_536, true)).toString('utf8'));
|
|
44
49
|
const { receiptDigest, ...content } = receipt;
|
|
45
|
-
|
|
46
|
-
|
|
50
|
+
const matchesInput = receipt.schemaVersion === 1
|
|
51
|
+
? input.build.schemaVersion === 1 && receipt.image === input.build.sourceBuild.image
|
|
52
|
+
: receipt.schemaVersion === 2 && (() => {
|
|
53
|
+
const runtime = nativeRuntime(input.build);
|
|
54
|
+
return runtime !== undefined && receipt.backend === 'linux-native'
|
|
55
|
+
&& receipt.runtimeDigest === linuxRuntimeDigest(runtime);
|
|
56
|
+
})();
|
|
57
|
+
// A Docker plan may never be continued by a native receipt or the reverse.
|
|
58
|
+
if (!matchesInput || receipt.dshHome !== input.dshHome || receipt.profile !== input.profile
|
|
59
|
+
|| receipt.sourceCommit !== input.build.sourceCommit
|
|
47
60
|
|| digest(JSON.stringify(content)) !== receiptDigest
|
|
48
61
|
|| !isDeepStrictEqual(receipt.releaseBuild, await inspect(final)))
|
|
49
62
|
fail('release environment differs from its receipt');
|
|
50
63
|
input.signal?.throwIfAborted();
|
|
51
|
-
return
|
|
64
|
+
return receipt.schemaVersion === 1
|
|
65
|
+
? { schemaVersion: 1, sourceCommit: receipt.sourceCommit, image: receipt.image, releaseBuild: receipt.releaseBuild }
|
|
66
|
+
: { schemaVersion: 2, backend: 'linux-native', sourceCommit: receipt.sourceCommit,
|
|
67
|
+
runtimeDigest: receipt.runtimeDigest, releaseBuild: receipt.releaseBuild };
|
|
52
68
|
}
|
|
53
|
-
// Docker cp preserves image mode bits
|
|
54
|
-
//
|
|
69
|
+
// Docker cp preserves image mode bits and the native runtime trees are already
|
|
70
|
+
// owner-private. Make exported resources private, reject links/devices, and
|
|
71
|
+
// separate any hard links before the adapter pins the trees.
|
|
55
72
|
async function harden(root, signal) {
|
|
56
73
|
let entries = 0, bytes = 0;
|
|
57
74
|
const visit = async (path) => {
|
|
@@ -87,16 +104,42 @@ async function harden(root, signal) {
|
|
|
87
104
|
};
|
|
88
105
|
await visit(root);
|
|
89
106
|
}
|
|
90
|
-
/**
|
|
91
|
-
*
|
|
107
|
+
/** Copy the three release trees from the verified immutable Linux runtime. The
|
|
108
|
+
* runtime is the native equivalent of the never-started image: its whole-tree
|
|
109
|
+
* digest is rechecked before any byte is read, and copies never follow links. */
|
|
110
|
+
async function exportNativeAssets(assets, runtime, signal) {
|
|
111
|
+
await verifyLinuxRuntime(runtime, signal);
|
|
112
|
+
for (const [source, target] of [[runtime.nativePnpmRoot, join(assets, 'toolchain')],
|
|
113
|
+
[runtime.storePath, join(assets, 'store')], [runtime.cachePath, join(assets, 'cache')]]) {
|
|
114
|
+
const item = await lstat(source);
|
|
115
|
+
if (!item.isDirectory() || item.isSymbolicLink() || process.getuid && item.uid !== process.getuid())
|
|
116
|
+
fail('runtime release tree is unsafe');
|
|
117
|
+
await cp(source, target, { recursive: true, errorOnExist: true, force: false, verbatimSymlinks: true });
|
|
118
|
+
}
|
|
119
|
+
// A freshly prepared runtime store has no project registry yet; the adapter
|
|
120
|
+
// requires one and every release keeps its own, never stale runtime links.
|
|
121
|
+
await mkdir(join(assets, 'store', 'v11', 'projects'), { recursive: true, mode: 0o700 });
|
|
122
|
+
}
|
|
123
|
+
/** Caller holds the home lifecycle lock. A Docker build exports fixed assets
|
|
124
|
+
* from the already prepared immutable image (the container is never started);
|
|
125
|
+
* a schema 3 native build copies the same three trees from the verified Linux
|
|
126
|
+
* runtime. Neither path needs a Docker CLI, daemon, socket or image. */
|
|
92
127
|
export async function prepareRsiReleaseBuildEnvironment(input) {
|
|
128
|
+
const dockerBuild = input.build.schemaVersion === 1 ? input.build : undefined;
|
|
129
|
+
const runtime = nativeRuntime(input.build);
|
|
130
|
+
if ((dockerBuild === undefined) === (runtime === undefined))
|
|
131
|
+
fail('unsupported release build backend');
|
|
93
132
|
if (!isAbsolute(input.dshHome) || resolve(input.dshHome) !== input.dshHome
|
|
94
133
|
|| !/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u.test(input.profile)
|
|
95
|
-
||
|
|
96
|
-
|| !/^sha256:[a-f0-9]{64}$/u.test(input.build.sourceBuild.image))
|
|
134
|
+
|| !/^[a-f0-9]{40}$/u.test(input.build.sourceCommit))
|
|
97
135
|
fail('invalid resource binding');
|
|
98
|
-
if (
|
|
99
|
-
|
|
136
|
+
if (dockerBuild && !/^sha256:[a-f0-9]{64}$/u.test(dockerBuild.sourceBuild.image))
|
|
137
|
+
fail('invalid resource binding');
|
|
138
|
+
if (runtime)
|
|
139
|
+
validateLinuxRuntime(runtime);
|
|
140
|
+
if (process.platform !== 'linux' || !['x64', 'arm64'].includes(process.arch)) {
|
|
141
|
+
throw new RsiReleaseBuildUnavailableError('Linux x64/arm64 is required');
|
|
142
|
+
}
|
|
100
143
|
await io.directory(input.dshHome, false);
|
|
101
144
|
for (const path of ['/usr/bin/bwrap', '/usr/bin/tar']) {
|
|
102
145
|
try {
|
|
@@ -117,7 +160,7 @@ export async function prepareRsiReleaseBuildEnvironment(input) {
|
|
|
117
160
|
throw error;
|
|
118
161
|
}
|
|
119
162
|
await io.directory(parent);
|
|
120
|
-
const final = join(parent, input.profile)
|
|
163
|
+
const final = join(parent, input.profile);
|
|
121
164
|
const signal = AbortSignal.any([input.signal ?? new AbortController().signal, AbortSignal.timeout(600_000)]);
|
|
122
165
|
try {
|
|
123
166
|
await lstat(final);
|
|
@@ -139,11 +182,11 @@ export async function prepareRsiReleaseBuildEnvironment(input) {
|
|
|
139
182
|
const stage = await mkdtemp(join(parent, `.${input.profile}-stage-`));
|
|
140
183
|
await chmod(stage, 0o700);
|
|
141
184
|
const assets = join(stage, 'assets'), token = randomUUID(), container = `dsh-release-assets-${token}`;
|
|
142
|
-
const docker =
|
|
185
|
+
const docker = dockerBuild?.sourceBuild.dockerPath;
|
|
143
186
|
let containerMayExist = false, claimed;
|
|
144
187
|
const run = (args, cleanup = false) => io.command(docker, args, io.isolatedEnvironment(stage), cleanup ? new AbortController().signal : signal, cleanup ? 30_000 : 180_000);
|
|
145
188
|
const cleanupContainer = async () => {
|
|
146
|
-
if (!containerMayExist)
|
|
189
|
+
if (!containerMayExist || !docker)
|
|
147
190
|
return;
|
|
148
191
|
// Generated name and unguessable label bind cleanup even if create's reply
|
|
149
192
|
// was lost. Do not delete a replacement container with another label.
|
|
@@ -161,24 +204,30 @@ export async function prepareRsiReleaseBuildEnvironment(input) {
|
|
|
161
204
|
try {
|
|
162
205
|
await mkdir(join(stage, 'docker-config'), { mode: 0o700 });
|
|
163
206
|
await mkdir(assets, { mode: 0o700 });
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
207
|
+
if (dockerBuild) {
|
|
208
|
+
const image = dockerBuild.sourceBuild.image;
|
|
209
|
+
for (const name of ['toolchain', 'store', 'cache'])
|
|
210
|
+
await mkdir(join(assets, name), { mode: 0o700 });
|
|
211
|
+
await mkdir(join(assets, 'store', 'v11', 'files'), { recursive: true, mode: 0o700 });
|
|
212
|
+
containerMayExist = true;
|
|
213
|
+
await run(['create', '--name', container, '--label', `org.dsh.release-assets=${token}`,
|
|
214
|
+
'--network', 'none', '--read-only', '--entrypoint', '/bin/false', image]);
|
|
215
|
+
for (const [source, target] of [
|
|
216
|
+
['/opt/pnpm-native/node_modules/@pnpm/exe/.', join(assets, 'toolchain')],
|
|
217
|
+
['/usr/local/bin/node', join(assets, 'toolchain', 'node')],
|
|
218
|
+
// The image's projects registry points at its deleted /seed checkout.
|
|
219
|
+
// Each release uses a fresh writable registry, never those stale links.
|
|
220
|
+
['/opt/pnpm-store/v11/files/.', join(assets, 'store', 'v11', 'files')],
|
|
221
|
+
['/opt/pnpm-store/v11/index.db', join(assets, 'store', 'v11', 'index.db')],
|
|
222
|
+
['/opt/pnpm-cache/.', join(assets, 'cache')],
|
|
223
|
+
])
|
|
224
|
+
await run(['cp', `${container}:${source}`, target]);
|
|
225
|
+
await cleanupContainer();
|
|
226
|
+
await mkdir(join(assets, 'store', 'v11', 'projects'), { recursive: true, mode: 0o700 });
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
await exportNativeAssets(assets, runtime, signal);
|
|
230
|
+
}
|
|
182
231
|
await harden(assets, signal);
|
|
183
232
|
const toolchain = join(assets, 'toolchain');
|
|
184
233
|
const environment = { PATH: `${toolchain}:/usr/bin:/bin`, HOME: stage, LANG: 'C', LC_ALL: 'C' };
|
|
@@ -193,8 +242,11 @@ export async function prepareRsiReleaseBuildEnvironment(input) {
|
|
|
193
242
|
claimed = { dev: identity.dev, ino: identity.ino };
|
|
194
243
|
for (const name of ['toolchain', 'store', 'cache'])
|
|
195
244
|
await rename(join(assets, name), join(final, name));
|
|
196
|
-
const result =
|
|
197
|
-
|
|
245
|
+
const result = dockerBuild
|
|
246
|
+
? { schemaVersion: 1, sourceCommit: input.build.sourceCommit,
|
|
247
|
+
image: dockerBuild.sourceBuild.image, releaseBuild: await inspect(final) }
|
|
248
|
+
: { schemaVersion: 2, backend: 'linux-native', sourceCommit: input.build.sourceCommit,
|
|
249
|
+
runtimeDigest: linuxRuntimeDigest(runtime), releaseBuild: await inspect(final) };
|
|
198
250
|
const content = { ...result, dshHome: input.dshHome, profile: input.profile };
|
|
199
251
|
await io.writeExclusive(join(final, 'bootstrap.json'), JSON.stringify({ ...content, receiptDigest: digest(JSON.stringify(content)) }));
|
|
200
252
|
await io.syncDirectory(final);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsi-release-build.js","sourceRoot":"","sources":["../src/rsi-release-build.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rsi-release-build.js","sourceRoot":"","sources":["../src/rsi-release-build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { MemoryLearningOwner } from '@dsh-enhanced/assistant-growth-contract';
|
|
2
|
+
import type { Config as AutomationsConfig } from '@dsh-enhanced/assistant-automations';
|
|
3
|
+
import type { Config as PolicyConfig } from '@dsh-enhanced/assistant-policy';
|
|
4
|
+
import type { RevokedOwnerRouteQuery } from '@dsh-enhanced/assistant-delivery';
|
|
5
|
+
import type { ScannerRetirementTarget } from './rsi-scanner-retirement-transition.js';
|
|
6
|
+
export interface ScannerRetirementConfigurationInput {
|
|
7
|
+
readonly effectiveConfig: string;
|
|
8
|
+
readonly dshHome: string;
|
|
9
|
+
readonly profile: string;
|
|
10
|
+
readonly owner: MemoryLearningOwner;
|
|
11
|
+
}
|
|
12
|
+
export interface ScannerRetirementConfiguration {
|
|
13
|
+
readonly effectiveConfigDigest: string;
|
|
14
|
+
readonly ownerQuery: Readonly<RevokedOwnerRouteQuery>;
|
|
15
|
+
readonly automationsDatabasePath: string;
|
|
16
|
+
readonly policyConfig: Readonly<PolicyConfig>;
|
|
17
|
+
readonly automationsConfig: Readonly<AutomationsConfig>;
|
|
18
|
+
readonly targets: readonly ScannerRetirementTarget[];
|
|
19
|
+
}
|
|
20
|
+
export declare class ScannerRetirementConfigurationError extends Error {
|
|
21
|
+
constructor();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Pure derivation from the target profile's frozen, DSH-validated effective config.
|
|
25
|
+
* Revalidates provider identity, realms, bound paths and every scanner owner scope.
|
|
26
|
+
* It does not revalidate the entire Control Plane grant chain: its full normalizer
|
|
27
|
+
* performs I/O and rejects some expired grants. Expiry cannot forbid permanent
|
|
28
|
+
* retirement, and this function creates no grant or write/execution authority.
|
|
29
|
+
* Optional peer validators/digests are resolved only for lanes actually present.
|
|
30
|
+
* Service configs preserve all effective values; the parent must separately bind
|
|
31
|
+
* this digest to its transaction and disable timers only in its temporary Context.
|
|
32
|
+
*/
|
|
33
|
+
export declare function deriveScannerRetirementConfiguration(input: ScannerRetirementConfigurationInput): ScannerRetirementConfiguration;
|
|
34
|
+
//# sourceMappingURL=rsi-scanner-retirement-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rsi-scanner-retirement-config.d.ts","sourceRoot":"","sources":["../src/rsi-scanner-retirement-config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAClF,OAAO,KAAK,EAAE,MAAM,IAAI,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AACtF,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC5E,OAAO,KAAK,EAAuB,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAKnG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAErF,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAA;CACpC;AACD,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAA;IACtC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAA;IACrD,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAA;IACxC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAA;IAC7C,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;IACvD,QAAQ,CAAC,OAAO,EAAE,SAAS,uBAAuB,EAAE,CAAA;CACrD;AACD,qBAAa,mCAAoC,SAAQ,KAAK;;CAE7D;AAmHD;;;;;;;;;GASG;AACH,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,mCAAmC,GAAG,8BAA8B,CAkF/H"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { isAbsolute, join, resolve } from 'node:path';
|
|
4
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
5
|
+
import { growthObjectDigest, validateMemoryLearningOwner } from '@dsh-enhanced/assistant-growth-contract';
|
|
6
|
+
import { externalPrincipalId, ownerRouteAuthorityHash } from '@dsh-enhanced/assistant-delivery';
|
|
7
|
+
import { isAlias, isMap, isScalar, isSeq, parseDocument } from 'yaml';
|
|
8
|
+
import { getRsiMemoryLearningValidators } from './rsi-memory-learning.js';
|
|
9
|
+
export class ScannerRetirementConfigurationError extends Error {
|
|
10
|
+
constructor() { super('scanner retirement configuration is unavailable'); this.name = 'ScannerRetirementConfigurationError'; }
|
|
11
|
+
}
|
|
12
|
+
const requirePeer = createRequire(import.meta.url);
|
|
13
|
+
const modules = {
|
|
14
|
+
personal: 'personal-assistant', delivery: 'assistant-delivery', lark: 'lark-channel',
|
|
15
|
+
growth: 'assistant-growth-driver', control: 'plugin-control-plane', memory: 'assistant-memory-learning', verifier: 'assistant-verifier',
|
|
16
|
+
};
|
|
17
|
+
function fail() { throw new ScannerRetirementConfigurationError(); }
|
|
18
|
+
function object(value) {
|
|
19
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
20
|
+
return fail();
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
function absolute(value) {
|
|
24
|
+
if (typeof value !== 'string' || value === '/' || !isAbsolute(value) || resolve(value) !== value
|
|
25
|
+
|| value.normalize('NFC') !== value || value.trim() !== value || /[\p{Cc}]/u.test(value))
|
|
26
|
+
fail();
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
function freeze(value) {
|
|
30
|
+
if (value && typeof value === 'object' && !Object.isFrozen(value)) {
|
|
31
|
+
Object.values(value).forEach(freeze);
|
|
32
|
+
Object.freeze(value);
|
|
33
|
+
}
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
function homeExpression(value, home) {
|
|
37
|
+
if (typeof value !== 'string')
|
|
38
|
+
return fail();
|
|
39
|
+
const match = /^dshHomePath\((['"])([^'"\\]+)\1\)$/u.exec(value);
|
|
40
|
+
if (!match || isAbsolute(match[2]) || match[2].split('/').some(part => !part || part === '.' || part === '..'))
|
|
41
|
+
fail();
|
|
42
|
+
return absolute(join(home, match[2]));
|
|
43
|
+
}
|
|
44
|
+
function plain(node, home) {
|
|
45
|
+
if (node === null || node === undefined)
|
|
46
|
+
return null;
|
|
47
|
+
if (isAlias(node))
|
|
48
|
+
return fail();
|
|
49
|
+
if (isScalar(node)) {
|
|
50
|
+
if (node.tag === 'tag:yaml.org,2002:js')
|
|
51
|
+
return homeExpression(node.value, home);
|
|
52
|
+
if (node.tag || !['string', 'number', 'boolean', 'object'].includes(typeof node.value)
|
|
53
|
+
|| typeof node.value === 'number' && !Number.isFinite(node.value))
|
|
54
|
+
return fail();
|
|
55
|
+
return node.value;
|
|
56
|
+
}
|
|
57
|
+
if (node.tag)
|
|
58
|
+
return fail();
|
|
59
|
+
if (isSeq(node))
|
|
60
|
+
return node.items.map(item => plain(item, home));
|
|
61
|
+
if (!isMap(node))
|
|
62
|
+
return fail();
|
|
63
|
+
const result = {};
|
|
64
|
+
for (const pair of node.items) {
|
|
65
|
+
if (!isScalar(pair.key) || pair.key.tag || typeof pair.key.value !== 'string'
|
|
66
|
+
|| ['__proto__', 'constructor', 'prototype', '__jsExpr'].includes(pair.key.value)
|
|
67
|
+
|| Object.hasOwn(result, pair.key.value))
|
|
68
|
+
fail();
|
|
69
|
+
result[pair.key.value] = plain(pair.value, home);
|
|
70
|
+
}
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
function rows(effective) {
|
|
74
|
+
if (typeof effective !== 'string' || Buffer.byteLength(effective) > 8 * 1024 * 1024)
|
|
75
|
+
return fail();
|
|
76
|
+
const document = parseDocument(effective, { uniqueKeys: true });
|
|
77
|
+
if (document.errors.length || !isSeq(document.contents))
|
|
78
|
+
return fail();
|
|
79
|
+
const result = new Map();
|
|
80
|
+
for (const row of document.contents.items) {
|
|
81
|
+
if (!isMap(row))
|
|
82
|
+
return fail();
|
|
83
|
+
const id = row.get('id');
|
|
84
|
+
if (typeof id !== 'string' || id.normalize('NFC').trim() !== id || !id || result.has(id))
|
|
85
|
+
fail();
|
|
86
|
+
result.set(id, row);
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
function configured(entries, name, home, required = false) {
|
|
91
|
+
const id = `dsh-enhanced-${name}`, packageName = `@dsh-enhanced/${name}`;
|
|
92
|
+
const candidates = [...entries.values()].filter(row => row.get('name') === packageName || row.get('id') === id);
|
|
93
|
+
if (candidates.length === 0) {
|
|
94
|
+
if (required)
|
|
95
|
+
fail();
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
if (candidates.length !== 1)
|
|
99
|
+
return fail();
|
|
100
|
+
const row = candidates[0];
|
|
101
|
+
const unconfiguredMemory = name === modules.memory && row.get('disabled') === true && !row.has('config');
|
|
102
|
+
if (row.get('id') !== id || row.get('name') !== packageName
|
|
103
|
+
|| !unconfiguredMemory && row.get('disabled') !== undefined && row.get('disabled') !== false
|
|
104
|
+
|| row.items.some(pair => !isScalar(pair.key) || !['id', 'name', 'config', 'disabled', 'inject'].includes(String(pair.key.value))))
|
|
105
|
+
fail();
|
|
106
|
+
// Array injection is the stock bundle dependency gate. Object injection,
|
|
107
|
+
// isolate/intercept/filter/group or future metadata may change service realms.
|
|
108
|
+
if (row.has('inject')) {
|
|
109
|
+
const inject = plain(row.get('inject', true), home);
|
|
110
|
+
if (!Array.isArray(inject) || inject.some(value => typeof value !== 'string' || !value)
|
|
111
|
+
|| new Set(inject).size !== inject.length)
|
|
112
|
+
fail();
|
|
113
|
+
}
|
|
114
|
+
// The installed stock memory bundle has no frozen grant or scanner identity.
|
|
115
|
+
// A disabled row WITH configuration cannot silently disappear from this proof.
|
|
116
|
+
if (unconfiguredMemory)
|
|
117
|
+
return undefined;
|
|
118
|
+
return object(plain(row.get('config', true), home));
|
|
119
|
+
}
|
|
120
|
+
function scope(value, owner) {
|
|
121
|
+
if (!isDeepStrictEqual(object(value), { ownerRouteId: owner.authorityId, principalId: owner.principalId,
|
|
122
|
+
workspace: owner.workspace, preset: owner.agentPreset }))
|
|
123
|
+
fail();
|
|
124
|
+
}
|
|
125
|
+
function canonicalAuthority(value) {
|
|
126
|
+
const authority = object(value);
|
|
127
|
+
const hash = ownerRouteAuthorityHash(authority);
|
|
128
|
+
const ordered = { id: authority.id,
|
|
129
|
+
conversation: { channel: authority.conversation.channel, account: authority.conversation.account, tenant: authority.conversation.tenant,
|
|
130
|
+
kind: authority.conversation.kind, chat: authority.conversation.chat,
|
|
131
|
+
...(authority.conversation.thread === undefined ? {} : { thread: authority.conversation.thread }) },
|
|
132
|
+
principal: { channel: authority.principal.channel, account: authority.principal.account, tenant: authority.principal.tenant, user: authority.principal.user },
|
|
133
|
+
workspace: authority.workspace, agentPreset: authority.agentPreset, policyRef: authority.policyRef, minimumGeneration: authority.minimumGeneration };
|
|
134
|
+
if (createHash('sha256').update(JSON.stringify(ordered)).digest('hex') !== hash)
|
|
135
|
+
fail();
|
|
136
|
+
return ordered;
|
|
137
|
+
}
|
|
138
|
+
function checkDatabases(configs) {
|
|
139
|
+
const seen = new Set();
|
|
140
|
+
function visit(value) {
|
|
141
|
+
if (!value || typeof value !== 'object')
|
|
142
|
+
return;
|
|
143
|
+
for (const [key, child] of Object.entries(value)) {
|
|
144
|
+
if (key === 'databasePath') {
|
|
145
|
+
const path = absolute(child);
|
|
146
|
+
if (seen.has(path))
|
|
147
|
+
fail();
|
|
148
|
+
seen.add(path);
|
|
149
|
+
}
|
|
150
|
+
else
|
|
151
|
+
visit(child);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
configs.forEach(visit);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Pure derivation from the target profile's frozen, DSH-validated effective config.
|
|
158
|
+
* Revalidates provider identity, realms, bound paths and every scanner owner scope.
|
|
159
|
+
* It does not revalidate the entire Control Plane grant chain: its full normalizer
|
|
160
|
+
* performs I/O and rejects some expired grants. Expiry cannot forbid permanent
|
|
161
|
+
* retirement, and this function creates no grant or write/execution authority.
|
|
162
|
+
* Optional peer validators/digests are resolved only for lanes actually present.
|
|
163
|
+
* Service configs preserve all effective values; the parent must separately bind
|
|
164
|
+
* this digest to its transaction and disable timers only in its temporary Context.
|
|
165
|
+
*/
|
|
166
|
+
export function deriveScannerRetirementConfiguration(input) {
|
|
167
|
+
try {
|
|
168
|
+
if (Object.keys(input).sort().join(',') !== 'dshHome,effectiveConfig,owner,profile')
|
|
169
|
+
fail();
|
|
170
|
+
const home = absolute(input.dshHome);
|
|
171
|
+
if (typeof input.profile !== 'string' || !/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u.test(input.profile))
|
|
172
|
+
fail();
|
|
173
|
+
const owner = validateMemoryLearningOwner(input.owner);
|
|
174
|
+
if (!/^principal_[0-9a-f-]{8,}$/u.test(owner.principalRecordId))
|
|
175
|
+
fail();
|
|
176
|
+
const entries = rows(input.effectiveConfig);
|
|
177
|
+
// Only the existing embedded target-profile composition is supported.
|
|
178
|
+
if ([...entries.values()].some(row => ['@dsh-enhanced/assistant-policy', '@dsh-enhanced/assistant-automations'].includes(String(row.get('name')))
|
|
179
|
+
|| ['dsh-enhanced-assistant-policy', 'dsh-enhanced-assistant-automations'].includes(String(row.get('id')))))
|
|
180
|
+
fail();
|
|
181
|
+
const personal = configured(entries, modules.personal, home, true);
|
|
182
|
+
const delivery = configured(entries, modules.delivery, home, true);
|
|
183
|
+
const lark = configured(entries, modules.lark, home, true);
|
|
184
|
+
const growth = configured(entries, modules.growth, home);
|
|
185
|
+
const control = configured(entries, modules.control, home);
|
|
186
|
+
const memory = configured(entries, modules.memory, home);
|
|
187
|
+
const verifier = configured(entries, modules.verifier, home);
|
|
188
|
+
for (const candidate of [personal.personalMemory && object(personal.personalMemory).automaticLearning,
|
|
189
|
+
verifier?.sourceReviews, verifier?.memoryReviews]) {
|
|
190
|
+
if (candidate !== undefined && !isDeepStrictEqual(object(candidate).owner, owner))
|
|
191
|
+
fail();
|
|
192
|
+
}
|
|
193
|
+
const policyConfig = object(personal.assistantPolicy);
|
|
194
|
+
const automationsConfig = object(personal.assistantAutomations);
|
|
195
|
+
absolute(policyConfig.databasePath);
|
|
196
|
+
absolute(automationsConfig.databasePath);
|
|
197
|
+
absolute(automationsConfig.runsPath);
|
|
198
|
+
const databasePath = absolute(delivery.databasePath);
|
|
199
|
+
if (!Array.isArray(delivery.ownerRoutes))
|
|
200
|
+
fail();
|
|
201
|
+
const authorities = delivery.ownerRoutes.map(canonicalAuthority);
|
|
202
|
+
if (new Set(authorities.map(route => route.id)).size !== authorities.length)
|
|
203
|
+
fail();
|
|
204
|
+
const matching = authorities.filter(route => route.id === owner.authorityId);
|
|
205
|
+
if (matching.length !== 1)
|
|
206
|
+
fail();
|
|
207
|
+
const authority = matching[0];
|
|
208
|
+
if (authority.id !== owner.authorityId || ownerRouteAuthorityHash(authority) !== owner.authorityHash
|
|
209
|
+
|| externalPrincipalId(authority.principal) !== owner.principalId || authority.workspace !== owner.workspace
|
|
210
|
+
|| authority.agentPreset !== owner.agentPreset || authority.principal.channel !== 'lark'
|
|
211
|
+
|| authority.conversation.kind !== 'dm' || authority.conversation.thread !== undefined
|
|
212
|
+
|| absolute(delivery.defaultWorkspace) !== owner.workspace || delivery.defaultAgentPreset !== owner.agentPreset
|
|
213
|
+
|| delivery.policyRef !== undefined && delivery.policyRef !== authority.policyRef
|
|
214
|
+
|| lark.enabled !== true || lark.account !== authority.principal.account || lark.tenant !== authority.principal.tenant)
|
|
215
|
+
fail();
|
|
216
|
+
const targets = [];
|
|
217
|
+
if (growth) {
|
|
218
|
+
// Growth's normalizer is structural only; no filesystem/time validation.
|
|
219
|
+
const peer = requirePeer('@dsh-enhanced/assistant-growth-driver');
|
|
220
|
+
const normalized = peer.normalizeConfig(growth);
|
|
221
|
+
if (!normalized.enabled)
|
|
222
|
+
fail();
|
|
223
|
+
if (normalized.scope !== null)
|
|
224
|
+
scope(normalized.scope, owner);
|
|
225
|
+
if (normalized.usageLearning.enabled) {
|
|
226
|
+
scope(normalized.scope, owner);
|
|
227
|
+
// These scope objects contain only canonical strings, so the shared
|
|
228
|
+
// canonical JSON equals acceptanceDigest; real runtime tests fence this.
|
|
229
|
+
targets.push({ owner: 'assistant-growth-usage', automationId: `usage-scan-${growthObjectDigest(normalized.scope)}` });
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (control) {
|
|
233
|
+
if (control.adoptionCoordinator !== undefined)
|
|
234
|
+
fail();
|
|
235
|
+
const peer = requirePeer('@dsh-enhanced/plugin-control-plane');
|
|
236
|
+
if (control.sourceJobs !== undefined) {
|
|
237
|
+
const jobs = object(control.sourceJobs);
|
|
238
|
+
scope({ ownerRouteId: jobs.ownerRouteId, principalId: jobs.principalId, workspace: jobs.workspace, preset: jobs.preset }, owner);
|
|
239
|
+
}
|
|
240
|
+
if (control.runtimeObserver !== undefined && absolute(object(control.runtimeObserver).profilePath) !== join(home, 'profiles', input.profile))
|
|
241
|
+
fail();
|
|
242
|
+
if (control.sourceAdoptions !== undefined && object(control.sourceAdoptions).profile !== input.profile)
|
|
243
|
+
fail();
|
|
244
|
+
for (const [key, scannerOwner, prefix] of [
|
|
245
|
+
['taskObservations', 'plugin-control-plane-task-observations', 'task-observation-scan-'],
|
|
246
|
+
['liveQualification', 'plugin-control-plane-live-qualification', 'live-qualification-scan-'],
|
|
247
|
+
])
|
|
248
|
+
if (control[key] !== undefined) {
|
|
249
|
+
const scanner = object(control[key]);
|
|
250
|
+
scope(scanner.scope, owner);
|
|
251
|
+
const profilePath = absolute(scanner.profilePath);
|
|
252
|
+
if (profilePath !== join(home, 'profiles', input.profile))
|
|
253
|
+
fail();
|
|
254
|
+
targets.push({ owner: scannerOwner, automationId: `${prefix}${peer.controlPlaneDigest({ scope: scanner.scope, profilePath })}` });
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
if (memory) {
|
|
258
|
+
const validated = getRsiMemoryLearningValidators().validateLearningConfig(memory);
|
|
259
|
+
if (!isDeepStrictEqual(validated.owner, owner))
|
|
260
|
+
fail();
|
|
261
|
+
targets.push({ owner: 'assistant-memory-learning', automationId: `memory-scan-${growthObjectDigest([validated.authorityId, validated.owner])}` });
|
|
262
|
+
}
|
|
263
|
+
checkDatabases([personal, delivery, ...[growth, control, memory].filter((value) => value !== undefined)]);
|
|
264
|
+
return freeze({ effectiveConfigDigest: createHash('sha256').update(input.effectiveConfig).digest('hex'),
|
|
265
|
+
ownerQuery: { databasePath, authority, principalRecordId: owner.principalRecordId, frozenPrincipalVersion: owner.principalVersion },
|
|
266
|
+
automationsDatabasePath: automationsConfig.databasePath, policyConfig, automationsConfig, targets });
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
return fail();
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=rsi-scanner-retirement-config.js.map
|