@hellolynk-ai/trae-work-mcp 0.4.96 → 0.4.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/hellolynk-client-setup.mjs +9 -3
- package/hellolynk-client-pack-manifest.json +16 -16
- package/hellolynk-client-pack-pin.json +1 -1
- package/integrations/trae-work/package.json +1 -1
- package/package.json +1 -1
- package/runtime/bootstrap/core/hellolynk-client-profile.mjs +25 -2
- package/runtime/bootstrap/core/hellolynk-neutral-host-installation-store.mjs +2 -6
- package/runtime/core/hellolynk-client-profile.mjs +25 -2
- package/runtime/core/hellolynk-neutral-host-installation-store.mjs +2 -6
- package/runtime/core/hellolynk-neutral-host-process.mjs +1 -1
- package/runtime/neutral-host-release-manifest.json +6 -6
- package/runtime/neutral-host-release-pin.json +1 -1
|
@@ -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 ||
|
|
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": "trae-work",
|
|
4
4
|
"packageName": "@hellolynk-ai/trae-work-mcp",
|
|
5
|
-
"version": "0.4.
|
|
5
|
+
"version": "0.4.97",
|
|
6
6
|
"workbench": {
|
|
7
7
|
"path": "runtime/workbench/hellolynk-workbench-build.json",
|
|
8
8
|
"contract": "hellolynk-shared-workbench-build-v1",
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
"files": [
|
|
13
13
|
{
|
|
14
14
|
"path": "bin/hellolynk-client-setup.mjs",
|
|
15
|
-
"bytes":
|
|
16
|
-
"sha256": "
|
|
15
|
+
"bytes": 142207,
|
|
16
|
+
"sha256": "95386fcd9092f31abb3b0441033b3b385b3c355506613da24b4557d5f9cac6ef"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"path": "bin/hellolynk-mcp-config-shape.mjs",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
{
|
|
24
24
|
"path": "integrations/trae-work/package.json",
|
|
25
25
|
"bytes": 495,
|
|
26
|
-
"sha256": "
|
|
26
|
+
"sha256": "acc248cf8fac9d1396cb120c4b80dbb73071d09cdd134c4a4e4ccb0a3079c6c6"
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"path": "integrations/trae-work/runtime/neutral-host-bootstrap.mjs",
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
{
|
|
104
104
|
"path": "package.json",
|
|
105
105
|
"bytes": 1850,
|
|
106
|
-
"sha256": "
|
|
106
|
+
"sha256": "094666acbf503b73752321f6c73c3238687cddf95b03e32faf307a351300b72f"
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
109
|
"path": "README.md",
|
|
@@ -122,8 +122,8 @@
|
|
|
122
122
|
},
|
|
123
123
|
{
|
|
124
124
|
"path": "runtime/bootstrap/core/hellolynk-client-profile.mjs",
|
|
125
|
-
"bytes":
|
|
126
|
-
"sha256": "
|
|
125
|
+
"bytes": 9573,
|
|
126
|
+
"sha256": "4528f2eb90417dbe232c4fef254beeb20c94f9216388ec721f982dd7ee4adde5"
|
|
127
127
|
},
|
|
128
128
|
{
|
|
129
129
|
"path": "runtime/bootstrap/core/hellolynk-host-auth.mjs",
|
|
@@ -142,8 +142,8 @@
|
|
|
142
142
|
},
|
|
143
143
|
{
|
|
144
144
|
"path": "runtime/bootstrap/core/hellolynk-neutral-host-installation-store.mjs",
|
|
145
|
-
"bytes":
|
|
146
|
-
"sha256": "
|
|
145
|
+
"bytes": 33944,
|
|
146
|
+
"sha256": "7b8d62ce31f47ad08f2cf50b48f3bb66cfb9c4957942184abb6d04f437b1e4a0"
|
|
147
147
|
},
|
|
148
148
|
{
|
|
149
149
|
"path": "runtime/bootstrap/core/hellolynk-platform-credential-store.mjs",
|
|
@@ -182,8 +182,8 @@
|
|
|
182
182
|
},
|
|
183
183
|
{
|
|
184
184
|
"path": "runtime/core/hellolynk-client-profile.mjs",
|
|
185
|
-
"bytes":
|
|
186
|
-
"sha256": "
|
|
185
|
+
"bytes": 9573,
|
|
186
|
+
"sha256": "4528f2eb90417dbe232c4fef254beeb20c94f9216388ec721f982dd7ee4adde5"
|
|
187
187
|
},
|
|
188
188
|
{
|
|
189
189
|
"path": "runtime/core/hellolynk-client-update-entry.mjs",
|
|
@@ -357,8 +357,8 @@
|
|
|
357
357
|
},
|
|
358
358
|
{
|
|
359
359
|
"path": "runtime/core/hellolynk-neutral-host-installation-store.mjs",
|
|
360
|
-
"bytes":
|
|
361
|
-
"sha256": "
|
|
360
|
+
"bytes": 33944,
|
|
361
|
+
"sha256": "7b8d62ce31f47ad08f2cf50b48f3bb66cfb9c4957942184abb6d04f437b1e4a0"
|
|
362
362
|
},
|
|
363
363
|
{
|
|
364
364
|
"path": "runtime/core/hellolynk-neutral-host-launcher.mjs",
|
|
@@ -368,7 +368,7 @@
|
|
|
368
368
|
{
|
|
369
369
|
"path": "runtime/core/hellolynk-neutral-host-process.mjs",
|
|
370
370
|
"bytes": 229535,
|
|
371
|
-
"sha256": "
|
|
371
|
+
"sha256": "2aaf2b604f896de0d171b20590954c8da0a4c29b2eced508b4aa0a27927b40d5"
|
|
372
372
|
},
|
|
373
373
|
{
|
|
374
374
|
"path": "runtime/core/hellolynk-neutral-host-store-adapters.mjs",
|
|
@@ -428,12 +428,12 @@
|
|
|
428
428
|
{
|
|
429
429
|
"path": "runtime/neutral-host-release-manifest.json",
|
|
430
430
|
"bytes": 15032,
|
|
431
|
-
"sha256": "
|
|
431
|
+
"sha256": "d7fd7a101ae4289a91ec390aba0339729514a0ec7f63fe4e5679902174546f22"
|
|
432
432
|
},
|
|
433
433
|
{
|
|
434
434
|
"path": "runtime/neutral-host-release-pin.json",
|
|
435
435
|
"bytes": 146,
|
|
436
|
-
"sha256": "
|
|
436
|
+
"sha256": "d41f01bbe45d5aa8c3efd15fefaca924cf8bce68e429cf5a359d58af09f26d90"
|
|
437
437
|
},
|
|
438
438
|
{
|
|
439
439
|
"path": "runtime/platform/windows/configure-agent.ps1",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hellolynk-ai/trae-work-mcp",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.97",
|
|
4
4
|
"description": "HelloLynk Messaging for TRAE Work: open conversations and let your AI message other people's AI assistants.",
|
|
5
5
|
"homepage": "https://hellolynk.com",
|
|
6
6
|
"repository": {
|
|
@@ -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")
|
|
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
|
-
|
|
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")
|
|
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
|
-
|
|
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 =
|
|
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/integrations/trae-work/package.json",
|
|
7
|
-
"sha256": "
|
|
7
|
+
"sha256": "acc248cf8fac9d1396cb120c4b80dbb73071d09cdd134c4a4e4ccb0a3079c6c6"
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
10
|
"path": "connect-activate.mjs",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
"path": "core/hellolynk-client-profile.mjs",
|
|
43
|
-
"sha256": "
|
|
43
|
+
"sha256": "4528f2eb90417dbe232c4fef254beeb20c94f9216388ec721f982dd7ee4adde5"
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
"path": "core/hellolynk-client-update-entry.mjs",
|
|
@@ -184,7 +184,7 @@
|
|
|
184
184
|
},
|
|
185
185
|
{
|
|
186
186
|
"path": "core/hellolynk-neutral-host-installation-store.mjs",
|
|
187
|
-
"sha256": "
|
|
187
|
+
"sha256": "7b8d62ce31f47ad08f2cf50b48f3bb66cfb9c4957942184abb6d04f437b1e4a0"
|
|
188
188
|
},
|
|
189
189
|
{
|
|
190
190
|
"path": "core/hellolynk-neutral-host-launcher.mjs",
|
|
@@ -192,7 +192,7 @@
|
|
|
192
192
|
},
|
|
193
193
|
{
|
|
194
194
|
"path": "core/hellolynk-neutral-host-process.mjs",
|
|
195
|
-
"sha256": "
|
|
195
|
+
"sha256": "2aaf2b604f896de0d171b20590954c8da0a4c29b2eced508b4aa0a27927b40d5"
|
|
196
196
|
},
|
|
197
197
|
{
|
|
198
198
|
"path": "core/hellolynk-neutral-host-store-adapters.mjs",
|
|
@@ -316,7 +316,7 @@
|
|
|
316
316
|
},
|
|
317
317
|
{
|
|
318
318
|
"path": "bootstrap/core/hellolynk-client-profile.mjs",
|
|
319
|
-
"sha256": "
|
|
319
|
+
"sha256": "4528f2eb90417dbe232c4fef254beeb20c94f9216388ec721f982dd7ee4adde5"
|
|
320
320
|
},
|
|
321
321
|
{
|
|
322
322
|
"path": "bootstrap/core/hellolynk-host-auth.mjs",
|
|
@@ -332,7 +332,7 @@
|
|
|
332
332
|
},
|
|
333
333
|
{
|
|
334
334
|
"path": "bootstrap/core/hellolynk-neutral-host-installation-store.mjs",
|
|
335
|
-
"sha256": "
|
|
335
|
+
"sha256": "7b8d62ce31f47ad08f2cf50b48f3bb66cfb9c4957942184abb6d04f437b1e4a0"
|
|
336
336
|
},
|
|
337
337
|
{
|
|
338
338
|
"path": "bootstrap/core/hellolynk-platform-credential-store.mjs",
|