@dsh-enhanced/lark-channel 0.1.48 → 0.1.53

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 (205) hide show
  1. package/README.md +20 -8
  2. package/docs/rsi-setup.md +145 -12
  3. package/docs/setup.md +29 -14
  4. package/docs/supervised-growth.md +2 -0
  5. package/lib/adapter.d.ts +6 -0
  6. package/lib/adapter.d.ts.map +1 -1
  7. package/lib/adapter.js +79 -8
  8. package/lib/adapter.js.map +1 -1
  9. package/lib/business-cli-install.d.ts +9 -0
  10. package/lib/business-cli-install.d.ts.map +1 -0
  11. package/lib/business-cli-install.js +367 -0
  12. package/lib/business-cli-install.js.map +1 -0
  13. package/lib/business-environment.d.ts +2 -0
  14. package/lib/business-environment.d.ts.map +1 -0
  15. package/lib/business-environment.js +16 -0
  16. package/lib/business-environment.js.map +1 -0
  17. package/lib/business-skill.d.ts +32 -0
  18. package/lib/business-skill.d.ts.map +1 -0
  19. package/lib/business-skill.js +202 -0
  20. package/lib/business-skill.js.map +1 -0
  21. package/lib/launchd-control.d.ts +24 -0
  22. package/lib/launchd-control.d.ts.map +1 -0
  23. package/lib/launchd-control.js +68 -0
  24. package/lib/launchd-control.js.map +1 -0
  25. package/lib/launchd-identity.d.ts +34 -0
  26. package/lib/launchd-identity.d.ts.map +1 -0
  27. package/lib/launchd-identity.js +184 -0
  28. package/lib/launchd-identity.js.map +1 -0
  29. package/lib/launchd-target-lock.d.ts +6 -0
  30. package/lib/launchd-target-lock.d.ts.map +1 -0
  31. package/lib/launchd-target-lock.js +48 -0
  32. package/lib/launchd-target-lock.js.map +1 -0
  33. package/lib/launchd.d.ts +18 -0
  34. package/lib/launchd.d.ts.map +1 -1
  35. package/lib/launchd.js +211 -54
  36. package/lib/launchd.js.map +1 -1
  37. package/lib/rsi-authority-config.d.ts +29 -0
  38. package/lib/rsi-authority-config.d.ts.map +1 -0
  39. package/lib/rsi-authority-config.js +233 -0
  40. package/lib/rsi-authority-config.js.map +1 -0
  41. package/lib/rsi-authority-resources.d.ts +36 -0
  42. package/lib/rsi-authority-resources.d.ts.map +1 -0
  43. package/lib/rsi-authority-resources.js +139 -0
  44. package/lib/rsi-authority-resources.js.map +1 -0
  45. package/lib/rsi-authority-runtime.d.ts +50 -0
  46. package/lib/rsi-authority-runtime.d.ts.map +1 -0
  47. package/lib/rsi-authority-runtime.js +393 -0
  48. package/lib/rsi-authority-runtime.js.map +1 -0
  49. package/lib/rsi-bootstrap-manifest.d.ts +39 -0
  50. package/lib/rsi-bootstrap-manifest.d.ts.map +1 -0
  51. package/lib/rsi-bootstrap-manifest.js +345 -0
  52. package/lib/rsi-bootstrap-manifest.js.map +1 -0
  53. package/lib/rsi-bootstrap.d.ts +30 -0
  54. package/lib/rsi-bootstrap.d.ts.map +1 -0
  55. package/lib/rsi-bootstrap.js +363 -0
  56. package/lib/rsi-bootstrap.js.map +1 -0
  57. package/lib/rsi-build.d.ts +54 -0
  58. package/lib/rsi-build.d.ts.map +1 -0
  59. package/lib/rsi-build.js +478 -0
  60. package/lib/rsi-build.js.map +1 -0
  61. package/lib/rsi-creation-build.d.ts +48 -0
  62. package/lib/rsi-creation-build.d.ts.map +1 -0
  63. package/lib/rsi-creation-build.js +363 -0
  64. package/lib/rsi-creation-build.js.map +1 -0
  65. package/lib/rsi-host-authorities.d.ts +18 -0
  66. package/lib/rsi-host-authorities.d.ts.map +1 -0
  67. package/lib/rsi-host-authorities.js +129 -0
  68. package/lib/rsi-host-authorities.js.map +1 -0
  69. package/lib/rsi-host-update.d.ts +113 -0
  70. package/lib/rsi-host-update.d.ts.map +1 -0
  71. package/lib/rsi-host-update.js +316 -0
  72. package/lib/rsi-host-update.js.map +1 -0
  73. package/lib/rsi-install-inputs.d.ts +43 -0
  74. package/lib/rsi-install-inputs.d.ts.map +1 -0
  75. package/lib/rsi-install-inputs.js +342 -0
  76. package/lib/rsi-install-inputs.js.map +1 -0
  77. package/lib/rsi-install.d.ts +54 -0
  78. package/lib/rsi-install.d.ts.map +1 -0
  79. package/lib/rsi-install.js +404 -0
  80. package/lib/rsi-install.js.map +1 -0
  81. package/lib/rsi-local-activation.d.ts +78 -0
  82. package/lib/rsi-local-activation.d.ts.map +1 -0
  83. package/lib/rsi-local-activation.js +485 -0
  84. package/lib/rsi-local-activation.js.map +1 -0
  85. package/lib/rsi-local-cohort.d.ts +70 -0
  86. package/lib/rsi-local-cohort.d.ts.map +1 -0
  87. package/lib/rsi-local-cohort.js +781 -0
  88. package/lib/rsi-local-cohort.js.map +1 -0
  89. package/lib/rsi-local-install.d.ts +68 -0
  90. package/lib/rsi-local-install.d.ts.map +1 -0
  91. package/lib/rsi-local-install.js +322 -0
  92. package/lib/rsi-local-install.js.map +1 -0
  93. package/lib/rsi-local-pair-install.d.ts +38 -0
  94. package/lib/rsi-local-pair-install.d.ts.map +1 -0
  95. package/lib/rsi-local-pair-install.js +200 -0
  96. package/lib/rsi-local-pair-install.js.map +1 -0
  97. package/lib/rsi-local-profile-update.d.ts +25 -0
  98. package/lib/rsi-local-profile-update.d.ts.map +1 -0
  99. package/lib/rsi-local-profile-update.js +226 -0
  100. package/lib/rsi-local-profile-update.js.map +1 -0
  101. package/lib/rsi-local-resources.d.ts +37 -0
  102. package/lib/rsi-local-resources.d.ts.map +1 -0
  103. package/lib/rsi-local-resources.js +184 -0
  104. package/lib/rsi-local-resources.js.map +1 -0
  105. package/lib/rsi-local-roots-extension.d.ts +11 -0
  106. package/lib/rsi-local-roots-extension.d.ts.map +1 -0
  107. package/lib/rsi-local-roots-extension.js +31 -0
  108. package/lib/rsi-local-roots-extension.js.map +1 -0
  109. package/lib/rsi-local-update-build.d.ts +18 -0
  110. package/lib/rsi-local-update-build.d.ts.map +1 -0
  111. package/lib/rsi-local-update-build.js +37 -0
  112. package/lib/rsi-local-update-build.js.map +1 -0
  113. package/lib/rsi-local-update.d.ts +39 -0
  114. package/lib/rsi-local-update.d.ts.map +1 -0
  115. package/lib/rsi-local-update.js +205 -0
  116. package/lib/rsi-local-update.js.map +1 -0
  117. package/lib/rsi-memory-learning.d.ts +30 -0
  118. package/lib/rsi-memory-learning.d.ts.map +1 -0
  119. package/lib/rsi-memory-learning.js +104 -0
  120. package/lib/rsi-memory-learning.js.map +1 -0
  121. package/lib/rsi-native-install.d.ts +38 -0
  122. package/lib/rsi-native-install.d.ts.map +1 -0
  123. package/lib/rsi-native-install.js +254 -0
  124. package/lib/rsi-native-install.js.map +1 -0
  125. package/lib/rsi-native-launchd.d.ts +7 -0
  126. package/lib/rsi-native-launchd.d.ts.map +1 -0
  127. package/lib/rsi-native-launchd.js +49 -0
  128. package/lib/rsi-native-launchd.js.map +1 -0
  129. package/lib/rsi-native-profile.d.ts +64 -0
  130. package/lib/rsi-native-profile.d.ts.map +1 -0
  131. package/lib/rsi-native-profile.js +283 -0
  132. package/lib/rsi-native-profile.js.map +1 -0
  133. package/lib/rsi-native-runtime-bootstrap.d.ts +35 -0
  134. package/lib/rsi-native-runtime-bootstrap.d.ts.map +1 -0
  135. package/lib/rsi-native-runtime-bootstrap.js +385 -0
  136. package/lib/rsi-native-runtime-bootstrap.js.map +1 -0
  137. package/lib/rsi-owner-profile.d.ts +37 -0
  138. package/lib/rsi-owner-profile.d.ts.map +1 -0
  139. package/lib/rsi-owner-profile.js +178 -0
  140. package/lib/rsi-owner-profile.js.map +1 -0
  141. package/lib/rsi-plugin-creation.d.ts +32 -0
  142. package/lib/rsi-plugin-creation.d.ts.map +1 -0
  143. package/lib/rsi-plugin-creation.js +189 -0
  144. package/lib/rsi-plugin-creation.js.map +1 -0
  145. package/lib/rsi-profile.d.ts +23 -0
  146. package/lib/rsi-profile.d.ts.map +1 -1
  147. package/lib/rsi-profile.js +154 -43
  148. package/lib/rsi-profile.js.map +1 -1
  149. package/lib/rsi-release-build.d.ts +41 -0
  150. package/lib/rsi-release-build.d.ts.map +1 -0
  151. package/lib/rsi-release-build.js +223 -0
  152. package/lib/rsi-release-build.js.map +1 -0
  153. package/lib/rsi-service-environment.d.ts +6 -0
  154. package/lib/rsi-service-environment.d.ts.map +1 -0
  155. package/lib/rsi-service-environment.js +113 -0
  156. package/lib/rsi-service-environment.js.map +1 -0
  157. package/lib/rsi-service-setup.d.ts +10 -0
  158. package/lib/rsi-service-setup.d.ts.map +1 -0
  159. package/lib/rsi-service-setup.js +34 -0
  160. package/lib/rsi-service-setup.js.map +1 -0
  161. package/lib/rsi-setup.d.ts +35 -2
  162. package/lib/rsi-setup.d.ts.map +1 -1
  163. package/lib/rsi-setup.js +475 -32
  164. package/lib/rsi-setup.js.map +1 -1
  165. package/lib/rsi-source-maintenance.d.ts +25 -0
  166. package/lib/rsi-source-maintenance.d.ts.map +1 -0
  167. package/lib/rsi-source-maintenance.js +348 -0
  168. package/lib/rsi-source-maintenance.js.map +1 -0
  169. package/lib/rsi-source-update.d.ts +26 -0
  170. package/lib/rsi-source-update.d.ts.map +1 -0
  171. package/lib/rsi-source-update.js +276 -0
  172. package/lib/rsi-source-update.js.map +1 -0
  173. package/lib/rsi-source.d.ts +34 -0
  174. package/lib/rsi-source.d.ts.map +1 -0
  175. package/lib/rsi-source.js +487 -0
  176. package/lib/rsi-source.js.map +1 -0
  177. package/lib/rsi-systemd-bootstrap.d.ts +46 -0
  178. package/lib/rsi-systemd-bootstrap.d.ts.map +1 -0
  179. package/lib/rsi-systemd-bootstrap.js +271 -0
  180. package/lib/rsi-systemd-bootstrap.js.map +1 -0
  181. package/lib/sdk.d.ts.map +1 -1
  182. package/lib/sdk.js +26 -1
  183. package/lib/sdk.js.map +1 -1
  184. package/lib/setup-business.d.ts +49 -0
  185. package/lib/setup-business.d.ts.map +1 -0
  186. package/lib/setup-business.js +335 -0
  187. package/lib/setup-business.js.map +1 -0
  188. package/lib/setup-profile.d.ts +1 -1
  189. package/lib/setup-profile.d.ts.map +1 -1
  190. package/lib/setup-profile.js +25 -2
  191. package/lib/setup-profile.js.map +1 -1
  192. package/lib/setup.d.ts +12 -1
  193. package/lib/setup.d.ts.map +1 -1
  194. package/lib/setup.js +265 -48
  195. package/lib/setup.js.map +1 -1
  196. package/lib/systemd.d.ts +10 -0
  197. package/lib/systemd.d.ts.map +1 -1
  198. package/lib/systemd.js +23 -6
  199. package/lib/systemd.js.map +1 -1
  200. package/lib/types.d.ts +7 -0
  201. package/lib/types.d.ts.map +1 -1
  202. package/lib/types.js.map +1 -1
  203. package/lib/version.d.ts +1 -1
  204. package/lib/version.js +1 -1
  205. package/package.json +33 -20
