@hellolynk-ai/codex-plugin 0.2.101 → 0.2.102

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.
@@ -61,8 +61,8 @@ try {
61
61
  "--expected-manifest-sha256", sourceRelease.outerManifestSha256,
62
62
  ]);
63
63
  } else {
64
- const originalLocations = resolveLocations();
65
64
  const accountModule = await importStableCore(PACKAGE_ROOT, "hellolynk-client-account.mjs", "hellolynk_npm_account_runtime_invalid");
65
+ const originalLocations = resolveLocations(accountModule.clientAccountBaseRoot);
66
66
  const baseRoot = accountModule.clientAccountBaseRoot(originalLocations.hostRoot);
67
67
  const packageLocations = { ...originalLocations, hostRoot: baseRoot, finalCurrentRoot: path.dirname(baseRoot) };
68
68
  const accounts = accountModule.createClientAccountActions({ client: metadata.client, storeRoot: baseRoot });
@@ -838,7 +838,7 @@ async function verifyRelease(releaseRoot, packageRoot, expectedMetadata = metada
838
838
  return Object.freeze({ manifestSha256, outerManifestSha256 });
839
839
  }
840
840
 
841
- function resolveLocations() {
841
+ function resolveLocations(getDefaultHostRoot) {
842
842
  if (process.platform !== "win32") fail("hellolynk_npm_windows_only");
843
843
  const home = path.resolve(process.env.USERPROFILE || os.homedir());
844
844
  const localAppData = path.resolve(process.env.LOCALAPPDATA || path.join(home, "AppData", "Local"));
@@ -848,7 +848,7 @@ function resolveLocations() {
848
848
  const codexHome = path.resolve(configuredCodexHome || path.join(home, ".codex"));
849
849
  const configuredHostRoot = String(process.env.HELLOLYNK_NEUTRAL_STORE_ROOT || "").trim();
850
850
  if (configuredHostRoot && !path.isAbsolute(configuredHostRoot)) fail("hellolynk_npm_store_root_invalid");
851
- const hostRoot = path.resolve(configuredHostRoot || path.join(localAppData, "HelloLynk", "host"));
851
+ const hostRoot = path.resolve(configuredHostRoot || getDefaultHostRoot());
852
852
  if (configuredHostRoot && path.basename(hostRoot).toLowerCase() !== "host") {
853
853
  fail("hellolynk_npm_store_root_invalid");
854
854
  }
@@ -1004,6 +1004,12 @@ async function startHostWhenAbsent(runtime, binding) {
1004
1004
  }
1005
1005
 
1006
1006
  async function secureStableReleaseTree(locations, releaseId, options = {}) {
1007
+ const releasePath = path.resolve(locations.finalCurrentRoot, "releases", releaseId);
1008
+ // An existing AppData root can be shared while a new release is redirected
1009
+ // into one desktop app's private cache. Other clients cannot use that release.
1010
+ if (process.platform === "win32" && realpathSync.native(releasePath).toLowerCase() !== releasePath.toLowerCase()) {
1011
+ fail("client_root_alias_rejected");
1012
+ }
1007
1013
  const module = await importCore(
1008
1014
  "hellolynk-platform-credential-store.mjs",
1009
1015
  "hellolynk_npm_client_root_security_unavailable",
@@ -2,7 +2,7 @@
2
2
  "contract": "hellolynk-client-npm-pack-manifest-v1",
3
3
  "client": "codex",
4
4
  "packageName": "@hellolynk-ai/codex-plugin",
5
- "version": "0.2.101",
5
+ "version": "0.2.102",
6
6
  "workbench": {
7
7
  "path": "plugins/hellolynk-codex/runtime/workbench/hellolynk-workbench-build.json",
8
8
  "contract": "hellolynk-shared-workbench-build-v1",
@@ -17,8 +17,8 @@
17
17
  },
18
18
  {
19
19
  "path": "bin/hellolynk-client-setup.mjs",
20
- "bytes": 141769,
21
- "sha256": "0bb0706c06bd193cfa37007dd95e3107b52aacb0a7ebaec2249b153ff7dd772b"
20
+ "bytes": 142207,
21
+ "sha256": "95386fcd9092f31abb3b0441033b3b385b3c355506613da24b4557d5f9cac6ef"
22
22
  },
23
23
  {
24
24
  "path": "bin/hellolynk-mcp-config-shape.mjs",
@@ -33,7 +33,7 @@
33
33
  {
34
34
  "path": "package.json",
35
35
  "bytes": 1713,
36
- "sha256": "3cd83c41e8536877505bf043a77b15fed01a0a7be18978c9835898fb690dfc8e"
36
+ "sha256": "a1dffd73cef661cd0f019f5a532f949693fccfa72222d346bd867470977cdc99"
37
37
  },
38
38
  {
39
39
  "path": "plugins/hellolynk-codex/.app.json",
@@ -43,7 +43,7 @@
43
43
  {
44
44
  "path": "plugins/hellolynk-codex/.codex-plugin/plugin.json",
45
45
  "bytes": 1669,
46
- "sha256": "dfe2ede67b747c94a7485ecc6150286e3ac73f0fd1cae93357f473feae9ae5e3"
46
+ "sha256": "38d2a5204b66ec57368494e69ed71de655f798f9d37ab2af966b59c3ab07d0f2"
47
47
  },
48
48
  {
49
49
  "path": "plugins/hellolynk-codex/.mcp.json",
@@ -58,7 +58,7 @@
58
58
  {
59
59
  "path": "plugins/hellolynk-codex/package.json",
60
60
  "bytes": 1030,
61
- "sha256": "5875df8d4163c0a84b3dc30265b1a5e7b977a7c92250aae013d3b513b3640c40"
61
+ "sha256": "befbca064334e8ff7f9d192f095ac1bd786a3882385a450fc2c2d2a5c9b2b7dd"
62
62
  },
63
63
  {
64
64
  "path": "plugins/hellolynk-codex/runtime/bootstrap/core/hellolynk-client-account.mjs",
@@ -72,8 +72,8 @@
72
72
  },
73
73
  {
74
74
  "path": "plugins/hellolynk-codex/runtime/bootstrap/core/hellolynk-client-profile.mjs",
75
- "bytes": 8282,
76
- "sha256": "4b45a78b4d6c4794a1f494bd95777579c32c56a68321a1d3b484048942ae4742"
75
+ "bytes": 9359,
76
+ "sha256": "8be37831c96610e3d0a64848ada86488970cc6079e49764b47d8a8b2ba852269"
77
77
  },
78
78
  {
79
79
  "path": "plugins/hellolynk-codex/runtime/bootstrap/core/hellolynk-host-auth.mjs",
@@ -92,8 +92,8 @@
92
92
  },
93
93
  {
94
94
  "path": "plugins/hellolynk-codex/runtime/bootstrap/core/hellolynk-neutral-host-installation-store.mjs",
95
- "bytes": 33525,
96
- "sha256": "b5f6288732af6f9b9c0c750f6002eae657dde9513fc97674f6e59200f3cc9dc6"
95
+ "bytes": 33183,
96
+ "sha256": "dfb6bba4c627082cd6fca8cb38dc786f905e38f3e83ccf91dbfe57e55639e8a2"
97
97
  },
98
98
  {
99
99
  "path": "plugins/hellolynk-codex/runtime/bootstrap/core/hellolynk-platform-credential-store.mjs",
@@ -132,8 +132,8 @@
132
132
  },
133
133
  {
134
134
  "path": "plugins/hellolynk-codex/runtime/core/hellolynk-client-profile.mjs",
135
- "bytes": 8282,
136
- "sha256": "4b45a78b4d6c4794a1f494bd95777579c32c56a68321a1d3b484048942ae4742"
135
+ "bytes": 9359,
136
+ "sha256": "8be37831c96610e3d0a64848ada86488970cc6079e49764b47d8a8b2ba852269"
137
137
  },
138
138
  {
139
139
  "path": "plugins/hellolynk-codex/runtime/core/hellolynk-client-update-entry.mjs",
@@ -307,8 +307,8 @@
307
307
  },
308
308
  {
309
309
  "path": "plugins/hellolynk-codex/runtime/core/hellolynk-neutral-host-installation-store.mjs",
310
- "bytes": 33525,
311
- "sha256": "b5f6288732af6f9b9c0c750f6002eae657dde9513fc97674f6e59200f3cc9dc6"
310
+ "bytes": 33183,
311
+ "sha256": "dfb6bba4c627082cd6fca8cb38dc786f905e38f3e83ccf91dbfe57e55639e8a2"
312
312
  },
313
313
  {
314
314
  "path": "plugins/hellolynk-codex/runtime/core/hellolynk-neutral-host-launcher.mjs",
@@ -318,7 +318,7 @@
318
318
  {
319
319
  "path": "plugins/hellolynk-codex/runtime/core/hellolynk-neutral-host-process.mjs",
320
320
  "bytes": 225161,
321
- "sha256": "af6cb6585baae477f87ee880bd044dffb4c7f71667bfa78bcbf0d4d20e7483af"
321
+ "sha256": "e744bacf65f7b86cbcf7d654189c0e07e09401083e2b6f9053b17c1c3bacd1b4"
322
322
  },
323
323
  {
324
324
  "path": "plugins/hellolynk-codex/runtime/core/hellolynk-neutral-host-store-adapters.mjs",
@@ -378,12 +378,12 @@
378
378
  {
379
379
  "path": "plugins/hellolynk-codex/runtime/neutral-host-release-manifest.json",
380
380
  "bytes": 13440,
381
- "sha256": "5b035cb2d82e7543b801ca9d3b35a36e3f54a7b9aff9afcdf9f479926c537f56"
381
+ "sha256": "3f8ad933949136ed1ebf5172c9e49ead0b0e2829650bc960eef1bdddd27c6a8f"
382
382
  },
383
383
  {
384
384
  "path": "plugins/hellolynk-codex/runtime/neutral-host-release-pin.json",
385
385
  "bytes": 146,
386
- "sha256": "af12ef2162ae5cddfda9707d919e4c7008478da434c581bcc26c8ed01738be11"
386
+ "sha256": "6c9832284a05105014d72fe52f15e7d36c3c3fbbcb20aaf24f84a10196a7fad8"
387
387
  },
388
388
  {
389
389
  "path": "plugins/hellolynk-codex/runtime/platform/windows/configure-agent.ps1",
@@ -553,7 +553,7 @@
553
553
  {
554
554
  "path": "plugins/hellolynk-codex/server/codex-neutral-production.mjs",
555
555
  "bytes": 26960,
556
- "sha256": "ffb8e689df1b600bcca85159af8d59f0fad819827f48ba9a218a63dfd7a3daa2"
556
+ "sha256": "7b3249f1b35c331cf2b00ac2873a54d12fc6f61cf341bb82cec98e49ce221b92"
557
557
  },
558
558
  {
559
559
  "path": "plugins/hellolynk-codex/server/mcp-proxy.mjs",
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "contract": "hellolynk-client-npm-pack-pin-v1",
3
- "manifestSha256": "91fc0e4ecf1d6af962f1b81f193d2898f26f0d7dd71882990cd5b2b829c8e336"
3
+ "manifestSha256": "f750254b705c93ec80f1e297d7a03f2c8e3b0a3cdf73bb0073a0527ca64fdf46"
4
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hellolynk-ai/codex-plugin",
3
- "version": "0.2.101",
3
+ "version": "0.2.102",
4
4
  "description": "HelloLynk Messaging for Codex: open conversations and let your AI message other people's AI assistants.",
5
5
  "homepage": "https://hellolynk.com",
6
6
  "repository": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hellolynk-codex",
3
- "version": "0.2.101",
3
+ "version": "0.2.102",
4
4
  "description": "HelloLynk 通讯、本地未读提醒与安全文字收发的 Codex 插件。",
5
5
  "author": {
6
6
  "name": "HelloLynk local project"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hellolynk-ai/codex-plugin",
3
- "version": "0.2.101",
3
+ "version": "0.2.102",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Project-local HelloLynk Messaging, unread notification, and secure messaging plugin for Codex.",
@@ -1,4 +1,5 @@
1
1
  import { lstat, mkdir, open, readFile, rename, rm, stat } from "node:fs/promises";
2
+ import { readdirSync } from "node:fs";
2
3
  import { homedir } from "node:os";
3
4
  import { basename, dirname, isAbsolute, join, resolve } from "node:path";
4
5
  import { randomUUID } from "node:crypto";
@@ -19,12 +20,34 @@ const SAFE_SCOPE = /^[a-z][a-z0-9_.:-]{0,127}$/;
19
20
  const MAX_PROFILE_BYTES = 64 * 1024;
20
21
 
21
22
  export function defaultHelloLynkClientRoot(platform = process.platform, env = process.env) {
22
- const home = resolve(String(env.HOME || env.USERPROFILE || homedir()));
23
- if (platform === "win32") return resolve(String(env.LOCALAPPDATA || join(home, "AppData", "Local")), "HelloLynk");
23
+ const home = resolve(String((platform === "win32" ? env.USERPROFILE || env.HOME : env.HOME || env.USERPROFILE) || homedir()));
24
+ if (platform === "win32") {
25
+ const current = join(home, ".hellolynk", "hellolynk-v2");
26
+ // Once selected, another client's older installer must not move us back.
27
+ if (hasWindowsClientInstallation(current)) return current;
28
+ const existing = resolve(String(env.LOCALAPPDATA || join(home, "AppData", "Local")), "HelloLynk");
29
+ // AppData created from a packaged desktop app can be private to that app.
30
+ // Keep an existing installation; an empty failed setup is not an account.
31
+ if (hasWindowsClientInstallation(existing)) return existing;
32
+ return current;
33
+ }
24
34
  if (platform === "darwin") return join(home, "Library", "Application Support", "HelloLynk");
25
35
  return resolve(String(env.XDG_DATA_HOME || join(home, ".local", "share")), "hellolynk");
26
36
  }
27
37
 
38
+ function hasWindowsClientInstallation(root) {
39
+ for (const directory of ["profiles", "releases", "host", "credentials", "e2ee-private-keys"]) {
40
+ try {
41
+ const entries = readdirSync(join(root, directory), { withFileTypes: true });
42
+ if (entries.some((entry) => directory !== "host" || entry.name !== "runtime")) return true;
43
+ } catch (error) {
44
+ // An unreadable existing location must not silently become a fresh account.
45
+ if (error.code !== "ENOENT") return true;
46
+ }
47
+ }
48
+ return false;
49
+ }
50
+
28
51
  function safeId(value, code) {
29
52
  const normalized = String(value || "").trim();
30
53
  if (!SAFE_ID.test(normalized)) throw new Error(code);
@@ -12,10 +12,9 @@ import {
12
12
  } from "node:fs/promises";
13
13
  import { basename, dirname, isAbsolute, join, parse, resolve } from "node:path";
14
14
  import { spawn } from "node:child_process";
15
- import { homedir } from "node:os";
16
15
  import { performance } from "node:perf_hooks";
17
16
  import { withLocalProcessLock } from "./hellolynk-local-process-lock.mjs";
18
- import { readClientProfile } from "./hellolynk-client-profile.mjs";
17
+ import { defaultHelloLynkClientRoot, readClientProfile } from "./hellolynk-client-profile.mjs";
19
18
  import { assertIdentifier } from "./hellolynk-host-auth.mjs";
20
19
  import runtimeSafety from "./hellolynk-runtime-safety.cjs";
21
20
 
@@ -46,10 +45,7 @@ export function defaultNeutralHostStoreRoot(platform = process.platform, env = p
46
45
  }
47
46
  return root;
48
47
  }
49
- const home = resolve(String(env.HOME || env.USERPROFILE || homedir()));
50
- if (platform === "win32") return resolve(String(env.LOCALAPPDATA || join(home, "AppData", "Local")), "HelloLynk", "host");
51
- if (platform === "darwin") return join(home, "Library", "Application Support", "HelloLynk", "host");
52
- return resolve(String(env.XDG_DATA_HOME || join(home, ".local", "share")), "hellolynk", "host");
48
+ return join(defaultHelloLynkClientRoot(platform, env), "host");
53
49
  }
54
50
 
55
51
  export function createNeutralHostInstallationStore(options = {}) {
@@ -1,4 +1,5 @@
1
1
  import { lstat, mkdir, open, readFile, rename, rm, stat } from "node:fs/promises";
2
+ import { readdirSync } from "node:fs";
2
3
  import { homedir } from "node:os";
3
4
  import { basename, dirname, isAbsolute, join, resolve } from "node:path";
4
5
  import { randomUUID } from "node:crypto";
@@ -19,12 +20,34 @@ const SAFE_SCOPE = /^[a-z][a-z0-9_.:-]{0,127}$/;
19
20
  const MAX_PROFILE_BYTES = 64 * 1024;
20
21
 
21
22
  export function defaultHelloLynkClientRoot(platform = process.platform, env = process.env) {
22
- const home = resolve(String(env.HOME || env.USERPROFILE || homedir()));
23
- if (platform === "win32") return resolve(String(env.LOCALAPPDATA || join(home, "AppData", "Local")), "HelloLynk");
23
+ const home = resolve(String((platform === "win32" ? env.USERPROFILE || env.HOME : env.HOME || env.USERPROFILE) || homedir()));
24
+ if (platform === "win32") {
25
+ const current = join(home, ".hellolynk", "hellolynk-v2");
26
+ // Once selected, another client's older installer must not move us back.
27
+ if (hasWindowsClientInstallation(current)) return current;
28
+ const existing = resolve(String(env.LOCALAPPDATA || join(home, "AppData", "Local")), "HelloLynk");
29
+ // AppData created from a packaged desktop app can be private to that app.
30
+ // Keep an existing installation; an empty failed setup is not an account.
31
+ if (hasWindowsClientInstallation(existing)) return existing;
32
+ return current;
33
+ }
24
34
  if (platform === "darwin") return join(home, "Library", "Application Support", "HelloLynk");
25
35
  return resolve(String(env.XDG_DATA_HOME || join(home, ".local", "share")), "hellolynk");
26
36
  }
27
37
 
38
+ function hasWindowsClientInstallation(root) {
39
+ for (const directory of ["profiles", "releases", "host", "credentials", "e2ee-private-keys"]) {
40
+ try {
41
+ const entries = readdirSync(join(root, directory), { withFileTypes: true });
42
+ if (entries.some((entry) => directory !== "host" || entry.name !== "runtime")) return true;
43
+ } catch (error) {
44
+ // An unreadable existing location must not silently become a fresh account.
45
+ if (error.code !== "ENOENT") return true;
46
+ }
47
+ }
48
+ return false;
49
+ }
50
+
28
51
  function safeId(value, code) {
29
52
  const normalized = String(value || "").trim();
30
53
  if (!SAFE_ID.test(normalized)) throw new Error(code);
@@ -12,10 +12,9 @@ import {
12
12
  } from "node:fs/promises";
13
13
  import { basename, dirname, isAbsolute, join, parse, resolve } from "node:path";
14
14
  import { spawn } from "node:child_process";
15
- import { homedir } from "node:os";
16
15
  import { performance } from "node:perf_hooks";
17
16
  import { withLocalProcessLock } from "./hellolynk-local-process-lock.mjs";
18
- import { readClientProfile } from "./hellolynk-client-profile.mjs";
17
+ import { defaultHelloLynkClientRoot, readClientProfile } from "./hellolynk-client-profile.mjs";
19
18
  import { assertIdentifier } from "./hellolynk-host-auth.mjs";
20
19
  import runtimeSafety from "./hellolynk-runtime-safety.cjs";
21
20
 
@@ -46,10 +45,7 @@ export function defaultNeutralHostStoreRoot(platform = process.platform, env = p
46
45
  }
47
46
  return root;
48
47
  }
49
- const home = resolve(String(env.HOME || env.USERPROFILE || homedir()));
50
- if (platform === "win32") return resolve(String(env.LOCALAPPDATA || join(home, "AppData", "Local")), "HelloLynk", "host");
51
- if (platform === "darwin") return join(home, "Library", "Application Support", "HelloLynk", "host");
52
- return resolve(String(env.XDG_DATA_HOME || join(home, ".local", "share")), "hellolynk", "host");
48
+ return join(defaultHelloLynkClientRoot(platform, env), "host");
53
49
  }
54
50
 
55
51
  export function createNeutralHostInstallationStore(options = {}) {
@@ -34,7 +34,7 @@ export const HELLOLYNK_NEUTRAL_HOST_PROCESS_CONTRACT = "hellolynk-neutral-host-p
34
34
  export const HELLOLYNK_NEUTRAL_HOST_DISCOVERY_CONTRACT = "hellolynk-neutral-host-discovery-v1";
35
35
  // Raised with every release batch, together with the six client versions. A Host reports it
36
36
  // in its health; the higher release stays and the lower one makes room.
37
- export const HELLOLYNK_HOST_RELEASE_ORDINAL = 14;
37
+ export const HELLOLYNK_HOST_RELEASE_ORDINAL = 15;
38
38
 
39
39
  const INSTALLATION_LOCK_CONTRACT = "hellolynk-neutral-host-installation-lock-v2";
40
40
  const INSTALLATION_LOCK_MAX_BYTES = 4 * 1024;
@@ -4,7 +4,7 @@
4
4
  "files": [
5
5
  {
6
6
  "path": "release/package.json",
7
- "sha256": "5875df8d4163c0a84b3dc30265b1a5e7b977a7c92250aae013d3b513b3640c40"
7
+ "sha256": "befbca064334e8ff7f9d192f095ac1bd786a3882385a450fc2c2d2a5c9b2b7dd"
8
8
  },
9
9
  {
10
10
  "path": "neutral-host-bootstrap.mjs",
@@ -36,7 +36,7 @@
36
36
  },
37
37
  {
38
38
  "path": "core/hellolynk-client-profile.mjs",
39
- "sha256": "4b45a78b4d6c4794a1f494bd95777579c32c56a68321a1d3b484048942ae4742"
39
+ "sha256": "8be37831c96610e3d0a64848ada86488970cc6079e49764b47d8a8b2ba852269"
40
40
  },
41
41
  {
42
42
  "path": "core/hellolynk-client-update-entry.mjs",
@@ -180,7 +180,7 @@
180
180
  },
181
181
  {
182
182
  "path": "core/hellolynk-neutral-host-installation-store.mjs",
183
- "sha256": "b5f6288732af6f9b9c0c750f6002eae657dde9513fc97674f6e59200f3cc9dc6"
183
+ "sha256": "dfb6bba4c627082cd6fca8cb38dc786f905e38f3e83ccf91dbfe57e55639e8a2"
184
184
  },
185
185
  {
186
186
  "path": "core/hellolynk-neutral-host-launcher.mjs",
@@ -188,7 +188,7 @@
188
188
  },
189
189
  {
190
190
  "path": "core/hellolynk-neutral-host-process.mjs",
191
- "sha256": "af6cb6585baae477f87ee880bd044dffb4c7f71667bfa78bcbf0d4d20e7483af"
191
+ "sha256": "e744bacf65f7b86cbcf7d654189c0e07e09401083e2b6f9053b17c1c3bacd1b4"
192
192
  },
193
193
  {
194
194
  "path": "core/hellolynk-neutral-host-store-adapters.mjs",
@@ -312,7 +312,7 @@
312
312
  },
313
313
  {
314
314
  "path": "bootstrap/core/hellolynk-client-profile.mjs",
315
- "sha256": "4b45a78b4d6c4794a1f494bd95777579c32c56a68321a1d3b484048942ae4742"
315
+ "sha256": "8be37831c96610e3d0a64848ada86488970cc6079e49764b47d8a8b2ba852269"
316
316
  },
317
317
  {
318
318
  "path": "bootstrap/core/hellolynk-host-auth.mjs",
@@ -328,7 +328,7 @@
328
328
  },
329
329
  {
330
330
  "path": "bootstrap/core/hellolynk-neutral-host-installation-store.mjs",
331
- "sha256": "b5f6288732af6f9b9c0c750f6002eae657dde9513fc97674f6e59200f3cc9dc6"
331
+ "sha256": "dfb6bba4c627082cd6fca8cb38dc786f905e38f3e83ccf91dbfe57e55639e8a2"
332
332
  },
333
333
  {
334
334
  "path": "bootstrap/core/hellolynk-platform-credential-store.mjs",
@@ -344,7 +344,7 @@
344
344
  },
345
345
  {
346
346
  "path": "release/server/codex-neutral-production.mjs",
347
- "sha256": "ffb8e689df1b600bcca85159af8d59f0fad819827f48ba9a218a63dfd7a3daa2"
347
+ "sha256": "7b3249f1b35c331cf2b00ac2873a54d12fc6f61cf341bb82cec98e49ce221b92"
348
348
  },
349
349
  {
350
350
  "path": "release/server/neutral-host-adapter.mjs",
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "contract": "hellolynk-neutral-host-release-pin-v1",
3
- "manifestSha256": "5b035cb2d82e7543b801ca9d3b35a36e3f54a7b9aff9afcdf9f479926c537f56"
3
+ "manifestSha256": "3f8ad933949136ed1ebf5172c9e49ead0b0e2829650bc960eef1bdddd27c6a8f"
4
4
  }
@@ -24,9 +24,9 @@ const TRUSTED_BOOTSTRAP_FILES = Object.freeze(new Map([
24
24
  ["runtime/neutral-host-bootstrap.mjs", "53513deed7f0155a6603a1489d1609fae37776442358181ff7650d0cd9351f0a"],
25
25
  ["runtime/bootstrap/core/hellolynk-runtime-safety.cjs", "43d576d9f774409f4a735793c1503a6f397e787b10c59a4ac9cc9257299f5efe"],
26
26
  ["runtime/bootstrap/core/hellolynk-host-protected-store.mjs", "89b6e6c4ce9c6ba2984f8c301de4251da6004bdd402cc44d578a4505c21b75b1"],
27
- ["runtime/bootstrap/core/hellolynk-neutral-host-installation-store.mjs", "b5f6288732af6f9b9c0c750f6002eae657dde9513fc97674f6e59200f3cc9dc6"],
27
+ ["runtime/bootstrap/core/hellolynk-neutral-host-installation-store.mjs", "dfb6bba4c627082cd6fca8cb38dc786f905e38f3e83ccf91dbfe57e55639e8a2"],
28
28
  ["runtime/bootstrap/core/hellolynk-host-auth.mjs", "db1ec56f4e60e6450fba50188eecf89748f39f5d7a75c2456c30a6053233555d"],
29
- ["runtime/bootstrap/core/hellolynk-client-profile.mjs", "4b45a78b4d6c4794a1f494bd95777579c32c56a68321a1d3b484048942ae4742"],
29
+ ["runtime/bootstrap/core/hellolynk-client-profile.mjs", "8be37831c96610e3d0a64848ada86488970cc6079e49764b47d8a8b2ba852269"],
30
30
  ["runtime/bootstrap/core/hellolynk-platform-credential-store.mjs", "f27f5f377cc4d6d2b5664212cf8fcc4c98d910064c1677ff9c1f776df1a59dba"],
31
31
  ["runtime/bootstrap/core/hellolynk-client-core.mjs", "94bbad1d0ccee969bbffed176449e427188f1b892512a64167ab31f63d258e2b"],
32
32
  ["runtime/bootstrap/platform/windows/hellolynk-host-protected-store.ps1", "24357e8ce54090b4ec68e457f02c9e834a80f3273ef3c03a8c0fa7258797fb49"],