@dsh-enhanced/lark-channel 0.1.65 → 0.1.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +25 -7
  2. package/cordis.patch.yml +1 -0
  3. package/docs/operations.md +1 -1
  4. package/docs/progress-security.md +3 -0
  5. package/docs/rsi-setup.md +13 -7
  6. package/docs/setup.md +2 -1
  7. package/lib/adapter.d.ts +8 -0
  8. package/lib/adapter.d.ts.map +1 -1
  9. package/lib/adapter.js +44 -7
  10. package/lib/adapter.js.map +1 -1
  11. package/lib/config.d.ts +6 -0
  12. package/lib/config.d.ts.map +1 -1
  13. package/lib/config.js +54 -8
  14. package/lib/config.js.map +1 -1
  15. package/lib/group-thread.d.ts +9 -0
  16. package/lib/group-thread.d.ts.map +1 -1
  17. package/lib/group-thread.js +16 -2
  18. package/lib/group-thread.js.map +1 -1
  19. package/lib/index.d.ts +5 -0
  20. package/lib/index.d.ts.map +1 -1
  21. package/lib/index.js +24 -1
  22. package/lib/index.js.map +1 -1
  23. package/lib/normalize.d.ts.map +1 -1
  24. package/lib/normalize.js +7 -4
  25. package/lib/normalize.js.map +1 -1
  26. package/lib/progress.d.ts +11 -1
  27. package/lib/progress.d.ts.map +1 -1
  28. package/lib/progress.js +13 -1
  29. package/lib/progress.js.map +1 -1
  30. package/lib/rsi-authority-runtime.d.ts +1 -0
  31. package/lib/rsi-authority-runtime.d.ts.map +1 -1
  32. package/lib/rsi-authority-runtime.js +17 -7
  33. package/lib/rsi-authority-runtime.js.map +1 -1
  34. package/lib/rsi-bootstrap-manifest.d.ts +17 -5
  35. package/lib/rsi-bootstrap-manifest.d.ts.map +1 -1
  36. package/lib/rsi-bootstrap-manifest.js +160 -10
  37. package/lib/rsi-bootstrap-manifest.js.map +1 -1
  38. package/lib/rsi-bootstrap.js +3 -3
  39. package/lib/rsi-bootstrap.js.map +1 -1
  40. package/lib/rsi-build.d.ts +12 -0
  41. package/lib/rsi-build.d.ts.map +1 -1
  42. package/lib/rsi-build.js +55 -5
  43. package/lib/rsi-build.js.map +1 -1
  44. package/lib/rsi-creation-build.d.ts +3 -0
  45. package/lib/rsi-creation-build.d.ts.map +1 -1
  46. package/lib/rsi-creation-build.js +45 -0
  47. package/lib/rsi-creation-build.js.map +1 -1
  48. package/lib/rsi-host-update.d.ts +51 -0
  49. package/lib/rsi-host-update.d.ts.map +1 -1
  50. package/lib/rsi-host-update.js +61 -1
  51. package/lib/rsi-host-update.js.map +1 -1
  52. package/lib/rsi-install.d.ts +15 -3
  53. package/lib/rsi-install.d.ts.map +1 -1
  54. package/lib/rsi-install.js +80 -15
  55. package/lib/rsi-install.js.map +1 -1
  56. package/lib/rsi-linux-cgroup-roots.d.ts +3 -0
  57. package/lib/rsi-linux-cgroup-roots.d.ts.map +1 -0
  58. package/lib/rsi-linux-cgroup-roots.js +3 -0
  59. package/lib/rsi-linux-cgroup-roots.js.map +1 -0
  60. package/lib/rsi-linux-creation-build.d.ts +36 -0
  61. package/lib/rsi-linux-creation-build.d.ts.map +1 -0
  62. package/lib/rsi-linux-creation-build.js +213 -0
  63. package/lib/rsi-linux-creation-build.js.map +1 -0
  64. package/lib/rsi-linux-native-materialize.d.ts +31 -0
  65. package/lib/rsi-linux-native-materialize.d.ts.map +1 -0
  66. package/lib/rsi-linux-native-materialize.js +162 -0
  67. package/lib/rsi-linux-native-materialize.js.map +1 -0
  68. package/lib/rsi-linux-native-relocation.d.ts +120 -0
  69. package/lib/rsi-linux-native-relocation.d.ts.map +1 -0
  70. package/lib/rsi-linux-native-relocation.js +1555 -0
  71. package/lib/rsi-linux-native-relocation.js.map +1 -0
  72. package/lib/rsi-linux-native-resources.d.ts +97 -0
  73. package/lib/rsi-linux-native-resources.d.ts.map +1 -0
  74. package/lib/rsi-linux-native-resources.js +521 -0
  75. package/lib/rsi-linux-native-resources.js.map +1 -0
  76. package/lib/rsi-linux-repository-bootstrap.d.ts +17 -0
  77. package/lib/rsi-linux-repository-bootstrap.d.ts.map +1 -0
  78. package/lib/rsi-linux-repository-bootstrap.js +317 -0
  79. package/lib/rsi-linux-repository-bootstrap.js.map +1 -0
  80. package/lib/rsi-linux-runner-states.d.ts +20 -0
  81. package/lib/rsi-linux-runner-states.d.ts.map +1 -0
  82. package/lib/rsi-linux-runner-states.js +70 -0
  83. package/lib/rsi-linux-runner-states.js.map +1 -0
  84. package/lib/rsi-linux-runtime-bootstrap.d.ts +10 -0
  85. package/lib/rsi-linux-runtime-bootstrap.d.ts.map +1 -0
  86. package/lib/rsi-linux-runtime-bootstrap.js +38 -0
  87. package/lib/rsi-linux-runtime-bootstrap.js.map +1 -0
  88. package/lib/rsi-linux-source-build.d.ts +28 -0
  89. package/lib/rsi-linux-source-build.d.ts.map +1 -0
  90. package/lib/rsi-linux-source-build.js +43 -0
  91. package/lib/rsi-linux-source-build.js.map +1 -0
  92. package/lib/rsi-local-install.d.ts +2 -0
  93. package/lib/rsi-local-install.d.ts.map +1 -1
  94. package/lib/rsi-local-install.js +42 -1
  95. package/lib/rsi-local-install.js.map +1 -1
  96. package/lib/rsi-local-pair-install.d.ts +15 -0
  97. package/lib/rsi-local-pair-install.d.ts.map +1 -1
  98. package/lib/rsi-local-pair-install.js +21 -6
  99. package/lib/rsi-local-pair-install.js.map +1 -1
  100. package/lib/rsi-local-resources.d.ts +2 -2
  101. package/lib/rsi-local-resources.d.ts.map +1 -1
  102. package/lib/rsi-local-resources.js +5 -0
  103. package/lib/rsi-local-resources.js.map +1 -1
  104. package/lib/rsi-local-update-build.d.ts +25 -6
  105. package/lib/rsi-local-update-build.d.ts.map +1 -1
  106. package/lib/rsi-local-update-build.js +46 -7
  107. package/lib/rsi-local-update-build.js.map +1 -1
  108. package/lib/rsi-local-update.d.ts +5 -2
  109. package/lib/rsi-local-update.d.ts.map +1 -1
  110. package/lib/rsi-local-update.js +6 -5
  111. package/lib/rsi-local-update.js.map +1 -1
  112. package/lib/rsi-memory-learning.d.ts +7 -1
  113. package/lib/rsi-memory-learning.d.ts.map +1 -1
  114. package/lib/rsi-memory-learning.js +11 -4
  115. package/lib/rsi-memory-learning.js.map +1 -1
  116. package/lib/rsi-native-install.d.ts.map +1 -1
  117. package/lib/rsi-native-install.js +12 -1
  118. package/lib/rsi-native-install.js.map +1 -1
  119. package/lib/rsi-native-profile.d.ts +8 -0
  120. package/lib/rsi-native-profile.d.ts.map +1 -1
  121. package/lib/rsi-native-profile.js +102 -4
  122. package/lib/rsi-native-profile.js.map +1 -1
  123. package/lib/rsi-ordinary-use-learning.d.ts +60 -0
  124. package/lib/rsi-ordinary-use-learning.d.ts.map +1 -0
  125. package/lib/rsi-ordinary-use-learning.js +103 -0
  126. package/lib/rsi-ordinary-use-learning.js.map +1 -0
  127. package/lib/rsi-plugin-creation.d.ts +16 -1
  128. package/lib/rsi-plugin-creation.d.ts.map +1 -1
  129. package/lib/rsi-plugin-creation.js +60 -14
  130. package/lib/rsi-plugin-creation.js.map +1 -1
  131. package/lib/rsi-plugin-revision.d.ts +35 -0
  132. package/lib/rsi-plugin-revision.d.ts.map +1 -0
  133. package/lib/rsi-plugin-revision.js +200 -0
  134. package/lib/rsi-plugin-revision.js.map +1 -0
  135. package/lib/rsi-profile.d.ts +11 -0
  136. package/lib/rsi-profile.d.ts.map +1 -1
  137. package/lib/rsi-profile.js +109 -3
  138. package/lib/rsi-profile.js.map +1 -1
  139. package/lib/rsi-release-build.d.ts +24 -8
  140. package/lib/rsi-release-build.d.ts.map +1 -1
  141. package/lib/rsi-release-build.js +89 -37
  142. package/lib/rsi-release-build.js.map +1 -1
  143. package/lib/rsi-scanner-retirement-config.d.ts +34 -0
  144. package/lib/rsi-scanner-retirement-config.d.ts.map +1 -0
  145. package/lib/rsi-scanner-retirement-config.js +272 -0
  146. package/lib/rsi-scanner-retirement-config.js.map +1 -0
  147. package/lib/rsi-scanner-retirement-runtime.d.ts +23 -0
  148. package/lib/rsi-scanner-retirement-runtime.d.ts.map +1 -0
  149. package/lib/rsi-scanner-retirement-runtime.js +98 -0
  150. package/lib/rsi-scanner-retirement-runtime.js.map +1 -0
  151. package/lib/rsi-scanner-retirement-stage.d.ts +55 -0
  152. package/lib/rsi-scanner-retirement-stage.d.ts.map +1 -0
  153. package/lib/rsi-scanner-retirement-stage.js +183 -0
  154. package/lib/rsi-scanner-retirement-stage.js.map +1 -0
  155. package/lib/rsi-scanner-retirement-transition.d.ts +57 -0
  156. package/lib/rsi-scanner-retirement-transition.d.ts.map +1 -0
  157. package/lib/rsi-scanner-retirement-transition.js +320 -0
  158. package/lib/rsi-scanner-retirement-transition.js.map +1 -0
  159. package/lib/rsi-setup.d.ts +24 -0
  160. package/lib/rsi-setup.d.ts.map +1 -1
  161. package/lib/rsi-setup.js +122 -7
  162. package/lib/rsi-setup.js.map +1 -1
  163. package/lib/rsi-source-maintenance.d.ts +9 -1
  164. package/lib/rsi-source-maintenance.d.ts.map +1 -1
  165. package/lib/rsi-source-maintenance.js +64 -5
  166. package/lib/rsi-source-maintenance.js.map +1 -1
  167. package/lib/rsi-source-update.js +2 -2
  168. package/lib/rsi-source-update.js.map +1 -1
  169. package/lib/sdk.d.ts +3 -1
  170. package/lib/sdk.d.ts.map +1 -1
  171. package/lib/sdk.js +8 -2
  172. package/lib/sdk.js.map +1 -1
  173. package/lib/service.d.ts.map +1 -1
  174. package/lib/service.js +2 -0
  175. package/lib/service.js.map +1 -1
  176. package/lib/setup-profile.d.ts.map +1 -1
  177. package/lib/setup-profile.js +1 -0
  178. package/lib/setup-profile.js.map +1 -1
  179. package/lib/types.d.ts +4 -0
  180. package/lib/types.d.ts.map +1 -1
  181. package/lib/types.js.map +1 -1
  182. package/lib/version.d.ts +1 -1
  183. package/lib/version.js +1 -1
  184. package/package.json +21 -21