@@ -0,0 +1,48 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { constants, realpathSync } from 'node:fs';
3
+ import { lstat, open } from 'node:fs/promises';
4
+ const profilePattern = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u;
5
+ /** The launchd label is shared by every DSH_HOME for this GUI user. */
6
+ export async function withLaunchAgentTargetLock(input, operation) {
7
+ const uid = input.uid ?? process.getuid?.();
8
+ if (!profilePattern.test(input.profile) || !Number.isSafeInteger(uid) || uid === undefined || uid < 1) {
9
+ throw new Error('lark-channel setup: invalid launchd target lock identity');
10
+ }
11
+ const temporary = await lstat(realpathSync('/tmp'));
12
+ if (!temporary.isDirectory() || temporary.isSymbolicLink() || temporary.uid !== 0
13
+ || (temporary.mode & 0o7777) !== 0o1777) {
14
+ throw new Error('lark-channel setup: unsafe launchd target lock directory');
15
+ }
16
+ const lockPath = `/tmp/.dsh-enhanced-launchd-${uid}-${input.profile}.lock`;
17
+ let descriptor;
18
+ try {
19
+ descriptor = await open(lockPath, constants.O_RDWR | constants.O_CREAT | constants.O_NOFOLLOW, 0o600);
20
+ const assertIdentity = async () => {
21
+ const [opened, linked] = await Promise.all([descriptor.stat(), lstat(lockPath)]);
22
+ if (!opened.isFile() || !linked.isFile() || linked.isSymbolicLink()
23
+ || opened.uid !== uid || linked.uid !== uid || opened.nlink !== 1 || linked.nlink !== 1
24
+ || (opened.mode & 0o777) !== 0o600 || (linked.mode & 0o777) !== 0o600
25
+ || opened.dev !== linked.dev || opened.ino !== linked.ino) {
26
+ throw new Error(`lark-channel setup: unsafe launchd target lock: ${lockPath}`);
27
+ }
28
+ };
29
+ await assertIdentity();
30
+ const acquired = spawnSync('/usr/bin/perl', ['-MFcntl=:flock', '-MErrno=EAGAIN,EWOULDBLOCK', '-e',
31
+ 'open(F, "<&", 3) or exit 74; flock(F, LOCK_EX|LOCK_NB) or exit(($! == EAGAIN || $! == EWOULDBLOCK) ? 75 : 74);'], {
32
+ encoding: 'utf8', stdio: ['ignore', 'ignore', 'pipe', descriptor.fd],
33
+ env: { PATH: '/usr/bin:/bin', LANG: 'C' }, timeout: 10_000,
34
+ });
35
+ if (acquired.status === 75)
36
+ throw new Error(`lark-channel setup: launchd target is busy: ${lockPath}`);
37
+ if (acquired.status !== 0) {
38
+ const detail = acquired.stderr?.trim().slice(0, 1_000);
39
+ throw new Error(`lark-channel setup: cannot acquire launchd target lock${detail ? `: ${detail}` : ''}`);
40
+ }
41
+ await assertIdentity();
42
+ return await operation();
43
+ }
44
+ finally {
45
+ await descriptor?.close();
46
+ }
47
+ }
48
+ //# sourceMappingURL=launchd-target-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launchd-target-lock.js","sourceRoot":"","sources":["../src/launchd-target-lock.ts"],"names":[],"mappings":"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"}
package/lib/launchd.d.ts CHANGED
@@ -22,6 +22,7 @@ export interface InstalledLaunchAgent extends LaunchAgentPaths {
22
22
  }