@@ -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 or repairs a
25
- * missing export. The caller separately verifies the source image evidence. */
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: RsiBuildEnvironment;
43
+ build: ReleaseBuildInput;
30
44
  signal?: AbortSignal;
31
- }): Promise<RsiReleaseBuildEnvironment>;
32
- /** Caller holds the home lifecycle lock. Exports only fixed assets from the
33
- * already prepared immutable image; the container is never started. */
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: RsiBuildEnvironment;
53
+ build: ReleaseBuildInput;
38
54
  signal?: AbortSignal;
39
- }): Promise<RsiReleaseBuildEnvironment>;
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":"AAMA,OAAO,EAA2B,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAElF,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,CAAA;CAC9C;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;AAGD,qBAAa,+BAAgC,SAAQ,KAAK;gBAC5C,OAAO,EAAE,MAAM;CAC5B;AAeD;+EAC+E;AAC/E,wBAAsB,8BAA8B,CAAC,KAAK,EAAE;IAC1D,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,mBAAmB,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CACnF,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAgBtC;AA4BD;uEACuE;AACvE,wBAAsB,iCAAiC,CAAC,KAAK,EAAE;IAC7D,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,mBAAmB,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CACnF,GAAG,OAAO,CAAC,0BAA0B,CAAC,CA2FtC"}
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"}
@@ -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
- /** Verify existing exported inputs only; never creates a container or repairs a
31
- * missing export. The caller separately verifies the source image evidence. */
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
- if (receipt.schemaVersion !== 1 || receipt.dshHome !== input.dshHome || receipt.profile !== input.profile
46
- || receipt.sourceCommit !== input.build.sourceCommit || receipt.image !== input.build.sourceBuild.image
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 { schemaVersion: 1, sourceCommit: receipt.sourceCommit, image: receipt.image, releaseBuild: receipt.releaseBuild };
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. Make exported resources private, reject
54
- // links/devices, and separate any hard links before the adapter pins the trees.
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
- /** Caller holds the home lifecycle lock. Exports only fixed assets from the
91
- * already prepared immutable image; the container is never started. */
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
- || input.build.schemaVersion !== 1 || !/^[a-f0-9]{40}$/u.test(input.build.sourceCommit)
96
- || !/^sha256:[a-f0-9]{64}$/u.test(input.build.sourceBuild.image))
134
+ || !/^[a-f0-9]{40}$/u.test(input.build.sourceCommit))
97
135
  fail('invalid resource binding');
98
- if (process.platform !== 'linux' || process.arch !== 'x64')
99
- throw new RsiReleaseBuildUnavailableError('Linux x64 is required');
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), image = input.build.sourceBuild.image;
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 = input.build.sourceBuild.dockerPath;
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
- for (const name of ['toolchain', 'store', 'cache'])
165
- await mkdir(join(assets, name), { mode: 0o700 });
166
- await mkdir(join(assets, 'store', 'v11', 'files'), { recursive: true, mode: 0o700 });
167
- containerMayExist = true;
168
- await run(['create', '--name', container, '--label', `org.dsh.release-assets=${token}`,
169
- '--network', 'none', '--read-only', '--entrypoint', '/bin/false', image]);
170
- for (const [source, target] of [
171
- ['/opt/pnpm-native/node_modules/@pnpm/exe/.', join(assets, 'toolchain')],
172
- ['/usr/local/bin/node', join(assets, 'toolchain', 'node')],
173
- // The image's projects registry points at its deleted /seed checkout.
174
- // Each release uses a fresh writable registry, never those stale links.
175
- ['/opt/pnpm-store/v11/files/.', join(assets, 'store', 'v11', 'files')],
176
- ['/opt/pnpm-store/v11/index.db', join(assets, 'store', 'v11', 'index.db')],
177
- ['/opt/pnpm-cache/.', join(assets, 'cache')],
178
- ])
179
- await run(['cp', `${container}:${source}`, target]);
180
- await cleanupContainer();
181
- await mkdir(join(assets, 'store', 'v11', 'projects'), { recursive: true, mode: 0o700 });
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 = { schemaVersion: 1, sourceCommit: input.build.sourceCommit,
197
- image, releaseBuild: await inspect(final) };
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