23
23
  interface CommandResult {
24
24
  status: number | null;
25
+ stdout?: string | Buffer;
25
26
  stderr?: string | Buffer;
26
27
  }
27
28
  export interface LaunchAgentInstallOptions {
@@ -33,9 +34,26 @@ export interface LaunchAgentInstallOptions {
33
34
  platform?: NodeJS.Platform;
34
35
  run?: (command: string, args: readonly string[]) => CommandResult;
35
36
  wait?: (milliseconds: number) => Promise<void>;
37
+ signal?: AbortSignal;
38
+ }
39
+ export interface DshLaunchAgentInspection {
40
+ target: string;
41
+ plistPath: string;
42
+ registered: boolean;
43
+ pid: number;
44
+ running: boolean;
45
+ identity: {
46
+ nodePath: string;
47
+ dshPath: string;
48
+ dshSha256: string;
49
+ } | null;
36
50
  }
37
51
  export declare function launchAgentPaths(input: LaunchAgentPathsInput): LaunchAgentPaths;
38
52
  export declare function createLaunchAgent(input: LaunchAgentInput): string;
53
+ export declare function inspectDshLaunchAgent(input: {
54
+ dshHome: string;
55
+ profile: string;
56
+ }, options?: Pick<LaunchAgentInstallOptions, 'home' | 'uid' | 'platform' | 'run'>): Promise<DshLaunchAgentInspection>;
39
57
  export declare function installDshLaunchAgent(input: {
40
58
  dshHome: string;
41
59
  profile: string;
@@ -1 +1 @@
1
- {"version":3,"file":"launchd.d.ts","sourceRoot":"","sources":["../src/launchd.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,MAAM,EAAE,MAAM,CAAA;CACf;AAED,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAC1B,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,aAAa,CAAA;IACjE,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/C;AAgBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,gBAAgB,CAW/E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAmDjE;AA+DD,wBAAsB,qBAAqB,CACzC,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC3C,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,oBAAoB,CAAC,CA6D/B"}
1
+ {"version":3,"file":"launchd.d.ts","sourceRoot":"","sources":["../src/launchd.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,MAAM,EAAE,MAAM,CAAA;CACf;AAED,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAC1B,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,aAAa,CAAA;IACjE,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9C,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CAC1E;AAgBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,gBAAgB,CAW/E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAmDjE;AA8HD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACrF,OAAO,GAAE,IAAI,CAAC,yBAAyB,EAAE,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,CAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAUvH;AA8CD,wBAAsB,qBAAqB,CACzC,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC3C,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,oBAAoB,CAAC,CAiF/B"}
package/lib/launchd.js CHANGED
@@ -1,8 +1,11 @@
1
- import { accessSync, constants } from 'node:fs';
2
- import { access, chmod, mkdir, open, rename, unlink } from 'node:fs/promises';
1
+ import { accessSync, constants, realpathSync, readFileSync } from 'node:fs';
2
+ import { access, chmod, lstat, mkdir, open, readFile, rename, unlink } from 'node:fs/promises';
3
3
  import { homedir } from 'node:os';
4
4
  import { dirname, isAbsolute, join } from 'node:path';
5
5
  import { spawnSync } from 'node:child_process';
6
+ import { createHash, randomUUID } from 'node:crypto';
7
+ import { assertNativeLaunchdPlist, inspectNativeLaunchd, inspectNativeLaunchdDetail, stopNativeLaunchd } from './launchd-identity.js';
8
+ import { withLaunchAgentTargetLock } from './launchd-target-lock.js';
6
9
  const profilePattern = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u;
7
10
  function xml(value) {
8
11
  return value
@@ -106,7 +109,8 @@ function defaultRun(command, args) {
106
109
  encoding: 'utf8',
107
110
  env: { PATH: '/usr/bin:/bin' },
108
111
  maxBuffer: 256 * 1024,
109
- stdio: ['ignore', 'ignore', 'pipe'],
112
+ timeout: 10_000,
113
+ stdio: ['ignore', 'pipe', 'pipe'],
110
114
  });
111
115
  }
112
116
  function commandError(action, result) {
@@ -122,22 +126,150 @@ function defaultWait(milliseconds) {
122
126
  return new Promise(resolve => setTimeout(resolve, milliseconds));
123
127
  }
124
128
  async function writePlist(path, value, run) {
125
- const temporary = `${path}.tmp-${process.pid}`;
126
- const file = await open(temporary, 'w', 0o600);
129
+ const temporary = `${path}.tmp-${randomUUID()}`;
127
130
  try {
128
- await file.writeFile(value, 'utf8');
129
- await file.sync();
131
+ const file = await open(temporary, 'w', 0o600);
132
+ try {
133
+ await file.writeFile(value);
134
+ await file.sync();
135
+ }
136
+ finally {
137
+ await file.close();
138
+ }
139
+ const validation = run('/usr/bin/plutil', ['-lint', temporary]);
140
+ if (validation.status !== 0)
141
+ throw commandError('LaunchAgent plist validation', validation);
142
+ await chmod(temporary, 0o600);
143
+ await rename(temporary, path);
130
144
  }
131
145
  finally {
132
- await file.close();
133
- }
134
- const validation = run('/usr/bin/plutil', ['-lint', temporary]);
135
- if (validation.status !== 0) {
136
146
  await unlink(temporary).catch(() => { });
137
- throw commandError('LaunchAgent plist validation', validation);
138
147
  }
139
- await rename(temporary, path);
140
- await chmod(path, 0o600);
148
+ }
149
+ function nativeCommand(run) {
150
+ return (command, args) => {
151
+ const result = run(command, args);
152
+ return { status: result.status, stdout: result.stdout?.toString() ?? '', stderr: result.stderr?.toString() ?? '' };
153
+ };
154
+ }
155
+ function executableIdentity(nodePath, dshPath) {
156
+ const node = realpathSync(nodePath), dsh = realpathSync(dshPath);
157
+ return { nodePath: node, dshPath: dsh,
158
+ dshSha256: createHash('sha256').update(readFileSync(dsh)).digest('hex') };
159
+ }
160
+ async function inspectWithPaths(input, paths, uid, run) {
161
+ const target = `gui/${uid}/${paths.label}`;
162
+ let bytes;
163
+ try {
164
+ const entry = await lstat(paths.plistPath);
165
+ if (!entry.isFile() || entry.isSymbolicLink() || (entry.mode & 0o077) !== 0) {
166
+ throw new Error('lark-channel setup: existing LaunchAgent plist is unsafe');
167
+ }
168
+ bytes = await readFile(paths.plistPath);
169
+ }
170
+ catch (error) {
171
+ if (error.code !== 'ENOENT')
172
+ throw error;
173
+ bytes = null;
174
+ }
175
+ let identity = null;
176
+ if (bytes !== null) {
177
+ const parsed = run('/usr/bin/plutil', ['-convert', 'json', '-o', '-', '--', paths.plistPath]);
178
+ if (parsed.status !== 0)
179
+ throw commandError('existing LaunchAgent plist inspection', parsed);
180
+ let value;
181
+ try {
182
+ value = JSON.parse(parsed.stdout?.toString() ?? '');
183
+ }
184
+ catch {
185
+ throw new Error('lark-channel setup: existing LaunchAgent plist is invalid');
186
+ }
187
+ const args = value.ProgramArguments;
188
+ if (!Array.isArray(args) || !args.every(arg => typeof arg === 'string')) {
189
+ throw new Error('lark-channel setup: existing LaunchAgent command is invalid');
190
+ }
191
+ const offset = args[1] === '--disable-warning=ExperimentalWarning' ? 2 : 1;
192
+ if (typeof args[0] !== 'string' || typeof args[offset] !== 'string') {
193
+ throw new Error('lark-channel setup: existing LaunchAgent command is invalid');
194
+ }
195
+ identity = executableIdentity(args[0], args[offset]);
196
+ const expected = { ...input, ...identity, home: dirname(dirname(dirname(paths.plistPath))), uid };
197
+ assertNativeLaunchdPlist(bytes.toString('utf8'), expected, (command, arguments_) => command === '/usr/bin/plutil'
198
+ ? { status: parsed.status, stdout: parsed.stdout?.toString() ?? '', stderr: parsed.stderr?.toString() ?? '' }
199
+ : nativeCommand(run)(command, arguments_));
200
+ // plutil parsed the pathname. Verify it still denotes the bytes checked above.
201
+ if (!(await readFile(paths.plistPath)).equals(bytes)) {
202
+ throw new Error('lark-channel setup: LaunchAgent plist changed during inspection');
203
+ }
204
+ }
205
+ const expected = { ...input, ...identity,
206
+ home: dirname(dirname(dirname(paths.plistPath))), uid };
207
+ const state = inspectNativeLaunchdDetail(expected, nativeCommand(run));
208
+ if (state.registered && identity === null) {
209
+ throw new Error('lark-channel setup: loaded LaunchAgent has no trusted plist');
210
+ }
211
+ return { target, plistPath: paths.plistPath, ...state, identity };
212
+ }
213
+ export async function inspectDshLaunchAgent(input, options = {}) {
214
+ if ((options.platform ?? process.platform) !== 'darwin') {
215
+ throw new Error('lark-channel setup: LaunchAgent inspection requires macOS');
216
+ }
217
+ const uid = options.uid ?? process.getuid?.();
218
+ if (!Number.isSafeInteger(uid) || uid === undefined || uid < 1) {
219
+ throw new Error('lark-channel setup: cannot resolve the launchd user domain');
220
+ }
221
+ const paths = launchAgentPaths({ ...input, ...(options.home === undefined ? {} : { home: options.home }) });
222
+ return inspectWithPaths(input, paths, uid, options.run ?? defaultRun);
223
+ }
224
+ async function startVerified(input, paths, uid, run, wait, requireRunning = true) {
225
+ const command = nativeCommand(run), target = `gui/${uid}/${paths.label}`, domain = `gui/${uid}`;
226
+ if (inspectNativeLaunchd(input, command).registered)
227
+ throw new Error('lark-channel setup: service remained registered before bootstrap');
228
+ const enable = run('/bin/launchctl', ['enable', target]);
229
+ if (enable.status !== 0)
230
+ throw commandError('launchd enable', enable);
231
+ const delays = [250, 750];
232
+ let bootstrap = { status: null };
233
+ for (let attempt = 0; attempt <= delays.length; attempt += 1) {
234
+ bootstrap = run('/bin/launchctl', ['bootstrap', domain, paths.plistPath]);
235
+ if (bootstrap.status !== 0 && !isBootstrapEio(bootstrap))
236
+ throw commandError('launchd bootstrap', bootstrap);
237
+ let consecutiveRunning = 0, previousRunningPid = 0, registered = false;
238
+ let lastState = 'absent', lastPid = 0, lastExitCode = null;
239
+ // launchd can register before the Host reaches running. Keep polling the
240
+ // same job; a second bootstrap while it remains registered is not safe.
241
+ for (let observation = 0; observation < 120; observation += 1) {
242
+ const state = inspectNativeLaunchdDetail(input, command);
243
+ registered = state.registered;
244
+ lastState = state.state ?? 'unknown';
245
+ lastPid = state.pid;
246
+ lastExitCode = state.lastExitCode;
247
+ if (registered && !requireRunning)
248
+ return;
249
+ if (state.running) {
250
+ consecutiveRunning = state.pid === previousRunningPid ? consecutiveRunning + 1 : 1;
251
+ previousRunningPid = state.pid;
252
+ }
253
+ else {
254
+ consecutiveRunning = 0;
255
+ previousRunningPid = 0;
256
+ }
257
+ if (consecutiveRunning >= 2)
258
+ return;
259
+ if (!registered && observation >= 2)
260
+ break;
261
+ await wait(250);
262
+ }
263
+ if (registered) {
264
+ throw new Error(`lark-channel setup: LaunchAgent registered but the Host did not become running (state=${lastState.slice(0, 40)}, pid=${lastPid}, lastExitCode=${lastExitCode?.slice(0, 40) ?? 'unknown'})`);
265
+ }
266
+ const delayMs = delays[attempt];
267
+ if (delayMs !== undefined)
268
+ await wait(delayMs);
269
+ }
270
+ if (bootstrap.status !== 0)
271
+ throw commandError('launchd bootstrap', bootstrap);
272
+ throw new Error('lark-channel setup: launchd bootstrap succeeded but the service was not registered');
141
273
  }
142
274
  export async function installDshLaunchAgent(input, options = {}) {
143
275
  if ((options.platform ?? process.platform) !== 'darwin') {
@@ -155,51 +287,76 @@ export async function installDshLaunchAgent(input, options = {}) {
155
287
  const profileDirectory = join(input.dshHome, 'profiles', input.profile);
156
288
  await access(profileDirectory, constants.R_OK);
157
289
  const currentPath = options.path ?? process.env.PATH;
158
- const nodePath = options.nodePath ?? findExecutable('node', currentPath);
159
- const dshPath = options.dshPath ?? findExecutable('dsh', currentPath);
290
+ const nodePath = realpathSync(options.nodePath ?? findExecutable('node', currentPath));
291
+ const dshPath = realpathSync(options.dshPath ?? findExecutable('dsh', currentPath));
160
292
  const path = servicePath(nodePath, dshPath, currentPath);
161
293
  const run = options.run ?? defaultRun;
162
294
  const wait = options.wait ?? defaultWait;
163
- await mkdir(dirname(paths.plistPath), { recursive: true, mode: 0o700 });
164
- await mkdir(dirname(paths.stdoutPath), { recursive: true, mode: 0o700 });
165
- await writePlist(paths.plistPath, createLaunchAgent({
166
- ...paths,
167
- dshHome: input.dshHome,
168
- profile: input.profile,
169
- profileDirectory,
170
- nodePath,
171
- dshPath,
172
- path,
173
- }), run);
174
- const domain = `gui/${uid}`;
175
- const target = `${domain}/${paths.label}`;
176
- run('/bin/launchctl', ['bootout', target]);
177
- const enable = run('/bin/launchctl', ['enable', target]);
178
- if (enable.status !== 0)
179
- throw commandError('launchd enable', enable);
180
- const retryDelays = [250, 750];
181
- let bootstrap = { status: null };
182
- for (let attempt = 0; attempt <= retryDelays.length; attempt += 1) {
183
- bootstrap = run('/bin/launchctl', ['bootstrap', domain, paths.plistPath]);
184
- if (bootstrap.status !== 0 && !isBootstrapEio(bootstrap)) {
185
- throw commandError('launchd bootstrap', bootstrap);
295
+ const target = `gui/${uid}/${paths.label}`;
296
+ const newIdentity = { ...input,
297
+ ...(options.home === undefined ? {} : { home: options.home }), uid,
298
+ ...executableIdentity(nodePath, dshPath) };
299
+ return withLaunchAgentTargetLock({ profile: input.profile, uid }, async () => {
300
+ const before = await inspectWithPaths(input, paths, uid, run);
301
+ const original = before.identity === null ? null : await readFile(paths.plistPath);
302
+ const oldIdentity = { ...input,
303
+ ...(options.home === undefined ? {} : { home: options.home }), uid,
304
+ ...before.identity };
305
+ if (before.registered) {
306
+ await stopNativeLaunchd(oldIdentity, AbortSignal.any([
307
+ options.signal ?? new AbortController().signal, AbortSignal.timeout(45_000),
308
+ ]), nativeCommand(run));
186
309
  }
187
- // `bootstrap` may return EIO after committing the job, or even return zero
188
- // while an earlier bootout is still removing it. The job registry is the
189
- // source of truth; require it to remain visible across a short settle window.
190
- if (run('/bin/launchctl', ['print', target]).status === 0) {
191
- await wait(250);
192
- if (run('/bin/launchctl', ['print', target]).status === 0) {
193
- return { ...paths, target };
310
+ // A concurrent actor outside our target lock must not silently replace
311
+ // the plist after inspection or while launchd is removing the old job.
312
+ const current = await readFile(paths.plistPath).catch((error) => {
313
+ if (error.code === 'ENOENT')
314
+ return null;
315
+ throw error;
316
+ });
317
+ if (current === null ? original !== null : original === null || !current.equals(original)) {
318
+ throw new Error('lark-channel setup: LaunchAgent plist changed during service replacement');
319
+ }
320
+ const replacement = createLaunchAgent({ ...paths, dshHome: input.dshHome, profile: input.profile,
321
+ profileDirectory, nodePath, dshPath, path });
322
+ let replaced = false;
323
+ try {
324
+ await mkdir(dirname(paths.plistPath), { recursive: true, mode: 0o700 });
325
+ await mkdir(dirname(paths.stdoutPath), { recursive: true, mode: 0o700 });
326
+ await writePlist(paths.plistPath, replacement, run);
327
+ replaced = true;
328
+ await startVerified(newIdentity, paths, uid, run, wait);
329
+ return { ...paths, target };
330
+ }
331
+ catch (error) {
332
+ try {
333
+ // A failed bootstrap can have committed the new job. Only remove a
334
+ // job whose full identity is known; preserve unknown state for review.
335
+ if (replaced)
336
+ await stopNativeLaunchd(newIdentity, AbortSignal.timeout(45_000), nativeCommand(run));
337
+ const now = await readFile(paths.plistPath).catch((readError) => {
338
+ if (readError.code === 'ENOENT')
339
+ return null;
340
+ throw readError;
341
+ });
342
+ if (replaced ? now?.toString('utf8') !== replacement
343
+ : now === null ? original !== null : original === null || !now.equals(original)) {
344
+ throw new Error('lark-channel setup: LaunchAgent plist changed before rollback');
345
+ }
346
+ if (replaced) {
347
+ if (original === null)
348
+ await unlink(paths.plistPath);
349
+ else
350
+ await writePlist(paths.plistPath, original, run);
351
+ }
352
+ if (before.registered)
353
+ await startVerified(oldIdentity, paths, uid, run, wait, before.running);
194
354
  }
195
- continue;
355
+ catch (rollbackError) {
356
+ throw new AggregateError([error, rollbackError], 'lark-channel setup: LaunchAgent replacement failed and rollback requires reconciliation');
357
+ }
358
+ throw error;
196
359
  }
197
- const delayMs = retryDelays[attempt];
198
- if (delayMs !== undefined)
199
- await wait(delayMs);
200
- }
201
- if (bootstrap.status !== 0)
202
- throw commandError('launchd bootstrap', bootstrap);
203
- throw new Error('lark-channel setup: launchd bootstrap succeeded but the service was not registered');
360
+ });
204
361
  }
205
362
  //# sourceMappingURL=launchd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"launchd.js","sourceRoot":"","sources":["../src/launchd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"launchd.js","sourceRoot":"","sources":["../src/launchd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type PluginControlTrustConfig, type SourceReleaseAuthorityConfig, type SystemdHostAuthorityConfig } from '@dsh-enhanced/plugin-control-plane';
2
+ import { type RsiAuthorityResources } from './rsi-authority-resources.js';
3
+ import type { Pin, RsiAuthorityRuntime } from './rsi-authority-runtime.js';
4
+ import type { RsiSetupManifest } from './rsi-profile.js';
5
+ import type { RsiReleaseBuildConfig } from './rsi-release-build.js';
6
+ import type { RsiSourceWorkspace } from './rsi-source.js';
7
+ export interface RsiAuthorityConfigInput {
8
+ manifest: RsiSetupManifest;
9
+ resources: RsiAuthorityResources;
10
+ runtime: RsiAuthorityRuntime;
11
+ source: RsiSourceWorkspace;
12
+ releaseBuild: RsiReleaseBuildConfig;
13
+ executor: PluginControlTrustConfig['executor'];
14
+ systemctl: Pin & {
15
+ interpreter: Pin | null;
16
+ };
17
+ unitProperties: SystemdHostAuthorityConfig['template']['unitProperties'];
18
+ policies: SourceReleaseAuthorityConfig['grant']['policies'];
19
+ now: number;
20
+ }
21
+ /** Compile immutable configuration bytes. The caller creates private directories,
22
+ * writes files atomically, opens the Control Plane ledger, and runs the real
23
+ * filesystem and executable validators before any service is enabled. */
24
+ export declare function compileRsiAuthorityConfigs(input: RsiAuthorityConfigInput): {
25
+ files: Record<string, string>;
26
+ directories: string[];
27
+ trust: PluginControlTrustConfig;
28
+ };
29
+ //# sourceMappingURL=rsi-authority-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-authority-config.d.ts","sourceRoot":"","sources":["../src/rsi-authority-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuE,KAAK,wBAAwB,EACjC,KAAK,4BAA4B,EAChF,KAAK,0BAA0B,EAAuC,MAAM,oCAAoC,CAAA;AAE3I,OAAO,EAAqB,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AAC5F,OAAO,KAAK,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AA+BzD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,SAAS,EAAE,qBAAqB,CAAA;IAChC,OAAO,EAAE,mBAAmB,CAAA;IAC5B,MAAM,EAAE,kBAAkB,CAAA;IAC1B,YAAY,EAAE,qBAAqB,CAAA;IACnC,QAAQ,EAAE,wBAAwB,CAAC,UAAU,CAAC,CAAA;IAC9C,SAAS,EAAE,GAAG,GAAG;QAAE,WAAW,EAAE,GAAG,GAAG,IAAI,CAAA;KAAE,CAAA;IAC5C,cAAc,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC,gBAAgB,CAAC,CAAA;IACxE,QAAQ,EAAE,4BAA4B,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAA;IAC3D,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;yEAEyE;AACzE,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,uBAAuB,GAAG;IAC1E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,wBAAwB,CAAA;CACtF,CAgLA"}